pax_global_header00006660000000000000000000000064136260410250014511gustar00rootroot0000000000000052 comment=0d91220ab7941e50466b7e871ad26688430a2312 calamares-3.2.20/000077500000000000000000000000001362604102500135255ustar00rootroot00000000000000calamares-3.2.20/.clang-format000066400000000000000000000016071362604102500161040ustar00rootroot00000000000000--- BasedOnStyle: WebKit AlignAfterOpenBracket: Align AlignEscapedNewlines: DontAlign AllowAllParametersOfDeclarationOnNextLine: "false" AllowShortFunctionsOnASingleLine: Inline AllowShortIfStatementsOnASingleLine: "false" AllowShortLoopsOnASingleLine: "false" AlwaysBreakAfterReturnType: TopLevelDefinitions AlwaysBreakTemplateDeclarations: Yes BinPackArguments: "false" BinPackParameters: "false" BreakBeforeBraces: Allman BreakBeforeTernaryOperators: "true" BreakConstructorInitializers: BeforeComma ColumnLimit: 120 Cpp11BracedListStyle: "false" FixNamespaceComments: "true" IncludeBlocks: Preserve IndentWidth: "4" MaxEmptyLinesToKeep: "2" NamespaceIndentation: None PointerAlignment: Left ReflowComments: "false" SortIncludes: "true" SpaceAfterCStyleCast: "false" SpacesBeforeTrailingComments: "2" SpacesInAngles: "true" SpacesInParentheses: "true" SpacesInSquareBrackets: "true" Standard: Cpp11 calamares-3.2.20/3rdparty/000077500000000000000000000000001362604102500152755ustar00rootroot00000000000000calamares-3.2.20/3rdparty/kdsingleapplicationguard/000077500000000000000000000000001362604102500223445ustar00rootroot00000000000000calamares-3.2.20/3rdparty/kdsingleapplicationguard/LICENSE.LGPL.txt000066400000000000000000000621261362604102500247330ustar00rootroot00000000000000 The KD Tools Library is Copyright (C) 2001-2010 Klaralvdalens Datakonsult AB. You may use, distribute and copy the KD Tools Library under the terms of GNU Library General Public License version 2, which is displayed below. ------------------------------------------------------------------------- GNU LIBRARY GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the library GPL. It is numbered 2 because it goes with version 2 of the ordinary GPL.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Library General Public License, applies to some specially designated Free Software Foundation software, and to any other libraries whose authors decide to use it. You can use it for your libraries, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library, or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link a program with the library, you must provide complete object files to the recipients so that they can relink them with the library, after making changes to the library and recompiling it. And you must show them these terms so they know their rights. Our method of protecting your rights has two steps: (1) copyright the library, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the library. Also, for each distributor's protection, we want to make certain that everyone understands that there is no warranty for this free library. If the library is modified by someone else and passed on, we want its recipients to know that what they have is not the original version, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that companies distributing free software will individually obtain patent licenses, thus in effect transforming the program into proprietary software. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License, which was designed for utility programs. This license, the GNU Library General Public License, applies to certain designated libraries. This license is quite different from the ordinary one; be sure to read it in full, and don't assume that anything in it is the same as in the ordinary license. The reason we have a separate public license for some libraries is that they blur the distinction we usually make between modifying or adding to a program and simply using it. Linking a program with a library, without changing the library, is in some sense simply using the library, and is analogous to running a utility program or application program. However, in a textual and legal sense, the linked executable is a combined work, a derivative of the original library, and the ordinary General Public License treats it as such. Because of this blurred distinction, using the ordinary General Public License for libraries did not effectively promote software sharing, because most developers did not use the libraries. We concluded that weaker conditions might promote sharing better. However, unrestricted linking of non-free programs would deprive the users of those programs of all benefit from the free status of the libraries themselves. This Library General Public License is intended to permit developers of non-free programs to use free libraries, while preserving your freedom as a user of such programs to change the free libraries that are incorporated in them. (We have not seen how to achieve this as regards changes in header files, but we have achieved it as regards changes in the actual functions of the Library.) The hope is that this will lead to faster development of free libraries. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, while the latter only works together with the library. Note that it is possible for a library to be covered by the ordinary General Public License rather than by this special one. GNU LIBRARY GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Library General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also compile or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. c) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. d) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Library General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY 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 LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! calamares-3.2.20/3rdparty/kdsingleapplicationguard/kdlockedsharedmemorypointer.cpp000066400000000000000000000313551362604102500306600ustar00rootroot00000000000000/* * SPDX-License-Identifier: LGPL-2.0-only * License-Filename: LICENSES/LGPLv2-KDAB * * The KD Tools Library is Copyright (C) 2001-2010 Klaralvdalens Datakonsult AB. */ #include "kdlockedsharedmemorypointer.h" #if QT_VERSION >= 0x040400 || defined( DOXYGEN_RUN ) #ifndef QT_NO_SHAREDMEMORY namespace kdtools { } using namespace kdtools; KDLockedSharedMemoryPointerBase::KDLockedSharedMemoryPointerBase( QSharedMemory * m ) : locker( m ), mem( m ) { } KDLockedSharedMemoryPointerBase::KDLockedSharedMemoryPointerBase( QSharedMemory & m ) : locker( &m ), mem( &m ) { } KDLockedSharedMemoryPointerBase::~KDLockedSharedMemoryPointerBase() {} void * KDLockedSharedMemoryPointerBase::get() { return mem ? mem->data() : 0 ; } const void * KDLockedSharedMemoryPointerBase::get() const { return mem ? mem->data() : 0 ; } size_t KDLockedSharedMemoryPointerBase::byteSize() const { return mem ? mem->size() : 0; } /*! \class KDLockedSharedMemoryPointer \ingroup core raii smartptr \brief Locking pointer for Qt shared memory segments \since_c 2.1 (The exception safety of this class has not been evaluated yet.) KDLockedSharedMemoryPointer is a smart immutable pointer, which gives convenient and safe access to a QSharedMemory data segment. The content of a KDLockedSharedMemoryPointer cannot be changed during it's lifetime. You can use this class like a normal pointer to the shared memory segment and be sure it's locked while accessing it. \note You can only put simple types/structs/classes into it. structs and classes shall not contain any other pointers. See the documentation of QSharedMemory for details. */ /*! \fn KDLockedSharedMemoryPointer::KDLockedSharedMemoryPointer( QSharedMemory * mem ) Constructor. Constructs a KDLockedSharedMemory pointer which points to the data segment of \a mem. The constructor locks \a mem. If the memory segment is already locked by another process, this constructor blocks until the lock is released. \post data() == mem->data() and the memory segment has been locked */ /*! \fn KDLockedSharedMemoryPointer::KDLockedSharedMemoryPointer( QSharedMemory & mem ) \overload \post data() == mem.data() and the memory segment has been locked */ /*! \fn KDLockedSharedMemoryPointer::~KDLockedSharedMemoryPointer() Destructor. Unlocks the shared memory segment. \post The shared memory segment has been unlocked */ /*! \fn T * KDLockedSharedMemoryPointer::get() \returns a pointer to the contained object. */ /*! \fn const T * KDLockedSharedMemoryPointer::get() const \returns a const pointer to the contained object \overload */ /*! \fn T * KDLockedSharedMemoryPointer::data() Equivalent to get(), provided for consistency with Qt naming conventions. */ /*! \fn const T * KDLockedSharedMemoryPointer::data() const \overload */ /*! \fn T & KDLockedSharedMemoryPointer::operator*() Dereference operator. Returns \link get() *get()\endlink. */ /*! \fn const T & KDLockedSharedMemoryPointer::operator*() const Dereference operator. Returns \link get() *get()\endlink. \overload */ /*! \fn T * KDLockedSharedMemoryPointer::operator->() Member-by-pointer operator. Returns get(). */ /*! \fn const T * KDLockedSharedMemoryPointer::operator->() const Member-by-pointer operator. Returns get(). \overload */ /*! \class KDLockedSharedMemoryArray \ingroup core raii smartptr \brief Locking array pointer to Qt shared memory segments \since_c 2.1 (The exception safety of this class has not been evaluated yet.) KDLockedSharedMemoryArray is a smart immutable pointer, which gives convenient and safe access to array data stored in a QSharedMemory data segment. The content of a KDLockedSharedMemoryArray cannot be changed during it's lifetime. You can use this class like a normal pointer to the shared memory segment and be sure it's locked while accessing it. \note You can only put arrays of simple types/structs/classes into it. structs and classes shall not contain any other pointers. See the documentation of QSharedMemory for details. \sa KDLockedSharedMemoryPointer */ /*! \fn KDLockedSharedMemoryArray::KDLockedSharedMemoryArray( QSharedMemory* mem ) Constructor. Constructs a KDLockedSharedMemoryArray which points to the data segment of \a mem. The constructor locks \a mem. If the memory segment is already locked by another process, this constructor blocks until the lock is release. \post get() == mem->data() and the memory segment has been locked */ /*! \fn KDLockedSharedMemoryArray::KDLockedSharedMemoryArray( QSharedMemory& mem ) \overload \post get() == mem->data() and the memory segment has been locked */ /*! \typedef KDLockedSharedMemoryArray::size_type Typedef for std::size_t. Provided for STL compatibility. */ /*! \typedef KDLockedSharedMemoryArray::difference_type Typedef for std::ptrdiff_t. Provided for STL compatibility. */ /*! \typedef KDLockedSharedMemoryArray::iterator Typedef for T*. Provided for STL compatibility. \since_t 2.2 */ /*! \typedef KDLockedSharedMemoryArray::const_iterator Typedef for const T*. Provided for STL compatibility. \since_t 2.2 */ /*! \typedef KDLockedSharedMemoryArray::reverse_iterator Typedef for std::reverse_iterator< \link KDLockedSharedMemoryArray::iterator iterator\endlink >. Provided for STL compatibility. \since_t 2.2 */ /*! \typedef KDLockedSharedMemoryArray::const_reverse_iterator Typedef for std::reverse_iterator< \link KDLockedSharedMemoryArray::const_iterator const_iterator\endlink >. Provided for STL compatibility. \since_t 2.2 */ /*! \fn KDLockedSharedMemoryArray::iterator KDLockedSharedMemoryArray::begin() Returns an \link KDLockedSharedMemoryArray::iterator iterator\endlink pointing to the first item of the array. \since_f 2.2 */ /*! \fn KDLockedSharedMemoryArray::const_iterator KDLockedSharedMemoryArray::begin() const \overload \since_f 2.2 */ /*! \fn KDLockedSharedMemoryArray::iterator KDLockedSharedMemoryArray::end() Returns an \link KDLockedSharedMemoryArray::iterator iterator\endlink pointing to the item after the last item of the array. \since_f 2.2 */ /*! \fn KDLockedSharedMemoryArray::const_iterator KDLockedSharedMemoryArray::end() const \overload \since_f 2.2 */ /*! \fn KDLockedSharedMemoryArray::reverse_iterator KDLockedSharedMemoryArray::rbegin() Returns an \link KDLockedSharedMemoryArray::reverse_iterator reverse_iterator\endlink pointing to the item after the last item of the array. \since_f 2.2 */ /*! \fn KDLockedSharedMemoryArray::const_reverse_iterator KDLockedSharedMemoryArray::rbegin() const \overload \since_f 2.2 */ /*! \fn KDLockedSharedMemoryArray::reverse_iterator KDLockedSharedMemoryArray::rend() Returns an \link KDLockedSharedMemoryArray::reverse_iterator reverse_iterator\endlink pointing to the first item of the array. \since_f 2.2 */ /*! \fn KDLockedSharedMemoryArray::const_reverse_iterator KDLockedSharedMemoryArray::rend() const \overload \since_f 2.2 */ /*! \fn KDLockedSharedMemoryArray::size_type KDLockedSharedMemoryArray::size() const Returns the size of this array. The size is calculated from the storage size of T and the size of the shared memory segment. \since_f 2.2 */ /*! \fn T& KDLockedSharedMemoryArray::operator[]( difference_type n ) Array access operator. Returns a reference to the item at index position \a n. */ /*! \fn const T& KDLockedSharedMemoryArray::operator[]( difference_type n ) const \overload */ /*! \fn T& KDLockedSharedMemoryArray::front() Returns a reference to the first item in the array. This is the same as operator[](0). */ /*! \fn const T& KDLockedSharedMemoryArray::front() const \overload */ /*! \fn T& KDLockedSharedMemoryArray::back() Returns a reference to the last item in the array. This is the same as operator[](size()-1). \since_f 2.2 */ /*! \fn const T& KDLockedSharedMemoryArray::back() const \overload \since_f 2.2 */ #ifdef eKDTOOLSCORE_UNITTESTS #include #include #include namespace { struct TestStruct { TestStruct( uint nn = 0 ) : n( nn ), f( 0.0 ), c( '\0' ), b( false ) { } uint n; double f; char c; bool b; }; bool operator==( const TestStruct& lhs, const TestStruct& rhs ) { return lhs.n == rhs.n && lhs.f == rhs.f && lhs.c == rhs.c && lhs.b == rhs.b; } class TestThread : public QThread { public: TestThread( const QString& key ) : mem( key ) { mem.attach(); } void run() { while( true ) { msleep( 100 ); kdtools::KDLockedSharedMemoryPointer< TestStruct > p( &mem ); if( !p->b ) continue; p->n = 5; p->f = 3.14; p->c = 'A'; p->b = false; return; } } QSharedMemory mem; }; bool isConst( TestStruct* ) { return false; } bool isConst( const TestStruct* ) { return true; } } KDAB_UNITTEST_SIMPLE( KDLockedSharedMemoryPointer, "kdcoretools" ) { const QString key = QUuid::createUuid(); QSharedMemory mem( key ); const bool created = mem.create( sizeof( TestStruct ) ); assertTrue( created ); if ( !created ) return; // don't execute tests if shm coulnd't be created // On Windows, shared mem is only available in increments of page // size (4k), so don't fail if the segment is larger: const unsigned long mem_size = mem.size(); assertGreaterOrEqual( mem_size, sizeof( TestStruct ) ); { kdtools::KDLockedSharedMemoryPointer< TestStruct > p( &mem ); assertTrue( p ); *p = TestStruct(); assertEqual( p->n, 0u ); assertEqual( p->f, 0.0 ); assertEqual( p->c, '\0' ); assertFalse( p->b ); } { TestThread thread( key ); assertEqual( thread.mem.key().toStdString(), key.toStdString() ); assertEqual( static_cast< unsigned long >( thread.mem.size() ), mem_size ); thread.start(); assertTrue( thread.isRunning() ); thread.wait( 2000 ); assertTrue( thread.isRunning() ); { kdtools::KDLockedSharedMemoryPointer< TestStruct > p( &mem ); p->b = true; } thread.wait( 2000 ); assertFalse( thread.isRunning() ); } { kdtools::KDLockedSharedMemoryPointer< TestStruct > p( &mem ); assertEqual( p->n, 5u ); assertEqual( p->f, 3.14 ); assertEqual( p->c, 'A' ); assertFalse( p->b ); } { kdtools::KDLockedSharedMemoryPointer< TestStruct > p( mem ); assertEqual( mem.data(), p.get() ); assertEqual( p.get(), p.operator->() ); assertEqual( p.get(), &(*p) ); assertEqual( p.get(), p.data() ); assertFalse( isConst( p.get() ) ); } { const kdtools::KDLockedSharedMemoryPointer< TestStruct > p( &mem ); assertEqual( mem.data(), p.get() ); assertEqual( p.get(), p.operator->() ); assertEqual( p.get(), &(*p) ); assertEqual( p.get(), p.data() ); assertTrue( isConst( p.get() ) ); } { QSharedMemory mem2( key + key ); const bool created2 = mem2.create( 16 * sizeof( TestStruct ) ); assertTrue( created2 ); if ( !created2 ) return; // don't execute tests if shm coulnd't be created kdtools::KDLockedSharedMemoryArray a( mem2 ); assertTrue( a ); assertEqual( a.get(), mem2.data() ); assertEqual( &a[0], a.get() ); a[1] = a[0]; assertTrue( a[0] == a[1] ); TestStruct ts; ts.n = 5; ts.f = 3.14; a[0] = ts; assertFalse( a[0] == a[1] ); assertEqual( a.front().n, ts.n ); assertEqual( a[0].f, ts.f ); a[0].n = 10; assertEqual( a.front().n, 10u ); ts = a[0]; assertEqual( ts.n, 10u ); std::vector< TestStruct > v; for( uint i = 0; i < a.size(); ++i ) v.push_back( TestStruct( i ) ); std::copy( v.begin(), v.end(), a.begin() ); for( uint i = 0; i < a.size(); ++i ) assertEqual( a[ i ].n, i ); assertEqual( a.front().n, 0u ); assertEqual( a.back().n, a.size() - 1 ); std::copy( v.begin(), v.end(), a.rbegin() ); for( uint i = 0; i < a.size(); ++i ) assertEqual( a[ i ].n, a.size() - 1 - i ); assertEqual( a.front().n, a.size() - 1 ); assertEqual( a.back().n, 0u ); } } #endif // KDTOOLSCORE_UNITTESTS #endif // QT_NO_SHAREDMEMORY #endif // QT_VERSION >= 0x040400 || defined( DOXYGEN_RUN ) calamares-3.2.20/3rdparty/kdsingleapplicationguard/kdlockedsharedmemorypointer.h000066400000000000000000000101721362604102500303170ustar00rootroot00000000000000/* * SPDX-License-Identifier: LGPL-2.0-only * License-Filename: LICENSES/LGPLv2-KDAB * * The KD Tools Library is Copyright (C) 2001-2010 Klaralvdalens Datakonsult AB. */ #ifndef __KDTOOLS__CORE__KDLOCKEDSHAREDMEMORYPOINTER_H__ #define __KDTOOLS__CORE__KDLOCKEDSHAREDMEMORYPOINTER_H__ #include #if QT_VERSION >= 0x040400 || defined( DOXYGEN_RUN ) #ifndef QT_NO_SHAREDMEMORY #include "kdsharedmemorylocker.h" #include #include #ifndef DOXYGEN_RUN namespace kdtools { #endif class KDLockedSharedMemoryPointerBase { protected: explicit KDLockedSharedMemoryPointerBase( QSharedMemory * mem ); explicit KDLockedSharedMemoryPointerBase( QSharedMemory & mem ); ~KDLockedSharedMemoryPointerBase(); // PENDING(marc) do we really want const propagation here? I // usually declare all my RAII objects const... void * get(); const void * get() const; KDAB_IMPLEMENT_SAFE_BOOL_OPERATOR( get() ) size_t byteSize() const; private: KDSharedMemoryLocker locker; QSharedMemory * const mem; }; template< typename T> class MAKEINCLUDES_EXPORT KDLockedSharedMemoryPointer : KDLockedSharedMemoryPointerBase { KDAB_DISABLE_COPY( KDLockedSharedMemoryPointer ); public: explicit KDLockedSharedMemoryPointer( QSharedMemory * m ) : KDLockedSharedMemoryPointerBase( m ) {} explicit KDLockedSharedMemoryPointer( QSharedMemory & m ) : KDLockedSharedMemoryPointerBase( m ) {} T * get() { return static_cast( KDLockedSharedMemoryPointerBase::get() ); } const T * get() const { return static_cast( KDLockedSharedMemoryPointerBase::get() ); } T * data() { return static_cast( get() ); } const T * data() const { return static_cast( get() ); } T & operator*() { assert( get() ); return *get(); } const T & operator*() const { assert( get() ); return *get(); } T * operator->() { return get(); } const T * operator->() const { return get(); } KDAB_USING_SAFE_BOOL_OPERATOR( KDLockedSharedMemoryPointerBase ) }; template class MAKEINCLUDES_EXPORT KDLockedSharedMemoryArray : KDLockedSharedMemoryPointerBase { KDAB_DISABLE_COPY( KDLockedSharedMemoryArray ); public: explicit KDLockedSharedMemoryArray( QSharedMemory * m ) : KDLockedSharedMemoryPointerBase( m ) {} explicit KDLockedSharedMemoryArray( QSharedMemory & m ) : KDLockedSharedMemoryPointerBase( m ) {} typedef std::size_t size_type; typedef std::ptrdiff_t difference_type; typedef T* iterator; typedef const T* const_iterator; typedef std::reverse_iterator< const_iterator > const_reverse_iterator; typedef std::reverse_iterator< iterator > reverse_iterator; iterator begin() { return get(); } const_iterator begin() const { return get(); } iterator end() { return begin() + size(); } const_iterator end() const { return begin() + size(); } reverse_iterator rbegin() { return reverse_iterator( end() ); } const_reverse_iterator rbegin() const { return reverse_iterator( end() ); } reverse_iterator rend() { return reverse_iterator( begin() ); } const_reverse_iterator rend() const { return const_reverse_iterator( begin() ); } size_type size() const { return byteSize() / sizeof( T ); } T * get() { return static_cast( KDLockedSharedMemoryPointerBase::get() ); } const T * get() const { return static_cast( KDLockedSharedMemoryPointerBase::get() ); } T & operator[]( difference_type n ) { assert( get() ); return *(get()+n); } const T & operator[]( difference_type n ) const { assert( get() ); return *(get()+n); } T & front() { assert( get() ); return *get(); } const T & front() const { assert( get() ); return *get(); } T & back() { assert( get() ); return *( get() + size() - 1 ); } const T & back() const { assert( get() ); return *( get() + size() - 1 ); } KDAB_USING_SAFE_BOOL_OPERATOR( KDLockedSharedMemoryPointerBase ) }; #ifndef DOXYGEN_RUN } #endif #endif /* QT_NO_SHAREDMEMORY */ #endif /* QT_VERSION >= 0x040400 || defined( DOXYGEN_RUN ) */ #endif /* __KDTOOLS__CORE__KDLOCKEDSHAREDMEMORYPOINTER_H__ */ calamares-3.2.20/3rdparty/kdsingleapplicationguard/kdsharedmemorylocker.cpp000066400000000000000000000020661362604102500272720ustar00rootroot00000000000000/* * SPDX-License-Identifier: LGPL-2.0-only * License-Filename: LICENSES/LGPLv2-KDAB * * The KD Tools Library is Copyright (C) 2001-2010 Klaralvdalens Datakonsult AB. */ #include "kdsharedmemorylocker.h" #if QT_VERSION >= 0x040400 || defined( DOXYGEN_RUN ) #include using namespace kdtools; /*! \class KDSharedMemoryLocker \ingroup raii core \brief Exception-safe and convenient wrapper around QSharedMemory::lock() */ /** * Constructor. Locks the shared memory segment \a mem. * If another process has locking the segment, this constructor blocks * until the lock is released. The memory segments needs to be properly created or attached. */ KDSharedMemoryLocker::KDSharedMemoryLocker( QSharedMemory* mem ) : mem( mem ) { mem->lock(); } /** * Destructor. Unlocks the shared memory segment associated with this * KDSharedMemoryLocker. */ KDSharedMemoryLocker::~KDSharedMemoryLocker() { mem->unlock(); } #ifdef KDAB_EVAL #include KDAB_EVAL static const EvalDialogChecker evalChecker( "KD Tools", false ); #endif #endif calamares-3.2.20/3rdparty/kdsingleapplicationguard/kdsharedmemorylocker.h000066400000000000000000000014441362604102500267360ustar00rootroot00000000000000/* * SPDX-License-Identifier: LGPL-2.0-only * License-Filename: LICENSES/LGPLv2-KDAB * * The KD Tools Library is Copyright (C) 2001-2010 Klaralvdalens Datakonsult AB. */ #ifndef __KDTOOLS__CORE__KDSHAREDMEMORYLOCKER_H #define __KDTOOLS__CORE__KDSHAREDMEMORYLOCKER_H #include "kdtoolsglobal.h" #if QT_VERSION < 0x040400 && !defined( DOXYGEN_RUN ) #ifdef Q_CC_GNU #warning "Can't use KDTools KDSharedMemoryLocker with Qt versions prior to 4.4" #endif #else class QSharedMemory; #ifndef DOXYGEN_RUN namespace kdtools { #endif class KDTOOLSCORE_EXPORT KDSharedMemoryLocker { Q_DISABLE_COPY( KDSharedMemoryLocker ) public: KDSharedMemoryLocker( QSharedMemory* mem ); ~KDSharedMemoryLocker(); private: QSharedMemory* const mem; }; #ifndef DOXYGEN_RUN } #endif #endif #endif calamares-3.2.20/3rdparty/kdsingleapplicationguard/kdsingleapplicationguard.cpp000066400000000000000000001144001362604102500301170ustar00rootroot00000000000000/* * SPDX-License-Identifier: LGPL-2.0-only * License-Filename: LICENSES/LGPLv2-KDAB * * The KD Tools Library is Copyright (C) 2001-2010 Klaralvdalens Datakonsult AB. */ #include "kdsingleapplicationguard.h" #if QT_VERSION >= 0x040400 || defined(DOXYGEN_RUN) #ifndef QT_NO_SHAREDMEMORY #include "kdsharedmemorylocker.h" #include "kdlockedsharedmemorypointer.h" #include #include #include #include #include #include #include #include #include #include #include #ifndef Q_WS_WIN #include #include #endif #ifdef Q_WS_WIN #include #ifndef _SSIZE_T_DEFINED typedef signed int ssize_t; #endif #endif using namespace kdtools; #ifndef KDSINGLEAPPLICATIONGUARD_TIMEOUT_SECONDS #define KDSINGLEAPPLICATIONGUARD_TIMEOUT_SECONDS 10 #endif #ifndef KDSINGLEAPPLICATIONGUARD_NUMBER_OF_PROCESSES #define KDSINGLEAPPLICATIONGUARD_NUMBER_OF_PROCESSES 10 #endif #ifndef KDSINGLEAPPLICATIONGUARD_MAX_COMMAND_LINE #define KDSINGLEAPPLICATIONGUARD_MAX_COMMAND_LINE 32768 #endif static unsigned int KDSINGLEAPPLICATIONGUARD_SHM_VERSION = 0; Q_GLOBAL_STATIC_WITH_ARGS( int, registerInstanceType, (qRegisterMetaType()) ) /*! \class KDSingleApplicationGuard::Instance \relates KDSingleApplicationGuard \ingroup core \brief Information about instances a KDSingleApplicationGuard knows about Instance represents instances of applications under KDSingleApplicationGuard protection, and allows access to their pid() and the arguments() they were started with. */ class KDSingleApplicationGuard::Instance::Private : public QSharedData { friend class ::KDSingleApplicationGuard::Instance; public: Private( const QStringList & args, bool truncated, qint64 pid ) : pid( pid ), arguments( args ), truncated( truncated ) {} private: qint64 pid; QStringList arguments; bool truncated; }; struct ProcessInfo; /*! \internal */ class KDSingleApplicationGuard::Private { friend class ::KDSingleApplicationGuard; friend class ::KDSingleApplicationGuard::Instance; friend struct ::ProcessInfo; KDSingleApplicationGuard * const q; public: Private( Policy policy, KDSingleApplicationGuard* qq ); ~Private(); void create( const QStringList& arguments ); bool checkOperational( const char * function, const char * act ) const; bool checkOperationalPrimary( const char * function, const char * act ) const; struct segmentheader { size_t size : 16; }; static void sharedmem_free( char* ); static char* sharedmem_malloc( size_t size ); private: void shutdownInstance(); void poll(); private: static KDSingleApplicationGuard* primaryInstance; private: QBasicTimer timer; QSharedMemory mem; int id; Policy policy; bool operational; bool exitRequested; }; /*! \internal */ KDSingleApplicationGuard::Instance::Instance( const QStringList & args, bool truncated, qint64 p ) : d( new Private( args, truncated, p ) ) { d->ref.ref(); (void)registerInstanceType(); } /*! Default constructor. Constructs in Instance that is \link isNull() null\endlink. \sa isNull() */ KDSingleApplicationGuard::Instance::Instance() : d( 0 ) {} /*! Copy constructor. */ KDSingleApplicationGuard::Instance::Instance( const Instance & other ) : d( other.d ) { if ( d ) d->ref.ref(); } /*! Destructor. */ KDSingleApplicationGuard::Instance::~Instance() { if ( d && !d->ref.deref() ) delete d; } /*! \fn KDSingleApplicationGuard::Instance::swap( Instance & other ) Swaps the contents of this and \a other. This function never throws exceptions. */ /*! \fn KDSingleApplicationGuard::Instance::operator=( Instance other ) Assigns the contents of \a other to this. This function is strongly exception-safe. */ /*! \fn std::swap( KDSingleApplicationGuard::Instance & lhs, KDSingleApplicationGuard::Instance & rhs ) \relates KDSingleApplicationGuard::Instance Specialisation of std::swap() for KDSingleApplicationGuard::Instance. Calls swap(). */ /*! \fn qSwap( KDSingleApplicationGuard::Instance & lhs, KDSingleApplicationGuard::Instance & rhs ) \relates KDSingleApplicationGuard::Instance Specialisation of qSwap() for KDSingleApplicationGuard::Instance. Calls swap(). */ /*! \fn KDSingleApplicationGuard::Instance::isNull() const Returns whether this instance is null. */ /*! Returns whether this instance is valid. A valid instance is neither null, nor does it have a negative PID. */ bool KDSingleApplicationGuard::Instance::isValid() const { return d && d->pid >= 0 ; } /*! Returns whether the #arguments are complete (\c false) or not (\c true), e.g. because they have been truncated due to limited storage space. \sa arguments() */ bool KDSingleApplicationGuard::Instance::areArgumentsTruncated() const { return d && d->truncated; } /*! Returns the arguments that this instance was started with. \sa areArgumentsTruncated() */ const QStringList & KDSingleApplicationGuard::Instance::arguments() const { if ( d ) return d->arguments; static const QStringList empty; return empty; } /*! Returns the process-id (PID) of this instance. */ qint64 KDSingleApplicationGuard::Instance::pid() const { if ( d ) return d->pid; else return -1; } /*! \class KDSingleApplicationGuard KDSingleApplicationGuard \ingroup core \brief A guard to protect an application from having several instances. KDSingleApplicationGuard can be used to make sure only one instance of an application is running at the same time. \note As KDSingleApplicationGuard currently uses QSharedMemory, Qt 4.4 or later is required. */ /*! \fn void KDSingleApplicationGuard::instanceStarted(const KDSingleApplicationGuard::Instance & instance) This signal is emitted by the primary instance whenever another instance \a instance started. */ /*! \fn void KDSingleApplicationGuard::instanceExited(const KDSingleApplicationGuard::Instance & instance) This signal is emitted by the primary instance whenever another instance \a instance exited. */ /*! \fn void KDSingleApplicationGuard::raiseRequested() This signal is emitted when the current running application is requested to raise its main window. */ /*! \fn void KDSingleApplicationGuard::exitRequested() This signal is emitted when the current running application has been asked to exit by calling kill on the instance. */ /*! \fn void KDSingleApplicationGuard::becamePrimaryInstance() This signal is emitted when the current running application becomes the new primary application. The old primary application has quit. */ /*! \fn void KDSingleApplicationGuard::becameSecondaryInstance() This signal is emmited when the primary instance became secondary instance. This happens when the instance doesn't update its status for some (default 10) seconds. Another instance got primary instance in that case. */ /*! \fn void KDSingleApplicationGuard::policyChanged( KDSingleApplicationGuard::Policy policy ) This signal is emitted when the #policy of the system changes. */ enum Command { NoCommand = 0x00, ExitedInstance = 0x01, NewInstance = 0x02, FreeInstance = 0x04, ShutDownCommand = 0x08, KillCommand = 0x10, BecomePrimaryCommand = 0x20, RaiseCommand = 0x40 }; static const quint16 PrematureEndOfOptions = -1; static const quint16 RegularEndOfOptions = -2; struct ProcessInfo { static const size_t MarkerSize = sizeof(quint16); explicit ProcessInfo( Command c = FreeInstance, const QStringList& arguments = QStringList(), qint64 p = -1 ) : pid( p ), command( c ), timestamp( 0 ), commandline( 0 ) { setArguments( arguments ); } void setArguments( const QStringList & arguments ); QStringList arguments( bool * prematureEnd ) const; qint64 pid; quint32 command; quint32 timestamp; char* commandline; }; static inline bool operator==( const ProcessInfo & lhs, const ProcessInfo & rhs ) { return lhs.command == rhs.command && ( lhs.commandline == rhs.commandline || ( lhs.commandline != 0 && rhs.commandline != 0 && ::strcmp( lhs.commandline, rhs.commandline ) == 0 ) ); } static inline bool operator!=( const ProcessInfo & lhs, const ProcessInfo & rhs ) { return !operator==( lhs, rhs ); } /*! This struct contains information about the managed process system. \internal */ struct InstanceRegister { explicit InstanceRegister( KDSingleApplicationGuard::Policy policy = KDSingleApplicationGuard::NoPolicy ) : policy( policy ), maxInstances( KDSINGLEAPPLICATIONGUARD_NUMBER_OF_PROCESSES ), version( 0 ) { std::fill_n( commandLines, KDSINGLEAPPLICATIONGUARD_MAX_COMMAND_LINE, 0 ); ::memcpy( magicCookie, "kdsingleapp", 12 ); } /*! Returns whether this register was properly initialized by the first instance. */ bool isValid() const { return ::strcmp( magicCookie, "kdsingleapp" ) == 0; } char magicCookie[ 12 ]; unsigned int policy : 8; quint32 maxInstances : 20; unsigned int version : 4; ProcessInfo info[ KDSINGLEAPPLICATIONGUARD_NUMBER_OF_PROCESSES ]; char commandLines[ KDSINGLEAPPLICATIONGUARD_MAX_COMMAND_LINE ]; Q_DISABLE_COPY( InstanceRegister ) }; void ProcessInfo::setArguments( const QStringList & arguments ) { if( commandline != 0 ) KDSingleApplicationGuard::Private::sharedmem_free( commandline ); commandline = 0; if( arguments.isEmpty() ) return; size_t totalsize = MarkerSize; for ( const QString& arg : arguments ) { const QByteArray utf8 = arg.toUtf8(); totalsize += utf8.size() + MarkerSize; } InstanceRegister* const reg = reinterpret_cast( KDSingleApplicationGuard::Private::primaryInstance->d->mem.data() ); this->commandline = KDSingleApplicationGuard::Private::sharedmem_malloc( totalsize ); if( this->commandline == 0 ) { qWarning("KDSingleApplicationguard: out of memory when trying to save arguments.\n"); return; } char* const commandline = this->commandline + reinterpret_cast(reg->commandLines); int argpos = 0; for ( const QString & arg : arguments ) { const QByteArray utf8 = arg.toUtf8(); const int required = MarkerSize + utf8.size() + MarkerSize ; const int available = KDSINGLEAPPLICATIONGUARD_MAX_COMMAND_LINE - argpos ; if ( required > available || utf8.size() > std::numeric_limits::max() ) { // write a premature-eoo marker, and quit memcpy( commandline + argpos, &PrematureEndOfOptions, MarkerSize ); argpos += MarkerSize; qWarning( "KDSingleApplicationGuard: argument list is too long (bytes required: %d, used: %d, available: %d", required, argpos - 2, available ); return; } else { const quint16 len16 = utf8.size(); // write the size of the data... memcpy( commandline + argpos, &len16, MarkerSize ); argpos += MarkerSize; // then the data memcpy( commandline + argpos, utf8.data(), len16 ); argpos += len16; } } const ssize_t available = KDSINGLEAPPLICATIONGUARD_MAX_COMMAND_LINE - argpos; assert( available >= static_cast( MarkerSize ) ); memcpy( commandline + argpos, &RegularEndOfOptions, MarkerSize ); argpos += MarkerSize; } QStringList ProcessInfo::arguments( bool * prematureEnd ) const { QStringList result; if( commandline == 0 ) { if( prematureEnd ) *prematureEnd = true; return result; } InstanceRegister* const reg = reinterpret_cast( KDSingleApplicationGuard::Private::primaryInstance->d->mem.data() ); const char* const commandline = this->commandline + reinterpret_cast(reg->commandLines); int argpos = 0; while ( true ) { const int available = KDSINGLEAPPLICATIONGUARD_MAX_COMMAND_LINE - argpos ; assert( available >= 2 ); quint16 marker; memcpy( &marker, commandline + argpos, MarkerSize ); argpos += MarkerSize; if ( marker == PrematureEndOfOptions ) { if ( prematureEnd ) *prematureEnd = true; break; } if ( marker == RegularEndOfOptions ) { if ( prematureEnd ) *prematureEnd = false; break; } const int requested = MarkerSize + marker + MarkerSize ; if ( requested > available ) { const long long int p = pid; qWarning( "KDSingleApplicationGuard: inconsistency detected when parsing command-line argument for process %lld", p ); if ( prematureEnd ) *prematureEnd = true; break; } result.push_back( QString::fromUtf8( commandline + argpos, marker ) ); argpos += marker; } return result; } KDSingleApplicationGuard::Private::~Private() { if( primaryInstance == q ) primaryInstance = 0; } bool KDSingleApplicationGuard::Private::checkOperational( const char * function, const char * act ) const { assert( function ); assert( act ); if ( !operational ) qWarning( "KDSingleApplicationGuard::%s: need to be operational to %s", function, act ); return operational; } bool KDSingleApplicationGuard::Private::checkOperationalPrimary( const char * function, const char * act ) const { if ( !checkOperational( function, act ) ) return false; if ( id != 0 ) qWarning( "KDSingleApplicationGuard::%s: need to be primary to %s", function, act ); return id == 0; } struct segmentheader { size_t size : 16; }; void KDSingleApplicationGuard::Private::sharedmem_free( char* pointer ) { InstanceRegister* const reg = reinterpret_cast( KDSingleApplicationGuard::Private::primaryInstance->d->mem.data() ); char* const heap = reg->commandLines; char* const heap_ptr = heap + reinterpret_cast(pointer) - sizeof( segmentheader ); const segmentheader* const header = reinterpret_cast< const segmentheader* >( heap_ptr ); const size_t size = header->size; char* end = heap + KDSINGLEAPPLICATIONGUARD_MAX_COMMAND_LINE; std::copy( heap_ptr + size, end, heap_ptr ); std::fill( end - size, end, 0 ); for( uint i = 0; i < reg->maxInstances; ++i ) { if( reg->info[ i ].commandline > pointer ) reg->info[ i ].commandline -= size + sizeof( segmentheader ); } } char* KDSingleApplicationGuard::Private::sharedmem_malloc( size_t size ) { InstanceRegister* const reg = reinterpret_cast( KDSingleApplicationGuard::Private::primaryInstance->d->mem.data() ); char* heap = reg->commandLines; while( heap + sizeof( segmentheader ) + size < reg->commandLines + KDSINGLEAPPLICATIONGUARD_MAX_COMMAND_LINE ) { segmentheader* const header = reinterpret_cast< segmentheader* >( heap ); if( header->size == 0 ) { header->size = size; return heap + sizeof( segmentheader ) - reinterpret_cast(reg->commandLines); } heap += sizeof( header ) + header->size; } return 0; } void KDSingleApplicationGuard::Private::shutdownInstance() { KDLockedSharedMemoryPointer< InstanceRegister > instances( &q->d->mem ); instances->info[ q->d->id ].command |= ExitedInstance; if( q->isPrimaryInstance() ) { // ohh... we need a new primary instance... for ( int i = 1, end = instances->maxInstances ; i < end ; ++i ) { if( ( instances->info[ i ].command & ( FreeInstance | ExitedInstance | ShutDownCommand | KillCommand ) ) == 0 ) { instances->info[ i ].command |= BecomePrimaryCommand; return; } } // none found? then my species is dead :-( } } KDSingleApplicationGuard* KDSingleApplicationGuard::Private::primaryInstance = 0; /*! Requests that the instance kills itself (by emitting exitRequested). If the instance has since exited, does nothing. \sa shutdown(), raise() */ void KDSingleApplicationGuard::Instance::kill() { KDLockedSharedMemoryPointer< InstanceRegister > instances( &KDSingleApplicationGuard::Private::primaryInstance->d->mem ); for ( int i = 0, end = instances->maxInstances ; i < end ; ++i ) { if( instances->info[ i ].pid != d->pid ) continue; if( ( instances->info[ i ].command & ( FreeInstance | ExitedInstance ) ) == 0 ) instances->info[ i ].command = KillCommand; } } /*! Requests that the instance shuts itself down (by calling QCoreApplication::quit()). If the instance has since exited, does nothing. \sa kill(), raise() */ void KDSingleApplicationGuard::Instance::shutdown() { KDLockedSharedMemoryPointer< InstanceRegister > instances( &KDSingleApplicationGuard::Private::primaryInstance->d->mem ); for ( int i = 0, end = instances->maxInstances ; i < end ; ++i ) { if( instances->info[ i ].pid != d->pid ) continue; if( ( instances->info[ i ].command & ( FreeInstance | ExitedInstance ) ) == 0 ) instances->info[ i ].command = ShutDownCommand; } } /*! Requests that the instance raises its main window. The effects are implementation-defined: the KDSingleApplicationGuard corresponding to the instance will emit its \link KDSingleApplicationGuard::raiseRequested() raiseRequested()\endlink signal. If the instance has since exited, does nothing. \sa kill(), shutdown() */ void KDSingleApplicationGuard::Instance::raise() { KDLockedSharedMemoryPointer< InstanceRegister > instances( &KDSingleApplicationGuard::Private::primaryInstance->d->mem ); for ( int i = 0, end = instances->maxInstances ; i < end ; ++i ) { if( instances->info[ i ].pid != d->pid ) continue; if( ( instances->info[ i ].command & ( FreeInstance | ExitedInstance ) ) == 0 ) instances->info[ i ].command = RaiseCommand; } } #ifndef Q_WS_WIN // static void KDSingleApplicationGuard::SIGINT_handler( int sig ) { if( sig == SIGINT && Private::primaryInstance != 0 ) Private::primaryInstance->d->shutdownInstance(); ::exit( 1 ); } #endif /*! \enum KDSingleApplicationGuard::Policy Defines the policy that a KDSingleApplicationGuard can enforce: */ /*! \var KDSingleApplicationGuard::NoPolicy instanceStarted() is emitted, and the new instance allowed to continue. */ /*! \var KDSingleApplicationGuard::AutoKillOtherInstances instanceStarted() is emitted, and the new instance is killed (Instance::kill()). */ /*! Creates a new KDSingleApplicationGuard with arguments QCoreApplication::arguments() and policy AutoKillOtherInstances, passing \a parent to the base class constructor, as usual. */ KDSingleApplicationGuard::KDSingleApplicationGuard( QObject * parent ) : QObject( parent ), d( new Private( AutoKillOtherInstances, this ) ) { d->create( QCoreApplication::arguments() ); } /*! Creates a new KDSingleApplicationGuard with arguments QCoreApplication::arguments() and policy \a policy, passing \a parent to the base class constructor, as usual. */ KDSingleApplicationGuard::KDSingleApplicationGuard( Policy policy, QObject * parent ) : QObject( parent ), d( new Private( policy, this ) ) { d->create( QCoreApplication::arguments() ); } /*! Creates a new KDSingleApplicationGuard with arguments \a arguments and policy AutoKillOtherInstances, passing \a parent to the base class constructor, as usual. */ KDSingleApplicationGuard::KDSingleApplicationGuard( const QStringList & arguments, QObject * parent ) : QObject( parent ), d( new Private( AutoKillOtherInstances, this ) ) { d->create( arguments ); } /*! Creates a new KDSingleApplicationGuard with arguments \a arguments and policy \a policy, passing \a parent to the base class constructor, as usual. */ KDSingleApplicationGuard::KDSingleApplicationGuard( const QStringList & arguments, Policy policy, QObject * parent ) : QObject( parent ), d( new Private( policy, this ) ) { d->create( arguments ); } KDSingleApplicationGuard::Private::Private( Policy policy_, KDSingleApplicationGuard * qq ) : q( qq ), id( -1 ), policy( policy_ ), operational( false ), exitRequested( false ) { } void KDSingleApplicationGuard::Private::create( const QStringList & arguments ) { if ( !QCoreApplication::instance() ) { qWarning( "KDSingleApplicationGuard: you need to construct a Q(Core)Application before you can construct a KDSingleApplicationGuard" ); return; } const QString name = QCoreApplication::applicationName(); if ( name.isEmpty() ) { qWarning( "KDSingleApplicationGuard: QCoreApplication::applicationName must not be empty" ); return; } (void)registerInstanceType(); if ( primaryInstance == 0 ) primaryInstance = q; mem.setKey( name ); // if another instance crashed, the shared memory segment is still there on Unix // the following lines trigger deletion in that case #ifndef Q_WS_WIN mem.attach(); mem.detach(); #endif const bool created = mem.create( sizeof( InstanceRegister ) ); if( !created ) { QString errorMsg; if( mem.error() != QSharedMemory::NoError && mem.error() != QSharedMemory::AlreadyExists ) errorMsg += QString::fromLatin1( "QSharedMemomry::create() failed: %1" ).arg( mem.errorString() ); if( !mem.attach() ) { if( mem.error() != QSharedMemory::NoError ) errorMsg += QString::fromLatin1( "QSharedMemomry::attach() failed: %1" ).arg( mem.errorString() ); qWarning( "KDSingleApplicationGuard: Could neither create nor attach to shared memory segment." ); qWarning( "%s\n", errorMsg.toLocal8Bit().constData() ); return; } const int maxWaitMSecs = 1000 * 60; // stop waiting after 60 seconds QTime waitTimer; waitTimer.start(); // lets wait till the other instance initialized the register bool initialized = false; while( !initialized && waitTimer.elapsed() < maxWaitMSecs ) { const KDLockedSharedMemoryPointer< InstanceRegister > instances( &mem ); initialized = instances->isValid(); #ifdef Q_WS_WIN ::Sleep(20); #else usleep(20000); #endif } const KDLockedSharedMemoryPointer< InstanceRegister > instances( &mem ); if ( instances->version != 0 ) { qWarning( "KDSingleApplicationGuard: Detected version mismatch. " "Highest supported version: %ud, actual version: %ud", KDSINGLEAPPLICATIONGUARD_SHM_VERSION, instances->version ); return; } } KDLockedSharedMemoryPointer< InstanceRegister > instances( &mem ); if( !created ) { assert( instances->isValid() ); // we're _not_ the first instance // but the bool killOurSelf = false; // find a new slot... id = std::find( instances->info, instances->info + instances->maxInstances, ProcessInfo() ) - instances->info; ProcessInfo& info = instances->info[ id ]; info = ProcessInfo( NewInstance, arguments, QCoreApplication::applicationPid() ); killOurSelf = instances->policy == AutoKillOtherInstances; policy = static_cast( instances->policy ); // but the signal that we tried to start was sent to the primary application if( killOurSelf ) exitRequested = true; } else { // ok.... we are the first instance new ( instances.get() ) InstanceRegister( policy ); // create a new list (in shared memory) id = 0; // our id = 0 // and we've no command instances->info[ 0 ] = ProcessInfo( NoCommand, arguments, QCoreApplication::applicationPid() ); } #ifndef Q_WS_WIN ::signal( SIGINT, SIGINT_handler ); #endif // now listen for commands timer.start( 750, q ); operational = true; } /*! Destroys this SingleApplicationGuard. If this instance has been the primary instance and no other instance is existing anymore, the application is shut down completely. Otherwise the destructor selects another instance to be the primary instances. */ KDSingleApplicationGuard::~KDSingleApplicationGuard() { if( d->id == -1 ) return; d->shutdownInstance(); } /*! \property KDSingleApplicationGuard::operational Contains whether this KDSingleApplicationGuard is operational. A non-operational KDSingleApplicationGuard cannot be used in any meaningful way. Reasons for a KDSingleApplicationGuard being non-operational include: \li it was constructed before QApplication (or at least QCoreApplication) was constructed \li it failed to create or attach to the shared memory segment that is used for communication Get this property's value using %isOperational(). */ bool KDSingleApplicationGuard::isOperational() const { return d->operational; } /*! \property KDSingleApplicationGuard::exitRequested Contains wheter this istance has been requested to exit. This will happen when this instance was just started, but the policy is AutoKillOtherInstances or by explicitely calling kill on this instance(). Get this property's value using %isExitRequested(). */ bool KDSingleApplicationGuard::isExitRequested() const { return d->exitRequested; }; /*! \property KDSingleApplicationGuard::primaryInstance Contains whether this instance is the primary instance. The primary instance is the first instance which was started or else the instance which got selected by KDSingleApplicationGuard's destructor, when the primary instance was shut down. Get this property's value using %isPrimaryInstance(), and monitor changes to it using becamePrimaryInstance(). */ bool KDSingleApplicationGuard::isPrimaryInstance() const { return d->id == 0; } /*! \property KDSingleApplicationGuard::policy Specifies the policy KDSingleApplicationGuard is using when new instances are started. This can only be set in the primary instance. Get this property's value using %policy(), set it using %setPolicy(), and monitor changes to it using policyChanged(). */ KDSingleApplicationGuard::Policy KDSingleApplicationGuard::policy() const { return d->policy; } void KDSingleApplicationGuard::setPolicy( Policy policy ) { if ( !d->checkOperationalPrimary( "setPolicy", "change the policy" ) ) return; if( d->policy == policy ) return; d->policy = policy; emit policyChanged( policy ); KDLockedSharedMemoryPointer< InstanceRegister > instances( &d->mem ); instances->policy = policy; } /*! Returns a list of all currently running instances. */ QVector KDSingleApplicationGuard::instances() const { if ( !d->checkOperational( "instances", "report on other instances" ) ) return QVector(); if ( Private::primaryInstance == 0 ) { Private::primaryInstance = const_cast( this ); } QVector result; const KDLockedSharedMemoryPointer< InstanceRegister > instances( const_cast< QSharedMemory* >( &d->mem ) ); for ( int i = 0, end = instances->maxInstances ; i < end ; ++i ) { const ProcessInfo& info = instances->info[ i ]; if( ( info.command & ( FreeInstance | ExitedInstance ) ) == 0 ) { bool truncated; const QStringList arguments = info.arguments( &truncated ); result.push_back( Instance( arguments, truncated, info.pid ) ); } } return result; } /*! Shuts down all other instances. This can only be called from the the primary instance. Shut down is done gracefully via QCoreApplication::quit(). */ void KDSingleApplicationGuard::shutdownOtherInstances() { if ( !d->checkOperationalPrimary( "shutdownOtherInstances", "shut other instances down" ) ) return; KDLockedSharedMemoryPointer< InstanceRegister > instances( &d->mem ); for ( int i = 1, end = instances->maxInstances ; i < end ; ++i ) { if( ( instances->info[ i ].command & ( FreeInstance | ExitedInstance ) ) == 0 ) instances->info[ i ].command = ShutDownCommand; } } /*! Kills all other instances. This can only be called from the the primary instance. Killing is done via emitting exitRequested. It's up to the receiving instance to react properly. */ void KDSingleApplicationGuard::killOtherInstances() { if ( !d->checkOperationalPrimary( "killOtherInstances", "kill other instances" ) ) return; KDLockedSharedMemoryPointer< InstanceRegister > instances( &d->mem ); for ( int i = 1, end = instances->maxInstances ; i < end ; ++i ) { if( ( instances->info[ i ].command & ( FreeInstance | ExitedInstance ) ) == 0 ) instances->info[ i ].command = KillCommand; } } bool KDSingleApplicationGuard::event( QEvent * event ) { if ( event->type() == QEvent::Timer ) { const QTimerEvent * const te = static_cast( event ); if ( te->timerId() == d->timer.timerId() ) { d->poll(); return true; } } return QObject::event( event ); } void KDSingleApplicationGuard::Private::poll() { const quint32 now = QDateTime::currentDateTime().toTime_t(); if ( primaryInstance == 0 ) { primaryInstance = q; } if ( q->isPrimaryInstance() ) { // only the primary instance will get notified about new instances QVector< Instance > exitedInstances; QVector< Instance > startedInstances; { KDLockedSharedMemoryPointer< InstanceRegister > instances( &mem ); if( instances->info[ id ].pid != QCoreApplication::applicationPid() ) { for ( int i = 1, end = instances->maxInstances ; i < end && id == 0 ; ++i ) { if( instances->info[ i ].pid == QCoreApplication::applicationPid() ) id = i; } emit q->becameSecondaryInstance(); return; } instances->info[ id ].timestamp = now; for ( int i = 1, end = instances->maxInstances ; i < end ; ++i ) { ProcessInfo& info = instances->info[ i ]; if( info.command & NewInstance ) { bool truncated; const QStringList arguments = info.arguments( &truncated ); startedInstances.push_back( Instance( arguments, truncated, info.pid ) ); info.command &= ~NewInstance; // clear NewInstance flag } if( info.command & ExitedInstance ) { bool truncated; const QStringList arguments = info.arguments( &truncated ); exitedInstances.push_back( Instance( arguments, truncated, info.pid ) ); info.command = FreeInstance; // set FreeInstance flag } } } // one signal for every new instance - _after_ the memory segment was unlocked again for( QVector< Instance >::const_iterator it = startedInstances.constBegin(); it != startedInstances.constEnd(); ++it ) emit q->instanceStarted( *it ); for( QVector< Instance >::const_iterator it = exitedInstances.constBegin(); it != exitedInstances.constEnd(); ++it ) emit q->instanceExited( *it ); } else { // do we have a command? bool killOurSelf = false; bool shutDownOurSelf = false; bool policyDidChange = false; { KDLockedSharedMemoryPointer< InstanceRegister > instances( &mem ); const Policy oldPolicy = policy; policy = static_cast( instances->policy ); policyDidChange = policy != oldPolicy; // check for the primary instance health status if( now - instances->info[ 0 ].timestamp > KDSINGLEAPPLICATIONGUARD_TIMEOUT_SECONDS ) { std::swap( instances->info[ 0 ], instances->info[ id ] ); id = 0; instances->info[ id ].timestamp = now; emit q->becamePrimaryInstance(); instances->info[ id ].command &= ~BecomePrimaryCommand; // afterwards, reset the flag } if( instances->info[ id ].command & BecomePrimaryCommand ) { // we became primary! instances->info[ 0 ] = instances->info[ id ]; instances->info[ id ] = ProcessInfo(); // change our id to 0 and declare the old slot as free id = 0; instances->info[ id ].timestamp = now; emit q->becamePrimaryInstance(); } if( instances->info[ id ].command & RaiseCommand ) { // raise ourself! emit q->raiseRequested(); instances->info[ id ].command &= ~RaiseCommand; // afterwards, reset the flag } killOurSelf = instances->info[ id ].command & KillCommand; // check for kill command shutDownOurSelf = instances->info[ id ].command & ShutDownCommand; // check for shut down command instances->info[ id ].command &= ~( KillCommand | ShutDownCommand | BecomePrimaryCommand ); // reset both flags if( killOurSelf ) { instances->info[ id ].command |= ExitedInstance; // upon kill, we have to set the ExitedInstance flag id = -1; // becauso our d'tor won't be called anymore } } if( killOurSelf ) // kill our self takes precedence { exitRequested = true; emit q->exitRequested(); } else if( shutDownOurSelf ) qApp->quit(); else if( policyDidChange ) emit q->policyChanged( policy ); } } #include "moc_kdsingleapplicationguard.cpp" #ifdef KDTOOLSCORE_UNITTESTS #include #include "kdautopointer.h" #include #include #include #include static void wait( int msec, QSignalSpy * spy=0, int expectedCount=INT_MAX ) { QTime t; t.start(); while ( ( !spy || spy->count() < expectedCount ) && t.elapsed() < msec ) { qApp->processEvents( QEventLoop::WaitForMoreEvents, qMax( 10, msec - t.elapsed() ) ); } } static std::ostream& operator<<( std::ostream& stream, const QStringList& list ) { stream << "QStringList("; for( QStringList::const_iterator it = list.begin(); it != list.end(); ++it ) { stream << " " << it->toLocal8Bit().data(); if( it + 1 != list.end() ) stream << ","; } stream << " )"; return stream; } namespace { class ApplicationNameSaver { Q_DISABLE_COPY( ApplicationNameSaver ) const QString oldname; public: explicit ApplicationNameSaver( const QString & name ) : oldname( QCoreApplication::applicationName() ) { QCoreApplication::setApplicationName( name ); } ~ApplicationNameSaver() { QCoreApplication::setApplicationName( oldname ); } }; } KDAB_UNITTEST_SIMPLE( KDSingleApplicationGuard, "kdcoretools" ) { // set it to an unique name const ApplicationNameSaver saver( QUuid::createUuid().toString() ); KDAutoPointer guard3; KDAutoPointer spy3; KDAutoPointer spy4; { KDSingleApplicationGuard guard1; assertEqual( guard1.policy(), KDSingleApplicationGuard::AutoKillOtherInstances ); assertEqual( guard1.instances().count(), 1 ); assertTrue( guard1.isPrimaryInstance() ); guard1.setPolicy( KDSingleApplicationGuard::NoPolicy ); assertEqual( guard1.policy(), KDSingleApplicationGuard::NoPolicy ); QSignalSpy spy1( &guard1, SIGNAL(instanceStarted(KDSingleApplicationGuard::Instance)) ); KDSingleApplicationGuard guard2; assertEqual( guard1.instances().count(), 2 ); assertEqual( guard2.instances().count(), 2 ); assertEqual( guard2.policy(), KDSingleApplicationGuard::NoPolicy ); assertFalse( guard2.isPrimaryInstance() ); wait( 1000, &spy1, 1 ); assertEqual( spy1.count(), 1 ); guard3.reset( new KDSingleApplicationGuard ); spy3.reset( new QSignalSpy( guard3.get(), SIGNAL(becamePrimaryInstance()) ) ); spy4.reset( new QSignalSpy( guard3.get(), SIGNAL(instanceExited(KDSingleApplicationGuard::Instance) ) ) ); assertFalse( guard3->isPrimaryInstance() ); } wait( 1000, spy3.get(), 1 ); wait( 1000, spy4.get(), 1 ); assertEqual( spy3->count(), 1 ); assertEqual( guard3->instances().count(), 1 ); assertTrue( guard3->isPrimaryInstance() ); guard3.reset( new KDSingleApplicationGuard ); assertEqual( guard3->instances().first().arguments(), qApp->arguments() ); QSignalSpy spyStarted( guard3.get(), SIGNAL(instanceStarted(KDSingleApplicationGuard::Instance)) ); QSignalSpy spyExited( guard3.get(), SIGNAL(instanceExited(KDSingleApplicationGuard::Instance)) ); { KDSingleApplicationGuard guard1; KDSingleApplicationGuard guard2; wait( 1000, &spyStarted, 2 ); assertEqual( spyStarted.count(), 2 ); } wait( 1000, &spyExited, 2 ); assertEqual( spyExited.count(), 2 ); spyStarted.clear(); spyExited.clear(); { // check arguments-too-long handling: QStringList args; for ( unsigned int i = 0, end = KDSINGLEAPPLICATIONGUARD_MAX_COMMAND_LINE/16 ; i != end ; ++i ) args.push_back( QLatin1String( "0123456789ABCDEF" ) ); KDSingleApplicationGuard guard3( args ); wait( 1000, &spyStarted, 1 ); const QVector instances = guard3.instances(); assertEqual( instances.size(), 2 ); assertTrue( instances[1].areArgumentsTruncated() ); } } #endif // KDTOOLSCORE_UNITTESTS #endif // QT_NO_SHAREDMEMORY #endif // QT_VERSION >= 0x040400 || defined(DOXYGEN_RUN) calamares-3.2.20/3rdparty/kdsingleapplicationguard/kdsingleapplicationguard.h000066400000000000000000000071271362604102500275730ustar00rootroot00000000000000/* * SPDX-License-Identifier: LGPL-2.0-only * License-Filename: LICENSES/LGPLv2-KDAB * * The KD Tools Library is Copyright (C) 2001-2010 Klaralvdalens Datakonsult AB. */ #ifndef KDTOOLSCORE_KDSINGLEAPPLICATIONGUARD_H #define KDTOOLSCORE_KDSINGLEAPPLICATIONGUARD_H #include #ifndef QT_NO_SHAREDMEMORY #include #include #include "pimpl_ptr.h" #include "DllMacro.h" #include template class QVector; class QCoreApplication; class DLLEXPORT KDSingleApplicationGuard : public QObject { Q_OBJECT Q_ENUMS( Policy ) Q_PROPERTY( bool operational READ isOperational ) Q_PROPERTY( bool exitRequested READ isExitRequested ) Q_PROPERTY( bool primaryInstance READ isPrimaryInstance NOTIFY becamePrimaryInstance ) Q_PROPERTY( Policy policy READ policy WRITE setPolicy NOTIFY policyChanged ) public: enum Policy { NoPolicy = 0, AutoKillOtherInstances = 1 }; explicit KDSingleApplicationGuard( QObject * parent=nullptr ); explicit KDSingleApplicationGuard( Policy policy, QObject * parent=nullptr ); explicit KDSingleApplicationGuard( const QStringList & arguments, QObject * parent=nullptr ); explicit KDSingleApplicationGuard( const QStringList & arguments, Policy policy, QObject * parent=nullptr ); ~KDSingleApplicationGuard(); bool isOperational() const; bool isExitRequested() const; bool isPrimaryInstance() const; Policy policy() const; void setPolicy( Policy policy ); class Instance; QVector instances() const; Q_SIGNALS: void instanceStarted( const KDSingleApplicationGuard::Instance & instance ); void instanceExited( const KDSingleApplicationGuard::Instance & instance ); void exitRequested(); void raiseRequested(); void becamePrimaryInstance(); void becameSecondaryInstance(); void policyChanged( KDSingleApplicationGuard::Policy policy ); public Q_SLOTS: void shutdownOtherInstances(); void killOtherInstances(); protected: /*! \reimp */ bool event( QEvent * event ); private: #ifndef Q_WS_WIN static void SIGINT_handler( int ); #endif private: friend struct ProcessInfo; class Private; kdtools::pimpl_ptr< Private > d; }; class DLLEXPORT KDSingleApplicationGuard::Instance { friend class ::KDSingleApplicationGuard; friend class ::KDSingleApplicationGuard::Private; Instance( const QStringList &, bool, qint64 ); public: Instance(); Instance( const Instance & other ); ~Instance(); void swap( Instance & other ) { std::swap( d, other.d ); } Instance & operator=( Instance other ) { swap( other ); return *this; } bool isNull() const { return !d; } bool isValid() const; bool areArgumentsTruncated() const; const QStringList & arguments() const; qint64 pid() const; void shutdown(); void kill(); void raise(); private: class Private; Private * d; }; namespace std { template <> inline void swap( KDSingleApplicationGuard::Instance & lhs, KDSingleApplicationGuard::Instance & rhs ) { lhs.swap( rhs ); } } // namespace std QT_BEGIN_NAMESPACE template <> inline void qSwap( KDSingleApplicationGuard::Instance & lhs, KDSingleApplicationGuard::Instance & rhs ) { lhs.swap( rhs ); } Q_DECLARE_METATYPE( KDSingleApplicationGuard::Instance ) Q_DECLARE_TYPEINFO( KDSingleApplicationGuard::Instance, Q_MOVABLE_TYPE ); QT_END_NAMESPACE #endif // QT_NO_SHAREDMEMORY #endif /* KDTOOLSCORE_KDSINGLEAPPLICATIONGUARD_H */ calamares-3.2.20/3rdparty/kdsingleapplicationguard/kdtoolsglobal.cpp000066400000000000000000000031651362604102500257150ustar00rootroot00000000000000/* * SPDX-License-Identifier: LGPL-2.0-only * License-Filename: LICENSES/LGPLv2-KDAB * * The KD Tools Library is Copyright (C) 2001-2010 Klaralvdalens Datakonsult AB. */ #include "kdtoolsglobal.h" #include #include namespace { struct Version { unsigned char v[3]; }; static inline bool operator<( const Version & lhs, const Version & rhs ) { return std::lexicographical_compare( lhs.v, lhs.v + 3, rhs.v, rhs.v + 3 ); } static inline bool operator==( const Version & lhs, const Version & rhs ) { return std::equal( lhs.v, lhs.v + 3, rhs.v ); } KDTOOLS_MAKE_RELATION_OPERATORS( Version, static inline ) } static Version kdParseQtVersion( const char * const version ) { if ( !version || qstrlen( version ) < 5 || version[1] != '.' || version[3] != '.' || ( version[5] != 0 && version[5] != '.' && version[5] != '-' ) ) return Version(); // parse error const Version result = { { static_cast< unsigned char >( version[0] - '0' ), static_cast< unsigned char >( version[2] - '0' ), static_cast< unsigned char >( version[4] - '0' ) } }; return result; } bool _kdCheckQtVersion_impl( unsigned int major, unsigned int minor, unsigned int patchlevel ) { static const Version actual = kdParseQtVersion( qVersion() ); // do this only once each run... const Version requested = { { static_cast< unsigned char >( major ), static_cast< unsigned char >( minor ), static_cast< unsigned char >( patchlevel ) } }; return actual >= requested; } calamares-3.2.20/3rdparty/kdsingleapplicationguard/kdtoolsglobal.h000066400000000000000000000121171362604102500253570ustar00rootroot00000000000000/* * SPDX-License-Identifier: LGPL-2.0-only * License-Filename: LICENSES/LGPLv2-KDAB * * The KD Tools Library is Copyright (C) 2001-2010 Klaralvdalens Datakonsult AB. */ #ifndef KDTOOLS_KDTOOLSGLOBAL_H #define KDTOOLS_KDTOOLSGLOBAL_H #include #define KDAB_DISABLE_COPY( x ) private: x( const x & ); x & operator=( const x & ) #ifdef KDTOOLS_SHARED # ifdef BUILD_SHARED_KDTOOLSCORE # define KDTOOLSCORE_EXPORT Q_DECL_EXPORT # else # define KDTOOLSCORE_EXPORT Q_DECL_IMPORT # endif # ifdef BUILD_SHARED_KDTOOLSGUI # define KDTOOLSGUI_EXPORT Q_DECL_EXPORT # else # define KDTOOLSGUI_EXPORT Q_DECL_IMPORT # endif # ifdef BUILD_SHARED_KDTOOLSXML # define KDTOOLSXML_EXPORT Q_DECL_EXPORT # else # define KDTOOLSXML_EXPORT Q_DECL_IMPORT # endif # ifdef BUILD_SHARED_KDUPDATER # define KDTOOLS_UPDATER_EXPORT Q_DECL_EXPORT # else # define KDTOOLS_UPDATER_EXPORT Q_DECL_IMPORT # endif #else // KDTOOLS_SHARED # define KDTOOLSCORE_EXPORT # define KDTOOLSGUI_EXPORT # define KDTOOLSXML_EXPORT # define KDTOOLS_UPDATER_EXPORT #endif // KDTOOLS_SHARED #define MAKEINCLUDES_EXPORT #define DOXYGEN_PROPERTY( x ) #ifdef DOXYGEN_RUN # define KDAB_IMPLEMENT_SAFE_BOOL_OPERATOR( func ) operator unspecified_bool_type() const { return func; } # define KDAB_USING_SAFE_BOOL_OPERATOR( Class ) operator unspecified_bool_type() const; #else # define KDAB_IMPLEMENT_SAFE_BOOL_OPERATOR( func ) \ private: \ struct __safe_bool_dummy__ { void nonnull() {} }; \ public: \ typedef void ( __safe_bool_dummy__::*unspecified_bool_type )(); \ operator unspecified_bool_type() const { \ return ( func ) ? &__safe_bool_dummy__::nonnull : 0 ; \ } #define KDAB_USING_SAFE_BOOL_OPERATOR( Class ) \ using Class::operator Class::unspecified_bool_type; #endif #define KDTOOLS_MAKE_RELATION_OPERATORS( Class, linkage ) \ linkage bool operator>( const Class & lhs, const Class & rhs ) { \ return operator<( rhs, lhs ); \ } \ linkage bool operator!=( const Class & lhs, const Class & rhs ) { \ return !operator==( lhs, rhs ); \ } \ linkage bool operator<=( const Class & lhs, const Class & rhs ) { \ return !operator>( lhs, rhs ); \ } \ linkage bool operator>=( const Class & lhs, const Class & rhs ) { \ return !operator<( lhs, rhs ); \ } template inline T & __kdtools__dereference_for_methodcall( T & o ) { return o; } template inline T & __kdtools__dereference_for_methodcall( T * o ) { return *o; } #define KDAB_SET_OBJECT_NAME( x ) __kdtools__dereference_for_methodcall( x ).setObjectName( QLatin1String( #x ) ) KDTOOLSCORE_EXPORT bool _kdCheckQtVersion_impl( unsigned int major, unsigned int minor=0, unsigned int patchlevel=0 ); static inline bool kdCheckQtVersion( unsigned int major, unsigned int minor=0, unsigned int patchlevel=0 ) { return (major<<16|minor<<8|patchlevel) <= static_cast(QT_VERSION) || _kdCheckQtVersion_impl( major, minor, patchlevel ); } #define KDTOOLS_DECLARE_PRIVATE_BASE( Class ) \ protected: \ class Private; \ Private * d_func() { return _d; } \ const Private * d_func() const { return _d; } \ Class( Private * _d_, bool b ) : _d( _d_ ) { init(b); } \ private: \ void init(bool); \ private: \ Private * _d #define KDTOOLS_DECLARE_PRIVATE_DERIVED( Class, Base ) \ protected: \ class Private; \ Private * d_func() { \ return reinterpret_cast( Base::d_func() ); \ } \ const Private * d_func() const { \ return reinterpret_cast( Base::d_func() ); \ } \ Class( Private * _d_, bool b ) \ : Base( reinterpret_cast(_d_), b ) { init(b); } \ private: \ void init(bool) #endif /* KDTOOLS_KDTOOLSGLOBAL_H */ calamares-3.2.20/3rdparty/kdsingleapplicationguard/pimpl_ptr.cpp000066400000000000000000000104541362604102500250620ustar00rootroot00000000000000/* * SPDX-License-Identifier: LGPL-2.0-only * License-Filename: LICENSES/LGPLv2-KDAB * * The KD Tools Library is Copyright (C) 2001-2010 Klaralvdalens Datakonsult AB. */ #include "pimpl_ptr.h" /*! \class pimpl_ptr: \ingroup core smartptr \brief Owning pointer for private implementations \since_c 2.1 (The exception safety of this class has not been evaluated yet.) pimpl_ptr is a smart immutable pointer, which owns the contained object. Unlike other smart pointers, it creates a standard constructed object when instanciated via the \link pimpl_ptr() standard constructor\endlink. Additionally, pimpl_ptr respects constness of the pointer object and returns \c const \c T* for a const pimpl_ptr object. The content of a pimpl_ptr cannot be changed during it's lifetime. \section general-use General Use The general use case of pimpl_ptr is the "Pimpl Idiom", i.e. hiding the private implementation of a class from the user's compiler which see \c MyClass as \code class MyClass { public: MyClass(); ~MyClass(); // public class API int value() const; private: class Private; // defined later kdtools::pimpl_ptr< Private > d; }; \endcode but not the private parts of it. These can only be seen (and accessed) by the code knowing \c MyClass::Private: \code class MyClass::Private { public: int value; }; MyClass::MyClass() { // d was automatically filled with new Private d->value = 42; } MyClass::~MyClass() { // the content of d gets deleted automatically } int MyClass::value() const { // access the private part: // since MyClass::value() is const, the returned pointee is const, too return d->value; } \endcode */ /*! \fn pimpl_ptr::pimpl_ptr() Default constructor. Constructs a pimpl_tr that contains (owns) a standard constructed instance of \c T. \post \c *this owns a new object. */ /*! \fn pimpl_ptr::pimpl_ptr( T * t ) Constructor. Constructs a pimpl_ptr that contains (owns) \a t. \post get() == obj */ /*! \fn pimpl_ptr::~pimpl_ptr() Destructor. \post The object previously owned by \c *this has been deleted. */ /*! \fn const T * pimpl_ptr::get() const \returns a const pointer to the contained (owned) object. \overload */ /*! \fn T * pimpl_ptr::get() \returns a pointer to the contained (owned) object. */ /*! \fn const T & pimpl_ptr::operator*() const Dereference operator. Returns \link get() *get()\endlink. \overload */ /*! \fn T & pimpl_ptr::operator*() Dereference operator. Returns \link get() *get()\endlink. */ /*! \fn const T * pimpl_ptr::operator->() const Member-by-pointer operator. Returns get(). \overload */ /*! \fn T * pimpl_ptr::operator->() Member-by-pointer operator. Returns get(). */ #ifdef KDTOOLSCORE_UNITTESTS #include #include #include namespace { struct ConstTester { bool isConst() { return false; } bool isConst() const { return true; } }; } KDAB_UNITTEST_SIMPLE( pimpl_ptr, "kdcoretools" ) { { kdtools::pimpl_ptr< QObject > p; assertNotNull( p.get() ); assertNull( p->parent() ); } { QPointer< QObject > o; { kdtools::pimpl_ptr< QObject > qobject( new QObject ); o = qobject.get(); assertEqual( o, qobject.operator->() ); assertEqual( o, &(qobject.operator*()) ); } assertNull( o ); } { const kdtools::pimpl_ptr< QObject > qobject( new QObject ); const QObject* o = qobject.get(); assertEqual( o, qobject.operator->() ); assertEqual( o, &(qobject.operator*()) ); } { kdtools::pimpl_ptr< QObject > o1; assertTrue( o1 ); kdtools::pimpl_ptr< QObject > o2( 0 ); assertFalse( o2 ); } { const kdtools::pimpl_ptr< ConstTester > o1; kdtools::pimpl_ptr< ConstTester > o2; assertTrue( o1->isConst() ); assertFalse( o2->isConst() ); assertTrue( (*o1).isConst() ); assertFalse( (*o2).isConst() ); assertTrue( o1.get()->isConst() ); assertFalse( o2.get()->isConst() ); } } #endif // KDTOOLSCORE_UNITTESTS calamares-3.2.20/3rdparty/kdsingleapplicationguard/pimpl_ptr.h000066400000000000000000000025471362604102500245330ustar00rootroot00000000000000/* * SPDX-License-Identifier: LGPL-2.0-only * License-Filename: LICENSES/LGPLv2-KDAB * * The KD Tools Library is Copyright (C) 2001-2010 Klaralvdalens Datakonsult AB. */ #ifndef KDTOOLSCORE_PIMPL_PTR_H #define KDTOOLSCORE_PIMPL_PTR_H #include "kdtoolsglobal.h" #ifndef DOXYGEN_RUN namespace kdtools { #endif template class pimpl_ptr { KDAB_DISABLE_COPY( pimpl_ptr ); T * d; public: pimpl_ptr() : d( new T ) {} explicit pimpl_ptr( T * t ) : d( t ) {} ~pimpl_ptr() { delete d; d = nullptr; } T * get() { return d; } const T * get() const { return d; } T * operator->() { return get(); } const T * operator->() const { return get(); } T & operator*() { return *get(); } const T & operator*() const { return *get(); } KDAB_IMPLEMENT_SAFE_BOOL_OPERATOR( get() ) }; // these are not implemented, so's we can catch their use at // link-time. Leaving them undeclared would open up a comparison // via operator unspecified-bool-type(). template void operator==( const pimpl_ptr &, const pimpl_ptr & ); template void operator!=( const pimpl_ptr &, const pimpl_ptr & ); #ifndef DOXYGEN_RUN } // namespace kdtools #endif #endif /* KDTOOLSCORE_PIMPL_PTR_H */ calamares-3.2.20/3rdparty/waitingspinnerwidget.cpp000066400000000000000000000203261362604102500222510ustar00rootroot00000000000000/* * SPDX-License-Identifier: MIT * License-Filename: LICENSES/MIT-QtWaitingSpinner */ /* Original Work Copyright (c) 2012-2014 Alexander Turkin Modified 2014 by William Hallatt Modified 2015 by Jacob Dawid 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. */ // Own includes #include "waitingspinnerwidget.h" // Standard includes #include #include // Qt includes #include #include WaitingSpinnerWidget::WaitingSpinnerWidget(QWidget *parent, bool centerOnParent, bool disableParentWhenSpinning) : QWidget(parent), _centerOnParent(centerOnParent), _disableParentWhenSpinning(disableParentWhenSpinning) { initialize(); } WaitingSpinnerWidget::WaitingSpinnerWidget(Qt::WindowModality modality, QWidget *parent, bool centerOnParent, bool disableParentWhenSpinning) : QWidget(parent, Qt::Dialog | Qt::FramelessWindowHint), _centerOnParent(centerOnParent), _disableParentWhenSpinning(disableParentWhenSpinning){ initialize(); // We need to set the window modality AFTER we've hidden the // widget for the first time since changing this property while // the widget is visible has no effect. setWindowModality(modality); setAttribute(Qt::WA_TranslucentBackground); } void WaitingSpinnerWidget::initialize() { _color = Qt::black; _roundness = 100.0; _minimumTrailOpacity = 3.14159265358979323846; _trailFadePercentage = 80.0; _revolutionsPerSecond = 1.57079632679489661923; _numberOfLines = 20; _lineLength = 10; _lineWidth = 2; _innerRadius = 10; _currentCounter = 0; _isSpinning = false; _timer = new QTimer(this); connect(_timer, SIGNAL(timeout()), this, SLOT(rotate())); updateSize(); updateTimer(); hide(); } void WaitingSpinnerWidget::paintEvent(QPaintEvent *) { updatePosition(); QPainter painter(this); painter.fillRect(this->rect(), Qt::transparent); painter.setRenderHint(QPainter::Antialiasing, true); if (_currentCounter >= _numberOfLines) { _currentCounter = 0; } painter.setPen(Qt::NoPen); for (int i = 0; i < _numberOfLines; ++i) { painter.save(); painter.translate(_innerRadius + _lineLength, _innerRadius + _lineLength); qreal rotateAngle = static_cast(360 * i) / static_cast(_numberOfLines); painter.rotate(rotateAngle); painter.translate(_innerRadius, 0); int distance = lineCountDistanceFromPrimary(i, _currentCounter, _numberOfLines); QColor color = currentLineColor(distance, _numberOfLines, _trailFadePercentage, _minimumTrailOpacity, _color); painter.setBrush(color); // TODO improve the way rounded rect is painted painter.drawRoundedRect( QRect(0, -_lineWidth / 2, _lineLength, _lineWidth), _roundness, _roundness, Qt::RelativeSize); painter.restore(); } } void WaitingSpinnerWidget::start() { updatePosition(); _isSpinning = true; show(); if(parentWidget() && _disableParentWhenSpinning) { parentWidget()->setEnabled(false); } if (!_timer->isActive()) { _timer->start(); _currentCounter = 0; } } void WaitingSpinnerWidget::stop() { _isSpinning = false; hide(); if(parentWidget() && _disableParentWhenSpinning) { parentWidget()->setEnabled(true); } if (_timer->isActive()) { _timer->stop(); _currentCounter = 0; } } void WaitingSpinnerWidget::setNumberOfLines(int lines) { _numberOfLines = lines; _currentCounter = 0; updateTimer(); } void WaitingSpinnerWidget::setLineLength(int length) { _lineLength = length; updateSize(); } void WaitingSpinnerWidget::setLineWidth(int width) { _lineWidth = width; updateSize(); } void WaitingSpinnerWidget::setInnerRadius(int radius) { _innerRadius = radius; updateSize(); } QColor WaitingSpinnerWidget::color() { return _color; } qreal WaitingSpinnerWidget::roundness() { return _roundness; } qreal WaitingSpinnerWidget::minimumTrailOpacity() { return _minimumTrailOpacity; } qreal WaitingSpinnerWidget::trailFadePercentage() { return _trailFadePercentage; } qreal WaitingSpinnerWidget::revolutionsPersSecond() { return _revolutionsPerSecond; } int WaitingSpinnerWidget::numberOfLines() { return _numberOfLines; } int WaitingSpinnerWidget::lineLength() { return _lineLength; } int WaitingSpinnerWidget::lineWidth() { return _lineWidth; } int WaitingSpinnerWidget::innerRadius() { return _innerRadius; } bool WaitingSpinnerWidget::isSpinning() const { return _isSpinning; } void WaitingSpinnerWidget::setRoundness(qreal roundness) { _roundness = std::max(0.0, std::min(100.0, roundness)); } void WaitingSpinnerWidget::setColor(QColor color) { _color = color; } void WaitingSpinnerWidget::setRevolutionsPerSecond(qreal revolutionsPerSecond) { _revolutionsPerSecond = revolutionsPerSecond; updateTimer(); } void WaitingSpinnerWidget::setTrailFadePercentage(qreal trail) { _trailFadePercentage = trail; } void WaitingSpinnerWidget::setMinimumTrailOpacity(qreal minimumTrailOpacity) { _minimumTrailOpacity = minimumTrailOpacity; } void WaitingSpinnerWidget::rotate() { ++_currentCounter; if (_currentCounter >= _numberOfLines) { _currentCounter = 0; } update(); } void WaitingSpinnerWidget::updateSize() { int size = (_innerRadius + _lineLength) * 2; setFixedSize(size, size); } void WaitingSpinnerWidget::updateTimer() { _timer->setInterval(1000 / (_numberOfLines * _revolutionsPerSecond)); } void WaitingSpinnerWidget::updatePosition() { if (parentWidget() && _centerOnParent) { move(parentWidget()->width() / 2 - width() / 2, parentWidget()->height() / 2 - height() / 2); } } int WaitingSpinnerWidget::lineCountDistanceFromPrimary(int current, int primary, int totalNrOfLines) { int distance = primary - current; if (distance < 0) { distance += totalNrOfLines; } return distance; } QColor WaitingSpinnerWidget::currentLineColor(int countDistance, int totalNrOfLines, qreal trailFadePerc, qreal minOpacity, QColor color) { if (countDistance == 0) { return color; } const qreal minAlphaF = minOpacity / 100.0; int distanceThreshold = static_cast(ceil((totalNrOfLines - 1) * trailFadePerc / 100.0)); if (countDistance > distanceThreshold) { color.setAlphaF(minAlphaF); } else { qreal alphaDiff = color.alphaF() - minAlphaF; qreal gradient = alphaDiff / static_cast(distanceThreshold + 1); qreal resultAlpha = color.alphaF() - gradient * countDistance; // If alpha is out of bounds, clip it. resultAlpha = std::min(1.0, std::max(0.0, resultAlpha)); color.setAlphaF(resultAlpha); } return color; } calamares-3.2.20/3rdparty/waitingspinnerwidget.h000066400000000000000000000077441362604102500217270ustar00rootroot00000000000000/* * SPDX-License-Identifier: MIT * License-Filename: LICENSES/MIT-QtWaitingSpinner */ /* Original Work Copyright (c) 2012-2014 Alexander Turkin Modified 2014 by William Hallatt Modified 2015 by Jacob Dawid 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. */ #pragma once // Qt includes #include #include #include class WaitingSpinnerWidget : public QWidget { Q_OBJECT public: /*! Constructor for "standard" widget behaviour - use this * constructor if you wish to, e.g. embed your widget in another. */ WaitingSpinnerWidget(QWidget *parent = nullptr, bool centerOnParent = true, bool disableParentWhenSpinning = true); /*! Constructor - use this constructor to automatically create a modal * ("blocking") spinner on top of the calling widget/window. If a valid * parent widget is provided, "centreOnParent" will ensure that * QtWaitingSpinner automatically centres itself on it, if not, * "centreOnParent" is ignored. */ WaitingSpinnerWidget(Qt::WindowModality modality, QWidget *parent = nullptr, bool centerOnParent = true, bool disableParentWhenSpinning = true); public slots: void start(); void stop(); public: void setColor(QColor color); void setRoundness(qreal roundness); void setMinimumTrailOpacity(qreal minimumTrailOpacity); void setTrailFadePercentage(qreal trail); void setRevolutionsPerSecond(qreal revolutionsPerSecond); void setNumberOfLines(int lines); void setLineLength(int length); void setLineWidth(int width); void setInnerRadius(int radius); void setText(QString text); QColor color(); qreal roundness(); qreal minimumTrailOpacity(); qreal trailFadePercentage(); qreal revolutionsPersSecond(); int numberOfLines(); int lineLength(); int lineWidth(); int innerRadius(); bool isSpinning() const; private slots: void rotate(); protected: void paintEvent(QPaintEvent *paintEvent); private: static int lineCountDistanceFromPrimary(int current, int primary, int totalNrOfLines); static QColor currentLineColor(int distance, int totalNrOfLines, qreal trailFadePerc, qreal minOpacity, QColor color); void initialize(); void updateSize(); void updateTimer(); void updatePosition(); private: QColor _color; qreal _roundness; // 0..100 qreal _minimumTrailOpacity; qreal _trailFadePercentage; qreal _revolutionsPerSecond; int _numberOfLines; int _lineLength; int _lineWidth; int _innerRadius; private: WaitingSpinnerWidget(const WaitingSpinnerWidget&); WaitingSpinnerWidget& operator=(const WaitingSpinnerWidget&); QTimer *_timer; bool _centerOnParent; bool _disableParentWhenSpinning; int _currentCounter; bool _isSpinning; }; calamares-3.2.20/AUTHORS000066400000000000000000000016121362604102500145750ustar00rootroot00000000000000# MAINTAINER Calamares development is sponsored by Blue Systems GmbH - Liberating Software. Calamares maintainers through the years: * Teo Mrnjavac (maintainer -2017) * Adriaan de Groot (maintainer 2017-) # CONTRIBUTORS Calamares has received contributions of code, documentation, artwork and moral support from (alphabetically by first name or nickname): - Alf Gaida - aliveafter1000 - Allen Welkie - AlmAck - Andrius Å tikonas - Arnaud Ferraris - artoo@cromnix.org - Bernhard Landauer - Bezzy1999 - Bill Auger - Caio Jordão Carvalho - Collabora LTD - crispg72 - Dan Simmons - demmm - Dominic Hayes - Frede H - Gabriel Craciunescu - Harald Sitter - Kai Dohmen - Kevin Kofler - Kyle Robertze - Lisa Vitolo - n3rdopolis - Philip Müller - Ramon Buldó - Raul Rodrigo Segura - Rohan Garg - Scott Harvey - Simon Quigley - Walter Lapchynski calamares-3.2.20/CHANGES000066400000000000000000000753461362604102500145370ustar00rootroot00000000000000This is the changelog for Calamares. For each release, the major changes and contributors are listed. Note that Calamares does not have a historical changelog -- this log starts with version 3.2.0. The release notes on the website will have to do for older versions. # 3.2.20 (2020-02-27) # This release contains contributions from (alphabetically by first name): - Bart Ribbers ## Core ## - When logging level is set to 8 (eight), for instance via the `-D8` logging flag, or the `-d` debug flag, the *Show debug information* button will appear in the progress view. This helps with debugging issues where the `-d` flag would be inappropriate. - Calamares now starts at logging level 1 (warnings and errors to the console) by default. Previously it (wrongly) started at level 8. ## Modules ## - The *partition* module now stores which filesystems are in use in global storage. - The *contextualprocess* module now understands "compound variable names", where a dot (.) is used to index into structured data stored in global storage. This allows it to use the map stored by the partition module (but also other things, like looking into the branding information). - The *packages* module now understands "apk", the Alpine Linux package manager. # 3.2.19.1 (2020-02-24) # This is a hotfix release for bugs in the *users* module. Reported by Philip Mueller and Walter Lapchynski. ## Modules ## - The *users* module no longer wrote `/etc/hostname` at all. - The *users* module erroneously shows the root password input fields. - The *initramfs* module sets a resume-hook even when there is no swap. - The partitioning service expects *udevadm* in `/sbin`, but some distro's place it elsewhere. - The mount service didn't unmount directories properly, leading to blocked installations. # 3.2.19 (2020-02-21) # This release contains contributions from (alphabetically by first name): - Anke Boersma - Camilo Higuita - Gabriel Craciunescu ## Core ## - *Assamese* translation has been completed. - Translations are now loaded from more places: instead of **only** being compiled in to the Calamares executable, they can now be read from the current directory (when Calamares is run in developer mode) and from the application data directory.This allows updating the translations without requiring a recompile: helpful for translators and possibly for distributions with their own translation style. See the translators and deployers wiki for details. - A new `ViewStep` base class, `QmlViewStep`, has been added that loads a configurable QML file and plays it. This is used by the new *notesqml* module -- which is in itself a minimal wrapper around the same that adds only a translatable module name. ## Modules ## - The *machineid* and *users* modules now prefer high-quality random data from `/dev/urandom` rather than pseudo-random data. #1254 - A new *notesqml* module supports loading QML. This can be used for "fancy" release notes as a QML application, rather than a webview or text widget. Note that this does not replace the slideshow-during- installation module. - The *users* module now has knobs for setting the hostname and writing the `/etc/hosts` file. The new configuration options are documented in `users.conf`. #1140 - Multiple *netinstall* modules can exist side-by-side, and they each control the package installation for their part of the package list. Previously, a netinstall module would overwrite all of the package configuration done by other netinstall modules. Translations can be provided in the configuration file, `netinstall.conf`. #1303 - The *fstab* module no longer "claims" all the swap partitions it finds on disk. It only uses swap specified for the current installation. This means that "replace" and "alongside" installations will have no swap configured in the target system. # 3.2.18 (2020-01-28) # This release contains contributions from (alphabetically by first name): - Bill Auger ## Core ## - *Assamese* translation has been added (still in preliminary state). - Timezone support code has migrated into the core of Calamares. This means that modules now have easier access to timezone information. Translations for timezones have also been enabled, so it is **possible** at least to translate the displayed zones in the *locale* module. - Branding can now specify whether to (try to) display the Calamares window in the middle of the desktop or not. The *windowPlacement* key in `branding.desc` specifies *center* or *free* placement. ## Modules ## - All modules can now set a new key in `module.desc` called *noconfig*. If this key is set to `true` (the default is `false), no configuration file is searched-for or loaded, and no warning is printed if the configuration is missing. This should tidy up some unnecessary warnings on startup. #1302 #1301 - The *license* module has seen a significant change to its looks. Actions are now labeled more clearly, and the URL (or filename) for each license is displayed. - The *locale* module now supports translations for timezone and location names (e.g. "Berlin" is "Berlijn" in Dutch). - *Packagechooser* is a little more careful with displaying default and empty package names. (thanks to Bill Auger) - The *unpackfs* module now carries a larger weight in the overall progress of the installation, which should resolve downstream reports like "progress stops at 24% for a long time". This is currently hard-coded, but will become configurable in a future release. #1176 # 3.2.17.1 (2019-12-02) # This is a hotfix release for a bug in the grubcfg module. Reported by Philip Mueller and Erik Dubois. ## Modules ## - The *grubcfg* module had a typo in it that made installations fail. # 3.2.17 (2019-11-28) # This release contains contributions from (alphabetically by first name): - Bill Auger ## Core ## - A translation "string freeze" is now enforced by the release scripts. ## Modules ## - A new module, *hostinfo*, places information about the host into Global Storage. This can support contextualprocess modules that need that information. - The password-checks in the *users* module are now ordered consistently. A new check *nonempty* can be used to explicitly check for a non-empty password. This was previously hard-coded. If you have no other password-requirements set (e.g. minimum-length) and rely on Calamares to filter out empty passwords, add this check. - The *grubcfg* module has a new configuration setting *keepDistributor* which prevents replacing the `GRUB_DISTRIBUTION` line when writing the new configuration. #1201 - *packagechooser* documentation has been updated. - *welcome* module now works better with dark themes. - The *license* module could get into a confused state, now fixed. #1271 # 3.2.16 (2019-11-01) # This release contains contributions from (alphabetically by first name): - Bill Auger ## Core ## - Some obscure build scenarios which would lead to bogus module-is- misconfigured messages on startup have been resolved. ## Modules ## - The explanatory messages on the *users* page have moved to tooltips, and placeholder text has been added to the fields. #1202 - The bad-password messages in the *users* page have been improved. #1261 - Password-checking in the *users* module has been substantially changed. A new key *allowWeakPasswords* can be used to introduce an additional checkbox to the page, which can then be used to switch off strict password checking. (Thanks to Bill Auger) - The icons used in password warnings on the *users* page have been changed to the colorful status icons (rather than the thin red X). # 3.2.15 (2019-10-11) # This release contains contributions from (alphabetically by first name): - No other contributors this time around. ## Core ## - No changes to core functionality ## Modules ## - *displaymanager* module now treats *sysconfig* as a regular entry in the *displaymanagers* list, and the *sysconfigSetup* key is used as a shorthand to force **only** that entry in the list. #1253 - *machineid* module has been re-written in C++ and extended with a new configuration key to generate urandom pool data. #1252 - *unpackfs* now supports a special *sourcefs* value of `file` for copying single files (optionally with renaming) or directory trees to the target system. - *unpackfs* now support an *exclude* and *excludeFile* setting for excluding particular files or patters from unpacking. #1229 # 3.2.14 (2019-09-30) # This release contains contributions from (alphabetically by first name): - Andrius Å tikonas - Harald Sitter ## Core ## - No changes to core functionality ## Modules ## - *locale* module no longer recognizes the legacy GeoIP configuration. This has been deprecated since Calamares 3.2.8 and is now removed. - *packagechooser* module can now be custom-labeled in the overall progress (left-hand column). #1228 - *displaymanager* module now recognizes KDE Plasma 5.17. - *displaymanager* module now can handle Wayland sessions and can detect sessions from their .desktop files. #1247 #1248 - *unpackfs* now has special handling for *sourcefs* setting "file" (so you can copy single files or directories that are on the source system, directly to the target). #1188 #1181 # 3.2.13 (2019-08-30) # This release contains contributions from (alphabetically by first name): - Arnaud Ferraris - Arnaud Rebillout - Bill Auger - Kevin Kofler ## Core ## - The Calamares standard coding style -- embodied in `ci/calamaresstyle` has had a few updates and has now been consistently applied across the core codebase (e.g. libcalamares, libcalamaresui, calamares, but not the modules). - *KCoreAddons* is now a required dependency. This lets us drop a chunk of code that was copied from KCoreAddons years ago, and use the (maintained!) upstream version instead. It also gives us KMacroExpander everywhere, which will simplify code for handling substitutions in configuration files. - *Slideshows* now have a new property *activatedInCalamares* which controls the keyboard shortcuts (and can control timers and other properties of the slideshow, too). ## Modules ## - The *packagechooser* module can load data from the config-file, from AppData XML files referred by the config-file, and (new) also from AppStream caches by referring to an application's AppStream id. #1212 - The *partition* module now understands the units *KB*, *MB*, *GB* which are powers-of-ten sizes, alongside the powers-of-two sizes that it already used. (thanks to Arnaud) - The *welcome* module now supports a *Donate* button if *showDonateUrl* is set to a non-empty URL. #1197 - The *welcome* module can have URLs for the various buttons configured directly in the module configuration (rather than in `branding.desc`). # 3.2.12 (2019-08-07) # This release contains contributions from (alphabetically by first name): - apt-ghetto - Bill Auger - embar ## Core ## - Preliminary work to allow jobs to have a *weight* assigned to them has been added. This will allow the progress bar to better reflect progress by the amount of work done rather than purely by the number of jobs. (Thanks to Bill Auger) - Preliminary work has been added to post the installation log to a pastebin for bug reporting. (Thanks to Bill Auger) - Support for translated human-readable strings in Calamares config files has been added. This is used only in the *packagechooser* module (see below) but will expand to those modules that need user-visible strings from the configuration file (existing solutions need either gettext or Qt support). - Esperanto is now available when Qt version 5.12.2 or later is used. ## Modules ## - *fstab* A new configuration key *efiMountOptions* has been added, to allow setting filesystem options specifically for the EFI partition. (Thanks to apt-ghetto) - *packagechooser* is a new module for low-density package choices, e.g. for selecting a default desktop environment, or adding some proprietary drivers, or chosing browsers of office suites. It presents **one** collection of items -- at most ten or so, because of the UI -- and the user can select zero or more of them. The behavior is configurable, and package information can be set through the Calamares configuration file or by reading AppData files for the packages. #426 # 3.2.11 (2019-07-06) # This release contains contributions from (alphabetically by first name): - No other contributors this time around. This is a security release with no functional changes (except for improved security) relative to 3.2.10. The Calamares team would like to acknowledge the help of the following people in reporting and understanding the issues (alphabetically by first name): - Kevin Kofler - Seth Arnold - Simon Quigley - Thomas Ward Both CVE's have been resolved. ## Core ## No core changes. ## Modules ## - *initramfs* could create an initramfs with insecure permissions. Since the keyfile is included in the initramfs, an attacker could read the file from the initramfs. #1190 CVE-2019-13178 - *luksbootkeyfile* created a key file where a window of opportunity existed where the key file could have too-lax file permissions. #1191 CVE-2019-13179 # 3.2.10 (2019-06-28) # This release contains contributions from (alphabetically by first name): - No other contributors this time around. Distributions are **advised** to check the slideshow they use for the installation step; changes in loading and translation mechanisms may require changes in the slideshow. ## Core ## - With this release, option *WITH_PYTHONQT* changes default to **off**. There does not seem to be any serious use of the PythonQt API and the UI opportunities it offers, so begin the process of deprecating and removing that. Sometime in the future, QML pages will fill the gap for easily-prototyped-yet-slick UI elements. - A crash when no *finished* page (or rather, no page at all) is configured after the last *exec* section of the sequence has been solved. The *finished* page can be left out (but then you don't get the restart-now functionality). #1168 - The *slideshow* which is run during installation now has API versions. API version 1 (the default) runs as before, where the slideshow is loaded when the installation starts. API version 2 loads the slideshow on Calamares startup, thus improving responsiveness. Documentation in `src/branding/README.md`. #1152 - The example slideshow now uses API version 2. ## Modules ## - *initramfs* has been changed from a Python module to a C++ module. Packaging will need to adjust now it installs a .so instead of a .py. The module itself functions as before. It does have a new configuration option, to change the version passed as to the `-k` option of update-initramfs. #1180 - *partition* Now has its own setting for *requiredStorage*, duplicating the same setting in the *welcome* module. This is useful for configurations where no *welcome* module is used, but a minimum size must be checked anyway. #1169 # 3.2.9 (2019-06-03) # This release contains contributions from (alphabetically by first name): - Kevin Kofler ## Core ## No user- or deployer-visible changes. Bugfixing as usual, see the milestone for details. ## Modules ## - *branding* now supports os-release variables in the *strings* section, which allows re-using (at runtime) information set in /etc/os-release . This requires KDE Frameworks 5.58. #1150 - *branding* allows the use of FreeDesktop.org icon names for the *productLogo* and *productIcon* keys. If a file is named there, then the file is used, and otherwise the icon is looked up in the current theme. #1160 - *packages* On Arch, with the `pacman` package manager, avoid a hang during system update. #1154 - *welcome* allows a custom image path or icon name to be set for the language-selection drop-down (instead of the international standard one). # 3.2.8 (2019-05-10) # This is a **source-incompatible** release of Calamares. Include files have been shuffled around, so third-party C++ modules will need adjustment to the changed names. This release contains contributions from (alphabetically by first name): - Arnaud Ferraris - Kevin Kofler ## Core ## - All user-visible texts referring to "MB" and "GB" now use the standard "MiB" and "GiB" wording, which matches what we were actually calculating with (i.e. 2^20 and 2^30 respectively). #1129 - The side-pane, which shows the list of steps that will be executed, now tries to fit the text (name of each module) into the available space by shrinking the font as needed. #1137 - *libcalamares* (accidentally) linked with Qt's GUI libraries when PythonQt was found. This led to the odd situation where the non-GUI Calamares library depends on a bunch of GUI libraries. - *libcalamares* The `utils/` subdirectory has been hugely refactored, with functionality split out into separate files. C++ modules will need to have their `#include` names updated. Basically, users of `utils/CalamaresUtils.h` will need to include the header file for the functionality that is actually used. ## Modules ## - *finished* has a new mechanism for configuring the behavior of the *restart now* button. The old-style boolean configuration is still supported but generates a warning. #1138 - *locale* module GeoIP configuration has a new preferred format. See `locale.conf` for details. The old configuration is still supported but will be phased out before 3.3.0 -- in particular, support for "legacy" format will be removed, since that was a crutch for the disappearance of one GeoIP provider in 2018. - *oemid* is a new module for configuring OEM phase-0 (image pre-mastering, or pre-deployment) things. It has limited functionality at the moment, writing only a single batch-identifier file. #943 - *welcome* can now do GeoIP lookups as well (but be careful with the configuration, since you need a GeoIP that provides country information, not just timezones). This will let Calamares select a starting language that matches where it is -- which might not be useful at all. #934 - All Python modules now bail out gracefully on (at least some) bad configurations, rather than raising an exception. The pre-release scripts now test for exceptions to avoid shipping modules with ImportError or SyntaxError results. # 3.2.7 (2019-04-27) # This is a **hotfix** release for regressions introduced in the Python modules. The *localecfg* module was unusable because of a missing `import`. # 3.2.6 (2019-04-25) # This release contains contributions from (alphabetically by first name): - Arnaud Ferraris - Dominic Hayes (feren) - Raul Rodrigo Segura (raurodse) ## Core ## * Under-the-hood code cleanups in lots of parts of the core. Calamares now builds without warnings when Clang 8 is used. * A new *disable-cancel-during-exec* setting provides more fine-grained control than *disable-cancel*, which hides the button entirely. #1122 (Thanks to Dominic, FerenOS) * A branding module can now also cause a stylesheet to be loaded, which will be applied to the widgets inside Calamares. #961 (Thanks to Raul) ## Modules ## * All of the Python-based modules now have translations enabled. #991 * *Displaymanager* module has improved support for LightDM configuration. #1123 (Thanks to Dominic, FerenOS) * *License* module can now display local files inline, and scrolls to allow longer lists of licenses and to support long license texts displayed inline. #1124 #1125 #1052 * *Partition* module has additional checks for validity partition layouts. #1127 (Thanks to Arnaud) * *Welcome* module has improved usability: a standard icon alongside the *Language* label, for improved recognition, and improved language-list display and sorting. #1107 # 3.2.5 (2019-04-15) # This release contains contributions from (alphabetically by first name): - Arnaud Ferraris - Dan Simmons - Gabriel Craciunescu ## Core ## * View modules (in C++) can now perform their own requirements-checking to see if installation makes sense. This expands upon the existing requirements checks in the welcome module (RAM, disk space, ..). The checks have been made asynchronous, so that responsiveness during requirements-checking is improved and the user has better feedback. * Support for building an AppImage of Calamares has been added to the `ci/` directory. There are use-cases where a containerized build and configuration make sense rather than having Calamares installed in the host system. (Thanks to the AppImage team, Alexis) * OEM mode (phase-1) now correctly refers to Calamares as a "Setup Program" rather than an installer. #1100 (Thanks to Arnaud) ## Modules ## * *Bootloader* module: a serious bug introduced in 3.2.4 which prevents succesful boot after installation on EFI machines, has been repaired. (Thanks to Gabriel) #1104 * *Displaymanager* module: it is no longer a fatal error to not have any display-managers. #1095 * *Partition* module: it is now possible to build without libparted. Since KPMCore may not need this library anymore, it is a dependency that will be dropped as soon as it is feasible. Add this to the CMake flags: `-DCMAKE_DISABLE_FIND_PACKAGE_LIBPARTED=ON` * *Partition* module: the location that is selected for the bootloader, no longer changes when a new partition is created. #1098 * Python modules: several modules have had translations added. This is usually only visible when the module runs as part of the *exec* step, when the module's *pretty name* is displayed. In addition, some error messages are now translated. * *UnpackFS* module: improved progress reporting and tests. #565 # 3.2.4 (2019-02-12) # This release contains contributions from (alphabetically by first name): - Alf Gaida - aliveafter1000 - Arnaud Ferraris - Caio Jordão Carvalho - Collabora LTD - Gabriel Craciunescu - Kevin Kofler - Philip Mueller - Scott Harvey ## Core ## * The Calamares application now recognizes the `-X` or `--xdg-config` option, which adds XDG_DATA_DIRS to the places used to find QML and branding directories, and XDG_CONFIG_DIRS to the places used to find the global settings and module configurations. This allows a more fine-grained, and more layered, approach to setting up Calamares configurations (in particular, distro's can **add** configuration files and give them priority, instead of **forking** configuration files). * The *branding* file now contains settings that control the size and resize behavior of Calamares. See the branding file for more documentation. In particular, the setting *windowExpanding* can be set to *normal*, *fullscreen* or *noexpand*. * The `settings.conf` file can now configure whether the *Cancel* button is shown (this isn't a branding thing, because it's quite fundamental to the workflow of the installer). ## Modules ## * The *partition* module supports RAID devices, but only when Calamares is compiled with the newest KPMCore release (3.3.0). * The calculation of required space -- including swap -- has been simplified, and Calamares no longer reserves 2GiB of space in calculations for internal use (this means that it no longer mysteriously drops swap when the disk size is close to the required installation size). * The name of the type of default filesystem (e.g. ext4 or btrfs) is now handled case- and localization-insensitively. This means that *btrfs* is now always an acceptable spelling. * The currently-selected disk device is remembered between manual partitioning and the partitioning-overview pages. (Thanks to Arnaud) * *partition* There is new support for partitioning layout presets. See `partition.conf` for documentation and details. * The *keyboard* module now handles the (bogus) Austrian keymap for the system console properly. (Thanks to Kevin) * The *preservefiles* module now has a mechanism for setting the permissions (and ownership) of preserved files. (Thanks to Scott) * New module *fsresizer* can be used to resize filesystems. It is intended for use in OEM installs where an image of fixed size is created, and then sized to the actual SD card the user has used. * The *mount* module now handles missing *extraMounts* and *extraMountsEfi* keys gracefully (this is probably a misconfiguration, though, and gives a warning). * The *packages* module now supports pre- and post-script options for all operations, not just during install (keep in mind that these run as three separate shells, though). * A new *rawfs* module supports straightforward copying of filesystems from the installation media to the target stystem. This can be used, for instance, for block-level-identical installations. # 3.2.3 (2019-01-09) # This release contains contributions from (alphabetically by first name): - aliveafter1000 ## Core ## There are no core changes in this release. ## Modules ## * *partition* Fixed bug where, during detection of existing systems, the existing system partitions may be mounted and then files deleted. This is a **limited** version of the patch from aliveafter1000 that will be in 3.2.4, which tries harder to mount filesystems read-only and unmodifiable. * *locale* It was possible to set the installer and system language (e.g. to German) while the global storage value for *locale* remained set to English. Then no localization packages are installed (see feature `${LOCALE}` in `packages.conf`). Reported downstream in Netrunner. # 3.2.2 (2018-09-04) # This release contains contributions from (alphabetically by first name): - Andrius Å tikonas - artoo@cromnix.org - Caio Jordão Carvalho - Harald Sitter - Philip Müller - Simon Quigley - Walter Lapchynski ## Core ## * Example configurations are **no longer installed** by default. The default setting for *INSTALL_CONFIG* has changed. Distributions are strongly encouraged to write their own configuration files and not rely on the example configuration files. Example configurations may change unpredictably. * It is now possible to express module dependencies through the *requiredModules* key in `module.desc`. All of the required modules for a given module must occur in the sequence **before** the module requiring them. None of the core modules use this facility. * The search paths for QML files, branding descriptors and module descriptors have been revamped and now self-document in the log. * A new `ci/RELEASE.sh` script has been added to streamline releases; it is not guaranteed to work anywhere in particular though. ## Modules ## * When multiple modules are mutually exclusive, or don't make sense to enable concurrectly, a new `USE_` framework has been added to CMake to simplify the selection of modules. This is in addition to the existing `SKIP_MODULES` mechanism. * Various off-by-one-sector errors in the automatic partitioning mode have been corrected. In addition, swap space is calculated a little more conservatively. * A new module has been added to the core which can configure openrc services. To make services configuration consistent: - The *services* module has been **renamed** *services-systemd*, - The openrc module is named *services-openrc*, - At CMake time, it is possible to select all of the services modules, or one specific one, by setting the *USE_services* CMake variable. By default, all of the modules are built and installed. * The systemd-services module can now disable targets and mask both targets and services (which will allow you to break the system with a bad configuration). The configuration is a little more flexible because a service (or target) name can be used on its own with sensible defaults. * The displaymanager module has been entirely revamped. A long-standing bug which ignored the settings for default desktop has been fixed (thanks to Walter Lapchynski). Translations have been added to the error messages. Each DM now has an implementation class for doing all the configuration steps it needs. This groups the code needed for a specific DM (and presumably, per-distro) in one place. Distro's are **strongly advised** to re-test their DM configuration and installation with the revamped code. # 3.2.1 (2018-06-25) # This release contains contributions from (alphabetically by first name): - Bill Auguer - Gabriel Craciunescu - Phil Mueller - Raul Rodrigo Segura ## Core ## * Qt 5.7 is now the minimum required Qt version. Because KPMCore (a fairly fundamental dependency) requires Qt 5.7, Calamares has followed suit. * New testing application `loadmodule` for loading and running a single Calamares module. * New translations Belarussian and Korean. * Jobs can now be *emergency jobs* which run even after a failure. * Improved debugging when modules fail to load. * Bad configuration files will now cause the user-interface of Calamares to display an error message, rather than silently ignoring some configuration errors. This will certainly cause problems for distributions with sloppy configurations. ## Modules ## * New module preservefiles, keeps (log) files around after install; this duplicates functionality with the unmount module, but unmount is very late, rather limited, and fragile. * Interactiveterminal module now disables itself if build requirements are not met, rather than blocking the build. * Fixes in the timezone map data make the southern hemisphere more usable and put Reykjavik in its place. * The packages module can now update the target system if explicitly told to do so. * More paths and executables are configurable in the bootloader module. * Distributions are advised to review the `users.conf` setup **again**, as some changes in version 3.2.0 caused regressions downstream. * Distributions are advised to review their `locale.gen` files **again**. Previous changes were too restrictive, matching only the specific format Chakra Linux uses. Calamares now preserves all the comment-lines in the file and writes enabled locales at the end, with a descriptive comment. # 3.2.0 (2018-05-17) # This release contains contributions from (alphabetically by first name): - Alf Gaida - AlmAck - Caio Jordão Carvalho - Frede H ## Modules ## * UI annoyances in the partitioning module were fixed; the mount-point selector is now more obvious when no mount-point has been chosen, and the mount-point and flags are preserved when (re)editing partitions. * The handling of `@@ROOT@@` substitution in shellprocesses was backwards; this has been fixed (the substitution is made when running in the **host**). * The user shell is no longer hard-coded to `/bin/bash`, but follows the default setting for useradd(8), e.g. those set in `/etc/default/useradd`. calamares-3.2.20/CMakeLists.txt000066400000000000000000000544651362604102500163030ustar00rootroot00000000000000# === This file is part of Calamares - === # # Calamares 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. # # Calamares 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 Calamares. If not, see . # # SPDX-License-Identifier: GPL-3.0+ # License-Filename: LICENSE # ### # # Generally, this CMakeLists.txt will find all the dependencies for Calamares # and complain appropriately. See below (later in this file) for CMake-level # options. There are some "secret" options as well: # # SKIP_MODULES : a space or semicolon-separated list of directory names # under src/modules that should not be built. # USE_ : fills in SKIP_MODULES for modules called - # WITH_ : try to enable (these usually default to ON). For # a list of WITH_ grep CMakeCache.txt after running # CMake once. # BUILD_ : choose additional things to build # DEBUG_ : special developer flags for debugging # # Example usage: # # cmake . -DSKIP_MODULES="partition luksbootkeycfg" # # One special target is "show-version", which can be built # to obtain the version number from here. cmake_minimum_required( VERSION 3.3 FATAL_ERROR ) project( CALAMARES VERSION 3.2.20 LANGUAGES C CXX ) set( CALAMARES_VERSION_RC 0 ) # Set to 0 during release cycle, 1 during development ### OPTIONS # option( INSTALL_CONFIG "Install configuration files" OFF ) option( INSTALL_POLKIT "Install Polkit configuration" ON ) option( BUILD_TESTING "Build the testing tree." ON ) option( WITH_PYTHON "Enable Python modules API (requires Boost.Python)." ON ) option( WITH_PYTHONQT "Enable next generation Python modules API (experimental, requires PythonQt)." OFF ) option( WITH_KF5Crash "Enable crash reporting with KCrash." ON ) ### USE_* # # By convention, when there are multiple modules that implement similar # functionality, and it only makes sense to have **at most one** of them # enabled at any time, those modules are named -. # For example, services-systemd and services-openrc. # # Setting up SKIP_MODULES to ignore "the ones you don't want" can be # annoying and error-prone (e.g. if a new module shows up). The USE_* # modules provide a way to do automatic selection. To pick exactly # one of the implementations from group , set USE_ to the # name of the implementation. If USE_ is unset, or empty, then # all the implementations are enabled (this just means they are # **available** to `settings.conf`, not that they are used). # # Currently, only USE_services is in use (to pick only one of the two # modules, systemd or openrc). set( USE_services "" CACHE STRING "Select the services module to use" ) ### Calamares application info # set( CALAMARES_ORGANIZATION_NAME "Calamares" ) set( CALAMARES_ORGANIZATION_DOMAIN "github.com/calamares" ) set( CALAMARES_APPLICATION_NAME "Calamares" ) set( CALAMARES_DESCRIPTION_SUMMARY "The distribution-independent installer framework" ) ### Transifex (languages) info # # complete = 100% translated, # good = nearly complete (use own judgement, right now >= 75%) # ok = incomplete (more than 25% untranslated, at least 5% translated), # incomplete = <5% translated, placeholder in tx; these are not included. # # Language en (source language) is added later. It isn't listed in # Transifex either. Get the list of languages and their status # from https://transifex.com/calamares/calamares/ , or (preferably) # use ci/txstats.py to automatically check. # # When adding a new language, take care that it is properly loaded # by the translation framework. Languages with alternate scripts # (sr@latin in particular) may need special handling in CalamaresUtils.cpp. # # TODO: drop the es_ES translation from Transifex # # NOTE: move eo (Esperanto) to _ok once Qt can actually create a # locale for it. (Qt 5.12.2 can, see check later on). # NOTE: update these lines by running txstats.py, or copy these four lines # and prefix each variable name with "p", so that the automatic # checks for new languages and misspelled ones are done (that is, # copy these four lines to four backup lines, add "p", and then update # the original four lines with the current translations). # # Total 62 languages set( _tx_complete ca da fi_FI fr he hr ja lt sq tr_TR ) set( _tx_good ast cs_CZ de es es_MX et gl hi hu id it_IT ko ml nl pl pt_BR pt_PT ru sk zh_TW ) set( _tx_ok ar as be bg el en_GB es_PR eu is mr nb ro sl sr sr@latin sv th uk zh_CN ) set( _tx_incomplete ca@valencia eo fa fr_CH gu kk kn lo mk ne_NP ur uz ) ### Required versions # # See DEPENDENCIES section below. set( QT_VERSION 5.9.0 ) set( YAMLCPP_VERSION 0.5.1 ) set( ECM_VERSION 5.18 ) set( PYTHONLIBS_VERSION 3.3 ) set( BOOSTPYTHON_VERSION 1.55.0 ) ### CMAKE SETUP # set( CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/CMakeModules" ) # Enable IN_LIST if( POLICY CMP0057 ) cmake_policy( SET CMP0057 NEW ) endif() # CMake 3.9, 3.10 compatibility if( POLICY CMP0071 ) cmake_policy( SET CMP0071 NEW ) endif() if(NOT CMAKE_VERSION VERSION_LESS "3.10.0") list(APPEND CMAKE_AUTOMOC_MACRO_NAMES "K_PLUGIN_FACTORY_WITH_JSON" "K_EXPORT_PLASMA_DATAENGINE_WITH_JSON" "K_EXPORT_PLASMA_RUNNER" ) endif() ### C++ SETUP # set( CMAKE_CXX_STANDARD 14 ) set( CMAKE_CXX_STANDARD_REQUIRED ON ) set( CMAKE_C_STANDARD 99 ) set( CMAKE_C_STANDARD_REQUIRED ON ) # Debugging flags # # Possible debugging flags are: # - DEBUG_TIMEZONES draws latitude and longitude lines on the timezone # widget and enables chatty debug logging, for dealing with the timezone # location database. # - DEBUG_FILESYSTEMS does extra logging and checking when looking at # partition configuration. Lists known KPMCore FS types. # # The flags listed here are enabled in Debug builds. By default, none # are **actually** listed, because they're for such specific scenarios. set( _enable_debug_flags # DEBUG_TIMEZONES # DEBUG_FILESYSTEMS ) # Add those flags to the CXX flags in a suitable format. foreach( _edf ${_enable_debug_flags} ) string( APPEND CMAKE_CXX_FLAGS_DEBUG " -D${_edf}" ) endforeach() set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall" ) if( CMAKE_CXX_COMPILER_ID MATCHES "Clang" ) message( STATUS "Found Clang ${CMAKE_CXX_COMPILER_VERSION}, setting up Clang-specific compiler flags." ) set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall" ) set( CMAKE_C_FLAGS_DEBUG "-g" ) set( CMAKE_C_FLAGS_MINSIZEREL "-Os -DNDEBUG" ) set( CMAKE_C_FLAGS_RELEASE "-O4 -DNDEBUG" ) set( CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g" ) # Clang warnings: doing *everything* is counter-productive, since it warns # about things which we can't fix (e.g. C++98 incompatibilities, but # Calamares is C++14). foreach( CLANG_WARNINGS -Weverything -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-padded -Wno-undefined-reinterpret-cast -Wno-global-constructors -Wno-exit-time-destructors -Wno-missing-prototypes -Wno-documentation-unknown-command -Wno-unknown-warning-option -Werror=return-type ) string( APPEND CMAKE_CXX_FLAGS " ${CLANG_WARNINGS}" ) endforeach() set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DNOTREACHED='//' -DFALLTHRU='[[clang::fallthrough]]'") # Third-party code where we don't care so much about compiler warnings # (because it's uncomfortable to patch) get different flags; use # mark_thirdparty_code( [...] ) # to switch off warnings for those sources. set( SUPPRESS_3RDPARTY_WARNINGS "-Wno-everything" ) set( SUPPRESS_BOOST_WARNINGS " -Wno-zero-as-null-pointer-constant -Wno-disabled-macro-expansion" ) set( CMAKE_CXX_FLAGS_DEBUG "-g ${CMAKE_CXX_FLAGS_DEBUG}" ) set( CMAKE_CXX_FLAGS_MINSIZEREL "-Os -DNDEBUG" ) set( CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG" ) set( CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g" ) set( CMAKE_TOOLCHAIN_PREFIX "llvm-" ) set( CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-undefined" ) # The path prefix is only relevant for CMake 3.16 and later, fixes #1286 set( CMAKE_AUTOMOC_PATH_PREFIX OFF ) set( CALAMARES_AUTOMOC_OPTIONS "-butils/moc-warnings.h" ) set( CALAMARES_AUTOUIC_OPTIONS --include utils/moc-warnings.h ) else() set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,--no-undefined" ) set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,--fatal-warnings -Wnon-virtual-dtor -Woverloaded-virtual -Werror=return-type" ) set( SUPPRESS_3RDPARTY_WARNINGS "" ) set( SUPPRESS_BOOST_WARNINGS "" ) set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DNOTREACHED='__builtin_unreachable();' -DFALLTHRU='/* */'" ) endif() # Use mark_thirdparty_code() to reduce warnings from the compiler # on code that we're not going to fix. Call this with a list of files. macro(mark_thirdparty_code) set_source_files_properties( ${ARGV} PROPERTIES COMPILE_FLAGS "${SUPPRESS_3RDPARTY_WARNINGS}" COMPILE_DEFINITIONS "THIRDPARTY" ) endmacro() if( CMAKE_COMPILER_IS_GNUCXX ) if( CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.9 OR CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 4.9 ) message( STATUS "Found GNU g++ ${CMAKE_CXX_COMPILER_VERSION}, enabling colorized error messages." ) set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fdiagnostics-color=auto" ) endif() endif() include( FeatureSummary ) include( CMakeColors ) ### DEPENDENCIES # find_package( Qt5 ${QT_VERSION} CONFIG REQUIRED Concurrent Core Gui Widgets LinguistTools Svg Quick QuickWidgets ) if( Qt5_VERSION VERSION_GREATER 5.12.1 ) # At least Qt 5.12.2 seems to support Esperanto in QLocale if( "eo" IN_LIST _tx_incomplete ) message(STATUS "Esperanto support since Qt 5.12.2, enabling Esperanto locale") list( REMOVE_ITEM _tx_incomplete "eo" ) list( APPEND _tx_ok "eo" ) endif() endif() # Optional Qt parts find_package( Qt5DBus CONFIG ) find_package( YAMLCPP ${YAMLCPP_VERSION} REQUIRED ) if( INSTALL_POLKIT ) find_package( PolkitQt5-1 REQUIRED ) else() # Find it anyway, for dependencies-reporting find_package( PolkitQt5-1 ) endif() set_package_properties( PolkitQt5-1 PROPERTIES DESCRIPTION "Qt5 support for Polkit" URL "https://cgit.kde.org/polkit-qt-1.git" PURPOSE "PolkitQt5-1 helps with installing Polkit configuration" ) # Find ECM once, and add it to the module search path; Calamares # modules that need ECM can do # find_package(ECM ${ECM_VERSION} REQUIRED NO_MODULE), # no need to mess with the module path after. find_package(ECM ${ECM_VERSION} NO_MODULE) if( ECM_FOUND ) set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${CMAKE_MODULE_PATH}) if ( BUILD_TESTING ) # ECM implies that we can build the tests, too find_package( Qt5 COMPONENTS Test REQUIRED ) include( ECMAddTests ) endif() include(KDEInstallDirs) endif() find_package( KF5 QUIET COMPONENTS CoreAddons Crash ) set_package_properties( KF5::CoreAddons PROPERTIES TYPE REQUIRED DESCRIPTION "Classes built on QtCore for About Data" URL "https://api.kde.org/frameworks/kcoreaddons/" PURPOSE "About Calamares" ) if( NOT KF5Crash_FOUND ) set( WITH_KF5Crash OFF ) endif() if( BUILD_TESTING ) enable_testing() endif () find_package( PythonLibs ${PYTHONLIBS_VERSION} ) set_package_properties( PythonLibs PROPERTIES DESCRIPTION "C interface libraries for the Python 3 interpreter." URL "http://python.org" PURPOSE "Python 3 is used for Python job modules." ) if ( PYTHONLIBS_FOUND ) # Since Boost provides CMake config files (starting with Boost 1.70. # or so) the mess that is the Calamares find code picks the wrong # bits. Suppress those CMake config files, as suggested by @jmrcpn set(Boost_NO_BOOST_CMAKE ON) include( BoostPython3 ) find_boost_python3( ${BOOSTPYTHON_VERSION} ${PYTHONLIBS_VERSION_STRING} CALAMARES_BOOST_PYTHON3_FOUND ) set_package_properties( Boost PROPERTIES PURPOSE "Boost.Python is used for Python job modules." ) find_package( PythonQt ) set_package_properties( PythonQt PROPERTIES DESCRIPTION "A Python embedding solution for Qt applications." URL "http://pythonqt.sourceforge.net" PURPOSE "PythonQt is used for Python view modules." ) endif() if( NOT PYTHONLIBS_FOUND OR NOT CALAMARES_BOOST_PYTHON3_FOUND ) message(STATUS "Disabling Boost::Python modules") set( WITH_PYTHON OFF ) endif() if( NOT PYTHONLIBS_FOUND OR NOT PYTHONQT_FOUND ) message(STATUS "Disabling PythonQt modules") set( WITH_PYTHONQT OFF ) endif() ### Transifex Translation status # # Construct language lists for use. If there are p_tx* variables, # then run an extra cmake-time check for consistency of the old # (p_tx*) and new (_tx*) lists. # set( prev_tx ${p_tx_complete} ${p_tx_good} ${p_tx_ok} ${p_tx_incomplete} ) set( curr_tx ${_tx_complete} ${_tx_good} ${_tx_ok} ${_tx_incomplete} ) set( tx_errors OFF ) if ( prev_tx ) # Gone in new list foreach( l ${prev_tx} ) list( FIND curr_tx ${l} p_l ) if( p_l EQUAL -1 ) message(WARNING "Language ${l} was present in previous translations and is now absent.") set( tx_errors ON ) endif() endforeach() # New in list foreach( l ${curr_tx} ) list( FIND prev_tx ${l} p_l ) if( p_l EQUAL -1 ) message(WARNING "Language ${l} is new.") set( tx_errors ON ) endif() set( p_l "lang/calamares_${l}.ts" ) if( NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${p_l} ) message(WARNING "Language ${l} has no .ts file yet.") set( tx_errors ON ) endif() endforeach() unset( p_l ) unset( l ) endif() unset( prev_tx ) unset( curr_tx ) if( tx_errors ) message( FATAL_ERROR "Translation warnings, see above." ) endif() set( CALAMARES_TRANSLATION_LANGUAGES en ${_tx_complete} ${_tx_good} ${_tx_ok} ) list( SORT CALAMARES_TRANSLATION_LANGUAGES ) add_subdirectory( lang ) # i18n tools ### Example Distro # # For testing purposes Calamares includes a very, very, limited sample # distro called "Generic". The root filesystem of "Generic" lives in # data/example-root and can be squashed up as part of the build, so # that a pure-upstream run of ./calamares -d from the build directory # (with all the default settings and configurations) can actually # do an complete example run. # # Some binaries from the build host (e.g. /bin and /lib) are also # squashed into the example filesystem. # # To build the example distro (for use by the default, example, # unsquashfs module), build the target 'example-distro', eg.: # # make example-distro # find_program( mksquashfs_PROGRAM mksquashfs ) if( mksquashfs_PROGRAM ) set( mksquashfs_FOUND ON ) set( src_fs ${CMAKE_SOURCE_DIR}/data/example-root/ ) set( dst_fs ${CMAKE_BINARY_DIR}/example.sqfs ) if( EXISTS ${src_fs} ) # based on the build host. If /lib64 exists, assume it is needed. # Collect directories needed for a minimal binary distro, # Note that the last path component is added to the root, so # if you add /usr/sbin here, it will be put into /sbin_1. # Add such paths to /etc/profile under ${src_fs}. set( candidate_fs /sbin /bin /lib /lib64 ) set( host_fs "" ) foreach( c_fs ${candidate_fs} ) if( EXISTS ${c_fs} ) list( APPEND host_fs ${c_fs} ) endif() endforeach() add_custom_command( OUTPUT ${dst_fs} COMMAND ${mksquashfs_PROGRAM} ${src_fs} ${dst_fs} -all-root COMMAND ${mksquashfs_PROGRAM} ${host_fs} ${dst_fs} -all-root ) add_custom_target(example-distro DEPENDS ${dst_fs}) endif() else() set( mksquashfs_FOUND OFF ) endif() # Doesn't list mksquashfs as an optional dep, though, because it # hasn't been sent through the find_package() scheme. # # "http://tldp.org/HOWTO/SquashFS-HOWTO/creatingandusing.html" add_feature_info( ExampleDistro ${mksquashfs_FOUND} "Create example-distro target.") ### CALAMARES PROPER # set( CALAMARES_VERSION ${CALAMARES_VERSION_MAJOR}.${CALAMARES_VERSION_MINOR}.${CALAMARES_VERSION_PATCH} ) # In rare cases we have hotfix-releases with a tweak if( CALAMARES_VERSION_TWEAK ) set( CALAMARES_VERSION "${CALAMARES_VERSION}.${CALAMARES_VERSION_TWEAK}" ) endif() set( CALAMARES_VERSION_SHORT "${CALAMARES_VERSION}" ) if( CALAMARES_VERSION_RC ) set( CALAMARES_VERSION ${CALAMARES_VERSION}rc${CALAMARES_VERSION_RC} ) endif() # additional info for non-release builds if( NOT BUILD_RELEASE AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git/" ) include( CMakeDateStamp ) set( CALAMARES_VERSION_DATE "${CMAKE_DATESTAMP_YEAR}${CMAKE_DATESTAMP_MONTH}${CMAKE_DATESTAMP_DAY}" ) if( CALAMARES_VERSION_DATE GREATER 0 ) set( CALAMARES_VERSION ${CALAMARES_VERSION}.${CALAMARES_VERSION_DATE} ) endif() include( CMakeVersionSource ) if( CMAKE_VERSION_SOURCE ) set( CALAMARES_VERSION ${CALAMARES_VERSION}-${CMAKE_VERSION_SOURCE} ) endif() endif() # Special target for not-RC (e.g. might-be-release) builds. # This is used by the release script to get the version. if ( CALAMARES_VERSION_RC EQUAL 0 ) add_custom_target(show-version ${CMAKE_COMMAND} -E echo CALAMARES_VERSION=${CALAMARES_VERSION_SHORT} USES_TERMINAL ) endif() # enforce using constBegin, constEnd for const-iterators add_definitions( "-DQT_STRICT_ITERATORS" ) # set paths set( CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" ) set( CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" ) set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" ) # Better default installation paths: GNUInstallDirs defines # CMAKE_INSTALL_FULL_SYSCONFDIR to be CMAKE_INSTALL_PREFIX/etc by default # but we really want /etc if( NOT DEFINED CMAKE_INSTALL_SYSCONFDIR ) set( CMAKE_INSTALL_SYSCONFDIR "/etc" ) endif() # make predefined install dirs available everywhere include( GNUInstallDirs ) # make uninstall support configure_file( "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY ) # Early configure these files as we need them later on set( CALAMARES_CMAKE_DIR "${CMAKE_SOURCE_DIR}/CMakeModules" ) set( CALAMARES_LIBRARIES calamares ) add_subdirectory( src ) add_feature_info(Python ${WITH_PYTHON} "Python job modules") add_feature_info(PythonQt ${WITH_PYTHONQT} "Python view modules") add_feature_info(Config ${INSTALL_CONFIG} "Install Calamares configuration") add_feature_info(KCrash ${WITH_KF5Crash} "Crash dumps via KCrash") # Add all targets to the build-tree export set set( CMAKE_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/Calamares" CACHE PATH "Installation directory for CMake files" ) set( CMAKE_INSTALL_FULL_CMAKEDIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_CMAKEDIR}" ) export( TARGETS calamares FILE "${PROJECT_BINARY_DIR}/CalamaresLibraryDepends.cmake" ) # Export the package for use from the build-tree # (this registers the build-tree with a global CMake-registry) export( PACKAGE Calamares ) # Create a CalamaresBuildTreeSettings.cmake file for the use from the build tree configure_file( CalamaresBuildTreeSettings.cmake.in "${PROJECT_BINARY_DIR}/CalamaresBuildTreeSettings.cmake" @ONLY ) # Create the CalamaresConfig.cmake and CalamaresConfigVersion files file( RELATIVE_PATH CONF_REL_INCLUDE_DIR "${CMAKE_INSTALL_FULL_CMAKEDIR}" "${CMAKE_INSTALL_FULL_INCLUDEDIR}" ) configure_file( CalamaresConfig.cmake.in "${PROJECT_BINARY_DIR}/CalamaresConfig.cmake" @ONLY ) configure_file( CalamaresConfigVersion.cmake.in "${PROJECT_BINARY_DIR}/CalamaresConfigVersion.cmake" @ONLY ) configure_file( CalamaresUse.cmake.in "${PROJECT_BINARY_DIR}/CalamaresUse.cmake" @ONLY ) # Install the cmake files install( FILES "${PROJECT_BINARY_DIR}/CalamaresConfig.cmake" "${PROJECT_BINARY_DIR}/CalamaresConfigVersion.cmake" "${PROJECT_BINARY_DIR}/CalamaresUse.cmake" "CMakeModules/CalamaresAddBrandingSubdirectory.cmake" "CMakeModules/CalamaresAddLibrary.cmake" "CMakeModules/CalamaresAddModuleSubdirectory.cmake" "CMakeModules/CalamaresAddPlugin.cmake" "CMakeModules/CalamaresAddTest.cmake" "CMakeModules/CalamaresAddTranslations.cmake" "CMakeModules/CalamaresAutomoc.cmake" "CMakeModules/CMakeColors.cmake" DESTINATION "${CMAKE_INSTALL_CMAKEDIR}" ) # Install the export set for use with the install-tree install( EXPORT CalamaresLibraryDepends DESTINATION "${CMAKE_INSTALL_CMAKEDIR}" ) if( INSTALL_CONFIG ) install( FILES settings.conf DESTINATION share/calamares ) endif() if( INSTALL_POLKIT ) install( FILES com.github.calamares.calamares.policy DESTINATION "${POLKITQT-1_POLICY_FILES_INSTALL_DIR}" ) endif() install( FILES calamares.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/applications ) install( FILES man/calamares.8 DESTINATION ${CMAKE_INSTALL_MANDIR}/man8/ ) # uninstall target configure_file( "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY ) add_custom_target( uninstall COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake ) ### CMAKE SUMMARY REPORT # get_directory_property( SKIPPED_MODULES DIRECTORY src/modules DEFINITION LIST_SKIPPED_MODULES ) calamares_explain_skipped_modules( ${SKIPPED_MODULES} ) feature_summary( WHAT DISABLED_FEATURES DESCRIPTION "The following features have been disabled:" QUIET_ON_EMPTY ) feature_summary( WHAT OPTIONAL_PACKAGES_NOT_FOUND DESCRIPTION "The following OPTIONAL packages were not found:" QUIET_ON_EMPTY ) feature_summary( WHAT REQUIRED_PACKAGES_NOT_FOUND FATAL_ON_MISSING_REQUIRED_PACKAGES DESCRIPTION "The following REQUIRED packages were not found:" QUIET_ON_EMPTY ) calamares-3.2.20/CMakeModules/000077500000000000000000000000001362604102500160365ustar00rootroot00000000000000calamares-3.2.20/CMakeModules/BoostPython3.cmake000066400000000000000000000064461362604102500214250ustar00rootroot00000000000000# On Ubuntu 14.04, the libboost-python1.54-dev package comes with one library # for each Python version: # libboost_python-py27.so # libboost_python-py33.so # libboost_python-py34.so # # Boost upstream however installs Boost.Python3 libboost_python3.so, which is # what FindBoost.cmake is looking for. It looks for a library named # "libboost_${component}.so". # # On Gentoo instead, the >=dev-libs/boost-1.54 package provides boost library # with a name like: # libboost_python-2.7.so # libboost_python-3.3.so # libboost_python-3.4.so # depending on what python's targets you selected during install # # On Fedora >= 30 instead, the boost-python3-devel provides boost library with a # name like: # libboost_python37.so # depending on what python's targets you selected during install # # find_boost_python3() tries to find the package with different component # names. By default it tries "python3", "python-py$suffix" and # "python-$dotsuffix", where suffix is based on the `python_version` argument. # One can supply a custom component name by setting the # `CALAMARES_BOOST_PYTHON3_COMPONENT` variable at CMake time. set( CALAMARES_BOOST_PYTHON3_COMPONENT python3 CACHE STRING "Name of the Boost.Python component. If Boost.Python is installed as libboost_python-foo.so then this variable should be set to 'python-foo'." ) include(FindPackageHandleStandardArgs) macro( _find_boost_python3_int boost_version componentname found_var ) foreach( _fbp_name ${CALAMARES_BOOST_PYTHON3_COMPONENT} ${componentname} ) find_package( Boost ${boost_version} QUIET COMPONENTS ${_fbp_name} ) string( TOUPPER ${_fbp_name} _fbp_uc_name ) if( Boost_${_fbp_uc_name}_FOUND ) if( CMAKE_SYSTEM_NAME MATCHES "FreeBSD" ) # No upcasing set( ${found_var} ${_fbp_name} ) else() set( ${found_var} ${_fbp_uc_name} ) endif() break() endif() endforeach() endmacro() macro( find_boost_python3 boost_version python_version found_var ) set( ${found_var} OFF ) set( _fbp_found OFF ) # turns "3.4.123abc" into "34" string( REGEX REPLACE "([0-9]+)\\.([0-9]+)\\..*" "\\1\\2" _fbp_python_short_version ${python_version} ) _find_boost_python3_int( ${boost_version} python-py${_fbp_python_short_version} _fbp_found ) if (NOT _fbp_found) _find_boost_python3_int( ${boost_version} python${_fbp_python_short_version} _fbp_found ) endif() if (NOT _fbp_found) # The following loop changes the searched name for Gentoo based distributions # turns "3.4.123abc" into "3.4" string( REGEX REPLACE "([0-9]+)\\.([0-9]+)\\..*" "\\1.\\2" _fbp_python_short_version ${python_version} ) _find_boost_python3_int( ${boost_version} python-${_fbp_python_short_version} _fbp_found ) endif() set( ${found_var} ${_fbp_found} ) # This is superfluous, but allows proper reporting in the features list if ( _fbp_found ) find_package( Boost ${boost_version} COMPONENTS ${_fbp_found} ) else() find_package( Boost ${boost_version} COMPONENTS Python ) endif() set_package_properties( Boost PROPERTIES DESCRIPTION "A C++ library which enables seamless interoperability between C++ and Python 3." URL "http://www.boost.org" ) endmacro() calamares-3.2.20/CMakeModules/CMakeColors.cmake000066400000000000000000000015361362604102500212070ustar00rootroot00000000000000if(NOT WIN32) set(_use_color ON) if("0" STREQUAL "$ENV{CLICOLOR}") set(_use_color OFF) endif() if("0" STREQUAL "$ENV{CLICOLOR_FORCE}") set(_use_color OFF) endif() if(NOT CMAKE_COLOR_MAKEFILE) set(_use_color OFF) endif() if(_use_color) string(ASCII 27 Esc) set(ColorReset "${Esc}[m") set(ColorBold "${Esc}[1m") set(Red "${Esc}[31m") set(Green "${Esc}[32m") set(Yellow "${Esc}[33m") set(Blue "${Esc}[34m") set(Magenta "${Esc}[35m") set(Cyan "${Esc}[36m") set(White "${Esc}[37m") set(BoldRed "${Esc}[1;31m") set(BoldGreen "${Esc}[1;32m") set(BoldYellow "${Esc}[1;33m") set(BoldBlue "${Esc}[1;34m") set(BoldMagenta "${Esc}[1;35m") set(BoldCyan "${Esc}[1;36m") set(BoldWhite "${Esc}[1;37m") endif() endif() calamares-3.2.20/CMakeModules/CMakeDateStamp.cmake000066400000000000000000000011761362604102500216300ustar00rootroot00000000000000find_program(DATE_EXECUTABLE NAMES date) mark_as_advanced(DATE_EXECUTABLE) if(DATE_EXECUTABLE) execute_process( COMMAND ${DATE_EXECUTABLE} +%Y OUTPUT_VARIABLE CMAKE_DATESTAMP_YEAR OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} ) execute_process( COMMAND ${DATE_EXECUTABLE} +%m OUTPUT_VARIABLE CMAKE_DATESTAMP_MONTH OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} ) execute_process( COMMAND ${DATE_EXECUTABLE} +%d OUTPUT_VARIABLE CMAKE_DATESTAMP_DAY OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} ) endif() calamares-3.2.20/CMakeModules/CMakeVersionSource.cmake000066400000000000000000000030151362604102500225460ustar00rootroot00000000000000# Try to identify the current development source version. set(CMAKE_VERSION_SOURCE "") if(EXISTS ${CMAKE_SOURCE_DIR}/.git/HEAD) find_program(GIT_EXECUTABLE NAMES git git.cmd) mark_as_advanced(GIT_EXECUTABLE) if(GIT_EXECUTABLE) execute_process( COMMAND ${GIT_EXECUTABLE} rev-parse --verify -q --short=7 HEAD OUTPUT_VARIABLE head OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} ) if(head) set(branch "") execute_process( COMMAND ${GIT_EXECUTABLE} name-rev HEAD OUTPUT_VARIABLE branch OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} ) string(REGEX REPLACE "HEAD " "" branch "${branch}") set(CMAKE_VERSION_SOURCE "git-${branch}-${head}") execute_process( COMMAND ${GIT_EXECUTABLE} update-index -q --refresh WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} ) execute_process( COMMAND ${GIT_EXECUTABLE} diff-index --name-only HEAD -- OUTPUT_VARIABLE dirty OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} ) if(dirty) set(CMAKE_VERSION_SOURCE "${CMAKE_VERSION_SOURCE}-dirty") endif() endif() endif() elseif(EXISTS ${CMAKE_SOURCE_DIR}/CVS/Repository) file(READ ${CMAKE_SOURCE_DIR}/CVS/Repository repo) set(branch "") if("${repo}" MATCHES "\\.git/") string(REGEX REPLACE ".*\\.git/([^\r\n]*).*" "-\\1" branch "${repo}") endif() set(CMAKE_VERSION_SOURCE "cvs${branch}") endif() calamares-3.2.20/CMakeModules/CalamaresAddBrandingSubdirectory.cmake000066400000000000000000000156351362604102500254170ustar00rootroot00000000000000# === This file is part of Calamares - === # # Calamares 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. # # Calamares 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 Calamares. If not, see . # # SPDX-License-Identifier: GPL-3.0+ # License-Filename: LICENSE # ### # # Support macros for creating Calamares branding components. # # Calamares branding components have two parts: # - a branding.desc file that tells Calamares how to describe the product # (e.g. strings like "Generic GNU/Linux") and the name of a QML file # (the "slideshow") that is displayed during installation. # - the QML files themselves, plus supporting images etc. # # Branding components can be created inside the Calamares source tree # (there is one example the `default/` branding, which is also connected # to the default configuration shipped with Calamares), but they can be # built outside of, and largely independently of, Calamares by using # these CMake macros. # # See the calamares-examples repository for more examples. # include( CMakeParseArguments) include( CMakeColors ) # Usage calamares_add_branding( [DIRECTORY ] [SUBDIRECTORIES ...]) # # Adds a branding component to the build: # - the component's top-level files are copied into the build-dir; # CMakeLists.txt is excluded from the glob. # - the component's top-level files are installed into the component branding dir # # The branding component lives in if given, otherwise the # current source directory. The branding component is installed # with the given , which is usually the name of the # directory containing the component, and which must match the # *componentName* in `branding.desc`. # # If SUBDIRECTORIES are given, then those are copied (each one level deep) # to the installation location as well, preserving the subdirectory name. function( calamares_add_branding NAME ) cmake_parse_arguments( _CABT "" "DIRECTORY" "SUBDIRECTORIES" ${ARGN} ) if (NOT _CABT_DIRECTORY) set(_CABT_DIRECTORY ".") endif() set( SUBDIRECTORY ${_CABT_DIRECTORY} ) set( _brand_dir ${_CABT_DIRECTORY} ) set( BRANDING_DIR share/calamares/branding ) set( BRANDING_COMPONENT_DESTINATION ${BRANDING_DIR}/${NAME} ) foreach( _subdir "" ${_CABT_SUBDIRECTORIES} ) file( GLOB BRANDING_COMPONENT_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/${_brand_dir} "${_brand_dir}/${_subdir}/*" ) foreach( BRANDING_COMPONENT_FILE ${BRANDING_COMPONENT_FILES} ) set( _subpath ${_brand_dir}/${BRANDING_COMPONENT_FILE} ) if( NOT IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${_subpath} ) configure_file( ${_subpath} ${_subpath} COPYONLY ) install( FILES ${CMAKE_CURRENT_BINARY_DIR}/${_subpath} DESTINATION ${BRANDING_COMPONENT_DESTINATION}/${_subdir}/ ) endif() endforeach() endforeach() message( "-- ${BoldYellow}Found ${CALAMARES_APPLICATION_NAME} branding component: ${BoldRed}${NAME}${ColorReset}" ) message( " ${Green}TYPE:${ColorReset} branding component" ) message( " ${Green}BRANDING_COMPONENT_DESTINATION:${ColorReset} ${BRANDING_COMPONENT_DESTINATION}" ) endfunction() # Usage calamares_add_branding_translations( [DIRECTORY ]) # # Adds the translations for a branding component to the build: # - the component's lang/ directory is scanned for .ts files # - the component's translations are installed into the component branding dir # # Translation files must be called calamares-_.ts . Optionally # the lang/ dir is found in the given instead of the current source # directory. function( calamares_add_branding_translations NAME ) cmake_parse_arguments( _CABT "" "DIRECTORY" "" ${ARGN} ) if (NOT _CABT_DIRECTORY) set(_CABT_DIRECTORY ".") endif() set( SUBDIRECTORY ${_CABT_DIRECTORY} ) set( _brand_dir ${_CABT_DIRECTORY} ) set( BRANDING_DIR share/calamares/branding ) set( BRANDING_COMPONENT_DESTINATION ${BRANDING_DIR}/${NAME} ) file( GLOB BRANDING_TRANSLATION_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "${SUBDIRECTORY}/lang/calamares-${NAME}_*.ts" ) if ( BRANDING_TRANSLATION_FILES ) qt5_add_translation( QM_FILES ${BRANDING_TRANSLATION_FILES} ) add_custom_target( branding-translation-${NAME} ALL DEPENDS ${QM_FILES} COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/${SUBDIRECTORY}/lang/ COMMAND ${CMAKE_COMMAND} -E copy ${QM_FILES} ${CMAKE_CURRENT_BINARY_DIR}/${SUBDIRECTORY}/lang/ ) install( FILES ${QM_FILES} DESTINATION ${BRANDING_COMPONENT_DESTINATION}/lang/ ) list( LENGTH BRANDING_TRANSLATION_FILES _branding_count ) message( " ${Green}BRANDING_TRANSLATIONS:${ColorReset} ${_branding_count} language(s)" ) endif() endfunction() # Usage calamares_add_branding_subdirectory( [NAME ] [SUBDIRECTORIES ...]) # # Adds a branding component from a subdirectory: # - if there is a CMakeLists.txt, use that (that CMakeLists.txt should # call suitable calamares_add_branding() and other macros to install # the branding component). # - otherwise assume a "standard" setup with top-level files and a lang/ # subdirectory for translations. # # If NAME is given, this is used instead of as the name of # the branding component. This is needed if is more than # one level deep, or to rename a component as it gets installed. # # If SUBDIRECTORIES are given, they are relative to , and are # copied (one level deep) to the install location as well. function( calamares_add_branding_subdirectory SUBDIRECTORY ) cmake_parse_arguments( _CABS "" "NAME" "SUBDIRECTORIES" ${ARGN} ) if (NOT _CABS_NAME) set(_CABS_NAME "${SUBDIRECTORY}") endif() if( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIRECTORY}/CMakeLists.txt" ) add_subdirectory( ${SUBDIRECTORY} ) elseif( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIRECTORY}/branding.desc" ) calamares_add_branding( ${_CABS_NAME} DIRECTORY ${SUBDIRECTORY} SUBDIRECTORIES ${_CABS_SUBDIRECTORIES} ) if( IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIRECTORY}/lang" ) calamares_add_branding_translations( ${_CABS_NAME} DIRECTORY ${SUBDIRECTORY} ) endif() else() message( "-- ${BoldYellow}Warning:${ColorReset} tried to add branding component subdirectory ${BoldRed}${SUBDIRECTORY}${ColorReset} which has no branding.desc." ) endif() message( "" ) endfunction() calamares-3.2.20/CMakeModules/CalamaresAddLibrary.cmake000066400000000000000000000116451362604102500226750ustar00rootroot00000000000000# === This file is part of Calamares - === # # Calamares 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. # # Calamares 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 Calamares. If not, see . # # SPDX-License-Identifier: GPL-3.0+ # License-Filename: LICENSE # ### # # Support functions for building plugins. # # Usage: # # calamares_add_library( # library-name # EXPORT_MACRO macro-name # TARGET_TYPE # EXPORT export-name # VERSION version # SOVERSION version # INSTALL_BINDIR dir # RESOURCES resource-file # SOURCES source-file... # UI ui-file... # LINK_LIBRARIES lib... # LINK_PRIVATE_LIBRARIES lib... # COMPILE_DEFINITIONS def... # [NO_INSTALL] # [NO_VERSION] # ) # # The COMPILE_DEFINITIONS are set on the resulting module with a suitable # flag (i.e. `-D`) so only state the name (optionally, also the value) # without a `-D` prefixed to it. Pass in a CMake list as needed. include( CMakeParseArguments ) include( CalamaresAutomoc ) function(calamares_add_library) # parse arguments (name needs to be saved before passing ARGN into the macro) set(NAME ${ARGV0}) set(options NO_INSTALL NO_VERSION) set(oneValueArgs NAME EXPORT_MACRO TARGET_TYPE EXPORT VERSION SOVERSION INSTALL_BINDIR RESOURCES) set(multiValueArgs SOURCES UI LINK_LIBRARIES LINK_PRIVATE_LIBRARIES COMPILE_DEFINITIONS) cmake_parse_arguments(LIBRARY "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) set(LIBRARY_NAME ${NAME}) set(target ${LIBRARY_NAME}) # qt stuff include_directories(${CMAKE_CURRENT_LIST_DIR}) include_directories(${CMAKE_CURRENT_BINARY_DIR}) # add resources from current dir if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/${LIBRARY_RESOURCES}") qt5_add_resources(LIBRARY_RC_SOURCES "${LIBRARY_RESOURCES}") list(APPEND LIBRARY_SOURCES ${LIBRARY_RC_SOURCES}) unset(LIBRARY_RC_SOURCES) endif() # add target if(LIBRARY_TARGET_TYPE STREQUAL "STATIC") add_library(${target} STATIC ${LIBRARY_SOURCES}) elseif(LIBRARY_TARGET_TYPE STREQUAL "MODULE") add_library(${target} MODULE ${LIBRARY_SOURCES}) else() # default add_library(${target} SHARED ${LIBRARY_SOURCES}) endif() calamares_automoc(${target}) if(LIBRARY_UI) calamares_autouic(${target} ${LIBRARY_UI}) endif() if(LIBRARY_EXPORT_MACRO) set_target_properties(${target} PROPERTIES COMPILE_DEFINITIONS ${LIBRARY_EXPORT_MACRO}) endif() if(LIBRARY_COMPILE_DEFINITIONS) set( _lib_definitions "${LIBRARY_EXPORT_MACRO}" ${LIBRARY_COMPILE_DEFINITIONS} ) set_target_properties(${target} PROPERTIES COMPILE_DEFINITIONS "${_lib_definitions}") endif() # add link targets target_link_libraries(${target} LINK_PUBLIC ${CALAMARES_LIBRARIES} Qt5::Core Qt5::Gui Qt5::Widgets ${LIBRARY_QT5_MODULES} ) if(LIBRARY_LINK_LIBRARIES) target_link_libraries(${target} LINK_PUBLIC ${LIBRARY_LINK_LIBRARIES}) endif() if(LIBRARY_LINK_PRIVATE_LIBRARIES) target_link_libraries(${target} LINK_PRIVATE ${LIBRARY_LINK_PRIVATE_LIBRARIES}) endif() # add soversion if(NOT LIBRARY_NO_VERSION) set_target_properties(${target} PROPERTIES VERSION ${LIBRARY_VERSION}) if(NOT LIBRARY_SOVERSION) set(LIBRARY_SOVERSION ${LIBRARY_VERSION}) endif() set_target_properties(${target} PROPERTIES SOVERSION ${LIBRARY_SOVERSION}) endif() if(NOT LIBRARY_INSTALL_BINDIR) set(LIBRARY_INSTALL_BINDIR "${CMAKE_INSTALL_BINDIR}") set(LIBRARY_INSTALL_LIBDIR "${CMAKE_INSTALL_LIBDIR}") else() set(LIBRARY_INSTALL_LIBDIR "${LIBRARY_INSTALL_BINDIR}") endif() # make installation optional, maybe useful for dummy plugins one day if(NOT LIBRARY_NO_INSTALL) include(GNUInstallDirs) if(NOT LIBRARY_EXPORT) install( TARGETS ${target} RUNTIME DESTINATION ${LIBRARY_INSTALL_BINDIR} LIBRARY DESTINATION ${LIBRARY_INSTALL_LIBDIR} ARCHIVE DESTINATION ${LIBRARY_INSTALL_LIBDIR} ) else() install( TARGETS ${target} EXPORT ${LIBRARY_EXPORT} RUNTIME DESTINATION ${LIBRARY_INSTALL_BINDIR} LIBRARY DESTINATION ${LIBRARY_INSTALL_LIBDIR} ARCHIVE DESTINATION ${LIBRARY_INSTALL_LIBDIR} ) endif() endif() endfunction() calamares-3.2.20/CMakeModules/CalamaresAddModuleSubdirectory.cmake000066400000000000000000000171101362604102500251060ustar00rootroot00000000000000# === This file is part of Calamares - === # # Calamares 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. # # Calamares 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 Calamares. If not, see . # # SPDX-License-Identifier: GPL-3.0+ # License-Filename: LICENSE # ### # # Function and support code for adding a Calamares module (either a Qt / C++ plugin, # or a Python module, or whatever) to the build. # include( CalamaresAddTranslations ) set( MODULE_DATA_DESTINATION share/calamares/modules ) # Convenience function to indicate that a module has been skipped # (optionally also why). Call this in the module's CMakeLists.txt macro( calamares_skip_module ) set( SKIPPED_MODULES ${SKIPPED_MODULES} ${ARGV} PARENT_SCOPE ) endmacro() function( calamares_explain_skipped_modules ) if ( ARGN ) message( "${ColorReset}-- Skipped modules:" ) foreach( SUBDIRECTORY ${ARGN} ) message( "${ColorReset}-- Skipped ${BoldRed}${SUBDIRECTORY}${ColorReset}." ) endforeach() message( "" ) endif() endfunction() function( calamares_add_module_subdirectory ) set( SUBDIRECTORY ${ARGV0} ) set( SKIPPED_MODULES ) set( MODULE_CONFIG_FILES "" ) set( _mod_dir "${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIRECTORY}" ) # If this subdirectory has a CMakeLists.txt, we add_subdirectory it... if( EXISTS "${_mod_dir}/CMakeLists.txt" ) add_subdirectory( ${SUBDIRECTORY} ) file( GLOB MODULE_CONFIG_FILES RELATIVE ${_mod_dir} "${SUBDIRECTORY}/*.conf" ) # Module has indicated it should be skipped, show that in # the calling CMakeLists (which is src/modules/CMakeLists.txt normally). if ( SKIPPED_MODULES ) set( SKIPPED_MODULES ${SKIPPED_MODULES} PARENT_SCOPE ) set( MODULE_CONFIG_FILES "" ) endif() # ...otherwise, we look for a module.desc. elseif( EXISTS "${_mod_dir}/module.desc" ) set( MODULES_DIR ${CMAKE_INSTALL_LIBDIR}/calamares/modules ) set( MODULE_DESTINATION ${MODULES_DIR}/${SUBDIRECTORY} ) # Read module.desc, check that the interface type is supported. # # _mod_enabled boolean if the module should be built (only if the interface is supported) # _mod_reason is a human-readable explanation why it isn't built # _mod_testing boolean if the module should be added to the loadmodule tests file(STRINGS "${_mod_dir}/module.desc" MODULE_INTERFACE REGEX "^interface") if ( MODULE_INTERFACE MATCHES "pythonqt" ) set( _mod_enabled ${WITH_PYTHONQT} ) set( _mod_reason "No PythonQt support" ) set( _mod_testing OFF ) elseif ( MODULE_INTERFACE MATCHES "python" ) set( _mod_enabled ${WITH_PYTHON} ) set( _mod_reason "No Python support" ) set( _mod_testing ON ) # Will check syntax and imports, at least elseif ( MODULE_INTERFACE MATCHES "qtplugin" ) set( _mod_enabled OFF ) set( _mod_reason "C++ modules must have a CMakeLists.txt instead" ) set( _mod_testing OFF ) elseif ( MODULE_INTERFACE MATCHES "process" ) set( _mod_enabled ON ) set( _mod_reason "" ) set( _mod_testing OFF ) else() set( _mod_enabled OFF ) set( _mod_reason "Unknown module interface '${MODULE_INTERFACE}'" ) set( _mod_testing OFF ) endif() if ( _mod_enabled ) # We glob all the files inside the subdirectory, and we make sure they are # synced with the bindir structure and installed. file( GLOB MODULE_FILES RELATIVE ${_mod_dir} "${SUBDIRECTORY}/*" ) foreach( MODULE_FILE ${MODULE_FILES} ) if( NOT IS_DIRECTORY ${_mod_dir}/${MODULE_FILE} ) configure_file( ${SUBDIRECTORY}/${MODULE_FILE} ${SUBDIRECTORY}/${MODULE_FILE} COPYONLY ) get_filename_component( FLEXT ${MODULE_FILE} EXT ) if( "${FLEXT}" STREQUAL ".conf" ) if( INSTALL_CONFIG ) install( FILES ${CMAKE_CURRENT_BINARY_DIR}/${SUBDIRECTORY}/${MODULE_FILE} DESTINATION ${MODULE_DATA_DESTINATION} ) endif() list( APPEND MODULE_CONFIG_FILES ${MODULE_FILE} ) else() install( FILES ${CMAKE_CURRENT_BINARY_DIR}/${SUBDIRECTORY}/${MODULE_FILE} DESTINATION ${MODULE_DESTINATION} ) endif() endif() endforeach() message( "-- ${BoldYellow}Found ${CALAMARES_APPLICATION_NAME} module: ${BoldRed}${SUBDIRECTORY}${ColorReset}" ) message( " ${Green}TYPE:${ColorReset} jobmodule" ) message( " ${Green}MODULE_DESTINATION:${ColorReset} ${MODULE_DESTINATION}" ) if( MODULE_CONFIG_FILES ) if ( INSTALL_CONFIG ) set( _destination "${MODULE_DATA_DESTINATION}" ) else() set( _destination "[Build directory only]" ) endif() message( " ${Green}CONFIGURATION_FILES:${ColorReset} ${MODULE_CONFIG_FILES} => ${_destination}" ) endif() message( "" ) # We copy over the lang directory, if any if( IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIRECTORY}/lang" ) install_calamares_gettext_translations( ${SUBDIRECTORY} SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIRECTORY}/lang" FILENAME ${SUBDIRECTORY}.mo RENAME calamares-${SUBDIRECTORY}.mo ) endif() else() # Module disabled due to missing dependencies / unsupported interface set( SKIPPED_MODULES "${SUBDIRECTORY} (${_mod_reason})" PARENT_SCOPE ) endif() else() message( "-- ${BoldYellow}Warning:${ColorReset} tried to add module subdirectory ${BoldRed}${SUBDIRECTORY}${ColorReset} which has no CMakeLists.txt or module.desc." ) message( "" ) endif() # Check any config files for basic correctness if ( BUILD_TESTING AND MODULE_CONFIG_FILES ) set( _count 0 ) foreach( _config_file ${MODULE_CONFIG_FILES} ) set( _count_str "-${_count}" ) if ( _count EQUAL 0 ) set( _count_str "" ) endif() add_test( NAME config-${SUBDIRECTORY}${_count_str} COMMAND test_conf ${CMAKE_CURRENT_BINARY_DIR}/${SUBDIRECTORY}/${_config_file} ) math( EXPR _count "${_count} + 1" ) endforeach() endif() # Check that the module can be loaded. Since this calls exec(), the module # may try to do things to the running system. Needs work to make that a # safe thing to do. # if ( BUILD_TESTING AND _mod_enabled AND _mod_testing ) add_test( NAME load-${SUBDIRECTORY} COMMAND loadmodule ${SUBDIRECTORY} WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ) endif() endfunction() calamares-3.2.20/CMakeModules/CalamaresAddPlugin.cmake000066400000000000000000000172751362604102500225340ustar00rootroot00000000000000# === This file is part of Calamares - === # # Calamares 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. # # Calamares 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 Calamares. If not, see . # # SPDX-License-Identifier: GPL-3.0+ # License-Filename: LICENSE # ### # # Convenience function for creating a C++ (qtplugin) module for Calamares. # This function provides cmake-time feedback about the plugin, adds # targets for compilation and boilerplate information, and creates # a module.desc with standard values (if the module.desc file exists, # that one is used instead, which happens only for unusual plugins). # # Usage: # # calamares_add_plugin( # module-name # TYPE # EXPORT_MACRO macro-name # SOURCES source-file... # UI ui-file... # LINK_LIBRARIES lib... # LINK_PRIVATE_LIBRARIES lib... # [COMPILE_DEFINITIONS def...] # [RESOURCES resource-file] # [REQUIRES module-name...] # [NO_INSTALL] # [NO_CONFIG] # [SHARED_LIB] # [EMERGENCY] # ) # # Function parameters: # - COMPILE_DEFINITIONS # Definitions are set on the resulting module with a suitable # flag (i.e. `-D`) so only state the name (optionally, also the value) # without a `-D` prefixed to it. # - RESOURCES # One (single!) filename for the RCC file for the plugin. # - REQUIRES # One or more names of modules which are added to the *requiredModules* # key in the descriptor. See *Module Requirements* in the module # documentation. # - NO_INSTALL # If this is set, the module is not installed by default; use this to # build testing modules or unit-testing modules. # - SHARED_LIB # In unusual circumstances, this function is used to add a library # rather than a normal Calamares module / plugin. # - EMERGENCY # If this is set, the module is marked as an *emergency* module in the # descriptor. See *Emergency Modules* in the module documentation. # include( CMakeParseArguments ) include( CalamaresAddLibrary ) include( CMakeColors ) function( calamares_add_plugin ) # parse arguments ( name needs to be saved before passing ARGN into the macro ) set( NAME ${ARGV0} ) set( options NO_CONFIG NO_INSTALL SHARED_LIB EMERGENCY ) set( oneValueArgs NAME TYPE EXPORT_MACRO RESOURCES ) set( multiValueArgs SOURCES UI LINK_LIBRARIES LINK_PRIVATE_LIBRARIES COMPILE_DEFINITIONS REQUIRES ) cmake_parse_arguments( PLUGIN "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} ) set( PLUGIN_NAME ${NAME} ) set( PLUGIN_DESTINATION ${CMAKE_INSTALL_LIBDIR}/calamares/modules/${PLUGIN_NAME} ) set( PLUGIN_DESC_FILE module.desc ) file( GLOB PLUGIN_CONFIG_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.conf" ) set( PLUGIN_DATA_DESTINATION share/calamares/modules ) set( CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" ) set( CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" ) set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" ) message( "-- ${BoldYellow}Found ${CALAMARES_APPLICATION_NAME} module: ${BoldRed}${PLUGIN_NAME}${ColorReset}" ) message( " ${Green}TYPE:${ColorReset} ${PLUGIN_TYPE}" ) message( " ${Green}LINK_LIBRARIES:${ColorReset} ${PLUGIN_LINK_LIBRARIES}" ) message( " ${Green}LINK_PRIVATE_LIBRARIES:${ColorReset} ${PLUGIN_LINK_PRIVATE_LIBRARIES}" ) message( " ${Green}PLUGIN_DESTINATION:${ColorReset} ${PLUGIN_DESTINATION}" ) if( PLUGIN_CONFIG_FILES ) if( PLUGIN_NO_CONFIG ) message( FATAL_ERROR "${Red}NO_CONFIG${ColorReset} is set, with configuration ${Red}${PLUGIN_CONFIG_FILES}${ColorReset}" ) endif() set( _destination "(unknown)" ) if ( INSTALL_CONFIG AND NOT PLUGIN_NO_INSTALL ) set( _destination "${PLUGIN_DATA_DESTINATION}" ) elseif( NOT PLUGIN_NO_INSTALL ) # Not INSTALL_CONFIG set( _destination "[Build directory only]" ) else() set( _destination "[Skipping installation]" ) endif() message( " ${Green}CONFIGURATION_FILES:${ColorReset} ${PLUGIN_CONFIG_FILES} => ${_destination}" ) else() if( NOT PLUGIN_NO_CONFIG ) message( " ${Red}NO_CONFIG${ColorReset} should be set." ) endif() endif() if( PLUGIN_RESOURCES ) message( " ${Green}RESOURCES:${ColorReset} ${PLUGIN_RESOURCES}" ) endif() message( "" ) # create target name once for convenience set( target "calamares_${PLUGIN_TYPE}_${PLUGIN_NAME}" ) # determine target type if( NOT ${PLUGIN_SHARED_LIB} ) set( target_type "MODULE" ) else() set( target_type "SHARED" ) endif() set( calamares_add_library_args "${target}" "EXPORT_MACRO" "${PLUGIN_EXPORT_MACRO}" "TARGET_TYPE" "${target_type}" "SOURCES" "${PLUGIN_SOURCES}" ) if( PLUGIN_UI ) list( APPEND calamares_add_library_args "UI" "${PLUGIN_UI}" ) endif() if( PLUGIN_LINK_LIBRARIES ) list( APPEND calamares_add_library_args "LINK_LIBRARIES" "${PLUGIN_LINK_LIBRARIES}" ) endif() if( PLUGIN_LINK_PRIVATE_LIBRARIES ) list( APPEND calamares_add_library_args "LINK_PRIVATE_LIBRARIES" "${PLUGIN_LINK_PRIVATE_LIBRARIES}" ) endif() if( PLUGIN_COMPILE_DEFINITIONS ) list( APPEND calamares_add_library_args "COMPILE_DEFINITIONS" ${PLUGIN_COMPILE_DEFINITIONS} ) endif() if ( PLUGIN_NO_INSTALL ) list( APPEND calamares_add_library_args "NO_INSTALL" ) endif() list( APPEND calamares_add_library_args "NO_VERSION" "INSTALL_BINDIR" "${PLUGIN_DESTINATION}" ) if( PLUGIN_RESOURCES ) list( APPEND calamares_add_library_args "RESOURCES" "${PLUGIN_RESOURCES}" ) endif() calamares_add_library( ${calamares_add_library_args} ) if ( EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${PLUGIN_DESC_FILE} ) configure_file( ${PLUGIN_DESC_FILE} ${PLUGIN_DESC_FILE} COPYONLY ) else() set( _file ${CMAKE_CURRENT_BINARY_DIR}/${PLUGIN_DESC_FILE} ) set( _type ${PLUGIN_TYPE} ) file( WRITE ${_file} "# AUTO-GENERATED metadata file\n# Syntax is YAML 1.2\n---\n" ) file( APPEND ${_file} "type: \"${_type}\"\nname: \"${PLUGIN_NAME}\"\ninterface: \"qtplugin\"\nload: \"lib${target}.so\"\n" ) if ( PLUGIN_REQUIRES ) file( APPEND ${_file} "requiredModules:\n" ) foreach( _r ${PLUGIN_REQUIRES} ) file( APPEND ${_file} " - ${_r}\n" ) endforeach() endif() if ( PLUGIN_EMERGENCY ) file( APPEND ${_file} "emergency: true\n" ) endif() if ( PLUGIN_NO_CONFIG ) file( APPEND ${_file} "noconfig: true\n" ) endif() endif() if ( NOT PLUGIN_NO_INSTALL ) install( FILES ${CMAKE_CURRENT_BINARY_DIR}/${PLUGIN_DESC_FILE} DESTINATION ${PLUGIN_DESTINATION} ) foreach( PLUGIN_CONFIG_FILE ${PLUGIN_CONFIG_FILES} ) configure_file( ${PLUGIN_CONFIG_FILE} ${PLUGIN_CONFIG_FILE} COPYONLY ) if ( INSTALL_CONFIG ) install( FILES ${CMAKE_CURRENT_BINARY_DIR}/${PLUGIN_CONFIG_FILE} DESTINATION ${PLUGIN_DATA_DESTINATION} ) endif() endforeach() endif() endfunction() calamares-3.2.20/CMakeModules/CalamaresAddTest.cmake000066400000000000000000000036101362604102500222010ustar00rootroot00000000000000# === This file is part of Calamares - === # # Calamares 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. # # Calamares 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 Calamares. If not, see . # # SPDX-License-Identifier: GPL-3.0+ # License-Filename: LICENSE # ### # # Support functions for building Calamares tests. # This extends KDE's ECM tests with some custom patterns. # # calamares_add_test( # # [GUI] # SOURCES # ) include( CMakeParseArguments ) include( CalamaresAutomoc ) function( calamares_add_test ) # parse arguments (name needs to be saved before passing ARGN into the macro) set( NAME ${ARGV0} ) set( options GUI ) set( multiValueArgs SOURCES LIBRARIES DEFINITIONS ) cmake_parse_arguments( TEST "${options}" "" "${multiValueArgs}" ${ARGN} ) set( TEST_NAME ${NAME} ) if( ECM_FOUND AND BUILD_TESTING ) ecm_add_test( ${TEST_SOURCES} TEST_NAME ${TEST_NAME} LINK_LIBRARIES calamares ${TEST_LIBRARIES} Qt5::Core Qt5::Test ) calamares_automoc( ${TEST_NAME} ) target_compile_definitions( ${TEST_NAME} PRIVATE -DBUILD_AS_TEST ${TEST_DEFINITIONS} ) if( TEST_GUI ) target_link_libraries( ${TEST_NAME} calamaresui Qt5::Gui ) endif() endif() endfunction() calamares-3.2.20/CMakeModules/CalamaresAddTranslations.cmake000066400000000000000000000160751362604102500237540ustar00rootroot00000000000000# === This file is part of Calamares - === # # Calamares 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. # # Calamares 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 Calamares. If not, see . # # SPDX-License-Identifier: GPL-3.0+ # License-Filename: LICENSE # ### # # This file has not yet been documented for use outside of Calamares itself. include( CMakeParseArguments ) if( NOT _rcc_version_support_checked ) set( _rcc_version_support_checked TRUE ) # Extract the executable name get_property( _rcc_executable TARGET ${Qt5Core_RCC_EXECUTABLE} PROPERTY IMPORTED_LOCATION ) if( NOT _rcc_executable ) # Weird, probably now uses Qt5::rcc which is wrong too set( _rcc_executable ${Qt5Core_RCC_EXECUTABLE} ) endif() # Try an empty RCC file with explicit format-version execute_process( COMMAND echo "" COMMAND ${Qt5Core_RCC_EXECUTABLE} --format-version 1 --list - RESULT_VARIABLE _rcc_version_rv ERROR_VARIABLE _rcc_version_dump ) if ( _rcc_version_rv EQUAL 0 ) # Supported: force to the reproducible version set( _rcc_version_support --format-version 1 ) else() # Older Qt versions (5.7, 5.8) don't support setting the # rcc format-version, so won't be reproducible if they # default to version 2. set( _rcc_version_support "" ) endif() unset( _rcc_version_rv ) unset( _rcc_version_dump ) endif() # Internal macro for adding the C++ / Qt translations to the # build and install tree. Should be called only once, from # src/calamares/CMakeLists.txt. macro(add_calamares_translations language) list( APPEND CALAMARES_LANGUAGES ${ARGV} ) set( calamares_i18n_qrc_content "\n" ) # calamares and qt language files set( calamares_i18n_qrc_content "${calamares_i18n_qrc_content}\n" ) foreach( lang ${CALAMARES_LANGUAGES} ) foreach( tlsource "calamares_${lang}" "tz_${lang}" ) if( EXISTS "${CMAKE_SOURCE_DIR}/lang/${tlsource}.ts" ) set( calamares_i18n_qrc_content "${calamares_i18n_qrc_content}${tlsource}.qm\n" ) list( APPEND TS_FILES "${CMAKE_SOURCE_DIR}/lang/${tlsource}.ts" ) endif() endforeach() endforeach() set( calamares_i18n_qrc_content "${calamares_i18n_qrc_content}\n" ) set( calamares_i18n_qrc_content "${calamares_i18n_qrc_content}\n" ) file( WRITE ${CMAKE_BINARY_DIR}/lang/calamares_i18n.qrc "${calamares_i18n_qrc_content}" ) qt5_add_translation(QM_FILES ${TS_FILES}) ## HACK HACK HACK - around rcc limitations to allow out of source-tree building set( trans_file calamares_i18n ) set( trans_srcfile ${CMAKE_BINARY_DIR}/lang/${trans_file}.qrc ) set( trans_infile ${CMAKE_CURRENT_BINARY_DIR}/${trans_file}.qrc ) set( trans_outfile ${CMAKE_CURRENT_BINARY_DIR}/qrc_${trans_file}.cxx ) # Copy the QRC file to the output directory add_custom_command( OUTPUT ${trans_infile} COMMAND ${CMAKE_COMMAND} -E copy ${trans_srcfile} ${trans_infile} MAIN_DEPENDENCY ${trans_srcfile} ) # Run the resource compiler (rcc_options should already be set) add_custom_command( OUTPUT ${trans_outfile} COMMAND "${Qt5Core_RCC_EXECUTABLE}" ARGS ${rcc_options} ${_rcc_version_support} -name ${trans_file} -o ${trans_outfile} ${trans_infile} MAIN_DEPENDENCY ${trans_infile} DEPENDS ${QM_FILES} ) endmacro() # Internal macro for Python translations # # Translations of the Python modules that don't have their own # lang/ subdirectories -- these are collected in top-level # lang/python//LC_MESSAGES/python.mo macro(add_calamares_python_translations language) set( CALAMARES_LANGUAGES "" ) list( APPEND CALAMARES_LANGUAGES ${ARGV} ) install_calamares_gettext_translations( python SOURCE_DIR ${CMAKE_SOURCE_DIR}/lang/python FILENAME python.mo RENAME calamares-python.mo ) endmacro() # Installs a directory containing language-code-labeled subdirectories with # gettext data into the appropriate system directory. Allows renaming the # .mo files during install to avoid namespace clashes. # # install_calamares_gettext_translations( # NAME # SOURCE_DIR path/to/lang # FILENAME # [RENAME ] # ) # # For all of the (global) translation languages enabled for Calamares, # try installing $SOURCE_DIR/$lang/LC_MESSAGES/.mo into the # system gettext data directory (e.g. share/locale/), possibly renaming # filename.mo to renamed.mo in the process. function( install_calamares_gettext_translations ) # parse arguments ( name needs to be saved before passing ARGN into the macro ) set( NAME ${ARGV0} ) set( oneValueArgs NAME SOURCE_DIR FILENAME RENAME ) cmake_parse_arguments( TRANSLATION "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} ) if( NOT TRANSLATION_NAME ) set( TRANSLATION_NAME ${NAME} ) endif() if( NOT TRANSLATION_FILENAME ) set( TRANSLATION_FILENAME "${TRANSLATION_NAME}.mo" ) endif() if( NOT TRANSLATION_RENAME ) set( TRANSLATION_RENAME "${TRANSLATION_FILENAME}" ) endif() message(STATUS "Installing gettext translations for ${TRANSLATION_NAME}") message(STATUS " Installing ${TRANSLATION_FILENAME} from ${TRANSLATION_SOURCE_DIR}") set( TRANSLATION_NAME "${NAME}" ) set( INSTALLED_TRANSLATIONS "" ) foreach( lang ${CALAMARES_TRANSLATION_LANGUAGES} ) # Global set( lang_mo "${TRANSLATION_SOURCE_DIR}/${lang}/LC_MESSAGES/${TRANSLATION_FILENAME}" ) if( lang STREQUAL "en" ) message( STATUS " Skipping ${TRANSLATION_NAME} translations for en_US" ) else( EXISTS ${lang_mo} ) list( APPEND INSTALLED_LANGUAGES "${lang}" ) install( FILES ${lang_mo} DESTINATION ${CMAKE_INSTALL_LOCALEDIR}/${lang}/LC_MESSAGES/ RENAME ${TRANSLATION_RENAME} ) # TODO: make translations available in build dir too, for # translation when running calamares -d from builddir. set(_build_lc ${CMAKE_BINARY_DIR}/lang/${lang}/LC_MESSAGES/) file(COPY ${lang_mo} DESTINATION ${_build_lc}) if (NOT TRANSLATION_FILENAME STREQUAL TRANSLATION_RENAME) file(RENAME ${_build_lc}${TRANSLATION_FILENAME} ${_build_lc}${TRANSLATION_RENAME}) endif() endif() endforeach() endfunction() calamares-3.2.20/CMakeModules/CalamaresAutomoc.cmake000066400000000000000000000034531362604102500222650ustar00rootroot00000000000000# === This file is part of Calamares - === # # Calamares 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. # # Calamares 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 Calamares. If not, see . # # SPDX-License-Identifier: GPL-3.0+ # License-Filename: LICENSE # ### # # Helper function for doing automoc on a target, and autoui on a .ui file. # # Sets AUTOMOC TRUE for a target. # # If the global variable CALAMARES_AUTOMOC_OPTIONS is set, uses that # as well to set options passed to MOC. This can be used to add # libcalamares/utils/moc-warnings.h file to the moc, which in turn # reduces compiler warnings in generated MOC code. # # If the global variable CALAMARES_AUTOUIC_OPTIONS is set, adds that # to the options passed to uic. function(calamares_automoc TARGET) set_target_properties( ${TARGET} PROPERTIES AUTOMOC TRUE ) if ( CALAMARES_AUTOMOC_OPTIONS ) set_target_properties( ${TARGET} PROPERTIES AUTOMOC_MOC_OPTIONS "${CALAMARES_AUTOMOC_OPTIONS}" ) endif() endfunction() function(calamares_autouic TARGET) set_target_properties( ${TARGET} PROPERTIES AUTOUIC TRUE ) if ( CALAMARES_AUTOUIC_OPTIONS ) foreach(S ${ARGN}) set_property(SOURCE ${S} PROPERTY AUTOUIC_OPTIONS "${CALAMARES_AUTOUIC_OPTIONS}") endforeach() endif() endfunction() calamares-3.2.20/CMakeModules/FindCrypt.cmake000066400000000000000000000016401362604102500207430ustar00rootroot00000000000000# - Find libcrypt # Find the libcrypt includes and the libcrypt libraries # This module defines # LIBCRYPT_INCLUDE_DIR, root crypt include dir. Include crypt with crypt.h # LIBCRYPT_LIBRARY, the path to libcrypt # LIBCRYPT_FOUND, whether libcrypt was found if( CMAKE_SYSTEM MATCHES "FreeBSD" ) # FreeBSD has crypt(3) declared in unistd.h, which lives in # libc; the libcrypt found here is not used. find_path( CRYPT_INCLUDE_DIR NAMES unistd.h ) add_definitions( -DNO_CRYPT_H ) else() find_path( CRYPT_INCLUDE_DIR NAMES crypt.h HINTS ${CMAKE_INSTALL_INCLUDEDIR} NO_CACHE ) endif() find_library( CRYPT_LIBRARIES NAMES crypt HINTS ${CMAKE_INSTALL_LIBDIR} ) include( FindPackageHandleStandardArgs ) find_package_handle_standard_args( Crypt REQUIRED_VARS CRYPT_LIBRARIES CRYPT_INCLUDE_DIR ) mark_as_advanced( CRYPT_INCLUDE_DIR CRYPT_LIBRARIES ) calamares-3.2.20/CMakeModules/FindLIBPARTED.cmake000066400000000000000000000050711362604102500211520ustar00rootroot00000000000000# Copyright (C) 2008,2010,2011 by Volker Lanz # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. include(CheckCSourceCompiles) include(CheckFunctionExists) if (LIBPARTED_INCLUDE_DIR AND LIBPARTED_LIBRARY) # Already in cache, be silent set(LIBPARTED_FIND_QUIETLY TRUE) endif (LIBPARTED_INCLUDE_DIR AND LIBPARTED_LIBRARY) FIND_PATH(LIBPARTED_INCLUDE_DIR parted.h PATH_SUFFIXES parted ) FIND_LIBRARY(LIBPARTED_LIBRARY NAMES parted) FIND_LIBRARY(LIBPARTED_FS_RESIZE_LIBRARY NAMES parted-fs-resize) INCLUDE(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(LIBPARTED DEFAULT_MSG LIBPARTED_LIBRARY LIBPARTED_INCLUDE_DIR) if (LIBPARTED_FS_RESIZE_LIBRARY) set(LIBPARTED_LIBS ${LIBPARTED_LIBRARY} ${LIBPARTED_FS_RESIZE_LIBRARY}) else (LIBPARTED_FS_RESIZE_LIBRARY) set(LIBPARTED_LIBS ${LIBPARTED_LIBRARY}) endif (LIBPARTED_FS_RESIZE_LIBRARY) # KDE adds -ansi to the C make flags, parted headers use GNU extensions, so # undo that unset(CMAKE_C_FLAGS) set(CMAKE_REQUIRED_INCLUDES ${LIBPARTED_INCLUDE_DIR}) set(CMAKE_REQUIRED_LIBRARIES ${LIBPARTED_LIBS}) CHECK_FUNCTION_EXISTS("ped_file_system_clobber" LIBPARTED_FILESYSTEM_SUPPORT) # parted < 3.0 CHECK_FUNCTION_EXISTS("ped_file_system_resize" LIBPARTED_FS_RESIZE_LIBRARY_SUPPORT) # parted != 3.0 MARK_AS_ADVANCED(LIBPARTED_LIBRARY LIBPARTED_INCLUDE_DIR LIBPARTED_FILESYSTEM_SUPPORT LIBPARTED_FS_RESIZE_LIBRARY LIBPARTED_FS_RESIZE_LIBRARY_SUPPORT) calamares-3.2.20/CMakeModules/FindLibPWQuality.cmake000066400000000000000000000020441362604102500221670ustar00rootroot00000000000000# Locate libpwquality # https://github.com/libpwquality/libpwquality # # This module defines # LibPWQuality_FOUND # LibPWQuality_LIBRARIES, where to find the library # LibPWQuality_INCLUDE_DIRS, where to find pwquality.h # include(FindPkgConfig) include(FindPackageHandleStandardArgs) pkg_search_module(pc_pwquality QUIET pwquality) find_path(LibPWQuality_INCLUDE_DIR NAMES pwquality.h PATHS ${pc_pwquality_INCLUDE_DIRS} ) find_library(LibPWQuality_LIBRARY NAMES pwquality PATHS ${pc_pwquality_LIBRARY_DIRS} ) if(pc_pwquality_FOUND) set(LibPWQuality_LIBRARIES ${LibPWQuality_LIBRARY}) set(LibPWQuality_INCLUDE_DIRS ${LibPWQuality_INCLUDE_DIR} ${pc_pwquality_INCLUDE_DIRS}) endif() find_package_handle_standard_args(LibPWQuality DEFAULT_MSG LibPWQuality_INCLUDE_DIRS LibPWQuality_LIBRARIES ) mark_as_advanced(LibPWQuality_INCLUDE_DIRS LibPWQuality_LIBRARIES) set_package_properties( LibPWQuality PROPERTIES DESCRIPTION "Password quality checking library" URL "https://github.com/libpwquality/libpwquality" ) calamares-3.2.20/CMakeModules/FindPythonQt.cmake000066400000000000000000000134301362604102500214300ustar00rootroot00000000000000# Find PythonQt # # Sets PYTHONQT_FOUND, PYTHONQT_INCLUDE_DIR, PYTHONQT_LIBRARY, PYTHONQT_LIBRARIES # # Also sets PYTHONQT_INCLUDE_DIRS to add whatever directories # that are needed for extensions. # # Python is required find_package(PythonLibs) if(NOT PYTHONLIBS_FOUND) message(FATAL_ERROR "error: Python is required to build PythonQt") endif() # Cut X.Y[.Z] down to just X.Y string(REGEX REPLACE "^([0-9][0-9]*)\.([0-9][0-9]*)" "\\1.\\2@" _PYTHONLIBS_MAJMIN ${PYTHONLIBS_VERSION_STRING} ) string(REGEX REPLACE "@.*" "" PYTHONLIBS_MAJMIN ${_PYTHONLIBS_MAJMIN} ) if(NOT EXISTS "${PYTHONQT_INSTALL_DIR}") find_path(PYTHONQT_INSTALL_DIR NAMES include/PythonQt/PythonQt.h include/PythonQt5/PythonQt.h DOC "Directory where PythonQt was installed.") endif() # XXX Since PythonQt 3.0 is not yet cmakeified, depending # on how PythonQt is built, headers will not always be # installed in "include/PythonQt". That is why "src" # is added as an option. See [1] for more details. # [1] https://github.com/commontk/CTK/pull/538#issuecomment-86106367 find_path(PYTHONQT_INCLUDE_DIR PythonQt.h PATHS "${PYTHONQT_INSTALL_DIR}/include/PythonQt" "${PYTHONQT_INSTALL_DIR}/include/PythonQt5" "${PYTHONQT_INSTALL_DIR}/src" DOC "Path to the PythonQt include directory") find_path(PYTHONQT_ALL_INCLUDE_DIR PythonQt_QtAll.h PATHS "${PYTHONQT_INCLUDE_DIR}" "${PYTHONQT_INSTALL_DIR}" PATH_SUFFIXES "extensions/PythonQt_QtAll" "src" DOC "Path to the PythonQt 'all' header") if ( NOT PythonQt_FIND_QUIETLY ) message( STATUS "Searching for PythonQt (PythonLibs ${PYTHONLIBS_MAJMIN}) .." ) if ( PYTHONQT_INCLUDE_DIR ) message( STATUS " .. found include ${PYTHONQT_INCLUDE_DIR}" ) message( STATUS " .. found all include ${PYTHONQT_ALL_INCLUDE_DIR}" ) endif() endif() # Minimum v3.1 is needed find_library(PYTHONQT_LIBRARY_RELEASE NAMES PythonQt-Qt5-Python${PYTHONLIBS_MAJMIN} PythonQt-Qt5-Python3 PythonQt PATHS "${PYTHONQT_INSTALL_DIR}/lib" DOC "The PythonQt library." ) find_library(PYTHONQT_LIBRARY_DEBUG NAMES PythonQt-Qt5-Python${PYTHONLIBS_MAJMIN}JMIN${CTK_CMAKE_DEBUG_POSTFIX} PythonQt-Qt5-Python${PYTHONLIBS_MAJMIN}${CMAKE_DEBUG_POSTFIX} PythonQt-Qt5-Python${PYTHONLIBS_MAJMIN} PythonQt-Qt5-Python3${CTK_CMAKE_DEBUG_POSTFIX} PythonQt-Qt5-Python3${CMAKE_DEBUG_POSTFIX} PythonQt-Qt5-Python3 PythonQt${CTK_CMAKE_DEBUG_POSTFIX} PythonQt${CMAKE_DEBUG_POSTFIX} PythonQt PATHS "${PYTHONQT_INSTALL_DIR}/lib" DOC "The PythonQt library (debug build)." ) find_library(PYTHONQT_QTALL_LIBRARY_RELEASE NAMES PythonQt_QtAll-Qt5-Python${PYTHONLIBS_MAJMIN} PythonQt_QtAll-Qt5-Python3 PythonQt_QtAll PATHS "${PYTHONQT_INSTALL_DIR}/lib" DOC "Full Qt bindings for the PythonQt library." ) find_library(PYTHONQT_QTALL_LIBRARY_DEBUG NAMES PythonQt_QtAll-Qt5-Python${PYTHONLIBS_MAJMIN}${CTK_CMAKE_DEBUG_POSTFIX} PythonQt_QtAll-Qt5-Python${PYTHONLIBS_MAJMIN}${CMAKE_DEBUG_POSTFIX} PythonQt_QtAll-Qt5-Python${PYTHONLIBS_MAJMIN} PythonQt_QtAll-Qt5-Python3${CTK_CMAKE_DEBUG_POSTFIX} PythonQt_QtAll-Qt5-Python3${CMAKE_DEBUG_POSTFIX} PythonQt_QtAll-Qt5-Python3 PythonQt_QtAll${CTK_CMAKE_DEBUG_POSTFIX} PythonQt_QtAll${CMAKE_DEBUG_POSTFIX} PythonQt_QtAll PATHS "${PYTHONQT_INSTALL_DIR}/lib" DOC "Full Qt bindings for the PythonQt library (debug build)." ) set(PYTHONQT_LIBRARY) if(PYTHONQT_LIBRARY_RELEASE) list(APPEND PYTHONQT_LIBRARY optimized ${PYTHONQT_LIBRARY_RELEASE}) endif() if(PYTHONQT_LIBRARY_DEBUG) list(APPEND PYTHONQT_LIBRARY debug ${PYTHONQT_LIBRARY_DEBUG}) endif() set(PYTHONQT_QTALL_LIBRARY) if(PYTHONQT_QTALL_LIBRARY_RELEASE) list(APPEND PYTHONQT_QTALL_LIBRARY optimized ${PYTHONQT_QTALL_LIBRARY_RELEASE}) endif() if(PYTHONQT_QTALL_LIBRARY_DEBUG) list(APPEND PYTHONQT_QTALL_LIBRARY debug ${PYTHONQT_QTALL_LIBRARY_DEBUG}) endif() if ( NOT PythonQt_FIND_QUIETLY ) if ( PYTHONQT_LIBRARY ) message( STATUS " .. found library ${PYTHONQT_LIBRARY}" ) endif() if ( PYTHONQT_QTALL_LIBRARY ) message( STATUS " .. found qtall ${PYTHONQT_QTALL_LIBRARY}" ) endif() endif() mark_as_advanced(PYTHONQT_INSTALL_DIR) mark_as_advanced(PYTHONQT_INCLUDE_DIR) mark_as_advanced(PYTHONQT_LIBRARY_RELEASE) mark_as_advanced(PYTHONQT_LIBRARY_DEBUG) mark_as_advanced(PYTHONQT_QTALL_LIBRARY_RELEASE) mark_as_advanced(PYTHONQT_QTALL_LIBRARY_DEBUG) # On linux, also find libutil if(UNIX AND NOT APPLE) find_library(PYTHONQT_LIBUTIL util) mark_as_advanced(PYTHONQT_LIBUTIL) endif() # All upper case _FOUND variable is maintained for backwards compatibility. set(PYTHONQT_FOUND 0) set(PythonQt_FOUND 0) if(PYTHONQT_INCLUDE_DIR AND PYTHONQT_LIBRARY AND PYTHONQT_QTALL_LIBRARY) # Currently CMake'ified PythonQt only supports building against a python Release build. # This applies independently of CTK build type (Release, Debug, ...) add_definitions(-DPYTHONQT_USE_RELEASE_PYTHON_FALLBACK) set(PYTHONQT_FOUND 1) set(PythonQt_FOUND ${PYTHONQT_FOUND}) set(PYTHONQT_LIBRARIES ${PYTHONQT_LIBRARY} ${PYTHONQT_LIBUTIL} ${PYTHONQT_QTALL_LIBRARY}) set(PYTHONQT_INCLUDE_DIRS ${PYTHONQT_INCLUDE_DIR}) if(PYTHONQT_ALL_INCLUDE_DIR) list(APPEND PYTHONQT_INCLUDE_DIRS ${PYTHONQT_ALL_INCLUDE_DIR}) endif() elseif(NOT PythonQt_FIND_QUIETLY) set(_missing "") if (NOT PYTHONQT_INCLUDE_DIR) list(APPEND _missing "includes") endif() if (NOT PYTHONQT_LIBRARY) list(APPEND _missing "library") endif() if (NOT PYTHONQT_QTALL_LIBRARY) list(APPEND _missing "qtall") endif() message(STATUS "PythonQt not found, missing components ${_missing}") endif() calamares-3.2.20/CMakeModules/FindYAMLCPP.cmake000066400000000000000000000042571362604102500207560ustar00rootroot00000000000000# Locate yaml-cpp # # This module defines # YAMLCPP_FOUND, if false, do not try to link to yaml-cpp # YAMLCPP_LIBRARY, where to find yaml-cpp # YAMLCPP_INCLUDE_DIR, where to find yaml.h # There is also one IMPORTED library target, # yamlcpp # # By default, the dynamic libraries of yaml-cpp will be found. To find the static ones instead, # you must set the YAMLCPP_STATIC_LIBRARY variable to TRUE before calling find_package(YamlCpp ...). # # If yaml-cpp is not installed in a standard path, you can use the YAMLCPP_DIR CMake variable # to tell CMake where yaml-cpp is. # attempt to find static library first if this is set if(YAMLCPP_STATIC_LIBRARY) set(YAMLCPP_STATIC libyaml-cpp.a) endif() # find the yaml-cpp include directory find_path(YAMLCPP_INCLUDE_DIR yaml-cpp/yaml.h PATH_SUFFIXES include PATHS ~/Library/Frameworks/yaml-cpp/include/ /Library/Frameworks/yaml-cpp/include/ /usr/local/include/ /usr/include/ /sw/yaml-cpp/ # Fink /opt/local/yaml-cpp/ # DarwinPorts /opt/csw/yaml-cpp/ # Blastwave /opt/yaml-cpp/ ${YAMLCPP_DIR}/include/) # find the yaml-cpp library find_library(YAMLCPP_LIBRARY NAMES ${YAMLCPP_STATIC} yaml-cpp PATH_SUFFIXES lib64 lib PATHS ~/Library/Frameworks /Library/Frameworks /usr/local /usr /sw /opt/local /opt/csw /opt ${YAMLCPP_DIR}/lib) # handle the QUIETLY and REQUIRED arguments and set YAMLCPP_FOUND to TRUE if all listed variables are TRUE include(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(YAMLCPP DEFAULT_MSG YAMLCPP_INCLUDE_DIR YAMLCPP_LIBRARY) mark_as_advanced(YAMLCPP_INCLUDE_DIR YAMLCPP_LIBRARY) # Add an imported target if( YAMLCPP_LIBRARY ) add_library( yamlcpp UNKNOWN IMPORTED ) set_property( TARGET yamlcpp PROPERTY IMPORTED_LOCATION ${YAMLCPP_LIBRARY} ) if ( YAMLCPP_INCLUDE_DIR ) set_property( TARGET yamlcpp PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${YAMLCPP_INCLUDE_DIR} ) endif() endif() calamares-3.2.20/CMakeModules/IncludeKPMCore.cmake000066400000000000000000000011351362604102500216040ustar00rootroot00000000000000# Shared CMake core for finding KPMCore # # This is wrapped into a CMake include file because there's a bunch of # pre-requisites that need searching for before looking for KPMCore. # If you just do find_package( KPMCore ) without finding the things # it links against first, you get CMake errors. # # find_package(ECM 5.10.0 REQUIRED NO_MODULE) set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${CMAKE_MODULE_PATH}) include(KDEInstallDirs) include(GenerateExportHeader) find_package( KF5 REQUIRED CoreAddons ) find_package( KF5 REQUIRED Config I18n Service WidgetsAddons ) find_package( KPMcore 3.2 REQUIRED ) calamares-3.2.20/CalamaresBuildTreeSettings.cmake.in000066400000000000000000000001611362604102500223430ustar00rootroot00000000000000set(CALAMARES_INCLUDE_DIRS "@PROJECT_SOURCE_DIR@/src/libcalamares" "@PROJECT_BINARY_DIR@/src/libcalamares" ) calamares-3.2.20/CalamaresConfig.cmake.in000066400000000000000000000021631362604102500201540ustar00rootroot00000000000000# Config file for the Calamares package # # It defines the following variables # CALAMARES_INCLUDE_DIRS - include directories for Calamares # CALAMARES_LIBRARIES - libraries to link against # CALAMARES_USE_FILE - name of a convenience include # CALAMARES_APPLICATION_NAME - human-readable application name # # Typical use is: # # find_package(Calamares REQUIRED) # include("${CALAMARES_USE_FILE}") # # Compute paths get_filename_component(CALAMARES_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) if(EXISTS "${CALAMARES_CMAKE_DIR}/CMakeCache.txt") # In build tree include("${CALAMARES_CMAKE_DIR}/CalamaresBuildTreeSettings.cmake") else() set(CALAMARES_INCLUDE_DIRS "${CALAMARES_CMAKE_DIR}/@CONF_REL_INCLUDE_DIR@/libcalamares") endif() # Our library dependencies (contains definitions for IMPORTED targets) include("${CALAMARES_CMAKE_DIR}/CalamaresLibraryDepends.cmake") # These are IMPORTED targets created by CalamaresLibraryDepends.cmake set(CALAMARES_LIBRARIES calamares) # Convenience variables set(CALAMARES_USE_FILE "${CALAMARES_CMAKE_DIR}/CalamaresUse.cmake") set(CALAMARES_APPLICATION_NAME "Calamares") calamares-3.2.20/CalamaresConfigVersion.cmake.in000066400000000000000000000005761362604102500215300ustar00rootroot00000000000000set(PACKAGE_VERSION "@CALAMARES_VERSION@") # Check whether the requested PACKAGE_FIND_VERSION is compatible if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}") set(PACKAGE_VERSION_COMPATIBLE FALSE) else() set(PACKAGE_VERSION_COMPATIBLE TRUE) if ("${PACKAGE_VERSION}" VERSION_EQUAL "${PACKAGE_FIND_VERSION}") set(PACKAGE_VERSION_EXACT TRUE) endif() endif() calamares-3.2.20/CalamaresUse.cmake.in000066400000000000000000000017241362604102500175050ustar00rootroot00000000000000# A setup-cmake-things-for-Calamares module. # # This module handles looking for dependencies and including # all of the Calamares macro modules, so that you can focus # on just using the macros to build Calamares modules. # Typical use looks like this: # # ``` # find_package( Calamares REQUIRED ) # include( "${CALAMARES_CMAKE_DIR}/CalamaresUse.cmake" ) # ``` # # The first CMake command finds Calamares (which will contain # this file), then adds the found location to the search path, # and then includes this file. After that, you can use # Calamares module and plugin macros. if( NOT CALAMARES_CMAKE_DIR ) message( FATAL_ERROR "Use find_package(Calamares) first." ) endif() set( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CALAMARES_CMAKE_DIR} ) find_package( Qt5 @QT_VERSION@ CONFIG REQUIRED Core Widgets LinguistTools ) include( CalamaresAddLibrary ) include( CalamaresAddModuleSubdirectory ) include( CalamaresAddPlugin ) include( CalamaresAddBrandingSubdirectory ) calamares-3.2.20/Dockerfile000066400000000000000000000007451362604102500155250ustar00rootroot00000000000000FROM kdeneon/all:user RUN sudo apt-get update && sudo apt-get -y install build-essential cmake extra-cmake-modules gettext kio-dev libatasmart-dev libboost-python-dev libkf5config-dev libkf5coreaddons-dev libkf5i18n-dev libkf5iconthemes-dev libkf5parts-dev libkf5service-dev libkf5solid-dev libkpmcore-dev libparted-dev libpolkit-qt5-1-dev libqt5svg5-dev libqt5webkit5-dev libyaml-cpp-dev os-prober pkg-config python3-dev qtbase5-dev qtdeclarative5-dev qttools5-dev qttools5-dev-tools calamares-3.2.20/LICENSE000066400000000000000000001045131362604102500145360ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. 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. 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. 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. 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. 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. 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. 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. 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. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" 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 "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" 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. To "convey" 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. An interactive user interface displays "Appropriate Legal Notices" 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. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" 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. The "System Libraries" 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 "Major Component", 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. The "Corresponding Source" 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. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. 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. 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. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 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. 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. 4. Conveying Verbatim Copies. 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. 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. 5. Conveying Modified Source Versions. 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: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. 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 "keep intact all notices". 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. 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. 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 "aggregate" 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. 6. Conveying Non-Source Forms. 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: 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. 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. 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. 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. 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. 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. A "User Product" is either (1) a "consumer product", 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, "normally used" 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. "Installation Information" 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. 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). 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. 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. 7. Additional Terms. "Additional permissions" 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. 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. 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: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or 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 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 d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or 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. All other non-permissive additional terms are considered "further restrictions" 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. 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. 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. 8. Termination. 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). 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. 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. 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. 9. Acceptance Not Required for Having Copies. 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. 10. Automatic Licensing of Downstream Recipients. 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. An "entity transaction" 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. 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. 11. Patents. A "contributor" 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 "contributor version". A contributor's "essential patent claims" 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, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. 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. In the following three paragraphs, a "patent license" 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 "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. 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. "Knowingly relying" 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. 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. A patent license is "discriminatory" 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. 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. 12. No Surrender of Others' Freedom. 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. 13. Use with the GNU Affero General Public License. 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. 14. Revised Versions of this License. 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. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" 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. 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. 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. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. 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. 17. Interpretation of Sections 15 and 16. 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. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 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 . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) 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. 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 "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . 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 . calamares-3.2.20/LICENSES/000077500000000000000000000000001362604102500147325ustar00rootroot00000000000000calamares-3.2.20/LICENSES/BSD3-SameGame000066400000000000000000000046261362604102500170350ustar00rootroot00000000000000/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ calamares-3.2.20/LICENSES/GPLv2+-libpwquality000066400000000000000000000470631362604102500203600ustar00rootroot00000000000000Unless otherwise *explicitly* stated the following text describes the licensed conditions under which the contents of this libpwquality release may be distributed: ------------------------------------------------------------------------- Redistribution and use in source and binary forms of libpwquality, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain any existing copyright notice, and this entire permission notice in its entirety, including the disclaimer of warranties. 2. Redistributions in binary form must reproduce all prior and current copyright notices, this list of conditions, and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of any author may not be used to endorse or promote products derived from this software without their specific prior written permission. ALTERNATIVELY, this product may be distributed under the terms of the GNU General Public License version 2 or later, in which case the provisions of the GNU GPL are required INSTEAD OF the above restrictions. THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. The full text of the GNU GENERAL PUBLIC LICENSE Version 2 is included below. ------------------------------------------------------------------------- GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. calamares-3.2.20/LICENSES/GPLv3+-ImageRegistry000066400000000000000000000013341362604102500203750ustar00rootroot00000000000000/* * Copyright 2012, Christian Muehlhaeuser 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 . */ calamares-3.2.20/LICENSES/LGPLv2-KDAB000066400000000000000000000621261362604102500163710ustar00rootroot00000000000000 The KD Tools Library is Copyright (C) 2001-2010 Klaralvdalens Datakonsult AB. You may use, distribute and copy the KD Tools Library under the terms of GNU Library General Public License version 2, which is displayed below. ------------------------------------------------------------------------- GNU LIBRARY GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the library GPL. It is numbered 2 because it goes with version 2 of the ordinary GPL.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Library General Public License, applies to some specially designated Free Software Foundation software, and to any other libraries whose authors decide to use it. You can use it for your libraries, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library, or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link a program with the library, you must provide complete object files to the recipients so that they can relink them with the library, after making changes to the library and recompiling it. And you must show them these terms so they know their rights. Our method of protecting your rights has two steps: (1) copyright the library, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the library. Also, for each distributor's protection, we want to make certain that everyone understands that there is no warranty for this free library. If the library is modified by someone else and passed on, we want its recipients to know that what they have is not the original version, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that companies distributing free software will individually obtain patent licenses, thus in effect transforming the program into proprietary software. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License, which was designed for utility programs. This license, the GNU Library General Public License, applies to certain designated libraries. This license is quite different from the ordinary one; be sure to read it in full, and don't assume that anything in it is the same as in the ordinary license. The reason we have a separate public license for some libraries is that they blur the distinction we usually make between modifying or adding to a program and simply using it. Linking a program with a library, without changing the library, is in some sense simply using the library, and is analogous to running a utility program or application program. However, in a textual and legal sense, the linked executable is a combined work, a derivative of the original library, and the ordinary General Public License treats it as such. Because of this blurred distinction, using the ordinary General Public License for libraries did not effectively promote software sharing, because most developers did not use the libraries. We concluded that weaker conditions might promote sharing better. However, unrestricted linking of non-free programs would deprive the users of those programs of all benefit from the free status of the libraries themselves. This Library General Public License is intended to permit developers of non-free programs to use free libraries, while preserving your freedom as a user of such programs to change the free libraries that are incorporated in them. (We have not seen how to achieve this as regards changes in header files, but we have achieved it as regards changes in the actual functions of the Library.) The hope is that this will lead to faster development of free libraries. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, while the latter only works together with the library. Note that it is possible for a library to be covered by the ordinary General Public License rather than by this special one. GNU LIBRARY GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Library General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also compile or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. c) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. d) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Library General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY 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 LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! calamares-3.2.20/LICENSES/LGPLv2.1-Presentation000066400000000000000000000074751362604102500205100ustar00rootroot00000000000000/**************************************************************************** ** ** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the QML Presentation System. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and Digia. For licensing terms and ** conditions see http://qt.digia.com/licensing. For further information ** use the contact form at http://qt.digia.com/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Digia gives you certain additional ** rights. These rights are described in the Digia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3.0 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU General Public License version 3.0 requirements will be ** met: http://www.gnu.org/copyleft/gpl.html. ** ** ** $QT_END_LICENSE$ ** ****************************************************************************/ /**************************************************************************** ** ** Copyright (C) 2016 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the QML Presentation System. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and Digia. For licensing terms and ** conditions see http://qt.digia.com/licensing. For further information ** use the contact form at http://qt.digia.com/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Digia gives you certain additional ** rights. These rights are described in the Digia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3.0 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU General Public License version 3.0 requirements will be ** met: http://www.gnu.org/copyleft/gpl.html. ** ** ** $QT_END_LICENSE$ ** ****************************************************************************/ calamares-3.2.20/LICENSES/LGPLv2.1-Presentation-Exception000066400000000000000000000022431362604102500224300ustar00rootroot00000000000000Digia Qt LGPL Exception version 1.1 As an additional permission to the GNU Lesser General Public License version 2.1, the object code form of a "work that uses the Library" may incorporate material from a header file that is part of the Library. You may distribute such object code under terms of your choice, provided that: (i) the header files of the Library have not been modified; and (ii) the incorporated material is limited to numerical parameters, data structure layouts, accessors, macros, inline functions and templates; and (iii) you comply with the terms of Section 6 of the GNU Lesser General Public License version 2.1. Moreover, you may apply this exception to a modified version of the Library, provided that such modification does not involve copying material from the Library into the modified Library's header files unless such material is limited to (i) numerical parameters; (ii) data structure layouts; (iii) accessors; and (iv) small macros, templates and inline functions of five lines or less in length. Furthermore, you are not required to apply this additional permission to a modified version of the Library. calamares-3.2.20/LICENSES/LGPLv3-Breeze000066400000000000000000000222221362604102500170760ustar00rootroot00000000000000The Breeze Icon Theme in icons/ Copyright (C) 2014 Uri Herrera and others This library 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. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library. If not, see . Clarification: The GNU Lesser General Public License or LGPL is written for software libraries in the first place. We expressly want the LGPL to be valid for this artwork library too. KDE Breeze theme icons is a special kind of software library, it is an artwork library, it's elements can be used in a Graphical User Interface, or GUI. Source code, for this library means: - where they exist, SVG; - otherwise, if applicable, the multi-layered formats xcf or psd, or otherwise png. The LGPL in some sections obliges you to make the files carry notices. With images this is in some cases impossible or hardly useful. With this library a notice is placed at a prominent place in the directory containing the elements. You may follow this practice. The exception in section 5 of the GNU Lesser General Public License covers the use of elements of this art library in a GUI. https://vdesign.kde.org/ ----- GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. 0. Additional Definitions. As used herein, "this License" refers to version 3 of the GNU Lesser General Public License, and the "GNU GPL" refers to version 3 of the GNU General Public License. "The Library" refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. An "Application" is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. A "Combined Work" is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the "Linked Version". The "Minimal Corresponding Source" for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. The "Corresponding Application Code" for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. 1. Exception to Section 3 of the GNU GPL. You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. 2. Conveying Modified Versions. If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. 3. Object Code Incorporating Material from Library Header Files. The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the object code with a copy of the GNU GPL and this license document. 4. Combined Works. You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the Combined Work with a copy of the GNU GPL and this license document. c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. d) Do one of the following: 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) 5. Combined Libraries. You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 6. Revised Versions of the GNU Lesser General Public License. The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. calamares-3.2.20/LICENSES/MIT-QtWaitingSpinner000066400000000000000000000021571362604102500205570ustar00rootroot00000000000000The MIT License (MIT) Original Work Copyright (c) 2012-2015 Alexander Turkin Modified 2014 by William Hallatt 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. calamares-3.2.20/README.md000066400000000000000000000036201362604102500150050ustar00rootroot00000000000000### Calamares: Distribution-Independent Installer Framework --------- [![GitHub release](https://img.shields.io/github/release/calamares/calamares.svg)](https://github.com/calamares/calamares/releases) [![Travis Build Status](https://travis-ci.org/calamares/calamares.svg?branch=master)](https://travis-ci.org/calamares/calamares) [![Coverity Scan Build Status](https://scan.coverity.com/projects/5389/badge.svg)](https://scan.coverity.com/projects/5389) [![GitHub license](https://img.shields.io/github/license/calamares/calamares.svg)](https://github.com/calamares/calamares/blob/master/LICENSE) | [Report a Bug](https://github.com/calamares/calamares/issues/new) | [Translate](https://www.transifex.com/projects/p/calamares/) | [Contribute](https://github.com/calamares/calamares/wiki/Develop-Guide) | Freenode (IRC): #calamares | [Wiki](https://github.com/calamares/calamares/wiki) | |:-----------------------------------------:|:----------------------:|:-----------------------:|:--------------------------:|:--------------------------:| ### Dependencies Main: * Compiler with C++14 support: GCC >= 5 or Clang >= 3.5.1 * CMake >= 3.3 * Qt >= 5.9 * yaml-cpp >= 0.5.1 * Python >= 3.3 (required for some modules) * Boost.Python >= 1.55.0 (required for some modules) * KDE extra-cmake-modules >= 5.18 (recommended; required for some modules; required for some tests) * KDE Frameworks KCoreAddons (>= 5.58 recommended) * PythonQt (optional, deprecated) Modules: * Individual modules may have their own requirements; these are listed in CMake output. Particular requirements (not complete): * *fsresizer* KPMCore >= 3.3 * *partition* KPMCore >= 3.3 * *users* LibPWQuality (optional) ### Building See [wiki](https://github.com/calamares/calamares/wiki) for up to date [building](https://github.com/calamares/calamares/wiki/Develop-Guide) and [deployment](https://github.com/calamares/calamares/wiki/Deploy-Guide) instructions. calamares-3.2.20/calamares.desktop000066400000000000000000000170151362604102500170540ustar00rootroot00000000000000[Desktop Entry] Type=Application Version=1.0 Name=Install System GenericName=System Installer Keywords=calamares;system;installer; TryExec=calamares Exec=pkexec /usr/bin/calamares Comment=Calamares — System Installer Icon=calamares Terminal=false StartupNotify=true Categories=Qt;System; X-AppStream-Ignore=true Name[ar]=تثبيت النظام Icon[ar]=كالامارس GenericName[ar]=مثبت النظام Comment[ar]=كالامارس - مثبت النظام Name[as]=চিছটেম ইনসà§à¦¤à¦² কৰক Icon[as]=কেলামাৰেচ GenericName[as]=চিছটেম ইনসà§à¦¤à¦²à¦¾à§° Comment[as]=কেলামাৰেচ — চিছটেম​ ইনসà§à¦¤à¦²à¦¾à§° Name[be]=УÑталÑваць ÑÑ–ÑÑ‚Ñму Icon[be]=calamares GenericName[be]=УÑталёўшчык ÑÑ–ÑÑ‚Ñмы Comment[be]=Calamares — уÑталёўшчык ÑÑ–ÑÑ‚Ñмы Name[bg]=ИнÑталирай ÑиÑтемата Icon[bg]=calamares GenericName[bg]=СиÑтемен ИнÑталатор Comment[bg]=Calamares — СиÑтемен ИнÑталатор Name[ca]=Instal·la el sistema Icon[ca]=calamares GenericName[ca]=Instal·lador de sistema Comment[ca]=Calamares — Instal·lador de sistema Name[da]=Installér system Icon[da]=calamares GenericName[da]=Systeminstallationsprogram Comment[da]=Calamares — Systeminstallationsprogram Name[de]=System installieren Icon[de]=calamares GenericName[de]=Installation des Betriebssystems Comment[de]=Calamares - Installation des Betriebssystems Name[el]=Εγκατάσταση συστήματος Icon[el]=calamares GenericName[el]=Εγκατάσταση συστήματος Comment[el]=Calamares — Εγκατάσταση συστήματος Name[en_GB]=Install System Icon[en_GB]=calamares GenericName[en_GB]=System Installer Comment[en_GB]=Calamares — System Installer Name[es]=Instalar Sistema Icon[es]=calamares GenericName[es]=Instalador del Sistema Comment[es]=Calamares — Instalador del Sistema Name[et]=Paigalda süsteem Icon[et]=calamares GenericName[et]=Süsteemipaigaldaja Comment[et]=Calamares — süsteemipaigaldaja Name[eu]=Sistema instalatu Icon[eu]=calamares GenericName[eu]=Sistema instalatzailea Comment[eu]=Calamares - sistema instalatzailea Name[es_PR]=Instalar el sistema Name[fr]=Installer le système Icon[fr]=calamares GenericName[fr]=Installateur système Comment[fr]=Calamares - Installateur système Name[gl]=Instalación do Sistema Icon[gl]=calamares GenericName[gl]=Instalador de sistemas Comment[gl]=Calamares — Instalador de sistemas Name[he]=התקנת מערכת Icon[he]=calamares GenericName[he]=×שף התקנה Comment[he]=Calamares - ×שף התקנה Name[hi]=सिसà¥à¤Ÿà¤® इंसà¥à¤Ÿà¥‰à¤² करें Icon[hi]=calamares GenericName[hi]=सिसà¥à¤Ÿà¤® इंसà¥à¤Ÿà¥‰à¤²à¤° Comment[hi]=Calamares — सिसà¥à¤Ÿà¤® इंसà¥à¤Ÿà¥‰à¤²à¤° Name[hr]=Instaliraj sustav Icon[hr]=calamares GenericName[hr]=Instalacija sustava Comment[hr]=Calamares — Instalacija sustava Name[hu]=Rendszer telepítése Icon[hu]=calamares GenericName[hu]=RendszertelepítÅ‘ Comment[hu]=Calamares – RendszertelepítÅ‘ Name[id]=Instal Sistem Icon[id]=calamares GenericName[id]=Pemasang Comment[id]=Calamares — Pemasang Sistem Name[is]=Setja upp kerfið Icon[is]=calamares GenericName[is]=Kerfis uppsetning Comment[is]=Calamares — Kerfis uppsetning Name[cs_CZ]=Nainstalovat systém Icon[cs_CZ]=calamares GenericName[cs_CZ]=Instalátor systému Comment[cs_CZ]=Calamares – instalátor operaÄních systémů Name[ja]=システムをインストール Icon[ja]=calamares GenericName[ja]=システムインストーラー Comment[ja]=Calamares — システムインストーラー Name[ko]=시스템 설치 Icon[ko]=ê¹”ë¼ë§ˆë ˆìФ GenericName[ko]=시스템 설치 ê´€ë¦¬ìž Comment[ko]=ê¹”ë¼ë§ˆë ˆìФ — 시스템 설치 ê´€ë¦¬ìž Name[lt]=Ä®diegti SistemÄ… Icon[lt]=calamares GenericName[lt]=Sistemos diegimas į kompiuterį Comment[lt]=Calamares — Sistemos diegimo programa Name[it_IT]=Installa il sistema Icon[it_IT]=calamares GenericName[it_IT]=Programma d'installazione del sistema Comment[it_IT]=Calamares — Programma d'installazione del sistema Name[mk]=ИнÑталирај го ÑиÑтемот Icon[mk]=calamares GenericName[mk]=СиÑтемен ИнÑталер Comment[mk]=Calamares - СиÑтемен ИнÑталер Name[ml]=സിസàµà´±àµà´±à´‚ ഇൻസàµà´±àµà´±à´¾àµ¾ ചെയàµà´¯àµà´• Icon[ml]=കലാമാരേസൠGenericName[ml]=സിസàµà´±àµà´±à´‚ ഇൻസàµà´±àµà´±à´¾à´³àµ¼ Comment[ml]=കലാമാരേസൠ- സിസàµà´±àµà´±à´‚ ഇൻസàµà´±àµà´±à´¾à´³àµ¼ Name[nb]=Installer System Icon[nb]=calamares GenericName[nb]=Systeminstallatør Comment[nb]=Calamares-systeminstallatør Name[nl]=Installeer systeem Icon[nl]=calamares GenericName[nl]=Installatieprogramma Comment[nl]=Calamares — Installatieprogramma Name[pl]=Zainstaluj system Icon[pl]=calamares GenericName[pl]=Instalator systemu Comment[pl]=Calamares — Instalator systemu Name[pt_BR]=Sistema de Instalação Icon[pt_BR]=calamares GenericName[pt_BR]=Instalador de Sistema Comment[pt_BR]=Calamares — Instalador de Sistema Name[ro]=Instalează sistemul Icon[ro]=calamares GenericName[ro]=Instalator de sistem Comment[ro]=Calamares — Instalator de sistem Name[ru]=УÑтановить ÑиÑтему Icon[ru]=calamares GenericName[ru]=УÑтановщик ÑиÑтемы Comment[ru]=Calamares - УÑтановщик ÑиÑтемы Name[sk]=InÅ¡talovaÅ¥ systém Icon[sk]=calamares GenericName[sk]=InÅ¡talátor systému Comment[sk]=Calamares — InÅ¡talátor systému Name[sl]=Namesti sistem Name[sq]=Instalo Sistemin Icon[sq]=calamares GenericName[sq]=Instalues Sistemi Comment[sq]=Calamares — Instalues Sistemi Name[fi_FI]=Asenna Järjestelmä Icon[fi_FI]=calamares GenericName[fi_FI]=Järjestelmän Asennusohjelma Comment[fi_FI]=Calamares — Järjestelmän Asentaja Name[sr@latin]=Instaliraj sistem Name[sr]=ИнÑталирај ÑиÑтем Icon[sr]=calamares GenericName[sr]=ИнÑталатер ÑиÑтема Comment[sr]=ÐšÐ°Ð»Ð°Ð¼Ð°Ñ€ÐµÑ â€” инÑталатер ÑиÑтема Name[sv]=Installera system Icon[sv]=calamares GenericName[sv]=Systeminstallerare Comment[sv]=Calamares — Systeminstallerare Name[th]=ติดตั้งระบบ Name[uk]=Ð’Ñтановити СиÑтему Icon[uk]=calamares GenericName[uk]=Ð’Ñтановлювач ÑиÑтеми Comment[uk]=Calamares - Ð’Ñтановлювач ÑиÑтеми Name[zh_CN]=安装系统 Icon[zh_CN]=calamares GenericName[zh_CN]=ç³»ç»Ÿå®‰è£…ç¨‹åº Comment[zh_CN]=Calamares — ç³»ç»Ÿå®‰è£…ç¨‹åº Name[zh_TW]=安è£ç³»çµ± Icon[zh_TW]=calamares GenericName[zh_TW]=系統安è£ç¨‹å¼ Comment[zh_TW]=Calamares ── 系統安è£ç¨‹å¼ Name[ast]=Instalar el sistema Icon[ast]=calamares GenericName[ast]=Instalador del sistema Comment[ast]=Calamares — Instalador del sistema Name[eo]=Instali Sistemo Icon[eo]=calamares GenericName[eo]=Sistema Instalilo Comment[eo]=Calamares — Sistema Instalilo Name[ne_NP]= सिसà¥à¤Ÿà¤® इनà¥à¤¸à¥à¤Ÿà¤² गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ Icon[ne_NP]=Calamares GenericName[ne_NP]=सिसà¥à¤Ÿà¤® इनà¥à¤¸à¥à¤Ÿà¤²à¤° Comment[ne_NP]=Calamares - सिसà¥à¤Ÿà¤® इनà¥à¤¸à¥à¤Ÿà¤²à¤° Name[es_MX]=Instalar el Sistema Icon[es_MX]=calamares GenericName[es_MX]=Instalador del sistema Comment[es_MX]=Calamares - Instalador del sistema Name[pt_PT]=Instalar Sistema Icon[pt_PT]=calamares GenericName[pt_PT]=Instalador de Sistema Comment[pt_PT]=Calamares - Instalador de Sistema Name[tr_TR]=Sistemi Yükle Icon[tr_TR]=calamares GenericName[tr_TR]=Sistem Yükleyici Comment[tr_TR]=Calamares — Sistem Yükleyici calamares-3.2.20/calamares.desktop.in000066400000000000000000000004731362604102500174610ustar00rootroot00000000000000[Desktop Entry] Type=Application Version=1.0 Name=Install System GenericName=System Installer Keywords=calamares;system;installer; TryExec=calamares Exec=pkexec /usr/bin/calamares Comment=Calamares — System Installer Icon=calamares Terminal=false StartupNotify=true Categories=Qt;System; X-AppStream-Ignore=true calamares-3.2.20/ci/000077500000000000000000000000001362604102500141205ustar00rootroot00000000000000calamares-3.2.20/ci/AppImage.md000066400000000000000000000036741362604102500161370ustar00rootroot00000000000000# AppImage building for Calamares > It is possible to build Calamares as an AppImage (perhaps other > containerized formats as well). This might make sense for > OEM phase-1 deployments in environments where Calamares is > not using the native toolkit. ## AppImage tools You will need - [`linuxdeploy-x86_64.AppImage`](https://github.com/linuxdeploy/linuxdeploy/releases) - [`linuxdeploy-plugin-qt-x86_64.AppImage`](https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases) - [`linuxdeploy-plugin-conda.sh`](https://github.com/linuxdeploy/linuxdeploy-plugin-conda) These tools should run -- they are bundled as AppImages after all -- on any modern Linux system. The [AppImage packaging documentation](https://docs.appimage.org/packaging-guide/) explains how the whole tooling works. If the tools are not present, the build script (see below) will download them, but you should save them for later. ## AppImage build From the **source** directory, run `ci/AppImage.sh`: - Use `--tools-dir` to copy the tools from a local cache rather than downloading them again. - Run it with `--cmake-args` for special CMake handling. - Use `--skip-build` to avoid rebuilding Calamares all the time. - Use `--config-dir` to copy in Calamares configuration files (e.g. *settings.conf* and the module configuration files) from a given directory. The build process will: - copy (or download) the AppImage tools into a fresh build directory - configure and build Calamares with suitable settings - modifies the standard `.desktop` file to be AppImage-compatible - builds the image with the AppImage tools ## AppImage caveats The resulting AppImage, `Calamares-x86_64.AppImage`, can be run as if it is a regular Calamares executable. For internal reasons it always passes the `-X` flag; any other command-line flags are passed in unchanged. Internally, `XDG_*_DIRS` are used to get Calamares to find the resources inside the AppImage rather than in the host system. calamares-3.2.20/ci/AppImage.sh000077500000000000000000000233721362604102500161510ustar00rootroot00000000000000#! /bin/sh # # SPDX-License-Identifier: BSD-2-Clause # # Copyright 2019 Adriaan de Groot # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # ### END LICENSES ### USAGE # # Shell script to help build an AppImage for Calamares. # # Usage: # AppImage.sh [-T|--tools-dir ] # [-C|--cmake-args ] # [-c|--config-dir ] # [-s|--skip-build] # [-p|--with-python] # # Multiple --cmake-args arguments will be collected together and passed to # CMake before building the application. # # Use --tools-dir to indicate where the linuxdeploy tools are located. # # Use --config to copy a config-directory (with settings.conf and others) # into the resulting image, # # Option --skip-build assumes that there is an already-built Calamares # available in the AppImage build directory; use this when you are, e.g. # re-packaging the image with different configuration. Option --with-python # adds the Conda Python packaging ecosystem to the AppImage, which will make # it **more** portable by disconnecting from the system Python libraries. # # The build process for AppImage proceeds in a directory build-AppImage # that is created in the current directory. # # The resulting AppImage has XDG_* enabled, and appends the in-image # directories to the current environment. You can set XDG_* in the # current environment to use other configurations and data, e.g. the # data in the current live environment. Or leave it unset, to try # Calamares with only the configuration contained in the AppImage. # ### END USAGE TOOLS_DIR="." CMAKE_ARGS="" DO_REBUILD="true" DO_CONDA="false" CONFIG_DIR="" while test "$#" -gt 0 do case "x$1" in x--help|x-h) sed -e '1,/USAGE/d' -e '/END.USAGE/,$d' < "$0" return 0 ;; x--tools-dir|x-T) TOOLS_DIR="$2" shift ;; x--cmake-args|x-C) CMAKE_ARGS="$CMAKE_ARGS $2" shift ;; x--config-dir|x-c) CONFIG_DIR="$2" shift ;; x--skip-build|x-s) DO_REBUILD="false" ;; x--with-python|x-p) DO_CONDA="true" ;; *) echo "! Unknown argument '$1'." exit 1 ;; esac test "$#" -gt 0 || { echo "! Missing arguments."; exit 1; } shift done ### Check where we're running # BIN_DIR=$( cd $( dirname "$0" ) && pwd -P ) test -d "$BIN_DIR" || { echo "! Could not find BIN_DIR"; exit 1; } test -f "$BIN_DIR/AppImage.sh" || { echo "! $BIN_DIR does not have AppImage.sh"; exit 1; } SRC_DIR=$( cd "$BIN_DIR/.." && pwd -P ) test -d "$SRC_DIR" || { echo "! Could not find SRC_DIR"; exit 1; } test -d "$SRC_DIR/ci" || { echo "! $SRC_DIR isn't a top-level Calamares checkout"; exit 1; } test -f "$SRC_DIR/CMakeLists.txt" || { echo "! SRC_DIR is missing CMakeLists.txt"; exit 1; } ### Check pre-requisites # BUILD_DIR=build-AppImage test -d "$BUILD_DIR" || mkdir -p "$BUILD_DIR" test -d "$BUILD_DIR" || { echo "! Could not create $BUILD_DIR"; exit 1; } TOOLS_LIST="linuxdeploy-x86_64.AppImage linuxdeploy-plugin-qt-x86_64.AppImage" $DO_CONDA && TOOLS_LIST="$TOOLS_LIST linuxdeploy-plugin-conda.sh" for tool in $TOOLS_LIST do if test -x "$BUILD_DIR/$tool" ; then # This tool is ok : else if test -f "$TOOLS_DIR/$tool" ; then cp "$TOOLS_DIR/$tool" "$BUILD_DIR/$tool" || exit 1 else fetch=$( grep "^# URL .*$tool\$" "$0" | sed 's/# URL *//' ) curl -L -o "$BUILD_DIR/$tool" "$fetch" fi chmod +x "$BUILD_DIR/$tool" test -x "$BUILD_DIR/$tool" || { echo "! Missing tool $tool in tools-dir $TOOLS_DIR"; exit 1; } fi done if test -n "$CONFIG_DIR" ; then test -f "$CONFIG_DIR/settings.conf" || { echo "! No settings.conf in $CONFIG_DIR"; exit 1; } fi ### Clean up build-directory # rm -rf "$BUILD_DIR/AppDir" if $DO_REBUILD ; then rm -rf "$BUILD_DIR/build" mkdir "$BUILD_DIR/build" || { echo "! Could not create $BUILD_DIR/build for the cmake-build."; exit 1; } else test -d "$BUILD_DIR/build" || { echo "! No build found in $BUILD_DIR, but --skip-build is given."; exit 1; } test -x "$BUILD_DIR/build/calamares" || { echo "! No complete build found in $BUILD_DIR/build ."; exit 1; } fi mkdir "$BUILD_DIR/AppDir" || { echo "! Could not create $BUILD_DIR/AppDir for the AppImage install."; exit 1; } LOG_FILE="$BUILD_DIR/AppImage.log" rm -f "$LOG_FILE" { echo "# Calamares build started" `date` ; echo "# .. build directory $BUILD_DIR"; echo "# .. log file $LOG_FILE"; } > "$LOG_FILE" cat "$LOG_FILE" ### Python Support # # if $DO_CONDA ; then export CONDA_CHANNELS="conda-forge;anaconda" export CONDA_PACKAGES="gettext;py-boost" ( cd "$BUILD_DIR" && ./linuxdeploy-x86_64.AppImage --appdir=AppDir/ --plugin=conda ) . "$BUILD_DIR/AppDir/usr/conda/bin/activate" fi ### Build Calamares # if $DO_REBUILD ; then echo "# Running cmake ..." ( cd "$BUILD_DIR/build" && cmake "$SRC_DIR" -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=lib $CMAKE_ARGS ) >> "$LOG_FILE" 2>&1 || { tail -10 "$LOG_FILE" ; echo "! Could not run CMake"; exit 1; } echo "# Running make ..." ( cd "$BUILD_DIR/build" && make -j4 ) >> "$LOG_FILE" 2>&1 || { tail -10 "$LOG_FILE" ; echo "! Could not run make"; exit 1; } fi echo "# Running make install ..." ( cd "$BUILD_DIR/build" && make install DESTDIR=../AppDir ) >> "$LOG_FILE" 2>&1 || { tail -10 "$LOG_FILE" ; echo "! Could not run make install"; exit 1; } ### Modify installation # IMAGE_DIR="$BUILD_DIR/AppDir" # Munge the desktop file to not use absolute paths or pkexec sed -i \ -e 's+^Exec=.*+Exec=calamares+' \ -e 's+^Name=.*+Name=Calamares+' \ "$IMAGE_DIR"/usr/share/applications/calamares.desktop # Replace the executable with a shell-proxy test -x "$IMAGE_DIR/usr/bin/calamares" || { echo "! Does not seem to have installed calamares"; exit 1; } mv "$IMAGE_DIR/usr/bin/calamares" "$IMAGE_DIR/usr/bin/calamares.bin" cat > "$IMAGE_DIR/usr/bin/calamares" <<"EOF" #! /bin/sh # # Calamares proxy-script. Runs Calamares with XDG support enabled, # and in-image XDG dirs set up so that compiled-in configuration can be used. test -n "${XDG_DATA_DIRS}" && XDG_DATA_DIRS="${XDG_DATA_DIRS}:" test -n "${XDG_CONFIG_DIRS}" $$ XDG_CONFIG_DIRS="${XDG_CONFIG_DIRS}:" export XDG_DATA_DIRS="${XDG_DATA_DIRS}${APPDIR}/usr/share/" export XDG_CONFIG_DIRS="${XDG_CONFIG_DIRS}${APPDIR}/etc/:${APPDIR}/usr/share/" export PYTHONPATH="${APPDIR}/usr/lib:" cd "$APPDIR" exec "$APPDIR"/usr/bin/calamares.bin -X "$@" EOF chmod 755 "$IMAGE_DIR/usr/bin/calamares" test -x "$IMAGE_DIR/usr/bin/calamares" || { echo "! Does not seem to have proxy for calamares"; exit 1; } ### Install additional files # PLUGIN_DIR=$( qmake -query QT_INSTALL_PLUGINS ) for plugin in \ libpmsfdiskbackendplugin.so \ libpmdummybackendplugin.so \ libpmlibpartedbackendplugin.so do # Warning, but not fatal: generally you only have two out of three available # depending on the KPMCore version. cp "$PLUGIN_DIR/$plugin" "$IMAGE_DIR/usr/lib" 2> /dev/null || { echo "! Could not copy KPMCore plugin $plugin"; } done # Install configuration files ETC_DIR="$IMAGE_DIR"/etc/calamares mkdir -p "$ETC_DIR" test -d "$ETC_DIR" || { echo "! Could not create /etc/calamares in image."; exit 1; } if test -z "$CONFIG_DIR" ; then echo "# Using basic settings.conf" cp "$SRC_DIR/settings.conf" "$ETC_DIR" else test -f "$CONFIG_DIR/settings.conf" || { echo "! No settings.conf in $CONFIG_DIR"; exit 1; } mkdir -p "$ETC_DIR/modules" cp "$CONFIG_DIR/settings.conf" "$ETC_DIR" test -d "$CONFIG_DIR/modules" && cp -r "$CONFIG_DIR/modules" "$ETC_DIR" test -d "$CONFIG_DIR/branding" && cp -r "$CONFIG_DIR/branding" "$IMAGE_DIR/usr/share/calamares" fi ### Build the AppImage # # echo "# Building AppImage" ( export QT_SELECT=qt5 # Otherwise might pick Qt4 in image export LD_LIBRARY_PATH=AppDir/usr/lib # RPATH isn't set in the executable cd "$BUILD_DIR" && ./linuxdeploy-x86_64.AppImage --appdir=AppDir/ --plugin=qt --output=appimage ) >> "$LOG_FILE" 2>&1 || { tail -10 "$LOG_FILE" ; echo "! Could not create image"; exit 1; } echo "# Created in $BUILD_DIR/Calamares-x86_64.AppImage" echo "# .. log file at $LOG_FILE" exit 0 ### Database for installation # # URL https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage # URL https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage # URL https://raw.githubusercontent.com/TheAssassin/linuxdeploy-plugin-conda/master/linuxdeploy-plugin-conda.sh calamares-3.2.20/ci/HACKING.md000066400000000000000000000001301362604102500155000ustar00rootroot00000000000000This has moved [to the wiki](https://github.com/calamares/calamares/wiki/Develop-Code). calamares-3.2.20/ci/RELEASE.md000066400000000000000000000113371362604102500155270ustar00rootroot00000000000000# Calamares Release Process > Calamares releases are now rolling when-they-are-ready releases. > Releases are made from *master* and tagged there. When, in future, > LTS releases resume, these steps may be edited again. > > Most things are automated through the release script [RELEASE.sh](RELEASE.sh) ## (0) A week in advance * Run [Coverity scan][coverity], fix what's relevant. The Coverity scan runs automatically once a week on master. The badge is displayed on the project front page and in the wiki. * Build with clang -Weverything, fix what's relevant. ``` rm -rf build ; mkdir build ; cd build CC=clang CXX=clang++ cmake .. && make ``` * Make sure all tests pass. ``` make make test ``` Note that *all* means all-that-make-sense. The partition-manager tests need an additional environment variable to be set for some tests, which will destroy an attached disk. This is not always desirable. There are some sample config-files that are empty and which fail the config-tests. * Notify [translators][transifex]. In the dashboard there is an *Announcements* link that you can use to send a translation announcement. Note that regular use of `txpush.sh` will notify translators as well of any changes. [coverity]: https://scan.coverity.com/projects/calamares-calamares?tab=overview [transifex]: https://www.transifex.com/calamares/calamares/dashboard/ ## (1) Preparation * Pull latest translations from Transifex. We only push / pull translations from master, so longer-lived branches (e.g. 3.1.x) don't get translation updates. This is to keep the translation workflow simple. The script automatically commits changes to the translations. ``` sh ci/txpull.sh ``` * Update the list of enabled translation languages in `CMakeLists.txt`. Check the [translation site][transifex] for the list of languages with fairly complete translations, or use `ci/txstats.py` for an automated suggestion. If there are changes, commit them. * Push the changes. * Drop the RC variable to 0 in `CMakeLists.txt`, *CALAMARES_VERSION_RC*. * Check `README.md` and the [Coding Guide](https://github.com/calamares/calamares/wiki/Develop-Code), make sure it's all still relevant. Run `ci/calamaresstyle` to check the C++ code style. Run pycodestyle on recently-modified Python modules, fix what makes sense. * Check defaults in `settings.conf` and other configuration files. * Edit `CHANGES` and set the date of the release. * Commit both. This is usually done with commit-message *Changes: pre-release housekeeping*. ## (2) Release Day * Run the helper script `ci/RELEASE.sh` or follow steps below. The script checks: - for uncommitted local changes, - if translations are up-to-date and translators have had enough time to chase new strings, - that the build is successful (with gcc and clang, if available), - tests pass, - tarball can be created, - tarball can be signed. On success, it prints out a suitable signature- and SHA256 blurb for use in the release announcement. ### (2.1) Buld and Test * Build with gcc. If available, build again with Clang and double-check any warnings Clang produces. * Run the tests; `make test` in the build directory should have no failures (or if there are, know why they are there). ### (2.2) Tag * `git tag -s v1.1.0` Make sure the signing key is known in GitHub, so that the tag is shown as a verified tag. Do not sign -rc tags. You can use `make show-version` in the build directory to get the right version number -- this will fail if you didn't follow step (1). ### (2.3) Tarball * Create tarball: `git-archive-all -v calamares-1.1-rc1.tar.gz` or without the helper script, ``` V=calamares-3.1.5 git archive -o $V.tar.gz --prefix $V/ master ``` Double check that the tarball matches the version number. * Test tarball (e.g. unpack somewhere else and run the tests from step 0). ## (3) Housekeeping * Generate MD5 and SHA256 checksums. * Upload tarball. * Announce on mailing list, notify packagers. * Write release article. * Publish tarball. * Update download page. * Publish release article on `calamares.io`. * Publicize on social networks. * Close associated milestone on GitHub if this is the actual release. * Publish blog post. ## (4) Post-Release * Bump the version number in `CMakeLists.txt` in the `project()` command. * Set *CALAMARES_VERSION_RC* back to 1. * Add a placeholder entry for the next release in `CHANGES` with date text *not released yet*. * Commit and push that, usually with the message *Changes: post-release housekeeping*. ``` # 3.2.XX (unreleased) # This release contains contributions from (alphabetically by first name): - No external contributors yet ## Core ## - No core changes yet ## Modules ## - No module changes yet ``` calamares-3.2.20/ci/RELEASE.sh000077500000000000000000000117131362604102500155420ustar00rootroot00000000000000#! /bin/sh # ### USAGE # # Release script for Calamares # # This attempts to perform the different steps of the RELEASE.md # document automatically. It's not tested on other machines or # setups other than [ade]'s development VM. # # Assumes that the version in CMakeLists.txt has been bumped, # and that a release of that version is desired. # # None of the "update stuff" is done by this script; in preparation # for the release, you should have already done: # * updating the version # * pulling translations # * updating the language list # * switching to the right branch # The release can fail for various reasons: doesn't build, tests fail, # or the string freeze has been violated. # # You can influence the script a little with these options: # * `-B` do not build (before tagging) # * `-P` do not package (tag, sign, tarball) # * `-T` do not respect string freeze # # The build / package settings can be influenced via environment variables: # * BUILD_DEFAULT set to `false` to avoid first build with gcc # * BUILD_CLANG set to `false` to avoid second build with clang # * BUILD_ONLY set to `true` to break after building # ### END USAGE test -d .git || { echo "Not at top-level." ; exit 1 ; } test -d src/modules || { echo "No src/modules." ; exit 1 ; } which cmake > /dev/null 2>&1 || { echo "No cmake(1) available." ; exit 1 ; } test -z "$BUILD_DEFAULT" && BUILD_DEFAULT=true test -z "$BUILD_CLANG" && BUILD_CLANG=true test -z "$BUILD_ONLY" && BUILD_ONLY=false STRING_FREEZE=true while getopts "hBPT" opt ; do case "$opt" in h|\?) sed -e '1,/USAGE/d' -e '/END.USAGE/,$d' < "$0" return 0 ;; B) BUILD_DEFAULT=false BUILD_CLANG=false ;; P) BUILD_ONLY=true ;; T) STRING_FREEZE=false ;; esac done if $STRING_FREEZE ; then sh ci/txcheck.sh || { echo "! String freeze failed." ; exit 1 ; } fi ### Setup # # BUILDDIR=$(mktemp -d --suffix=-build --tmpdir=.) ### Build with default compiler # # if test "x$BUILD_DEFAULT" = "xtrue" ; then rm -rf "$BUILDDIR" mkdir "$BUILDDIR" || { echo "Could not create build directory." ; exit 1 ; } ( cd "$BUILDDIR" && cmake .. && make -j4 ) || { echo "Could not perform test-build in $BUILDDIR." ; exit 1 ; } ( cd "$BUILDDIR" && make test ) || { echo "Tests failed in $BUILDDIR." ; exit 1 ; } fi ### Build with clang # # if test "x$BUILD_CLANG" = "xtrue" ; then if which clang++ > /dev/null 2>&1 ; then # Do build again with clang rm -rf "$BUILDDIR" mkdir "$BUILDDIR" || { echo "Could not create build directory." ; exit 1 ; } ( cd "$BUILDDIR" && CC=clang CXX=clang++ cmake .. && make -j4 ) || { echo "Could not perform test-build in $BUILDDIR." ; exit 1 ; } ( cd "$BUILDDIR" && make test ) || { echo "Tests failed in $BUILDDIR (clang)." ; exit 1 ; } fi fi if test "x$BUILD_ONLY" = "xtrue" ; then echo "Builds completed, release stopped. Build remains in $BUILDDIR." exit 1 fi if test -f "$BUILDDIR/CMakeCache.txt" ; then # Some build has created it, so that's good : else # Presumably -B was given; just do the cmake part rm -rf "$BUILDDIR" mkdir "$BUILDDIR" || { echo "Could not create build directory." ; exit 1 ; } ( cd "$BUILDDIR" && cmake .. ) || { echo "Could not run cmake in $BUILDDIR." ; exit 1 ; } fi ### Get version number for this release # # V=$( cd "$BUILDDIR" && make show-version | grep ^CALAMARES_VERSION | sed s/^[A-Z_]*=// ) test -n "$V" || { echo "Could not obtain version in $BUILDDIR." ; exit 1 ; } ### Create signed tag # # This is the signing key ID associated with the GitHub account adriaandegroot, # which is used to create all "verified" tags in the Calamares repo. KEY_ID="128F00873E05AF1D" git tag -u "$KEY_ID" -m "Release v$V" "v$V" || { echo "Could not sign tag v$V." ; exit 1 ; } ### Create the tarball # # TAR_V="calamares-$V" TAR_FILE="$TAR_V.tar.gz" git archive -o "$TAR_FILE" --prefix "$TAR_V/" "v$V" || { echo "Could not create tarball." ; exit 1 ; } test -f "$TAR_FILE" || { echo "Tarball was not created." ; exit 1 ; } SHA256=$(sha256sum "$TAR_FILE" | cut -d" " -f1) ### Build the tarball # # D=$(date +%Y%m%d-%H%M%S) TMPDIR=$(mktemp -d --suffix="-calamares-$D") test -d "$TMPDIR" || { echo "Could not create tarball-build directory." ; exit 1 ; } tar xzf "$TAR_FILE" -C "$TMPDIR" || { echo "Could not unpack tarball." ; exit 1 ; } test -d "$TMPDIR/$TAR_V" || { echo "Tarball did not contain source directory." ; exit 1 ; } ( cd "$TMPDIR/$TAR_V" && cmake . && make -j4 && make test ) || { echo "Tarball build failed in $TMPDIR." ; exit 1 ; } ### Cleanup # rm -rf "$BUILDDIR" # From test-builds rm -rf "$TMPDIR" # From tarball ### Print subsequent instructions # # cat <= 2.04 and clang-format-7 # # You can pass in directory names, in which case the files # in that directory (NOT below it) are processed. # AS=$( which astyle ) for _cf in clang-format-7 clang-format-8 clang-format70 clang-format80 clang-format do # Not an error if this particular clang-format isn't found CF=$( which $_cf || true ) test -n "$CF" && break done test -n "$AS" || { echo "! No astyle found in PATH"; exit 1 ; } test -n "$CF" || { echo "! No clang-format-7 found in PATH"; exit 1 ; } test -x "$AS" || { echo "! $AS is not executable."; exit 1 ; } test -x "$CF" || { echo "! $CF is not executable."; exit 1 ; } set -e any_dirs=no for d in "$@" do test -d "$d" && any_dirs=yes done style_some() { $AS --options=$(dirname $0)/astylerc --quiet "$@" $CF -i -style=file "$@" } if test "x$any_dirs" = "xyes" ; then for d in "$@" do if test -d "$d" ; then style_some $( find "$d" -maxdepth 1 -type f -name '*.cpp' -o -name '*.h' ) else style_some "$d" fi done else style_some "$@" fi calamares-3.2.20/ci/coverity-model.c000066400000000000000000000002461362604102500172300ustar00rootroot00000000000000/* Model file for Coverity checker. See https://scan.coverity.com/tune Calamares doesn't seem to geenerate any false positives, so the model-file is empty. */ calamares-3.2.20/ci/cppcheck.sh000077500000000000000000000001531362604102500162360ustar00rootroot00000000000000#!/bin/bash cd "$WORKSPACE" cppcheck --enable=all --inconclusive --xml --xml-version=2 src 2> cppcheck.xmlcalamares-3.2.20/ci/travis-config.sh000066400000000000000000000005071362604102500172310ustar00rootroot00000000000000# Build configuration on Travis. # # Defines a CMAKE_ARGS variable for use with cmake # # This file is sourced by travis.sh, and exports the variables # to the environment. CMAKE_ARGS="\ -DCMAKE_BUILD_TYPE=Release \ -DWEBVIEW_FORCE_WEBKIT=1 \ -DKDE_INSTALL_USE_QT_SYS_PATHS=ON \ -DWITH_PYTHONQT=OFF" export CMAKE_ARGS calamares-3.2.20/ci/travis-continuous.sh000077500000000000000000000023521362604102500201750ustar00rootroot00000000000000#! /bin/sh # # Travis CI script for use on every-commit: # - build and install Calamares # test -n "$BUILDDIR" || { echo "! \$BUILDDIR not set" ; exit 1 ; } test -n "$SRCDIR" || { echo "! \$SRCDIR not set" ; exit 1 ; } test -d $BUILDDIR || { echo "! $BUILDDIR not a directory" ; exit 1 ; } test -d $SRCDIR || { echo "! $SRCDIR not a directory" ; exit 1 ; } test -f $SRCDIR/CMakeLists.txt || { echo "! Missing $SRCDIR/CMakeLists.txt" ; exit 1 ; } cd $BUILDDIR || exit 1 section() { echo "###" echo "### $1" echo "###" pwd -P df -h } section "cmake $CMAKE_ARGS $SRCDIR" cmake $CMAKE_ARGS $SRCDIR || { echo "! CMake failed" ; exit 1 ; } section "make" make -j2 || { echo "! Make recheck" ; pwd -P ; df -h ; make -j1 VERBOSE=1 ; echo "! Make failed" ; exit 1 ; } section "make install" install_debugging() { ls -la $( find "$1" -type f -name '*.so' ) } echo "# Build results" install_debugging "$BUILDDIR" echo "# Install" DESTDIR=/build/INSTALL_ROOT mkdir -p "$DESTDIR" if make install VERBOSE=1 DESTDIR="$DESTDIR" ; then echo "# .. install OK" result=true else echo "# .. install failed" result=false fi section "Install results" install_debugging "$DESTDIR" $result || { echo "! Install failed" ; exit 1 ; } # Result of make install, above calamares-3.2.20/ci/travis-coverity.sh000077500000000000000000000025121362604102500176310ustar00rootroot00000000000000#! /bin/sh # # Travis CI script for weekly (cron) use: # - use the coverity tool to build and and upload results # test -n "$COVERITY_SCAN_TOKEN" || { echo "! Missing Coverity token" ; exit 1 ; } test -n "$BUILDDIR" || { echo "! \$BUILDDIR not set" ; exit 1 ; } test -n "$SRCDIR" || { echo "! \$SRCDIR not set" ; exit 1 ; } test -d $BUILDDIR || { echo "! $BUILDDIR not a directory" ; exit 1 ; } test -d $SRCDIR || { echo "! $SRCDIR not a directory" ; exit 1 ; } test -f $SRCDIR/CMakeLists.txt || { echo "! Missing $SRCDIR/CMakeLists.txt" ; exit 1 ; } cd $BUILDDIR || exit 1 curl -k -o coverity_tool.tar.gz \ -d "token=$COVERITY_SCAN_TOKEN&project=calamares%2Fcalamares" \ https://scan.coverity.com/download/cxx/linux64 || exit 1 mkdir "$BUILDDIR/coveritytool" tar xvf coverity_tool.tar.gz -C "$BUILDDIR/coveritytool" --strip-components 2 export PATH="$BUILDDIR/coveritytool/bin:$PATH" echo "# cmake -DCMAKE_BUILD_TYPE=Debug $CMAKE_ARGS $SRCDIR" cmake -DCMAKE_BUILD_TYPE=Debug $CMAKE_ARGS $SRCDIR || exit 1 cov-build --dir cov-int make -j2 tar caf calamares-ci.tar.xz cov-int curl -k --form token=$COVERITY_SCAN_TOKEN \ --form email=groot@kde.org \ --form file=@calamares-ci.tar.xz \ --form version="master-`date -u +%Y%m%d`" \ --form description="master on `date -u`" \ https://scan.coverity.com/builds?project=calamares%2Fcalamares calamares-3.2.20/ci/travis.sh000077500000000000000000000014201362604102500157640ustar00rootroot00000000000000#! /bin/sh # # Travis build driver script: # - the regular CI runs, triggered by commits, run a script that builds # and installs calamares, and then runs the tests. # - the cronjob CI runs, triggered weekly, run a script that uses the # coverity tools to submit a build. This is slightly more resource- # intensive than the coverity add-on, but works on master. # D=`dirname "$0"` test -d "$D" || { echo "! No directory $D" ; exit 1 ; } test -x "$D/travis-continuous.sh" || { echo "! Missing -continuous" ; exit 1 ; } test -x "$D/travis-coverity.sh" || { echo "! Missing -coverity" ; exit 1 ; } test -f "$D/travis-config.sh" && . "$D/travis-config.sh" if test "$TRAVIS_EVENT_TYPE" = "cron" ; then exec "$D/travis-coverity.sh" else exec "$D/travis-continuous.sh" fi calamares-3.2.20/ci/txcheck.sh000066400000000000000000000110521362604102500161040ustar00rootroot00000000000000#! /bin/sh ### LICENSE # === This file is part of Calamares - === # # SPDX-License-Identifier: BSD-2-Clause # SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot # # This file is Free Software: you can redistribute it and/or modify # it under the terms of the 2-clause BSD License. # ### END LICENSE ### USAGE # # Does the translation tag (from a previous txpush) exist? # This assumes that the release host has also locally done # a translations push, which works for the current development # workflow .. but it could be improved by looking for one of # the typical txpush log messages instead of the tag. # # Use --cleanup as an argument to clean things up. # # Normal use: # $ sh ci/txcheck.sh # If there are differences, fix them and then clean up: # $ sh ci/txcheck.sh --cleanup # ### END USAGE # The files that are translated; should match the contents of .tx/config TX_FILE_LIST="lang/calamares_en.ts lang/python.pot src/modules/dummypythonqt/lang/dummypythonqt.pot calamares.desktop" ### COMMAND ARGUMENTS # # We need to define tx_cleanup for the --cleanup argument, although it's # normally used much later in the script. tx_cleanup() { # Cleanup artifacs of checking git worktree remove --force build-txcheck-head git worktree remove --force build-txcheck-prev git branch -D build-txcheck-head > /dev/null 2>&1 } if test "x$1" = "x--cleanup" ; then tx_cleanup exit 0 fi if test "x$1" = "x--help" ; then sed -e '1,/USAGE/d' -e '/END.USAGE/,$d' < "$0" fi test -z "$1" || { echo "! Usage: txcheck.sh [--cleanup]" ; exit 1 ; } ### FIND EXECUTABLES # # XMLLINT="" for _xmllint in xmllint do $_xmllint --version > /dev/null 2>&1 && XMLLINT=$_xmllint test -n "$XMLLINT" && break done # Distinguish GNU date from BSD date if date +%s -d "1 week ago" > /dev/null 2>&1 ; then last_week() { date +%s -d "1 week ago" ; } else last_week() { date -v1w +%s; } fi # Distinguish GNU SHA executables from BSD ones if which sha256sum > /dev/null 2>&1 ; then SHA256=sha256sum else SHA256=sha256 fi ### CHECK WORKING DIRECTORY # # if git describe translation > /dev/null 2>&1 ; then : else echo "! No 'translation' tag exists for enforcing the string-freeze." exit 1 fi # The tag exists, so now check that there's no unsaved changes if test `git describe` = `git describe --dirty` ; then : else # Don't want any local changes, since those won't be # reflected in the worktrees and we might miss a string change. echo "! There are local changes." exit 1 fi # No unsaved changes; enforce a string freeze of one week DATE_PREV=$( git log -1 translation --date=unix | sed -e '/^Date:/s+.*:++p' -e d ) DATE_HEAD=$( last_week ) test "$DATE_PREV" -le "$DATE_HEAD" || { echo "! Translation tag has not aged enough." ; git log -1 translation ; exit 1 ; } # Tag is good, check that necessary files exist. The list of # files is hard-coded, but should match what is in the Transifex config. test -f ".tx/config" || { echo "! No Transifex configuration is present." ; exit 1 ; } for f in $TX_FILE_LIST ; do test -f $f || { echo "! Translation file '$f' does not exist." ; exit 1 ; } done ### COMPARE TRANSLATIONS # # # The state of translations; assume that sha256 is enough # to distinguish changed translations when we cat all the # string sources together. tx_sum() { CURDIR=`pwd` WORKTREE_NAME="$1" WORKTREE_TAG="$2" git worktree add $WORKTREE_NAME $WORKTREE_TAG > /dev/null 2>&1 || { echo "! Could not create worktree." ; exit 1 ; } ( cd $WORKTREE_NAME && sh "$CURDIR"/ci/txpush.sh --no-tx ) > /dev/null 2>&1 || { echo "! Could not re-create translations." ; exit 1 ; } # Remove linenumbers from .ts (XML) and .pot sed -i'' -e '/ === # # SPDX-License-Identifier: BSD-2-Clause # SPDX-FileCopyrightText: 2017-2020 Adriaan de Groot # SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac # # This file is Free Software: you can redistribute it and/or modify # it under the terms of the 2-clause BSD License. # ### END LICENSE ### USAGE # # Fetch the Transifex translations for Calamares and incorporate them # into the source tree, adding commits of the different files. # # Run this (occasionally) at the top-level directory to get # new translations. See also CMakeLists.txt and ci/txstats.py # for update instructions. # ### END USAGE ### INITIAL SETUP # # This stuff needs to be done once; in a real CI environment where it # runs regularly in a container, the setup needs to be done when # creating the container. # # # cp ~/jenkins-master/.transifexrc ~ # Transifex user settings # cp ~/jenkins-master/.gitconfig ~ # Git config, user settings # cp -R ~/jenkins-master/.ssh ~ # SSH, presumably for github # # cd "$WORKSPACE" # git config --global http.sslVerify false test -f "CMakeLists.txt" || { echo "! Not at Calamares top-level" ; exit 1 ; } test -f ".tx/config" || { echo "! Not at Calamares top-level" ; exit 1 ; } test -f "calamares.desktop" || { echo "! Not at Calamares top-level" ; exit 1 ; } ### FIND EXECUTABLES # # XMLLINT="" for _xmllint in xmllint do $_xmllint --version > /dev/null 2>&1 && XMLLINT=$_xmllint test -n "$XMLLINT" && break done # XMLLINT is optional ### FETCH TRANSLATIONS # # Use Transifex client to get translations; this depends on the # .tx/config file to locate files, and overwrites them in the # filesystem with new (merged) translations. export QT_SELECT=5 tx pull --force --source --all ### CLEANUP TRANSLATIONS # # Some languages have been deprecated. They may still exist in Transifex, # so clean them up after pulling. # drop_language() { rm -rf lang/python/"$1" src/modules/dummypythonqt/lang/"$1" lang/calamares_"$1".ts grep -v "\\[$1]" calamares.desktop > calamares.desktop.new mv calamares.desktop.new calamares.desktop } drop_language es_ES drop_language pl_PL # Also fix the .desktop file, which has some fields removed by Transifex. # { cat calamares.desktop.in ; grep "\\[[a-zA-Z_@]*]=" calamares.desktop ; } > calamares.desktop.new mv calamares.desktop.new calamares.desktop # And fixup the XML files like in txpush.sh if test -n "$XMLLINT" ; then for TS_FILE in lang/calamares_*.ts do $XMLLINT --c14n11 "$TS_FILE" | { echo "" ; cat - ; } | $XMLLINT --format --encode utf-8 -o "$TS_FILE".new - && mv "$TS_FILE".new "$TS_FILE" done fi ### COMMIT TRANSLATIONS # # Produce multiple commits (for the various parts of the i18n # infrastructure used by Calamares) of the updated translations. # Try to be a little smart about not committing trivial changes. # Who is credited with these CI commits AUTHOR="--author='Calamares CI '" # Message to put after the module name BOILERPLATE="Automatic merge of Transifex translations" git add --verbose lang/calamares*.ts git commit "$AUTHOR" --message="i18n: [calamares] $BOILERPLATE" | true rm -f lang/desktop*.desktop awk ' BEGIN {skip=0;} /^# Translations/ {skip=1;} {if (!skip || (length($0)>1 && $0 != "# Translations")) { skip=0; print $0; }}' < calamares.desktop > calamares.desktop.new mv calamares.desktop.new calamares.desktop git add --verbose calamares.desktop git commit "$AUTHOR" --message="i18n: [desktop] $BOILERPLATE" | true # Transifex updates the PO-Created timestamp also when nothing interesting # has happened, so drop the files which have just 1 line changed (the # PO-Created line). This applies only to modules which use po-files. git diff --numstat src/modules | awk '($1==1 && $2==1){print $3}' | xargs git checkout -- # Go through the Python modules; those with a lang/ subdir have their # own complete gettext-based setup. for MODULE_DIR in $(find src/modules -maxdepth 1 -mindepth 1 -type d) ; do FILES=$(find "$MODULE_DIR" -name "*.py" -a -type f) if test -n "$FILES" ; then MODULE_NAME=$(basename ${MODULE_DIR}) if [ -d ${MODULE_DIR}/lang ]; then # Convert PO files to MO files for POFILE in $(find ${MODULE_DIR} -name "*.po") ; do sed -i'' '/^"Content-Type/s/CHARSET/UTF-8/' $POFILE msgfmt -o ${POFILE%.po}.mo $POFILE done git add --verbose ${MODULE_DIR}/lang/* git commit "$AUTHOR" --message="i18n: [${MODULE_NAME}] $BOILERPLATE" | true fi fi done for POFILE in $(find lang -name "python.po") ; do sed -i'' '/^"Content-Type/s/CHARSET/UTF-8/' $POFILE msgfmt -o ${POFILE%.po}.mo $POFILE done git add --verbose lang/python* git commit "$AUTHOR" --message="i18n: [python] $BOILERPLATE" | true # git push --set-upstream origin master calamares-3.2.20/ci/txpush.sh000077500000000000000000000112001362604102500160040ustar00rootroot00000000000000#!/bin/sh ### LICENSE # === This file is part of Calamares - === # # SPDX-License-Identifier: BSD-2-Clause # SPDX-FileCopyrightText: 2017-2020 Adriaan de Groot # SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac # # This file is Free Software: you can redistribute it and/or modify # it under the terms of the 2-clause BSD License. # ### END LICENSE ### USAGE # # Extract translations from Calamares source and send them # to Transifex. Also (forcibly) updates the git "translation" # tag to document that source texts were updated and sent; # this is used by txcheck.sh to ensure that there's enough # time between updates and releases, and that strings don't # change between updates and releases. # # Run this at the top-level. # # Use the --no-tx option to do the extraction, but not the # pushing-to-Transifex part. This can be useful to check for # new strings or when testing the tools themselves. # ### END USAGE ### INITIAL SETUP # # This stuff needs to be done once; in a real CI environment where it # runs regularly in a container, the setup needs to be done when # creating the container. # # # cp ~/jenkins-master/.transifexrc ~ # Transifex user settings # cp ~/jenkins-master/.gitconfig ~ # Git config, user settings # cp -R ~/jenkins-master/.ssh ~ # SSH, presumably for github # # cd "$WORKSPACE" # git config --global http.sslVerify false test -f "CMakeLists.txt" || { echo "! Not at Calamares top-level" ; exit 1 ; } test -f ".tx/config" || { echo "! Not at Calamares top-level" ; exit 1 ; } test -f "calamares.desktop" || { echo "! Not at Calamares top-level" ; exit 1 ; } if test "x$1" = "x--no-tx" ; then # tx is the transifex command -- eat its arguments and do nothing tx() { echo "Skipped tx $*" } # txtag is used to tag in git to measure changes -- skip it too txtag() { echo "Skipped tx tagging." } else # tx is the regular transifex command # txtag is used to tag in git to measure changes txtag() { git tag -f translation git push --force origin translation } fi ### FIND EXECUTABLES # # LUPDATE="" for _lupdate in lupdate-qt5 lupdate do export QT_SELECT=5 $_lupdate -version > /dev/null 2>&1 || export QT_SELECT=qt5 $_lupdate -version > /dev/null 2>&1 && LUPDATE=$_lupdate test -n "$LUPDATE" && break done test -n "$LUPDATE" || { echo "! No working lupdate" ; lupdate -version ; exit 1 ; } XMLLINT="" for _xmllint in xmllint do $_xmllint --version > /dev/null 2>&1 && XMLLINT=$_xmllint test -n "$XMLLINT" && break done # XMLLINT is optional ### CREATE TRANSLATIONS # # Use local tools (depending on type of source) to create translation # sources, then push to Transifex # Don't pull branding translations in, # those are done separately. _srcdirs="src/calamares src/libcalamares src/libcalamaresui src/modules src/qml" $LUPDATE -no-obsolete $_srcdirs -ts lang/calamares_en.ts # Updating the TZ only needs to happen when the TZ themselves are updated, # very-very-rarely. # $LUPDATE -no-obsolete -extensions cxxtr src/libcalamares/locale -ts lang/tz_en.ts if test -n "$XMLLINT" ; then TS_FILE="lang/calamares_en.ts" $XMLLINT --c14n11 "$TS_FILE" | { echo "" ; cat - ; } | $XMLLINT --format --encode utf-8 -o "$TS_FILE".new - && mv "$TS_FILE".new "$TS_FILE" fi tx push --source --no-interactive -r calamares.calamares-master tx push --source --no-interactive -r calamares.fdo ### PYTHON MODULES # # The Python tooling depends on the underlying distro to provide # gettext, and handles two cases: # # - python modules with their own lang/ subdir, for larger translations # - python modules without lang/, which use one shared catalog # PYGETTEXT="xgettext --keyword=_n:1,2 -L python" SHARED_PYTHON="" for MODULE_DIR in $(find src/modules -maxdepth 1 -mindepth 1 -type d) ; do FILES=$(find "$MODULE_DIR" -name "*.py" -a -type f) if test -n "$FILES" ; then MODULE_NAME=$(basename ${MODULE_DIR}) if [ -d ${MODULE_DIR}/lang ]; then ${PYGETTEXT} -p ${MODULE_DIR}/lang -d ${MODULE_NAME} -o ${MODULE_NAME}.pot ${MODULE_DIR}/*.py POTFILE="${MODULE_DIR}/lang/${MODULE_NAME}.pot" if [ -f "$POTFILE" ]; then sed -i'' '/^"Content-Type/s/CHARSET/UTF-8/' "$POTFILE" tx set -r calamares.${MODULE_NAME} --source -l en "$POTFILE" tx push --source --no-interactive -r calamares.${MODULE_NAME} fi else SHARED_PYTHON="$SHARED_PYTHON $FILES" fi fi done if test -n "$SHARED_PYTHON" ; then ${PYGETTEXT} -p lang -d python -o python.pot $SHARED_PYTHON POTFILE="lang/python.pot" sed -i'' '/^"Content-Type/s/CHARSET/UTF-8/' "$POTFILE" tx set -r calamares.python --source -l en "$POTFILE" tx push --source --no-interactive -r calamares.python fi txtag exit 0 calamares-3.2.20/ci/txstats.py000077500000000000000000000073471362604102500162220ustar00rootroot00000000000000#! /usr/bin/env python3 # # Uses the Transifex API to get a list of enabled languages, # and outputs CMake settings for inclusion into CMakeLists.txt. # # This is a Python3 script. # # Run it with a -v command-line option to get extra output on # actual translation percentages. import sys def get_tx_credentials(): """ Gets the API token out of the user's .transifexrc (this is supposed to be secure). """ import configparser import os txconfig_name = os.path.expanduser("~/.transifexrc") try: with open(txconfig_name, "r") as f: parser = configparser.ConfigParser() parser.read_file(f) return parser.get("https://www.transifex.com", "password") except IOError as e: return None def output_langs(all_langs, label, filterfunc): """ Output (via print) all of the languages in @p all_langs that satisfy the translation-percentage filter @p filterfunc. Prints a CMake set() command with the @p label as part of the variable name. Performs line-wrapping. """ these_langs = [l for s, l in all_langs if filterfunc(s)] out = " ".join(["set( _tx_%s" % label, " ".join(sorted(these_langs)), ")"]) width = 68 prefix = "" while len(out) > width - len(prefix): chunk = out[:out[:width].rfind(" ")] print("%s%s" % (prefix, chunk)) out = out[len(chunk)+1:] prefix = " " print("%s%s" % (prefix, out)) def get_tx_stats(token, verbose): """ Does an API request to Transifex with the given API @p token, getting the translation statistics for the main body of texts. Then prints out CMake settings to replace the _tx_* variables in CMakeLists.txt according to standard criteria. If @p verbose is True, prints out language stats as well. """ import requests r = requests.get("https://api.transifex.com/organizations/calamares/projects/calamares/resources/calamares-master/", auth=("api", token)) if r.status_code != 200: return 1 suppressed_languages = ( "es_ES", ) # In Transifex, but not used # Some languages go into the "incomplete" list by definition, # regardless of their completion status: this can have various reasons. # # Note that Esperanto (eo) is special-cased in CMakeLists.txt # during the build; recent Qt releases *do* support the language, # and it's at-the-least ok. incomplete_languages = ( "eo", # Not supported by QLocale < 5.12.1 ) all_langs = [] j = r.json() languages = j["stats"] print("# Total %d languages" % len(languages)) for lang_name in languages: if lang_name in suppressed_languages: continue stats = languages[lang_name]["translated"]["percentage"] # Make the by-definition-incomplete languages have a percentage # lower than zero; this way they end up sorted (in -v output) # at the bottom but you can still determine the "actual" percentage. if lang_name in incomplete_languages: stats = -stats all_langs.append((stats, lang_name)) if verbose: for s, l in sorted(all_langs, reverse=True): print("# %16s\t%6.2f" % (l, s * 100.0)) output_langs(all_langs, "complete", lambda s : s == 1.0) output_langs(all_langs, "good", lambda s : 1.0 > s >= 0.75) output_langs(all_langs, "ok", lambda s : 0.75 > s >= 0.05) output_langs(all_langs, "incomplete", lambda s : 0.05 > s) return 0 def main(): verbose = (sys.argv[-1] == "-v") cred = get_tx_credentials() if cred: return get_tx_stats(cred, verbose) else: print("! Could not find API token in ~/.transifexrc") return 1 return 0 if __name__ == "__main__": sys.exit(main()) calamares-3.2.20/cmake_uninstall.cmake.in000066400000000000000000000016541362604102500203130ustar00rootroot00000000000000IF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") MESSAGE(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"") ENDIF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") FILE(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files) STRING(REGEX REPLACE "\n" ";" files "${files}") FOREACH(file ${files}) MESSAGE(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"") IF(EXISTS "$ENV{DESTDIR}${file}") EXEC_PROGRAM( "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\"" OUTPUT_VARIABLE rm_out RETURN_VALUE rm_retval ) IF(NOT "${rm_retval}" STREQUAL 0) MESSAGE(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"") ENDIF(NOT "${rm_retval}" STREQUAL 0) ELSE(EXISTS "$ENV{DESTDIR}${file}") MESSAGE(STATUS "File \"$ENV{DESTDIR}${file}\" does not exist.") ENDIF(EXISTS "$ENV{DESTDIR}${file}") ENDFOREACH(file) calamares-3.2.20/com.github.calamares.calamares.policy000066400000000000000000000015361362604102500226700ustar00rootroot00000000000000 Calamares https://github.com/calamares Run Installer Authentication is required to run the installation program drive-harddisk no no auth_admin /usr/bin/calamares true calamares-3.2.20/data/000077500000000000000000000000001362604102500144365ustar00rootroot00000000000000calamares-3.2.20/data/config-appimage/000077500000000000000000000000001362604102500174645ustar00rootroot00000000000000calamares-3.2.20/data/config-appimage/branding/000077500000000000000000000000001362604102500212505ustar00rootroot00000000000000calamares-3.2.20/data/config-appimage/branding/default/000077500000000000000000000000001362604102500226745ustar00rootroot00000000000000calamares-3.2.20/data/config-appimage/branding/default/squid.png000066400000000000000000000250541362604102500245350ustar00rootroot00000000000000‰PNG  IHDR\r¨f pHYsX•X•Ùm7ÓtEXtSoftwarewww.inkscape.org›î< IDATxœíy”Åç¿‘™uô}HÝj­D .$!ÀæF3Ø,mÀÌîØ»ïÍzæÍó[{y¶wÞ®Ç;ûÖ~óÌ0ãg<#Æf%ŒeaÌ! ¨….кúT«:3ö¬Èʪʬ®#³*߇W´**3"**¾ßüEdd&C Øs¾Â8þ±e„à ®Ú†Gœ.Grº‚ Ü A2‚0d`È"ÀD€! ˆC@† €  A2‚0d`È"ÀD€! ˆC@† €  A2‚0d`È"ÀD€! ˆC@† €  A2‚0d`È"ÀD€! ˆC@† €  A2‚0d`È"À(õ®á<}›ÐzÍçÊÚgd׿!qðe‡jD¸2€™¿7c¼ƒs{_E[(íP­7@CÂ’ UÂxJ®w5! ,a&Rd~† €°†k4 ®âGèW%Jb"%“ øúE‰’`&É|ýš„)ÜðofH¤á€¯ _’0…åüå0ZÂdJÂy2_@¿"aIVüyé ˜L“ øß.ºtûÌÛ ÜYÝþåR¬¼JÊù͸ýöþã?Ý$•J¥ô.ñìmÛ¿TKÞLj±=ªio³v)¿R ¿ãKÈÿñ#‘:;;ÑÔÔ„óçÏcddÉdRß.¿#F"ôõ-±ÌhhCCCé===hoo/HÄððpÉuD"X²¤¼ò—-[†P(”“666†Ó§OëšÐÛÛ[ßÑ£GsÞ—SþdZ ¢»»¦Û§R)ŒallL7@û®Æ¶_¼x1¢Ñ¨e¹fœ9sÀhNšñ÷ïììD[[8çzÌÊ*¾4ÁܹsqÝu×á‚ .È9²%“IìÝ»/¿ü2FFF :âE‹pÏ=÷XæûöÛocÇŽéëׯÇúõë ÒŸþyìÚµ«äzWRþ–-[ ÌçØ±cøÉO~¢¿_¹r%n»í¶‚üy䑊ËskÖ¬ÁÆ-÷Î9±{÷nô÷÷#Î]f|ë­·¢§§§hùüú׿ðYá˲Œ 6àŠ+®@GGGÎögÏžE?Þzë-\º]‹\‚l¾3Ñ ®¿þzlÚ´ ’T8N …BX»v-V®\‰;wâwÞÉ9jÌÔ Ëí¤åRjù3…¹óçχ,˺Ð-Zd¹­Ñ K-ÿ¦§RE·Ë‡1†îînÜzë­X»v-¶nÝŠK·Ÿ/+3ŒíÐÒÒ‚{î¹óçÏ7ݶ»»ŸúÔ§°jÕ*<ù䓦€ á›YœK·g;ÂæÍ›qíµ×šŠßH8ÆwÜ«¯¾:'}&twwC–[kWùŠ¢äaáÂ…5-¿sæÌÁ½÷Þ[ÖœÃL„B!|îsŸ³¿‘ÞÞ^Üwß}˜;w.gæ|¼€o @pÉ%—àŠ+®(kÎsgºg€,˘={vÙu› Ñ í,_ˆ¾££---%íS«ïßÝÝË/¿¼ê|›6m*+:kjjÂí·ßn[ù^Ä „F±yóæ²öݵk^}õUý}$)7š!Žvcwù"ì/õèowùããã.0YÁºuëfÌ#N#•J™¾TUÇK’T¶™LMMá‰'žÜ!€¯æV­Z…¦¦&ÓÏ^ýu¼õÖ[èììÄæÍ›ÑÖÖ†þþ~<ÿüó9ÛÍ™3Œ1Ó<Œ85`wù½½½`Œ•lv—¿{÷n¼øâ‹X¸p!¾øÅ/ ËfÏžÖÖVŒ[æñØcáÈ‘#EË™7o ÒÓé4{ì1Äb1\|ñŸꪫôy‘Ç###?à3¸ì²ËLÓðÌ3ÏÐfOŸ> 6à¹çž+ØÖ¬c«ªZÐqí6€bá5åG£QÌ™3§ªñ¿ßÿøñã8~ü8/^\ðY[[[Q(…ÖÖVÓô“'OêæqòäI¼ÿþû¸ûî»ñì³ÏâØ±c?àƒ!€NKK æÌ™cº1Ä´óãÏ>û¬iXjÖ±c±XIÛÙå¯X±¢ä1»“ßbbÂ4½±±±ì¼ò™žž6MïêêBss³þþرcøÁ~€wÞy'ðâ|`‚ ˜¦ŽŽâÔ©S%çcֱϞ=[FMýT‹å_tÑE%…õN•oÜÇ +ñ–ƒÕB«h4Šx §ÄãñªËó ¾1«I)³Îk…$Ièîî.H?tèéövEßoú3GË7‹áä÷WÅò7:¾øZ€ÞÞ^ôõõ¼Œ‘Ãùóç-ë¶¶6|éK_ÂÆK6 à›9«0rrr²ä<ºººLÏK=zÉd²`©mOO8P^EMøéOêhù¥€å˲ŒY³fáºë®3 ššÂ¹sçŠæñÉO~Ò4ýÑGÕ—1sαk×.Üy§y\/Ë2n¾ùf,_¾¿üå/166è@ßDVáåÔÔTÉyXц‡‡122Ròö•âÇò¯¹æ|ík_êU«L?ß¿¿~*¯ZÞ{ï=ìÙ³§è6‹/ƃ>ˆ /¼@p |cápØ4=™L–œ‡Y‡G<·¼øÇN‚V~:Æë¯¿^UF8çØ±cÞ{ï½¢Û544೟ý,.ºè"Á6ß@"‘0M/çê2³ÇÑ××g:vloo7=÷\)v–ŸJ¥LÏr˜Íè;Q~)¼øâ‹eÍÑ”B:ƶmÛ°sç΢æ/Iî¼óNý Æ š€o Àªc—sŠÉL]]]¸çž{pñÅ—¼O9ÌtR¥åK’”s)0 Ï7;’;QþL¼ð xùåÒžñ‰OÔ¬|ÁÀÀ€é2íuëÖY.2ª„ÖÖV|á _@{{;î¾ûnlß¾û÷ï ÝŒÄìš øÄ¨ßñ… Ü©‰ëÍ7ßÄ–-[ >ïîîÆý÷ß}ûö!cõêÕˆD"øô§?d2‰˜Çàà ¶nݪ¿¿é¦› &$IBWWWÑåÆXºt©ég©T ǯºüjq²ü½{÷â†n(8“°|ùr´´´Ì¸°Ø¥Ç“““8sæ ššštñÚŸ»ï¾ûöíÃÉ“'±dÉS£J$¦k‚‚/ @°gÏ\{íµhkk+ølÖ¬Y¸æškrÒ$IÂ]wÝ…'žxÂ4 ÌŸ1·ZoÞÓÓSÔÖ¬Yƒ5kÖ˜~666†‡~¸êò­¸è¸áô<ð#Ë#u8v¬|@ûŽ'Nœ(¸"Q’$¬Y³fƳ7Ýt“ågÀ/~ñ Ü{ï½<1ưråJ¬\¹²èþ¥Do~ÅósF’É$vìØQÖŒ®,˦QPØá­N¡U;Pl^-ÊŸ5k–ãå‹¡V>ëÖ­«z}~2™´œ*F*•ÂK/½TUÙ^Ç7 &9‚;w–lñxï¾û®égvgÂjÿZ•oev–¿oß>ÓI¸ŽŽŽ¢· /Î9ž~úi¼öÚkeíó«_ýJÿNA½&À7dÄþþ~lÛ¶ÍòúsÁÇŒÿøÇ–«‡‡‡1p'ô×ää¤é¥«===UÅŠE¥–_ V÷ Æs[d<·EÆï¶ÈU•?99‰Ã‡›~VÊmÁJá7¿ù ¶nÝ:ãÅE“““øùÏ®_7Tñ>›0²oß>>|kÖ¬A__ºººÐÐЀÉÉIœ>}ï¾û®~!J©!¸HË¿÷@©÷ѳŽò«¹Æ}¦!ËK3+¿”%×úE8FV¬XQõMAÄDð|€þð‡X±bV­Z…Ù³g£¥¥ñxƒƒƒ8xð vïÞM÷ÈP“‹£÷Ü…¯0ެEY»ÖvÛõøªz•_Ê$`1~·%»ˆê†§ÒE¶¬/%?&Íb?·Á\µ ̼euøj`Ä­?,á,¥þîbXt|;ìÿ+É/²ðR,úæ³[ÌÇÙoïÄGxræ´ÚïSÎé®C?ú œúí?ç¤ýn‹l2Š)ü©W}û¼˜Н?†YWþ±y]'F±÷¡Í˜8²;7Q™£Q¶žä%a—Žo#70“ø yímXð—ÛÀB‘Ö¬2j%~Pš;pÉCÏ y麂rci†©4ÝÚËÈ¢ñ ¼`µ¿@˜@ÓÒ³ñ4Ã4™@Õ8@9â¸Ùê!~™ ˆücdUC`3•ˆ_àF¨§øF0 T€T#~›LÀ â¨d•B`#Íkn­Jüz>koÃü¯m“C3oìvŠ¿ïë[«¿@iî@ûêëMëC&Pd62ü«¿ÃàϾaK^-— ¾þ„+"A¥GþÙWÞaKù'ÿ>~òûõÄÈʆ Àf†v|Ï6pÕp a¿‘'ÿNA}ò‹« 12’!p¿™€WįŸ (2‡ð‹ xMü"1–&(2ñº xNü<·Nd3Cà0^5¢âç…¸BüpÄÒ (@ ðª XŠ??ÝuâÏu¨XZ›$ !¨^3£¦¼&þBÈÌ!¨!^3 xˆíñ‹|È !¨1^2?‰_@& @ð‚ ÔKüŒ9'~AœL@‡  NxÁê!~³*ès¦u*Oü"9žddõÄÕ&`*~¥.â·®Sa%Í"ý³¼÷122€zãj0 ‰ÿß\/~3r"ˆ<‚ ¸·›@-Å/ÎàÛ)~«tãp ¨sd.Á­&Pkñµ>‰€š€‹p› Eü"Ÿ¤ªÝl4H¸ ·˜S‚%~A’Ë|ý`¯2´ã{@(Š®;¿Uu^ÍkoC×—½ßÂÿðM„Z«¿½àñ ’@ˆÈ…Ÿù Š\ÊÐöoÛ TrŸÂ Š_lŸâ q÷> Ñ6È\ŒÃzàUñ ‚`d.Ç«&àuñ ündÀk&àñ üldÁ+&à7ñ Rœ!¡–°¡Ç ðn7¿Š_Týgdí&àwñ‹|ü x·™@PÄ/ð“ x·˜@Yâ7¹›°×Ä/HúÄÈ–Û;(~±}šPÅ¥‡Z—V‹°“r#¯‰¿XaE-Ä/póœ@@(Õ¼(þr°šƒpJü‚4ÏD.ƒ @ÌdA¿ågâˆ_RÝg40¬æ‚,~ƒøšƒH©$@.÷ 8E$?¼øs.S._üåÎA¸)   ˆ‡ÄÒŒÄoxS«ú¨w$@`†¶±4ËëÝ$þÚÔÇ &@C€€•9å¬Hüµ­ÊµW½  –rM€Ä_›úˆätM€ € L@%ñר>ùÉõ22B',Mrfɉ߱úXåSá‘CHšåüu«$~§Å/ÒkmdDŠ´„T0–s‚\Ç âç¦o´ïãVñ T$­«i+d„)2Z)¯zEüÌøÆð·‹_ÀÓ`¨>ÉK$4L€Ä_~}Š–;s>Ö(QaV‹UHü•åSF}52bF$4™˜‰¿²|Ê­OfG´J@”„0E ,¶#ñϧñgÚ®W2¢d€Fƒ ˜}nšN⯨>(<ÊdSdDYè& ¦›nO⯨>E”i« eÃ4ÊÙb’ø‹çcc}ŒÃ[L€ €¨˜™#lуHü3¤W.~ã¦U›QQ™#,gß[Ýt ñWQŸb‹ƒ«2º!Q5I“¥Õƒ1+é¡$~+ñÓY‘íŠB@ØBDâ’<·+Û%4IéeCCÂ6"²v_]BËÉ+ âgÌyñ6–Ž„ZžÔÜrÛîRòªÁ‘ß ÛM"ÂvB’˜( ·Ý¶{¦¼ÊJw±øŠ‡Ð qÄgˆ¼r#byyUüE„ƒ(’všÐ ¯ˆ¿Xáeñd„ÃÈL3|AxIüVéfŸÙ¹t€ð2¢RÖü þró)·N²õG¶ž  j‚”1ü[ŒàCñ—[Ÿ2®¬2¢fHL;;`Ù¿IüV˜ßÕȈš"L  ã‘ø­pô&ádDÍ‘‘9$Ñ·=vÛîZÕ‹  ꃶtXÖû¸¿—ö–[Éz)°­uƒË€ÌHüÕäS dD]Éš€Åç$~G! êŽTû"ËüIü–®!"²¸Ï ‰¿&®",¡àŽÃ¿ý®#$Î ø €p%! 3>…È é°ÓƒCû/%•óøT£ãå¾#•N!™HjÅâ¢f!+Ëóí’ùK˜ÅRI·.2æc~ŒµÊ_ÿ<Ò8%œ(«° `£cçj²à€ *%•J!•Jêï­Dn¥r+±¹-½Ð×£( cH%“Ö¹LÌ^?@s„GeJ(dþ¡ËÄìñd„‡e¡p87Ñebö’ø2ÂcH’¤™@‘;g¸Män?(ÉTºÞu ˆòaRÎÄ áóÍIü¦(#£cõ®ATç©T œg®&tXœ~?(5¸çA8c€¢ÈH¥R™”¾¬‰°ôtë²Ê˧Üüë…âþ*Dƒ¬(H§Óz$ %kGßüþm•^¼ó»s”›îFÏÔ” ,``%Y7Ƙ©Â­Ò‹æ]f^•”QOh@ø1ȲŸWò£`«ôJÊp4 |…$š@¹!y%!?à5ékЀ𥠬ð{ÈŸ-"|‰,Ëtš¯îeû"ˆ"H²„tº´…nZxo>®/'ÝkP@øšR" ù4@ø‰IP¹j}v @cþ|è,˜$œƒ«ª!Ñ¿ |J…Ö1hÏÜRÕÌÿ-í-‚L²e8àh@±p§„ÅB~ ûЀ$b"__, °ß ˆÀÂÀ´#|ÿAC‚È3¿‡ýFh!A »¸ÇO‹|J¡þs“ÃÀáWÁ޾ ~ö°‘c@b Hņv ±hí®_´è] „¢õ­³: |ØvìM`è01 LénÚç‚w.z×K®æ]\ï×Mû•ë!•JáÌéÓ8ùñG8}ú¦¦¦Å1==EQGÐÖÖ†öŽÌ7 z{ÑÐÐ`[ý+½ûÞÚ;ç`‡^ëÿpø@-ãÆ¤Ñð5w€oøS`öçêèS`{ž{ã1àÌ¡²vå³kÿ|Ã=@´Õ¡ úƒ±ÑQì؃÷D"/y?Æ$ô.\„•—\‚Þ…‹ê}ÔÜØ‡¯ƒ=ó·À™ƒUfÄ€Ko‡zëßM³ì©œ_à*Ø[ÛÀžû{`ú\uYEš«ï¿ú>@ ϼC€˜œœÄk¯üG¿o:‘X³fwáêM×`î¼ù6Õ®4jgÉi°ßÛý„½ùF[‘¾é¯ÀÖßeo¾^eø(¤'ÿ8ñ޽ùÎ^‚ÔgþlÞÊÀ“Í8°^{å÷eñg‚1†¾+qÕÕ›²z ’ͰwöîwÞÆ>†ô؃`ƒ‡+"¶ön„þè[“+Ãí°ÿéñÿÄÆÉŸË!Œ]÷—h¹æÏkœ«xåå—±ï½ÇÊè蜅[o»---Ž•!pÜØÐa°Ÿ~ìüY'‹$—] ésÿHÁ{æ)øwíȯ¦fÞ¸ª‚Ưús4ÞôµÀ™€ªªøí¯wâø±£Ž—ÕÔÔŒOmùc´wt8Z޳§ÇOƒmýJMġûÀ·ýPåxÌk°cýv|Ãyñçh}õG˜záçËrœs¼ôÂó5?LNNàߟÚóçÏ;ZŽüàú‹‡É9•€ò¯÷ q${+¤¡RU°¥—×´ÜzÁ†Ž@þ—/‰éš–9ѱÎ>Dæ,®i¹õb÷î71°çÝš–™H&pæô),ïës,Ú’À'^Òsÿ8¹Ï‘JÏDø•G:¾Ç‘ï媗ªBúåbÎ%LQÓh}æ!Œž:q¢ÞÕЙ7>¡°½sÜV’—nAÄ%ÀÃMºñ›PÙŽÇôjƈNª§1­ã"ÛiE:ô£W¶kG7žÉG¼D鯴ÜÇNÓ*% @yg{UyØE¬g.ºêâ;2½½®·³ÞÆÚ–Í*1 MM®3D"m?{L_ÑXo–]°vëÕöO_| Ô6{ÔJ9ßw›/ÅÉ+îuÍpk|µöL†JÄÏ =˜szzÚuÃp8ŒåõÕ»€¦æf,^ºÔö|í¿' SÚx¿í-5ÔˆñK>£u<®MB1®ÏQC<ŽA˜ƒ¶8G¦g¶b9ÛéÕت?V޳ÜTqŻíÌ;#Ýwc-š²(ñî>LÏ¿<ó½˜ÞÞÚ¬ŸhÁLëí=™¿\åˆMÇ ¦U{ûc•¯‹W^Z³‡tcÍÚË 1Éöï'qØÿ_rõ§¡Î[Yã&Êetבnš Ð×N1® I™VO1çâ/Tè½3“®o§ïp®fò1¦‹2²/±¯1;Û9~ã_Qça “0¼ñ?RæÈnhGÑÎ"Íøä´ ·¥ÊUÄã1¨\u WVö_csÖ­ßPÛvÍ£«»,_îÈ÷s&†dâ··n+c=+1¹òЇý"LeB±\ã³éȳŠ6 ­IDAT ï­Ã~±“a>¼y6â×ÿWÛó-•±5Šd×…° ûó†^i&m 3DàˆÇ¨öY{vÒwñJtuw×¥lEQ°éºO:x[p‡Pg-A|ó·LÎ 9Kª¥C7þwˆÑ_ůßÕw ¹þ³ŽåoÅô‚õ8wÙ½°Süâ¬ç* ÷˜c Ÿ¼ñf477׸\àêk®C[[›ceÈ÷}åÏr*sµëBðH”P#-8}Û÷‘néÑ:/_ü,»¡ëÅ/H/Ùið¤á£Ž—ñ®‹pö–ÿ®D 3 剿prÚXÀÐ\\å`’„œÄ: …0oÁ|xøí&³5àò+7âB‡'!åû¿òàCN Î_µ¡ò‘WýS-=8sÛÿBªc‘‰øEGƒMâ×§ë.~QßÔE7‚M@>íìÃXbóVãÌ-ß4™ˆ?Û–Õˆ_o;¦Í·È²;ÎvD£Q,X¸8¤O.„áÊW£ïbççÑäûŒ‰î> 7ô¢éÔnH,^‰Í¹g6ÿO¤[çOü&!¹t&bI4ž€­÷yÆpî’Ï`øº¿58.~ýtk·¬hhhÀ’eË0xö,&'í½9‡–#®¿éf,^ºÌö¼Í`¯ö¿]“V*™Äð‰Cèêÿg´{É–ª†›1ºþK8¿âv€Æü@^Gó¹ø ¨ªŠ‰C¯£ó•ÿ‹†¡ƒ¶ä™l[€á+¿Šéë²ß›gÛÌAñgÞK’ä¹M÷>¼ýV?Éê 10,½àB¬ßp¢ µ›<¯™š œ=;ˆÈà~ÌÚûÿÐüq?ÄÒrHGÚ0±üœ»ôOnè€X`tñ TUÅÈð "~‹ÎƒO!:ü~Eù$[æáܪ»1qáÍà²R7ñÛÕM&SSSØÿÞÞ?tñ EÇÀлp.]½³»º¨á å¿Ú¿»¦S­©dƒCƒPÓ*BÓCh=º M'w#:xRÚÚIÓ³0ݳ Só/Ãä’k%¢w>!œsŒ ŸFtøZþgßCtä0À­WÜ%Úz1=o &_‡xÏ%™F4ˆºŽâ7në6Ò©Žý}tgNŸÂÔԔ嶊¬ «»ó,À’%ËÐTã³ FØ+oÔÖ͆††æªÖi8 !‰ðÄ„ÆOBNÆÀÒ ¨ ­HGÚnšdËm¸‰¼I"Fø¹cÕÌþÙÞW þlçö¦øœsŒŽŒ`:ÓçEäÔBçOAŽŸƒ2=<Ô€TSm  †›3¢Õò`ŒiZµ¿ˆ¾f<ã’+~½¹| ~3&&&0=5…x<†X,E–¡„BhmmCKk«k¾G] R©††¡¦9㙎&:™AÀ™NE⯠Î9FÇFŸŽéÑ2íœm'ˆ/Iâ¶Þ¨¬‚³gÏÆðð0¸šÖ:´N&Í3âçñbI.ËŸºQB|@D˜ª¡ÃŠ4ž“¦%©z>Ùtn¿!±¼²Ü±`ŠƀΎŒaο¡›®î¬º‘òÌ~ <³–TØ><#þl{Š2…§æ´ÏæŸû›˜¤ÚÕ íìUì½+p™ÈŠ‚ÎÎNŒŒŒ‚gîv*Ž$<ïÈ/z7ùaHÏþ[“­f Ù±¼è‘úPäèG~ž—®°òÒ õý=@[G0Æ0=Ó£ªìú}q´†þÝTaÂ\kGfT&ThG~°lé¿´¶ í$¼\KÌæ“4C»z­½†½7©¤Jªò¬°3½LëoÙ°]Üt2'=Óó´ƒD^Ø/ŽlâŠ=-óž‹2YN~,[.ao=Ö+ÛÚÚÁØ9Ħc08\6烃!ì϶¢¶ 7„ý9í#L¡°ô¸¡MYVå0þ— ¼ÙÎ^ÂçT”PY?:é &c~c:`?óÇüÙm³Û"!þ¼1'ËßÈùëå±hkk¢ÑhöÈÏôÖAΘñ3¦·qi ­PØž@N›š¦ÚÕëíìl¿#P¥È!íííçjv©x²µd\Oφø\ï²Ù1¿Ø6Âfòb\¿8`‰ü²a¿!åæá–6«”–¶Và0¢Èš œÏŒË˜¾hP„˜"×Ã~C¸jöçž Žüy!lÁPÀãa¿-Í-ÃôÔ´Þ>rÃ~½Ý C/m«‚°?÷71„ý@N;Žñö»W Œ(Š‚¶öv0YÒÇ£@Þp “ ‡¡Fñç…ýÆÓzEÃ~cH쳰ߊ¦¦f446êGì¢a¿hQ“°?÷7)ög)ìw u= `…¬(hmmÃøøx&mvúºÜYjmÛlX˲á­ög;¸˜¹æÈOóæl¹465Lè)C[ªÈC1¶™ñ7B×ç iÙ!¶Íö»‡º­˜ E‘ÑÒÚ‚‰ñq¢Ã ¡gŽöç§³3ÆsÖ0Œùý[¬9Ð:e^9Ïo ` ˆMOgÛ¡èZ qä×ÞÃÐN¹G~ÑÖºÌ i™}À´³qÕ@>!YAsK+¦&&ô9 ¦„.Æü†jÉc~ý4˜¿Çü3Ñm€11˜;æ×çŒgfDÛ”2æÏ,8`yí¯Ý†+‡FEAcs3&''²a¥!ìÏÎØgÏ_SØ_áhœ1LǦsÂþì¢ýöû׌(ŠŒ¦¦&í «‚°ßºB| û+# àˆÇbya¿˜\ÕÞSØï\=0¢È 1=5B|}jñPØ_‘°v¯¿x ¥°ßvBá0À€x<‘Q9…ý~ÄuëfBQD£Qˆù@ý(/âS:Ïo¡P‘H$g>€Îóû Åö›GÖE–Á"Q-D…¡3ªÜ` bøÊ a¿1éEQHHQΑL&³Ã-ãø¢­¹!ìÏmÔÎ.ÅSC#’,#‰hÐÅ güò¬Ã~á)aŽ Œ!™LÖdg÷`’fxÌ:µ³kQÆÎ×»U¡ª*ÒéTæ˜ñ7†©™4=ŒÍvJ–ˆÐÚ:óP f8ªë Âôjg—£œ¬w‚¨ž›$Â>È"ÀD€! ˆC@æÿï;ë“uOIEND®B`‚calamares-3.2.20/data/config-appimage/modules/000077500000000000000000000000001362604102500211345ustar00rootroot00000000000000calamares-3.2.20/data/config-appimage/modules/displaymanager.conf000066400000000000000000000020311362604102500247770ustar00rootroot00000000000000# Configure one or more display managers (e.g. SDDM) # with a "best effort" approach. --- #The DM module attempts to set up all the DMs found in this list, in that precise order. #It also sets up autologin, if the feature is enabled in globalstorage. #The displaymanagers list can also be set in globalstorage, and in that case it overrides anything set up here. displaymanagers: - slim - sddm - lightdm - gdm - mdm - lxdm - kdm #Enable the following settings to force a desktop environment in your displaymanager configuration file: #defaultDesktopEnvironment: # executable: "startkde" # desktopFile: "plasma" #If true, try to ensure that the user, group, /var directory etc. for the #display manager are set up correctly. This is normally done by the distribution #packages, and best left to them. Therefore, it is disabled by default. basicSetup: false #If true, setup autologin for openSUSE. This only makes sense on openSUSE #derivatives or other systems where /etc/sysconfig/displaymanager exists. sysconfigSetup: false calamares-3.2.20/data/config-appimage/modules/finished.conf000066400000000000000000000025631362604102500236020ustar00rootroot00000000000000# Configuration for the "finished" page, which is usually shown only at # the end of the installation (successful or not). --- # Behavior of the "restart system now" button. # # There are four usable values: # - never # Does not show the button and does not restart. # This matches the old behavior with restartNowEnabled=false. # - user-unchecked # Shows the button, defaults to unchecked, restarts if it is checked. # This matches the old behavior with restartNowEnabled=true and restartNowChecked=false. # - user-checked # Shows the button, defaults to checked, restarts if it is checked. # This matches the old behavior with restartNowEnabled=true and restartNowChecked=true. # - always # Shows the button, checked, but the user cannot change it. # This is new behavior. # # The three combinations of legacy values are still supported. restartNowMode: user-unchecked # If the checkbox is shown, and the checkbox is checked, then when # Calamares exits from the finished-page it will run this command. # If not set, falls back to "shutdown -r now". restartNowCommand: "systemctl -i reboot" # When the last page is (successfully) reached, send a DBus notification # to the desktop that the installation is done. This works only if the # user as whom Calamares is run, can reach the regular desktop session bus. notifyOnFinished: false calamares-3.2.20/data/config-appimage/modules/keyboard.conf000066400000000000000000000013211362604102500236000ustar00rootroot00000000000000# NOTE: you must have ckbcomp installed and runnable # on the live system, for keyboard layout previews. --- # The name of the file to write X11 keyboard settings to # The default value is the name used by upstream systemd-localed. # Relative paths are assumed to be relative to /etc/X11/xorg.conf.d xOrgConfFileName: "/etc/X11/xorg.conf.d/00-keyboard.conf" # The path to search for keymaps converted from X11 to kbd format # Leave this empty if the setting does not make sense on your distribution. convertedKeymapPath: "/lib/kbd/keymaps/xkb" # Write keymap configuration to /etc/default/keyboard, usually # found on Debian-related systems. # Defaults to true if nothing is set. #writeEtcDefaultKeyboard: true calamares-3.2.20/data/config-appimage/modules/locale.conf000066400000000000000000000017701362604102500232470ustar00rootroot00000000000000--- # This settings are used to set your default system time zone. # Time zones are usually located under /usr/share/zoneinfo and # provided by the 'tzdata' package of your Distribution. # # Distributions using systemd can list available # time zones by using the timedatectl command. # timedatectl list-timezones # # The starting timezone (e.g. the pin-on-the-map) when entering # the locale page can be set through keys *region* and *zone*. # If either is not set, defaults to America/New_York. # region: "Europe" zone: "Amsterdam" # Enable only when your Distribution is using an # custom path for locale.gen #localeGenPath: "PATH_TO/locale.gen" # GeoIP based Language settings: # # GeoIP need an working Internet connection. # geoipUrl: "https://geoip.kde.org/v1/calamares" # GeoIP style. Leave commented out for the "legacy" interpretation. # This setting only makes sense if geoipUrl is set, enabliing geoIP. geoipStyle: "json" calamares-3.2.20/data/config-appimage/modules/users.conf000066400000000000000000000042511362604102500231460ustar00rootroot00000000000000# Configuration for the one-user-system user module. # # Besides these settings, the user module also places the following # keys into the globalconfig area, based on user input in the view step. # # - hostname # - username # - password (obscured) # - autologinUser (if enabled, set to username) # # These globalconfig keys are set when the jobs for this module # are created. --- # Used as default groups for the created user. # Adjust to your Distribution defaults. defaultGroups: - users - lp - video - network - storage - wheel - audio # Some Distributions require a 'autologin' group for the user. # Autologin causes a user to become automatically logged in to # the desktop environment on boot. # Disable when your Distribution does not require such a group. autologinGroup: autologin # You can control the initial state for the 'autologin checkbox' in UsersViewStep here. # Possible values are: true to enable or false to disable the checkbox by default doAutologin: true # When set to a non-empty string, Calamares creates a sudoers file for the user. # /etc/sudoers.d/10-installer # Remember to add sudoersGroup to defaultGroups. # # If your Distribution already sets up a group of sudoers in its packaging, # remove this setting (delete or comment out the line below). Otherwise, # the setting will be duplicated in the /etc/sudoers.d/10-installer file, # potentially confusing users. sudoersGroup: wheel # Setting this to false , causes the root account to be disabled. setRootPassword: true # You can control the initial state for the 'root password checkbox' in UsersViewStep here. # Possible values are: true to enable or false to disable the checkbox by default. # When enabled the user password is used for the root account too. # NOTE: doReusePassword requires setRootPassword to be enabled. doReusePassword: true # These are optional password-requirements that a distro can enforce # on the user. The values given in this sample file disable each check, # as if the check was not listed at all. passwordRequirements: minLength: -1 # Password at least this many characters maxLength: -1 # Password at most this many characters userShell: /bin/bash calamares-3.2.20/data/config-appimage/modules/welcome.conf000066400000000000000000000032771362604102500234470ustar00rootroot00000000000000# Configuration for the welcome module. The welcome page # displays some information from the branding file. # Which parts it displays can be configured through # the show* variables. # # In addition to displaying the welcome page, this module # can check requirements for installation. --- # Display settings for various buttons on the welcome page. showSupportUrl: true showKnownIssuesUrl: true showReleaseNotesUrl: true # Requirements checking. These are general, generic, things # that are checked. They may not match with the actual requirements # imposed by other modules in the system. requirements: # Amount of available disk, in GiB. Floating-point is allowed here. # Note that this does not account for *usable* disk, so it is possible # to pass this requirement, yet have no space to install to. requiredStorage: 5.5 # Amount of available RAM, in GiB. Floating-point is allowed here. requiredRam: 1.0 # To check for internet connectivity, Calamares does a HTTP GET # on this URL; on success (e.g. HTTP code 200) internet is OK. internetCheckUrl: http://google.com # List conditions to check. Each listed condition will be # probed in some way, and yields true or false according to # the host system satisfying the condition. # # This sample file lists all the conditions that are known. check: - ram - power - internet - root - screen # List conditions that **must** be satisfied (from the list # of conditions, above) for installation to proceed. # If any of these conditions are not met, the user cannot # continue past the welcome page. required: - ram calamares-3.2.20/data/config-appimage/settings.conf000066400000000000000000000012301362604102500221670ustar00rootroot00000000000000# Configuration file for Calamares # Syntax is YAML 1.2 --- modules-search: [ usr/lib/calamares/modules ] # YAML: list of maps of string:string key-value pairs. #instances: #- id: owncloud # module: webview # config: owncloud.conf # Sequence section. This section describes the sequence of modules, both # viewmodules and jobmodules, as they should appear and/or run. sequence: - show: - welcome - locale - keyboard - users - summary - exec: - dummypython - locale - keyboard - users - displaymanager - networkcfg - show: - finished branding: default prompt-install: false # OEM mode dont-chroot: true disable-cancel: false calamares-3.2.20/data/example-root/000077500000000000000000000000001362604102500170525ustar00rootroot00000000000000calamares-3.2.20/data/example-root/README.md000066400000000000000000000006451362604102500203360ustar00rootroot00000000000000# Example Filesystem This is a filesystem that will be used as / in an example distro, *if* you build the `example-distro` target and use the default unpackfs configuration. It should hold files and configuration bits that need to be on the target system for example purposes. It should *not* have a bin/, lib/, sbin/ or lib64/ directory, since those are copied into the example-distro filesystem from the build host. calamares-3.2.20/data/example-root/etc/000077500000000000000000000000001362604102500176255ustar00rootroot00000000000000calamares-3.2.20/data/example-root/etc/bash.bashrc000066400000000000000000000000721362604102500217250ustar00rootroot00000000000000# Global .profile -- add /sbin_1 PATH=$PATH:/sbin_1:/xbin calamares-3.2.20/data/example-root/etc/group000066400000000000000000000000121362604102500206750ustar00rootroot00000000000000root:x:0: calamares-3.2.20/data/example-root/etc/issue000066400000000000000000000000441362604102500206760ustar00rootroot00000000000000This is an example /etc/issue file. calamares-3.2.20/data/example-root/etc/locale.gen000066400000000000000000000216751362604102500215720ustar00rootroot00000000000000# This file lists locales that you wish to have built. You can find a list # of valid supported locales at /usr/share/i18n/SUPPORTED, and you can add # user defined locales to /usr/local/share/i18n/SUPPORTED. If you change # this file, you need to rerun locale-gen. # aa_DJ ISO-8859-1 # aa_DJ.UTF-8 UTF-8 # aa_ER UTF-8 # aa_ER@saaho UTF-8 # aa_ET UTF-8 # af_ZA ISO-8859-1 # af_ZA.UTF-8 UTF-8 # ak_GH UTF-8 # am_ET UTF-8 # an_ES ISO-8859-15 # an_ES.UTF-8 UTF-8 # anp_IN UTF-8 # ar_AE ISO-8859-6 # ar_AE.UTF-8 UTF-8 # ar_BH ISO-8859-6 # ar_BH.UTF-8 UTF-8 # ar_DZ ISO-8859-6 # ar_DZ.UTF-8 UTF-8 # ar_EG ISO-8859-6 # ar_EG.UTF-8 UTF-8 # ar_IN UTF-8 # ar_IQ ISO-8859-6 # ar_IQ.UTF-8 UTF-8 # ar_JO ISO-8859-6 # ar_JO.UTF-8 UTF-8 # ar_KW ISO-8859-6 # ar_KW.UTF-8 UTF-8 # ar_LB ISO-8859-6 # ar_LB.UTF-8 UTF-8 # ar_LY ISO-8859-6 # ar_LY.UTF-8 UTF-8 # ar_MA ISO-8859-6 # ar_MA.UTF-8 UTF-8 # ar_OM ISO-8859-6 # ar_OM.UTF-8 UTF-8 # ar_QA ISO-8859-6 # ar_QA.UTF-8 UTF-8 # ar_SA ISO-8859-6 # ar_SA.UTF-8 UTF-8 # ar_SD ISO-8859-6 # ar_SD.UTF-8 UTF-8 # ar_SS UTF-8 # ar_SY ISO-8859-6 # ar_SY.UTF-8 UTF-8 # ar_TN ISO-8859-6 # ar_TN.UTF-8 UTF-8 # ar_YE ISO-8859-6 # ar_YE.UTF-8 UTF-8 # as_IN UTF-8 # ast_ES ISO-8859-15 # ast_ES.UTF-8 UTF-8 # ayc_PE UTF-8 # az_AZ UTF-8 # be_BY CP1251 # be_BY.UTF-8 UTF-8 # be_BY@latin UTF-8 # bem_ZM UTF-8 # ber_DZ UTF-8 # ber_MA UTF-8 # bg_BG CP1251 # bg_BG.UTF-8 UTF-8 # bhb_IN.UTF-8 UTF-8 # bho_IN UTF-8 # bn_BD UTF-8 # bn_IN UTF-8 # bo_CN UTF-8 # bo_IN UTF-8 # br_FR ISO-8859-1 # br_FR.UTF-8 UTF-8 # br_FR@euro ISO-8859-15 # brx_IN UTF-8 # bs_BA ISO-8859-2 # bs_BA.UTF-8 UTF-8 # byn_ER UTF-8 # ca_AD ISO-8859-15 # ca_AD.UTF-8 UTF-8 # ca_ES ISO-8859-1 # ca_ES.UTF-8 UTF-8 # ca_ES.UTF-8@valencia UTF-8 # ca_ES@euro ISO-8859-15 # ca_ES@valencia ISO-8859-15 # ca_FR ISO-8859-15 # ca_FR.UTF-8 UTF-8 # ca_IT ISO-8859-15 # ca_IT.UTF-8 UTF-8 # ce_RU UTF-8 # ckb_IQ UTF-8 # cmn_TW UTF-8 # crh_UA UTF-8 # cs_CZ ISO-8859-2 # cs_CZ.UTF-8 UTF-8 # csb_PL UTF-8 # cv_RU UTF-8 # cy_GB ISO-8859-14 # cy_GB.UTF-8 UTF-8 # da_DK ISO-8859-1 # da_DK.UTF-8 UTF-8 # de_AT ISO-8859-1 # de_AT.UTF-8 UTF-8 # de_AT@euro ISO-8859-15 # de_BE ISO-8859-1 # de_BE.UTF-8 UTF-8 # de_BE@euro ISO-8859-15 # de_CH ISO-8859-1 # de_CH.UTF-8 UTF-8 # de_DE ISO-8859-1 # de_DE.UTF-8 UTF-8 # de_DE@euro ISO-8859-15 # de_LI.UTF-8 UTF-8 # de_LU ISO-8859-1 # de_LU.UTF-8 UTF-8 # de_LU@euro ISO-8859-15 # doi_IN UTF-8 # dv_MV UTF-8 # dz_BT UTF-8 # el_CY ISO-8859-7 # el_CY.UTF-8 UTF-8 # el_GR ISO-8859-7 # el_GR.UTF-8 UTF-8 # en_AG UTF-8 # en_AU ISO-8859-1 # en_AU.UTF-8 UTF-8 # en_BW ISO-8859-1 # en_BW.UTF-8 UTF-8 # en_CA ISO-8859-1 en_CA.UTF-8 UTF-8 # en_DK ISO-8859-1 # en_DK.ISO-8859-15 ISO-8859-15 # en_DK.UTF-8 UTF-8 # en_GB ISO-8859-1 # en_GB.ISO-8859-15 ISO-8859-15 # en_GB.UTF-8 UTF-8 # en_HK ISO-8859-1 # en_HK.UTF-8 UTF-8 # en_IE ISO-8859-1 # en_IE.UTF-8 UTF-8 # en_IE@euro ISO-8859-15 # en_IN UTF-8 # en_NG UTF-8 # en_NZ ISO-8859-1 # en_NZ.UTF-8 UTF-8 # en_PH ISO-8859-1 # en_PH.UTF-8 UTF-8 # en_SG ISO-8859-1 # en_SG.UTF-8 UTF-8 # en_US ISO-8859-1 # en_US.ISO-8859-15 ISO-8859-15 en_US.UTF-8 UTF-8 # en_ZA ISO-8859-1 # en_ZA.UTF-8 UTF-8 # en_ZM UTF-8 # en_ZW ISO-8859-1 # en_ZW.UTF-8 UTF-8 # eo ISO-8859-3 # eo.UTF-8 UTF-8 # eo_US.UTF-8 UTF-8 # es_AR ISO-8859-1 # es_AR.UTF-8 UTF-8 # es_BO ISO-8859-1 # es_BO.UTF-8 UTF-8 # es_CL ISO-8859-1 # es_CL.UTF-8 UTF-8 # es_CO ISO-8859-1 # es_CO.UTF-8 UTF-8 # es_CR ISO-8859-1 # es_CR.UTF-8 UTF-8 # es_CU UTF-8 # es_DO ISO-8859-1 # es_DO.UTF-8 UTF-8 # es_EC ISO-8859-1 # es_EC.UTF-8 UTF-8 # es_ES ISO-8859-1 # es_ES.UTF-8 UTF-8 # es_ES@euro ISO-8859-15 # es_GT ISO-8859-1 # es_GT.UTF-8 UTF-8 # es_HN ISO-8859-1 # es_HN.UTF-8 UTF-8 # es_MX ISO-8859-1 # es_MX.UTF-8 UTF-8 # es_NI ISO-8859-1 # es_NI.UTF-8 UTF-8 # es_PA ISO-8859-1 # es_PA.UTF-8 UTF-8 # es_PE ISO-8859-1 # es_PE.UTF-8 UTF-8 # es_PR ISO-8859-1 # es_PR.UTF-8 UTF-8 # es_PY ISO-8859-1 # es_PY.UTF-8 UTF-8 # es_SV ISO-8859-1 # es_SV.UTF-8 UTF-8 # es_US ISO-8859-1 # es_US.UTF-8 UTF-8 # es_UY ISO-8859-1 # es_UY.UTF-8 UTF-8 # es_VE ISO-8859-1 # es_VE.UTF-8 UTF-8 # et_EE ISO-8859-1 # et_EE.ISO-8859-15 ISO-8859-15 # et_EE.UTF-8 UTF-8 # eu_ES ISO-8859-1 # eu_ES.UTF-8 UTF-8 # eu_ES@euro ISO-8859-15 # eu_FR ISO-8859-1 # eu_FR.UTF-8 UTF-8 # eu_FR@euro ISO-8859-15 # fa_IR UTF-8 # ff_SN UTF-8 # fi_FI ISO-8859-1 # fi_FI.UTF-8 UTF-8 # fi_FI@euro ISO-8859-15 # fil_PH UTF-8 # fo_FO ISO-8859-1 # fo_FO.UTF-8 UTF-8 # fr_BE ISO-8859-1 # fr_BE.UTF-8 UTF-8 # fr_BE@euro ISO-8859-15 # fr_CA ISO-8859-1 # fr_CA.UTF-8 UTF-8 # fr_CH ISO-8859-1 # fr_CH.UTF-8 UTF-8 # fr_FR ISO-8859-1 # fr_FR.UTF-8 UTF-8 # fr_FR@euro ISO-8859-15 # fr_LU ISO-8859-1 # fr_LU.UTF-8 UTF-8 # fr_LU@euro ISO-8859-15 # fur_IT UTF-8 # fy_DE UTF-8 # fy_NL UTF-8 # ga_IE ISO-8859-1 # ga_IE.UTF-8 UTF-8 # ga_IE@euro ISO-8859-15 # gd_GB ISO-8859-15 # gd_GB.UTF-8 UTF-8 # gez_ER UTF-8 # gez_ER@abegede UTF-8 # gez_ET UTF-8 # gez_ET@abegede UTF-8 # gl_ES ISO-8859-1 # gl_ES.UTF-8 UTF-8 # gl_ES@euro ISO-8859-15 # gu_IN UTF-8 # gv_GB ISO-8859-1 # gv_GB.UTF-8 UTF-8 # ha_NG UTF-8 # hak_TW UTF-8 # he_IL ISO-8859-8 # he_IL.UTF-8 UTF-8 # hi_IN UTF-8 # hne_IN UTF-8 # hr_HR ISO-8859-2 # hr_HR.UTF-8 UTF-8 # hsb_DE ISO-8859-2 # hsb_DE.UTF-8 UTF-8 # ht_HT UTF-8 # hu_HU ISO-8859-2 # hu_HU.UTF-8 UTF-8 # hy_AM UTF-8 # hy_AM.ARMSCII-8 ARMSCII-8 # ia_FR UTF-8 # id_ID ISO-8859-1 # id_ID.UTF-8 UTF-8 # ig_NG UTF-8 # ik_CA UTF-8 # is_IS ISO-8859-1 # is_IS.UTF-8 UTF-8 # it_CH ISO-8859-1 # it_CH.UTF-8 UTF-8 # it_IT ISO-8859-1 # it_IT.UTF-8 UTF-8 # it_IT@euro ISO-8859-15 # iu_CA UTF-8 # iw_IL ISO-8859-8 # iw_IL.UTF-8 UTF-8 # ja_JP.EUC-JP EUC-JP # ja_JP.UTF-8 UTF-8 # ka_GE GEORGIAN-PS # ka_GE.UTF-8 UTF-8 # kk_KZ PT154 # kk_KZ RK1048 # kk_KZ.UTF-8 UTF-8 # kl_GL ISO-8859-1 # kl_GL.UTF-8 UTF-8 # km_KH UTF-8 # kn_IN UTF-8 # ko_KR.EUC-KR EUC-KR # ko_KR.UTF-8 UTF-8 # kok_IN UTF-8 # ks_IN UTF-8 # ks_IN@devanagari UTF-8 # ku_TR ISO-8859-9 # ku_TR.UTF-8 UTF-8 # kw_GB ISO-8859-1 # kw_GB.UTF-8 UTF-8 # ky_KG UTF-8 # lb_LU UTF-8 # lg_UG ISO-8859-10 # lg_UG.UTF-8 UTF-8 # li_BE UTF-8 # li_NL UTF-8 # lij_IT UTF-8 # ln_CD UTF-8 # lo_LA UTF-8 # lt_LT ISO-8859-13 # lt_LT.UTF-8 UTF-8 # lv_LV ISO-8859-13 # lv_LV.UTF-8 UTF-8 # lzh_TW UTF-8 # mag_IN UTF-8 # mai_IN UTF-8 # mg_MG ISO-8859-15 # mg_MG.UTF-8 UTF-8 # mhr_RU UTF-8 # mi_NZ ISO-8859-13 # mi_NZ.UTF-8 UTF-8 # mk_MK ISO-8859-5 # mk_MK.UTF-8 UTF-8 # ml_IN UTF-8 # mn_MN UTF-8 # mni_IN UTF-8 # mr_IN UTF-8 # ms_MY ISO-8859-1 # ms_MY.UTF-8 UTF-8 # mt_MT ISO-8859-3 # mt_MT.UTF-8 UTF-8 # my_MM UTF-8 # nan_TW UTF-8 # nan_TW@latin UTF-8 # nb_NO ISO-8859-1 # nb_NO.UTF-8 UTF-8 # nds_DE UTF-8 # nds_NL UTF-8 # ne_NP UTF-8 # nhn_MX UTF-8 # niu_NU UTF-8 # niu_NZ UTF-8 # nl_AW UTF-8 # nl_BE ISO-8859-1 # nl_BE.UTF-8 UTF-8 # nl_BE@euro ISO-8859-15 # nl_NL ISO-8859-1 # nl_NL.UTF-8 UTF-8 # nl_NL@euro ISO-8859-15 # nn_NO ISO-8859-1 # nn_NO.UTF-8 UTF-8 # nr_ZA UTF-8 # nso_ZA UTF-8 # oc_FR ISO-8859-1 # oc_FR.UTF-8 UTF-8 # om_ET UTF-8 # om_KE ISO-8859-1 # om_KE.UTF-8 UTF-8 # or_IN UTF-8 # os_RU UTF-8 # pa_IN UTF-8 # pa_PK UTF-8 # pap_AN UTF-8 # pap_AW UTF-8 # pap_CW UTF-8 # pl_PL ISO-8859-2 # pl_PL.UTF-8 UTF-8 # ps_AF UTF-8 # pt_BR ISO-8859-1 # pt_BR.UTF-8 UTF-8 # pt_PT ISO-8859-1 # pt_PT.UTF-8 UTF-8 # pt_PT@euro ISO-8859-15 # quz_PE UTF-8 # raj_IN UTF-8 # ro_RO ISO-8859-2 # ro_RO.UTF-8 UTF-8 # ru_RU ISO-8859-5 # ru_RU.CP1251 CP1251 # ru_RU.KOI8-R KOI8-R # ru_RU.UTF-8 UTF-8 # ru_UA KOI8-U # ru_UA.UTF-8 UTF-8 # rw_RW UTF-8 # sa_IN UTF-8 # sat_IN UTF-8 # sc_IT UTF-8 # sd_IN UTF-8 # sd_IN@devanagari UTF-8 # sd_PK UTF-8 # se_NO UTF-8 # shs_CA UTF-8 # si_LK UTF-8 # sid_ET UTF-8 # sk_SK ISO-8859-2 # sk_SK.UTF-8 UTF-8 # sl_SI ISO-8859-2 # sl_SI.UTF-8 UTF-8 # so_DJ ISO-8859-1 # so_DJ.UTF-8 UTF-8 # so_ET UTF-8 # so_KE ISO-8859-1 # so_KE.UTF-8 UTF-8 # so_SO ISO-8859-1 # so_SO.UTF-8 UTF-8 # sq_AL ISO-8859-1 # sq_AL.UTF-8 UTF-8 # sq_MK UTF-8 # sr_ME UTF-8 # sr_RS UTF-8 # sr_RS@latin UTF-8 # ss_ZA UTF-8 # st_ZA ISO-8859-1 # st_ZA.UTF-8 UTF-8 # sv_FI ISO-8859-1 # sv_FI.UTF-8 UTF-8 # sv_FI@euro ISO-8859-15 # sv_SE ISO-8859-1 # sv_SE.ISO-8859-15 ISO-8859-15 # sv_SE.UTF-8 UTF-8 # sw_KE UTF-8 # sw_TZ UTF-8 # szl_PL UTF-8 # ta_IN UTF-8 # ta_LK UTF-8 # tcy_IN.UTF-8 UTF-8 # te_IN UTF-8 # tg_TJ KOI8-T # tg_TJ.UTF-8 UTF-8 # th_TH TIS-620 # th_TH.UTF-8 UTF-8 # the_NP UTF-8 # ti_ER UTF-8 # ti_ET UTF-8 # tig_ER UTF-8 # tk_TM UTF-8 # tl_PH ISO-8859-1 # tl_PH.UTF-8 UTF-8 # tn_ZA UTF-8 # tr_CY ISO-8859-9 # tr_CY.UTF-8 UTF-8 # tr_TR ISO-8859-9 # tr_TR.UTF-8 UTF-8 # ts_ZA UTF-8 # tt_RU UTF-8 # tt_RU@iqtelif UTF-8 # ug_CN UTF-8 # ug_CN@latin UTF-8 # uk_UA KOI8-U # uk_UA.UTF-8 UTF-8 # unm_US UTF-8 # ur_IN UTF-8 # ur_PK UTF-8 # uz_UZ ISO-8859-1 # uz_UZ.UTF-8 UTF-8 # uz_UZ@cyrillic UTF-8 # ve_ZA UTF-8 # vi_VN UTF-8 # wa_BE ISO-8859-1 # wa_BE.UTF-8 UTF-8 # wa_BE@euro ISO-8859-15 # wae_CH UTF-8 # wal_ET UTF-8 # wo_SN UTF-8 # xh_ZA ISO-8859-1 # xh_ZA.UTF-8 UTF-8 # yi_US CP1255 # yi_US.UTF-8 UTF-8 # yo_NG UTF-8 # yue_HK UTF-8 # zh_CN GB2312 # zh_CN.GB18030 GB18030 # zh_CN.GBK GBK # zh_CN.UTF-8 UTF-8 # zh_HK BIG5-HKSCS # zh_HK.UTF-8 UTF-8 # zh_SG GB2312 # zh_SG.GBK GBK # zh_SG.UTF-8 UTF-8 # zh_TW BIG5 # zh_TW.EUC-TW EUC-TW # zh_TW.UTF-8 UTF-8 # zu_ZA ISO-8859-1 # zu_ZA.UTF-8 UTF-8 calamares-3.2.20/data/example-root/etc/profile000066400000000000000000000000721362604102500212070ustar00rootroot00000000000000# Global .profile -- add /sbin_1 PATH=$PATH:/sbin_1:/xbin calamares-3.2.20/data/example-root/etc/sudoers.d/000077500000000000000000000000001362604102500215335ustar00rootroot00000000000000calamares-3.2.20/data/example-root/etc/sudoers.d/10-installer000066400000000000000000000000001362604102500236570ustar00rootroot00000000000000calamares-3.2.20/data/example-root/usr/000077500000000000000000000000001362604102500176635ustar00rootroot00000000000000calamares-3.2.20/data/example-root/usr/share/000077500000000000000000000000001362604102500207655ustar00rootroot00000000000000calamares-3.2.20/data/example-root/usr/share/zoneinfo/000077500000000000000000000000001362604102500226145ustar00rootroot00000000000000calamares-3.2.20/data/example-root/usr/share/zoneinfo/.dummy000066400000000000000000000000001362604102500237360ustar00rootroot00000000000000calamares-3.2.20/data/example-root/usr/share/zoneinfo/America/000077500000000000000000000000001362604102500241555ustar00rootroot00000000000000calamares-3.2.20/data/example-root/usr/share/zoneinfo/America/New_York000066400000000000000000000067311362604102500256440ustar00rootroot00000000000000TZif2쀞¦pŸºë` †p¡šÍ`¢eâp£ƒéà¤j®p¥5§`¦SÊð§‰`¨3¬ð¨þ¥àªŽðªÞ‡à«ópð¬¾ià­ÓRð®žK௳4ð°~-౜Qp²gJ`³|3p´G,`µ\p¶'`·;÷p¸ð`¹Ùp¹æÒ`»õð»Æ´`¼ä×ð½¯Ðà¾Ä¹ð¿²àÀ¤›ðÁo”à„}ðÃOvàÄd_ðÅ/XàÆM|pÇ:àÈ-^pÈøW`Ê @pÊØ9`ˈðpÒ#ôpÒ`ûàÓuäðÔ@ÝàÕUÆðÖ ¿à×5¨ðØ¡àÙŠðÙàƒàÚþ§pÛÀeàÜÞ‰pÝ©‚`Þ¾kp߉d`àžMpáiF`â~/pãI(`ä^påW.àæG-ðç7àè'ðéòàêñðêöÔàëæÓðìÖ¶àíÆµðî¿Ó`ï¯ÒpðŸµ`ñ´pò—`óo–pô_y`õOxpö?[`÷/Zpø(wàùÐp?›bà@o²pA„`BO”pCda`D/vpEDC`Eó¨ðG-_àGÓŠðI AàI³lðJí#àKœ‰pLÖ@`M|kpN¶"`O\MpP–`QÐp?›bà@o²pA„`BO”pCda`D/vpEDC`Eó¨ðG-_àGÓŠðI AàI³lðJí#àKœ‰pLÖ@`M|kpN¶"`O\MpP–`Q image/svg+xml calamares-3.2.20/data/images/bugs.svg000066400000000000000000000073501362604102500173710ustar00rootroot00000000000000 image/svg+xml calamares-3.2.20/data/images/fail.svgz000066400000000000000000000023771362604102500175420ustar00rootroot00000000000000‹‰Þ‘Sedit-delete.svg­WMoã6½çW°Ê%‹5%’ú´+{Qìb=ôÒnÑ3#ѶI4$:¶óë;Ô·m9ŽuXœyœ§y3”Gá—c–¢WQ”‰Ì—5‰DÉ8É7K㟟ßq` Rñ<æ©ÌÅÒÈ¥ñeõþ†1úZ®DŒ‰Ú¢ùKñ@O[¥v Ë:fÒMYl¬OãÕÃCX¾nBÀ›—‹8Z͆ݾH+`Y"™ÈUiQ“ZFzx¤Ù“WÉ,“yYíÌËǸˆ×ZßÍÁ®@t>Ÿ[„YŒa@àò”+~Äç[áǶ2Bˆ¾ù1Ô¢AwðßÁ[ƒYÊ}‰5ìf.”õíç·Î‰‰«x¦ÕóŒõLäœg¢ÜñH”Vk¯ö’Xm—sªÕV$›­ê–I¼4à~mß#Õzд4¡‡˜Nð9¯"EEiïyËHßÄÒq¢p •TÂÔj¬Æb]jxMªWÀÊ dUÞ.ˆŽ¿&âÐcŸyY§‚ÐŽo ì©,–Æãºú4ŽgYÄ¢h]^õ9sI&Q§ºÑ›Ømn:jç'ãþrËcyá.oRf`f¦Ç|‡ú—îè”Äôl—zå xŸ' Úmw¼Ú¾/ HùI@ÚÕWËQnåaShùT±oå[C]2^l’+¹ƒ\¯í©X«QGQ7ΈçY*¥5¸Òíä n:ÚÞUŽ ¢íJŸ7 "¾’¾ñˆÌ¾áËø1É’7:\©¯%–vÍSh´U…êr³ObQï„þ“e¢ªc€©é8¶íΉ;cŽ gŸÐö’Eµá5š93ÒytQª¨¥ns¦3 ¨çO¯ÆYɬ9æ—¬þÇY™mÂSsx!Ä7óœÿ ãQÉ çÇè¶šÌ6ú. ÆSƒÖû2»æêúý*µgH6¡_iu¼C†o¦6¥O:¶;:BÕnä6¡Gì¾jäýªyã©ÙZ¤'sîVÍ%›Ð"tÞêx‡ ßLmBôlwtÔUÏmÐ#Ý“Uÿð´XuÒSËñ¤mçÀû'TÝí Aƒ÷«ÎF¥adBC÷dÞݪ³Q² ™Q¿­Ã2|+5:¡¡{¶;:êªæFÛŽ­ëÉ­²gBñ˜+Þq­Æ>·ý•…1|ñ׷陼"Œ¢Å¿²xiÒþ,÷0«ÎÆÑ猫U’Á/¸ž¹?àZ½ã ¬›°Z‡-D=¾†ÄQ–èMÖß*IÓš¤Ó· š¨T¬*Îú²ÍÂjÒh’´Y†V+CµÚ\Œ$)éÒøÊw]Í+›Bîw™ŒE3ê½¶g£Ÿ*x^jôì—)¼«=a×%& \ŸÍ°G<Ósüù§¶ ›³Cy½NìpÇÕ¶—n4vºÜoÑ1u‡:öÀ Ö?eÈA þHõçhÓÐKFÎ,ŒŒ`ô†êpfžOç€ðMZ}ØàªÂ#xîÁÊfAê `ßö¼÷#öØ74P¤T§jÛ¼‰,èïkh½ÅcÌǵ«î}¥*ä‹Xäðj>h̰‘­‰"9>Ó'>%žÌðàúÆåŒ svÀ|“@‘ýYæ1m×!¾7°·C=…'©OŽö}à¢Gô­ÃSÓþ? ­M}êà+ÔO‰ÕÃ$²Âøcalamares-3.2.20/data/images/help-donate.svg000066400000000000000000000012431362604102500206240ustar00rootroot00000000000000 calamares-3.2.20/data/images/help.svg000066400000000000000000000177621362604102500173710ustar00rootroot00000000000000 image/svg+xml calamares-3.2.20/data/images/information.svgz000066400000000000000000000021421362604102500211420ustar00rootroot00000000000000‹‰Þ‘Shelp-about.svgµW[o£8~ï¯ðÒ—M h ,É<´i^碕öÍÅN‚ açÖ_¿ÇLnm7Ò.U|ÎwîÇÇnöu_•hË[Yˆzî×w¯sÁŠz5w~ÿú†IEkFKQó¹S çëâ.ûcôØrª8C»B­Ñ÷úEæ´áèÓZ©&õ¼Ýnç=ÑíÊûŒ0^ÜÝer»ºCÝZ¦,Ÿ;½@³iKd¹ÇK^ñZI¸ÄsFx>Âsm½Øò\T•¨¥‘¬åý¸eK‹ÖÞìB"³ÙÌó/0 °<ÔŠîñ©(øxM4ð}ßÞˆüw¨TBBøXø@p¥Ø´9_‚wk®¼§_O–‰}—)v¤fÈç‰Õ“$״ⲡ9—Þ@7ò»‚©õÜ ³ZóbµVvY°¹þv‹£^ ·×“ZŽïFÉÆ·¼D­ §LäÚð— ^rΞiþâêd,˜1¾”Z ³©W‘ƒ<ò:´¶-øn>SÙ…PCWPòR´sç~ižžñ,ZÆÛ55Ï K@Z uèš¼×=„¦µZ¾/×”‰$íœù*DäÈ â$y˜³ó=˜ôÝ$ “èá‚©ý ]Î’ |‘”žá]ÆÕó*º/ªâ•ƒ‡ä¢?Nú’–¶L`›‚qÙ‡¶0ôÌ ë¨;(Bê ·Ëþ iÎ@ÔIÑ„ˆø³¾ÿŽ;Ð(°…2mLh xHl5‰¶€üÓ@’‰jC+Š o2ÒÛˆ®ñ'¶§Fn0âd¿K|›™÷3æOðÑÜP—pBfï×ez=–€Üb$ü°.Ó«Fn(>™}d¿Ë å3dL×åz4Cù3ïr`zÅeTÑqz”xبpì¦?ž¾-zýYž§‰öe0‡Ðg±±ã,,9cy eEÕ¢¨`6è3ö Œ™72NÀzïJ;µ-ïNܫזW…ò~ª¢,¿k#6«Vi¡J>3¯÷¾Í; .ó†ÐÍju6ãJúÌ˹óHŠ.છ¦Œ÷SÝóy2åUKk©ƒ×³^K¸’}ÒåóCß §AðÙfçjˆDªC šû#/%.!Þô>búÏ,ðÈ“ª/<­áþwÒZ!tÄØŽÃ%Ãì=ÃRÌYhWúðóéñslßÿËÑècGãw9ÚPµþÏÕ2 QŽpäFa0ñN` ¢Ø, X›È à…ÀW܉v¤½Ðß6¢7Zó¨3¯i6í%GÔ50E‹áº³¥jÓB¢ÇÚŒsv‹Þ½p-ö±ãjÿµè‰±¸û€\h\ô calamares-3.2.20/data/images/no.svgz000066400000000000000000000020721362604102500172330ustar00rootroot00000000000000‹ùSwindow-close.svgWQoâ8~çWøÒ—VG;I d•n«•öõnO÷ìÆ¬&1ŠMýõ7Nì$ íFª{¾™ñ÷eì1󯇲@¯¼VBV ØC¼Ê%Õzáýûó»?õÒ´b´_x•ô¾.Gó?|}«9Õœ¡½Ðô£zQ9Ýrt¿Ñz›…á~¿„ d½ï/G£¹z]B·RËžuØîꢲ<ä/y¥UHz=<ïá¹É.^y.ËRVªñ¬ÔÝ\³U‡6«ÙÇ ˆÌf³Gaù€ðÕ±ÒôàŸºÂ/¹Fãl=òc¨L [øëàn"PrWç|~<¨¸Ÿ~>uFL³A§çIÖ‘+Zrµ¥9W¡›oü÷‚éÍ‹¢f´áb½ÑÝP°…ëmƒZ ­ÕÆÉ: ’ªI”&ÖEðý_ò„QØ<ÙèŽMÆdn–·ðö¢brïç…T<0B-7g|¥ ¾]% SÂø3“®>SÕRDhK×P…¬Þݪy¬áYÖŒ×Î4iž“É„>¶ÀÆv´MÔÎŽ/ÛÕ†#ô­ñ—”%DMƒ4!³Ç3s¢%‰b%“3£YOàÇt–LßAÌÙ"þ®Êp{8sßÕµôÈvóXÚÈýº6òézçä{7’AY®hÑiÞêgs ‚uÎöcÛ$ñ䌧E¸¢LÉY‹±ü3 ­ ´Šâwl%=ˆRüâ@—4µ6,©õN0ÞúAI%tSã¶Šq2ŽpóJRÏ¡d-@XÚáÛΚgŒ;€¶‰›` ÛñçrÚ”ÓË9ñ¸Ëz1çôã9ÉÌ-ÿFNÿÑÿVÒëâⱕi}šþw8š¹Ó0‘L\ÓÏ»F3_rMÕ´o!n&u‡Ü ²¿Ÿ¾/møyžgÿÉúÅeCÈè³ÜÁqå-»é9Ë3èä%ÕKQÂyi.B瞇½ál¸ôAÛ°5o¯ïE,/…q ÿÑ¢(~˜$\]P¡ ¾lr¶¯ŽEhiX’á€å image/svg+xml calamares-3.2.20/data/images/partition-disk.svg000066400000000000000000000244631362604102500213760ustar00rootroot00000000000000 image/svg+xml calamares-3.2.20/data/images/partition-erase-auto.svg000066400000000000000000000325551362604102500225120ustar00rootroot00000000000000 image/svg+xml calamares-3.2.20/data/images/partition-manual.svg000066400000000000000000000316351362604102500217200ustar00rootroot00000000000000 image/svg+xml calamares-3.2.20/data/images/partition-partition.svg000066400000000000000000000301311362604102500224420ustar00rootroot00000000000000 image/svg+xml calamares-3.2.20/data/images/partition-replace-os.svg000066400000000000000000000410611362604102500224670ustar00rootroot00000000000000 image/svg+xml calamares-3.2.20/data/images/partition-table.svg000066400000000000000000000131751362604102500215310ustar00rootroot00000000000000 image/svg+xml calamares-3.2.20/data/images/release.svg000066400000000000000000000060011362604102500200410ustar00rootroot00000000000000 image/svg+xml calamares-3.2.20/data/images/squid.png000066400000000000000000000201711362604102500175370ustar00rootroot00000000000000‰PNG  IHDR\r¨fsBIT|dˆ pHYsX•X•Ùm7ÓtEXtSoftwarewww.inkscape.org›î<öIDATxœíy°%U}Ç¿§»ï½oófcö•e`†d ¥¢(Á}IÔ²RV“*£–eEC”XFMR©TÊŠ•ABÀ2„RRj©,ƒÂà 0ÌÀ0ÀÀlo7ïݵoŸüÑ}ºÏ½·û¾»ôÞ¿õxsÏí{úÜÓçûíßYÞi†xö#¸qü[ç"ˆ4Àn¿è>|/èó(AŸ€ ˆøB@† € 2 Ad2‚È0d‘aÈ"ÃD†! ˆ C@† € 2 Ad2‚È0d‘aÈ"ÃD†! ˆ C@† € 2 Ad2‚È0d‘aÈ"ÃD†! ˆ C@† € 2 Ad2‚È0d‘aÈ"ÃD†! ˆ C@† € 2 Ad2‚È0ZÔ ‚ghÇu»þ]}fæ‘ zðÑ€JDÄ2€ PX>&Þþ']}fîå§qú¹Ç1ž«T*"P€ðdÁP0¯«Qƒ2Â`A'H3d„7Üüeš5•4BW•èˆ]%H!tE‰Ž`ÉR]MÂ.ý›I©‹ÔHt% WXÃoÙugÈR]EÂGüMé X¬“ ¤º‚DÜÅ/ H>tõˆŽ‘Å/ H6t刎p?`Í $ºjÄ’´¿è$,Ö, $ºb„;–²;¿`L qÐÕ"<éFü""dAWŠèŠvâÌ7u2¤@W‰è˜NÄ/ Ht…ˆŽèFüâ êĺ:Ä’ô"~ñÆba±NÍ,®Ð•!ÚÒø :™@\¡«BxÀ}¿H^ÔÈb]¿Ä/(’ ĺDÇô#~™@¼ +At„âé%a‘fb]bIü¿ X'ˆtˆ¶!~™@ôPíî0K´»™‰>ˆ0ÿÖ d0,ê^GAC@xãy×o|“5¿åõ99¹ …L "ȈÎh#~¯ÃÝÞc¬Qü2h  –¦ñ»¦KÂwëU”êdaC@´'ñ»o½A&.d„;¡‹_Pª+(ÖÉ€ €pÅhsxâuš-êñ„Kÿ„%~ñFÉŠ†5ω>¡ dògmSsQcIŒ&Í-~¦æ0¸f[ËeZ'(d!RX>6ÿíÃØðù‚å Q§cÂÿùŸ¿»¿ù†7ïjɧl02€(lÚ…ÍwüÚ²5¹äfløÜ}‰0°Ä¿âê÷!7¾ ÝùsŒl¿´eGâRL ÈB °i6ågPGWÚiI00Å/ÐF&°ëއ0²íÒ–üËd¾C0nâ$Áš Rümd6™€È‡LÀ_ȤøI20Ä/M ù¼dþAˆ_SüaÃ.ÝJÙÓ„Dï@7âÄÙ¢¿ÀÍäî™@øL/âÄÑ¢¿@6·î™@ïøH?âÄÉâ ~AÛî€A&Ð+d>2rñ»ú¿Ï%7cýgïŠtÅ Ÿâßñù»ú¿@™À²Ýos-™@oøÈôÿ~“÷|Ù—¼F¯ü@ìV özç_yõû}9ÿÑ{¿Ž7ô–òÊd]Cà3S|Ë7ˆUw ‚°_æè½_ÇÑ{¿ÞRžæÓW †2™@Ç@ÚL )â·gÈ:† ÒbI¿H,×É: @’n‰ÓfƒdKC0I5¶âoÞÕ1 å:ÈÚ@I5Oñ7§ÇNüU®›ƒƒD+d!‘4p}PbÄß ™€;d!’4Ú‡ØI¿½³™@ d!“$H“ødD@L *ñËk.B¿âTÈlÈ"" &…øÝŠ`A¸–©;ñ‹äJ¨’ DI¬MÀUüZ$â÷.Sk!Ý"û½¦×e22€¨‰µ H˜âÿAìÅïFCÑDÖ#2€wSübßOñ{¥ËÝ¬Ž Ä„¸š@ØâÂ3ÕŒš@Œˆ› dEü"Ÿšan6š%ÈbF\L€iÙ¿ Æ³eôtà2õÀ·€ÜV}ø«}ç5rÉÍ<ûÊ®?·é¾‚ÜXÿۛɿ ÆÔ‚êñ¡A@L™ºÿk¾E½ìS˜Uñ‹ãuÎP©{|0EÄ?»QTñ ²`d1'©&tñ Ònd i&ñ Òld !)&6ñ tÎP5:80a$ˆ¸›@ZÅ/¨é32€„WH»øE>i‹ÈHÜL +â¤ÉÈJ\L +ñ»ì&œ4ñ j)12€µ t-þ’)~ñ׊:g¨%Üh)p™zà[€UûF¨çíOü½íâÓqzâ/jœàÈ%ôVšÐb2aG$~H_ƒ£f ±‘@JËHüh¿È_O¨ ¤ˆ M€ÄWñ ’h42‚â÷mñ tË’2&bÝàw$°”øHür>uîAÜ!H)~™@'âoHh9¢‘n¶í^2=†âè 12€Ó¯ !~7"—÷\Óc,~AL€ÆRN¯c^âëÒÞvŸñ<>@ñ‹ãë€h1½ÕÆ´X„Ÿt $Müí"/¿ Îcd¡SH¢ø»Ák "(ñ êÜŠb@†Xʲ ~Ï÷Ä?¿@7âg41¼Æ²,~IüAAèP»ýA@iŽ2/þ†?Sî^üÝŽAÄ)  £ˆ‡”ëŒÄ/½«<¢ŽÈ2ÌÔý_C¹ÎÀšZ7‰?œòÄÁ¨ qTŽ!ÕQ‰?ÜòÜü‰ 2y¥ÑHüá”G$×#42€0ƒÄRyš“£22Â&¯ÃªµdÄXy¼ò‰¢;@@4S€µyÝ*‰?hñ‹ô°M€ €hAS€ÑœÆ&Èm’ ~îúÂü>q¿Àà@Í»˜¾B@¸¢2`TãPššaRÄÏäÒ?â.~¯ƒ!}’ž( ‘L€Äß}yÚžwé|¬Q2¢-¼«ø{˧‹òjdÄ’( v1oùt[ë#h• €èašèxGâoŸOâ—gú®W2¢c€!ÉÜÞwM'ñ÷T´NÁ°6ÙôѶ (­é®Ç“ø{*OeújdD×0Cªó@Lû||,ÜðÅȈžT9ò-ˆÄ¿Dzïâ—íÛȈ¾P9òªóÚkÓM€ÄßGyÚ-îËhC¢o Š)K¯cöÒBIü6^â—ÓY›ãÚB@øBAáj¼±)û%4Gé]C]Â7 ª¹¯€À/¡5ä•ñ3¼øŠŸÉ+GÕèNjqÙ¶»“¼B¸ó{á»)P@øNNã·m»—Ê««ô‹ €s¡Ge‰H )y´Ë+©â( DSÌiB/’"þvD’Å£2Óš‘$ñ{¥»½çç:Ð,‘T (Ž ¤AüÝæÓm™Tï·|  BA±L y‹±R(þnËÓÅ_ö  3g<Û7‰ß ÷ÝY}€ €a- ÄïE ›„“¡£0  r(¢m'lÛî°Êƒ€ÅÁ`.Ví6žî¥½Ý–Gñ^ ì+dDd0yP‰¿Ÿ|ú €ˆÇ<Þ'ñ 9¢;ÐïSˆ<ó'ñ{B@Ć‚ ¨bŸA(±"¯ eÇa‰ßȈؑSZÇHüÁ@@Ä’œ‚%ŸB䉿s؉ɩŸE¯æy¥8øyˆÔ¡×uÔªµV­xüQó•ç|»â¾s óø€ÒÑÖEr>î÷X¯üí÷ CEhùjW'ë6;w:”Ñ+º®C×kök/‘{©ÜKlqKÚˆˆ=š¦1½Vó>(fbN‚ø ‚ªªÐr9÷7c&椈  „ªªÈåó‰1s’Ä CQÓÚìœ7‘ÇUü ÕôzÔe ˆîaJÃÀ ô†ûá$~W´™Ù¹¨Ë@=Á9‡®ëàÜúk€ř6ñ€žŒš¦B×u+¥µ-›"ì<Ýû\ÝåÓmþQ¡Å¿ˆÑÆ jêõº ˜ÉæÝ·¹}{¥·?…ûîݦÇ-1%%TEµM€1æªp¯ô¶yw™W/çˆê©@tš#çý^B~´|Æ+½—sÄê©BQ[M Û¼—HšôM¨ @¤ŽNº^¤=äo†©DUUšæë'Ù¾¢ Šª ^ïl¡›Þ»÷ë»IO©¦“H ‹w~©Ga nxÏd¨Ïß Í™€) À9¸aH‰é]àÓ)´€È ŒÁ|æ–aX/Ò·´·[¨ @d 0Å—î@ .‘=Ä ¥1ì—¡.‘IÄ@¾½X(Ca¿ uˆÌÂÀÌ;|Ý´A]‚h2´‡ý2´ˆ à,îIÓ"ŸNˆ~ `q8ü8Ø«OŸzlæ5 Zô 0¸ šÆV›.ß|°q7ˆ¶ÌIdê0pd/ØkOS¯ ³@i¨ë@~X¶|ù`ãÅÀÖ«€uD]âÐ1µß»t]ÇÉ'pìÍ7pâÄq‹ETÊ”JEhš†|¾€ññq,›˜ÀÚuë±aãF úVþ^`Ï<ÿbøÀ9Ø¡_í½8¼0ºØ˜t`üâ÷ƒ_ñq`åÖàʘªE°g{ònàä¡®>ÊWl.ùø ŒTÀt07;‹çö?‹—DµZéøsŒ)ظi3v^x!6nÚIôº°#O€=ô àäÁ>3bÀ®[`¼ëKÀð  —¸öÛûÀ~þ@étYF€ko¿öV@Ë/ý ±¸¸ˆ_ïy ¯~Éu ±V¬\…k¯»k×­÷©tžÔJ`?¹lßýÍw` õw|ìòø›oR™~ʾ}Úß|Wn…þÁoƒ­Û™¹~²/x¿ÞóXWwü¥`ŒaÇù;ñ–k¯CÎë)H>Þ~î@ð0÷&”»o›<Ø)Ê—|¹÷~`j`çˆ;ìÈo Üû—@y>ü¹šÃÜ ŸÃèõ”YàÜÀžGÅ ÏïìËWà]7ß‚ÑÑÑÀÎ!ÜØÔa°ÿøØ™SAžPÛþ{P>ñ¯€’½gž²ý?6ïü†¾ôÁ}ˆaþ-ŸÁÐ;>›90 ?ý¿Ÿàõ×^ ü\ÃÃ#øý÷¼Ë&&=O°Ó€ó'Àîº-ñ@îð#à÷}è³?–4Øk{¡<ðåàÅœcìñï¢øËï®Á9ÇÿüE(â€ÅÅüøÁpæÌ™@Ï£Þþ§vG 9ëUhß¿lò•@²÷B™zºa€m»2ÔóF›zê~ ¨–B=oáè^Ì-ßÂY[B=oTìÛ÷ö?ûL¨ç¬Öª8yâ8Îݱ#°hK‚øQ~þOÀ±)ôRä÷|úëÏò½bõcPþç¯r°w WŒ:ƺ³ÇŽF_ÿLMNbßÞ½‘œûÔÉSØûÄoË?˜.À©CPž¼+¬;¨Cyà˨UÊÑ•!ØS÷€½áóhhÅIäû.æfg#+CÐpnàÑ_ý †¼‘HÈìæLOM’·„±(?ûNw‹{ ?ý Šß½^úÌOµõÿâkõÂø‹bñøK˜›‹¾Nø9tð &'ÃÃòÂ0 <ùäoù~ 8‡Ÿ?ìØóP^~,Ô òbtÿý8uò¤¹3¬Ïß3êåé6Ý×FûïÇÂü<ÎÌŸŽ¼^üüá†ýÏDaɼñú똞šôý;ú>_¦ø½Ð§ò³G0øâC8=s&–M@QÒ3m¥<ñý¨‹`3røxùÜcvn££cŽºH¾033™™™¨‹àœãà¸æºë}Í×ß?æu°ò3ǾYõè?D]„Ô£ÔŠ8õðam Àòy ¹-ö›Ã/¿„«¯½Î×_Ù±`}®='’É6œ²7Ú¬ÖjÐõÖ$dŒr¹Œ™i}PŽîóµpDrX[=ÀyVN¥R%€Çû;àk`ꈟ¹ b¸26hL8GµZhZö–fÅìì,üÔ¬¿]€ÓÇüÌŽHŠ¡c„—lñ‹]7©;à/‹ ¾æ§ûè'ÕEÿò"G:œ‡npŒÕjŒ™Ïé#ú£Z­ÀOÍúÛˆxñ-*¯ÖT+‡õ˜~P­VQ( (´ e?†ß.rÑîoFDKU1§þšÅ/¨T«‘.©M~oâësøÐrÿ2#’c(¡Î›Äoµ/Ó€j¥Š|¡%c{ øÅÀÀ üÔ¬¯»ó[|Ë‹Håü8*ȹÞù9œmppÔªäryêôÀ²eËà§f}0ÖžïcnD’˜ÎŸÌ{SeÌ·2Ãepsv —Ë‘ tÉò•+ã;Pßx™9LdŽ×Õµïüv‚$~ù˜Z­Fc] ( ÎZ³Ö×<ý}6`aÆ–« ùµ™öGiý娞Àé›Ú0³_*·ZkÛ9Rãü£1'ÑÏeâÑÓ'`ÞÇ»—¦+Ôç4žÙ WãlÍ|~À³ÆÌ bVE0Æì*…Åvv`aá Þ8z4êbج[¿ù\Þß1]ïA!&Àóغñ+0òCVÃcö5cD#µÓ˜Ùpá4Z‘ûîå4bóîÆ­|Ä8»œÖøØ)9­Wò´§ïï+¿(¯¹ç½åíÄwdv}Ü®g»ŽÍ#!ªUa ††‡cgÕj÷Ýs·½¢1j¶Ÿ}.üÖ«ï5^¿à&ãþ†)½rfÇÍ©?Ô®údlº[ó»Íg2ô"~óÁœ¥R)vÝ|>sÏÛu1Ã##زm›ïùú¿' Ó _óiß Ú-Fnó~ÐlxÜ„bÜ£†x ƒ0ó8p«[G±†ãìî€Á!§Ú•ã¬1UL‹IyøQÏ|ùÔwÜFU¶¥²zJ믴¾³ëÛõ5hÕ±]?°ÓaýæG¹T†Q7üm}þ\°sWhéhÇÅ—\…)¾?…Ãÿÿj»?cÝΫ¨‘Ù+>…úðJ€½vŠq³KÊÌrŠN8¿aÀnVº}œý9€sÃÊGNçp~Ägå<ü¬çÊ_‚x„'LÁô5(Ö]ªGQÏ"M¾ õØuip•J7h•½ý742ŒK/¿"ÜzmbÕêÕ8ûÜsù~ÁÄLAå–;#[X^³‹;ßÛ>ìa*Šåv藍)¼÷ûÅg‚ û›á#+QyÛ_ùžo§Ì]üqÔVϰ¿©ë‘æRg¬.G¥RE¿ÏÚó“ìĪի#9·¦i¸î†·¸-x@+¶¢òî¯ºÌ ‹>ºS7þ Dï&­â·¿ïî÷£vùÇËߋ҆Ëqú²OÂOñ‹YÎ T«ñ1ÆÞzã;122òyk¯¿ãããC½õ¶ÏÜTæÆªsÀ ÃÐBš0 £8qówP]c6<Þ½ø™s`ìÅ/¨o½Êä!(Ó¯~.¨¬:§nú;p­ €t'þÖÁU˜}©º¸ÁÁ ‰‘Ëå°nÃ9ü²¹Él\yõ58'àAHõÓ·Ý~G'0Ö_cpê+{½Œú蜼ùï¡Olv¿hhðIüöP`äâåÕÏ»¬8õD°c)¯Û“7Ý ^v¿S—ýˆß®;fŽ·¨j>¸†«¯¹;.~Mýt€€ ºz¦7bøø>(,^)Ÿu!N¾û›¨­ÍžøLAmÛuX(×0tr?|ÝçÃé ?ˆé¾ž \üöt«E\Ö bëöí˜?ÐÔÐR.~ Ã0°pè ,ßóÏœ:èKžµñ ˜¾úÏQÚp©ó½¹S`Šßz­(JlL€µM÷ øÝo÷¢Zë¡ö³ÏÁåW\…ÁðÏC3À4S§&Q˜<€Ïý7FÞÜ ±4¤ê…q,œ{Nïúêƒ L².~a˜™žDáÅŸbùÁ10ýROùÔF×áôEÅÂ9ïWµÈÄ/×kœLŠÅ"<¿/:ˆJ¢c`ظi3ví¾+W­  „Kœÿñ½ûBjÕk5LNM¨È•¦0öê#>¶“/B©{;i}hJk.BqýeXÜú{€V°‰¿Î9f¦gP®”00}c¯>†¡SÏc`æ0À½WÜUÇ7¢´îb,n¹•5Z•(‰:BñËÇÆº®ãµWà7Žâä‰ã(‹žÇjª†U«Wc݆ غu;†Cž]a{ž ×Ó¦¦¦Pç†Ùh8  †üÂIäæA­•ÁêUƒc¨ÆQ^‰ÚèYfwMƒDh#~Kø}UëóNëk¿Ó¸“)~ç³33(UÊö¸ˆª‘;sjå4´Ò< ðÜ ôáU¨Žo€‘±DkæÁ3µê%~}-9ãÒ(~»ºR ~7P*Q©”Q.—¡©*´\ccã‹Í÷ˆÄ@×uLMM¨s0Æ­†&™$`«Q‘ø{ƒsŽÙ¹YTJe;Z‚UÏN=A|IÆðuG ®N¬©X¹r%¦§§ÁºÙÐ8`62!hn‰ŸKâÄ’\fŸ¶QH!> "LCj°"7¤™I†“Î%ñKiŒ5+ VÜ` X>19Ì¢T.Yâ‡mº¶³ÚFÊ­Ï1pë3©µ~8¸%~§>Å9…§6Ôwòo¼&.iR½&¡ž“Š¿»w‰ªiX¾|9fffÁ­ÝNÅ„7ÝùE«àÒRºóoS¶¦58}yÑ"í; È°ïü¼)ݼa5¥I¿íÏ'€ñ‰ `Ž¡T*ÛQ•³~_Ü­a7C˜07ë‘ÉÊd€óÎæÔ‘}ý`Ö% Õ“ðr3ÑÉ.iR½&­ž“†¿‚ôR-‡å˜apGØV+3Û›¶‹M'Ò­–gÞ$šÂ~qgñc§Y¯¹8'kÈ5Ë… ¤ð6a­r||;r© É᜜K)ìwjÑü—Âþ†ú¦ÐZOö \ªSæ¨òN@ÌzN±˜SÑr9LL,‡¢©öÝÉnPpéóËé€~6÷ùc㤈@ˆ¿©ÏÉš~'¹/:66ŽçÎÏìÚACŸ’ø³ë¸³…Vh­O ¡N]Ó¤zMz='ßwê5§aÙ²e˜›ç†Ó‰4o±ïȨš†¡!»ŸjwC)ì÷\>0 R©Z*§°?ÄnÀRhš†ˆñ@û./âSšç÷\.B¡Ð0@óüéBó}óÈÐT¬0`†¨£Á%cÝW.…ýr³‹4¢•œ¦œ£V«9Ý-¹Q×\ ûëÕsLIT@FQUä ó¶˜yįyÁŠöh O w´\` µš&­pF÷à’&=fê9¶hsgæ£.C_†z]·^‰9LµÒì0Öi”̉ˆ0ëÚz(“îêv‚0;…ê9æhǦ'£.A‘¸A@‚ üƒ € 2 Ad2‚È0d‘aþä‡êok\IEND®B`‚calamares-3.2.20/data/images/squid.svg000066400000000000000000000260061362604102500175550ustar00rootroot00000000000000 image/svg+xml calamares-3.2.20/data/images/state-error.svg000066400000000000000000000012251362604102500206730ustar00rootroot00000000000000 calamares-3.2.20/data/images/state-ok.svg000066400000000000000000000011171362604102500201530ustar00rootroot00000000000000 calamares-3.2.20/data/images/state-warning.svg000066400000000000000000000016341362604102500212130ustar00rootroot00000000000000 calamares-3.2.20/data/images/yes.svgz000066400000000000000000000021621362604102500174170ustar00rootroot00000000000000‹ùSdialog-ok-apply.svgWÉrÛ8½û+0ô%©$ÁI9$•ª\3™š3L@Ê$Á¡Í_? ®ZÛrÙ"»ú¡@{ñõPhÇU#dµ´ˆíZˆW™d¢Ê—Ö¿¿àÄB¦£…¬øÒª¤õuõ°ø côMqª9C{¡7ègõÜd´æèÓFëzî8ûý޽і*w>#ŒW‹f—? „€·jæ,[Zý€z«ŠÈ2‡¼ä•nbÇšàÙÏ »ØñL–¥¬švdÕ<ž€[h3›½ß‚Hš¦Žë9ž‡›c¥éŸ…9Þê¹®ë€oB¾ 5o@Ð~Gø`°¹U_Ã8nW\;ßص™f'a=ÏXÏD®hÉ›šf¼q{;~/˜Þ,-Ïkß6\ä=¾ ¶´`¾¾Ÿöý¤:Ãj>z\;H¾0¾ãR-d˜óœÉÌLbi1%“cZ×ÅÑ6r¬·`|Ý|ÇjÞ€Ö·ÓzÇ(&Û ¾Ÿ°O´érA¨¦9¬{!ÕÒz\·ŸÞñ$ãjpEíçÌ%A¡]¥÷±‡äLÔÑïÞö7Êä”»t¾HYAíÈ‹_º³P†v“( ®œÀÛI†qš^:AÏ­Ù x[ õV®†o•2€‚9¤Ý~‘Ôlä>WF>­¶ƒ|k¡qIU.*¬e ¹^Û ¾Ö7ª«œž'©µÑàJ·½¨@3Ü— ñÇ%¹D eEɨˆ¯¤ï} ¢çßñ•ô JñÂAr 1.íšc¡µòmãM/વ/ÆÁFÛŠ>šy8›5ôÆôU~Zçmð[ËFèv{ù6œ!.!ñ,°á¸Jã$#J%`µitg$:ç2úo'#iÇæA¬Ž-½G†ï°ÅogóÆÔ€÷56’ÌÜ[dÑ;R;!û£ŽÉM²ðdî¨ãëdønjïÑqb{]G³j·sK?R$y}Õ¢Û©Åä#dÞǪ?þPõÿ ßMí5r²×^×ñî^‹‡Y8×·ek/¹¦Œj:]ƒ®Úh8 ÷™ÿúþcÕS,²lþŸTÏ#B@Ÿädk5š,›C·RR½%œš¦ÑùÝÉ™g`s*NA»°ŠwmÏÍÞe¥0ƒœ´(ŠŸ†dÔw *tÁ'ãÂégßçæœ$·p†ìÛ·üâô/è/–Ö7ZStu5äJnëR2ÞߪÖ$éÙ-«­“¼¹%à±€¾øö£Àcø3z¡§n~ä¯©Þ )5úXEß{ÌÉßkH|þ0óÓ¾àÉ×h%Ÿù¼‚n|,³ÄÈO<;‰€-ôÝ–,F˜@Ÿæ'q4ƒ‡0Š‚áÀ&A”¦3󯱇 ËŒÝ*¾á$OЀèÆïºÆ Q‡õ{lŒ:œ—@b\ŸAû‰Å3ÜÏ,œæÑ‰ÐËYý+ži¸EýÉ86@²ªÀ)†VhGõVqÓ† Û$‡ÿWL™®þùí¹î calamares-3.2.20/io.calamares.calamares.appdata.xml000066400000000000000000000022371362604102500221510ustar00rootroot00000000000000 io.calamares.calamares.desktop CC0-1.0 GPL-3.0+ Calamares Calamares Calamares Calamares Calamares Linux Installer Calamares Linux Installer Linux Installatieprogramma Calamares

Calamares is an installer program for Linux distributions.

Calamares is een installatieprogramma voor Linux distributies.

https://calamares.io https://https://github.com/calamares/calamares/issues/ https://github.com/calamares/calamares/wiki Calamares Welcome https://calamares.io/images/cal_640.png calamares
calamares-3.2.20/lang/000077500000000000000000000000001362604102500144465ustar00rootroot00000000000000calamares-3.2.20/lang/CMakeLists.txt000066400000000000000000000016511362604102500172110ustar00rootroot00000000000000# === This file is part of Calamares - === # # Calamares 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. # # Calamares 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 Calamares. If not, see . # # SPDX-License-Identifier: GPL-3.0+ # License-Filename: LICENSE # ### find_package(Qt5 COMPONENTS Xml) if( Qt5Xml_FOUND ) add_executable(txload txload.cpp) target_link_libraries(txload Qt5::Xml) endif() calamares-3.2.20/lang/calamares_ar.ts000066400000000000000000005162451362604102500174450ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. <strong>بيئة الإقلاع</strong> لهذا النّظام.<br><br> يدعم Ùقط أنظمة x86 القديمة <strong>BIOS</strong>.<br>غالبًا ما تستخدم الأنظمة الجديدة <strong>EFI</strong>ØŒ ولكن ما زال بإمكانك إظهاره ك†BIOS إن بدأته بوضع التّواÙقيّة. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. بدأ هذا النّظام ببيئة إقلاع <strong>EFI</strong>.<br><br>لضبط البدء من بيئة EFIØŒ يجب على المثبّت وضع تطبيق محمّل إقلاع، مثل <strong>GRUB</strong> أو <strong>systemd-boot</strong> على <strong>قسم نظام EFI</strong>. هذا الأمر آليّ، إلّا إن اخترت التّقسيم يدويًّا، حيث عليك اخيتاره أو إنشاؤه Ø¨Ù†ÙØ³Ùƒ. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. بدأ هذا النّظام ببيئة إقلاع <strong>BIOS</strong>.<br><br>لضبط البدء من بيئة BIOSØŒ يجب على المثبّت وضع تطبيق محمّل إقلاع، مثل <strong>GRUB</strong>ØŒ إمّا ÙÙŠ بداية قسم أو ÙÙŠ <strong>قطاع الإقلاع الرّئيس</strong> قرب بداية جدول التّقسيم (محبّذ). هذا الأمر آليّ، إلّا إن اخترت التّقسيم يدويًّا، حيث عليك اخيتاره أو إنشاؤه Ø¨Ù†ÙØ³Ùƒ. BootLoaderModel Master Boot Record of %1 قطاع الإقلاع الرئيسي Ù„ %1 Boot Partition قسم الإقلاع System Partition قسم النظام Do not install a boot loader لا تثبّت محمّل إقلاع %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page Calamares::DebugWindow Form نموذج GlobalStorage التّخزين العموميّ JobQueue صÙÙ‘ المهامّ Modules الوحدات Type: النوع: none لاشيء Interface: الواجهة: Tools الأدوات Reload Stylesheet إعادة تحميل ورقة الأنماط Widget Tree Debug information معلومات التّنقيح Calamares::ExecutionViewStep Set up Install ثبت Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done انتهى Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 يشغّل الأمر %1 %2 Calamares::PythonJob Running %1 operation. يشغّل عمليّة %1. Bad working directory path مسار سيء لمجلد العمل Working directory %1 for python job %2 is not readable. لا يمكن القراءة من مجلد العمل %1 الخاص بعملية بايثون %2. Bad main script file ملÙÙ‘ السّكربت الرّئيس سيّء. Main script file %1 for python job %2 is not readable. ملÙÙ‘ السّكربت الرّئيس %1 لمهمّة بايثون %2 لا يمكن قراءته. Boost.Python error in job "%1". خطأ Boost.Python ÙÙŠ العمل "%1". Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager &Back &رجوع &Next &التالي &Cancel &إلغاء Cancel setup without changing the system. Cancel installation without changing the system. الغاء الـ تثبيت من دون احداث تغيير ÙÙŠ النظام Setup Failed Would you like to paste the install log to the web? Install Log Paste URL The upload was unsuccessful. No web-paste was done. Calamares Initialization Failed %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. <br/>The following modules could not be loaded: Continue with installation? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Set up &Install &ثبت Setup is complete. Close the setup program. اكتمل الإعداد. أغلق برنامج الإعداد. Cancel setup? إلغاء الإعداد؟ Cancel installation? إلغاء التثبيت؟ Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. هل تريد حقًا إلغاء عملية الإعداد الحالية؟ سيتم إنهاء برنامج الإعداد وسيتم Ùقد جميع التغييرات. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. أتريد إلغاء عمليّة التّثبيت الحاليّة؟ سيخرج المثبّت وتضيع كلّ التّغييرات. &Yes &نعم &No &لا &Close &اغلاق Continue with setup? الإستمرار ÙÙŠ التثبيت؟ The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> مثبّت %1 على وشك بإجراء تعديلات على قرصك لتثبيت %2.<br/><strong>لن تستطيع التّراجع عن هذا.</strong> &Install now &ثبت الأن Go &back &إرجع &Done The installation is complete. Close the installer. اكتمل التثبيت , اغلق Ø§Ù„Ù…Ø«Ø¨ÙØª Error خطأ Installation Failed ÙØ´Ù„ التثبيت CalamaresPython::Helper Unknown exception type نوع الاستثناء غير معرو٠unparseable Python error خطأ بايثون لا يمكن تحليله unparseable Python traceback تتبّع بايثون خلÙيّ لا يمكن تحليله Unfetchable Python error. خطأ لا يمكن الحصول علية ÙÙŠ بايثون. CalamaresUtils Install log posted to: %1 CalamaresWindow %1 Setup Program %1 Installer %1 المثبت Show debug information أظهر معلومات التّنقيح CheckerContainer Gathering system information... يجمع معلومات النّظام... ChoicePage Form نموذج After: بعد: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>تقسيم يدويّ</strong><br/>يمكنك إنشاء أو تغيير حجم الأقسام Ø¨Ù†ÙØ³Ùƒ. Boot loader location: مكان محمّل الإقلاع: Select storage de&vice: اختر &جهاز التّخزين: Current: الحاليّ: Reuse %1 as home partition for %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>اختر قسمًا لتقليصه، ثمّ اسحب الشّريط السّÙليّ لتغيير حجمه </strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. <strong>Select a partition to install on</strong> <strong>اختر القسم حيث سيكون التّثبيت عليه</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. تعذّر إيجاد قسم النّظام EFI ÙÙŠ أيّ مكان. ÙØ¶Ù„ًا ارجع واستخدم التّقسيم اليدويّ لإعداد %1. The EFI system partition at %1 will be used for starting %2. قسم النّظام EFI على %1 Ø³ÙŠÙØ³ØªØ®Ø¯Ù… لبدء %2. EFI system partition: قسم نظام EFI: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. لا يبدو أن ÙÙŠ جهاز التّخزين أيّ نظام تشغيل. ما الذي تودّ ÙØ¹Ù„ه؟<br/>يمكنك مراجعة الاختيارات وتأكيدها قبل تطبيقها على جهاز التّخزين. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>مسح القرص</strong><br/>هذا س<font color="red">يمسح</font> كلّ البيانات الموجودة ÙÙŠ جهاز التّخزين المحدّد. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. على جهاز التّخزين %1. ما الذي تودّ ÙØ¹Ù„ه؟<br/>يمكنك مراجعة الاختيارات وتأكيدها قبل تطبيقها على جهاز التّخزين. No Swap Reuse Swap Swap (no Hibernate) Swap (with Hibernate) Swap to file <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>ثبّت جنبًا إلى جنب</strong><br/>سيقلّص المثبّت قسمًا Ù„ØªÙØ±ÙŠØº مساحة لن%1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>استبدل قسمًا</strong><br/>يستبدل قسمًا مع %1 . This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. على جهاز التّخزين هذا نظام تشغيل ذأصلًا. ما الذي تودّ ÙØ¹Ù„ه؟<br/>يمكنك مراجعة الاختيارات وتأكيدها قبل تطبيقها على جهاز التّخزين. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. على جهاز التّخزين هذا عدّة أنظمة تشغيل. ما الذي تودّ ÙØ¹Ù„ه؟<br/>يمكنك مراجعة الاختيارات وتأكيدها قبل تطبيقها على جهاز التّخزين. ClearMountsJob Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 ClearTempMountsJob Clear all temporary mounts. Clearing all temporary mounts. Cannot get list of temporary mounts. Cleared all temporary mounts. CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition أنشئ قسمًا MiB Partition &Type: &نوع القسم: &Primary Ø£&ساسيّ E&xtended ممت&دّ Fi&le System: نظام المل&Ùّات: LVM LV name Flags: الشّارات: &Mount Point: نقطة ال&ضّمّ: Si&ze: الح&جم: En&crypt تشÙير Logical منطقيّ Primary أساسيّ GPT GPT Mountpoint already in use. Please select another one. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. ينشئ قسم %1 جديد على %2. The installer failed to create partition on disk '%1'. ÙØ´Ù„ المثبّت ÙÙŠ إنشاء قسم على القرص '%1'. CreatePartitionTableDialog Create Partition Table أنشئ جدول تقسيم Creating a new partition table will delete all existing data on the disk. إنشاء جدول تقسيم جددي سيحذ٠كلّ البيانات على القرص. What kind of partition table do you want to create? ما نوع جدول التّقسيم الذي تريد إنشاءه؟ Master Boot Record (MBR) قطاع إقلاع رئيس (MBR) GUID Partition Table (GPT) جدول أقسام GUID â€(GPT) CreatePartitionTableJob Create new %1 partition table on %2. أنشئ جدول تقسيم %1 جديد على %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). أنشئ جدول تقسيم <strong>%1</strong> جديد على <strong>%2</strong> (%3). Creating new %1 partition table on %2. ينشئ جدول التّقسيم %1 الجديد على %2. The installer failed to create a partition table on %1. ÙØ´Ù„ المثبّت ÙÙŠ إنشاء جدول تقسيم على %1. CreateUserJob Create user %1 أنشئ المستخدم %1 Create user <strong>%1</strong>. أنشئ المستخدم <strong>%1</strong>. Creating user %1. ينشئ المستخدم %1. Sudoers dir is not writable. دليل Sudoers لا يمكن الكتابة Ùيه. Cannot create sudoers file for writing. تعذّر إنشاء ملÙÙ‘ sudoers للكتابة. Cannot chmod sudoers file. تعذّر تغيير صلاحيّات ملÙÙ‘ sudores. Cannot open groups file for reading. تعذّر ÙØªØ­ ملÙÙ‘ groups للقراءة. CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. احذ٠القسم %1 Delete partition <strong>%1</strong>. احذ٠القسم <strong>%1</strong>. Deleting partition %1. يحذ٠القسم %1 . The installer failed to delete partition %1. ÙØ´Ù„ المثبّت ÙÙŠ حذ٠القسم %1. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. نوع <strong>جدول التّقسيم</strong> على جهاز التّخزين المحدّد.<br><br>الطّريقة الوحيدة لتغيير النّوع هو بحذÙÙ‡ وإعادة إنشاء جدول التّقسيم من Ø§Ù„ØµÙ‘ÙØ±ØŒ ممّا سيؤدّي إلى تدمير كلّ البيانات ÙÙŠ جهاز التّخزين.<br>سيبقي هذا المثبّت جدول التّقسيم الحاليّ كما هو إلّا إن لم ترد ذلك.<br>إن لم تكن متأكّدًا، Ù†GPT مستحسن للأنظمة الحديثة. This device has a <strong>%1</strong> partition table. للجهاز جدول تقسيم <strong>%1</strong>. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. <strong>تعذّر اكتشا٠جدول تقسيم</strong> على جهاز التّخزين المحدّد.<br><br>إمّا أن لا جدول تقسيم ÙÙŠ الجهاز، أو أنه معطوب أو نوعه مجهول.<br>يمكن لهذا المثبّت إنشاء جدول تقسيم جديد، آليًّا Ø£, عبر ØµÙØ­Ø© التّقسيم اليدويّ. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>هذا هو نوع جدول التّقسيم المستحسن للأنظمة الحديثة والتي تبدأ ببيئة إقلاع <strong>EFI</strong>. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Failed to open %1 DummyCppJob Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition حرّر قسمًا موجودًا Content: المحتوى: &Keep Format هيّئ Warning: Formatting the partition will erase all existing data. تحذير: تهيئة القسم ستمسح بياناته كلّها. &Mount Point: نقطة ال&ضّمّ: Si&ze: الح&جم: MiB Fi&le System: نظام المل&Ùّات: Flags: الشّارات: Mountpoint already in use. Please select another one. EncryptWidget Form نموذج En&crypt system ع&مّ٠النّظام Passphrase عبارة المرور Confirm passphrase أكّد عبارة المرور Please enter the same passphrase in both boxes. FillGlobalStorageJob Set partition information اضبط معلومات القسم Install %1 on <strong>new</strong> %2 system partition. ثبّت %1 على قسم نظام %2 <strong>جديد</strong>. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. اضطب قسم %2 <strong>جديد</strong> بنقطة الضّمّ <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. ثبّت %2 على قسم النّظام %3 â€<strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. اضبط القسم %3 <strong>%1</strong> بنقطة الضّمّ <strong>%2</strong>. Install boot loader on <strong>%1</strong>. ثبّت محمّل الإقلاع على <strong>%1</strong>. Setting up mount points. يضبط نقاط الضّمّ. FinishedPage Form نموذج <Restart checkbox tooltip> &Restart now Ø£&عد التّشغيل الآن <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>انتهينا.</h1><br/>لقد Ø«ÙØ¨Ù‘ت %1 على حاسوبك.<br/>يمكنك إعادة التّشغيل ÙˆÙØªØ­ النّظام الجديد، أو متابعة استخدام بيئة %2 الحيّة. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. FinishedViewStep Finish أنه٠Setup Complete Installation Complete The setup of %1 is complete. The installation of %1 is complete. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatting partition %1 with file system %2. يهيّء القسم %1 بنظام الملÙّات %2. The installer failed to format partition %1 on disk '%2'. ÙØ´Ù„ المثبّت ÙÙŠ تهيئة القسم %1 على القرص '%2'. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source موصول بمصدر للطّاقة The system is not plugged in to a power source. النّظام ليس متّصلًا بمصدر للطّاقة. is connected to the Internet موصول بالإنترنت The system is not connected to the Internet. النّظام ليس موصولًا بالإنترنت is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. المثبّت لا يعمل بصلاحيّات المدير. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed كونسول غير مثبّت Please install KDE Konsole and try again! Executing script: &nbsp;<code>%1</code> ينÙّذ السّكربت: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script سكربت KeyboardPage Set keyboard model to %1.<br/> اضبط طراز لوحة Ø§Ù„Ù…ÙØªØ§ØªÙŠØ­ ليكون %1.<br/> Set keyboard layout to %1/%2. اضبط تخطيط لوحة Ø§Ù„Ù…ÙØ§ØªÙŠØ­ إلى %1/%2. KeyboardViewStep Keyboard لوحة Ø§Ù„Ù…ÙØ§ØªÙŠØ­ LCLocaleDialog System locale setting إعداد محليّة النّظام The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. إعداد محليّة النّظام يؤثّر على لغة بعض عناصر واجهة مستخدم سطر الأوامر وأطقم محارÙها.<br/>الإعداد الحاليّ هو <strong>%1</strong>. &Cancel &إلغاء &OK LicensePage Form نموذج <h1>License Agreement</h1> I accept the terms and conditions above. أقبل الشّروط والأحكام أعلاه. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License الرّخصة LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>مشغّل %1</strong><br/>من%2 <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>مشغّل %1 للرّسوميّات</strong><br/><font color="Grey">من %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>ملحقة %1 Ù„Ù„Ù…ØªØµÙ‘ÙØ­</strong><br/><font color="Grey">من %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>مرماز %1</strong><br/><font color="Grey">من %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>حزمة %1</strong><br/><font color="Grey">من %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">من %2</font> File: %1 Show the license text Open license agreement in browser. Hide license text LocalePage The system language will be set to %1. The numbers and dates locale will be set to %1. Region: المنطقة: Zone: المجال: &Change... &غيّر... Set timezone to %1/%2.<br/> اضبط المنطقة الزّمنيّة إلى %1/%2.<br/> LocaleViewStep Location الموقع LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. توليد معر٠الجهاز Configuration Error خطأ ÙÙŠ الضبط No root mount point is set for MachineId. NetInstallPage Name الاسم Description الوص٠Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Incorrect configuration) NetInstallViewStep Package selection Office software Office package Browser software Browser package Web browser Kernel Services Login Desktop Applications NotesQmlViewStep Notes OEMPage Ba&tch: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> OEMViewStep OEM Configuration Set the OEM Batch Identifier to <code>%1</code>. PWQ Password is too short Password is too long Password is too weak Memory allocation error when setting '%1' Memory allocation error The password is the same as the old one The password is a palindrome The password differs with case changes only The password is too similar to the old one The password contains the user name in some form The password contains words from the real name of the user in some form The password contains forbidden words in some form The password contains less than %1 digits The password contains too few digits The password contains less than %1 uppercase letters The password contains too few uppercase letters The password contains less than %1 lowercase letters The password contains too few lowercase letters The password contains less than %1 non-alphanumeric characters The password contains too few non-alphanumeric characters The password is shorter than %1 characters The password is too short The password is just rotated old one The password contains less than %1 character classes The password does not contain enough character classes The password contains more than %1 same characters consecutively The password contains too many same characters consecutively The password contains more than %1 characters of the same class consecutively The password contains too many characters of the same class consecutively The password contains monotonic sequence longer than %1 characters The password contains too long of a monotonic character sequence No password supplied Cannot obtain random numbers from the RNG device Password generation failed - required entropy too low for settings The password fails the dictionary check - %1 The password fails the dictionary check Unknown setting - %1 Unknown setting Bad integer value of setting - %1 Bad integer value Setting %1 is not of integer type Setting is not of integer type Setting %1 is not of string type Setting is not of string type Opening the configuration file failed The configuration file is malformed Fatal failure Unknown error Password is empty PackageChooserPage Form نموذج Product Name TextLabel Long Product Description Package Selection Please pick a product from the list. The selected product will be installed. PackageChooserViewStep Packages Page_Keyboard Form نموذج Keyboard Model: طراز لوحة Ø§Ù„Ù…ÙØ§ØªÙŠØ­: Type here to test your keyboard اكتب هنا لتجرّب لوحة Ø§Ù„Ù…ÙØ§ØªÙŠØ­ Page_UserSetup Form نموذج What is your name? ما اسمك؟ What name do you want to use to log in? ما الاسم الذي تريده لتلج به؟ Choose a password to keep your account safe. اختر كلمة مرور لإبقاء حسابك آمنًا. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>أدخل ذات كلمة المرور مرّتين، للتأكّد من عدم وجود أخطاء طباعيّة. تتكوّن كلمة المرور الجيّدة من خليط أحر٠وأرقام وعلامات ترقيم، وطول لا يقلّ عن 8 محارÙ. كذلك يحبّذ تغييرها دوريًّا لزيادة الأمان.</small> What is the name of this computer? ما اسم هذا الحاسوب؟ Your Full Name login <small>This name will be used if you make the computer visible to others on a network.</small> <small>Ø³ÙŠÙØ³ØªØ®Ø¯Ù… الاسم لإظهار الحاسوب للآخرين عبر الشّبكة.</small> Computer Name Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Ù„ÙØ¬ آليًّا بدون طلب كلمة مرور. Use the same password for the administrator account. استخدم Ù†ÙØ³ كلمة المرور لحساب المدير. Choose a password for the administrator account. اختر كلمة مرور لحساب المدير. <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>أدخل ذات كلمة المرور مرّتين، للتّأكد من عدم وجود أخطاء طباعيّة.</small> PartitionLabelsView Root الجذر Home المنزل Boot الإقلاع EFI system نظام EFI Swap التّبديل New partition for %1 قسم جديد ل†%1 New partition قسم جديد %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space المساحة الحرّة New partition قسم جديد Name الاسم File System نظام الملÙّات Mount Point نقطة الضّمّ Size الحجم PartitionPage Form نموذج Storage de&vice: ج&هاز التّخزين: &Revert All Changes ا&عكس كلّ التّغييرات New Partition &Table &جدول تقسيم جديد Cre&ate &Edit Ø­&رّر &Delete ا&حذ٠New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group I&nstall boot loader on: Are you sure you want to create a new partition table on %1? أمتأكّد من إنشاء جدول تقسيم جديد على %1ØŸ Can not create new partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. PartitionViewStep Gathering system information... جاري جمع معلومات عن النظام... Partitions الأقسام Install %1 <strong>alongside</strong> another operating system. ثبّت %1 <strong>جنبًا إلى جنب</strong> مع نظام تشغيل آخر. <strong>Erase</strong> disk and install %1. <strong>امسح</strong> القرص وثبّت %1. <strong>Replace</strong> a partition with %1. <strong>استبدل</strong> قسمًا ب†%1. <strong>Manual</strong> partitioning. تقسيم <strong>يدويّ</strong>. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>امسح</strong> القرص <strong>%2</strong> (%3) وثبّت %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>استبدل</strong> قسمًا على القرص <strong>%2</strong> (%3) ب†%1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Current: الحاليّ: After: بعد: No EFI system partition configured لم ÙŠÙØ¶Ø¨Ø· أيّ قسم نظام EFI An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. EFI system partition flag not set راية قسم نظام EFI غير مضبوطة An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form نموذج Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: External command crashed. Command <i>%1</i> crashed. External command failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Bad parameters for process job call. معاملات نداء المهمة سيّئة. External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Command <i>%1</i> finished with exit code %2. QObject Default Keyboard Model نوع لوحة Ø§Ù„Ù…ÙØ§ØªÙŠØ­ Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠ Default Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠ unknown مجهول extended ممتدّ unformatted غير مهيّأ swap Unpartitioned space or unknown partition table مساحة غير مقسّمة أو جدول تقسيم مجهول (no mount point) Requirements checking for module <i>%1</i> is complete. %1 (%2) language[name] (country[name]) %1 (%2) No product No description provided. File not found Path <pre>%1</pre> must be an absolute path. Could not create new random file <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form نموذج Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. اختر مكان تثبيت %1.<br/><font color="red">تحذير: </font>سيحذ٠هذا كلّ الملÙّات ÙÙŠ القسم المحدّد. The selected item does not appear to be a valid partition. لا يبدو العنصر المحدّد قسمًا صالحًا. %1 cannot be installed on empty space. Please select an existing partition. لا يمكن تثبيت %1 ÙÙŠ مساحة ÙØ§Ø±ØºØ©. ÙØ¶Ù„ًا اختر قسمًا موجودًا. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. لا يمكن تثبيت %1 على قسم ممتدّ. ÙØ¶Ù„ًا اختر قسمًا أساسيًّا أو ثانويًّا. %1 cannot be installed on this partition. لا يمكن تثبيت %1 على هذا القسم. Data partition (%1) قسم البيانات (%1) Unknown system partition (%1) قسم نظام مجهول (%1) %1 system partition (%2) قسم نظام %1 â€(%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>القسم %1 صغير جدًّا ل†%2. ÙØ¶Ù„ًا اختر قسمًا بحجم %3 غ.بايت على الأقلّ. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/>تعذّر إيجاد قسم النّظام EFI ÙÙŠ أيّ مكان. ÙØ¶Ù„ًا ارجع واستخدم التّقسيم اليدويّ لإعداد %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>Ø³ÙŠÙØ«Ø¨Ù‘ت %1 على %2.<br/><font color="red">تحذير: </font>ستÙقد كلّ البيانات على القسم %2. The EFI system partition at %1 will be used for starting %2. Ø³ÙŠÙØ³ØªØ®Ø¯Ù… قسم نظام EFI على %1 لبدء %2. EFI system partition: قسم نظام EFI: ResizeFSJob Resize Filesystem Job Invalid configuration The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. غيّر حجم القسم %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. ÙØ´Ù„ المثبّت ÙÙŠ تغيير حجم القسم %1 على القرص '%2'. ResizeVolumeGroupDialog Resize Volume Group ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: Ù„Ø£ÙØ¶Ù„ النّتائج، تحقّق من أن الحاسوب: System requirements متطلّبات النّظام ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> لا يستوÙ٠هذا الحاسوب أدنى متطلّبات تثبيت %1.<br/>لا يمكن متابعة التّثبيت. <a href="#details">Ø§Ù„ØªÙ‘ÙØ§ØµÙŠÙ„...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. لا يستوÙ٠هذا الحاسوب بعض المتطلّبات المستحسنة لتثبيت %1.<br/>يمكن للمثبّت المتابعة، ولكن قد تكون بعض الميزات معطّلة. This program will ask you some questions and set up %2 on your computer. سيطرح البرنامج بعض الأسئلة عليك ويعدّ %2 على حاسوبك. ScanningDialog Scanning storage devices... ÙŠÙØ­Øµ أجهزة التّخزين... Partitioning يقسّم SetHostNameJob Set hostname %1 اضبط اسم المضي٠%1 Set hostname <strong>%1</strong>. اضبط اسم المضي٠<strong>%1</strong> . Setting hostname %1. يضبط اسم المضي٠1%. Internal Error خطأ داخلي Cannot write hostname to target system تعذّرت كتابة اسم المضي٠إلى النّظام الهد٠SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 اضبك طراز لوحة Ø§Ù„Ù…ÙØªØ§ÙŠØ­ إلى %1ØŒ والتّخطيط إلى %2-%3 Failed to write keyboard configuration for the virtual console. ÙØ´Ù„ت كتابة ضبط لوحة Ø§Ù„Ù…ÙØ§ØªÙŠØ­ للطرÙيّة الوهميّة. Failed to write to %1 ÙØ´Ù„ت الكتابة إلى %1 Failed to write keyboard configuration for X11. ÙØ´Ù„ت كتابة ضبط لوحة Ø§Ù„Ù…ÙØ§ØªÙŠØ­ ل†X11. Failed to write keyboard configuration to existing /etc/default directory. SetPartFlagsJob Set flags on partition %1. اضبط رايات القسم %1. Set flags on %1MiB %2 partition. Set flags on new partition. Clear flags on partition <strong>%1</strong>. يمحي رايات القسم <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag new partition as <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. يمحي رايات القسم <strong>%1</strong>. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. يضبط رايات <strong>%2</strong> القسم<strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. ÙØ´Ù„ المثبّت ÙÙŠ ضبط رايات القسم %1. SetPasswordJob Set password for user %1 اضبط كلمة مرور للمستخدم %1 Setting password for user %1. يضبط كلمة مرور للمستخدم %1. Bad destination system path. مسار النّظام المقصد سيّء. rootMountPoint is %1 rootMountPoint هو %1 Cannot disable root account. passwd terminated with error code %1. Cannot set password for user %1. تعذّر ضبط كلمة مرور للمستخدم %1. usermod terminated with error code %1. Ø£Ùنهي usermod برمز الخطأ %1. SetTimezoneJob Set timezone to %1/%2 اضبط المنطقة الزّمنيّة إلى %1/%2 Cannot access selected timezone path. لا يمكن الدخول إلى مسار المنطقة الزمنية المختارة. Bad path: %1 المسار سيّء: %1 Cannot set timezone. لا يمكن تعيين المنطقة الزمنية. Link creation failed, target: %1; link name: %2 ÙØ´Ù„ إنشاء الوصلة، الهدÙ: %1ØŒ اسم الوصلة: %2 Cannot set timezone, تعذّر ضبط المنطقة الزّمنيّة، Cannot open /etc/timezone for writing تعذّر ÙØªØ­ ‎/etc/timezone للكتابة ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) SummaryPage This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. هذه نظرة عامّة عمّا سيحصل ما إن تبدأ عمليّة التّثبيت. SummaryViewStep Summary الخلاصة TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingMachineNeonJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form نموذج Placeholder <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. TrackingViewStep Feedback UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> Your username is too long. اسم المستخدم طويل جدًّا. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Only letters, numbers, underscore and hyphen are allowed. Your hostname is too short. اسم المضي٠قصير جدًّا. Your hostname is too long. اسم المضي٠طويل جدًّا. Your passwords do not match! لا يوجد تطابق ÙÙŠ كلمات السر! UsersViewStep Users المستخدمين VariantModel Key Value القيمة VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB Total Size: Used Size: Total Sectors: Quantity of LVs: WelcomePage Form الصيغة Select application and system language Open donations website &Donate Open help and support website Open issues and bug-tracking website Open release notes website &Release notes &ملاحظات الإصدار &Known issues &مشاكل Ù…Ø¹Ø±ÙˆÙØ© &Support &الدعم &About &حول <h1>Welcome to the %1 installer.</h1> <h1>مرحبًا بك ÙÙŠ مثبّت %1.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Welcome to %1 setup.</h1> About %1 setup About %1 installer حول 1% المثبت <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support %1 الدعم WelcomeQmlViewStep Welcome مرحبا بك WelcomeViewStep Welcome مرحبا بك notesqml <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> About Support Known issues Release notes Donate calamares-3.2.20/lang/calamares_as.ts000066400000000000000000006555161362604102500174530ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. à¦à¦‡à¦Ÿà§‹ চিছটেমৰ <strong>বà§à¦Ÿ পৰিবেশ</strong>।<br><br>পà§à§°à¦£à¦¿ x86 চিছটেমবোৰে কেৱল <strong>BIOSক</strong>সমৰà§à¦¥à¦¨ কৰে।<br>আধà§à¦¨à¦¿à¦• চিছটেমে সাধাৰণতে<strong>EFI</strong> বà§à¦¯à§±à¦¹à¦¾à§° কৰে, কিনà§à¦¤à§ সামঞà§à¦œà¦¸à§à¦¯à¦¤à¦¾ মোডত আৰমà§à¦­ হ'লে BIOS দেখাব পাৰে। This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. চিছটেমটো <strong>EFI</strong> বà§à¦Ÿ পৰিবেশত আৰমà§à¦­ হৈছিল।<br><br>EFI পৰিবেশৰ পৰা সà§à¦Ÿà¦¾à§°à§à¦¤à¦†à¦ª কনà§à¦«à¦¿à¦—াৰ কৰিবলৈ ইনসà§à¦¤à¦²à¦¾à§°à¦Ÿà§‹à§±à§‡ <strong>GRUBà§°</strong> দৰে বà§à¦Ÿ লোডাৰ বা à¦à¦–ন <strong>EFI চিছà§à¦Ÿà§‡à¦® বিভাজনত</strong> <strong>systemd-boot</strong> পà§à§°à§Ÿà§‹à¦— কৰিব লাগিব। à¦à¦‡à¦Ÿà§‹ পà§à§°à¦•à§à§°à¦¿à¦¯à¦¾ সà§à¦¬à¦¤: সà§à¦«à§à§°à§à¦¤ ভাবে হ'ব যদিহে আপà§à¦¨à¦¿ নিজে মেনà§à§±à§‡à¦² বিভজন চয়ন নকৰে, য'ত আপà§à¦¨à¦¿ নিজে à¦à¦–ন EFI বিভাজন বনাব লাগিব। This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. চিছটেমটো <strong>BIOS</strong> বà§à¦Ÿ পৰিবেশত আৰমà§à¦­ হৈছিল।<br><br>BIOS পৰিবেশ à¦à¦Ÿà¦¾à§° পৰা সà§à¦Ÿà¦¾à§°à§à¦¤à¦†à¦ª কনà§à¦«à¦¿à¦—াৰ কৰিবলৈ ইনসà§à¦¤à¦²à¦¾à§°à¦Ÿà§‹à§±à§‡ <strong>GRUBà§°</strong> দৰে বà§à¦Ÿ লোডাৰ ইনসà§à¦¤à¦²â€‹ কৰিব লাগিব বিভাজনৰ আৰমà§à¦­à¦¨à¦¿à¦¤à§‡ বা বিভাজন তালিকাৰ আৰমà§à¦­à¦¨à¦¿à§° কাষৰ <strong>পà§à§°à¦§à¦¾à¦¨ বà§à¦¤à§ নথিত</strong> (অগà§à§°à¦¾à¦§à¦¿à¦•াৰ ভিতà§à¦¤à¦¿à¦¤)। à¦à¦‡à¦Ÿà§‹ পà§à§°à¦•à§à§°à¦¿à¦¯à¦¾ সà§à¦¬à¦¤: সà§à¦«à§à§°à§à¦¤ ভাবে হ'ব যদিহে আপà§à¦¨à¦¿ নিজে মেনà§à§±à§‡à¦² বিভজন চয়ন নকৰে, য'ত আপà§à¦¨à¦¿ নিজে বà§à¦¤à§ লোডাৰ চেতৠআপ কৰিব লাগিব। BootLoaderModel Master Boot Record of %1 %1à§° পà§à§°à¦§à¦¾à¦¨ বà§à¦¤à§ নথি Boot Partition বà§à¦¤à§ বিভাজন System Partition চিছà§à¦¤à§‡à¦® বিভাজন Do not install a boot loader বà§à¦¤à§ লোডাৰ ইনসà§à¦¤à¦² কৰিব নালাগে %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page খালি পৃষà§à¦ à¦¾ Calamares::DebugWindow Form ৰূপ GlobalStorage গোলকীয় সà§à¦Ÿà§‹à§°à§‡à¦œ JobQueue কারà§à¦¯à§à¦¯ লানি Modules মডিউলবোৰ Type: পà§à§°à¦•াৰ: none à¦à¦•à§‹ নাই Interface: ইনà§à¦Ÿà¦¾à§°à¦«à§‡à¦š: Tools সà¦à¦œà§à¦²à¦¿ Reload Stylesheet সà§à¦Ÿà¦¾à¦‡à¦²à¦›à§€à¦Ÿ পà§à¦¨à§° লোডৠকৰক Widget Tree ৱিজেতৠতà§à§°à¦¿ Debug information ডিবাগ তথà§à¦¯ Calamares::ExecutionViewStep Set up চেতৠআপ Install ইনসà§à¦¤à¦² Calamares::FailJob Job failed (%1) কারà§à¦¯à§à¦¯ বিফল হল (%1) Programmed job failure was explicitly requested. পà§à§°à¦—à§à§°à§‡à¦® কৰা কাৰà§à¦¯à§à¦¯à§° বিফলতা সà§à¦ªà¦·à§à¦Ÿà¦­à¦¾à¦¬à§‡ অনà§à§°à§‹à¦§ কৰা হৈছিল। Calamares::JobThread Done হৈ গ'ল Calamares::NamedJob Example job (%1) উদাহৰণ কারà§à¦¯à§à¦¯ (%1) Calamares::ProcessJob Run command '%1' in target system. গনà§à¦¤à¦¬à§à¦¯ চিছটেমত '%1' কমাণà§à¦¡ চলাওক। Run command '%1'. '%1' কমাণà§à¦¡ চলাওক। Running command %1 %2 %1%2 কমাণà§à¦¡ চলি আছে Calamares::PythonJob Running %1 operation. %1 কাৰà§à¦¯ চলি আছে। Bad working directory path বেয়া কৰà§à¦®à§°à¦¤ ডাইৰেকà§à¦Ÿà§°à§€ পথ Working directory %1 for python job %2 is not readable. %2 পাইথন কাৰà§à¦¯à§à¦¯à§° %1 কৰà§à¦®à§°à¦¤ ডাইৰেকà§à¦Ÿà§°à§€ পঢ়িব নোৱাৰি।​ Bad main script file বেয়া মà§à¦–à§à¦¯ লিপি ফাইল Main script file %1 for python job %2 is not readable. %2 পাইথন কাৰà§à¦¯à§à¦¯à§° %1 মূখà§à¦¯ লিপি ফাইল পঢ়িব নোৱাৰি। Boost.Python error in job "%1". "%1" কাৰà§à¦¯à§à¦¯à¦¤ Boost.Python তà§à§°à§à¦Ÿà¦¿à¥¤ Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Waiting for %n module(s). Waiting for %n module(s). %n মডিউল(বোৰ)à§° বাবে অপেকà§à¦·à¦¾à§°à¦¤à¥¤ (%n second(s)) (%n second(s)) (%n ছেকেণà§à¦¡) System-requirements checking is complete. চিছà§à¦¤à§‡à¦®à§° বাবে পà§à¦°à¦¯à¦¼à§‹à¦œà¦¨à§€à¦¯à¦¼ পৰীকà§à¦·à¦£ সমà§à¦ªà§‚রà§à¦£ হ'ল। Calamares::ViewManager &Back পাছলৈ (&B) &Next পৰবরà§à¦¤à§€ (&N) &Cancel বাতিল কৰক (&C) Cancel setup without changing the system. চিছà§à¦¤à§‡à¦® সলনি নকৰাকৈ চেতৠআপ বাতিল কৰক। Cancel installation without changing the system. চিছà§à¦¤à§‡à¦® সলনি নকৰাকৈ ইনসà§à¦¤à¦²à§‡à¦šà¦¨ বাতিল কৰক। Setup Failed চেতৠআপ বিফল হ'ল Would you like to paste the install log to the web? আপà§à¦¨à¦¿ ৱেবত ইণà§à¦¸à§à¦Ÿà¦² ল'গ পেসà§à¦Ÿ কৰিব বিচাৰে নেকি? Install Log Paste URL ইনসà§à¦¤à¦²â€‹ ল'গ পেসà§à¦Ÿ URL The upload was unsuccessful. No web-paste was done. আপলোড বিফল হৈছিল। কোনো ৱেব-পেসà§à¦Ÿ কৰা হোৱা নাছিল। Calamares Initialization Failed কেলামাৰেচৰ আৰমà§à¦­à¦£à¦¿ বিফল হ'ল %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. %1 ইনসà§à¦¤à¦² কৰিব পৰা নগ'ল। কেলামাৰেচে সকলোবোৰ সংৰূপ দিয়া মডিউল লোডৠকৰাত সফল নহ'ল। à¦à¦‡à¦Ÿà§‹ à¦à¦Ÿà¦¾ আপোনাৰ ডিষà§à¦Ÿà§à§°à¦¿à¦¬à¦¿à¦‰à¦šà¦¨à§‡ কি ধৰণে কেলামাৰেচ বà§à¦¯à§±à¦¹à¦¾à§° কৰিছে, সেই সমà§à¦¬à¦¨à§à¦§à§€à§Ÿ সমসà§à¦¯à¦¾à¥¤ <br/>The following modules could not be loaded: <br/>নিমà§à¦¨à§‹à¦•à§à¦¤ মডিউলবোৰ লোডৠকৰিৱ পৰা নগ'ল: Continue with installation? ইনà§à¦¸à§à¦¤à¦²à§‡à¦šà¦¨ অবà§à¦¯à¦¾à¦¹à¦¤ ৰাখিব? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> %1 চেতৠআপ পà§à§°à¦—à§à§°à§‡à¦®à¦Ÿà§‹à§±à§‡ %2 চেতৠআপ কৰিবলৈ আপোনাৰ ডিসà§à¦•ত সালসলনি কৰিব।<br/><strong>আপà§à¦¨à¦¿ à¦à¦‡à¦¬à§‹à§° পিছত পূৰà§à¦¬à¦²à§ˆ সলনি কৰিব নোৱাৰিব।</strong> &Set up now à¦à¦¤à¦¿à¦¯à¦¼à¦¾ চেতৠআপ কৰক (&S) &Set up চেতৠআপ কৰক (&S) &Install ইনসà§à¦¤à¦² (&I) Setup is complete. Close the setup program. চেতৠআপ সমà§à¦ªà§‚à§°à§à¦£ হ'ল। পà§à§°à§‹à¦—à§à§°à§‡à¦® বনà§à¦§ কৰক। Cancel setup? চেতৠআপ বাতিল কৰিব? Cancel installation? ইনসà§à¦¤à¦²à§‡à¦›à¦¨ বাতিল কৰিব? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. সচাকৈয়ে চলিত চেতৠআপ পà§à§°à¦•à§à§°à¦¿à§Ÿà¦¾ বাতিল কৰিব বিচাৰে নেকি? চেতৠআপ পà§à§°à§‹à¦—à§à§°à§‡à¦® বনà§à¦§ হ'ব আৰৠগোটেই সলনিবোৰ নোহোৱা হৈ যাব। Do you really want to cancel the current install process? The installer will quit and all changes will be lost. সচাকৈয়ে চলিত ইনসà§à¦¤à¦² পà§à§°à¦•à§à§°à¦¿à§Ÿà¦¾ বাতিল কৰিব বিচাৰে নেকি? ইনসà§à¦¤à¦²à¦¾à§° বনà§à¦§ হ'ব আৰৠগোটেই সলনিবোৰ নোহোৱা হৈ যাব। &Yes হয় (&Y) &No নহয় (&N) &Close বনà§à¦§ (&C) Continue with setup? চেতৠআপ অবà§à¦¯à¦¾à¦¹à¦¤ ৰাখিব? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> %1 ইনসà§à¦¤à¦²à¦¾à§°à¦Ÿà§‹à§±à§‡ %2 ইনসà§à¦¤à¦² কৰিবলৈ আপোনাৰ ডিসà§à¦•ত সালসলনি কৰিব।<br/><strong>আপà§à¦¨à¦¿ à¦à¦‡à¦¬à§‹à§° পিছত পূৰà§à¦¬à¦²à§ˆ সলনি কৰিব নোৱাৰিব।</strong> &Install now à¦à¦¤à¦¿à¦¯à¦¼à¦¾ ইনসà§à¦¤à¦² কৰক (&I) Go &back উভতি যাওক (&b) &Done হৈ গ'ল (&D) The installation is complete. Close the installer. ইনসà§à¦¤à¦²à§‡à¦šà¦¨ সমà§à¦ªà§‚à§°à§à¦£ হ'ল। ইনà§à¦¸à§à¦¤à¦²à¦¾à§° বনà§à¦§ কৰক। Error তà§à§°à§à¦Ÿà¦¿ Installation Failed ইনসà§à¦¤à¦²à§‡à¦šà¦¨ বিফল হ'ল CalamaresPython::Helper Unknown exception type অপৰিচিত পà§à§°à¦•াৰৰ বà§à¦¯à¦¤à¦¿à¦•à§à¦°à¦® unparseable Python error অপà§à§°à¦¾à¦ªà§à¦¯ পাইথন তà§à§°à§à¦Ÿà¦¿ unparseable Python traceback অপà§à§°à¦¾à¦ªà§à¦¯ পাইথন তà§à§°à§‡à¦šà¦¬à§‡à¦• Unfetchable Python error. ঢà§à¦•ি নোপোৱা পাইথন কà§à§°à§à¦Ÿà¦¿à¥¤ CalamaresUtils Install log posted to: %1 ইনসà§à¦¤à¦²â€‹â€‹ ল'গ পোসà§à¦Ÿ কৰা হৈছে: %1 CalamaresWindow %1 Setup Program %1 চেতৠআপ পà§à§°à§‹à¦—à§à§°à§‡à¦® %1 Installer %1 ইনসà§à¦¤à¦²à¦¾à§° Show debug information দিবাগ তথà§à¦¯ দেখাওক CheckerContainer Gathering system information... চিছà§à¦¤à§‡à¦® তথà§à¦¯ সংগà§à§°à¦¹ কৰা হৈ আছে... ChoicePage Form ৰূপ After: পিছত: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>মেনà§à§±à§‡à¦² বিভাজন</strong><br/>আপà§à¦¨à¦¿ নিজে বিভাজন বনাব বা বিভজনৰ আয়তন সলনি কৰিব পাৰে। Boot loader location: বà§à¦¤à§ লোডাৰৰ অৱসà§à¦¥à¦¾à¦¨: Select storage de&vice: সà§à¦¤à§‹à§°à§‡à¦œ ডিভাইচ চয়ণ কৰক (&v): Current: বরà§à¦¤à¦®à¦¾à¦¨: Reuse %1 as home partition for %2. %1ক %2à§° গৃহ বিভাজন হিচাপে পà§à¦¨à§° বà§à¦¯à§±à¦¹à¦¾à§° কৰক। <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>আয়তন সলনি কৰিবলৈ বিভাজন বাচনি কৰক, তাৰ পিছত তলৰ "বাৰà§" ডালৰ সহায়ত আয়তন চেতৠকৰক</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 বিভজনক সৰৠকৰি %2MiB কৰা হ'ব আৰৠ%4à§° বাবে %3MiBà§° নতà§à¦¨ বিভজন বনোৱা হ'ব। <strong>Select a partition to install on</strong> <strong>ইনসà§à¦¤à¦²â€‹ কৰিবলৈ à¦à¦–ন বিভাজন চয়ন কৰক</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. à¦à¦‡ চিছটেমত à¦à¦–নো EFI চিছটেম বিভাজন কতো পোৱা নগ'ল। অনà§à¦—à§à§°à¦¹ কৰি উভতি যাওক আৰৠমেনà§à§±à§‡à¦² বিভাজন পà§à§°à¦•à§à§°à¦¿à§Ÿà¦¾ দà§à¦¬à¦¾à§°à¦¾ %1 চেতৠআপ কৰক। The EFI system partition at %1 will be used for starting %2. %1ত থকা EFI চিছটেম বিভাজনটো %2ক আৰমà§à¦­ কৰাৰ বাবে বà§à¦¯à§±à¦¹à¦¾à§° কৰা হ'ব। EFI system partition: EFI চিছটেম বিভাজন: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. à¦à¦‡à¦Ÿà§‹ ষà§à¦Ÿà§‹à§°à§‡à¦œ ডিভাইচত কোনো অপাৰেটিং চিছটেম নাই যেন লাগে। আপà§à¦¨à¦¿ কি কৰিব বিচাৰে?<br/>আপà§à¦¨à¦¿ ষà§à¦Ÿà§‹à§°à§‡à¦œ ডিভাইচটোত কিবা সলনি কৰাৰ আগতে পà§à¦¨à§°à§€à¦•à§à¦·à¦£ আৰৠচয়ন নিশà§à¦šà¦¿à¦¤ কৰিব পাৰিব। <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>ডিসà§à¦•ত থকা গোটেই ডাটা আতৰাওক।</strong><br/> ইয়াৰ দà§à§±à¦¾à§°à¦¾ ষà§à¦Ÿà§‹à§°à§‡à¦œ ডিভাইছত বৰà§à¦¤à¦®à¦¾à¦¨ থকা সকলো ডাটা <font color="red">বিলোপ</font> কৰা হ'ব। This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. à¦à¦‡à¦Ÿà§‹ ষà§à¦Ÿà§‹à§°à§‡à¦œ ডিভাইচত %1 আছে। <br/> আপà§à¦¨à¦¿ কি কৰিব বিচাৰে? ষà§à¦Ÿà§‹à§°à§‡à¦œ ডিভাইচটোত যিকোনো সলনি কৰাৰ আগত আপà§à¦¨à¦¿ পà§à¦¨à§°à§€à¦•à§à¦·à¦£ আৰৠসলনি কৰিব পাৰিব। No Swap কোনো সà§à§±à§‡à¦ª নাই Reuse Swap সà§à§±à§‡à¦ª পà§à¦¨à§° বà§à¦¯à§±à¦¹à¦¾à§° কৰক Swap (no Hibernate) সà§à§±à§‡à¦ª (হাইবাৰনেট নোহোৱাকৈ) Swap (with Hibernate) সà§à§±à§‡à¦¾à¦†à¦ª (হাইবাৰনেটৰ সৈতে) Swap to file ফাইললৈ সà§à§±à§‡à¦¾à¦†à¦ª কৰক। <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>সমানà§à¦¤à§°à¦¾à¦²à¦­à¦¾à§±à§‡ ইনসà§à¦¤à¦² কৰক</strong><br/> ইনসà§à¦¤à¦²à¦¾à§°à¦Ÿà§‹à§±à§‡ %1ক ইনসà§à¦¤à¦²â€‹ কৰাৰ বাবে à¦à¦–ন বিভাজন সৰৠকৰি দিব। <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>বিভাজন সলনি কৰক</strong> <br/>à¦à¦–ন বিভাজনক % ৰৠসৈতে সলনি কৰক। This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. à¦à¦‡à¦Ÿà§‹ ষà§à¦Ÿà§‹à§°à§‡à¦œ ডিভাইচত ইতিমধà§à¦¯à§‡ à¦à¦Ÿà¦¾ অপাৰেটিং চিছটেম আছে। আপà§à¦¨à¦¿ কি কৰিব বিচাৰে? <br/>ষà§à¦Ÿà§‹à§°à§‡à¦œ ডিভাইচটোত যিকোনো সলনি কৰাৰ আগত আপà§à¦¨à¦¿ পà§à¦¨à§°à§€à¦•à§à¦·à¦£ আৰৠসলনি কৰিব পাৰিব। This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. à¦à¦‡à¦Ÿà§‹ ষà§à¦Ÿà§‹à§°à§‡à¦œ ডিভাইচত à¦à¦•াধিক à¦à¦Ÿà¦¾ অপাৰেটিং চিছটেম আছে। আপà§à¦¨à¦¿ কি কৰিব বিচাৰে? 1ষà§à¦Ÿà§‹à§°à§‡à¦œ ডিভাইচটোত যিকোনো সলনি কৰাৰ আগত আপà§à¦¨à¦¿ পà§à¦¨à§°à§€à¦•à§à¦·à¦£ আৰৠসলনি কৰিব পাৰিব। ClearMountsJob Clear mounts for partitioning operations on %1 %1ত বিভাজন কৰà§à¦¯à§à¦¯à§° বাবে মাউণà§à¦Ÿà§ আতৰাওক Clearing mounts for partitioning operations on %1. %1ত বিভাজন কৰà§à¦¯à§à¦¯à§° বাবে মাউণà§à¦Ÿà§ আতৰ কৰি আছে। Cleared all mounts for %1 %1à§° গোটেই মাউনà§à¦¤ আতৰোৱা হ'ল ClearTempMountsJob Clear all temporary mounts. গোটেই অসà§à¦¥à¦¾à§Ÿà§€ মাউনà§à¦¤ আà¦à¦¤à§°à¦¾à¦“ক। Clearing all temporary mounts. গোটেই অসà§à¦¥à¦¾à§Ÿà§€ মাউনà§à¦¤ আà¦à¦¤à§°à§‹à§±à¦¾ হৈ আছে। Cannot get list of temporary mounts. অসà§à¦¥à¦¾à§Ÿà§€ মাউনà§à¦¤à§° সূচী পোৱা নগ'ল। Cleared all temporary mounts. গোটেই অসà§à¦¥à¦¾à§Ÿà§€ মাউনà§à¦¤ আà¦à¦¤à§°à§‹à§±à¦¾ হ'ল। CommandList Could not run command. কমাণà§à¦¡ চলাব পৰা নগ'ল। The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. কমাণà§à¦¡à¦Ÿà§‹ হ'সà§à¦Ÿ পৰিৱেশত চলে আৰৠতাৰ বাবে à§°à§à¦Ÿ পথ জানাটো আৱশà§à¦¯à¦•, কিনà§à¦¤à§ rootMountPointà§° বিষয়ে à¦à¦•à§‹ উলà§à¦²à§‡à¦– নাই। The command needs to know the user's name, but no username is defined. কমাণà§à¦¡à¦Ÿà§‹à§±à§‡ বà§à¦¯à§±à¦¹à¦¾à§°à¦•াৰীৰ নাম জনাটো আৱশà§à¦¯à¦•, কিনà§à¦¤à§ কোনো বà§à¦¯à§±à¦¹à¦¾à§°à¦•াৰীৰ নাম উলà§à¦²à§‡à¦– নাই। ContextualProcessJob Contextual Processes Job পà§à¦°à¦¾à¦¸à¦™à§à¦—িক পà§à§°à¦•à§à§°à¦¿à§Ÿà¦¾à¦¬à§‹à§°à§° কাৰà§à¦¯à§à¦¯ CreatePartitionDialog Create a Partition à¦à¦–ন বিভাজন বনাওক MiB MiB Partition &Type: বিভাজনৰ পà§à§°à¦•াৰ (&T): &Primary মà§à¦–à§à¦¯ (&P) E&xtended সমà§à¦ªà§à§°à¦¸à¦¾à§°à¦¿à¦¤ (&x) Fi&le System: ফাইল চিছà§à¦Ÿà§‡à¦® (&l): LVM LV name LVM LV নাম Flags: ফà§à¦²à§‡à¦— সমূহ: &Mount Point: মাউনà§à¦Ÿ পইনà§à¦Ÿ (&M): Si&ze: আয়তন (&z): En&crypt à¦à¦¨à¦•à§à§°à¦¿à¦ªà§à¦¤à§ (&c) Logical যà§à¦•à§à¦¤à¦¿à¦¸à¦®à§à¦®à¦¤ Primary মূখà§à¦¯ GPT GPT Mountpoint already in use. Please select another one. à¦à¦‡à¦Ÿà§‹ মাওনà§à¦Ÿà§ পইনà§à¦Ÿà§ ইতিমধà§à¦¯à§‡ বà§à¦¯à§±à¦¹à¦¾à§° হৈ আছে। অনà§à¦—à§à§°à¦¹ কৰি বেলেগ à¦à¦Ÿà¦¾ বাচনি কৰক। CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. %1 ফাইল চিছটেমৰ সৈতে %4 (%3) ত %2MiBà§° নতà§à¦¨ বিভাজন বনাওক। Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. <strong>%4</strong>ত নতà§à¦¨ (%3) <strong>%1</strong> ফাইল চিছটেমৰ <strong>%2MiB</strong> বিভাজন কৰক। Creating new %1 partition on %2. %2ত নতà§à¦¨ %1 বিভজন বনাই আছে। The installer failed to create partition on disk '%1'. '%1' ডিসà§à¦•ত নতà§à¦¨ বিভাজন বনোৱাত ইনসà§à¦¤à¦²à¦¾à§°à¦Ÿà§‹ বিফল হ'ল। CreatePartitionTableDialog Create Partition Table বিভাজন তালিকা বনাওক Creating a new partition table will delete all existing data on the disk. নতà§à¦¨ বিভাজন তালিকা বনালে ডিসà§à¦•ত জমা থকা গোটেই ডাটা বিলোপ হৈ যাব। What kind of partition table do you want to create? আপà§à¦¨à¦¿ কেনেকà§à§±à¦¾ ধৰণৰ বিভাজন তালিকা বনাব বিচাৰিছে? Master Boot Record (MBR) পà§à§°à¦§à¦¾à¦¨ বà§à¦Ÿà§ নথি (MBR) GUID Partition Table (GPT) GUID বিভাজন তালিকা (GPT) CreatePartitionTableJob Create new %1 partition table on %2. %2ত নতà§à¦¨ %1 বিভাজন তালিকা বনাওক। Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). <strong>%2</strong> (%3)ত নতà§à¦¨ <strong>%1</strong> বিভাজন তালিকা বনাওক। Creating new %1 partition table on %2. %2ত নতà§à¦¨ %1 বিভাজন তালিকা বনোৱা হৈ আছে। The installer failed to create a partition table on %1. ইনà§à¦¸à§à¦¤à¦²à¦¾à§°à¦Ÿà§‹ %1ত বিভাজন তালিকা বনোৱাত বিফল হ'ল। CreateUserJob Create user %1 %1 বà§à¦¯à§±à¦¹à¦¾à§°à¦•à§°à§à¦¤à¦¾ বনাওক Create user <strong>%1</strong>. <strong>%1</strong> বà§à¦¯à§±à¦¹à¦¾à§°à¦•à§°à§à¦¤à¦¾ বনাওক। Creating user %1. %1 বà§à¦¯à§±à¦¹à¦¾à§°à¦•à§°à§à¦¤à¦¾ বনোৱা হৈ আছে। Sudoers dir is not writable. Sudoers ডিৰেকà§à¦Ÿà§°à¦¿ লিখনযোগà§à¦¯ নহয়। Cannot create sudoers file for writing. লিখাৰ বাবে sudoers ফাইল বনাব পৰা নগ'ল। Cannot chmod sudoers file. sudoers ফাইলত chmod কৰিব পৰা নগ'ল। Cannot open groups file for reading. পঢ়াৰ বাবে groups ফাইল খà§à¦²à¦¿à¦¬ পৰা নগ'ল। CreateVolumeGroupDialog Create Volume Group ভলিউমৠগোট বনাওক CreateVolumeGroupJob Create new volume group named %1. %1 নামৰ নতà§à¦¨ ভলিউমৠগোট বনাওক। Create new volume group named <strong>%1</strong>. <strong>%1</strong> নামৰ নতà§à¦¨ ভলিউমৠগোট বনাওক। Creating new volume group named %1. %1 নামৰ নতà§à¦¨ ভলিউমৠগোট বনোৱা হৈ আছে। The installer failed to create a volume group named '%1'. ইনà§à¦¸à§à¦¤à¦²à¦¾à§°à¦Ÿà§‹à§±à§‡ '%1' নামৰ নতà§à¦¨ ভলিউমৠগোট বনোৱাত বিফল হৈছে। DeactivateVolumeGroupJob Deactivate volume group named %1. %1 নামৰ ভলিউম গোট নিসà§à¦•à§à§°à¦¿à§Ÿ কৰক। Deactivate volume group named <strong>%1</strong>. <strong>%1</strong> নামৰ ভলিউম গোট নিসà§à¦•à§à§°à¦¿à§Ÿ কৰক। The installer failed to deactivate a volume group named %1. ইনসà§à¦¤à¦²à¦¾à§°à¦Ÿà§‹ %1 নামৰ ভলিউম গোট নিসà§à¦•à§à§°à¦¿à§Ÿ কৰাত বিফল হ'ল। DeletePartitionJob Delete partition %1. %1 বিভাজন বিলোপ কৰক। Delete partition <strong>%1</strong>. <strong>%1</strong> বিভাজন ডিলিট কৰক। Deleting partition %1. %1 বিভাজন বিলোপ কৰা হৈ আছে। The installer failed to delete partition %1. ইনসà§à¦¤à¦²à¦¾à§°à¦Ÿà§‹ %1 বিভাজন বিলোপ কৰাত বিফল হ'ল। DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. বাচনি কৰা ডিভাইচৰ বিভাজন তালিকাৰ পà§à§°à¦•াৰ। বিভাজন তালিকা বিলোপ কৰি আকৌ আৰমà§à¦­à¦¨à¦¿à§° পৰা বনাইহে বিভাজন তালিকাৰ পà§à§°à¦•াৰ সলনি কৰিব পাৰি, যিয়ে ষà§à¦Ÿà§‹à§°à§‡à¦œ ডিভাইচত থকা গোটেই ডাটা বিলোপ কৰিব। যদি আপà§à¦¨à¦¿ বেলেগ à¦à¦•à§‹ বাচনি নকৰে, ইনসà§à¦¤à¦²à¦¾à§°à¦Ÿà§‹à§±à§‡ বৰà§à¦¤à¦®à¦¾à¦¨à§° বিভাজন তালিকা পà§à§°à§Ÿà§‹à¦— কৰিব। যদি আপà§à¦¨à¦¿ নিশà§à¦šà¦¿à¦¤ নহয়, আধà§à¦¨à¦¿à¦• চিছটেমত GPT বাচনি কৰক। This device has a <strong>%1</strong> partition table. à¦à¦‡à¦Ÿà§‹ ডিভাইচত à¦à¦–ন <strong>%1</strong> বিভাজন তালিকা আছে। This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. à¦à¦‡à¦Ÿà§‹ à¦à¦Ÿà¦¾ <strong>লà§à¦ª</strong> ডিভাইচ। <br><br>à¦à¦‡à¦Ÿà§‹ সà§à§Ÿà§à¦¡à§' ডিভাইচত কোনো বিভাজন তালিকা নাই যিয়ে ফাইলক বà§à¦²à§‹à¦• ডিভাইচ ৰূপে বà§à¦¯à§±à¦¹à¦¾à§° কৰিব পাৰা কৰিব। à¦à¦‡à¦§à§°à¦£à§° চেতৠআপত সাধাৰণতে à¦à¦•ক ফাইল চিছটেম থাকে। This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. ইনসà§à¦¤à¦²à¦¾à§°à¦Ÿà§‹à§±à§‡ বচনি কৰা ষà§à¦Ÿà§‹à§°à§‡à¦œ ডিভাইচত বিভাজন তালিকা বিচাৰি নাপলে। ডিভাইচটোত কোনো বিভাজন তালিকা নাই বা বিভাজন তালিকা বেয়া বা অগà§à¦¯à¦¾à¦¤ পà§à§°à¦•াৰ। à¦à¦‡ ইনসà§à¦¤à¦²à¦¾à§°à¦Ÿà§‹à§±à§‡ আপোনাৰ বাবে নতà§à¦¨ বিভাজন তালিকা সà§à¦¬à¦¤:ভাৱে বনাব পাৰে বা মেনà§à¦¯à§à§±à§‡à¦² বিভাজন পেজৰ দà§à¦¬à¦¾à§°à¦¾ বনাব পাৰে। <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br><strong>EFI</strong> বà§à¦Ÿ পৰিবেশত আৰমà§à¦­ হোৱা আধà§à¦¨à¦¿à¦• চিছটেমবোৰৰ কাৰণে à¦à¦‡à¦Ÿà§‹ পৰমৰà§à¦¶ কৰা বিভাজন তালিকা। <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. <br><br>à¦à¦‡à¦Ÿà§‹ বিভাজন তালিকা কেৱল <strong>BIOS</strong> বà§à¦Ÿ পৰিৱেশৰ পৰা আৰমà§à¦­ হোৱা পà§à§°à¦£à¦¿ চিছটেমৰ বাবে গà§à§°à¦¹à¦£ কৰা হয়। বাকী সকলোবোৰৰ বাবে GPT উপযà§à¦•à§à¦¤à¥¤<br><br><strong>সতৰà§à¦•বাণী:</strong> MBR বিভাজন তালিকা পà§à§°à¦£à¦¿ MS-DOS à§° যà§à¦—à§° পদà§à¦§à¦¤à¦¿à¥¤ <br>ইয়াত কেৱল 4 <em>মূখà§à¦¯</em> বিভাজন বনাব পাৰি, ইয়াৰ পৰা à¦à¦Ÿà¦¾ <em>পà§à§°à¦¸à¦¾à§°à¦£</em> কৰিব পাৰি আৰৠইযাৰ ভিতৰত <em>logical</em> বিভাজন ৰাখিব পাৰি। DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1 - (%2) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Dracutà§° বাবে LUKS কনফিগাৰেচন %1ত লিখক Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Dracutà§° বাবে LUKS কনফিগাৰেচন লিখা বনà§à¦§ কৰক: "/" বিভাজনত à¦à¦¨à¦•à§à§°à¦¿à¦ªà¦›à¦¨ নাই Failed to open %1 %1 খোলাত বিফল হ'ল DummyCppJob Dummy C++ Job ডামী C++ কাৰà§à¦¯à§à¦¯ EditExistingPartitionDialog Edit Existing Partition উপলবà§à¦§ বিভাজন সমà§à¦ªà¦¾à¦¦à¦¨ কৰক Content: সামগà§à§°à§€: &Keep ৰাখক (&K) Format ফৰà§à¦®à§‡à¦Ÿ Warning: Formatting the partition will erase all existing data. সকিয়নি: বিভাজনটো ফৰমেট কৰিলে উপসà§à¦¥à¦¿à¦¤ থকা গোটেই ডাটা বিলোপ হ'ব। &Mount Point: মাউনà§à¦Ÿ পইনà§à¦Ÿ (&M): Si&ze: আয়তন (&z): MiB MiB Fi&le System: ফাইল চিছটেম: Flags: ফà§à¦²à§‡à¦— সমূহ: Mountpoint already in use. Please select another one. à¦à¦‡à¦Ÿà§‹ মাওনà§à¦Ÿà§ পইনà§à¦Ÿà§ ইতিমধà§à¦¯à§‡ বà§à¦¯à§±à¦¹à¦¾à§° হৈ আছে। অনà§à¦—à§à§°à¦¹ কৰি বেলেগ à¦à¦Ÿà¦¾ বাচনি কৰক। EncryptWidget Form ৰূপ En&crypt system চিছটেম à¦à¦¨à¦•à§à§°à¦¿à¦ªà§à¦¤à§ কৰক (&c) Passphrase পাছফà§à§°à§‡à¦› Confirm passphrase পাছফà§à§°à§‡à¦› নিশà§à§±à¦¿à¦¤ কৰক Please enter the same passphrase in both boxes. অনà§à¦—à§à§°à¦¹ কৰি দà§à§Ÿà§‹à¦Ÿà¦¾ বাকচত à¦à¦•ে পাছফà§à§°à§‡à¦› পà§à¦°à¦¬à¦¿à¦·à§à¦Ÿ কৰক। FillGlobalStorageJob Set partition information বিভাজন তথà§à¦¯ চেতৠকৰক Install %1 on <strong>new</strong> %2 system partition. <strong>নতà§à¦¨</strong> %2 চিছটেম বিভাজনত %1 ইনসà§à¦¤à¦² কৰক। Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. <strong>%1</strong> মাউনà§à¦Ÿ পইনà§à¦Ÿà§° সৈতে <strong>নতà§à¦¨</strong> %2 বিভজন সà§à¦¥à¦¾à¦ªà¦¨ কৰক। Install %2 on %3 system partition <strong>%1</strong>. %3 চিছটেম বিভাজনত <strong>%1</strong>ত %2 ইনসà§à¦¤à¦² কৰক। Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. %3 বিভাজন <strong>%1</strong> <strong>%2</strong>à§° সৈতে সà§à¦¥à¦¾à¦ªà¦¨ কৰক। Install boot loader on <strong>%1</strong>. <strong>1%ত</strong> বà§à¦¤à§ লোডাৰ ইনসà§à¦¤à¦² কৰক। Setting up mount points. মাউনà§à¦Ÿ পইনà§à¦Ÿ চেতৠআপ হৈ আছে। FinishedPage Form ৰূপ <Restart checkbox tooltip> <Restart checkbox tooltip> &Restart now পà§à¦¨à§°à¦¾à§°à¦®à§à¦­ কৰক (&R) <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>সকলো কৰা হ'ল।</h1> <br/>আপোনাৰ কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à§°à¦¤ %1 সà§à¦¥à¦¾à¦ªà¦¨ কৰা হ'ল। <br/>আপà§à¦¨à¦¿ à¦à¦¤à¦¿à§Ÿà¦¾ নতà§à¦¨ চিছটেম বà§à¦¯à§±à¦¹à¦¾à§° কৰা আৰমà§à¦­ কৰিব পাৰিব। <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <html><head/><body><p>à¦à¦‡à¦Ÿà§‹ বিকলà§à¦ªà¦¤ কà§à¦²à¦¿à¦• কৰাৰ লগে লগে আপোনাৰ চিছটেম পà§à¦¨à§°à¦¾à§°à¦®à§à¦­ হ'ব যেতিয়া আপà§à¦¨à¦¿ <span style="font-style:italic;">হৈ গ'ল</span>ত কà§à¦²à¦¿à¦• কৰে বা চেতৠআপ পà§à§°à¦—à§à§°à§‡à¦® বনà§à¦§ কৰে।</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>সকলো কৰা হ'ল।</h1> আপোনাৰ কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à§°à¦¤ %1 ইনসà§à¦¤à¦² কৰা হ'ল। <br/>আপà§à¦¨à¦¿ à¦à¦¤à¦¿à§Ÿà¦¾ নতà§à¦¨ চিছটেম পà§à¦¨à§°à¦¾à§°à¦®à§à¦­ কৰিব পাৰিব অথবা %2 লাইভ বাতাৱৰণ বà§à¦¯à§±à¦¹à¦¾à§° কৰা অবিৰত ৰাখিব পাৰে। <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <html><head/><body><p>à¦à¦‡à¦Ÿà§‹ বিকলà§à¦ªà¦¤ কà§à¦²à¦¿à¦• কৰাৰ লগে লগে আপোনাৰ চিছটেম পà§à¦¨à§°à¦¾à§°à¦®à§à¦­ হ'ব যেতিয়া আপà§à¦¨à¦¿ <span style="font-style:italic;">হৈ গ'ল</span>ত কà§à¦²à¦¿à¦• কৰে বা ইনসà§à¦¤à¦²à¦¾à§° বনà§à¦§ কৰে।</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>সà§à¦¥à¦¾à¦ªà¦¨ পà§à§°à¦•à§à§°à¦¿à§Ÿà¦¾ বিফল হ'ল।</h1> <br/>আপোনাৰ কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à§°à¦¤ %1 সà§à¦¥à¦¾à¦ªà¦¨ নহ'লà§à¥¤ <br/>কà§à§°à§à¦Ÿà¦¿ বাৰà§à¦¤à¦¾ আছিল: %2। <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>ইনসà§à¦¤à¦²à¦šà§‡à¦¨ পà§à§°à¦•à§à§°à¦¿à§Ÿà¦¾ বিফল হ'ল।</h1> <br/>আপোনাৰ কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à§°à¦¤ %1 ইনসà§à¦¤à¦² নহ'লà§à¥¤ <br/>কà§à§°à§à¦Ÿà¦¿ বাৰà§à¦¤à¦¾ আছিল: %2। FinishedViewStep Finish সমাপà§à¦¤ Setup Complete চেতৠআপ সমà§à¦ªà§à§°à§à¦£ হৈছে Installation Complete ইনসà§à¦¤à¦²à¦šà§‡à¦¨ সমà§à¦ªà§à§°à§à¦£ হ'ল The setup of %1 is complete. %1à§° চেতৠআপ সমà§à¦ªà§à§°à§à¦£ হৈছে। The installation of %1 is complete. %1à§° ইনসà§à¦¤à¦²à¦šà§‡à¦¨ সমà§à¦ªà§à§°à§à¦£ হ'ল। FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. %4ত ফৰà§à¦®à§‡à¦Ÿ বিভাজন %1 ( ফাইল চিছটেম: %2, আয়তন: %3 MiB) Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. <strong>%3MiB</strong> à§° <strong>%1 %</strong> বিভাজন <strong>%2</strong> ফাইল চিছটেমৰ সৈতে ফৰà§à¦®à§‡à¦Ÿ কৰক। Formatting partition %1 with file system %2. %1 ফৰà§à¦®à§‡à¦Ÿ বিভাজনৰ সৈতে %2 ফাইল চিছটেম। The installer failed to format partition %1 on disk '%2'. ইনসà§à¦¤à¦²à¦¾à§°à¦Ÿà§‹ '%2' ডিসà§à¦•ত %1 বিভাজন​ ফৰà§à¦®à§‡à¦Ÿ কৰাত বিফল হ'ল। GeneralRequirements has at least %1 GiB available drive space অতি কমেও %1 GiB খালী ঠাই ডà§à§°à¦¾à¦‡à¦­à¦¤ উপলবà§à¦§ আছে There is not enough drive space. At least %1 GiB is required. ডà§à§°à¦¾à¦‡à¦­à¦¤ পৰà§à¦¯à§à¦¯à¦¾à¦ªà§à¦¤ খালী ঠাই নাই। অতি কমেও %1 GiB আৱশà§à¦¯à¦•। has at least %1 GiB working memory অতি কমেও %1 GiB কাৰà§à¦¯à§à¦¯à¦•ৰি মেম'ৰি আছে The system does not have enough working memory. At least %1 GiB is required. চিছটেমত পৰà§à¦¯à§à¦¯à¦¾à¦ªà§à¦¤ কাৰà§à¦¯à§à¦¯à¦•ৰি মেম'à§°à§€ নাই। অতি কমেও %1 GiB আৱশà§à¦¯à¦•। is plugged in to a power source পাৱাৰৰ উৎসৰ লগত সংযোগ হৈ আছে। The system is not plugged in to a power source. চিছটেম পাৱাৰৰ উৎসৰ লগত সংযোগ হৈ থকা নাই। is connected to the Internet ইনà§à¦Ÿà¦¾à§°à¦¨à§‡à¦Ÿà§° সৈতে সংযোগ হৈছে The system is not connected to the Internet. চিছটেমটো ইনà§à¦Ÿà¦¾à§°à¦¨à§‡à¦Ÿà§° সৈতে সংযোগ হৈ থকা নাই। is running the installer as an administrator (root) ইনসà§à¦¤à¦²à¦¾à§°à¦Ÿà§‹ পà§à§°à¦¸à¦¾à¦¶à¦¨à¦• (à§°à§à¦Ÿ) হিছাবে চলি আছে নেকি The setup program is not running with administrator rights. চেতৠআপ পà§à§°à¦—à§à§°à§‡à¦®à¦Ÿà§‹ পà§à§°à¦¸à¦¾à¦¶à¦¨à§€à§Ÿ অধিকাৰৰ সৈতে চলি থকা নাই। The installer is not running with administrator rights. ইনসà§à¦¤à¦²à¦¾à§°à¦Ÿà§‹ পà§à§°à¦¸à¦¾à¦¶à¦¨à§€à§Ÿ অধিকাৰৰ সৈতে চলি থকা নাই। has a screen large enough to show the whole installer সমà§à¦ªà§‚à§°à§à¦£ ইনসà§à¦¤à¦²à¦¾à§°à¦Ÿà§‹ দেখাবলৈ পà§à§°à§Ÿà§‹à¦œà¦¨à§€à§Ÿ ডাঙৰ সà§à¦•à§à§°à§€à¦£ আছে নেকি? The screen is too small to display the setup program. চেতৠআপ পà§à§°à¦—à§à§°à§‡à¦®à¦Ÿà§‹ পà§à§°à¦¦à§°à§à¦¶à¦¨ কৰিবলৈ সà§à¦•à§à§°à¦¿à¦¨à¦–নৰ আয়তন যথেসà§à¦Ÿ সৰà§à¥¤ The screen is too small to display the installer. ইনসà§à¦¤à¦²à¦¾à§°à¦Ÿà§‹ পà§à§°à¦¦à§°à§à¦¶à¦¨ কৰিবলৈ সà§à¦•à§à§°à¦¿à¦¨à¦–নৰ আয়তন যথেসà§à¦Ÿ সৰà§à¥¤ HostInfoJob Collecting information about your machine. আপোনাৰ মেছিনৰ বিষয়ে তথà§à¦¯ সংগà§à§°à¦¹ কৰি আছে। IDJob OEM Batch Identifier মূল উপকৰণ নিৰà§à¦®à¦¾à¦¤à¦¾ গোট চিনকà§à¦¤à¦•াৰী Could not create directories <code>%1</code>. <code>%1</code> ডিৰেকà§à¦Ÿà§°à§€à¦¬à§‹à§° বনাব পৰা নাই। Could not open file <code>%1</code>. <code>%1</code> ফাইল খà§à¦²à¦¿à¦¬ পৰা নাই। Could not write to file <code>%1</code>. <code>%1</code> ফাইলত লিখিব পৰা নাই। InitcpioJob Creating initramfs with mkinitcpio. mkinitcpioà§° দà§à¦¬à¦¾à§°à¦¾ initramfs বনাই থকা হৈছে। InitramfsJob Creating initramfs. initramfs বনাই থকা হৈছে। InteractiveTerminalPage Konsole not installed কনচোলৠইনà§à¦¸à¦Ÿà¦² কৰা নাই Please install KDE Konsole and try again! অনà§à¦—à§à§°à¦¹ কৰি কেডিই কনচোলৠইনà§à¦¸à¦Ÿà¦² কৰক আৰৠপà§à¦¨à§° চেষà§à¦Ÿà¦¾ কৰক! Executing script: &nbsp;<code>%1</code> নিসà§à¦ªà¦¾à¦¦à¦¿à¦¤ লিপি: &nbsp; <code>%1</code> InteractiveTerminalViewStep Script লিপি KeyboardPage Set keyboard model to %1.<br/> কিবোৰà§à¦¡à§° মডেল %1ত চেটৠকৰক।<br/> Set keyboard layout to %1/%2. কিবোৰà§à¦¡à§° লেআউট %1/%2 চেটৠকৰক। KeyboardViewStep Keyboard কিবোৰà§à¦¡ LCLocaleDialog System locale setting চিছটেম থলি ছেটিং The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. চিছটেমৰ সà§à¦¥à¦¾à¦¨à§€à§Ÿ ছেটিংসৠকমাণà§à¦¡à¦²à¦¾à¦‡à¦¨à§° কিছà§à¦®à¦¾à¦¨ উপভোকà§à¦¤à¦¾ ইনà§à¦Ÿà¦¾à§°à¦«à§‡à¦› উপাদানৰ ভাষা আৰৠআখৰবোৰত পà§à§°à¦­à¦¾à§± পেলায়। বৰà§à¦¤à¦®à¦¾à¦¨ ছেটিংসৠহ'ল: <strong>%1</strong>। &Cancel বাতিল কৰক (&C) &OK ঠিক আছে (&O) LicensePage Form ৰূপ <h1>License Agreement</h1> <h1>অনà§à¦œà§à¦žà¦¾-পতà§à§° চà§à¦•à§à¦¤à¦¿</h1> I accept the terms and conditions above. মই ওপৰোকà§à¦¤ চৰà§à¦¤à¦¾à§±à¦²à§€ গà§à§°à¦¹à¦£ কৰিছোà¦à¥¤ Please review the End User License Agreements (EULAs). অনà§à¦—à§à§°à¦¹ কৰি বà§à¦¯à§±à¦¹à¦¾à§°à¦•à§°à§à¦¤à¦¾à§° অনà§à¦œà§à¦žà¦¾-পতà§à§° চà§à¦•à§à¦¤à¦¿ (EULA) সমূহ ভালদৰে নিৰীকà§à¦·à¦£ কৰক। This setup procedure will install proprietary software that is subject to licensing terms. à¦à¦‡ চেচৠআপ পà§à§°à¦•à§à§°à¦¿à§Ÿà¦¾à¦‡ মালিকানা চফটৱেৰ ইনসà§à¦¤à¦² কৰিব যিটো অনà§à¦œà§à¦žà¦¾-পতà§à§°à§° চৰà§à¦¤à§° অধীন বিষয় হ'ব। If you do not agree with the terms, the setup procedure cannot continue. যদি আপà§à¦¨à¦¿ চৰà§à¦¤à¦¾à§±à¦²à§€ গà§à§°à¦¹à¦£ নকৰে, চেতৠআপ পà§à§°à¦•à§à§°à¦¿à§Ÿà¦¾ চলাই যাব নোৱাৰিব। This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. à¦à¦‡ চেতৠআপ পà§à§°à¦•à§à§°à¦¿à§Ÿà¦¾à¦‡ অতিৰিকà§à¦¤ বৈশিষà§à¦Ÿà§à¦¯ থকা সà¦à¦œà§à¦²à¦¿ পà§à§°à¦¦à¦¾à¦¨ কৰি বà§à¦¯à§±à¦¹à¦¾à§°à¦•à§°à§à¦¤à¦¾à§° অভিজà§à¦žà¦¤à¦¾ সংবৰà§à¦¦à§à¦§à¦¨ কৰাৰ বাবে মালিকানা চফটৱেৰ ইনসà§à¦¤à¦² কৰিব যিটো অনà§à¦œà§à¦žà¦¾-পতà§à§°à§° চৰà§à¦¤à§° অধীন বিষয় হ'ব। If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. যাদি আপà§à¦¨à¦¿ চৰà§à¦¤à¦¾à§±à¦²à§€ নামানে, মালিকিসà§à§±à¦¤à§à¦¤ থকা চফà§à¦Ÿà§±à§‡à§° ইনসà§à¦¤à¦² নহব আৰৠমà§à¦•লি উৎস বিকলà§à¦ª বà§à¦¯à§±à¦¹à¦¾à§° হ'ব। LicenseViewStep License অনà§à¦œà§à¦žà¦¾-পতà§à§° LicenseWidget URL: %1 URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <br/>%2à§° দà§à§±à¦¾à§°à¦¾ <strong>%1 ডà§à§°à¦¾à¦‡à¦­à¦¾à§°</strong> <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <br/><font color="Grey">%2à§° দà§à§±à¦¾à§°à¦¾</font> <strong>%1 গà§à§°à¦¾à¦«à¦¿à¦•à§à¦šà§ ডà§à§°à¦¾à¦‡à¦­à¦¾à§°</strong> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <br/><font color="Grey">%2à§° দà§à§±à¦¾à§°à¦¾</font> <strong>%1 বà§à§°à¦¾à¦‰à¦œà¦¾à§° পà§à¦²à¦¾à¦— ইন</strong> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <br/><font color="Grey">%2à§° দà§à§±à¦¾à§°à¦¾</font> <strong>%1 কোডেক</strong> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <br/><font color="Grey">%2à§° দà§à§±à¦¾à§°à¦¾</font> <strong>%1 পেকেজ</strong> <strong>%1</strong><br/><font color="Grey">by %2</font> <br/><font color="Grey">%2à§° দà§à§±à¦¾à§°à¦¾</font> <strong>%1</strong> File: %1 ফাইল: %1 Show the license text অনà§à¦œà§à¦žà¦¾-পতà§à§°à§° লেখনি দেখাওক Open license agreement in browser. অনà§à¦œà§à¦žà¦¾-পতà§à§° চà§à¦•à§à¦¤à¦¿ বà§à§°à¦¾à¦‰à¦œà¦¾à§°à¦¤ দেখাওক। Hide license text অনà§à¦œà§à¦žà¦¾-পতà§à§°à§° লেখনি লà§à¦•াওক LocalePage The system language will be set to %1. চিছটেমৰ ভাষা %1লৈ সলনি কৰা হ'ব। The numbers and dates locale will be set to %1. সংখà§à¦¯à¦¾ আৰৠতাৰিখ সà§à¦¥à¦¾à¦¨à§€à§Ÿ %1লৈ সলনি কৰা হ'ব। Region: কà§à¦·à§‡à¦¤à§à§°: Zone: মনà§à¦¡à¦²: &Change... সলনি... (&C) Set timezone to %1/%2.<br/> সময় জ'ন  %1/%2লৈ সলনি কৰা হ'ল।<br/> LocaleViewStep Location অৱসà§à¦¥à¦¾à¦¨ LuksBootKeyFileJob Configuring LUKS key file. LUKS কি ফাইল কনফিগাৰ কৰক। No partitions are defined. কোনো বিভাজনৰ বৰà§à¦£à¦¨à¦¾ দিয়া নাই। Encrypted rootfs setup error à¦à¦¨à¦•à§à§°à¦¿à¦ªà¦›à¦¨ থকা rootfs চেতৠআপত তà§à§°à§à¦Ÿà¦¿ Root partition %1 is LUKS but no passphrase has been set. à§°à§à¦Ÿ বিভাজন %1 LUKS, কিনà§à¦¤à§ পাসফà§à¦°à§‡à¦œ ছেট কৰা হোৱা নাই। Could not create LUKS key file for root partition %1. %1 à§°à§à¦Ÿ বিভাজনৰ বাবে LUKS কি বনাৱ পৰা নগ'ল। Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. মেচিন-আইডি সৃষà§à¦Ÿà¦¿ কৰক। Configuration Error কনফিগাৰেচন তà§à§°à§à¦Ÿà¦¿ No root mount point is set for MachineId. à¦à¦‡à¦Ÿà§‹ মেচিন-আইডিৰ বাবে কোনো মাউনà§à¦Ÿà§ পইণà§à¦Ÿà§à¦Ÿà§à¦Ÿà§ ছেট কৰা নাই। NetInstallPage Name নাম Description বিৱৰণ Network Installation. (Disabled: Unable to fetch package lists, check your network connection) নেটৱৰà§à¦•ৠইনসà§à¦¤à¦²à§‡à¦šà¦¨à¥¤ (নিসà§à¦•à§à§°à¦¿à§Ÿ: পেকেজ সà§à¦šà§€ বিচাৰি পোৱা নগ'ল, আপোনাৰ নেটৱৰà§à¦•ৠসংযোগ পৰীকà§à¦·à¦¾ কৰক) Network Installation. (Disabled: Received invalid groups data) নেটৱৰà§à¦•ৠইনসà§à¦¤à¦²à§‡à¦šà¦¨à¥¤ (নিসà§à¦•à§à§°à¦¿à§Ÿ: অকারà§à¦¯à¦•à§° গোটৰ তথà§à¦¯ পোৱা গ'ল) Network Installation. (Disabled: Incorrect configuration) নেটৱৰà§à¦• ইনসà§à¦¤à¦²à§‡à¦šà¦¨à¥¤ (নিসà§à¦•à§à§°à¦¿à§Ÿ: ভà§à¦² কনফিগাৰেচন) NetInstallViewStep Package selection পেকেজ বাচনি Office software Office package Browser software Browser package Web browser Kernel Services Login Desktop Applications NotesQmlViewStep Notes OEMPage Ba&tch: দল(&t): <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>দলৰ পৰিচয় লিখক। à¦à¦‡à¦Ÿà§‹ গনà§à¦¤à¦¬à§à¦¯ চিছটেমত জমা থাকিব।</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>মূল উপকৰণ নিৰà§à¦®à¦¾à¦¤à¦¾ কনফিগাৰেচন।</h1> <p>গনà§à¦¤à¦¬à§à¦¯ চিছটেম কনফিগাৰ কৰোতে কেলামাৰেচে মূল উপকৰণ নিৰà§à¦®à¦¾à¦¤à¦¾à§° চেটিংস বà§à¦¯à§±à¦¹à¦¾à§° কৰিব।</p></body></html> OEMViewStep OEM Configuration মূল উপকৰণ নিৰà§à¦®à¦¾à¦¤à¦¾ কনফিগাৰেচন Set the OEM Batch Identifier to <code>%1</code>. <code>%1ত</code> মূল উপকৰণ নিৰà§à¦®à¦¾à¦¤à¦¾ গোট চিনকà§à¦¤à¦•াৰি চেতৠকৰক। PWQ Password is too short পাছৱৰà§à¦¡ বহà§à¦¤ ছà§à¦Ÿà¦¿ Password is too long পাছৱৰà§à¦¡ বহà§à¦¤ দীঘল Password is too weak পাছৱৰà§à¦¡ বহà§à¦¤ দà§à§°à§à¦¬à¦² Memory allocation error when setting '%1' '%1' চেটিংস কৰোতে মেম'à§°à§€ আৱনà§à¦Ÿà¦¨ কà§à§°à§à¦Ÿà¦¿ Memory allocation error মেম'à§°à§€ আৱনà§à¦Ÿà¦¨ কà§à§°à§à¦Ÿà¦¿ The password is the same as the old one পাছৱৰà§à¦¡à¦Ÿà§‹ পà§à§°à¦£à¦¿ পাছৱৰà§à¦¡à§° লগত à¦à¦•ে The password is a palindrome পাছৱৰà§à¦¡à¦Ÿà§‹ পেলিনà§à¦¡à§à§°à§‹à¦® The password differs with case changes only পাছৱৰà§à¦¡à¦•েইটাৰ মাজত কেৱল lower/upper caseà§° পাৰà§à¦¥à¦•à§à¦¯ আছে The password is too similar to the old one পাছৱৰà§à¦¡à¦Ÿà§‹ পà§à§°à¦£à¦¿ পাছৱৰà§à¦¡à§° লগত যথেষà§à¦Ÿ à¦à¦•ে The password contains the user name in some form পাছৱৰà§à¦¡à¦Ÿà§‹à¦¤ কিবা পà§à§°à¦•াৰে বà§à¦¯à§±à¦¹à¦¾à§°à¦•াৰীৰ নাম আছে The password contains words from the real name of the user in some form পাছৱৰà§à¦¡à¦Ÿà§‹à¦¤ কিবা পà§à§°à¦•াৰে বà§à¦¯à§±à¦¹à¦¾à§°à¦•াৰীৰ আচল নামৰ কিবা শবà§à¦¦ আছে The password contains forbidden words in some form পাছৱৰà§à¦¡à¦Ÿà§‹à¦¤ কিবা পà§à§°à¦•াৰে নিষিদà§à¦§ শবà§à¦¦ আছে The password contains less than %1 digits পাছৱৰà§à¦¡à¦Ÿà§‹à¦¤ %1টাতকৈ কম সংখà§à¦¯à¦¾ আছে The password contains too few digits পাছৱৰà§à¦¡à¦Ÿà§‹à¦¤ বহà§à¦¤ কম সংখà§à¦¯à¦¾à¦• সংখà§à¦¯à¦¾ আছে The password contains less than %1 uppercase letters পাছৱৰà§à¦¡à¦Ÿà§‹à¦¤ %1টাতকৈ কম uppercaseà§° বৰà§à¦£ আছে The password contains too few uppercase letters পাছৱৰà§à¦¡à¦Ÿà§‹à¦¤ বহà§à¦¤ কম সংখà§à¦¯à¦¾à¦• কম uppercaseà§° বৰà§à¦£ আছে The password contains less than %1 lowercase letters পাছৱৰà§à¦¡à¦Ÿà§‹à¦¤ %1টাতকৈ কম lowercaseà§° বৰà§à¦£ আছে The password contains too few lowercase letters পাছৱৰà§à¦¡à¦Ÿà§‹à¦¤ বহà§à¦¤ কম সংখà§à¦¯à¦¾à¦• কম lowercaseà§° বৰà§à¦£ আছে The password contains less than %1 non-alphanumeric characters পাছৱৰà§à¦¡à¦Ÿà§‹à¦¤ %1টাতকৈ কম non-alphanumeric বৰà§à¦£ আছে The password contains too few non-alphanumeric characters পাছৱৰà§à¦¡à¦Ÿà§‹à¦¤ বহà§à¦¤ কম সংখà§à¦¯à¦¾à¦• কম non-alphanumeric বৰà§à¦£ আছে The password is shorter than %1 characters পাছৱৰà§à¦¡à¦Ÿà§‹à¦¤ %1টা বৰà§à¦£à¦¤à¦•ৈ ছà§à¦Ÿà¦¿ The password is too short পাছৱৰà§à¦¡à¦Ÿà§‹ বহà§à¦¤ ছà§à¦Ÿà¦¿ The password is just rotated old one পাছৱৰà§à¦¡à¦Ÿà§‹ পà§à§°à¦£à¦¿ পাছৱৰà§à¦¡à§° লগত সংশà§à¦²à¦¿à¦·à§à¦Ÿ The password contains less than %1 character classes পাছৱৰà§à¦¡à¦Ÿà§‹à¦¤ %1টাতকৈ কম বৰà§à¦£ শà§à§°à§‡à¦£à§€ আছে The password does not contain enough character classes পাছৱৰà§à¦¡à¦Ÿà§‹à¦¤ থকা বৰà§à¦£ শà§à§°à§‡à¦£à§€ যথেষà§à¦Ÿ নহয় The password contains more than %1 same characters consecutively পাছৱৰà§à¦¡à¦Ÿà§‹à¦¤ %1বাৰতকৈ বেছি à¦à¦•ে বৰà§à¦£ উপরà§à¦¯à§à¦ªà§°à¦¿ আছে The password contains too many same characters consecutively পাছৱৰà§à¦¡à¦Ÿà§‹à¦¤ à¦à¦•ে বৰà§à¦£ উপরà§à¦¯à§à¦ªà§°à¦¿ বহà§à¦¤à¦¬à¦¾à§° আছে The password contains more than %1 characters of the same class consecutively পাছৱৰà§à¦¡à¦Ÿà§‹à¦¤ %1বাৰতকৈ à¦à¦•ে বৰà§à¦£ শà§à§°à§‡à¦£à§€à§° বৰà§à¦£ উপরà§à¦¯à§à¦ªà§°à¦¿ বহà§à¦¤à¦¬à¦¾à§° আছে The password contains too many characters of the same class consecutively পাছৱৰà§à¦¡à¦Ÿà§‹à¦¤ à¦à¦•ে বৰà§à¦£ শà§à§°à§‡à¦£à§€à§° বৰà§à¦£ উপরà§à¦¯à§à¦ªà§°à¦¿ বহà§à¦¤à§‹ আছে The password contains monotonic sequence longer than %1 characters পাছৱৰà§à¦¡à¦Ÿà§‹à¦¤ %1তকৈ বেছি ম'ন'টনিক চিকà§à§±à§‡à¦¨à§à¦¸à§ আছে The password contains too long of a monotonic character sequence পাছৱৰà§à¦¡à¦Ÿà§‹à¦¤ বহà§à¦¤ দীঘল ম'ন'টনিক চিকà§à§±à§‡à¦¨à§à¦¸à§ বৰà§à¦£ আছে No password supplied কোনো পাছৱৰà§à¦¡à§ দিয়া নাই Cannot obtain random numbers from the RNG device RNG ডেভাইচৰ পৰা কোনো ৰেণà§à¦¡à¦® সংখà§à¦¯à¦¾ পোৱা নগ'ল Password generation failed - required entropy too low for settings পাছৱৰà§à¦¡à§ বনোৱা কাৰà§à¦¯à§à¦¯ বিফল হ'ল - চেটিংসৰ বাবে আৱশà§à¦¯à¦• à¦à¦¨à§à¦Ÿà§à§°'পী বহà§à¦¤ কম আছে The password fails the dictionary check - %1 পাছৱৰà§à¦¡à¦Ÿà§‹ অভিধানৰ পৰীকà§à¦·à¦£à¦¤ বিফল হ'ল - %1 The password fails the dictionary check পাছৱৰà§à¦¡à¦Ÿà§‹ অভিধানৰ পৰীকà§à¦·à¦£à¦¤ বিফল হ'ল Unknown setting - %1 অজà§à¦žà¦¾à¦¤ ছেটিংস - %1 Unknown setting অজà§à¦žà¦¾à¦¤ ছেটিংস Bad integer value of setting - %1 ছেটিংসৰ বেয়া পà§à§°à§à¦£ সংখà§à¦¯à¦¾ মান - %1 Bad integer value বেয়া পà§à§°à§à¦£ সংখà§à¦¯à¦¾ মান Setting %1 is not of integer type চেটিংসৠ%1 পূৰà§à¦£à¦¾à¦‚ক নহয় Setting is not of integer type চেটিংসৠপূৰà§à¦£à¦¾à¦‚ক নহয় Setting %1 is not of string type চেটিংসৠ%1 সà§à¦Ÿà§à§°à¦¿à¦‚ নহয় Setting is not of string type চেটিংসৠসà§à¦Ÿà§à§°à¦¿à¦‚ নহয় Opening the configuration file failed কনফিগাৰেচন ফাইল খোলাত বিফল হ'ল The configuration file is malformed কনফিগাৰেচন ফাইলটো বেয়া Fatal failure গভীৰ বিফলতা Unknown error অজà§à¦žà¦¾à¦¤ কà§à§°à§à¦Ÿà¦¿ Password is empty খালী পাছৱৰà§à¦¡ PackageChooserPage Form ৰূপ Product Name পণà§à¦¯à§° নাম TextLabel TextLabel Long Product Description পণà§à¦¯à§° দীঘল বিৱৰণ Package Selection পেকেজ নিৰà§à¦¬à¦¾à¦šà¦¨ Please pick a product from the list. The selected product will be installed. সà§à¦šà§€à§° পৰা পণà§à¦¯ à¦à¦Ÿà¦¾ বাচনি কৰক। বাচনি কৰা পণà§à¦¯à¦Ÿà§‹ ইনসà§à¦¤à¦² হ'ব। PackageChooserViewStep Packages পেকেজ Page_Keyboard Form ৰূপ Keyboard Model: কিবোৰà§à¦¡ মডেল: Type here to test your keyboard আপোনাৰ কিবোৰà§à¦¡ পৰীকà§à¦·à¦¾ কৰিবলৈ ইয়াত টাইপ কৰক Page_UserSetup Form ৰূপ What is your name? আপোনাৰ নাম কি? What name do you want to use to log in? লগইনত আপোনি কি নাম বà§à¦¯à§±à¦¹à¦¾à§° কৰিব বিচাৰে? Choose a password to keep your account safe. আপোনাৰ à¦à¦•াউণà§à¦Ÿ সà§à§°à¦•à§à¦·à¦¿à¦¤ ৰাখিবলৈ পাছৱৰà§à¦¡ à¦à¦Ÿà¦¾ বাছনি কৰক। <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>à¦à¦•ে পাছৱৰà§à¦¡ দà§à¦¬à¦¾à§° লিখক, যাতে লিখন কà§à§°à§à¦Ÿà¦¿à§° পৰীকà§à¦·à¦£ কৰিব পৰা যায়। à¦à¦Ÿà¦¾ ভাল পাছৱৰà§à¦¡à¦¤ বৰà§à¦£, সংখà§à¦¯à¦¾ আৰৠpunctuationà§° মিশà§à§°à¦£ থাকে, অতি কমেও আঠটা বৰà§à¦£ থাকিব লাগে আৰৠনিয়মিত সমযৰ বà§à¦¯à§±à¦§à¦¾à¦¨à¦¤ সলনি কৰি থাকিব লাগে।</small> What is the name of this computer? à¦à¦‡à¦Ÿà§‹ কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à§°à§° নাম কি? Your Full Name আপোনাৰ সমà§à¦ªà§‚à§°à§à¦£ নাম login লগইন <small>This name will be used if you make the computer visible to others on a network.</small> <small>যদি আপà§à¦¨à¦¿ আপোনাৰ কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à§°à¦Ÿà§‹ বেলেগে নেটৱৰà§à¦•ত পà§à§°à¦¦à§°à§à¦¶à¦¨ কৰে à¦à¦‡ নামটো বà§à¦¯à§±à¦¹à¦¾à§° হ'ব।</small> Computer Name কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à§°à§° নাম Password পাছৱৰà§à¦¡ Repeat Password পাছৱৰà§à¦¡ পà§à¦¨à§° লিখক। When this box is checked, password-strength checking is done and you will not be able to use a weak password. à¦à¦‡ বাকচটো চিহà§à¦¨à¦¿à¦¤ কৰিলে পাছà§à§±à§°à§à¦¡à§° পà§à§°à§±à¦²à¦¤à¦¾ কৰা হ'ব আৰৠআপà§à¦¨à¦¿ দà§à§°à§à¦¬à¦² পাছৱৰà§à¦¡ বà§à¦¯à§±à¦¹à¦¾à§° কৰিব নোৱাৰিব। Require strong passwords. শকà§à¦¤à¦¿à¦¶à¦¾à¦²à§€ পাছৱৰà§à¦¡à§° আৱশà§à¦¯à¦•। Log in automatically without asking for the password. কোনো পাছৱৰà§à¦¡ নোসোধাকৈ সà§à§±à¦¤:পূৰà§à¦£ লগà§à¦‡à¦¨ কৰক। Use the same password for the administrator account. পà§à§°à¦¶à¦¾à¦¸à¦¨à§€à§Ÿ à¦à¦•াউনà§à¦Ÿà§° বাবে à¦à¦•ে পাছৱৰà§à¦¡à§ বà§à¦¯à§±à¦¹à¦¾à§° কৰক। Choose a password for the administrator account. পà§à§°à¦¶à¦¾à¦¸à¦¨à§€à§Ÿ à¦à¦•াউনà§à¦Ÿà§° বাবে পাছৱৰà§à¦¡ à¦à¦Ÿà¦¾ বাছনি কৰক। <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>à¦à¦•ে পাছৱৰà§à¦¡ দà§à¦¬à¦¾à§° লিখক, যাতে লিখাত কà§à§°à§à¦Ÿà¦¿ আছে নেকি পৰীকà§à¦·à¦¾ কৰিব পাৰে।</small> PartitionLabelsView Root মূল Home ঘৰ Boot বà§à¦¤à§ EFI system ই à¦à¦« আই (EFI) চিছটেম Swap সà§à§±à§‡à¦ª New partition for %1 %1 à§° বাবে নতà§à¦¨ বিভাজন New partition নতà§à¦¨ বিভাজন %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space খালী ঠাই New partition নতà§à¦¨ বিভাজন Name নাম File System ফাইল চিছটেম Mount Point মাউনà§à¦Ÿ পইনà§à¦Ÿ Size আয়তন PartitionPage Form ৰূপ Storage de&vice: ষà§à¦Ÿà§‹à§°à§‡à¦œ ডিভাইচ (&v): &Revert All Changes সকলো সলনি আগৰ দৰে কৰক (&R) New Partition &Table নতà§à¦¨ বিভাজন তালিকা (&T) Cre&ate বনাওক (&a) &Edit সমà§à¦ªà¦¾à¦¦à¦¨à¦¾ কৰক (&E) &Delete বিলোপ কৰক (&D) New Volume Group নতà§à¦¨ ভলিউমৠগোট Resize Volume Group ভলিউমৠগোটৰ আয়তন সলনি কৰক Deactivate Volume Group ভলিউমৠগোট নিসà§à¦•à§à§°à¦¿à§Ÿ কৰক Remove Volume Group ভলিউমৠগোট বিলোপ কৰক I&nstall boot loader on: বà§à¦Ÿ লোডাৰ ইনসà§à¦¤à¦² কৰক (&I): Are you sure you want to create a new partition table on %1? আপà§à¦¨à¦¿ নিশà§à¦šà¦¿à¦¤à¦­à¦¾à§±à§‡ %1ত নতà§à¦¨ তালিকা বনাব বিচাৰে নেকি? Can not create new partition নতà§à¦¨ বিভাজন বনাব নোৱৰি The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. %1ত থকা বিভাজন তালিকাত ইতিমধà§à¦¯à§‡ %2 মূখà§à¦¯ বিভাজন আছে, আৰৠà¦à¦•à§‹ যোগ কৰিব নোৱাৰিব। তাৰ সলনি à¦à¦–ন মূখà§à¦¯ বিভাজন বিলোপ কৰক আৰৠà¦à¦–ন পà§à§°à¦¸à¦¾à§°à¦¿à¦¤ বিভাজন যোগ কৰক। PartitionViewStep Gathering system information... চিছটেম তথà§à¦¯ সংগà§à§°à¦¹ কৰা হৈ আছে। Partitions বিভাজনসমà§à¦¹ Install %1 <strong>alongside</strong> another operating system. %1ক বেলেগ à¦à¦Ÿà¦¾ অপাৰেটিং চিছটেমৰ <strong>লগত </strong>ইনসà§à¦¤à¦² কৰক। <strong>Erase</strong> disk and install %1. ডিসà§à¦•ত থকা সকলো ডাটা <strong>আতৰাওক</strong> আৰৠ%1 ইনসà§à¦¤à¦² কৰক। <strong>Replace</strong> a partition with %1. à¦à¦–ন বিভাজন %1à§° লগত <strong>সলনি</strong> কৰক। <strong>Manual</strong> partitioning. <strong>মেনà§à§±à§‡à¦²</strong> বিভাজন। Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). %1ক <strong>%2</strong>(%3)ত ডিসà§à¦•ত থকা বেলেগ অপাৰেটিং চিছটেমৰ <strong>লগত</strong> ইনসà§à¦¤à¦² কৰক। <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>%2</strong> (%3)ডিসà§à¦•ত থকা সকলো ডাটা <strong>আতৰাওক</strong> আৰৠ%1 ইনসà§à¦¤à¦² কৰক। <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>%2</strong> (%3) ডিসà§à¦•ত à¦à¦–ন বিভাজন %1à§° লগত <strong>সলনি</strong> কৰক। <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>%1</strong> (%2) ডিসà§à¦•ত <strong>মেনà§à§±à§‡à¦²</strong> বিভাজন। Disk <strong>%1</strong> (%2) ডিসà§à¦•à§ <strong>%1</strong> (%2) Current: বরà§à¦¤à¦®à¦¾à¦¨: After: পিছত: No EFI system partition configured কোনো EFI চিছটেম বিভাজন কনফিগাৰ কৰা হোৱা নাই An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. %1 আৰমà§à¦­ কৰিবলৈ à¦à¦Ÿà¦¾ EFI চিছটেম থকাটো আৱশà§à¦¯à¦•। <br/><br/>à¦à¦Ÿà¦¾ EFI চিছটেম কনà§à¦«à¦¿à¦—াৰ কৰিবলৈ উভতি যাওক আৰৠFAT32 ফাইল চিছটেম à¦à¦Ÿà¦¾ বাচনি কৰক যিটোত <strong>esp</strong> ফà§à¦²à§‡à¦— সকà§à¦·à¦® হৈ আছে আৰৠ<strong>%2</strong> মাউনà§à¦Ÿà§ পইণà§à¦Ÿà§ আছে।<br/><br/>আপà§à¦¨à¦¿ EFI চিছটেমবিভাজন কনà§à¦«à¦¿à¦—াৰ নকৰাকৈ অগà§à§°à¦¸à§° হ'ব পাৰে কিনà§à¦¤à§ ইয়াৰ ফলত চিছটেম বিফল হ'ব পাৰে। EFI system partition flag not set EFI চিছটেম বিভাজনত ফà§à¦²à§‡à¦— চেট কৰা নাই An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. %1 আৰমà§à¦­ কৰিবলৈ à¦à¦Ÿà¦¾ EFI চিছটেম থকাটো আৱশà§à¦¯à¦•। %2 মাউনà§à¦Ÿà§ পইনà§à¦Ÿà§ নোহোৱকৈ কনà§à¦«à¦¿à¦—াৰ কৰা হৈছিল, কিনà§à¦¤à§ ইয়াৰ esp ফà§à¦²à§‡à¦— ছেট কৰা হোৱা নাই। ফà§à¦²à§‡à¦—ৠছেট কৰিবলৈ উভতি যাওক আৰৠবিভাজন সলনি কৰক। আপà§à¦¨à¦¿ ফà§à¦²à§‡à¦— ছেট নকৰাকৈ অগà§à§°à¦¸à§° হ'ব পাৰে কিনà§à¦¤à§ ইয়াৰ ফলত চিছটেম বিফল হ'ব পাৰে। Boot partition not encrypted বà§à¦¤à§ বিভাজন à¦à¦¨à¦•à§à§°à¦¿à¦ªà§à¦¤à§ নহয় A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. à¦à¦¨à¦•à§à§°à¦¿à¦ªà§à¦¤à§‡à¦¡ à§°à§à¦Ÿ বিভাজনৰ সৈতে à¦à¦Ÿà¦¾ বেলেগ বà§à¦Ÿ বিভাজন চেতৠআপ কৰা হৈছিল, কিনà§à¦¤à§ বà§à¦Ÿ বিভাজন à¦à¦¨à¦•à§à§°à¦¿à¦ªà§à¦¤à§‡à¦¡ কৰা হোৱা নাই। <br/><br/>à¦à¦‡à¦§à§°à¦£à§° চেতৠআপ সà§à§°à¦•à§à¦·à¦¿à¦¤ নহয় কাৰণ গà§à§°à§à¦¤à§à¦¬à§à¦ªà§à§°à§à¦£ চিছটেম ফাইল আনà§à¦à¦¨à¦•à§à§°à¦¿à¦ªà§à¦¤à§‡à¦¡ বিভাজনত ৰখা হয়। <br/>আপà§à¦¨à¦¿ বিচাৰিলে চলাই থাকিব পাৰে কিনà§à¦¤à§ পিছà§à¦¤ চিছটেম আৰমà§à¦­à§° সময়ত ফাইল চিছটেম খোলা যাব। <br/>বà§à¦Ÿ বিভাজন à¦à¦¨à¦•à§à§°à¦¿à¦ªà§à¦¤à§ কৰিবলৈ উভতি যাওক আৰৠবিভাজন বনোৱা windowত <strong>Encrypt</strong> বাচনি কৰি আকৌ বনাওক। has at least one disk device available. অতি কমেও à¦à¦–ন ডিসà§à¦•ৠউপলবà§à¦§ আছে। There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job পà§à¦²à¦œà¦®à¦¾ Look-and-Feel কাৰà§à¦¯à§à¦¯ Could not select KDE Plasma Look-and-Feel package কেডিই পà§à¦²à¦¾à¦œà§à¦®à¦¾ Look-and-Feel পেকেজ বাচনি কৰিব পৰা নগ'ল PlasmaLnfPage Form ৰূপ Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. অনà§à¦—à§à§°à¦¹ কৰি কেডিই পà§à¦²à¦œà§à¦®à¦¾ ডেকà§à¦¸à¦Ÿà¦ªà§° বাবে à¦à¦Ÿà¦¾ look-and-feel বাচনি কৰে। আপà§à¦¨à¦¿ à¦à¦¤à¦¿à§Ÿà¦¾à§° বাবে à¦à¦‡à¦Ÿà§‹ পদকà§à¦·à§‡à¦ª à¦à§°à¦¿ থব পাৰে আৰৠচিছটেম সà§à¦¥à¦¾à¦ªà¦¨ কৰাৰ পিছতো look-and-feel কনà§à¦«à¦¿à¦—াৰ কৰিব পাৰে। look-and-feel বাচনি à¦à¦Ÿà¦¾à¦¤ কà§à¦²à¦¿à¦•ৠকৰিলে ই আপোনাক live preview দেখà§à§±à¦¾à¦¬à¥¤ Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. অনà§à¦—à§à§°à¦¹ কৰি কেডিই পà§à¦²à¦œà§à¦®à¦¾ ডেকà§à¦¸à¦Ÿà¦ªà§° বাবে à¦à¦Ÿà¦¾ look-and-feel বাচনি কৰে। আপà§à¦¨à¦¿ à¦à¦¤à¦¿à§Ÿà¦¾à§° বাবে à¦à¦‡à¦Ÿà§‹ পদকà§à¦·à§‡à¦ª à¦à§°à¦¿ থব পাৰে আৰৠচিছটেম ইনসà§à¦¤à¦² কৰাৰ পিছতো look-and-feel কনà§à¦«à¦¿à¦—াৰ কৰিব পাৰে। look-and-feel বাচনি à¦à¦Ÿà¦¾à¦¤ কà§à¦²à¦¿à¦•ৠকৰিলে ই আপোনাক live preview দেখà§à§±à¦¾à¦¬à¥¤ PlasmaLnfViewStep Look-and-Feel Look-and-Feel PreserveFiles Saving files for later ... ফাইল পিছৰ বাবে জমা কৰি আছে ... No files configured to save for later. পিছলৈ জমা ৰাখিব কোনো ফাইল কনà§à¦«à¦¿à¦—াৰ কৰা হোৱা নাই। Not all of the configured files could be preserved. কনà§à¦«à¦¿à¦—াৰ কৰা গোটেই ফাইল জমা ৰাখিব নোৱৰি। ProcessResult There was no output from the command. কমাণà§à¦¡à§° পৰা কোনো আউটপà§à¦Ÿ পোৱা নগ'ল। Output: আউটপà§à¦Ÿ External command crashed. বাহà§à¦¯à¦¿à¦• কমাণà§à¦¡ কà§à§°à§‡à¦›à§ কৰিলে। Command <i>%1</i> crashed. <i>%1</i> কমাণà§à¦¡ কà§à§°à§‡à¦›à§ কৰিলে। External command failed to start. বাহà§à¦¯à¦¿à¦• কমাণà§à¦¡ আৰমà§à¦­ হোৱাত বিফল হ'ল। Command <i>%1</i> failed to start. <i>%1</i> কমাণà§à¦¡ আৰমà§à¦­ হোৱাত বিফল হ'ল। Internal error when starting command. কমাণà§à¦¡ আৰমà§à¦­ কৰাৰ সময়ত আভà§à¦¯à¦¨à§à¦¤à§°à§€à¦£ কà§à§°à§à¦Ÿà¦¿à¥¤ Bad parameters for process job call. পà§à§°à¦•à§à§°à¦¿à§Ÿà¦¾ কাৰà§à¦¯à§à¦¯à§° বাবে বেয়া মান। External command failed to finish. বাহà§à¦¯à¦¿à¦• কমাণà§à¦¡ সমাপà§à¦¤ কৰাত বিফল হ'ল। Command <i>%1</i> failed to finish in %2 seconds. <i>%1</i> কমাণà§à¦¡ সমাপà§à¦¤ কৰাত %2 ছেকেণà§à¦¡à¦¤ বিফল হ'ল। External command finished with errors. বাহà§à¦¯à¦¿à¦• কমাণà§à¦¡ কà§à§°à¦Ÿà¦¿à§° সৈতে সমাপà§à¦¤ হ'ল। Command <i>%1</i> finished with exit code %2. <i>%1</i> কমাণà§à¦¡ %2 à¦à¦•à§à¦¸à¦¿à¦¡à§ কোডৰ সৈতে সমাপà§à¦¤ হ'ল। QObject Default Keyboard Model ডিফলà§à¦Ÿà§ কিবোৰà§à¦¡ মডেল Default ডিফলà§à¦Ÿà§ unknown অজà§à¦žà¦¾à¦¤ extended পà§à§°à¦¸à¦¾à§°à¦¿à¦¤ unformatted ফৰà§à¦®à§‡à¦Ÿ কৰা হোৱা নাই swap সà§à§±à§‡à¦ª Unpartitioned space or unknown partition table বিভাজন নকৰা খালী ঠাই অথবা অজà§à¦žà¦¾à¦¤ বিভজন তালিকা (no mount point) (কোনো মাউনà§à¦Ÿ পইনà§à¦Ÿ নাই) Requirements checking for module <i>%1</i> is complete. <i>%1</i> মডিউল পৰীকà§à¦·à¦£à§° বাবে আৱশà§à¦¯à¦•তাবোৰ সমà§à¦ªà§‚à§°à§à¦£ হ'ল। %1 (%2) language[name] (country[name]) %1 (%2) No product কোনো পণà§à¦¯ নাই No description provided. à¦à¦•à§‹ বিৱৰণি দিয়া হোৱা নাই। File not found ফাইল বিচাৰি পোৱা নাই Path <pre>%1</pre> must be an absolute path. <pre>%1</pre> পথটো পূৰà§à¦£ পথ নহয়। Could not create new random file <pre>%1</pre>. <pre>%1</pre> ৰেনà§à¦¡à¦® ফাইল বনাব পৰা নগ'ল। RemoveVolumeGroupJob Remove Volume Group named %1. %1 নামৰ ভলিউমৠগোট বিলোপ কৰক। Remove Volume Group named <strong>%1</strong>. <strong>%1</strong> নামৰ ভলিউমৠগোট বিলোপ কৰক। The installer failed to remove a volume group named '%1'. ইনসà§à¦¤à¦²à¦Ÿà§‹ %1 নামৰ নতà§à¦¨ ভলিউমৠগোট বিলোপ কৰাত বিফল হ'ল। ReplaceWidget Form ৰূপ Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. %1 ক'ত ইনসà§à¦¤à¦² লাগে বাচনি কৰক।<br/> <font color="red">সকীয়নি: ইয়ে বাচনি কৰা বিভাজনৰ সকলো ফাইল বিলোপ কৰিব। The selected item does not appear to be a valid partition. বাচনি কৰা বসà§à¦¤à§à¦Ÿà§‹ à¦à¦Ÿà¦¾ বৈধ বিভাজন নহয়। %1 cannot be installed on empty space. Please select an existing partition. %1 খালী ঠাইত ইনসà§à¦¤à¦² কৰিব নোৱাৰি। উপসà§à¦¥à¦¿à¦¤à¦¿ থকা বিভাজন বাচনি কৰক। %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 পà§à§°à¦¸à¦¾à§°à¦¿à¦¤ ঠাইত ইনসà§à¦¤à¦² কৰিব নোৱাৰি। উপসà§à¦¥à¦¿à¦¤à¦¿ থকা মূখà§à¦¯ বা লজিকেল বিভাজন বাচনি কৰক। %1 cannot be installed on this partition. à¦à¦‡à¦–ন বিভাজনত %1 ইনসà§à¦¤à¦² কৰিব নোৱাৰি। Data partition (%1) ডাটা বিভাজন (%1) Unknown system partition (%1) অজà§à¦žà¦¾à¦¤ চিছটেম বিভাজন (%1) %1 system partition (%2) %1 চিছটেম বিভাজন (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/> %1 বিভাজনটো %2à§° বাবে যথেষà§à¦Ÿ সৰà§à¥¤ অনà§à¦—à§à§°à¦¹ কৰি অতি কমেও %3 GiB সকà§à¦·à¦®à¦¤à¦¾ থকা বিভাজন বাচনি কৰক। <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/>à¦à¦‡à¦Ÿà§‹ চিছটেমৰ ক'তো à¦à¦Ÿà¦¾ EFI চিছটেম বিভাজন বিচাৰি পোৱা নগ'ল। অনà§à¦—à§à§°à¦¹ কৰি উভতি যাওক আৰৠ%1 চেতৠআপ কৰিব মেনà§à§±à§‡à¦² বিভাজন বà§à¦¯à§±à¦¹à¦¾à§° কৰক। <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/> %1 %2ত ইনসà§à¦¤à¦² হ'ব। <br/><font color="red">সকীয়নি​: </font>%2 বিভাজনত থকা গোটেই ডাটা বিলোপ হৈ যাব। The EFI system partition at %1 will be used for starting %2. %1 ত থকা EFI চিছটেম বিভাজনটো %2 আৰমà§à¦­ কৰাৰ বাবে বà§à¦¯à§±à¦¹à¦¾à§° কৰা হ'ব। EFI system partition: EFI চিছটেম বিভাজন: ResizeFSJob Resize Filesystem Job ফাইল চিছটেম কাৰà§à¦¯à§à¦¯à§° আয়তন পৰিৱৰà§à¦¤à¦¨ কৰক Invalid configuration অকারà§à¦¯à¦•à§° কনফিগাৰেচন The file-system resize job has an invalid configuration and will not run. ফাইল চিছটেমটোৰ আয়তন পৰিৱৰà§à¦¤à¦¨ কাৰà§à¦¯à§à¦¯à§° à¦à¦Ÿà¦¾ অকারà§à¦¯à¦•à§° কনফিগাৰেচন আছে আৰৠসেইটো নচলিব। KPMCore not Available KPMCore ঊপলবà§à¦§ নহয় Calamares cannot start KPMCore for the file-system resize job. ফাইল চিছটেমৰ আয়তন সলনি কৰিবলৈ কেলামাৰেচে KPMCore আৰমà§à¦­ নোৱাৰিলে। Resize Failed আয়তন পৰিৱৰà§à¦¤à¦¨ কাৰà§à¦¯à§à¦¯ বিফল হ'ল The filesystem %1 could not be found in this system, and cannot be resized. à¦à¦‡à¦Ÿà§‹ চিছটেমত %1 ফাইল চিছটেম বিছাৰি পোৱা নগ'ল আৰৠসেইটোৰ আয়তন সলনি কৰিব নোৱাৰি। The device %1 could not be found in this system, and cannot be resized. à¦à¦‡à¦Ÿà§‹ চিছটেমত %1 ডিভাইচ বিছাৰি পোৱা নগ'ল আৰৠসেইটোৰ আয়তন সলনি কৰিব নোৱাৰি। The filesystem %1 cannot be resized. %1 ফাইল চিছটেমটোৰ আয়তন সলনি কৰিব নোৱাৰি। The device %1 cannot be resized. %1 ডিভাইচটোৰ আয়তন সলনি কৰিব নোৱাৰি। The filesystem %1 must be resized, but cannot. %1 ফাইল চিছটেমটোৰ আয়তন সলনি কৰিব লাগে, কিনà§à¦¤à§ কৰিব নোৱাৰি। The device %1 must be resized, but cannot %1 ডিভাইচটোৰ আয়তন সলনি কৰিব লাগে, কিনà§à¦¤à§ কৰিব নোৱাৰি। ResizePartitionJob Resize partition %1. %1 বিভাজনৰ আয়তন সলনি কৰক। Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. <strong>%2MiB</strong> আয়তনৰ <strong>%1</strong> বিভাজনৰ আয়তন সলনি কৰি <strong>%3MiB</strong> কৰক। Resizing %2MiB partition %1 to %3MiB. %2MiB à§° %1 বিভাজনৰ আয়তন সলনি কৰি %3 কৰি আছে। The installer failed to resize partition %1 on disk '%2'. ইনসà§à¦¤à¦²à¦¾à§°à¦Ÿà§‹ '%2' ডিসà§à¦•ত %1 বিভাজনৰ​ আয়তন সলনি কৰাত বিফল হ'ল। ResizeVolumeGroupDialog Resize Volume Group ভলিউমৠগোটৰ আয়তন সলনি কৰক ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. %1 নামৰ ভলিউমৠগোটটোৰ আয়তন %2à§° পৰা %3লৈ সলনি কৰক। Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. <strong>%1</strong> নামৰ ভলিউমৠগোটটোৰ আয়তন <strong>%2</strong>à§° পৰা <strong>%3</strong>লৈ সলনি কৰক। The installer failed to resize a volume group named '%1'. ইনসà§à¦¤à¦²à¦¾à§°à¦Ÿà§‹ %1 নামৰ ভলিউমৠগোটটোৰ আয়তন সলনি কৰাত বিফল হ'ল। ResultsListDialog For best results, please ensure that this computer: উতà§à¦•ৃষà§à¦Ÿ ফলাফলৰ বাবে অনà§à¦—à§à§°à¦¹ কৰি নিশà§à¦šà¦¿à¦¤ কৰক যে à¦à¦‡à¦Ÿà§‹ কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à§° হয়: System requirements চিছটেমৰ আৱশà§à¦¯à¦•তাবোৰ ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> %1 চেতৠআপৰ বাবে নিমà§à¦¨à¦¤à¦® আৱশà§à¦¯à¦•তা à¦à¦‡ কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à§°à¦Ÿà§‹à§±à§‡ পূৰà§à¦£ নকৰে। <br/>সà§à¦¥à¦¾à¦ªà¦¨ পà§à§°à¦•à§à§°à¦¿à§Ÿà¦¾ অবিৰত ৰাখিব নোৱাৰিব। <a href="#details">বিৱৰণ...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> %1 ইনসà§à¦¤à¦²à¦šà§‡à¦¨â€‹à§° বাবে নিমà§à¦¨à¦¤à¦® আৱশà§à¦¯à¦•তা à¦à¦‡ কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à§°à¦Ÿà§‹à§±à§‡ পূৰà§à¦£ নকৰে। <br/>ইনসà§à¦¤à¦²à¦šà§‡à¦¨â€‹ পà§à§°à¦•à§à§°à¦¿à§Ÿà¦¾ অবিৰত ৰাখিব নোৱাৰিব। <a href="#details">বিৱৰণ...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. %1 চেতৠআপৰ বাবে পৰামৰà§à¦¶ দিয়া আৱশà§à¦¯à¦•তা à¦à¦‡ কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à§°à¦Ÿà§‹à§±à§‡ পূৰà§à¦£ নকৰে। <br/>সà§à¦¥à¦¾à¦ªà¦¨ পà§à§°à¦•à§à§°à¦¿à§Ÿà¦¾ অবিৰত ৰাখিব পাৰিব, কিনà§à¦¤à§ কিছà§à¦®à¦¾à¦¨ সà§à¦¬à¦¿à¦§à¦¾ নিষà§à¦•à§à¦°à¦¿à¦¯à¦¼ হৈ থাকিব। This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. %1 ইনসà§à¦¤à¦²à¦šà§‡à¦¨â€‹à§° বাবে পৰামৰà§à¦¶ দিয়া আৱশà§à¦¯à¦•তা à¦à¦‡ কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à§°à¦Ÿà§‹à§±à§‡ পূৰà§à¦£ নকৰে। ইনসà§à¦¤à¦²à¦šà§‡à¦¨â€‹ অবিৰত ৰাখিব পাৰিব, কিনà§à¦¤à§ কিছà§à¦®à¦¾à¦¨ সà§à¦¬à¦¿à¦§à¦¾ নিষà§à¦•à§à¦°à¦¿à¦¯à¦¼ হৈ থাকিব। This program will ask you some questions and set up %2 on your computer. à¦à¦‡à¦Ÿà§‹ পà§à§°à¦—à§à§°à§‡à¦®à§‡ অপোনাক কিছà§à¦®à¦¾à¦¨ পà§à§°à¦¶à§à¦¨ সà§à¦§à¦¿à¦¬ আৰৠঅপোনাৰ কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à§°à¦¤ %2 সà§à¦¥à¦¾à¦ªà¦¨ কৰিব। ScanningDialog Scanning storage devices... ষà§à¦Ÿà§‹à§°à§‡à¦œ ডিভাইচ সà§à¦•েন কৰি আছে... Partitioning বিভাজন কৰি আছে SetHostNameJob Set hostname %1 %1 হোসà§à¦Ÿà§ নাম চেতৠকৰক Set hostname <strong>%1</strong>. <strong>%1</strong> হোসà§à¦Ÿà§ নাম চেতৠকৰক। Setting hostname %1. %1 হোসà§à¦Ÿà§ নাম চেতৠকৰি আছে। Internal Error আভà§à¦¯à¦¨à§à¦¤à§°à¦¿à¦£ কà§à§°à§à¦Ÿà¦¿ Cannot write hostname to target system গনà§à¦¤à¦¬à§à¦¯ চিছটেমত হোষà§à¦Ÿ নাম লিখিব নোৱাৰিলে SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 কিবোৰà§à¦¡à§° মডেল %1 চেতৠকৰক, বিনà§à¦¯à¦¾à¦¸ %2-%3 Failed to write keyboard configuration for the virtual console. ভাৰচà§à§±à§‡à¦² কনচ'লৰ বাবে কিবোৰà§à¦¡ কনফিগাৰেচন লিখাত বিফল হ'ল। Failed to write to %1 %1 ত লিখাত বিফল হ'ল Failed to write keyboard configuration for X11. X11à§° বাবে কিবোৰà§à¦¡ কনফিগাৰেচন লিখাত বিফল হ'ল। Failed to write keyboard configuration to existing /etc/default directory. উপসà§à¦¥à¦¿à¦¤ থকা /etc/default ডিৰেকà§à¦Ÿà§°à¦¿à¦¤ কিবোৰà§à¦¡ কনফিগাৰেচন লিখাত বিফল হ'ল। SetPartFlagsJob Set flags on partition %1. %1 বিভাজনত ফà§à¦²à§‡à¦— চেতৠকৰক। Set flags on %1MiB %2 partition. %1MiB à§° %2 বিভাজনত ফà§à¦²à§‡à¦— চেতৠকৰক। Set flags on new partition. নতà§à¦¨ বিভাজনত ফà§à¦²à§‡à¦— চেতৠকৰক। Clear flags on partition <strong>%1</strong>. <strong>%1</strong> বিভাজনত ফà§à¦²à§‡à¦— আতৰাওক। Clear flags on %1MiB <strong>%2</strong> partition. %1MiB à§° <strong>%2</strong> বিভাজনৰ ফà§à¦²à§‡à¦—বোৰ আতৰাওক। Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. %1MiBà§° <strong>%2</strong> বিভাজনত <strong>%3</strong> ফà§à¦²à§‡à¦— লগাওক। Clearing flags on %1MiB <strong>%2</strong> partition. %1MiB à§° <strong>%2</strong> বিভাজনৰ ফà§à¦²à§‡à¦—বোৰ আতৰ কৰি আছে। Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. %1MiBà§° <strong>%2</strong> বিভাজনত <strong>%3</strong> ফà§à¦²à§‡à¦— লগাই আছে। Clear flags on new partition. নতà§à¦¨ বিভাজনৰ ফà§à¦²à§‡à¦— আতৰাওক। Flag partition <strong>%1</strong> as <strong>%2</strong>. <strong>%1</strong> বিভাজনত <strong>%2</strong>à§° ফà§à¦²à§‡à¦— লগাওক। Flag new partition as <strong>%1</strong>. নতà§à¦¨ বিভাজনত <strong>%1</strong>à§° ফà§à¦²à§‡à¦— লগাওক। Clearing flags on partition <strong>%1</strong>. <strong>%1</strong> বিভাজনৰ ফà§à¦²à§‡à¦— আতৰাই আছে। Clearing flags on new partition. নতà§à¦¨ বিভাজনৰ ফà§à¦²à§‡à¦— আতৰাই আছে। Setting flags <strong>%2</strong> on partition <strong>%1</strong>. <strong>%1</strong> বিভাজনত <strong>%2</strong> ফà§à¦²à§‡à¦— লগাই আছে। Setting flags <strong>%1</strong> on new partition. নতà§à¦¨ বিভাজনত <strong>%1</strong> ফà§à¦²à§‡à¦— লগাই আছে। The installer failed to set flags on partition %1. ইনসà§à¦¤à¦²à¦¾à§°à¦Ÿà§‹â€‹ %1 বিভাজনত ফà§à¦²à§‡à¦— লগোৱাত বিফল হ'ল। SetPasswordJob Set password for user %1 %1 বà§à¦¯à§±à¦¹à¦¾à§°à¦•াৰীৰ বাবে পাছà§à§±à§°à§à¦¡ চেতৠকৰক Setting password for user %1. %1 বà§à¦¯à§±à¦¹à¦¾à§°à¦•াৰীৰ বাবে পাছà§à§±à§°à§à¦¡ চেতৠকৰি আছে। Bad destination system path. গনà§à¦¤à¦¬à§à¦¯à¦¸à§à¦¥à¦¾à¦¨à§° চিছটেমৰ পথ বেয়া। rootMountPoint is %1 ৰূট মাঊনà§à¦Ÿ পইনà§à¦Ÿà§ %1 Cannot disable root account. ৰূট à¦à¦•াঊনà§à¦Ÿ নিসà§à¦•à§à§°à¦¿à§Ÿ কৰিব নোৱাৰি। passwd terminated with error code %1. %1 কà§à§°à§à¦Ÿà¦¿ কোডৰ সৈতে পাছৱৰà§à¦¡ সমাপà§à¦¤à¦¿ হ'ল। Cannot set password for user %1. %1 বà§à¦¯à§±à¦¹à¦¾à§°à¦•াৰীৰ পাছà§à§±à§°à§à¦¡ চেতৠকৰিব নোৱাৰি। usermod terminated with error code %1. %1 কà§à§°à§à¦Ÿà¦¿ চিহà§à¦¨à§° সৈতে ইউজাৰম'ড সমাপà§à¦¤ হ'ল। SetTimezoneJob Set timezone to %1/%2 %1/%2 টাইমজ'ন চেতৠকৰক Cannot access selected timezone path. বাচনি কৰা টাইমজ'ন পথত যাব নোৱাৰি। Bad path: %1 বেয়া পথ: %1 Cannot set timezone. টাইমজ'ন চেতৠকৰিব নোৱাৰি। Link creation failed, target: %1; link name: %2 লিংক বনোৱাত বিফল হ'ল, গনà§à¦¤à¦¬à§à¦¯ সà§à¦¥à¦¾à¦¨: %1; লিংকৰ নাম: %2 Cannot set timezone, টাইমজ'ন চেতৠকৰিব নোৱাৰি, Cannot open /etc/timezone for writing /etc/timezone ত লিখিব খà§à¦²à¦¿à¦¬ নোৱাৰি ShellProcessJob Shell Processes Job ছেল পà§à§°à¦•à§à§°à¦¿à§Ÿà¦¾à¦¬à§‹à§°à§° কাৰà§à¦¯à§à¦¯ SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage This is an overview of what will happen once you start the setup procedure. চেতৠআপ পà§à§°à¦•à§à§°à¦¿à§Ÿà¦¾ হ'লে কি হ'ব à¦à§Ÿà¦¾ à¦à¦Ÿà¦¾ অৱলোকন। This is an overview of what will happen once you start the install procedure. ইনসà§à¦¤à¦² পà§à§°à¦•à§à§°à¦¿à§Ÿà¦¾ হ'লে কি হ'ব à¦à§Ÿà¦¾ à¦à¦Ÿà¦¾ অৱলোকন। SummaryViewStep Summary সাৰাংশ TrackingInstallJob Installation feedback ইনসà§à¦¤à¦² সমà§à¦¬à¦¨à§à¦§à§€à§Ÿ পà§à§°à¦¤à¦¿à¦•à§à§°à¦¿à§Ÿà¦¾ Sending installation feedback. ইনà§à¦¸à§à¦¤à¦² সমà§à¦¬à¦¨à§à¦§à§€à§Ÿ পà§à§°à¦¤à¦¿à¦•à§à§°à¦¿à§Ÿà¦¾ পঠাই আছে। Internal error in install-tracking. ইনà§à¦¸à§à¦¤à¦²-কà§à§°à§à¦Ÿà¦¿à§° আভà§à¦¯à¦¨à§à¦¤à§°à§€à¦£ কà§à§°à§à¦Ÿà¦¿à¥¤ HTTP request timed out. HTTP ৰিকà§à§±à§‡à¦¸à§à¦Ÿà§° সময় উকলি গ'ল। TrackingMachineNeonJob Machine feedback মেচিন সমà§à¦¬à¦¨à§à¦§à§€à§Ÿ পà§à§°à¦¤à¦¿à¦•à§à§°à§€à§Ÿà¦¾ Configuring machine feedback. মেচিন সমà§à¦¬à¦¨à§à¦§à§€à§Ÿ পà§à§°à¦¤à¦¿à¦•à§à§°à§€à§Ÿà¦¾ কনফিগাৰ কৰি আছে‌। Error in machine feedback configuration. মেচিনত ফিডবেক কনফিগাৰেচনৰ কà§à§°à§à¦Ÿà¦¿à¥¤ Could not configure machine feedback correctly, script error %1. মেচিনৰ পà§à§°à¦¤à¦¿à¦•à§à§°à¦¿à§Ÿà¦¾ ঠাকভাৱে কনà§à¦«à¦¿à¦—াৰ কৰিব পৰা নগ'ল, লিপি কà§à§°à§à¦Ÿà¦¿ %1। Could not configure machine feedback correctly, Calamares error %1. মেচিনৰ পà§à§°à¦¤à¦¿à¦•à§à§°à¦¿à§Ÿà¦¾ ঠাকভাৱে কনà§à¦«à¦¿à¦—াৰ কৰিব পৰা নগ'ল, কেলামাৰেচ কà§à§°à§à¦Ÿà¦¿ %1। TrackingPage Form ৰূপ Placeholder পà§à¦²à§‡à¦šà¦¹à§‹à¦²à§à¦¡à¦¾à§° <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>à¦à¦‡à¦Ÿà§‹ বাচনি কৰি, ইনসà§à¦¤à¦²à¦šà§‡à¦¨â€‹à§° বিষয়ে <span style=" font-weight:600;">মà§à¦ à¦¤à§‡ à¦à¦•à§‹ তথà§à¦¯</span> আপà§à¦¨à¦¿ নপঠায়।</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">বà§à¦¯à§±à¦¹à¦¾à§°à¦•াৰীৰ অধিক তথà§à¦¯ পাবলৈ ইয়াত কà§à¦²à¦¿à¦• কৰক</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. ইনসà§à¦¤à¦²à¦šà§‡à¦¨â€‹ টà§à§°à§‡à¦•িংয়ে %1 কিমান বà§à¦¯à§±à¦¹à¦¾à§°à¦•াৰী আছে, তেওলোকে কি কি হাৰà§à¦¡à§±à§‡à§°à¦¤ %1 ইনসà§à¦¤à¦² কৰিছে আৰৠ(তলৰ দà§à¦Ÿà¦¾ বিকলà§à¦ªà§° লগত), পছনà§à¦¦à§° à¦à¦ªà§à¦²à¦¿à¦•েচনৰ তথà§à¦¯ নিৰনà§à¦¤à§°à¦­à¦¾à§±à§‡ পোৱাত সহায় কৰে। কি পঠাব জানিবলৈ অনà§à¦—à§à§°à¦¹ কৰি পà§à§°à¦¤à§à¦¯à§‡à¦• কà§à¦·à§‡à¦¤à§à§°à§° পিছৰ HELP আইকণত কà§à¦²à¦¿à¦•ৠকৰক। By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. à¦à¦‡à¦Ÿà§‹ বাচনি কৰি আপà§à¦¨à¦¿ ইনসà§à¦¤à¦²à¦šà§‡à¦¨â€‹ আৰৠহাৰà§à¦¡à§±à§‡à§°à§° বিষয়ে তথà§à¦¯ পঠাব। ইনসà§à¦¤à¦²à¦šà§‡à¦¨â€‹à§° পিছত <b>à¦à¦‡ তথà§à¦¯ à¦à¦¬à¦¾à§° পঠোৱা হ'ব</b>। By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. à¦à¦‡à¦Ÿà§‹ বাচনি কৰি আপà§à¦¨à¦¿ ইনসà§à¦¤à¦²à¦šà§‡à¦¨â€‹, হাৰà§à¦¡à§±à§‡à§° আৰৠà¦à¦ªà§à¦²à¦¿à¦•েচনৰ বিষয়ে <b>সময়ে সময়ে</b> %1লৈ তথà§à¦¯ পঠাব। By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. à¦à¦‡à¦Ÿà§‹ বাচনি কৰি আপà§à¦¨à¦¿ ইনসà§à¦¤à¦²à¦šà§‡à¦¨â€‹, হাৰà§à¦¡à§±à§‡à§°, à¦à¦ªà§à¦²à¦¿à¦•েচন আৰৠবà§à¦¯à§±à¦¹à¦¾à§° পেটাৰà§à¦£à§° বিষয়ে <b>নিয়মিতভাৱে</b> %1লৈ তথà§à¦¯ পঠাব। TrackingViewStep Feedback পà§à§°à¦¤à¦¿à¦•à§à§°à¦¿à§Ÿà¦¾ UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>যদি à¦à¦Ÿà¦¾à¦¤à¦•ৈ বেছি বà§à¦¯à¦•à§à¦¤à¦¿à§Ÿà§‡ à¦à¦‡à¦Ÿà§‹ কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à§° বà§à¦¯à§±à¦¹à¦¾à§° কৰে, আপà§à¦¨à¦¿ চেতৠআপৰ পিছত বহà§à¦¤à§‹ à¦à¦•াউনà§à¦Ÿ বনাব পাৰে।</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>যদি à¦à¦Ÿà¦¾à¦¤à¦•ৈ বেছি বà§à¦¯à¦•à§à¦¤à¦¿à§Ÿà§‡ à¦à¦‡à¦Ÿà§‹ কমà§à¦ªà¦¿à¦‰à¦Ÿà¦¾à§° বà§à¦¯à§±à¦¹à¦¾à§° কৰে, আপà§à¦¨à¦¿ ইনসà§à¦¤à¦²à¦šà§‡à¦¨â€‹à§° পিছত বহà§à¦¤à§‹ à¦à¦•াউনà§à¦Ÿ বনাব পাৰে।</small> Your username is too long. আপোনাৰ ইউজাৰ নাম বহà§à¦¤ দীঘল। Your username must start with a lowercase letter or underscore. আপোনাৰ বà§à¦¯à§±à¦¹à¦¾à§°à¦•াৰী নাম lowercase বৰà§à¦£ বা underscoreৰে আৰমà§à¦­ হ'ব লাগিব। Only lowercase letters, numbers, underscore and hyphen are allowed. কেৱল lowercase বৰà§à¦£, সংখà§à¦¯à¦¾, underscore আৰৠhyphenà§° হে মাতà§à§° অনà§à¦®à¦¤à¦¿ আছে। Only letters, numbers, underscore and hyphen are allowed. কেৱল বৰà§à¦£, সংখà§à¦¯à¦¾, underscore আৰৠhyphenà§° হে মাতà§à§° অনà§à¦®à¦¤à¦¿ আছে। Your hostname is too short. আপোনাৰ হ'সà§à¦Ÿà§ নাম বহà§à¦¤ ছà§à¦Ÿà¦¿à¥¤ Your hostname is too long. আপোনাৰ হ'সà§à¦Ÿà§ নাম বহà§à¦¤ দীঘল। Your passwords do not match! আপোনাৰ পাছৱৰà§à¦¡à¦•েইটাৰ মিল নাই! UsersViewStep Users বà§à¦¯à§±à¦¹à¦¾à§°à¦•াৰীসকল VariantModel Key কি Value মান VolumeGroupBaseDialog Create Volume Group ভলিউমৠগোট List of Physical Volumes ফিজিকেল ভলিউমবোৰৰ সà§à¦šà§€ Volume Group Name: ভলিউমৠগোটৰ নাম: Volume Group Type: ভলিউমৠগোটৰ পà§à§°à¦•াৰ: Physical Extent Size: ফিজিকেল ডিসà§à¦•à§° আয়তন সীমা: MiB MiB Total Size: মà§à¦  আয়তন: Used Size: বà§à¦¯à§±à¦¹à¦¾à§° কৰা আয়তন: Total Sectors: মà§à¦  চেকà§à¦Ÿà§°à¦¬à§‹à§°: Quantity of LVs: LVবোৰৰ সংখà§à¦¯à¦¾: WelcomePage Form ৰূপ Select application and system language à¦à¦ªà§à¦²à¦¿à¦•েচন আৰৠচিছটেম ভাষা বাচনি কৰক Open donations website দান কৰা ৱেবচাইট খোলক &Donate দান কৰক (&D) Open help and support website সহায়ক ৱেবচাইট খোলক Open issues and bug-tracking website সমসà§à¦¯à¦¾ আৰৠকà§à§°à§à¦Ÿà¦¿ অনà§à¦¸à§°à¦£à§° ৱেবচাইট খোলক Open release notes website মà§à¦•à§à¦¤à¦¿ টোকাৰ ৱেবচাইট খোলক &Release notes মà§à¦•à§à¦¤à¦¿ টোকা (&R) &Known issues জà§à¦žà¦¾à¦¤ সমসà§à¦¯à¦¾ (&K) &Support সহায় (&S) &About সমà§à¦ªà¦°à§à¦•ে (&A) <h1>Welcome to the %1 installer.</h1> <h1>%1 ইনসà§à¦¤à¦²à¦¾à§°à¦²à§ˆ আদৰণি জনাইছো।</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>%1à§° কেলামাৰেচ ইনসà§à¦¤à¦²à¦¾à§°à¦²à§ˆ আদৰণি জনাইছো।</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>%1à§° কেলামাৰেচ চেতৠআপ পà§à§°à¦—à§à§°à¦¾à¦®à¦²à§ˆ আদৰণি জনাইছো।</h1> <h1>Welcome to %1 setup.</h1> <h1> %1 চেতৠআপলৈ আদৰণি জনাইছো।</h1> About %1 setup %1 চেতৠআপ পà§à§°à¦—à§à§°à¦¾à¦®à§° বিষয়ে About %1 installer %1 ইনসà§à¦¤à¦²à¦¾à§°à§° বিষয়ে <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. <h1>%1</h1><br/><strong>%2<br/>à§° বাবে %3</strong><br/><br/> মালিকিসà§à¦¬à¦¤à§à¦¤ 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>মালিকিসà§à¦¬à¦¤à§à¦¤ 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/><a href="https://calamares.io/team/">Calamares দল</a> আৰৠ<a href="https://www.transifex.com/calamares/calamares/">কেলামাৰেচ অনà§à¦¬à¦¾à¦¦à¦• দল</a>ক ধনà§à¦¯à¦¬à¦¾à¦¦ জনাইছো।<br/><br/><a href="https://calamares.io/">Calamares</a>à§° বিকাশ<br/><a href="http://www.blue-systems.com/">Blue Systems</a>- Liberating Softwareà§° দà§à¦¬à¦¾à§°à¦¾ পà§à§°à¦¯à§‹à¦œà¦¿à¦¤à¥¤ %1 support %1 সহায় WelcomeQmlViewStep Welcome আদৰণি WelcomeViewStep Welcome আদৰণি notesqml <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> About Support Known issues Release notes Donate calamares-3.2.20/lang/calamares_ast.ts000066400000000000000000005474731362604102500176410ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. L'<strong>entornu d'arrinque</strong> d'esti sistema.<br><br>Los sistemes x86 namái sofiten <strong>BIOS</strong>.<br>Los sistemes modernos usen <strong>EFI</strong> pero tamién podríen apaecer dalcuando como BIOS si s'anicien nel mou de compatibilidá. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. Esti sistema anició nun entornu d'arrinque <strong>EFI</strong>.<br><br>Pa configurar l'arrinque nun entornu EFI, esti instalador ha instalar un cargador d'arrinque como <strong>GRUB</strong> or <strong>systemd-boot</strong> nuna <strong>partición del sistema EFI</strong>. Esto ye automático a nun ser qu'escueyas el particionáu manual, nesi casu has escoyer o crear tu esa partición. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. Esti sistema anició nun entornu d'arrinque <strong>BIOS</strong>.<br><br>Pa configurar l'arrinque nun entornu BIOS, esti instalador ha instalar un cargador d'arrinque como <strong>GRUB</strong>, quier nel empiezu d'una partición, quier nel <strong>Master Boot Record</strong> cierca del empiezu de la tabla de particiones (ye lo preferible). Esto ye automático a nun ser qu'escueyas el particionáu manual, nesi casu has configuralo tu too. BootLoaderModel Master Boot Record of %1 Master Boot Record de %1 Boot Partition Partición d'arrinque System Partition Partición del sistema Do not install a boot loader Nenyures %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page Páxina balera Calamares::DebugWindow Form Formulariu GlobalStorage GlobalStorage JobQueue JobQueue Modules Módulos Type: Triba: none nada Interface: Interfaz: Tools Ferramientes Reload Stylesheet Widget Tree Debug information Información de la depuración Calamares::ExecutionViewStep Set up Configuración Install Instalación Calamares::FailJob Job failed (%1) Falló'l trabayu (%1) Programmed job failure was explicitly requested. El fallu del trabayu programáu solicitóse esplicitamente. Calamares::JobThread Done Fecho Calamares::NamedJob Example job (%1) Trabayu d'exemplu (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Executando'l comandu %1 %2 Calamares::PythonJob Running %1 operation. Executando la operación %1. Bad working directory path El camín del direutoriu de trabayu ye incorreutu Working directory %1 for python job %2 is not readable. El direutoriu de trabayu %1 pal trabayu en Python %2 nun ye lleibe. Bad main script file El ficheru del script principal ye incorreutu Main script file %1 for python job %2 is not readable. El ficheru del script principal %1 pal trabayu en Python %2 nun ye lleibe. Boost.Python error in job "%1". Fallu de Boost.Python nel trabayu «%1». Calamares::QmlViewStep Loading ... Cargando... QML Step <i>%1</i>. Loading failed. Falló la carga. Calamares::RequirementsChecker Waiting for %n module(s). Esperando por %n módulu Esperando por %n módulos (%n second(s)) (%n segundu) (%n segundos) System-requirements checking is complete. Completóse la comprobación de los requirimientos del sistema. Calamares::ViewManager &Back &Atrás &Next &Siguiente &Cancel &Encaboxar Cancel setup without changing the system. Encaboxa la configuración ensin camudar el sistema. Cancel installation without changing the system. Encaboxa la instalación ensin camudar el sistema. Setup Failed Falló la configuración Would you like to paste the install log to the web? Install Log Paste URL The upload was unsuccessful. No web-paste was done. Calamares Initialization Failed Falló l'aniciu de Calamares %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. %1 nun pue instalase. Calamares nun foi a cargar tolos módulos configuraos. Esto ye un problema col mou nel que la distribución usa Calamares. <br/>The following modules could not be loaded: <br/>Nun pudieron cargase los módulos de darréu: Continue with installation? ¿Siguir cola instalación? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> El programa d'instalación de %1 ta a piques de facer cambeos nel discu pa configurar %2.<br/><strong>Nun vas ser a desfacer estos cambeos.<strong> &Set up now &Configurar agora &Set up &Configurar &Install &Instalar Setup is complete. Close the setup program. Completóse la configuración. Zarra'l programa de configuración. Cancel setup? ¿Encaboxar la configuración? Cancel installation? ¿Encaboxar la instalación? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. ¿De xuru que quies encaboxar el procesu actual de configuración? El programa de configuración va colar y van perdese tolos cambeos. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. ¿De xuru que quies encaboxar el procesu actual d'instalación? L'instalador va colar y van perdese tolos cambeos. &Yes &Sí &No &Non &Close &Zarrar Continue with setup? ¿Siguir cola instalación? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> L'instalador de %1 ta a piques de facer cambeos nel discu pa instalar %2.<br/><strong>Nun vas ser a desfacer esos cambeos.</strong> &Install now &Instalar agora Go &back Dir p'&atrás &Done &Fecho The installation is complete. Close the installer. Completóse la instalación. Zarra l'instalador. Error Fallu Installation Failed Falló la instalación CalamaresPython::Helper Unknown exception type Desconozse la triba de la esceición unparseable Python error Fallu de Python que nun pue analizase unparseable Python traceback Traza inversa de Python que nun pue analizase Unfetchable Python error. Fallu de Python al que nun pue dise en cata. CalamaresUtils Install log posted to: %1 CalamaresWindow %1 Setup Program Programa de configuración de %1 %1 Installer Instalador de %1 Show debug information Amosar la depuración CheckerContainer Gathering system information... Recoyendo la información del sistema... ChoicePage Form Formulariu After: Dempués: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Particionáu manual</strong><br/>Vas poder crear o redimensionar particiones. Boot loader location: Allugamientu del xestor d'arrinque: Select storage de&vice: Esbilla un preséu d'al&macenamientu: Current: Anguaño: Reuse %1 as home partition for %2. Reusu de %s como partición d'aniciu pa %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Esbilla una partición a redimensionar, dempués arrastra la barra baxera pa facelo</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 va redimensionase a %2MB y va crease una partición de %3MB pa %4. <strong>Select a partition to install on</strong> <strong>Esbilla una partición na qu'instalar</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Nun pudo alcontrase per nenyures una partición del sistema EFI. Volvi p'atrás y usa'l particionáu manual pa configurar %1, por favor. The EFI system partition at %1 will be used for starting %2. La partición del sistema EFI en %1 va usase p'aniciar %2. EFI system partition: Partición del sistema EFI: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Esti preséu d'almacenamientu nun paez que tenga un sistema operativu nelli. ¿Qué te prestaría facer?<br/>Vas ser a revisar y confirmar lo qu'escueyas enantes de que se faiga cualesquier cambéu nel preséu d'almacenamientu. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Desaniciu d'un discu</strong><br/>Esto va <font color="red">desaniciar</font> tolos datos presentes nel preséu d'almacenamientu esbilláu. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Esti preséu d'almacenamientu tien %1 nelli. ¿Qué te prestaría facer?<br/>Vas ser a revisar y confirmar lo qu'escueyas enantes de que se faiga cualesquier cambéu nel preséu d'almacenamientu. No Swap Ensin intercambéu Reuse Swap Reusar un intercambéu Swap (no Hibernate) Intercambéu (ensin ivernación) Swap (with Hibernate) Intercambéu (con ivernación) Swap to file Intercambéu nun ficheru <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Instalación anexa</strong><br/>L'instalador va redimensionar una partición pa dexar sitiu a %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Troquéu d'una partición</strong><br/>Troca una parción con %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Esti preséu d'almacenamientu yá tien un sistema operativu nelli. ¿Qué te prestaría facer?<br/>Vas ser a revisar y confirmar lo qu'escueyas enantes de que se faiga cualesquier cambéu nel preséu d'almacenamientu. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Esti preséu d'almacenamientu tien varios sistemes operativos nelli. ¿Qué te prestaría facer?<br/>Vas ser a revisar y confirmar lo qu'escueyas enantes de que se faiga cualesquier cambéu nel preséu d'almacenamientu. ClearMountsJob Clear mounts for partitioning operations on %1 Llimpieza de los montaxes pa les operaciones de particionáu en %1. Clearing mounts for partitioning operations on %1. Llimpiando los montaxes pa les operaciones de particionáu en %1. Cleared all mounts for %1 Llimpiáronse tolos montaxes de %1 ClearTempMountsJob Clear all temporary mounts. Llimpieza de tolos montaxes temporales. Clearing all temporary mounts. Llimpiando tolos montaxes temporales. Cannot get list of temporary mounts. Nun pue consiguise la llista de montaxes temporales. Cleared all temporary mounts. Llimpiáronse tolos puntos de montaxe. CommandList Could not run command. Nun pudo executase'l comandu. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. El comandu execútase nel entornu del agospiu y precisa saber el camín raigañu pero nun se definió en rootMountPoint. The command needs to know the user's name, but no username is defined. El comandu precisa saber el nome del usuariu, pero nun se definió dengún. ContextualProcessJob Contextual Processes Job Trabayu de procesos contestuales CreatePartitionDialog Create a Partition Creación d'una partición MiB MiB Partition &Type: &Triba de la partición: &Primary &Primaria E&xtended E&stendida Fi&le System: Sistema de &ficheros: LVM LV name Nome del volume llóxicu de LVM Flags: Banderes: &Mount Point: Puntu de &montaxe: Si&ze: Tama&ñu: En&crypt &Cifrar Logical Llóxica Primary Primaria GPT GPT Mountpoint already in use. Please select another one. El puntu de montaxe yá ta n'usu. Esbilla otru, por favor. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. Creando una partición %1 en %2. The installer failed to create partition on disk '%1'. L'instalador falló al crear la partición nel discu «%1». CreatePartitionTableDialog Create Partition Table Creación d'una tabla de particiones Creating a new partition table will delete all existing data on the disk. Crear una tabla de particiones va desaniciar tolos datos esistentes nel discu. What kind of partition table do you want to create? ¿Qué triba de tabla de particiones quies crear? Master Boot Record (MBR) Master Boot Record (MBR) GUID Partition Table (GPT) GUID Partition Table (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Creación d'una tabla de particiones %1 en %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Va crease una tabla de particiones <strong>%1</strong> en <strong>%2</strong> (%3). Creating new %1 partition table on %2. Creando una tabla de particiones %1 en %2. The installer failed to create a partition table on %1. L'instalador falló al crear la tabla de particiones en %1. CreateUserJob Create user %1 Creación del usuariu %1 Create user <strong>%1</strong>. Va crease l'usuariu <strong>%1</strong>. Creating user %1. Creando l'usuariu %1. Sudoers dir is not writable. El direutoriu de sudoers nun ye escribible. Cannot create sudoers file for writing. Nun pue crease'l ficheru sudoers pa la escritura. Cannot chmod sudoers file. Nun pue facese chmod al ficheru sudoers. Cannot open groups file for reading. Nun pue abrise pa la llectura'l ficheru de grupos. CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Creación d'un grupu de volúmenes col nome %1. Create new volume group named <strong>%1</strong>. Va crease un grupu de volúmenes col nome <strong>%1</strong>. Creating new volume group named %1. Creando un grupu de volúmenes col nome %1. The installer failed to create a volume group named '%1'. L'instalador falló al crear un grupu de volúmenes col nome %1. DeactivateVolumeGroupJob Deactivate volume group named %1. Desactivación del grupu de volúmenes col nome %1. Deactivate volume group named <strong>%1</strong>. Va desactivase'l grupu de volúmenes col nome <strong>%1</strong>. The installer failed to deactivate a volume group named %1. L'instalador falló al desactivar un grupu de volúmenes col nome %1. DeletePartitionJob Delete partition %1. Desaniciu de la partición %1. Delete partition <strong>%1</strong>. Va desaniciase la partición <strong>%1</strong>. Deleting partition %1. Desaniciando la partición %1. The installer failed to delete partition %1. L'instalador falló al desaniciar la partición %1. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. La triba de la <strong>tabla de particiones</strong> nel preséu d'almacenamientu esbilláu.<br><br>L'únicu mou de camudalo ye desaniciala y recreala dende l'empiezu, lo que va destruyir tolos datos nel preséu d'almacenamientu.<br>Esti instalador va caltener la tabla de particiones actual a nun ser qu'escueyas otra cosa esplícitamente.<br>Si nun tas seguru, en sistemes modernos prefierse GPT. This device has a <strong>%1</strong> partition table. Esti preséu tien una tabla de particiones <strong>%1</strong>. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. Esto ye un preséu <strong>loop</strong>.<br><br>Ye un pseudopreséu ensin una tabla de particiones que fai qu'un ficheru seya accesible como preséu de bloques. A vegaes, esta triba de configuración namái contién un sistema de ficheros. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. Esti instalador <strong>nun pue deteutar una tabla de particiones</strong> nel preséu d'almacenamientu esbilláu.<br><br>El preséu nun tien una tabla de particiones porque ta toyida o ye d'una triba desconocida.<br>Esti instalador pue crear una tabla de particiones nueva por ti, automáticamente o pente la páxina de particionáu manual. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Esta ye la tabla de particiones aconseyada pa sistemes modernos qu'anicien dende un entornu d'arrinque <strong>EFI</strong>. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. <br><br>Esta triba de tabla de particiones namái s'aconseya en sistemes vieyos qu'anicien dende un entornu d'arrinque <strong>BIOS</strong>. GPT aconséyase na mayoría de los demás casos.<br><br><strong>Alvertencia:</strong> la tabla de particiones MBR ye un estándar obsoletu de la dómina de MS-DOS.<br>Namái van poder crease cuatro particiones <em>primaries</em>, y una d'eses cuatro, namái vas poder ser una partición <em>estendida</em> que va contener munches particiones <em>llóxiques</em>. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1 - (%2) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Escritura de la configuración LUKS pa Dracut en %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Omisión de la escritura de la configuración LUKS pa Dracut: La partición «/» nun ta cifrada Failed to open %1 Fallu al abrir %1 DummyCppJob Dummy C++ Job Trabayu maniquín en C++ EditExistingPartitionDialog Edit Existing Partition Edición d'una partición esistente Content: Conteníu: &Keep &Caltener Format Formatiar Warning: Formatting the partition will erase all existing data. Alvertencia: Formatiar la partición va desaniciar tolos datos esistentes. &Mount Point: Puntu de &montaxe: Si&ze: Tama&ñu: MiB MiB Fi&le System: Sistema de &ficheros: Flags: Banderes: Mountpoint already in use. Please select another one. El puntu de montaxe yá ta n'usu. Esbilla otru, por favor. EncryptWidget Form Formulariu En&crypt system &Cifrar el sistema Passphrase Fras de pasu Confirm passphrase Confirmación de la fras de pasu Please enter the same passphrase in both boxes. Introduz la mesma fras de pasu en dambes caxes, por favor. FillGlobalStorageJob Set partition information Afitamientu de la información de les particiones Install %1 on <strong>new</strong> %2 system partition. Va instalase %1 na partición %2 <strong>nueva</strong> del sistema. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Va configurase una partición %2 <strong>nueva</strong> col puntu de montaxe <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Va instalase %2 na partición %3 del sistema de <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Va configurase la partición %3 de <strong>%1</strong> col puntu de montaxe <strong>%2</strong>. Install boot loader on <strong>%1</strong>. Va instalase'l xestor d'arrinque en <strong>%1</strong>. Setting up mount points. Configurando los puntos de montaxe. FinishedPage Form Formulariu <Restart checkbox tooltip> <Restart checkbox tooltip> &Restart now &Reaniciar agora <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>Too fecho.</h1><br/>%1 configuróse nel ordenador.<br/>Agora pues usar el sistema nuevu. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <html><head/><body><p>Cuando se conseña esti caxellu, el sistema va reaniciase nel intre cuando calques en <span style="font-style:italic;">Fecho</span> o zarres el programa de configuración.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>Too fecho.</h1><br/>%1 instalóse nel ordenador.<br/>Agora pues renaiciar nel sistema nuevu o siguir usando l'entornu live de %2. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <html><head/><body><p>Cuando se conseña esti caxellu, el sistema va reaniciase nel intre cuando calques en <span style="font-style:italic;">Fecho</span> o zarres l'instalador.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Falló la configuración</h1><br/>%1 nun se configuró nel ordenador.<br/>El mensaxe de fallu foi: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Falló la instalación</h1><br/>%1 nun s'instaló nel ordenador.<br/>El mensaxe de fallu foi: %2. FinishedViewStep Finish Fin Setup Complete Configuración completada Installation Complete Instalación completada The setup of %1 is complete. La configuración de %1 ta completada. The installation of %1 is complete. Completóse la instalación de %1. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatting partition %1 with file system %2. Formatiando la partición %1 col sistema de ficheros %2. The installer failed to format partition %1 on disk '%2'. L'instalador falló al formatiar la partición %1 nel discu «%2». GeneralRequirements has at least %1 GiB available drive space tien polo menos %1 GiB d'espaciu disponible nel discu There is not enough drive space. At least %1 GiB is required. Nun hai espaciu abondu nel discu. Ríquense polo menos %1 GiB. has at least %1 GiB working memory tien polo menos %1 GiB memoria de trabayu The system does not have enough working memory. At least %1 GiB is required. El sistema nun tien abonda memoria de trabayu. Ríquense polo menos %1 GiB. is plugged in to a power source ta enchufáu a una fonte d'enerxía The system is not plugged in to a power source. El sistema nun ta enchufáu a una fonte d'enerxía. is connected to the Internet ta coneutáu a internet The system is not connected to the Internet. El sistema nun ta coneutáu a internet. is running the installer as an administrator (root) The setup program is not running with administrator rights. El programa de configuración nun ta executándose con drechos alministrativos. The installer is not running with administrator rights. L'instalador nun ta executándose con drechos alministrativos. has a screen large enough to show the whole installer The screen is too small to display the setup program. La pantalla ye mui pequeña como p'amosar el programa de configuración. The screen is too small to display the installer. La pantalla ye mui pequeña como p'amosar l'instalador. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Nun pudieron crease los direutorios <code>%1</code>. Could not open file <code>%1</code>. Nun pudo abrise'l ficheru <code>%1</code>. Could not write to file <code>%1</code>. Nun pudo escribise nel ficheru <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Konsole nun s'instaló Please install KDE Konsole and try again! ¡Instala Konsole y volvi tentalo! Executing script: &nbsp;<code>%1</code> Executando'l script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script Script KeyboardPage Set keyboard model to %1.<br/> Va afitase'l modelu del tecláu a %1.<br/> Set keyboard layout to %1/%2. Va afitase la distrubución del tecláu a %1/%2. KeyboardViewStep Keyboard Tecláu LCLocaleDialog System locale setting Axuste de la locale del sistema The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. L'axuste de la locale del sistema afeuta a la llingua y al conxuntu de caráuteres de dalgunos elementos de la interfaz d'usuariu en llinia de comandos. <br/>L'axuste actual ye <strong>%1</strong>. &Cancel &Encaboxar &OK &Aceutar LicensePage Form Formulariu <h1>License Agreement</h1> I accept the terms and conditions above. Aceuto los términos y condiciones d'enriba. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. Esti procedimientu va instalar software privativu que ta suxetu a términos de llicencia. If you do not agree with the terms, the setup procedure cannot continue. Si nun aceutes los términos, el procedimientu de configuración nun pue siguir. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Esti procedimientu de configuración pue instalar software privativu que ta suxetu a términos de llicencia pa fornir carauterístiques adicionales y ameyorar la esperiencia d'usuariu. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Si nun aceutes los términos, el software privativu nun va instalase y van usase les alternatives de códigu abiertu. LicenseViewStep License Llicencia LicenseWidget URL: %1 URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>Controlador %1</strong><br/>por %2 <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>Controlador gráficu %1</strong><br/><font color="Grey">por %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>Plugin de restolador %1</strong><br/><font color="Grey">por %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>Códec %1</strong><br/><font color="Grey">por %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>Paquete %1</strong><br/><font color="Grey">por %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">por %2</font> File: %1 Ficheru: %1 Show the license text Open license agreement in browser. Hide license text LocalePage The system language will be set to %1. La llingua del sistema va afitase a %1. The numbers and dates locale will be set to %1. La númberación y data van afitase en %1. Region: Rexón: Zone: Zona: &Change... &Camudar... Set timezone to %1/%2.<br/> Va afitase'l fusu horariu a %1/%2.<br/> LocaleViewStep Location Allugamientu LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Xeneración de machine-id. Configuration Error No root mount point is set for MachineId. NetInstallPage Name Nome Description Descripción Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Instalación per rede. (Desactivada: Nun pue dise en cata de les llistes de paquetes, comprueba la conexón a internet) Network Installation. (Disabled: Received invalid groups data) Instalación per rede. (Desactivada: Recibiéronse datos non válidos de grupos) Network Installation. (Disabled: Incorrect configuration) NetInstallViewStep Package selection Esbilla de paquetes Office software Software ofimáticu Office package Paquete ofimáticu Browser software Browser package Web browser Restolador web Kernel Kernel Services Servicios Login Desktop Escritoriu Applications Aplicaciones NotesQmlViewStep Notes Notes OEMPage Ba&tch: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> OEMViewStep OEM Configuration Set the OEM Batch Identifier to <code>%1</code>. PWQ Password is too short La contraseña ye percurtia Password is too long La contraseña ye perllarga Password is too weak La contraseña ye perfeble Memory allocation error when setting '%1' Fallu d'asignación de memoria al afitar «%1» Memory allocation error Fallu d'asignación de memoria The password is the same as the old one La contraseña ye la mesma que la vieya The password is a palindrome La contraseña ye un palíndromu The password differs with case changes only La contraseña namái s'estrema polos cambeos de mayúscules y minúscules The password is too similar to the old one La contraseña aseméyase muncho a la vieya The password contains the user name in some form La contraseña contién de dalgún mou'l nome d'usuariu The password contains words from the real name of the user in some form La contraseña contién de dalgún mou pallabres del nome real del usuariu The password contains forbidden words in some form La contraseña contién de dalgún mou pallabres prohibíes The password contains less than %1 digits La contraseña contién menos de %1 díxitos The password contains too few digits La contraseña contién prepocos díxitos The password contains less than %1 uppercase letters La contraseña contién menos de %1 lletres mayúscules The password contains too few uppercase letters La contraseña contién perpoques lletres mayúscules The password contains less than %1 lowercase letters La contraseña contién menos de %1 lletres minúscules The password contains too few lowercase letters La contraseña contién perpoques lletres minúscules The password contains less than %1 non-alphanumeric characters La contraseña contién menos de %1 caráuteres que nun son alfanumbéricos The password contains too few non-alphanumeric characters La contraseña contién perpocos caráuteres que nun son alfanumbéricos The password is shorter than %1 characters La contraseña tien menos de %1 caráuteres The password is too short La contraseña ye percurtia The password is just rotated old one La contraseña ye l'anterior pero al aviesu The password contains less than %1 character classes La contraseña contién menos de %1 clases de caráuteres The password does not contain enough character classes La contraseña nun contién abondes clases de caráuteres The password contains more than %1 same characters consecutively La contraseña contién más de %1 caráuteres iguales consecutivamente The password contains too many same characters consecutively La contraseña contién milenta caráuteres iguales consecutivamente The password contains more than %1 characters of the same class consecutively La contraseña contién más de %1 caráuteres de la mesma clas consecutivamente The password contains too many characters of the same class consecutively La contraseña contién milenta caráuteres de la mesma clas consecutivamente The password contains monotonic sequence longer than %1 characters La contraseña tien una secuencia monotónica de más de %1 caráuteres The password contains too long of a monotonic character sequence La contraseña contién una secuencia perllarga de caráuteres monotónicos No password supplied Nun s'apurrió denguna contraseña Cannot obtain random numbers from the RNG device Nun puen consiguise los númberos al debalu del preséu RNG Password generation failed - required entropy too low for settings Falló la xeneración de la contraseña - ríquese una entropía perbaxa pa los axustes The password fails the dictionary check - %1 La contraseña falla la comprobación del diccionariu - %1 The password fails the dictionary check La contraseña falla la comprobación del diccionariu Unknown setting - %1 Desconozse l'axuste - %1 Unknown setting Desconozse l'axuste Bad integer value of setting - %1 El valor enteru del axuste ye incorreutu - %1 Bad integer value El valor enteru ye incorreutu Setting %1 is not of integer type L'axuste %1 nun ye de la triba enteru Setting is not of integer type L'axuste nun ye de la triba enteru Setting %1 is not of string type L'axuste %1 nun ye de la triba cadena Setting is not of string type L'axuste nun ye de la triba cadena Opening the configuration file failed Falló l'apertura del ficheru de configuración The configuration file is malformed El ficheru de configuración ta malformáu Fatal failure Fallu fatal Unknown error Desconozse'l fallu Password is empty La contraseña ta balera PackageChooserPage Form Formulariu Product Name TextLabel Etiqueta de testu Long Product Description Package Selection Please pick a product from the list. The selected product will be installed. PackageChooserViewStep Packages Paquetes Page_Keyboard Form Formulariu Keyboard Model: Modelu del tecláu: Type here to test your keyboard Teclexa equí pa probar el tecláu Page_UserSetup Form Formulariu What is your name? ¿Cómo te llames? What name do you want to use to log in? ¿Qué nome quies usar p'aniciar sesión? Choose a password to keep your account safe. Escueyi una contraseña pa caltener segura la cuenta. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>Introduz la mesma contraseña dos vegaes pa que pueas comprobar los fallos d'escritura. Una contraseña bona contién un mestu de lletres, númberos y signos de puntuación, debería ser de polo menos ocho caráuteres de llargor y debería camudase davezu.</small> What is the name of this computer? ¿Cómo va llamase esti ordenador? Your Full Name login <small>This name will be used if you make the computer visible to others on a network.</small> <small>Esti nome va usase si quies facer qu'esti ordenador seya visible a otres máquines nuna rede.</small> Computer Name Password Contraseña Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Aniciar sesión automáticamente ensin pidir la contraseña. Use the same password for the administrator account. Usar la mesma contraseña pa la cuenta d'alministrador. Choose a password for the administrator account. Escueyi una contraseña pa la cuenta alministrativa. <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Introduz la mesma contraseña dos vegaes pa que pueas comprobar los fallos d'escritura.</small> PartitionLabelsView Root Raigañu Home Aniciu Boot Arrinque EFI system Sistema EFI Swap Intercambéu New partition for %1 Partición nueva pa %1 New partition Partición nueva %1 %2 size[number] filesystem[name] %1 de %2 PartitionModel Free Space Espaciu llibre New partition Partición nueva Name Nome File System Sistema de ficheros Mount Point Puntu de montaxe Size Tamañu PartitionPage Form Formulariu Storage de&vice: Preséu d'al&macenamientu: &Revert All Changes &Desfacer tolos cambeos New Partition &Table &Tabla de particiones nueva Cre&ate Cre&ar &Edit &Editar &Delete &Desaniciar New Volume Group Grupu nuevu Resize Volume Group Redimensionar el grupu Deactivate Volume Group Desactivar el grupu Remove Volume Group Desaniciar el grupu I&nstall boot loader on: I&nstalar el xestor d'arrinque en: Are you sure you want to create a new partition table on %1? ¿De xuru que quies crear una tabla de particiones nueva en %1? Can not create new partition Nun pue crease la partición nueva The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. La tabla de particiones en %1 yá tien %2 particiones primaries y nun puen amestase más. Desanicia una partición primaria y amiesta otra estendida. PartitionViewStep Gathering system information... Recoyendo la información del sistema... Partitions Particiones Install %1 <strong>alongside</strong> another operating system. Va instalase %1 <strong>xunto a</strong> otru sistema operativu. <strong>Erase</strong> disk and install %1. <strong>Va desaniciase</strong>'l discu y va instalase %1. <strong>Replace</strong> a partition with %1. <strong>Va trocase</strong> una partición con %1. <strong>Manual</strong> partitioning. Particionáu <strong>manual</strong>. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Va instalase %1 <strong>xunto a</strong> otru sistema operativu nel discu <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Va desaniciase</strong>'l discu <strong>%2</strong> (%3) y va instalase %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Va trocase</strong> una partición nel discu <strong>%2</strong> (%3) con %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Particionáu <strong>manual</strong> nel discu <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Discu <strong>%1</strong> (%2) Current: Anguaño: After: Dempués: No EFI system partition configured Nun se configuró denguna partición del sistema EFI An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. Precísase una partición del sistema EFI p'aniciar %1. <br/><br/>Pa configurar una, volvi atrás y esbilla o crea un sistema de ficheros en FAT32 cola bandera <strong>esp</strong> activada y el puntu de montaxe <strong>%2</strong>.<br/><br/>Pues siguir ensin configurar una partición del sistema EFI pero el sistema fallaría al aniciase. EFI system partition flag not set Nun s'afitó la bandera del sistema EFI An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Precísase una partición del sistema EFI p'aniciar %1.<br/><br/>Configuróse una partición col puntu de montaxe <strong>%2</strong> pero nun s'afitó la bandera <strong>esp</strong>. Pa facelo, volvi p'atrás y edita la partición.<br/><br/>Pues siguir ensin afitar esa bandera pero'l sistema fallaría al aniciar. Boot partition not encrypted La partición d'arrinque nun ta cifrada A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. Configuróse una partición d'arrinque xunto con una partición raigañu cifrada pero la partición d'arrinque nun ta cifrada.<br/><br/>Hai problemes de seguranza con esta triba de configuración porque los ficheros importantes del sistema caltiénense nuna partición ensin cifrar.<br/>Podríes siguir si quixeres pero'l desbloquéu del sistema de ficheros va asoceder más sero nel aniciu del sistema.<br/>Pa cifrar la partición raigañu, volvi p'atrás y recreala esbillando <strong>Cifrar</strong> na ventana de creación de particiones. has at least one disk device available. tien polo menos un preséu disponible d'almacenamientu There are no partitions to install on. Nun hai particiones nes qu'instalar. PlasmaLnfJob Plasma Look-and-Feel Job Trabayu Look-and-Feel de Plasma Could not select KDE Plasma Look-and-Feel package Nun pudo esbillase'l paquete Look-and-Feel de KDE Plasma PlasmaLnfPage Form Formulariu Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Escueyi un aspeutu pal escritoriu de KDE Plasma, por favor. Tamién pues saltar esti pasu y configurar l'aspeutu nel momentu que s'instale'l sistema. Calcando nun aspeutu, esti va date una previsualización en direuto de cómo se ve. PlasmaLnfViewStep Look-and-Feel Aspeutu PreserveFiles Saving files for later ... Guardando ficheros pa dempués... No files configured to save for later. Nun se configuraron ficheros pa guardar dempués. Not all of the configured files could be preserved. Nun pudieron caltenese tolos ficheros configuraos. ProcessResult There was no output from the command. El comandu nun produxo denguna salida. Output: Salida: External command crashed. El comandu esternu cascó. Command <i>%1</i> crashed. El comandu <i>%1</i> cascó. External command failed to start. El comandu esternu falló al aniciar. Command <i>%1</i> failed to start. El comandu <i>%1</i> falló al aniciar. Internal error when starting command. Fallu internu al aniciar el comandu. Bad parameters for process job call. Los parámetros son incorreutos pa la llamada del trabayu de procesos. External command failed to finish. El comandu esternu finó al finar. Command <i>%1</i> failed to finish in %2 seconds. El comandu <i>%1</i> falló al finar en %2 segundos. External command finished with errors. El comandu esternu finó con fallos. Command <i>%1</i> finished with exit code %2. El comandu <i>%1</i> finó col códigu de salida %2. QObject Default Keyboard Model Modelu predetermináu del telcáu Default Por defeutu unknown desconozse extended estendida unformatted ensin formatiar swap intercambéu Unpartitioned space or unknown partition table L'espaciu nun ta particionáu o nun se conoz la tabla de particiones (no mount point) Requirements checking for module <i>%1</i> is complete. Completóse la comprobación de requirimientos del módulu <i>%1</i> %1 (%2) language[name] (country[name]) %1 (%2) No product No description provided. File not found Path <pre>%1</pre> must be an absolute path. El camín <pre>%1</pre> ha ser absolutu. Could not create new random file <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Desaniciu del grupu de volúmenes %1. Remove Volume Group named <strong>%1</strong>. Va desaniciase'l grupu de volúmenes col nome <strong>%1</strong>. The installer failed to remove a volume group named '%1'. L'instalador falló al desaniciar un grupu de volúmenes col nome %1. ReplaceWidget Form Formulariu Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Esbilla ónde instalar %1.<br/><font color="red">Alvertencia:</font> esto va desaniciar tolos ficheros de la partición esbillada. The selected item does not appear to be a valid partition. L'elementu esbilláu nun paez ser una partición válida. %1 cannot be installed on empty space. Please select an existing partition. %1 nun pue instalase nel espaciu baleru. Esbilla una partición esistente, por favor. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 nun pue instalase nuna partición estendida. Esbilla una partición primaria o llóxica esistente, por favor. %1 cannot be installed on this partition. %1 nun pue instalase nesta partición. Data partition (%1) Partición de datos (%1) Unknown system partition (%1) Desconozse la partición del sistema (%1) %1 system partition (%2) Partición %1 del sistema (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>La partición %1 ye perpequeña pa %2. Esbilla una con una capacidá de polo menos %3GB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/>Nun pudo alcontrase per nenyures una partición del sistema EFI. Volvi p'atrás y usa'l particionáu manual pa configurar %1, por favor. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>%1 va instalase en %2.<br/><font color="red">Alvertencia: </font>van perdese tolos datos de la partición %2. The EFI system partition at %1 will be used for starting %2. La partición del sistema EFI en %1 va usase p'aniciar %2. EFI system partition: Partición del sistema EFI: ResizeFSJob Resize Filesystem Job Trabayu de redimensionáu de sistemes de ficheros Invalid configuration La configuración nun ye válida The file-system resize job has an invalid configuration and will not run. El trabayu de redimensionáu de sistemes de ficheros tien una configuración non válida y nun va executase. KPMCore not Available KPMCore nun ta disponible Calamares cannot start KPMCore for the file-system resize job. Calamares nun pue aniciar KPMCore pal trabayu de redimensionáu de sistemes de ficheros. Resize Failed Falló'l redimensionáu The filesystem %1 could not be found in this system, and cannot be resized. Nun pudo alcontrase nel sistema'l sistema de ficheros %1 y nun pue redimensionase. The device %1 could not be found in this system, and cannot be resized. Nun pudo alcontrase nel sistema'l preséu %1 y nun pue redimensionase. The filesystem %1 cannot be resized. El sistema de ficheros %1 nun pue redimensionase. The device %1 cannot be resized. El preséu %1 nun pue redimensionase. The filesystem %1 must be resized, but cannot. El sistema de ficheros %1 ha redimensionase, pero nun se pue. The device %1 must be resized, but cannot El preséu %1 ha redimensionase, pero nun se pue ResizePartitionJob Resize partition %1. Redimensión de la partición %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. L'instalador falló al redimensionar la partición %1 nel discu «%2». ResizeVolumeGroupDialog Resize Volume Group Redimensionar el grupu ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Redimensionáu del grupu de volúmenes col nome %1 de %2 a %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. Va redimensionase'l grupu de volúmenes col nome <strong>%1</strong> de <strong>%2</strong> a <strong>%3</strong>. The installer failed to resize a volume group named '%1'. L'instalador falló al redimensionar un grupu de volúmenes col nome «%1». ResultsListDialog For best results, please ensure that this computer: Pa los meyores resultaos, asegúrate qu'esti ordenador: System requirements Requirimientos del sistema ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> Esti ordenador nun satisfaz dalgún de los requirimientos mínimos pa configurar %1.<br/>La configuración nun pue siguir. <a href="#details">Detalles...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> Esti ordenador nun satisfaz los requirimientos mínimos pa instalar %1.<br/>La instalación nun pue siguir. <a href="#details">Detalles...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. Esti ordenador nun satisfaz dalgún de los requirimientos aconseyaos pa configurar %1.<br/>La configuración pue siguir pero dalgunes carauterístiques podríen desactivase. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. Esti ordenador nun satisfaz dalgún requirimientu aconseyáu pa instalar %1.<br/>La instalación pue siguir pero podríen desactivase dalgunes carauterístiques. This program will ask you some questions and set up %2 on your computer. Esti programa va facete dalgunes entrugues y va configurar %2 nel ordenador. ScanningDialog Scanning storage devices... Escaniando preseos d'almacenamientu... Partitioning Particionáu SetHostNameJob Set hostname %1 Afitamientu del nome d'agospiu a %1 Set hostname <strong>%1</strong>. Va afitase'l nome d'agospiu <strong>%1</strong>. Setting hostname %1. Afitando'l nome d'agospiu %1. Internal Error Fallu internu Cannot write hostname to target system Nun pue escribise'l nome d'agospiu nel sistema de destín SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Afitamientu del modelu del tecláu a %1, distribución %2-%3 Failed to write keyboard configuration for the virtual console. Fallu al escribir la configuración del tecláu pa la consola virtual. Failed to write to %1 Fallu al escribir en %1 Failed to write keyboard configuration for X11. Fallu al escribir la configuración del tecláu pa X11. Failed to write keyboard configuration to existing /etc/default directory. Fallu al escribir la configuración del tecláu nel direutoriu esistente de /etc/default . SetPartFlagsJob Set flags on partition %1. Afitamientu de banderes na partición %1. Set flags on %1MiB %2 partition. Set flags on new partition. Afitamientu de banderes na partición nueva. Clear flags on partition <strong>%1</strong>. Van llimpiase les banderes de la partición <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Llimpieza de les banderes de la partición nueva. Flag partition <strong>%1</strong> as <strong>%2</strong>. Va afitase la bandera <strong>%2</strong> na partición <strong>%1</strong>. Flag new partition as <strong>%1</strong>. Va afitase la bandera <strong>%1</strong> na partición nueva. Clearing flags on partition <strong>%1</strong>. Llimpiando les banderes de la partición <strong>%1</strong>. Clearing flags on new partition. Llimpiando les banderes de la partición nueva. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Afitando les banderes <strong>%2</strong> na partición <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. Afitando les banderes <strong>%1</strong> na partición nueva. The installer failed to set flags on partition %1. L'instalador falló al afitar les banderes na partición %1. SetPasswordJob Set password for user %1 Afitamientu de la contraseña del usuariu %1 Setting password for user %1. Afitando la contraseña del usuariu %1. Bad destination system path. El camín del sistema de destín ye incorreutu. rootMountPoint is %1 rootMountPoint ye %1 Cannot disable root account. Nun pue desactivase la cuenta root. passwd terminated with error code %1. passwd terminó col códigu de fallu %1. Cannot set password for user %1. Nun pue afitase la contraseña del usuariu %1. usermod terminated with error code %1. usermod terminó col códigu de fallu %1. SetTimezoneJob Set timezone to %1/%2 Afitamientu del fusu horariu a %1/%2 Cannot access selected timezone path. Nun pue accedese al camín del fusu horariu esbilláu. Bad path: %1 Camín incorreutu: %1 Cannot set timezone. Nun pue afitase'l fusu horariu. Link creation failed, target: %1; link name: %2 Falló la creación del enllaz, destín: %1 ; nome del enllaz: %2 Cannot set timezone, Nun pue afitase'l fusu horariu, Cannot open /etc/timezone for writing Nun pue abrise /etc/timezone pa la escritura ShellProcessJob Shell Processes Job Trabayu de procesos de la shell SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage This is an overview of what will happen once you start the setup procedure. Esto ye una previsualización de lo que va asoceder nel momentu qu'anicies el procesu de configuración. This is an overview of what will happen once you start the install procedure. Esto ye una previsualización de lo que va asoceder nel momentu qu'anicies el procesu d'instalación. SummaryViewStep Summary Sumariu TrackingInstallJob Installation feedback Instalación del siguimientu Sending installation feedback. Unviando'l siguimientu de la instalación. Internal error in install-tracking. Fallu internu n'install-tracking. HTTP request timed out. Escosó'l tiempu d'espera de la solicitú HTTP. TrackingMachineNeonJob Machine feedback Siguimientu de la máquina Configuring machine feedback. Configurando'l siguimientu de la máquina. Error in machine feedback configuration. Fallu na configuración del siguimientu de la máquina. Could not configure machine feedback correctly, script error %1. Nun pudo configurase afayadizamente'l siguimientu de la máquina, fallu del script %1. Could not configure machine feedback correctly, Calamares error %1. Nun pudo configurase afayadizamente'l siguimientu de la máquina, fallu de Calamares %1. TrackingPage Form Formulariu Placeholder Espaciu acutáu <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>Esbillando esto, <span style=" font-weight:600;">nun vas unviar denguna información</span> tocante a la instalación.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Calca equí pa más información tocante al siguimientu d'usuarios</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. Instalar el rastrexu ayuda a %1 a saber cuantos usuarios tien, el hardware qu'usen pa instalar %1 y (coles dos opciones d'embaxo), consiguir información continua tocante a les aplicaciones preferíes. Pa ver lo que va unviase, calca l'iconu d'ayuda al llau de cada área. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. Esbillando esto vas unviar la información tocante a la instalación y el hardware. Esta información <b>namái va unviase una vegada</b> tres finar la instalación. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. Esbillando esto vas unviar <b>dacuando</b> la información tocante a la instalación, el hardware y les aplicaciones a %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. Esbillando esto vas unviar <b>davezu</b> la información tocante a la instalación, el hardware, les aplicaciones y los patrones d'usu a %1. TrackingViewStep Feedback Siguimientu UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Si va usar l'ordenador más d'una persona, pues crear más cuentes tres la configuración.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Si va usar l'ordenador más d'una persona, pues crear más cuentes tres la instalación.</small> Your username is too long. El nome d'usuariu ye perllargu. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Only letters, numbers, underscore and hyphen are allowed. Your hostname is too short. El nome d'agospiu ye percurtiu. Your hostname is too long. El nome d'agospiu ye perllargu. Your passwords do not match! ¡Les contraseñes nun concasen! UsersViewStep Users Usuarios VariantModel Key Value Valor VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Llista de volúmenes físicos Volume Group Name: Nome del grupu de volúmenes: Volume Group Type: Triba del grupu de volúmenes: Physical Extent Size: Tamañu físicu d'estensión: MiB MiB Total Size: Tamañu total: Used Size: Tamañu usáu: Total Sectors: Seutores totales: Quantity of LVs: Cantidá de volúmenes llóxicos: WelcomePage Form Formulariu Select application and system language Open donations website &Donate Open help and support website Open issues and bug-tracking website Open release notes website &Release notes Notes de &llanzamientu &Known issues &Problemes conocíos &Support &Sofitu &About &Tocante a <h1>Welcome to the %1 installer.</h1> <h1>Afáyate nel instalador de %1.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Afáyate nel instalador Calamares de %1.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Afáyate nel programa de configuración de Calamares pa %1.</h1> <h1>Welcome to %1 setup.</h1> <h1>Afáyate na configuración de %1.</h1> About %1 setup Tocante a la configuración de %1 About %1 installer Tocante al instalador de %1 <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. <h1>%1</h1><br/><strong>%2<br/>pa %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Gracies al <a href="https://calamares.io/team/">equipu de Calamares</a> y l'<a href="https://www.transifex.com/calamares/calamares/">equipu de traductores de Calamares</a>.<br/><br/> El desendolcu de <a href="https://calamares.io/">Calamares</a> patrocínalu <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support Sofitu de %1 WelcomeQmlViewStep Welcome Acoyida WelcomeViewStep Welcome Acoyida notesqml <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> <h3>%1 <quote>%2</quote></h3> About Support Known issues Problemes conocíos Release notes Notes del llanzamientu Donate calamares-3.2.20/lang/calamares_be.ts000066400000000000000000004600361362604102500174250ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. BootLoaderModel Master Boot Record of %1 Галоўны загрузачны Ð·Ð°Ð¿Ñ–Ñ %1 Boot Partition Загрузачны раздзел System Partition СіÑÑ‚Ñмны раздзел Do not install a boot loader Ðе ÑžÑталёўваць загрузчык %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page ПуÑÑ‚Ð°Ñ Ñтаронка Calamares::DebugWindow Form Форма GlobalStorage Глабальнае Ñховішча JobQueue Чарга задач Modules Модулі Type: Тып: none нÑма Interface: ІнтÑрфейÑ: Tools ІнÑтрументы Reload Stylesheet Перазагрузіць табліцу ÑтылÑÑž Widget Tree ДрÑва віджÑтаў Debug information ÐÐ´Ð»Ð°Ð´Ð°Ñ‡Ð½Ð°Ñ Ñ–Ð½Ñ„Ð°Ñ€Ð¼Ð°Ñ†Ñ‹Ñ Calamares::ExecutionViewStep Set up Ðаладзіць Install УÑталÑваць Calamares::FailJob Job failed (%1) Задача Ñхібіла (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Calamares::PythonJob Running %1 operation. Bad working directory path Working directory %1 for python job %2 is not readable. Bad main script file Main script file %1 for python job %2 is not readable. Boost.Python error in job "%1". Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager &Back &Next &Cancel Cancel setup without changing the system. Cancel installation without changing the system. Setup Failed Would you like to paste the install log to the web? Install Log Paste URL The upload was unsuccessful. No web-paste was done. Calamares Initialization Failed %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. <br/>The following modules could not be loaded: Continue with installation? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Set up &Install Setup is complete. Close the setup program. Cancel setup? Cancel installation? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. &Yes &No &Close Continue with setup? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> &Install now Go &back &Done The installation is complete. Close the installer. Error Installation Failed CalamaresPython::Helper Unknown exception type unparseable Python error unparseable Python traceback Unfetchable Python error. CalamaresUtils Install log posted to: %1 CalamaresWindow %1 Setup Program %1 Installer Show debug information CheckerContainer Gathering system information... ChoicePage Form Форма After: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Boot loader location: Select storage de&vice: Current: Reuse %1 as home partition for %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. <strong>Select a partition to install on</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. The EFI system partition at %1 will be used for starting %2. EFI system partition: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. No Swap Reuse Swap Swap (no Hibernate) Swap (with Hibernate) Swap to file <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. ClearMountsJob Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 ClearTempMountsJob Clear all temporary mounts. Clearing all temporary mounts. Cannot get list of temporary mounts. Cleared all temporary mounts. CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition MiB Partition &Type: &Primary E&xtended Fi&le System: LVM LV name Flags: &Mount Point: Si&ze: En&crypt Logical Primary GPT Mountpoint already in use. Please select another one. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. The installer failed to create partition on disk '%1'. CreatePartitionTableDialog Create Partition Table Creating a new partition table will delete all existing data on the disk. What kind of partition table do you want to create? Master Boot Record (MBR) GUID Partition Table (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Creating new %1 partition table on %2. The installer failed to create a partition table on %1. CreateUserJob Create user %1 Create user <strong>%1</strong>. Creating user %1. Sudoers dir is not writable. Cannot create sudoers file for writing. Cannot chmod sudoers file. Cannot open groups file for reading. CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. Delete partition <strong>%1</strong>. Deleting partition %1. The installer failed to delete partition %1. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. This device has a <strong>%1</strong> partition table. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - (%2) device[name] - (device-node[name]) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Failed to open %1 DummyCppJob Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Content: &Keep Format Warning: Formatting the partition will erase all existing data. &Mount Point: Si&ze: MiB Fi&le System: Flags: Mountpoint already in use. Please select another one. EncryptWidget Form Форма En&crypt system Passphrase Confirm passphrase Please enter the same passphrase in both boxes. FillGlobalStorageJob Set partition information Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Install boot loader on <strong>%1</strong>. Setting up mount points. FinishedPage Form Форма <Restart checkbox tooltip> &Restart now <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. FinishedViewStep Finish Setup Complete Installation Complete The setup of %1 is complete. The installation of %1 is complete. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatting partition %1 with file system %2. The installer failed to format partition %1 on disk '%2'. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source The system is not plugged in to a power source. is connected to the Internet The system is not connected to the Internet. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Please install KDE Konsole and try again! Executing script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script KeyboardPage Set keyboard model to %1.<br/> Set keyboard layout to %1/%2. KeyboardViewStep Keyboard LCLocaleDialog System locale setting The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. &Cancel &OK LicensePage Form Форма <h1>License Agreement</h1> I accept the terms and conditions above. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> File: %1 Show the license text Open license agreement in browser. Hide license text LocalePage The system language will be set to %1. The numbers and dates locale will be set to %1. Region: Zone: &Change... Set timezone to %1/%2.<br/> LocaleViewStep Location LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Стварыць machine-id. Configuration Error Памылка канфігурацыі No root mount point is set for MachineId. NetInstallPage Name Description Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Incorrect configuration) NetInstallViewStep Package selection Office software Office package Browser software Browser package Web browser Kernel Services Login Desktop Applications NotesQmlViewStep Notes OEMPage Ba&tch: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> OEMViewStep OEM Configuration Set the OEM Batch Identifier to <code>%1</code>. PWQ Password is too short Password is too long Password is too weak Memory allocation error when setting '%1' Memory allocation error The password is the same as the old one The password is a palindrome The password differs with case changes only The password is too similar to the old one The password contains the user name in some form The password contains words from the real name of the user in some form The password contains forbidden words in some form The password contains less than %1 digits The password contains too few digits The password contains less than %1 uppercase letters The password contains too few uppercase letters The password contains less than %1 lowercase letters The password contains too few lowercase letters The password contains less than %1 non-alphanumeric characters The password contains too few non-alphanumeric characters The password is shorter than %1 characters The password is too short The password is just rotated old one The password contains less than %1 character classes The password does not contain enough character classes The password contains more than %1 same characters consecutively The password contains too many same characters consecutively The password contains more than %1 characters of the same class consecutively The password contains too many characters of the same class consecutively The password contains monotonic sequence longer than %1 characters The password contains too long of a monotonic character sequence No password supplied Cannot obtain random numbers from the RNG device Password generation failed - required entropy too low for settings The password fails the dictionary check - %1 The password fails the dictionary check Unknown setting - %1 Unknown setting Bad integer value of setting - %1 Bad integer value Setting %1 is not of integer type Setting is not of integer type Setting %1 is not of string type Setting is not of string type Opening the configuration file failed The configuration file is malformed Fatal failure Unknown error Password is empty PackageChooserPage Form Форма Product Name TextLabel Long Product Description Package Selection Please pick a product from the list. The selected product will be installed. PackageChooserViewStep Packages Page_Keyboard Form Форма Keyboard Model: Type here to test your keyboard Page_UserSetup Form Форма What is your name? What name do you want to use to log in? Choose a password to keep your account safe. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> What is the name of this computer? Your Full Name login <small>This name will be used if you make the computer visible to others on a network.</small> Computer Name Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Use the same password for the administrator account. Choose a password for the administrator account. <small>Enter the same password twice, so that it can be checked for typing errors.</small> PartitionLabelsView Root Home Boot EFI system Swap New partition for %1 New partition %1 %2 size[number] filesystem[name] PartitionModel Free Space New partition Name File System Mount Point Size PartitionPage Form Форма Storage de&vice: &Revert All Changes New Partition &Table Cre&ate &Edit &Delete New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group I&nstall boot loader on: Are you sure you want to create a new partition table on %1? Can not create new partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. PartitionViewStep Gathering system information... Partitions Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <strong>Replace</strong> a partition with %1. <strong>Manual</strong> partitioning. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Current: After: No EFI system partition configured An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. EFI system partition flag not set An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form Форма Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: External command crashed. Command <i>%1</i> crashed. External command failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Bad parameters for process job call. External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Command <i>%1</i> finished with exit code %2. QObject Default Keyboard Model Default unknown extended unformatted swap Unpartitioned space or unknown partition table (no mount point) Requirements checking for module <i>%1</i> is complete. %1 (%2) language[name] (country[name]) %1 (%2) No product No description provided. File not found Path <pre>%1</pre> must be an absolute path. Could not create new random file <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form Форма Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. The selected item does not appear to be a valid partition. %1 cannot be installed on empty space. Please select an existing partition. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 cannot be installed on this partition. Data partition (%1) Unknown system partition (%1) %1 system partition (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. The EFI system partition at %1 will be used for starting %2. EFI system partition: ResizeFSJob Resize Filesystem Job Invalid configuration The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. ResizeVolumeGroupDialog Resize Volume Group ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: System requirements ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. This program will ask you some questions and set up %2 on your computer. ScanningDialog Scanning storage devices... Partitioning SetHostNameJob Set hostname %1 Set hostname <strong>%1</strong>. Setting hostname %1. Internal Error Cannot write hostname to target system SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Failed to write keyboard configuration for the virtual console. Failed to write to %1 Failed to write keyboard configuration for X11. Failed to write keyboard configuration to existing /etc/default directory. SetPartFlagsJob Set flags on partition %1. Set flags on %1MiB %2 partition. Set flags on new partition. Clear flags on partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag new partition as <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. SetPasswordJob Set password for user %1 Setting password for user %1. Bad destination system path. rootMountPoint is %1 Cannot disable root account. passwd terminated with error code %1. Cannot set password for user %1. usermod terminated with error code %1. SetTimezoneJob Set timezone to %1/%2 Cannot access selected timezone path. Bad path: %1 Cannot set timezone. Link creation failed, target: %1; link name: %2 Cannot set timezone, Cannot open /etc/timezone for writing ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) SummaryPage This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. SummaryViewStep Summary TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingMachineNeonJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form Форма Placeholder <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. TrackingViewStep Feedback UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> Your username is too long. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Only letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Your hostname is too long. Your passwords do not match! UsersViewStep Users VariantModel Key Value VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB Total Size: Used Size: Total Sectors: Quantity of LVs: WelcomePage Form Форма Select application and system language Open donations website &Donate Open help and support website Open issues and bug-tracking website Open release notes website &Release notes &Known issues &Support &About <h1>Welcome to the %1 installer.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Welcome to %1 setup.</h1> About %1 setup About %1 installer <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support WelcomeQmlViewStep Welcome WelcomeViewStep Welcome notesqml <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> About Support Known issues Release notes Donate calamares-3.2.20/lang/calamares_bg.ts000066400000000000000000005536541362604102500174400ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. <strong>Среда за начално зареждане</strong> на тази ÑиÑтема.<br><br>Старите x86 ÑиÑтеми поддържат Ñамо <strong>BIOS</strong>.<br>Модерните ÑиÑтеми обикновено използват <strong>EFI</strong>, но може Ñъщо така да използват BIOS, ако Ñа Ñтартирани в режим на ÑъвмеÑтимоÑÑ‚. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. Тази ÑиÑтема беше Ñтартирана Ñ <strong>EFI</strong> Ñреда за начално зареждане.<br><br>За да Ñе наÑтрои Ñтартирането от EFI, инÑталаторът трÑбва да разположи програма за начално зареждане като <strong>GRUB</strong> или <strong>systemd-boot</strong> на <strong>EFI СиÑтемен ДÑл</strong>. Това Ñе прави автоматично, оÑвен ако не Ñе избере ръчно поделÑне, в такъв Ñлучай вие трÑбва да Ñвършите тази работа. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. Тази ÑиÑтема беше Ñтартирана Ñ <strong>BIOS</strong> Ñреда за начално зареждане.<br><br>За да Ñе наÑтрои Ñтартирането от BIOS, инÑталаторът трÑбва да разположи програма за начално зареждане като <strong>GRUB</strong> в началото на дÑла или на <strong>Сектора за Ðачално Зареждане</strong> близо до началото на таблицата на дÑловете (предпочитано). Това Ñе прави автоматично, оÑвен ако не Ñе избере ръчно поделÑне, в такъв Ñлучай вие трÑбва да Ñвършите тази работа. BootLoaderModel Master Boot Record of %1 Сектор за начално зареждане на %1 Boot Partition ДÑл за начално зареждане System Partition СиÑтемен дÑл Do not install a boot loader Ðе инÑталирай програма за начално зареждане %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page Празна Ñтраница Calamares::DebugWindow Form Форма GlobalStorage Глобално Ñъхранение JobQueue Опашка от задачи Modules Модули Type: Вид: none нÑма Interface: ИнтерфейÑ: Tools ИнÑтрументи Reload Stylesheet Widget Tree Debug information Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° отÑтранÑване на грешки Calamares::ExecutionViewStep Set up Install ИнÑталирай Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Готово Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 ИзпълнÑване на команда %1 %2 Calamares::PythonJob Running %1 operation. Изпълнение на %1 операциÑ. Bad working directory path Ðевалиден път на работната Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Working directory %1 for python job %2 is not readable. Работна Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ %1 за python задача %2 не Ñе чете. Bad main script file Ðевалиден файл на главен Ñкрипт Main script file %1 for python job %2 is not readable. Файлът на главен Ñкрипт %1 за python задача %2 не Ñе чете. Boost.Python error in job "%1". Boost.Python грешка в задача "%1". Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager &Back &Ðазад &Next &Ðапред &Cancel &Отказ Cancel setup without changing the system. Cancel installation without changing the system. Отказ от инÑталациÑта без промÑна на ÑиÑтемата. Setup Failed Would you like to paste the install log to the web? Install Log Paste URL The upload was unsuccessful. No web-paste was done. Calamares Initialization Failed ИнициализациÑта на Calamares Ñе провали %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. %1 не може да Ñе инÑталира. Calamares не можа да зареди вÑичките конфигурирани модули. Това е проблем Ñ Ð½Ð°Ñ‡Ð¸Ð½Ð°, по който Calamares е използван от диÑтрибуциÑта. <br/>The following modules could not be loaded: <br/>Следните модули не могат да Ñе заредÑÑ‚: Continue with installation? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Set up &Install &ИнÑталирай Setup is complete. Close the setup program. Cancel setup? Cancel installation? ОтмÑна на инÑталациÑта? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. ÐаиÑтина ли иÑкате да отмените текущиÑÑ‚ Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð½Ð° инÑталиране? ИнÑталатора ще прекъÑне и вÑичките промени ще бъдат загубени. &Yes &Да &No &Ðе &Close &Затвори Continue with setup? Продължаване? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> ИнÑталатора на %1 ще направи промени по Ð²Ð°ÑˆÐ¸Ñ Ð´Ð¸Ñк за да инÑталира %2. <br><strong>Промените ще бъдат окончателни.</strong> &Install now &ИнÑталирай Ñега Go &back Ð’&ръщане &Done &Готово The installation is complete. Close the installer. ИнÑталациÑта е завършена. Затворете инÑталаторa. Error Грешка Installation Failed ÐеуÑпешна инÑÑ‚Ð°Ð»Ð°Ñ†Ð¸Ñ CalamaresPython::Helper Unknown exception type ÐеизвеÑтен тип изключение unparseable Python error неанализируема грешка на Python unparseable Python traceback неанализируемо проÑледÑване на Python Unfetchable Python error. ÐедоÑтъпна грешка на Python. CalamaresUtils Install log posted to: %1 CalamaresWindow %1 Setup Program %1 Installer %1 ИнÑталатор Show debug information Покажи Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° отÑтранÑване на грешки CheckerContainer Gathering system information... Събиране на ÑиÑтемна информациÑ... ChoicePage Form Форма After: След: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>СамоÑтоÑтелно поделÑне</strong><br/>Можете да Ñъздадете или преоразмерите дÑловете Ñами. Boot loader location: Ð›Ð¾ÐºÐ°Ñ†Ð¸Ñ Ð½Ð° програмата за начално зареждане: Select storage de&vice: Изберете уÑ&тройÑтво за Ñъхранение: Current: Сегашен: Reuse %1 as home partition for %2. Използване на %1 като домашен дÑл за %2 <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Изберете дÑл за ÑмалÑване, поÑле влачете долната лента за преоразмерÑване</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. <strong>Select a partition to install on</strong> <strong>Изберете дÑл за инÑталациÑта</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. EFI ÑиÑтемен дÑл не е намерен. МолÑ, опитайте пак като използвате ръчно поделÑне за %1. The EFI system partition at %1 will be used for starting %2. EFI ÑиÑтемен дÑл в %1 ще бъде използван за Ñтартиране на %2. EFI system partition: EFI ÑиÑтемен дÑл: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Това уÑтройÑтво за Ñъхранение нÑма инÑталирана операционна ÑиÑтема. Какво ще правите?<br/>Ще може да прегледате и потвърдите избора Ñи, преди да Ñе направÑÑ‚ промени по уÑтройÑтвото за Ñъхранение. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Изтриване на диÑка</strong><br/>Това ще <font color="red">изтрие</font> вÑички данни върху уÑтройÑтвото за Ñъхранение. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Това уÑтройÑтво за Ñъхранение има инÑталиран %1. Какво ще правите?<br/>Ще може да прегледате и потвърдите избора Ñи, преди да Ñе направÑÑ‚ промени по уÑтройÑтвото за Ñъхранение. No Swap Reuse Swap Swap (no Hibernate) Swap (with Hibernate) Swap to file <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>ИнÑталирайте покрай</strong><br/>ИнÑталатора ще раздроби дÑла за да направи мÑÑто за %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Замени дÑл</strong><br/>Ð—Ð°Ð¼ÐµÐ½Ñ Ñ‚Ð¾Ð·Ð¸ дÑл Ñ %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Това уÑтройÑтво за Ñъхранение има инÑталирана операционна ÑиÑтема. Какво ще правите?<br/>Ще може да прегледате и потвърдите избора Ñи, преди да Ñе направÑÑ‚ промени по уÑтройÑтвото за Ñъхранение. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Това уÑтройÑтво за Ñъхранение има инÑталирани операционни ÑиÑтеми. Какво ще правите?<br/>Ще може да прегледате и потвърдите избора Ñи, преди да Ñе направÑÑ‚ промени по уÑтройÑтвото за Ñъхранение. ClearMountsJob Clear mounts for partitioning operations on %1 РазчиÑти монтираниÑта за операциите на подÑлбата на %1 Clearing mounts for partitioning operations on %1. РазчиÑтване на монтираниÑта за операциите на подÑлбата на %1 Cleared all mounts for %1 РазчиÑтени вÑички Ð¼Ð¾Ð½Ñ‚Ð¸Ñ€Ð°Ð½Ð¸Ñ Ð·Ð° %1 ClearTempMountsJob Clear all temporary mounts. РазчиÑти вÑички временни монтираниÑ. Clearing all temporary mounts. РазчиÑтване на вÑички временни монтираниÑ. Cannot get list of temporary mounts. Ðе може да Ñе вземе лиÑÑ‚ от временни монтираниÑ. Cleared all temporary mounts. РазчиÑтени вÑички временни монтираниÑ. CommandList Could not run command. Командата не може да Ñе изпълни. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. Командата Ñе изпълнÑва в Ñредата на хоÑта и трÑбва да уÑтанови меÑтоположението на оÑÐ½Ð¾Ð²Ð½Ð¸Ñ Ð´Ñл, но rootMountPoint не е определен. The command needs to know the user's name, but no username is defined. Командата трÑбва да уÑтанови потребителÑкото име на профила, но такова не е определено. ContextualProcessJob Contextual Processes Job Задача Ñ ÐºÐ¾Ð½Ñ‚ÐµÐºÑтуални процеÑи CreatePartitionDialog Create a Partition Създай дÑл MiB MiB Partition &Type: &Тип на дÑла: &Primary &ОÑновен E&xtended Р&азширен Fi&le System: Фа&йлова ÑиÑтема: LVM LV name LVM LV име Flags: Флагове: &Mount Point: Точка на &монтиране: Si&ze: Раз&мер: En&crypt Ши&фриране Logical ЛогичеÑка Primary Главна GPT GPT Mountpoint already in use. Please select another one. Точката за монтиране вече Ñе използва. ÐœÐ¾Ð»Ñ Ð¸Ð·Ð±ÐµÑ€ÐµÑ‚Ðµ друга. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. Създаване на нов %1 дÑл върху %2. The installer failed to create partition on disk '%1'. ИнÑталатора не уÑÐ¿Ñ Ð´Ð° Ñъздаде дÑл върху диÑк '%1'. CreatePartitionTableDialog Create Partition Table Създай таблица на дÑловете Creating a new partition table will delete all existing data on the disk. Създаването на нова таблица на дÑловете ще изтрие вÑички ÑъщеÑтвуващи данни на диÑка. What kind of partition table do you want to create? Какъв тип таблица на дÑловете иÑкате да Ñъздадете? Master Boot Record (MBR) Сектор за начално зареждане (MBR) GUID Partition Table (GPT) GUID Таблица на дÑловете (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Създай нова %1 таблица на дÑловете върху %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Създай нова <strong>%1</strong> таблица на дÑловете върху <strong>%2</strong> (%3). Creating new %1 partition table on %2. Създаване на нова %1 таблица на дÑловете върху %2. The installer failed to create a partition table on %1. ИнÑталатора не можа да Ñъздаде таблица на дÑловете върху %1. CreateUserJob Create user %1 Създай потребител %1 Create user <strong>%1</strong>. Създай потребител <strong>%1</strong>. Creating user %1. Създаване на потребител %1. Sudoers dir is not writable. ДиректориÑта sudoers е незапиÑваема. Cannot create sudoers file for writing. Ðе може да Ñе Ñъздаде sudoers файл за запиÑване. Cannot chmod sudoers file. Ðе може да Ñе изпълни chmod върху sudoers файла. Cannot open groups file for reading. Ðе може да Ñе отвори файла на групите за четене. CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. Изтрий дÑл %1. Delete partition <strong>%1</strong>. Изтриване на дÑл <strong>%1</strong>. Deleting partition %1. Изтриване на дÑл %1. The installer failed to delete partition %1. ИнÑталатора не уÑÐ¿Ñ Ð´Ð° изтрие дÑл %1. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. Типа на <strong>таблицата на дÑловете</strong> на избраното уÑтройÑтво за Ñъхранение.<br><br>ЕдинÑÑ‚Ð²ÐµÐ½Ð¸Ñ Ð½Ð°Ñ‡Ð¸Ð½ да Ñе промени е като Ñе изчиÑти и преÑъздаде таблицата на дÑловете, като по този начин вÑички данни върху уÑтройÑтвото ще бъдат унищожени.<br>ИнÑталатора ще запази Ñегашната таблица на дÑловете, оÑвен ако не изберете обратното.<br>Ðко не Ñте Ñигурни - за модерни ÑиÑтеми Ñе препоръчва GPT. This device has a <strong>%1</strong> partition table. УÑтройÑтвото има <strong>%1</strong> таблица на дÑловете. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. Това е <strong>loop</strong> уÑтройÑтво.<br><br>ПредÑтавлÑва пÑевдо-уÑтройÑтво, без таблица на дÑловете, което прави файловете доÑтъпни като блок уÑтройÑтва. Обикновено Ñъдържа Ñамо една файлова ÑиÑтема. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. ИнÑталатора <strong>не може да открие таблица на дÑловете</strong> на избраното уÑтройÑтво за Ñъхранение.<br><br>Таблицата на дÑловете липÑва, повредена е или е от неизвеÑтен тип.<br>ИнÑталатора може да Ñъздаде нова таблица на дÑловете автоматично или ръчно, чрез програмата за подÑлба. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Това е препоръчаниÑÑ‚ тип на таблицата на дÑловете за модерни ÑиÑтеми, които Ñтартират от <strong>EFI</strong> Ñреда за начално зареждане. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. <br><br>Тази таблица на дÑловете е препоръчителна Ñамо за Ñтари ÑиÑтеми, които Ñтартират Ñ <strong>BIOS</strong> Ñреда за начално зареждане. GPT е препоръчителна в повечето Ñлучаи.<br><br><strong>Внимание:</strong> MBR таблица на дÑловете е оÑтарÑл Ñтандарт от времето на MS-DOS.<br>Само 4 <em>главни</em> дÑла могат да бъдат Ñъздадени и от Ñ‚ÑÑ… Ñамо един може да е <em>разширен</em> дÑл, който може да Ñъдържа много <em>логичеÑки</em> дÑлове. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Запиши LUKS ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð·Ð° Dracut на %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted ПропуÑни запиÑването на LUKS ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð·Ð° Dracut: "/" дÑл не е шифриран Failed to open %1 ÐеуÑпешно отварÑне на %1 DummyCppJob Dummy C++ Job Фиктивна С++ задача EditExistingPartitionDialog Edit Existing Partition Редактирай ÑъщеÑтвуващ дÑл Content: Съдържание: &Keep &Запази Format Форматирай Warning: Formatting the partition will erase all existing data. Предупреждение: Форматирането на дÑлът ще изтрие вÑички ÑъщеÑтвуващи данни. &Mount Point: &Точка на монтиране: Si&ze: Раз&мер: MiB MiB Fi&le System: Фа&йлова ÑиÑтема: Flags: Флагове: Mountpoint already in use. Please select another one. Точката за монтиране вече Ñе използва. ÐœÐ¾Ð»Ñ Ð¸Ð·Ð±ÐµÑ€ÐµÑ‚Ðµ друга. EncryptWidget Form Форма En&crypt system Крип&тиране на ÑиÑтемата Passphrase Парола Confirm passphrase Потвърди паролата Please enter the same passphrase in both boxes. МолÑ, въведете еднаква парола в двете полета. FillGlobalStorageJob Set partition information ПоÑтави Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° дÑл Install %1 on <strong>new</strong> %2 system partition. ИнÑталирай %1 на <strong>нов</strong> %2 ÑиÑтемен дÑл. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Създай <strong>нов</strong> %2 дÑл ÑÑŠÑ Ñ‚Ð¾Ñ‡ÐºÐ° на монтиране <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. ИнÑталирай %2 на %3 ÑиÑтемен дÑл <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Създай %3 дÑл <strong>%1</strong> Ñ Ñ‚Ð¾Ñ‡ÐºÐ° на монтиране <strong>%2</strong>. Install boot loader on <strong>%1</strong>. ИнÑталиране на зареждач върху <strong>%1</strong>. Setting up mount points. ÐаÑтройка на точките за монтиране. FinishedPage Form Форма <Restart checkbox tooltip> &Restart now &РеÑтартирай Ñега <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>Завършено.</h1><br/>%1 беше инÑталирана на вашиÑÑ‚ компютър.<br/>Вече можете да реÑтартирате в новата Ñи ÑиÑтема или да продължите да използвате %2 Живата Ñреда. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>ИнÑталациÑта е неуÑпешна</h1><br/>%1 не е инÑталиран на Ð’Ð°ÑˆÐ¸Ñ ÐºÐ¾Ð¼Ð¿ÑŽÑ‚ÑŠÑ€.<br/>Съобщението Ñ Ð³Ñ€ÐµÑˆÐºÐ°Ñ‚Ð° е: %2. FinishedViewStep Finish Завърши Setup Complete Installation Complete ИнÑталациÑта е завършена The setup of %1 is complete. The installation of %1 is complete. ИнÑталациÑта на %1 е завършена. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatting partition %1 with file system %2. Форматирай дÑл %1 Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð° ÑиÑтема %2. The installer failed to format partition %1 on disk '%2'. ИнÑталатора не уÑÐ¿Ñ Ð´Ð° форматира дÑл %1 на диÑк '%2'. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source е включен към източник на захранване The system is not plugged in to a power source. СиÑтемата не е включена към източник на захранване. is connected to the Internet е Ñвързан към интернет The system is not connected to the Internet. СиÑтемата не е Ñвързана Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð½ÐµÑ‚. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. ИнÑталаторът не е Ñтартиран Ñ Ð¿Ñ€Ð°Ð²Ð° на админиÑтратор. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. Екранът е твърде малък за инÑталатора. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Konsole не е инÑталиран Please install KDE Konsole and try again! МолÑ, инÑталирайте KDE Konsole и опитайте отново! Executing script: &nbsp;<code>%1</code> ИзпълнÑване на Ñкрипт: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script Скрипт KeyboardPage Set keyboard model to %1.<br/> ПоÑтави модел на клавиатурата на %1.<br/> Set keyboard layout to %1/%2. ПоÑтави оформлението на клавиатурата на %1/%2. KeyboardViewStep Keyboard Клавиатура LCLocaleDialog System locale setting ÐаÑтройка на локациÑта на ÑиÑтемата The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. ЛокациÑта на ÑиÑтемата заÑÑга езика и Ñимволите зададени за нÑкои елементи на ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¸Ñ Ñ€ÐµÐ´.<br/>Текущата наÑтройка е <strong>%1</strong>. &Cancel &Отказ &OK &ОК LicensePage Form Форма <h1>License Agreement</h1> I accept the terms and conditions above. Приемам лицензионните уÑловиÑ. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License Лиценз LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 драйвър</strong><br/>от %2 <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 графичен драйвър</strong><br/><font color="Grey">от %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 плъгин за браузър</strong><br/><font color="Grey">от %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 кодек</strong><br/><font color="Grey">от %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 пакет</strong><br/><font color="Grey">от %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">от %2</font> File: %1 Show the license text Open license agreement in browser. Hide license text LocalePage The system language will be set to %1. СиÑтемниÑÑ‚ език ще бъде %1. The numbers and dates locale will be set to %1. Форматът на цифрите и датата ще бъде %1. Region: Регион: Zone: Зона: &Change... &Промени... Set timezone to %1/%2.<br/> ПоÑтави чаÑовата зона на %1/%2.<br/> LocaleViewStep Location МеÑтоположение LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Генерирай machine-id. Configuration Error No root mount point is set for MachineId. NetInstallPage Name Име Description ОпиÑание Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Мрежова инÑталациÑ. (Изключена: СпиÑъкът Ñ Ð¿Ð°ÐºÐµÑ‚Ð¸ не може да бъде извлечен, проверете Вашата Интернет връзка) Network Installation. (Disabled: Received invalid groups data) Мрежова инÑталациÑ. (Изключена: Получени Ñа данни за невалидни групи) Network Installation. (Disabled: Incorrect configuration) NetInstallViewStep Package selection Избор на пакети Office software Office package Browser software Browser package Web browser Kernel Services Login Desktop Applications NotesQmlViewStep Notes OEMPage Ba&tch: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> OEMViewStep OEM Configuration Set the OEM Batch Identifier to <code>%1</code>. PWQ Password is too short Паролата е твърде кратка Password is too long Паролата е твърде дълга Password is too weak Паролата е твърде Ñлаба Memory allocation error when setting '%1' Грешка при разпределÑне на паметта по време на наÑтройването на '%1' Memory allocation error Грешка при разпределÑне на паметта The password is the same as the old one Паролата Ñъвпада Ñ Ð¿Ñ€ÐµÐ´Ð¸ÑˆÐ½Ð°Ñ‚Ð° The password is a palindrome Паролата е палиндром The password differs with case changes only Паролата Ñе различава Ñамо ÑÑŠÑ ÑмÑна на главни и малки букви The password is too similar to the old one Паролата е твърде Ñходна Ñ Ð¿Ñ€ÐµÐ´Ð¸ÑˆÐ½Ð°Ñ‚Ð° The password contains the user name in some form Паролата Ñъдържа потребителÑкото име под нÑкаква форма The password contains words from the real name of the user in some form Паролата Ñъдържа думи от иÑтинÑкото име на Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ Ð¿Ð¾Ð´ нÑкаква форма The password contains forbidden words in some form Паролата Ñъдържа забранени думи под нÑкаква форма The password contains less than %1 digits Паролата Ñъдържа по-малко от %1 цифри The password contains too few digits Паролата Ñъдържа твърде малко цифри The password contains less than %1 uppercase letters Паролата Ñъдържа по-малко от %1 главни букви The password contains too few uppercase letters Паролата Ñъдържа твърде малко главни букви The password contains less than %1 lowercase letters Паролата Ñъдържа по-малко от %1 малки букви The password contains too few lowercase letters Паролата Ñъдържа твърде малко малки букви The password contains less than %1 non-alphanumeric characters Паролата Ñъдържа по-малко от %1 знаци, които не Ñа букви или цифри The password contains too few non-alphanumeric characters Паролата Ñъдържа твърде малко знаци, които не Ñа букви или цифри The password is shorter than %1 characters Паролата е по-малка от %1 знаци The password is too short Паролата е твърде кратка The password is just rotated old one Паролата е обърнат вариант на Ñтарата The password contains less than %1 character classes Паролата Ñъдържа по-малко от %1 видове знаци The password does not contain enough character classes Паролата не Ñъдържа доÑтатъчно видове знаци The password contains more than %1 same characters consecutively Паролата Ñъдържа повече от %1 еднакви знаци поÑледователно The password contains too many same characters consecutively Паролата Ñъдържа твърде много еднакви знаци поÑледователно The password contains more than %1 characters of the same class consecutively Паролата Ñъдържа повече от %1 еднакви видове знаци поÑледователно The password contains too many characters of the same class consecutively Паролата Ñъдържа твърде много еднакви видове знаци поÑледователно The password contains monotonic sequence longer than %1 characters Паролата Ñъдържа монотонна поÑледователноÑÑ‚, по-дълга от %1 знаци The password contains too long of a monotonic character sequence Паролата Ñъдържа твърде дълга монотонна поÑледователноÑÑ‚ от знаци No password supplied ЛипÑва парола Cannot obtain random numbers from the RNG device Получаването на произволни чиÑла от RNG уÑтройÑтвото е неуÑпешно Password generation failed - required entropy too low for settings Генерирането на парола е неуÑпешно - необходимата ÐµÐ½Ñ‚Ñ€Ð¾Ð¿Ð¸Ñ Ðµ твърде ниÑка за наÑтройки The password fails the dictionary check - %1 Паролата не издържа проверката на речника - %1 The password fails the dictionary check Паролата не издържа проверката на речника Unknown setting - %1 ÐеизвеÑтна наÑтройка - %1 Unknown setting ÐеизвеÑтна наÑтройка Bad integer value of setting - %1 Ðевалидна чиÑлена ÑтойноÑÑ‚ на наÑтройката - %1 Bad integer value Ðевалидна чиÑлена ÑтойноÑÑ‚ на наÑтройката Setting %1 is not of integer type ÐаÑтройката %1 не е от чиÑлов вид Setting is not of integer type ÐаÑтройката не е от чиÑлов вид Setting %1 is not of string type ÐаÑтройката %1 не е от текÑтов вид Setting is not of string type ÐаÑтройката не е от текÑтов вид Opening the configuration file failed ОтварÑнето на файла Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñта е неуÑпешно The configuration file is malformed Файлът Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñта е деформиран Fatal failure Фатална повреда Unknown error ÐеизвеÑтна грешка Password is empty PackageChooserPage Form Форма Product Name TextLabel TextLabel Long Product Description Package Selection Please pick a product from the list. The selected product will be installed. PackageChooserViewStep Packages Page_Keyboard Form Форма Keyboard Model: Модел на клавиатура: Type here to test your keyboard Пишете тук за да теÑтвате вашата клавиатура Page_UserSetup Form Форма What is your name? Какво е вашето име? What name do you want to use to log in? Какво име иÑкате да използвате за влизане? Choose a password to keep your account safe. Изберете парола за да държите вашиÑÑ‚ акаунт в безопаÑноÑÑ‚. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>ВнеÑете Ñъщата парола два пъти, за да може да бъде проверена за правопиÑни грешки. Добра парола ще Ñъдържа ÑмеÑица от букви, цифри и пунктуационни знаци, трÑбва да бъде поне Ñ Ð¾Ñем знака и да бъде променÑна чеÑто.</small> What is the name of this computer? Какво е името на този компютър? Your Full Name login <small>This name will be used if you make the computer visible to others on a network.</small> <small>Това име ще бъде използвано ако направите компютъра видим за други при мрежа.</small> Computer Name Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Влизайте автоматично, без питане за паролата. Use the same password for the administrator account. Използвайте Ñъщата парола за админиÑтраторÑÐºÐ¸Ñ Ð°ÐºÐ°ÑƒÐ½Ñ‚. Choose a password for the administrator account. Изберете парола за админиÑтраторÑÐºÐ¸Ñ Ð°ÐºÐ°ÑƒÐ½Ñ‚. <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>ВнеÑете Ñъщата парола два пъти, за да може да бъде проверена за правопиÑни грешки.</small> PartitionLabelsView Root ОÑновен Home Домашен Boot Зареждане EFI system EFI ÑиÑтема Swap Swap New partition for %1 Ðов дÑл за %1 New partition Ðов дÑл %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space Свободно проÑтранÑтво New partition Ðов дÑл Name Име File System Файлова ÑиÑтема Mount Point Точка на монтиране Size Размер PartitionPage Form Форма Storage de&vice: УÑ&тройÑтво за Ñъхранение" &Revert All Changes &Възвърни вÑички промени New Partition &Table Ðова &таблица на дÑловете Cre&ate Съз&дай &Edit &Редактирай &Delete &Изтрий New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group I&nstall boot loader on: Are you sure you want to create a new partition table on %1? Сигурни ли Ñте че иÑкате да Ñъздадете нова таблица на дÑловете върху %1? Can not create new partition Ðе може да Ñе Ñъздаде нов дÑл The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. Таблицата на дÑловете на %1 вече има %2 главни дÑлове, повече не може да Ñе добавÑÑ‚. МолÑ, премахнете един главен дÑл и добавете разширен дÑл, на негово мÑÑто. PartitionViewStep Gathering system information... Събиране на ÑиÑтемна информациÑ... Partitions ДÑлове Install %1 <strong>alongside</strong> another operating system. ИнÑталирай %1 <strong>заедно</strong> Ñ Ð´Ñ€ÑƒÐ³Ð° операционна ÑиÑтема. <strong>Erase</strong> disk and install %1. <strong>Изтрий</strong> диÑка и инÑталирай %1. <strong>Replace</strong> a partition with %1. <strong>Замени</strong> дÑл Ñ %1. <strong>Manual</strong> partitioning. <strong>Ръчно</strong> поделÑне. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). ИнÑталирай %1 <strong>заедно</strong> Ñ Ð´Ñ€ÑƒÐ³Ð° операционна ÑиÑтема на диÑк <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Изтрий</strong> диÑк <strong>%2</strong> (%3) и инÑталирай %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Замени</strong> дÑл на диÑк <strong>%2</strong> (%3) Ñ %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>Ръчно</strong> поделÑне на диÑк <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) ДиÑк <strong>%1</strong> (%2) Current: Сегашен: After: След: No EFI system partition configured ÐÑма конфигуриран EFI ÑиÑтемен дÑл An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. EFI ÑиÑтемен дÑл е нужен за Ñтартиране на %1.<br/><br/>За наÑтройка на EFI ÑиÑтемен дÑл Ñе върнете назад и изберете или Ñъздайте FAT32 файлова ÑиÑтема Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½ <strong>esp</strong> флаг и точка на монтиране <strong>%2</strong>.<br/><br/>Може да продължите без EFI ÑиÑтемен дÑл, но ÑиÑтемата може да не уÑпее да Ñтартира. EFI system partition flag not set Ðе е зададен флаг на EFI ÑиÑтемен дÑл An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI ÑиÑтемен дÑл е нужен за Ñтартиране на %1.<br/><br/>ДÑлът беше конфигуриран Ñ Ñ‚Ð¾Ñ‡ÐºÐ° на монтиране <strong>%2</strong>, но Ð½ÐµÐ³Ð¾Ð²Ð¸Ñ <strong>esp</strong> флаг не е включен.<br/>За да включите флага Ñе върнете назад и редактирайте дÑла.<br/><br/>Може да продължите без флага, но ÑиÑтемата може да не уÑпее да Ñтартира. Boot partition not encrypted ЛипÑва криптиране на дÑл за начално зареждане A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form Форма Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: Резултат: External command crashed. Command <i>%1</i> crashed. External command failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Bad parameters for process job call. Ðевалидни параметри за извикване на задача за процеÑ. External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Command <i>%1</i> finished with exit code %2. QObject Default Keyboard Model Модел на клавиатура по подразбиране Default По подразбиране unknown неизвеÑтна extended разширена unformatted неформатирана swap swap Unpartitioned space or unknown partition table Ðеразделено проÑтранÑтво или неизвеÑтна таблица на дÑловете (no mount point) Requirements checking for module <i>%1</i> is complete. %1 (%2) language[name] (country[name]) %1 (%2) No product No description provided. File not found Path <pre>%1</pre> must be an absolute path. Could not create new random file <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form Форма Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Изберете къде да инÑталирате %1.<br/><font color="red">Предупреждение: </font>това ще изтрие вÑички файлове върху избраниÑÑ‚ дÑл. The selected item does not appear to be a valid partition. ИзбраниÑÑ‚ предмет не изглежда да е валиден дÑл. %1 cannot be installed on empty space. Please select an existing partition. %1 не може да бъде инÑталиран на празно проÑтранÑтво. ÐœÐ¾Ð»Ñ Ð¸Ð·Ð±ÐµÑ€ÐµÑ‚Ðµ ÑъщеÑтвуващ дÑл. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 не може да бъде инÑталиран върху разширен дÑл. ÐœÐ¾Ð»Ñ Ð¸Ð·Ð±ÐµÑ€ÐµÑ‚Ðµ ÑъщеÑтвуващ оÑновен или логичеÑки дÑл. %1 cannot be installed on this partition. %1 не може да бъде инÑталиран върху този дÑл. Data partition (%1) ДÑл на данните (%1) Unknown system partition (%1) Ðепознат ÑиÑтемен дÑл (%1) %1 system partition (%2) %1 ÑиÑтемен дÑл (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>ДÑлът %1 е твърде малък за %2. ÐœÐ¾Ð»Ñ Ð¸Ð·Ð±ÐµÑ€ÐµÑ‚Ðµ дÑл Ñ ÐºÐ°Ð¿Ð°Ñ†Ð¸Ñ‚ÐµÑ‚ поне %3 ГБ. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/>EFI ÑиÑтемен дÑл не е намерен. МолÑ, опитайте пак като използвате ръчно поделÑне за %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>%1 ще бъде инÑталиран върху %2.<br/><font color="red">Предупреждение: </font>вÑички данни на дÑл %2 ще бъдат изгубени. The EFI system partition at %1 will be used for starting %2. EFI ÑиÑтемен дÑл в %1 ще бъде използван за Ñтартиране на %2. EFI system partition: EFI ÑиÑтемен дÑл: ResizeFSJob Resize Filesystem Job Invalid configuration The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. Преоразмери дÑл %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. ИнÑталатора не уÑÐ¿Ñ Ð´Ð° преоразмери дÑл %1 върху диÑк '%2'. ResizeVolumeGroupDialog Resize Volume Group ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: За най-добри резултати, Ð¼Ð¾Ð»Ñ Ð±ÑŠÐ´ÐµÑ‚Ðµ Ñигурни че този компютър: System requirements СиÑтемни изиÑÐºÐ²Ð°Ð½Ð¸Ñ ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> Този компютър не Ð¾Ñ‚Ð³Ð¾Ð²Ð°Ñ€Ñ Ð½Ð° минималните изиÑÐºÐ²Ð°Ð½Ð¸Ñ Ð·Ð° инÑталиране %1.<br/>ИнÑталациÑта не може да продължи. <a href="#details">Детайли...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. Този компютър не Ð¾Ñ‚Ð³Ð¾Ð²Ð°Ñ€Ñ Ð½Ð° нÑкои от препоръчителните изиÑÐºÐ²Ð°Ð½Ð¸Ñ Ð·Ð° инÑталиране %1.<br/>ИнÑталациÑта може да продължи, но нÑкои ÑвойÑтва могат да бъдат недоÑтъпни. This program will ask you some questions and set up %2 on your computer. Тази програма ще ви зададе нÑколко въпроÑа и ще конфигурира %2 на Ð²Ð°ÑˆÐ¸Ñ ÐºÐ¾Ð¼Ð¿ÑŽÑ‚ÑŠÑ€. ScanningDialog Scanning storage devices... Сканиране на уÑтройÑтвата за Ñъхранение Partitioning РазделÑне SetHostNameJob Set hostname %1 ПоÑтавете име на хоÑта %1 Set hostname <strong>%1</strong>. ПоÑтавете име на хоÑÑ‚ <strong>%1</strong>. Setting hostname %1. Задаване името на хоÑта %1 Internal Error Вътрешна грешка Cannot write hostname to target system Ðе може да Ñе запише името на хоÑта на целевата ÑиÑтема SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 ПоÑтави модела на клавиатурата на %1, оформлението на %2-%3 Failed to write keyboard configuration for the virtual console. ÐеуÑпешно запиÑването на клавиатурна ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð·Ð° виртуалната конзола. Failed to write to %1 ÐеуÑпешно запиÑване върху %1 Failed to write keyboard configuration for X11. ÐеуÑпешно запиÑване на клавиатурна ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð·Ð° X11. Failed to write keyboard configuration to existing /etc/default directory. ÐеуÑпешно запиÑване на клавиатурна ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð² ÑъщеÑтвуващата Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ /etc/default. SetPartFlagsJob Set flags on partition %1. Задай флагове на дÑл %1. Set flags on %1MiB %2 partition. Set flags on new partition. Задай флагове на нов дÑл. Clear flags on partition <strong>%1</strong>. ИзчиÑти флаговете на дÑл <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Clear flags on new partition. ИзчиÑти флагове на нов дÑл. Flag partition <strong>%1</strong> as <strong>%2</strong>. Сложи флаг на дÑл <strong>%1</strong> като <strong>%2</strong>. Flag new partition as <strong>%1</strong>. Сложи флаг на Ð½Ð¾Ð²Ð¸Ñ Ð´Ñл като <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. ИзчиÑтване на флаговете на дÑл <strong>%1</strong>. Clearing flags on new partition. ИзчиÑтване на флаговете на Ð½Ð¾Ð²Ð¸Ñ Ð´Ñл. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Задаване на флагове <strong>%2</strong> на дÑл <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. Задаване на флагове <strong>%1</strong> на Ð½Ð¾Ð²Ð¸Ñ Ð´Ñл. The installer failed to set flags on partition %1. ИнÑталатора не уÑÐ¿Ñ Ð´Ð° зададе флагове на дÑл %1. SetPasswordJob Set password for user %1 Задай парола за потребител %1 Setting password for user %1. Задаване на парола за потребител %1 Bad destination system path. Лоша деÑÑ‚Ð¸Ð½Ð°Ñ†Ð¸Ñ Ð·Ð° ÑиÑтемен път. rootMountPoint is %1 rootMountPoint е %1 Cannot disable root account. passwd terminated with error code %1. Cannot set password for user %1. Ðе може да Ñе поÑтави парола за потребител %1. usermod terminated with error code %1. usermod е прекратен Ñ Ð³Ñ€ÐµÑˆÐºÐ° %1. SetTimezoneJob Set timezone to %1/%2 ПоÑтави чаÑовата зона на %1/%2 Cannot access selected timezone path. ÐÑма доÑтъп до Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¸Ñ Ð¿ÑŠÑ‚ за чаÑова зона. Bad path: %1 Ðевалиден път: %1 Cannot set timezone. Ðе може да Ñе зададе чаÑова зона. Link creation failed, target: %1; link name: %2 ÐеуÑпешно Ñъздаване на връзка: %1; име на връзка: %2 Cannot set timezone, Ðе може да Ñе зададе чаÑова зона, Cannot open /etc/timezone for writing Ðе може да Ñе отвори /etc/timezone за запиÑване ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. Това е преглед на промените, които ще Ñе извършат, Ñлед като започнете процедурата по инÑталиране. SummaryViewStep Summary Обобщение TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingMachineNeonJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form Форма Placeholder ЗамеÑтител <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. TrackingViewStep Feedback Обратна връзка UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> Your username is too long. Вашето потребителÑко име е твърде дълго. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Only letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Вашето име на хоÑта е твърде кратко. Your hostname is too long. Вашето име на хоÑта е твърде дълго. Your passwords do not match! Паролите Ви не Ñъвпадат! UsersViewStep Users Потребители VariantModel Key Value СтойноÑÑ‚ VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB MiB Total Size: Used Size: Total Sectors: Общо Ñектори: Quantity of LVs: WelcomePage Form Форма Select application and system language Open donations website &Donate Open help and support website Open issues and bug-tracking website Open release notes website &Release notes &Бележки по изданието &Known issues &СъщеÑтвуващи проблеми &Support &Поддръжка &About &ОтноÑно <h1>Welcome to the %1 installer.</h1> <h1>Добре дошли при инÑталатора на %1.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Добре дошли при инÑталатора Calamares на %1.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Welcome to %1 setup.</h1> About %1 setup About %1 installer ОтноÑно инÑталатор %1 <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support %1 поддръжка WelcomeQmlViewStep Welcome Добре дошли WelcomeViewStep Welcome Добре дошли notesqml <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> About Support Known issues Release notes Donate calamares-3.2.20/lang/calamares_ca.ts000066400000000000000000005611721362604102500174250ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. L'<strong>entorn d'arrencada</strong> d'aquest sistema.<br><br>Els sistemes antics x86 només tenen suport per a <strong>BIOS</strong>.<br>Els moderns normalment usen <strong>EFI</strong>, però també poden mostrar-se com a BIOS si l'entorn d'arrencada s'executa en mode de compatibilitat. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. Aquest sistema s'ha iniciat amb un entorn d'arrencada <strong>EFI</strong>. <br><br> Per configurar una arrencada des d'un entorn EFI, aquest instal·lador ha de desplegar l'aplicació d'un gestor d'arrencada, com ara el <strong>GRUB</strong> o el <strong>systemd-boot</strong> en una <strong>partició EFI del sistema</strong>. Això és automàtic, llevat que trieu fer les particions manualment, en què caldrà que ho configureu vosaltres mateixos. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. Aquest sistema s'ha iniciat amb un entorn d'arrencada <strong>BIOS </strong>.<br><br>Per configurar una arrencada des d'un entorn BIOS, aquest instal·lador ha d'instal·lar un gestor d'arrencada, com ara el <strong>GRUB</strong>, ja sigui al començament d'una partició o al <strong>MBR</strong>, a prop del començament de la taula de particions (millor). Això és automàtic, llevat que trieu fer les particions manualment, en què caldrà que ho configureu pel vostre compte. BootLoaderModel Master Boot Record of %1 Registre d'inici mestre (MBR) de %1 Boot Partition Partició d'arrencada System Partition Partició del sistema Do not install a boot loader No instal·lis cap gestor d'arrencada %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page Pàgina en blanc Calamares::DebugWindow Form Formulari GlobalStorage Emmagatzematge global JobQueue Cua de tasques Modules Mòduls Type: Tipus: none cap Interface: Interfície: Tools Eines Reload Stylesheet Torna a carregar el full d’estil Widget Tree Arbre de ginys Debug information Informació de depuració Calamares::ExecutionViewStep Set up Configuració Install Instal·la Calamares::FailJob Job failed (%1) Ha fallat la tasca (%1) Programmed job failure was explicitly requested. S'ha demanat explícitament la fallada de la tasca programada. Calamares::JobThread Done Fet Calamares::NamedJob Example job (%1) Tasca d'exemple (%1) Calamares::ProcessJob Run command '%1' in target system. Executa l'ordre "%1" al sistema de destinació. Run command '%1'. Executa l'ordre "%1". Running command %1 %2 S'executa l'ordre %1 %2 Calamares::PythonJob Running %1 operation. S'executa l'operació %1. Bad working directory path Camí incorrecte al directori de treball Working directory %1 for python job %2 is not readable. El directori de treball %1 per a la tasca python %2 no és llegible. Bad main script file Fitxer erroni d'script principal Main script file %1 for python job %2 is not readable. El fitxer de script principal %1 per a la tasca de python %2 no és llegible. Boost.Python error in job "%1". Error de Boost.Python a la tasca "%1". Calamares::QmlViewStep Loading ... Es carrega... QML Step <i>%1</i>. Pas QML <i>%1</i>. Loading failed. Ha fallat la càrrega. Calamares::RequirementsChecker Waiting for %n module(s). S'espera %n mòdul. S'esperen %n mòduls. (%n second(s)) (%n segon) (%n segons) System-requirements checking is complete. S'ha completat la comprovació dels requeriments del sistema. Calamares::ViewManager &Back &Enrere &Next &Següent &Cancel &Cancel·la Cancel setup without changing the system. Cancel·la la configuració sense canviar el sistema. Cancel installation without changing the system. Cancel·leu la instal·lació sense canviar el sistema. Setup Failed Ha fallat la configuració. Would you like to paste the install log to the web? Voleu enganxar el registre d'instal·lació a la xarxa? Install Log Paste URL URL de publicació del registre d'instal·lació The upload was unsuccessful. No web-paste was done. La càrrega no s'ha fet correctament. No s'ha enganxat res a la xarxa. Calamares Initialization Failed Ha fallat la inicialització de Calamares %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. No es pot instal·lar %1. El Calamares no ha pogut carregar tots els mòduls configurats. Aquest és un problema amb la manera com el Calamares és utilitzat per la distribució. <br/>The following modules could not be loaded: <br/>No s'han pogut carregar els mòduls següents: Continue with installation? Voleu continuar la instal·lació? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> El programa de configuració %1 està a punt de fer canvis al disc per tal de configurar %2.<br/><strong>No podreu desfer aquests canvis.</strong> &Set up now Con&figura-ho ara &Set up Con&figura-ho &Install &Instal·la Setup is complete. Close the setup program. La configuració s'ha acabat. Tanqueu el programa de configuració. Cancel setup? Voleu cancel·lar la configuració? Cancel installation? Voleu cancel·lar la instal·lació? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Realment voleu cancel·lar el procés de configuració actual? El programa de configuració es tancarà i es perdran tots els canvis. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Voleu cancel·lar el procés d'instal·lació actual? L'instal·lador es tancarà i tots els canvis es perdran. &Yes &Sí &No &No &Close Tan&ca Continue with setup? Voleu continuar la configuració? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> L'instal·lador per a %1 està a punt de fer canvis al disc per tal d'instal·lar-hi %2.<br/><strong>No podreu desfer aquests canvis.</strong> &Install now &Instal·la'l ara Go &back Ves &enrere &Done &Fet The installation is complete. Close the installer. La instal·lació s'ha acabat. Tanqueu l'instal·lador. Error Error Installation Failed La instal·lació ha fallat. CalamaresPython::Helper Unknown exception type Tipus d'excepció desconeguda unparseable Python error Error de Python no analitzable unparseable Python traceback Traceback de Python no analitzable Unfetchable Python error. Error de Python irrecuperable. CalamaresUtils Install log posted to: %1 Registre d'instal·lació penjat a %1 CalamaresWindow %1 Setup Program Programa de configuració %1 %1 Installer Instal·lador de %1 Show debug information Informació de depuració CheckerContainer Gathering system information... Es recopila informació del sistema... ChoicePage Form Formulari After: Després: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Particions manuals</strong><br/>Podeu crear o canviar la mida de les particions vosaltres mateixos. Boot loader location: Ubicació del gestor d'arrencada: Select storage de&vice: Seleccioneu un dispositiu d'e&mmagatzematge: Current: Actual: Reuse %1 as home partition for %2. Reutilitza %1 com a partició de l'usuari per a %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Seleccioneu una partició per encongir i arrossegueu-la per redimensinar-la</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 s'encongirà a %2 MiB i es crearà una partició nova de %3 MB per a %4. <strong>Select a partition to install on</strong> <strong>Seleccioneu una partició per fer-hi la instal·lació.</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. No s'ha pogut trobar enlloc una partició EFI en aquest sistema. Si us plau, torneu enrere i use les particions manuals per configurar %1. The EFI system partition at %1 will be used for starting %2. La partició EFI de sistema a %1 s'usarà per iniciar %2. EFI system partition: Partició EFI del sistema: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Aquest dispositiu d'emmagatzematge no sembla que tingui un sistema operatiu. Què voleu fer?<br/>Podreu revisar i confirmar la tria abans que es faci cap canvi al dispositiu. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Esborra el disc</strong><br/>Això <font color="red">suprimirà</font> totes les dades del dispositiu seleccionat. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Aquest dispositiu d'emmagatzematge té %1. Què voleu fer?<br/>Podreu revisar i confirmar la tria abans que es faci cap canvi al dispositiu. No Swap Sense intercanvi Reuse Swap Reutilitza l'intercanvi Swap (no Hibernate) Intercanvi (sense hibernació) Swap (with Hibernate) Intercanvi (amb hibernació) Swap to file Intercanvi en fitxer <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Instal·la'l al costat</strong><br/>L'instal·lador reduirà una partició per fer espai per a %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Reemplaça una partició</strong><br/>Reemplaça una partició per %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Aquest dispositiu d'emmagatzematge ja té un sistema operatiu. Què voleu fer?<br/>Podreu revisar i confirmar la tria abans que es faci cap canvi al dispositiu. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Aquest dispositiu d'emmagatzematge ja múltiples sistemes operatius. Què voleu fer?<br/>Podreu revisar i confirmar la tria abans que es faci cap canvi al dispositiu. ClearMountsJob Clear mounts for partitioning operations on %1 Neteja els muntatges per les operacions de partició a %1 Clearing mounts for partitioning operations on %1. Es netegen els muntatges per a les operacions de les particions a %1. Cleared all mounts for %1 S'han netejat tots els muntatges de %1 ClearTempMountsJob Clear all temporary mounts. Neteja tots els muntatges temporals. Clearing all temporary mounts. Es netegen tots els muntatges temporals. Cannot get list of temporary mounts. No es pot obtenir la llista dels muntatges temporals. Cleared all temporary mounts. S'han netejat tots els muntatges temporals. CommandList Could not run command. No s'ha pogut executar l'ordre. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. L'odre s'executa a l'entorn de l'amfitrió i necessita saber el camí de l'arrel, però no hi ha definit el punt de muntatge de l'arrel. The command needs to know the user's name, but no username is defined. L'ordre necessita saber el nom de l'usuari, però no s'ha definit cap nom d'usuari. ContextualProcessJob Contextual Processes Job Tasca de procés contextual CreatePartitionDialog Create a Partition Crea una partició MiB MB Partition &Type: &Tipus de partició: &Primary &Primària E&xtended &Ampliada Fi&le System: S&istema de fitxers: LVM LV name Nom del volum lògic LVM Flags: Indicadors: &Mount Point: Punt de &muntatge: Si&ze: Mi&da: En&crypt En&cripta Logical Lògica Primary Primària GPT GPT Mountpoint already in use. Please select another one. El punt de muntatge ja està en ús. Si us plau, seleccioneu-ne un altre. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Crea una partició nova de %2 MiB a %4 (%3) amb el sistema de fitxers %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Crea una partició nova de <strong>%2 MiB</strong> a <strong>%4</strong> (%3) amb el sistema de fitxers <strong>%1</strong>. Creating new %1 partition on %2. Es crea la partició nova %1 a %2. The installer failed to create partition on disk '%1'. L'instal·lador no ha pogut crear la partició al disc '%1'. CreatePartitionTableDialog Create Partition Table Crea la taula de particions Creating a new partition table will delete all existing data on the disk. La creació d'una nova taula de particions suprimirà totes les dades existents al disc. What kind of partition table do you want to create? Quin tipus de taula de particions voleu crear? Master Boot Record (MBR) Registre d'inici mestre (MBR) GUID Partition Table (GPT) Taula de particions GUID (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Crea una taula de particions nova %1 a %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Crea una taula de particions nova <strong>%1</strong> a <strong>%2</strong> (%3). Creating new %1 partition table on %2. Es crea la taula de particions nova %1 a %2. The installer failed to create a partition table on %1. L'instal·lador no ha pogut crear la taula de particions a %1. CreateUserJob Create user %1 Crea l'usuari %1 Create user <strong>%1</strong>. Crea l'usuari <strong>%1</strong>. Creating user %1. Es crea l'usuari %1. Sudoers dir is not writable. El directori de sudoers no té permisos d'escriptura. Cannot create sudoers file for writing. No es pot crear el fitxer sudoers a escriure. Cannot chmod sudoers file. No es pot fer chmod al fitxer sudoers. Cannot open groups file for reading. No es pot obrir el fitxer groups per ser llegit. CreateVolumeGroupDialog Create Volume Group Crea un grup de volums CreateVolumeGroupJob Create new volume group named %1. Crea un grup de volums nou anomenat %1. Create new volume group named <strong>%1</strong>. Crea un grup de volums nou anomenat <strong>%1</strong>. Creating new volume group named %1. Es crea el grup de volums nou anomenat %1. The installer failed to create a volume group named '%1'. L'instal·lador ha fallat crear un grup de volums anomenat "%1". DeactivateVolumeGroupJob Deactivate volume group named %1. Desactiva el grup de volums anomenat %1. Deactivate volume group named <strong>%1</strong>. Desactiva el grup de volums anomenat <strong>%1</strong>. The installer failed to deactivate a volume group named %1. L'instal·lador ha fallat desactivar un grup de volums anomenat %1. DeletePartitionJob Delete partition %1. Suprimeix la partició %1. Delete partition <strong>%1</strong>. Suprimeix la partició <strong>%1</strong>. Deleting partition %1. Se suprimeix la partició %1. The installer failed to delete partition %1. L'instal·lador no ha pogut suprimir la partició %1. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. El tipus de <strong>taula de particions</strong> actualment present al dispositiu d'emmagatzematge seleccionat. L'única manera de canviar el tipus de taula de particions és esborrar i tornar a crear la taula de particions des de zero, fet que destrueix totes les dades del dispositiu d'emmagatzematge. <br> Aquest instal·lador mantindrà la taula de particions actual llevat que decidiu expressament el contrari. <br>Si no n'esteu segur, als sistemes moderns es prefereix GPT. This device has a <strong>%1</strong> partition table. Aquest dispositiu té una taula de particions <strong>%1</strong>. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. Aquest dispositiu és un dispositu <strong>de bucle</strong>.<br><br>Això és un pseudodispositiu sense taula de particions que fa que un fitxer sigui accessible com un dispositiu de bloc. Aquest tipus de configuració normalment només conté un sol sistema de fitxers. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. Aquest instal·lador <strong>no pot detectar una taula de particions</strong> al dispositiu d'emmagatzematge seleccionat.<br><br>O bé el dispositiu no té taula de particions o la taula de particions és corrupta o d'un tipus desconegut.<br>Aquest instal·lador pot crear una nova taula de particions, o bé automàticament o a través de la pàgina del partidor manual. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Aquest és el tipus de taula de particions recomanat per als sistemes moderns que s'inicien des d'un entorn d'arrencada <strong>EFI</strong>. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. <br><br>Aquest tipus de taula de particions és només recomanable en sistemes més antics que s'iniciïn des d'un entorn d'arrencada <strong>BIOS</strong>. Per a la majoria d'altres usos, es recomana fer servir GPT.<br><strong>Avís:</strong> la taula de particions MBR és un estàndard obsolet de l'era MSDOS. <br>Només es poden crear 4 particions <em>primàries</em> i d'aquestes 4, una pot ser una partició <em>ampliada</em>, que pot contenir algunes particions <em>lògiques</em>.<br> DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1 - (%2) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Escriu la configuració de LUKS per a Dracut a %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Omet l'escriptura de la configuració de LUKS per a Dracut: la partició "/" no està encriptada Failed to open %1 No s'ha pogut obrir %1 DummyCppJob Dummy C++ Job Tasca C++ fictícia EditExistingPartitionDialog Edit Existing Partition Edita la partició existent Content: Contingut: &Keep &Mantén Format Formata Warning: Formatting the partition will erase all existing data. Advertència: formatar la partició esborrarà totes les dades existents. &Mount Point: &Punt de muntatge: Si&ze: Mi&da: MiB MB Fi&le System: S&istema de fitxers: Flags: Indicadors: Mountpoint already in use. Please select another one. El punt de muntatge ja està en ús. Si us plau, seleccioneu-ne un altre. EncryptWidget Form Formulari En&crypt system En&cripta el sistema Passphrase Contrasenya: Confirm passphrase Confirmeu la contrasenya Please enter the same passphrase in both boxes. Si us plau, escriviu la mateixa contrasenya a les dues caselles. FillGlobalStorageJob Set partition information Estableix la informació de la partició Install %1 on <strong>new</strong> %2 system partition. Instal·la %1 a la partició de sistema <strong>nova</strong> %2. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Estableix la partició <strong>nova</strong> %2 amb el punt de muntatge <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Instal·la %2 a la partició de sistema %3 <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Estableix la partició %3 <strong>%1</strong> amb el punt de muntatge <strong>%2</strong>. Install boot loader on <strong>%1</strong>. Instal·la el gestor d'arrencada a <strong>%1</strong>. Setting up mount points. S'estableixen els punts de muntatge. FinishedPage Form Formulari <Restart checkbox tooltip> <Restart checkbox tooltip> &Restart now &Reinicia ara <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>Tot fet.</h1><br/>%1 s'ha configurat a l'ordinador.<br/>Ara podeu començar a usar el nou sistema. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <html><head/><body><p>Quan aquesta casella està marcada, el sistema es reiniciarà immediatament quan cliqueu a <span style="font-style:italic;">Fet</span> o tanqueu el programa de configuració.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>Tot fet.</h1><br/>%1 s'ha instal·lat a l'ordinador.<br/>Ara podeu reiniciar-lo per tal d'accedir al sistema operatiu nou o bé continuar usant l'entorn autònom de %2. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <html><head/><body><p>Quan aquesta casella està marcada, el sistema es reiniciarà immediatament quan cliqueu a <span style=" font-style:italic;">Fet</span> o tanqueu l'instal·lador.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>La configuració ha fallat.</h1><br/>No s'ha configurat %1 a l'ordinador.<br/>El missatge d'error ha estat el següent: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>La instal·lació ha fallat</h1><br/>No s'ha instal·lat %1 a l'ordinador.<br/>El missatge d'error ha estat el següent: %2. FinishedViewStep Finish Acaba Setup Complete Configuració completa Installation Complete Instal·lació acabada The setup of %1 is complete. La configuració de %1 ha acabat. The installation of %1 is complete. La instal·lació de %1 ha acabat. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Formata la partició %1 (sistema de fitxers: %2, mida: %3 MiB) de %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formata la partició de <strong>%3 MiB</strong> <strong>%1</strong> amb el sistema de fitxers <strong>%2</strong>. Formatting partition %1 with file system %2. Es formata la partició %1 amb el sistema de fitxers %2. The installer failed to format partition %1 on disk '%2'. L'instal·lador no ha pogut formatar la partició %1 del disc '%2'. GeneralRequirements has at least %1 GiB available drive space tingui com a mínim %1 GiB d'espai de disc disponible. There is not enough drive space. At least %1 GiB is required. No hi ha prou espai de disc disponible. Com a mínim hi ha d'haver %1 GiB. has at least %1 GiB working memory tingui com a mínim %1 GiB de memòria de treball. The system does not have enough working memory. At least %1 GiB is required. El sistema no té prou memòria de treball. Com a mínim hi ha d'haver %1 GiB. is plugged in to a power source estigui connectat a una presa de corrent. The system is not plugged in to a power source. El sistema no està connectat a una presa de corrent. is connected to the Internet estigui connectat a Internet. The system is not connected to the Internet. El sistema no està connectat a Internet. is running the installer as an administrator (root) executi l'instal·lador com a administrador (arrel). The setup program is not running with administrator rights. El programa de configuració no s'executa amb privilegis d'administrador. The installer is not running with administrator rights. L'instal·lador no s'executa amb privilegis d'administrador. has a screen large enough to show the whole installer tingui una pantalla prou grossa per mostrar completament l'instal·lador. The screen is too small to display the setup program. La pantalla és massa petita per mostrar el programa de configuració. The screen is too small to display the installer. La pantalla és massa petita per mostrar l'instal·lador. HostInfoJob Collecting information about your machine. Es recopila informació sobre la màquina. IDJob OEM Batch Identifier Identificador de lots d'OEM Could not create directories <code>%1</code>. No s'han pogut crear els directoris <code>%1</code>. Could not open file <code>%1</code>. No s'ha pogut obrir el fitxer <code>%1</code>. Could not write to file <code>%1</code>. No s'ha pogut escriure al fitxer <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. Es creen initramfs amb mkinitcpio. InitramfsJob Creating initramfs. Es creen initramfs. InteractiveTerminalPage Konsole not installed El Konsole no està instal·lat. Please install KDE Konsole and try again! Si us plau, instal·leu el Konsole de KDE i torneu-ho a intentar! Executing script: &nbsp;<code>%1</code> S'executa l'script &nbsp;<code>%1</code> InteractiveTerminalViewStep Script Script KeyboardPage Set keyboard model to %1.<br/> Establirà el model del teclat a %1.<br/> Set keyboard layout to %1/%2. Establirà la distribució del teclat a %1/%2. KeyboardViewStep Keyboard Teclat LCLocaleDialog System locale setting Configuració de la llengua del sistema The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. La configuració local del sistema afecta la llengua i el joc de caràcters d'alguns elements de la interície de línia d'ordres. <br/>La configuració actual és <strong>%1</strong>. &Cancel &Cancel·la &OK D'ac&ord LicensePage Form Formulari <h1>License Agreement</h1> <h1>Acord de llicència</h1> I accept the terms and conditions above. Accepto els termes i les condicions anteriors. Please review the End User License Agreements (EULAs). Si us plau, consulteu els acords de llicència d'usuari final (EULA). This setup procedure will install proprietary software that is subject to licensing terms. Aquest procediment de configuració instal·larà programari de propietat subjecte a termes de llicència. If you do not agree with the terms, the setup procedure cannot continue. Si no esteu d’acord en els termes, el procediment de configuració no pot continuar. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Aquest procediment de configuració instal·larà programari de propietat subjecte a termes de llicència per tal de proporcionar característiques addicionals i millorar l'experiència de l'usuari. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Si no esteu d'acord en els termes, no s'instal·larà el programari de propietat i es faran servir les alternatives de codi lliure. LicenseViewStep License Llicència LicenseWidget URL: %1 URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>Controlador %1</strong><br/>de %2 <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>Controlador gràfic %1</strong><br/><font color="Grey">de %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>Connector del navegador %1</strong><br/><font color="Grey">de %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>Còdec %1</strong><br/><font color="Grey">de %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>Paquet %1</strong><br/><font color="Grey">de %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">de %2</font> File: %1 Fitxer: %1 Show the license text Mostra el text de la llicència Open license agreement in browser. Obre l'acord de llicència al navegador. Hide license text Amaga el text de la llicència LocalePage The system language will be set to %1. La llengua del sistema s'establirà a %1. The numbers and dates locale will be set to %1. Els números i les dates de la configuració local s'establiran a %1. Region: Regió: Zone: Zona: &Change... &Canvia... Set timezone to %1/%2.<br/> Establirà la zona horària a %1/%2.<br/> LocaleViewStep Location Ubicació LuksBootKeyFileJob Configuring LUKS key file. Es configura el fitxer de clau LUKS. No partitions are defined. No s'ha definit cap partició. Encrypted rootfs setup error Error de configuració de rootfs encriptat. Root partition %1 is LUKS but no passphrase has been set. La partició d'arrel %1 és LUKS però no se n'ha establert cap contrasenya. Could not create LUKS key file for root partition %1. No s'ha pogut crear el fitxer de clau de LUKS per a la partició d'arrel %1. Could not configure LUKS key file on partition %1. No s'ha pogut configurar el fitxer de clau de LUKS a la partició %1. MachineIdJob Generate machine-id. Generació de l'id. de la màquina. Configuration Error Error de configuració No root mount point is set for MachineId. No hi ha punt de muntatge d'arrel establert per a MachineId. NetInstallPage Name Nom Description Descripció Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Instal·lació per xarxa. (Inhabilitada: no es poden obtenir les llistes de paquets, comproveu la connexió.) Network Installation. (Disabled: Received invalid groups data) Instal·lació per xarxa. (Inhabilitada: dades de grups rebudes no vàlides) Network Installation. (Disabled: Incorrect configuration) Instal·lació per xarxa. (Inhabilitada: configuració incorrecta) NetInstallViewStep Package selection Selecció de paquets Office software Programari d'oficina Office package Paquet d'oficina Browser software Programari de navegador Browser package Paquet de navegador Web browser Navegador web Kernel Nucli Services Serveis Login Entrada Desktop Escriptori Applications Aplicacions NotesQmlViewStep Notes Notes OEMPage Ba&tch: &Lot:: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>Introduïu aquí l'identificador de lots. Això es desarà al sistema de destinació.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>Configuració d'OEM</h1><p>El Calamares usarà els paràmetres d'OEM durant la configuració del sistema de destinació.</p></body></html> OEMViewStep OEM Configuration Configuració d'OEM Set the OEM Batch Identifier to <code>%1</code>. Estableix l'identificador de lots d'OEM a<code>%1</code>. PWQ Password is too short La contrasenya és massa curta. Password is too long La contrasenya és massa llarga. Password is too weak La contrasenya és massa dèbil. Memory allocation error when setting '%1' Error d'assignació de memòria en establir "%1" Memory allocation error Error d'assignació de memòria The password is the same as the old one La contrasenya és la mateixa que l'anterior. The password is a palindrome La contrasenya és un palíndrom. The password differs with case changes only La contrasenya només és diferent per les majúscules o minúscules. The password is too similar to the old one La contrasenya és massa semblant a l'anterior. The password contains the user name in some form La contrasenya conté el nom d'usuari d'alguna manera. The password contains words from the real name of the user in some form La contrasenya conté paraules del nom real de l'usuari d'alguna manera. The password contains forbidden words in some form La contrasenya conté paraules prohibides d'alguna manera. The password contains less than %1 digits La contrasenya és inferior a %1 dígits. The password contains too few digits La contrasenya conté massa pocs dígits. The password contains less than %1 uppercase letters La contrasenya conté menys de %1 lletres majúscules. The password contains too few uppercase letters La contrasenya conté massa poques lletres majúscules. The password contains less than %1 lowercase letters La contrasenya conté menys de %1 lletres minúscules. The password contains too few lowercase letters La contrasenya conté massa poques lletres minúscules. The password contains less than %1 non-alphanumeric characters La contrasenya conté menys de %1 caràcters no alfanumèrics. The password contains too few non-alphanumeric characters La contrasenya conté massa pocs caràcters no alfanumèrics. The password is shorter than %1 characters La contrasenya és més curta de %1 caràcters. The password is too short La contrasenya és massa curta. The password is just rotated old one La contrasenya és només l'anterior capgirada. The password contains less than %1 character classes La contrasenya conté menys de %1 classes de caràcters. The password does not contain enough character classes La contrasenya no conté prou classes de caràcters. The password contains more than %1 same characters consecutively La contrasenya conté més de %1 caràcters iguals consecutius. The password contains too many same characters consecutively La contrasenya conté massa caràcters iguals consecutius. The password contains more than %1 characters of the same class consecutively La contrasenya conté més de %1 caràcters consecutius de la mateixa classe. The password contains too many characters of the same class consecutively La contrasenya conté massa caràcters consecutius de la mateixa classe. The password contains monotonic sequence longer than %1 characters La contrasenya conté una seqüència monòtona més llarga de %1 caràcters. The password contains too long of a monotonic character sequence La contrasenya conté una seqüència monòtona de caràcters massa llarga. No password supplied No s'ha proporcionat cap contrasenya. Cannot obtain random numbers from the RNG device No es poden obtenir nombres aleatoris del dispositiu RNG. Password generation failed - required entropy too low for settings Ha fallat la generació de la contrasenya. Entropia necessària massa baixa per als paràmetres. The password fails the dictionary check - %1 La contrasenya no aprova la comprovació del diccionari: %1 The password fails the dictionary check La contrasenya no aprova la comprovació del diccionari. Unknown setting - %1 Paràmetre desconegut: %1 Unknown setting Paràmetre desconegut Bad integer value of setting - %1 Valor enter del paràmetre incorrecte: %1 Bad integer value Valor enter incorrecte Setting %1 is not of integer type El paràmetre %1 no és del tipus enter. Setting is not of integer type El paràmetre no és del tipus enter. Setting %1 is not of string type El paràmetre %1 no és del tipus cadena. Setting is not of string type El paràmetre no és del tipus cadena. Opening the configuration file failed Ha fallat obrir el fitxer de configuració. The configuration file is malformed El fitxer de configuració té una forma incorrecta. Fatal failure Fallada fatal Unknown error Error desconegut Password is empty La contrasenya és buida. PackageChooserPage Form Formulari Product Name Nom del producte TextLabel Etiqueta de text Long Product Description Descripció llarga del producte Package Selection Selecció de paquets Please pick a product from the list. The selected product will be installed. Si us plau, trieu un producte de la llista. S'instal·larà el producte seleccionat. PackageChooserViewStep Packages Paquets Page_Keyboard Form Formulari Keyboard Model: Model del teclat: Type here to test your keyboard Escriviu aquí per comprovar el teclat Page_UserSetup Form Formulari What is your name? Com us dieu? What name do you want to use to log in? Quin nom voleu usar per iniciar la sessió d'usuari? Choose a password to keep your account safe. Trieu una contrasenya per tal de mantenir el compte d'usuari segur. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>Escriviu la mateixa contrasenya dues vegades, de manera que se'n puguin comprovar els errors de mecanografia. Una bona contrasenya contindrà una barreja de lletres, números i signes de puntuació, hauria de tenir un mínim de 8 caràcters i s'hauria de modificar a intervals regulars de temps.</small> What is the name of this computer? Com es diu aquest ordinador? Your Full Name El nom complet login entrada <small>This name will be used if you make the computer visible to others on a network.</small> <small>Aquest nom s'usarà si feu visible aquest ordinador per a altres en una xarxa.</small> Computer Name Nom de l'ordinador Password Contrasenya Repeat Password Repetiu la contrasenya. When this box is checked, password-strength checking is done and you will not be able to use a weak password. Quan aquesta casella està marcada, es comprova la fortalesa de la contrasenya i no en podreu fer una de dèbil. Require strong passwords. Requereix contrasenyes fortes. Log in automatically without asking for the password. Entra automàticament sense demanar la contrasenya. Use the same password for the administrator account. Usa la mateixa contrasenya per al compte d'administració. Choose a password for the administrator account. Trieu una contrasenya per al compte d'administració. <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Escriviu la mateixa contrasenya dues vegades, per tal de poder-ne comprovar els errors de mecanografia.</small> PartitionLabelsView Root Arrel Home Inici Boot Arrencada EFI system Sistema EFI Swap Intercanvi New partition for %1 Partició nova per a %1 New partition Partició nova %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space Espai lliure New partition Partició nova Name Nom File System Sistema de fitxers Mount Point Punt de muntatge Size Mida PartitionPage Form Formulari Storage de&vice: Dispositiu d'e&mmagatzematge: &Revert All Changes &Desfés tots els canvis New Partition &Table Nova &taula de particions Cre&ate Cre&a &Edit &Edita &Delete Su&primeix New Volume Group Grup de volums nou Resize Volume Group Canvia la mida del grup de volums Deactivate Volume Group Desactiva el grup de volums Remove Volume Group Suprimeix el grup de volums I&nstall boot loader on: I&nstal·la el gestor d'arrencada a: Are you sure you want to create a new partition table on %1? Esteu segurs que voleu crear una nova taula de particions a %1? Can not create new partition No es pot crear la partició nova The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. La taula de particions de %1 ja té %2 particions primàries i no se n'hi poden afegir més. Si us plau, suprimiu una partició primària i afegiu-hi una partició ampliada. PartitionViewStep Gathering system information... Es recopila informació del sistema... Partitions Particions Install %1 <strong>alongside</strong> another operating system. Instal·la %1 <strong>al costat</strong> d'un altre sistema operatiu. <strong>Erase</strong> disk and install %1. <strong>Esborra</strong> el disc i instal·la-hi %1. <strong>Replace</strong> a partition with %1. <strong>Reemplaça</strong> una partició amb %1. <strong>Manual</strong> partitioning. Particions <strong>manuals</strong>. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Instal·la %1 <strong>al costat</strong> d'un altre sistema operatiu al disc <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Esborra</strong> el disc <strong>%2</strong> (%3) i instal·la-hi %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Reemplaça</strong> una partició del disc <strong>%2</strong> (%3) amb %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Particions <strong>manuals</strong> del disc <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Disc <strong>%1</strong> (%2) Current: Actual: After: Després: No EFI system partition configured No hi ha cap partició EFI de sistema configurada An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. Cal una partició EFI de sistema per iniciar %1. <br/><br/>Per configurar una partició EFI de sistema, torneu enrere i seleccioneu o creeu un sistema de fitxers FAT32 amb la bandera <strong>esp</strong> habilitada i el punt de muntatge <strong>%2</strong>. <br/><br/>Podeu continuar sense la creació d'una partició EFI de sistema, però el sistema podria no iniciar-se. EFI system partition flag not set No s'ha establert la bandera de la partició EFI del sistema An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Cal una partició EFI de sistema per iniciar %1. <br/><br/> Ja s'ha configurat una partició amb el punt de muntatge <strong>%2</strong> però no se n'ha establert la bandera <strong>esp</strong>. Per establir-la-hi, torneu enrere i editeu la partició. <br/><br/>Podeu continuar sense establir la bandera, però el sistema podria no iniciar-se. Boot partition not encrypted Partició d'arrencada sense encriptar A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. S'ha establert una partició d'arrencada separada conjuntament amb una partició d'arrel encriptada, però la partició d'arrencada no està encriptada.<br/><br/>Hi ha assumptes de seguretat amb aquest tipus de configuració, perquè hi ha fitxers del sistema importants en una partició no encriptada.<br/>Podeu continuar, si així ho desitgeu, però el desbloqueig del sistema de fitxers succeirà després, durant l'inici del sistema.<br/>Per encriptar la partició d'arrencada, torneu enrere i torneu-la a crear seleccionant <strong>Encripta</strong> a la finestra de creació de la partició. has at least one disk device available. tingui com a mínim un dispositiu de disc disponible. There are no partitions to install on. No hi ha particions per fer-hi una instal·lació. PlasmaLnfJob Plasma Look-and-Feel Job Tasca d'aspecte i comportament del Plasma Could not select KDE Plasma Look-and-Feel package No s'ha pogut seleccionar el paquet de l'aspecte i comportament del Plasma de KDE. PlasmaLnfPage Form Formulari Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Si us plau, trieu un aspecte i comportament per a l'escriptori Plasma de KDE. També podeu ometre aquest pas i establir-ho un cop configurat el sistema. Quan cliqueu en una selecció d'aspecte i comportament podreu veure'n una previsualització. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Si us plau, trieu un aspecte i comportament per a l'escriptori Plasma de KDE. També podeu saltar aquest pas i configurar-ho un cop instal·lat el sistema. Quan cliqueu en una selecció d'aspecte i comportament podreu veure'n una previsualització. PlasmaLnfViewStep Look-and-Feel Aspecte i comportament PreserveFiles Saving files for later ... Es desen fitxers per a més tard... No files configured to save for later. No s'ha configurat cap fitxer per desar per a més tard. Not all of the configured files could be preserved. No s'han pogut conservar tots els fitxers configurats. ProcessResult There was no output from the command. No hi ha hagut sortida de l'ordre. Output: Sortida: External command crashed. L'ordre externa ha fallat. Command <i>%1</i> crashed. L'ordre <i>%1</i> ha fallat. External command failed to start. L'ordre externa no s'ha pogut iniciar. Command <i>%1</i> failed to start. L'ordre <i>%1</i> no s'ha pogut iniciar. Internal error when starting command. Error intern en iniciar l'ordre. Bad parameters for process job call. Paràmetres incorrectes per a la crida de la tasca del procés. External command failed to finish. L'ordre externa no ha acabat correctament. Command <i>%1</i> failed to finish in %2 seconds. L'ordre <i>%1</i> no ha pogut acabar en %2 segons. External command finished with errors. L'ordre externa ha acabat amb errors. Command <i>%1</i> finished with exit code %2. L'ordre <i>%1</i> ha acabat amb el codi de sortida %2. QObject Default Keyboard Model Model de teclat per defecte Default Per defecte unknown desconeguda extended ampliada unformatted sense format swap Intercanvi Unpartitioned space or unknown partition table Espai sense partir o taula de particions desconeguda (no mount point) (sense punt de muntatge) Requirements checking for module <i>%1</i> is complete. S'ha completat la comprovació dels requeriments per al mòdul <i>%1</i>. %1 (%2) language[name] (country[name]) %1 (%2) No product Cap producte No description provided. No se n'ha proporcionat cap descripció. File not found No s'ha trobat el fitxer. Path <pre>%1</pre> must be an absolute path. El camí <pre>%1</pre> ha de ser un camí absolut. Could not create new random file <pre>%1</pre>. No s'ha pogut crear el fitxer aleatori nou <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Suprimeix el grup de volums anomenat %1. Remove Volume Group named <strong>%1</strong>. Suprimeix el grup de volums anomenat <strong>%1</strong>. The installer failed to remove a volume group named '%1'. L'instal·lador ha fallat suprimir un grup de volums anomenat "%1". ReplaceWidget Form Formulari Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Seleccioneu on instal·lar %1.<br/><font color="red">Atenció: </font>això suprimirà tots els fitxers de la partició seleccionada. The selected item does not appear to be a valid partition. L'element seleccionat no sembla que sigui una partició vàlida. %1 cannot be installed on empty space. Please select an existing partition. %1 no es pot instal·lar en un espai buit. Si us plau, seleccioneu una partició existent. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 no es pot instal·lar en un partició ampliada. Si us plau, seleccioneu una partició existent primària o lògica. %1 cannot be installed on this partition. %1 no es pot instal·lar en aquesta partició. Data partition (%1) Partició de dades (%1) Unknown system partition (%1) Partició de sistema desconeguda (%1) %1 system partition (%2) %1 partició de sistema (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>La partició %1 és massa petita per a %2. Si us plau, seleccioneu una partició amb capacitat d'almenys %3 GB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/>No es pot trobar cap partició EFI enlloc del sistema. Si us plau, torneu enrere i useu les particions manuals per establir %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>%1 s'instal·larà a %2.<br/><font color="red">Atenció: </font>totes les dades de la partició %2 es perdran. The EFI system partition at %1 will be used for starting %2. La partició EFI de sistema a %1 s'usarà per iniciar %2. EFI system partition: Partició EFI del sistema: ResizeFSJob Resize Filesystem Job Tasca de canviar de mida un sistema de fitxers Invalid configuration Configuració no vàlida The file-system resize job has an invalid configuration and will not run. La tasca de canviar de mida un sistema de fitxers té una configuració no vàlida i no s'executarà. KPMCore not Available KPMCore no disponible Calamares cannot start KPMCore for the file-system resize job. El Calamares no pot iniciar KPMCore per a la tasca de canviar de mida un sistema de fitxers. Resize Failed Ha fallat el canvi de mida. The filesystem %1 could not be found in this system, and cannot be resized. El sistema de fitxers %1 no s'ha pogut trobar en aquest sistema i, per tant, no se'n pot canviar la mida. The device %1 could not be found in this system, and cannot be resized. El dispositiu &1 no s'ha pogut trobar en aquest sistema i, per tant, no se'n pot canviar la mida. The filesystem %1 cannot be resized. No es pot canviar la mida del sistema de fitxers %1. The device %1 cannot be resized. No es pot canviar la mida del dispositiu %1. The filesystem %1 must be resized, but cannot. Cal canviar la mida del sistema de fitxers %1, però no es pot. The device %1 must be resized, but cannot Cal canviar la mida del dispositiu %1, però no es pot. ResizePartitionJob Resize partition %1. Canvia la mida de la partició %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Canvia la mida de la partició de <strong>%2 MiB</strong>, <strong>%1</strong>, a <strong>%3 MiB</strong>. Resizing %2MiB partition %1 to %3MiB. Es canvia la mida de la partició %1 de %2 MiB a %3 MiB. The installer failed to resize partition %1 on disk '%2'. L'instal·lador no ha pogut canviar la mida de la partició %1 del disc %2. ResizeVolumeGroupDialog Resize Volume Group Canvia la mida del grup de volums ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Canvia la mida del grup de volums anomenat %1 de %2 a %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. Canvia la mida del grup de volums anomenat <strong>%1</strong> de <strong>%2</strong> a <strong>%3</strong>. The installer failed to resize a volume group named '%1'. L'instal·lador no ha pogut canviar la mida del grup de volums anomenat "%1". ResultsListDialog For best results, please ensure that this computer: Per obtenir els millors resultats, assegureu-vos, si us plau, que aquest ordinador... System requirements Requisits del sistema ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> Aquest ordinador no satisfà els requisits mínims per configurar-hi %1.<br/> La configuració no pot continuar. <a href="#details">Detalls...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> Aquest ordinador no satisfà els requisits mínims per instal·lar-hi %1.<br/> La instal·lació no pot continuar. <a href="#details">Detalls...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. Aquest ordinador no satisfà alguns dels requisits recomanats per configurar-hi %1.<br/>La configuració pot continuar, però algunes característiques podrien estar inhabilitades. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. Aquest ordinador no satisfà alguns dels requisits recomanats per instal·lar-hi %1.<br/>La instal·lació pot continuar, però algunes característiques podrien estar inhabilitades. This program will ask you some questions and set up %2 on your computer. Aquest programa us farà unes preguntes i instal·larà %2 a l'ordinador. ScanningDialog Scanning storage devices... S'escanegen els dispositius d'emmagatzematge... Partitioning Particions SetHostNameJob Set hostname %1 Estableix el nom d'amfitrió %1 Set hostname <strong>%1</strong>. Estableix el nom d'amfitrió <strong>%1</strong>. Setting hostname %1. S'estableix el nom d'amfitrió %1. Internal Error Error intern Cannot write hostname to target system No es pot escriure el nom d'amfitrió al sistema de destinació SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Canvia el model de teclat a %1, la disposició de teclat a %2-%3 Failed to write keyboard configuration for the virtual console. No s'ha pogut escriure la configuració del teclat per a la consola virtual. Failed to write to %1 No s'ha pogut escriure a %1 Failed to write keyboard configuration for X11. No s'ha pogut escriure la configuració del teclat per X11. Failed to write keyboard configuration to existing /etc/default directory. Ha fallat escriure la configuració del teclat al directori existent /etc/default. SetPartFlagsJob Set flags on partition %1. Estableix les banderes a la partició %1. Set flags on %1MiB %2 partition. Estableix les banderes a la partició %2 de %1 MiB. Set flags on new partition. Estableix les banderes a la partició nova. Clear flags on partition <strong>%1</strong>. Neteja les banderes de la partició <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Neteja les banderes de la partició <strong>%2</strong> de %1 MiB. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Estableix la bandera de la partició <strong>%2</strong> de %1 MiB com a <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Es netegen les banderes de la partició <strong>%2</strong>de %1 MiB. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. S'estableixen les banderes <strong>%3</strong> a la partició <strong>%2</strong> de %1 MiB. Clear flags on new partition. Neteja les banderes de la partició nova. Flag partition <strong>%1</strong> as <strong>%2</strong>. Estableix la bandera <strong>%2</strong> a la partició <strong>%1</strong>. Flag new partition as <strong>%1</strong>. Estableix la bandera de la partició nova com a <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Es netegen les banderes de la partició <strong>%1</strong>. Clearing flags on new partition. Es netegen les banderes de la partició nova. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Establint les banderes <strong>%2</strong> a la partició <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. S'estableixen les banderes <strong>%1</strong> a la partició nova. The installer failed to set flags on partition %1. L'instal·lador ha fallat en establir les banderes a la partició %1. SetPasswordJob Set password for user %1 Establiu una contrasenya per a l'usuari %1 Setting password for user %1. S'estableix la contrasenya per a l'usuari %1. Bad destination system path. Destinació errònia de la ruta del sistema. rootMountPoint is %1 El punt de muntatge de l'arrel és %1 Cannot disable root account. No es pot inhabilitar el compte d'arrel. passwd terminated with error code %1. El procés passwd ha acabat amb el codi d'error %1. Cannot set password for user %1. No es pot establir la contrasenya per a l'usuari %1. usermod terminated with error code %1. usermod ha terminat amb el codi d'error %1. SetTimezoneJob Set timezone to %1/%2 Estableix la zona horària a %1/%2 Cannot access selected timezone path. No es pot accedir al camí a la zona horària seleccionada. Bad path: %1 Camí incorrecte: %1 Cannot set timezone. No es pot establir la zona horària. Link creation failed, target: %1; link name: %2 Ha fallat la creació del vincle; destinació: %1, nom del vincle: %2 Cannot set timezone, No es pot establir la zona horària, Cannot open /etc/timezone for writing No es pot obrir /etc/timezone per escriure-hi ShellProcessJob Shell Processes Job Tasca de processos de l'intèrpret d'ordres SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage This is an overview of what will happen once you start the setup procedure. Això és un resum del que passarà quan s'iniciï el procés de configuració. This is an overview of what will happen once you start the install procedure. Això és un resum del que passarà quan s'iniciï el procés d'instal·lació. SummaryViewStep Summary Resum TrackingInstallJob Installation feedback Informació de retorn de la instal·lació Sending installation feedback. S'envia la informació de retorn de la instal·lació. Internal error in install-tracking. Error intern a install-tracking. HTTP request timed out. La petició HTTP ha esgotat el temps d'espera. TrackingMachineNeonJob Machine feedback Informació de retorn de la màquina Configuring machine feedback. Es configura la informació de retorn de la màquina. Error in machine feedback configuration. Error a la configuració de la informació de retorn de la màquina. Could not configure machine feedback correctly, script error %1. No s'ha pogut configurar la informació de retorn de la màquina correctament. Error d'script %1. Could not configure machine feedback correctly, Calamares error %1. No s'ha pogut configurar la informació de retorn de la màquina correctament. Error del Calamares %1. TrackingPage Form Formulari Placeholder Marcador de posició <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>Si seleccioneu això, no enviareu <span style=" font-weight:600;">cap mena d'informació</span> sobre la vostra instal·lació.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Cliqueu aquí per a més informació sobre la informació de retorn dels usuaris.</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. El seguiment de la instal·lació ajuda %1 a veure quants usuaris tenen, en quin maquinari s'instal·la %1 i (amb les últimes dues opcions de baix), a obtenir informació contínua d'aplicacions preferides. Per veure el que s'enviarà, cliqueu a la icona d'ajuda contigua a cada àrea. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. Si seleccioneu això, enviareu informació sobre la vostra instal·lació i el vostre maquinari. Aquesta informació <b>només s'enviarà un cop</b> després d'acabar la instal·lació. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. Si seleccioneu això, enviareu informació <b>periòdicament</b>sobre la instal·lació, el maquinari i les aplicacions a %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. Si seleccioneu això, enviareu informació <b>regularment</b>sobre la instal·lació, el maquinari, les aplicacions i els patrons d'ús a %1. TrackingViewStep Feedback Informació de retorn UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Si més d'una persona usarà aquest ordinador, podeu crear diversos comptes després de la configuració.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Si més d'una persona usarà aquest ordinador, podeu crear diversos comptes després de la instal·lació.</small> Your username is too long. El nom d'usuari és massa llarg. Your username must start with a lowercase letter or underscore. El nom d'usuari ha de començar amb una lletra en minúscula o una ratlla baixa. Only lowercase letters, numbers, underscore and hyphen are allowed. Només es permeten lletres en minúscula, números, ratlles baixes i guions. Only letters, numbers, underscore and hyphen are allowed. Només es permeten lletres, números, ratlles baixes i guions. Your hostname is too short. El nom d'amfitrió és massa curt. Your hostname is too long. El nom d'amfitrió és massa llarg. Your passwords do not match! Les contrasenyes no coincideixen! UsersViewStep Users Usuaris VariantModel Key Clau Value Valor VolumeGroupBaseDialog Create Volume Group Crea un grup de volums List of Physical Volumes Llista de volums físics Volume Group Name: Nom del grup de volums: Volume Group Type: Tipus del grup de volums: Physical Extent Size: Mida de l'extensió física: MiB MB Total Size: Mida total: Used Size: Mida usada: Total Sectors: Sectors totals: Quantity of LVs: Quantitat de volums lògics: WelcomePage Form Formulari Select application and system language Seleccioneu una aplicació i la llengua del sistema Open donations website Obre el lloc web per a les donacions &Donate Feu una &donació Open help and support website Obre el lloc web per a l'ajuda i el suport Open issues and bug-tracking website Obre el lloc web de problemes i de seguiment d'errors Open release notes website Obre el lloc web de les notes de la versió &Release notes &Notes de la versió &Known issues &Problemes coneguts &Support &Suport &About &Quant a <h1>Welcome to the %1 installer.</h1> <h1>Benvingut/da a l'instal·lador per a %1.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Benvingut/da a l'instal·lador Calamares per a %1.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Benvingut/da al programa de configuració del Calamares per a %1.</h1> <h1>Welcome to %1 setup.</h1> <h1>Benvingut/da a la configuració per a %1.</h1> About %1 setup Quant a la configuració de %1 About %1 installer Quant a l'instal·lador %1 <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Agraïments per a <a href="https://calamares.io/team/">l'equip del Calamares</a> i per a <a href="https://www.transifex.com/calamares/calamares/">l'equip de traductors del Calamares</a>.<br/><br/>El desenvolupament del<a href="https://calamares.io/">Calamares</a> està patrocinat per <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support %1 suport WelcomeQmlViewStep Welcome Benvinguda WelcomeViewStep Welcome Benvinguda notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>Aquestes són exemples de notes de la versió.</p> welcomeq <h3>%1 <quote>%2</quote></h3> <h3>%1 <quote>%2</quote></h3> About Quant a Support Suport Known issues Problemes coneguts Release notes Notes de la versió Donate Feu una donació calamares-3.2.20/lang/calamares_ca@valencia.ts000066400000000000000000004567101362604102500212310ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. BootLoaderModel Master Boot Record of %1 Boot Partition System Partition Do not install a boot loader %1 (%2) Calamares::BlankViewStep Blank Page Calamares::DebugWindow Form GlobalStorage JobQueue Modules Type: none Interface: Tools Reload Stylesheet Widget Tree Debug information Calamares::ExecutionViewStep Set up Install Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Calamares::PythonJob Running %1 operation. Bad working directory path Working directory %1 for python job %2 is not readable. Bad main script file Main script file %1 for python job %2 is not readable. Boost.Python error in job "%1". Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager &Back &Next &Cancel Cancel setup without changing the system. Cancel installation without changing the system. Setup Failed Would you like to paste the install log to the web? Install Log Paste URL The upload was unsuccessful. No web-paste was done. Calamares Initialization Failed %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. <br/>The following modules could not be loaded: Continue with installation? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Set up &Install Setup is complete. Close the setup program. Cancel setup? Cancel installation? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. &Yes &No &Close Continue with setup? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> &Install now Go &back &Done The installation is complete. Close the installer. Error Installation Failed CalamaresPython::Helper Unknown exception type unparseable Python error unparseable Python traceback Unfetchable Python error. CalamaresUtils Install log posted to: %1 CalamaresWindow %1 Setup Program %1 Installer Show debug information CheckerContainer Gathering system information... ChoicePage Form After: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Boot loader location: Select storage de&vice: Current: Reuse %1 as home partition for %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. <strong>Select a partition to install on</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. The EFI system partition at %1 will be used for starting %2. EFI system partition: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. No Swap Reuse Swap Swap (no Hibernate) Swap (with Hibernate) Swap to file <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. ClearMountsJob Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 ClearTempMountsJob Clear all temporary mounts. Clearing all temporary mounts. Cannot get list of temporary mounts. Cleared all temporary mounts. CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition MiB Partition &Type: &Primary E&xtended Fi&le System: LVM LV name Flags: &Mount Point: Si&ze: En&crypt Logical Primary GPT Mountpoint already in use. Please select another one. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. The installer failed to create partition on disk '%1'. CreatePartitionTableDialog Create Partition Table Creating a new partition table will delete all existing data on the disk. What kind of partition table do you want to create? Master Boot Record (MBR) GUID Partition Table (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Creating new %1 partition table on %2. The installer failed to create a partition table on %1. CreateUserJob Create user %1 Create user <strong>%1</strong>. Creating user %1. Sudoers dir is not writable. Cannot create sudoers file for writing. Cannot chmod sudoers file. Cannot open groups file for reading. CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. Delete partition <strong>%1</strong>. Deleting partition %1. The installer failed to delete partition %1. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. This device has a <strong>%1</strong> partition table. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - (%2) device[name] - (device-node[name]) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Failed to open %1 DummyCppJob Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Content: &Keep Format Warning: Formatting the partition will erase all existing data. &Mount Point: Si&ze: MiB Fi&le System: Flags: Mountpoint already in use. Please select another one. EncryptWidget Form En&crypt system Passphrase Confirm passphrase Please enter the same passphrase in both boxes. FillGlobalStorageJob Set partition information Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Install boot loader on <strong>%1</strong>. Setting up mount points. FinishedPage Form <Restart checkbox tooltip> &Restart now <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. FinishedViewStep Finish Setup Complete Installation Complete The setup of %1 is complete. The installation of %1 is complete. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatting partition %1 with file system %2. The installer failed to format partition %1 on disk '%2'. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source The system is not plugged in to a power source. is connected to the Internet The system is not connected to the Internet. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Please install KDE Konsole and try again! Executing script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script KeyboardPage Set keyboard model to %1.<br/> Set keyboard layout to %1/%2. KeyboardViewStep Keyboard LCLocaleDialog System locale setting The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. &Cancel &OK LicensePage Form <h1>License Agreement</h1> I accept the terms and conditions above. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> File: %1 Show the license text Open license agreement in browser. Hide license text LocalePage The system language will be set to %1. The numbers and dates locale will be set to %1. Region: Zone: &Change... Set timezone to %1/%2.<br/> LocaleViewStep Location LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Configuration Error No root mount point is set for MachineId. NetInstallPage Name Description Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Incorrect configuration) NetInstallViewStep Package selection Office software Office package Browser software Browser package Web browser Kernel Services Login Desktop Applications NotesQmlViewStep Notes OEMPage Ba&tch: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> OEMViewStep OEM Configuration Set the OEM Batch Identifier to <code>%1</code>. PWQ Password is too short Password is too long Password is too weak Memory allocation error when setting '%1' Memory allocation error The password is the same as the old one The password is a palindrome The password differs with case changes only The password is too similar to the old one The password contains the user name in some form The password contains words from the real name of the user in some form The password contains forbidden words in some form The password contains less than %1 digits The password contains too few digits The password contains less than %1 uppercase letters The password contains too few uppercase letters The password contains less than %1 lowercase letters The password contains too few lowercase letters The password contains less than %1 non-alphanumeric characters The password contains too few non-alphanumeric characters The password is shorter than %1 characters The password is too short The password is just rotated old one The password contains less than %1 character classes The password does not contain enough character classes The password contains more than %1 same characters consecutively The password contains too many same characters consecutively The password contains more than %1 characters of the same class consecutively The password contains too many characters of the same class consecutively The password contains monotonic sequence longer than %1 characters The password contains too long of a monotonic character sequence No password supplied Cannot obtain random numbers from the RNG device Password generation failed - required entropy too low for settings The password fails the dictionary check - %1 The password fails the dictionary check Unknown setting - %1 Unknown setting Bad integer value of setting - %1 Bad integer value Setting %1 is not of integer type Setting is not of integer type Setting %1 is not of string type Setting is not of string type Opening the configuration file failed The configuration file is malformed Fatal failure Unknown error Password is empty PackageChooserPage Form Product Name TextLabel Long Product Description Package Selection Please pick a product from the list. The selected product will be installed. PackageChooserViewStep Packages Page_Keyboard Form Keyboard Model: Type here to test your keyboard Page_UserSetup Form What is your name? What name do you want to use to log in? Choose a password to keep your account safe. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> What is the name of this computer? Your Full Name login <small>This name will be used if you make the computer visible to others on a network.</small> Computer Name Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Use the same password for the administrator account. Choose a password for the administrator account. <small>Enter the same password twice, so that it can be checked for typing errors.</small> PartitionLabelsView Root Home Boot EFI system Swap New partition for %1 New partition %1 %2 size[number] filesystem[name] PartitionModel Free Space New partition Name File System Mount Point Size PartitionPage Form Storage de&vice: &Revert All Changes New Partition &Table Cre&ate &Edit &Delete New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group I&nstall boot loader on: Are you sure you want to create a new partition table on %1? Can not create new partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. PartitionViewStep Gathering system information... Partitions Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <strong>Replace</strong> a partition with %1. <strong>Manual</strong> partitioning. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Current: After: No EFI system partition configured An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. EFI system partition flag not set An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: External command crashed. Command <i>%1</i> crashed. External command failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Bad parameters for process job call. External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Command <i>%1</i> finished with exit code %2. QObject Default Keyboard Model Default unknown extended unformatted swap Unpartitioned space or unknown partition table (no mount point) Requirements checking for module <i>%1</i> is complete. %1 (%2) language[name] (country[name]) No product No description provided. File not found Path <pre>%1</pre> must be an absolute path. Could not create new random file <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. The selected item does not appear to be a valid partition. %1 cannot be installed on empty space. Please select an existing partition. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 cannot be installed on this partition. Data partition (%1) Unknown system partition (%1) %1 system partition (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. The EFI system partition at %1 will be used for starting %2. EFI system partition: ResizeFSJob Resize Filesystem Job Invalid configuration The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. ResizeVolumeGroupDialog Resize Volume Group ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: System requirements ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. This program will ask you some questions and set up %2 on your computer. ScanningDialog Scanning storage devices... Partitioning SetHostNameJob Set hostname %1 Set hostname <strong>%1</strong>. Setting hostname %1. Internal Error Cannot write hostname to target system SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Failed to write keyboard configuration for the virtual console. Failed to write to %1 Failed to write keyboard configuration for X11. Failed to write keyboard configuration to existing /etc/default directory. SetPartFlagsJob Set flags on partition %1. Set flags on %1MiB %2 partition. Set flags on new partition. Clear flags on partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag new partition as <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. SetPasswordJob Set password for user %1 Setting password for user %1. Bad destination system path. rootMountPoint is %1 Cannot disable root account. passwd terminated with error code %1. Cannot set password for user %1. usermod terminated with error code %1. SetTimezoneJob Set timezone to %1/%2 Cannot access selected timezone path. Bad path: %1 Cannot set timezone. Link creation failed, target: %1; link name: %2 Cannot set timezone, Cannot open /etc/timezone for writing ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) SummaryPage This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. SummaryViewStep Summary TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingMachineNeonJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form Placeholder <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. TrackingViewStep Feedback UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> Your username is too long. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Only letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Your hostname is too long. Your passwords do not match! UsersViewStep Users VariantModel Key Value VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB Total Size: Used Size: Total Sectors: Quantity of LVs: WelcomePage Form Select application and system language Open donations website &Donate Open help and support website Open issues and bug-tracking website Open release notes website &Release notes &Known issues &Support &About <h1>Welcome to the %1 installer.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Welcome to %1 setup.</h1> About %1 setup About %1 installer Sobre %1 instal·lador <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support %1 soport WelcomeQmlViewStep Welcome Benvingut WelcomeViewStep Welcome Benvingut notesqml <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> About Support Known issues Release notes Donate calamares-3.2.20/lang/calamares_cs_CZ.ts000066400000000000000000005573471362604102500200540ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. <strong>ZavádÄ›cí prostÅ™edí</strong> tohoto systému.<br><br>Starší x86 systémy podporují pouze <strong>BIOS</strong>.<br>Moderní systémy obvykle používají <strong>UEFI</strong>, ale pokud jsou spuÅ¡tÄ›né v režimu kompatibility, mohou se zobrazovat jako BIOS. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. Systém byl spuÅ¡tÄ›n se zavádÄ›cím prostÅ™edím <strong>EFI</strong>.<br><br>Aby byl systém zavádÄ›n prostÅ™edím EFI je tÅ™eba, aby instalátor nasadil na <strong> EFI systémový oddíl</strong>aplikaci pro zavádÄ›ní systému, jako <strong>GRUB</strong> nebo <strong>systemd-boot</strong>. To probÄ›hne automaticky, tedy pokud si nezvolíte ruÄní dÄ›lení datového úložiÅ¡tÄ› – v takovém případÄ› si EFI systémový oddíl volíte nebo vytváříte sami. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. Systém byl spuÅ¡tÄ›n se zavádÄ›cím prostÅ™edím <strong>BIOS</strong>.<br><br>Aby byl systém zavádÄ›n prostÅ™edím BIOS je tÅ™eba, aby instalátor vpravil zavadÄ›Ä systému, jako <strong>GRUB</strong>, buÄ na zaÄátek oddílu nebo (lépe) do <strong>hlavního zavádÄ›cího záznamu (MBR)</strong> na zaÄátku tabulky oddílů. To probÄ›hne automaticky, tedy pokud si nezvolíte ruÄní dÄ›lení datového úložiÅ¡tÄ› – v takovém případÄ› si zavádÄ›ní nastavujete sami. BootLoaderModel Master Boot Record of %1 Hlavní zavádÄ›cí záznam (MBR) na %1 Boot Partition ZavádÄ›cí oddíl System Partition Systémový oddíl Do not install a boot loader Neinstalovat zavadÄ›Ä systému %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page Prázdná stránka Calamares::DebugWindow Form Formulář GlobalStorage Globální úložiÅ¡tÄ› JobQueue Zpracovává se Modules Moduly Type: Typ: none žádný Interface: Rozhraní: Tools Nástroje Reload Stylesheet ZnovunaÄíst seÅ¡it se styly Widget Tree Strom widgetu Debug information Ladící informace Calamares::ExecutionViewStep Set up Nastavit Install Instalovat Calamares::FailJob Job failed (%1) Úloha se nezdaÅ™ila (%1) Programmed job failure was explicitly requested. Byl výslovnÄ› vyžádán nezdar naprogramované úlohy. Calamares::JobThread Done Hotovo Calamares::NamedJob Example job (%1) Úloha pro ukázku (%1) Calamares::ProcessJob Run command '%1' in target system. Spustit v cílovém systému příkaz „%1“. Run command '%1'. Spustit příkaz „%1“ Running command %1 %2 SpouÅ¡tÄ›ní příkazu %1 %2 Calamares::PythonJob Running %1 operation. SpouÅ¡tÄ›ní %1 operace. Bad working directory path Chybný popis umístÄ›ní pracovní složky Working directory %1 for python job %2 is not readable. Pracovní složku %1 pro Python skript %2 se nedaří otevřít pro Ätení. Bad main script file Nesprávný soubor s hlavním skriptem Main script file %1 for python job %2 is not readable. Hlavní soubor s python skriptem %1 pro úlohu %2 se nedaří otevřít pro Ätení.. Boost.Python error in job "%1". Boost.Python chyba ve skriptu „%1“. Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Waiting for %n module(s). ÄŒeká se na %n modul ÄŒeká se na %n moduly ÄŒeká se na %n modulů ÄŒeká se na %n moduly (%n second(s)) (%n sekundu) (%n sekundy) (%n sekund) (%n sekundy) System-requirements checking is complete. Kontrola požadavků na systém dokonÄena. Calamares::ViewManager &Back &ZpÄ›t &Next &Další &Cancel &Storno Cancel setup without changing the system. ZruÅ¡it nastavení bez zmÄ›ny v systému. Cancel installation without changing the system. ZruÅ¡ení instalace bez provedení zmÄ›n systému. Setup Failed Nastavení se nezdaÅ™ilo Would you like to paste the install log to the web? Chcete vyvÄ›sit záznam událostí pÅ™i instalaci na web? Install Log Paste URL URL pro vložení záznamu událostí pÅ™i instalaci The upload was unsuccessful. No web-paste was done. Nahrání se nezdaÅ™ilo. Na web nebylo nic vloženo. Calamares Initialization Failed Inicializace Calamares se nezdaÅ™ila %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. %1 nemůže být nainstalováno. Calamares se nepodaÅ™ilo naÄíst vÅ¡echny nastavené moduly. Toto je problém způsobu použití Calamares ve vámi používané distribuci. <br/>The following modules could not be loaded: <br/> Následující moduly se nepodaÅ™ilo naÄíst: Continue with installation? PokraÄovat v instalaci? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> Instalátor %1 provede zmÄ›ny na datovém úložiÅ¡ti, aby bylo nainstalováno %2.<br/><strong>ZmÄ›ny nebude možné vrátit zpÄ›t.</strong> &Set up now Na&stavit nyní &Set up Na&stavit &Install Na&instalovat Setup is complete. Close the setup program. Nastavení je dokonÄeno. UkonÄete nastavovací program. Cancel setup? ZruÅ¡it nastavování? Cancel installation? PÅ™eruÅ¡it instalaci? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Opravdu chcete pÅ™eruÅ¡it instalaci? InstalaÄní program bude ukonÄen a vÅ¡echny zmÄ›ny ztraceny. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Opravdu chcete instalaci pÅ™eruÅ¡it? InstalaÄní program bude ukonÄen a vÅ¡echny zmÄ›ny ztraceny. &Yes &Ano &No &Ne &Close &Zavřít Continue with setup? PokraÄovat s instalací? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> Instalátor %1 provede zmÄ›ny na datovém úložiÅ¡ti, aby bylo nainstalováno %2.<br/><strong>ZmÄ›ny nebude možné vrátit zpÄ›t.</strong> &Install now &Spustit instalaci Go &back Jít &zpÄ›t &Done &Hotovo The installation is complete. Close the installer. Instalace je dokonÄena. UkonÄete instalátor. Error Chyba Installation Failed Instalace se nezdaÅ™ila CalamaresPython::Helper Unknown exception type Neznámý typ výjimky unparseable Python error Chyba pÅ™i zpracovávání (parse) Python skriptu. unparseable Python traceback Chyba pÅ™i zpracovávání (parse) Python záznamu volání funkcí (traceback). Unfetchable Python error. Chyba pÅ™i naÄítání Python skriptu. CalamaresUtils Install log posted to: %1 Záznam událostí instalace vyvěšen na: %1 CalamaresWindow %1 Setup Program Instalátor %1 %1 Installer %1 instalátor Show debug information Zobrazit ladící informace CheckerContainer Gathering system information... ShromažÄování informací o systému… ChoicePage Form Formulář After: Po: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>RuÄní rozdÄ›lení datového úložiÅ¡tÄ›</strong><br/>Sami si můžete vytvoÅ™it vytvoÅ™it nebo zvÄ›tÅ¡it/zmenÅ¡it oddíly. Boot loader location: UmístÄ›ní zavadÄ›Äe: Select storage de&vice: &Vyberte úložné zařízení: Current: Stávající: Reuse %1 as home partition for %2. Zrecyklovat %1 na oddíl pro domovské složky %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Vyberte oddíl, který chcete zmenÅ¡it, poté posouváním na spodní liÅ¡tÄ› změňte jeho velikost.</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 bude zmenÅ¡en na %2MiB a nový %3MiB oddíl pro %4 bude vytvoÅ™en. <strong>Select a partition to install on</strong> <strong>Vyberte oddíl na který nainstalovat</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Nebyl nalezen žádný EFI systémový oddíl. VraÅ¥te se zpÄ›t a nastavte %1 pomocí ruÄního rozdÄ›lení. The EFI system partition at %1 will be used for starting %2. Pro zavedení %2 se využije EFI systémový oddíl %1. EFI system partition: EFI systémový oddíl: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Zdá se, že na tomto úložném zařízení není žádný operaÄní systém. Jak chcete postupovat?<br/>Než budou provedeny jakékoli zmÄ›ny na úložných zařízeních, bude zobrazen jejich pÅ™ehled a budete požádáni o jejich potvrzení. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Vymazat datové úložiÅ¡tÄ›</strong><br/>Touto volbou budou <font color="red">smazána</font> vÅ¡echna data, která se na nÄ›m nyní nacházejí. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Na tomto úložném zařízení bylo nalezeno %1. Jak chcete postupovat?<br/>Než budou provedeny jakékoli zmÄ›ny na úložných zařízeních, bude zobrazen jejich pÅ™ehled a budete požádáni o jejich potvrzení. No Swap Žádný odkládací prostor (swap) Reuse Swap Použít existující odkládací prostor Swap (no Hibernate) Odkládací prostor (bez uspávání na disk) Swap (with Hibernate) Odkládací prostor (s uspáváním na disk) Swap to file Odkládat do souboru <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Nainstalovat vedle</strong><br/>Instalátor zmenší oddíl a vytvoří místo pro %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Nahradit oddíl</strong><br/>Původní oddíl bude nahrazen %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Na tomto úložném zařízení se už nachází operaÄní systém. Jak chcete postupovat?<br/>Než budou provedeny jakékoli zmÄ›ny na úložných zařízeních, bude zobrazen jejich pÅ™ehled a budete požádáni o jejich potvrzení. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Na tomto úložném zařízení se už nachází nÄ›kolik operaÄních systémů. Jak chcete postupovat?<br/>Než budou provedeny jakékoli zmÄ›ny na úložných zařízeních, bude zobrazen jejich pÅ™ehled zmÄ›n a budete požádáni o jejich potvrzení. ClearMountsJob Clear mounts for partitioning operations on %1 Odpojit souborové systémy pÅ™ed zahájením dÄ›lení %1 na oddíly Clearing mounts for partitioning operations on %1. Odpojují se souborové systémy pÅ™ed zahájením dÄ›lení %1 na oddíly Cleared all mounts for %1 VÅ¡echny souborové systémy na %1 odpojeny ClearTempMountsJob Clear all temporary mounts. Odpojit vÅ¡echny doÄasné přípojné body. Clearing all temporary mounts. Odpojují se vÅ¡echny doÄasné přípojné body. Cannot get list of temporary mounts. NepodaÅ™ilo získat seznam doÄasných přípojných bodů. Cleared all temporary mounts. VÅ¡echny přípojné body odpojeny. CommandList Could not run command. Nedaří se spustit příkaz. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. Příkaz bude spuÅ¡tÄ›n v prostÅ™edí hostitele a potÅ™ebuje znát popis umístÄ›ní koÅ™ene souborového systému. rootMountPoint ale není zadaný. The command needs to know the user's name, but no username is defined. Příkaz potÅ™ebuje znát uživatelské jméno, to ale zadáno nebylo. ContextualProcessJob Contextual Processes Job Úloha kontextuálních procesů CreatePartitionDialog Create a Partition VytvoÅ™it oddíl MiB MiB Partition &Type: &Typ oddílu: &Primary &Primární E&xtended &Rozšířený Fi&le System: &Souborový systém: LVM LV name Název LVM logického svazku Flags: Příznaky: &Mount Point: &Přípojný bod: Si&ze: &Velikost: En&crypt Å &ifrovat Logical Logický Primary Primární GPT GPT Mountpoint already in use. Please select another one. Tento přípojný bod už je používán – vyberte jiný. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. VytvoÅ™it nový %2MiB oddíl na %4 (%3) se souborovým systémem %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. VytvoÅ™it nový <strong>%2MiB</strong> oddíl na <strong>%4</strong> (%3) se souborovým systémem <strong>%1</strong>. Creating new %1 partition on %2. Vytváří se nový %1 oddíl na %2. The installer failed to create partition on disk '%1'. Instalátoru se nepodaÅ™ilo vytvoÅ™it oddíl na datovém úložiÅ¡ti „%1“. CreatePartitionTableDialog Create Partition Table VytvoÅ™it tabulku oddílů Creating a new partition table will delete all existing data on the disk. VytvoÅ™ení nové tabulky oddílů vymaže vÅ¡echna stávající data na jednotce. What kind of partition table do you want to create? Jaký typ tabulky oddílů si pÅ™ejete vytvoÅ™it? Master Boot Record (MBR) Master Boot Record (MBR) GUID Partition Table (GPT) GUID Partition Table (GPT) CreatePartitionTableJob Create new %1 partition table on %2. VytvoÅ™it novou %1 tabulku oddílů na %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). VytvoÅ™it novou <strong>%1</strong> tabulku oddílů na <strong>%2</strong> (%3). Creating new %1 partition table on %2. Vytváří se nová %1 tabulka oddílů na %2. The installer failed to create a partition table on %1. Instalátoru se nepodaÅ™ilo vytvoÅ™it tabulku oddílů na %1. CreateUserJob Create user %1 VytvoÅ™it uživatele %1 Create user <strong>%1</strong>. VytvoÅ™it uživatele <strong>%1</strong>. Creating user %1. Vytváří se úÄet pro uživatele %1. Sudoers dir is not writable. Nedaří se zapsat do složky sudoers.d. Cannot create sudoers file for writing. NepodaÅ™ilo se vytvoÅ™it soubor pro sudoers tak, aby do nÄ›j Å¡lo zapsat. Cannot chmod sudoers file. NepodaÅ™ilo se zmÄ›nit přístupová práva (chmod) na souboru se sudoers. Cannot open groups file for reading. NepodaÅ™ilo se otevřít soubor groups pro Ätení. CreateVolumeGroupDialog Create Volume Group VytvoÅ™it skupinu svazků CreateVolumeGroupJob Create new volume group named %1. VytvoÅ™it novou skupinu svazků nazvanou %1. Create new volume group named <strong>%1</strong>. VytvoÅ™it novou skupinu svazků nazvanou <strong>%1</strong>. Creating new volume group named %1. Vytváří se nová skupina svazků nazvaná %1. The installer failed to create a volume group named '%1'. Instalátoru se nepodaÅ™ilo vytvoÅ™it skupinu svazků nazvanou „%1“. DeactivateVolumeGroupJob Deactivate volume group named %1. Deaktivovat skupinu svazků nazvanou %1. Deactivate volume group named <strong>%1</strong>. Deaktivovat skupinu svazků nazvanou <strong>%1</strong>. The installer failed to deactivate a volume group named %1. Instalátoru se nepodaÅ™ilo deaktivovat skupinu svazků nazvanou %1. DeletePartitionJob Delete partition %1. Smazat oddíl %1. Delete partition <strong>%1</strong>. Smazat oddíl <strong>%1</strong>. Deleting partition %1. Odstraňuje se oddíl %1. The installer failed to delete partition %1. Instalátoru se nepodaÅ™ilo odstranit oddíl %1. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. Typ <strong>tabulky oddílů</strong>, který je na vybraném úložném zařízení.<br><br>Jedinou možností jak zmÄ›nit typ tabulky oddílů je smazání a opÄ›tovné vytvoÅ™ení nové tabulky oddílů, tím se smažou vÅ¡echna data na daném úložném zařízení.<br>Tento instalátor ponechá stávající typ tabulky oddílů, pokud si sami nenavolíte jeho zmÄ›nu.<br>Pokud si nejste jisti, na moderních systémech se upÅ™ednostňuje GPT. This device has a <strong>%1</strong> partition table. Na tomto zařízení je tabulka oddílů <strong>%1</strong>. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. Vybrané úložné zařízení je <strong>loop</strong> zařízení.<br><br> Nejedná se o vlastní tabulku oddílů, je to pseudo zařízení, které zpřístupňuje soubory blokovÄ›. Tento typ nastavení vÄ›tÅ¡inou obsahuje jediný systém souborů. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. InstalaÄní program na zvoleném zařízení <strong>nezjistil žádnou tabulku oddílů</strong>.<br><br>Toto zařízení buÄ Å¾Ã¡dnou tabulku nemá nebo je poruÅ¡ená nebo neznámého typu.<br> Instalátor může vytvoÅ™it novou tabulku oddílů – buÄ automaticky nebo pÅ™es ruÄní rozdÄ›lení jednotky. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Toto je doporuÄený typ tabulky oddílů pro moderní systémy, které se spouÅ¡tí pomocí <strong>UEFI</strong> zavádÄ›cího prostÅ™edí. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. <br><br>Tento typ tabulky oddílů je vhodný pro starší systémy, které jsou spouÅ¡tÄ›ny z prostÅ™edí <strong>BIOS</strong>. Více se dnes využívá GPT.<br><strong>UpozornÄ›ní:</strong> Tabulka oddílů MBR je zastaralý standard z dob MS-DOS.<br>Lze vytvoÅ™it pouze 4 <em>primární</em> oddíly, a z tÄ›chto 4, jeden může být <em>rozšířeným</em> oddílem, který potom může obsahovat více <em>logických</em> oddílů. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 – %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1 – (%2) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Zapsat nastavení LUKS pro Dracut do %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted PÅ™eskoÄit zápis nastavení LUKS pro Dracut: oddíl „/“ není Å¡ifrovaný Failed to open %1 NepodaÅ™ilo se otevřít %1 DummyCppJob Dummy C++ Job Výplňová úloha C++ EditExistingPartitionDialog Edit Existing Partition Upravit existující oddíl Content: Obsah: &Keep &Zachovat Format Formátovat Warning: Formatting the partition will erase all existing data. Varování: Formátování oddílu vymaže vÅ¡echna data. &Mount Point: &Přípojný bod: Si&ze: &Velikost: MiB MiB Fi&le System: &Souborový systém: Flags: Příznaky: Mountpoint already in use. Please select another one. Tento přípojný bod je už používán – vyberte jiný. EncryptWidget Form Formulář En&crypt system Z&aÅ¡ifrovat systém Passphrase Heslová fráze Confirm passphrase Potvrzení heslové fráze Please enter the same passphrase in both boxes. Zadejte stejnou heslovou frázi do obou kolonek. FillGlobalStorageJob Set partition information Nastavit informace o oddílu Install %1 on <strong>new</strong> %2 system partition. Nainstalovat %1 na <strong>nový</strong> %2 systémový oddíl. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Nastavit <strong>nový</strong> %2 oddíl s přípojným bodem <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Nainstalovat %2 na %3 systémový oddíl <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Nastavit %3 oddíl <strong>%1</strong> s přípojným bodem <strong>%2</strong>. Install boot loader on <strong>%1</strong>. Nainstalovat zavadÄ›Ä do <strong>%1</strong>. Setting up mount points. Nastavují se přípojné body. FinishedPage Form Formulář <Restart checkbox tooltip> <Restart checkbox tooltip> &Restart now &Restartovat nyní <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>Instalace je u konce.</h1><br/>%1 byl nainstalován na váš poÄítaÄ.<br/>Nyní ho můžete restartovat a pÅ™ejít do ÄerstvÄ› nainstalovaného systému, nebo můžete pokraÄovat v práci ve stávajícím prostÅ™edím %2, spuÅ¡tÄ›ným z instalaÄního média. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <html><head/><body><p>Když je tato kolonka zaÅ¡krtnutá, systém se restartuje jakmile kliknete na <span style="font-style:italic;">Hotovo</span> nebo zavÅ™ete instalátor.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>Instalace je u konce.</h1><br/>%1 bylo nainstalováno na váš poÄítaÄ.<br/>Nyní ho můžete restartovat a pÅ™ejít do ÄerstvÄ› nainstalovaného systému, nebo můžete pokraÄovat v práci ve stávajícím prostÅ™edím %2, spuÅ¡tÄ›ným z instalaÄního média. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <html><head/><body><p>Když je tato kolonka zaÅ¡krtnutá, systém se restartuje jakmile kliknete na <span style="font-style:italic;">Hotovo</span> nebo zavÅ™ete instalátor.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Instalace se nezdaÅ™ila</h1><br/>%1 nebyl instalován na váš poÄítaÄ.<br/>Hlášení o chybÄ›: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Instalace se nezdaÅ™ila</h1><br/>%1 nebylo nainstalováno na váš poÄítaÄ.<br/>Hlášení o chybÄ›: %2. FinishedViewStep Finish DokonÄit Setup Complete Nastavení dokonÄeno Installation Complete Instalace dokonÄena The setup of %1 is complete. Nastavení %1 je dokonÄeno. The installation of %1 is complete. Instalace %1 je dokonÄena. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Formátovat oddíl %1 (souborový systém: %2, velikost %3 MiB) na %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Naformátovat <strong>%3MiB</strong> oddíl <strong>%1</strong> souborovým systémem <strong>%2</strong>. Formatting partition %1 with file system %2. Vytváření souborového systému %2 na oddílu %1. The installer failed to format partition %1 on disk '%2'. Instalátoru se nepodaÅ™ilo vytvoÅ™it souborový systém na oddílu %1 jednotky datového úložiÅ¡tÄ› „%2“. GeneralRequirements has at least %1 GiB available drive space má alespoň %1 GiB dostupného prostoru There is not enough drive space. At least %1 GiB is required. Nedostatek místa na úložiÅ¡ti. Je potÅ™eba nejménÄ› %1 GiB. has at least %1 GiB working memory má alespoň %1 GiB operaÄní pamÄ›ti The system does not have enough working memory. At least %1 GiB is required. Systém nemá dostatek operaÄní pamÄ›ti. Je potÅ™eba nejménÄ› %1 GiB. is plugged in to a power source je pÅ™ipojený ke zdroji napájení The system is not plugged in to a power source. Systém není pÅ™ipojen ke zdroji napájení. is connected to the Internet je pÅ™ipojený k Internetu The system is not connected to the Internet. Systém není pÅ™ipojený k Internetu. is running the installer as an administrator (root) instalátor je spuÅ¡tÄ›ný s právy správce systému (root) The setup program is not running with administrator rights. Nastavovací program není spuÅ¡tÄ›n s právy správce systému. The installer is not running with administrator rights. InstalaÄní program není spuÅ¡tÄ›n s právy správce systému. has a screen large enough to show the whole installer má obrazovku dostateÄnÄ› velkou pro zobrazení celého instalátoru The screen is too small to display the setup program. RozliÅ¡ení obrazovky je příliÅ¡ malé pro zobrazení nastavovacího programu. The screen is too small to display the installer. RozliÅ¡ení obrazovky je příliÅ¡ malé pro zobrazení instalátoru. HostInfoJob Collecting information about your machine. ShromažÄují se informací o stroji. IDJob OEM Batch Identifier Identifikátor OEM série Could not create directories <code>%1</code>. Nedaří se vytvoÅ™it složky <code>%1</code>. Could not open file <code>%1</code>. Nedaří se otevřít soubor <code>%1</code>. Could not write to file <code>%1</code>. Nedaří se zapsat do souboru <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. Vytváření initramfs pomocí mkinitcpio. InitramfsJob Creating initramfs. Vytváření initramfs. InteractiveTerminalPage Konsole not installed Konsole není nainstalované. Please install KDE Konsole and try again! Nainstalujte KDE Konsole a zkuste to znovu! Executing script: &nbsp;<code>%1</code> SpouÅ¡tÄ›ní skriptu: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script Skript KeyboardPage Set keyboard model to %1.<br/> Nastavit model klávesnice na %1.<br/> Set keyboard layout to %1/%2. Nastavit rozložení klávesnice na %1/%2. KeyboardViewStep Keyboard Klávesnice LCLocaleDialog System locale setting Místní a jazykové nastavení systému The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. Místní a jazykové nastavení systému ovlivňuje jazyk a znakovou sadu nÄ›kterých prvků rozhraní příkazového řádku.<br/>Stávající nastavení je <strong>%1</strong>. &Cancel &Storno &OK &OK LicensePage Form Formulář <h1>License Agreement</h1> <h1>LicenÄní ujednání</h1> I accept the terms and conditions above. Souhlasím s výše uvedenými podmínkami. Please review the End User License Agreements (EULAs). ProÄtÄ›te si Smlouvy s koncovými uživatelem (EULA). This setup procedure will install proprietary software that is subject to licensing terms. Tato nastavovací procedura nainstaluje proprietární software, který je pÅ™edmÄ›tem licenÄních podmínek. If you do not agree with the terms, the setup procedure cannot continue. Pokud s podmínkami nesouhlasíte, instalaÄní procedura nemůže pokraÄovat. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Pro poskytování dalších funkcí a vylepÅ¡ení pro uživatele, tato nastavovací procedura nainstaluje i proprietární software, který je pÅ™edmÄ›tem licenÄních podmínek. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Pokud nesouhlasíte s podmínkami, proprietární software nebude nainstalován a namísto toho budou použity opensource alternativy. LicenseViewStep License Licence LicenseWidget URL: %1 URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 ovladaÄ</strong><br/>od %2 <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 ovladaÄ grafiky</strong><br/><font color="Grey">od %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 doplnÄ›k prohlížeÄe</strong><br/><font color="Grey">od %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 kodek</strong><br/><font color="Grey">od %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 balíÄek</strong><br/><font color="Grey">od %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">od %2</font> File: %1 Soubor: %1 Show the license text Zobrazit text licence Open license agreement in browser. Otevřít licenÄní ujednání v prohlížeÄi. Hide license text Skrýt text licence LocalePage The system language will be set to %1. Jazyk systému bude nastaven na %1. The numbers and dates locale will be set to %1. Formát zobrazení Äísel, data a Äasu bude nastaven dle národního prostÅ™edí %1. Region: Oblast: Zone: Pásmo: &Change... &ZmÄ›nit… Set timezone to %1/%2.<br/> Nastavit Äasové pásmo na %1/%2.<br/> LocaleViewStep Location Poloha LuksBootKeyFileJob Configuring LUKS key file. Nastavování souboru s klíÄem pro LUKS Å¡ifrování. No partitions are defined. Nejsou definovány žádné oddíly. Encrypted rootfs setup error Chyba nastavení Å¡ifrovaného koÅ™enového oddílu Root partition %1 is LUKS but no passphrase has been set. KoÅ™enový oddíl %1 je LUKS, ale nebyla nastavena žádná heslová fráze. Could not create LUKS key file for root partition %1. Nedaří se vytvoÅ™it LUKS klÃ­Ä pro koÅ™enový oddíl %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. VytvoÅ™it identifikátor stroje. Configuration Error Chyba nastavení No root mount point is set for MachineId. Pro MachineId není nastaven žádný koÅ™enový přípojný bod. NetInstallPage Name Jméno Description Popis Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Síťová instalace. (Vypnuto: Nedaří se stáhnout seznamy balíÄků – zkontrolujte pÅ™ipojení k síti) Network Installation. (Disabled: Received invalid groups data) Síťová instalace. (Vypnuto: Obdrženy neplatné údaje skupin) Network Installation. (Disabled: Incorrect configuration) Síťová instalace. (vypnuto: nesprávné nastavení) NetInstallViewStep Package selection VýbÄ›r balíÄků Office software Office package Browser software Browser package Web browser Kernel Services Login Desktop Applications NotesQmlViewStep Notes OEMPage Ba&tch: &Série: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>Sem zadejte identifikátor série. Toto bude uloženo v cílovém systému.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>Nastavení pro OEM</h1><p>Calamares tato nastavení použije pÅ™i nastavování cílového systému.</p></body></html> OEMViewStep OEM Configuration Nastavení pro OEM Set the OEM Batch Identifier to <code>%1</code>. Nastavit identifikátor OEM série na <code>%1</code>. PWQ Password is too short Heslo je příliÅ¡ krátké Password is too long Heslo je příliÅ¡ dlouhé Password is too weak Heslo je příliÅ¡ slabé Memory allocation error when setting '%1' Chyba pÅ™idÄ›lování pamÄ›ti pÅ™i nastavování „%1“ Memory allocation error Chyba pÅ™i pÅ™idÄ›lování pamÄ›ti The password is the same as the old one Heslo je stejné jako to pÅ™echozí The password is a palindrome Heslo je palindrom (je stejné i pozpátku) The password differs with case changes only Heslo se liší pouze zmÄ›nou velikosti písmen The password is too similar to the old one Heslo je příliÅ¡ podobné tomu pÅ™edchozímu The password contains the user name in some form Heslo obsahuje nÄ›jakou formou uživatelské jméno The password contains words from the real name of the user in some form Heslo obsahuje obsahuje nÄ›jakou formou slova ze jména uživatele The password contains forbidden words in some form Heslo obsahuje nÄ›jakou formou slova, která není možné použít The password contains less than %1 digits Heslo obsahuje ménÄ› než %1 Äíslic The password contains too few digits Heslo obsahuje příliÅ¡ málo Äíslic The password contains less than %1 uppercase letters Heslo obsahuje ménÄ› než %1 velkých písmen The password contains too few uppercase letters Heslo obsahuje příliÅ¡ málo velkých písmen The password contains less than %1 lowercase letters Heslo obsahuje ménÄ› než %1 malých písmen The password contains too few lowercase letters Heslo obsahuje příliÅ¡ málo malých písmen The password contains less than %1 non-alphanumeric characters Heslo obsahuje ménÄ› než %1 speciálních znaků The password contains too few non-alphanumeric characters Heslo obsahuje příliÅ¡ málo speciálních znaků The password is shorter than %1 characters Heslo je kratší než %1 znaků The password is too short Heslo je příliÅ¡ krátké The password is just rotated old one Heslo je jen nÄ›které z pÅ™edchozích The password contains less than %1 character classes Heslo obsahuje ménÄ› než %1 druhů znaků The password does not contain enough character classes Heslo není tvoÅ™eno dostateÄným poÄtem druhů znaků The password contains more than %1 same characters consecutively Heslo obsahuje více než %1 stejných znaků za sebou The password contains too many same characters consecutively Heslo obsahuje příliÅ¡ mnoho stejných znaků za sebou The password contains more than %1 characters of the same class consecutively Heslo obsahuje více než %1 znaků ze stejné třídy za sebou The password contains too many characters of the same class consecutively Heslo obsahuje příliÅ¡ mnoho znaků stejného druhu za sebou The password contains monotonic sequence longer than %1 characters Heslo obsahuje monotónní posloupnost delší než %1 znaků The password contains too long of a monotonic character sequence Heslo obsahuje příliÅ¡ dlouhou monotónní posloupnost No password supplied Nebylo zadáno žádné heslo Cannot obtain random numbers from the RNG device Nedaří se získat náhodná Äísla ze zařízení generátoru náhodných Äísel (RNG) Password generation failed - required entropy too low for settings VytvoÅ™ení hesla se nezdaÅ™ilo – úroveň nahodilosti je příliÅ¡ nízká The password fails the dictionary check - %1 Heslo je slovníkové – %1 The password fails the dictionary check Heslo je slovníkové Unknown setting - %1 Neznámé nastavení – %1 Unknown setting Neznámé nastavení Bad integer value of setting - %1 Chybná celoÄíselná hodnota nastavení – %1 Bad integer value Chybná celoÄíselná hodnota Setting %1 is not of integer type Nastavení %1 není typu celé Äíslo Setting is not of integer type Nastavení není typu celé Äíslo Setting %1 is not of string type Nastavení %1 není typu Å™etÄ›zec Setting is not of string type Nastavení není typu Å™etÄ›zec Opening the configuration file failed NepodaÅ™ilo se otevřít soubor s nastaveními The configuration file is malformed Soubor s nastaveními nemá správný formát Fatal failure Fatální nezdar Unknown error Neznámá chyba Password is empty Heslo není vyplnÄ›né PackageChooserPage Form Form Product Name Název produktu TextLabel TextovýPopisek Long Product Description PodrobnÄ›jší popis produktu Package Selection VýbÄ›r balíÄků Please pick a product from the list. The selected product will be installed. Vyberte produkt ze seznamu. Ten vybraný bude nainstalován. PackageChooserViewStep Packages BalíÄky Page_Keyboard Form Formulář Keyboard Model: Model klávesnice: Type here to test your keyboard Klávesnici vyzkoušíte psaním sem Page_UserSetup Form Formulář What is your name? Jak se jmenujete? What name do you want to use to log in? Jaké jméno chcete používat pro pÅ™ihlaÅ¡ování do systému? Choose a password to keep your account safe. Zvolte si heslo pro ochranu svého úÄtu. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>Zadání hesla zopakujte i do kontrolní kolonky, abyste mÄ›li jistotu, že jste napsali, co zamýšleli (že nedoÅ¡lo k pÅ™eklepu). Dobré heslo se bude skládat z písmen, Äíslic a interpunkce a mÄ›lo by být alespoň osm znaků dlouhé. Heslo byste také mÄ›li pravidelnÄ› mÄ›nit (prevence Å¡kod z jeho případného prozrazení).</small> What is the name of this computer? Jaký je název tohoto poÄítaÄe? Your Full Name VaÅ¡e celé jméno login uživatelské jméno <small>This name will be used if you make the computer visible to others on a network.</small> <small>Pod tímto názvem se bude poÄítaÄ případnÄ› zobrazovat ostatním poÄítaÄům v síti.</small> Computer Name Název poÄítaÄe Password Heslo Repeat Password Zopakování zadání hesla When this box is checked, password-strength checking is done and you will not be able to use a weak password. Když je toto zaÅ¡krtnuto, je prověřována odolnost hesla a nebude umožnÄ›no použít snadno prolomitelné heslo. Require strong passwords. Vyžaduje odolné heslo. Log in automatically without asking for the password. PÅ™i spouÅ¡tÄ›ní systému se pÅ™ihlaÅ¡ovat automaticky (bez zadávání hesla). Use the same password for the administrator account. Použít stejné heslo i pro úÄet správce systému. Choose a password for the administrator account. Zvolte si heslo pro úÄet správce systému. <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Zadání hesla zopakujte i do kontrolní kolonky, abyste mÄ›li jistotu, že jste napsali, co zamýšleli (že nedoÅ¡lo k pÅ™eklepu).</small> PartitionLabelsView Root KoÅ™enový (root) Home Složky uživatelů (home) Boot ZavádÄ›cí (boot) EFI system EFI systémový Swap Odkládání str. z oper. pamÄ›ti (swap) New partition for %1 Nový oddíl pro %1 New partition Nový oddíl %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space Volné místo New partition Nový oddíl Name Název File System Souborový systém Mount Point Přípojný bod Size Velikost PartitionPage Form Form Storage de&vice: Úložné zařízení &Revert All Changes V&rátit vÅ¡echny zmÄ›ny New Partition &Table Nová &tabulka oddílů Cre&ate Vytv&oÅ™it &Edit &Upravit &Delete &Smazat New Volume Group Nová skupina svazků Resize Volume Group ZmÄ›nit velikost skupiny svazků Deactivate Volume Group Deaktivovat skupinu svazků Remove Volume Group Odebrat skupinu svazků I&nstall boot loader on: ZavadÄ›Ä systému &nainstalovat na: Are you sure you want to create a new partition table on %1? Opravdu chcete na %1 vytvoÅ™it novou tabulku oddílů? Can not create new partition Nedaří se vytvoÅ™it nový oddíl The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. Tabulka oddílů na %1 už obsahuje %2 hlavních oddílů a proto už není možné pÅ™idat další. Odeberte jeden z hlavních oddílů a namísto nÄ›j vytvoÅ™te rozšířený oddíl. PartitionViewStep Gathering system information... ShromažÄování informací o systému… Partitions Oddíly Install %1 <strong>alongside</strong> another operating system. Nainstalovat %1 <strong>vedle</strong> dalšího operaÄního systému. <strong>Erase</strong> disk and install %1. <strong>Smazat</strong> obsah jednotky a nainstalovat %1. <strong>Replace</strong> a partition with %1. <strong>Nahradit</strong> oddíl %1. <strong>Manual</strong> partitioning. <strong>RuÄní</strong> dÄ›lení úložiÅ¡tÄ›. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Nainstalovat %1 <strong>vedle</strong> dalšího operaÄního systému na disk <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Vymazat</strong> obsah jednotky <strong>%2</strong> (%3) a nainstalovat %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Nahradit</strong> oddíl na jednotce <strong>%2</strong> (%3) %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>RuÄní</strong> dÄ›lení jednotky <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Jednotka <strong>%1</strong> (%2) Current: Stávající: After: Potom: No EFI system partition configured Není nastavený žádný EFI systémový oddíl An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. Pro spuÅ¡tÄ›ní %1 je potÅ™eba EFI systémový oddíl.<br/><br/>Pro nastavení EFI systémového oddílu se vraÅ¥te zpÄ›t a vyberte nebo vytvoÅ™te oddíl typu FAT32 s příznakem <strong>esp</strong> a přípojným bodem <strong>%2</strong>.<br/><br/>Je možné pokraÄovat bez nastavení EFI systémového oddílu, ale systém nemusí jít spustit. EFI system partition flag not set Příznak EFI systémového oddílu není nastavený An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Pro spuÅ¡tÄ›ní %1 je potÅ™eba EFI systémový oddíl.<br/><br/>Byl nastaven oddíl s přípojným bodem <strong>%2</strong> ale nemá nastaven příznak <strong>esp</strong>.<br/>Pro nastavení příznaku se vraÅ¥te zpÄ›t a upravte oddíl.<br/><br/>Je možné pokraÄovat bez nastavení příznaku, ale systém nemusí jít spustit. Boot partition not encrypted ZavádÄ›cí oddíl není Å¡ifrován A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. KromÄ› Å¡ifrovaného koÅ™enového oddílu byl vytvoÅ™en i neÅ¡ifrovaný oddíl zavadÄ›Äe.<br/><br/>To by mohl být bezpeÄnostní problém, protože na neÅ¡ifrovaném oddílu jsou důležité soubory systému.<br/>Pokud chcete, můžete pokraÄovat, ale odemykání souborového systému bude probíhat pozdÄ›ji pÅ™i startu systému.<br/>Pro zaÅ¡ifrování oddílu zavadÄ›Äe se vraÅ¥te a vytvoÅ™te ho vybráním možnosti <strong>Å ifrovat</strong> v oknÄ› pÅ™i vytváření oddílu. has at least one disk device available. má k dispozici alespoň jedno zařízení pro ukládání dat. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Úloha vzhledu a dojmu z Plasma Could not select KDE Plasma Look-and-Feel package Nedaří se vybrat balíÄek KDE Plasma Look-and-Feel PlasmaLnfPage Form Form Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Zvolte vzhled a chování KDE Plasma desktopu. Tento krok je také možné pÅ™eskoÄit a nastavit až po instalaci systému. Kliknutí na výbÄ›r vyvolá zobrazení náhledu daného vzhledu a chování. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Zvolte vzhled a chování KDE Plasma desktopu. Tento krok je také možné pÅ™eskoÄit a nastavit až po instalaci systému. Kliknutí na výbÄ›r vyvolá zobrazení náhledu daného vzhledu a chování. PlasmaLnfViewStep Look-and-Feel Vzhled a dojem z PreserveFiles Saving files for later ... Ukládání souborů pro pozdÄ›jší využití… No files configured to save for later. U žádných souborů nebylo nastaveno, že mají být uloženy pro pozdÄ›jší využití. Not all of the configured files could be preserved. Ne vÅ¡echny nastavené soubory bylo možné zachovat. ProcessResult There was no output from the command. Příkaz neposkytl žádný výstup. Output: Výstup: External command crashed. VnÄ›jší příkaz byl neoÄekávanÄ› ukonÄen. Command <i>%1</i> crashed. Příkaz <i>%1</i> byl neoÄekávanÄ› ukonÄen. External command failed to start. VnÄ›jší příkaz se nepodaÅ™ilo spustit. Command <i>%1</i> failed to start. Příkaz <i>%1</i> se nepodaÅ™ilo spustit. Internal error when starting command. VnitÅ™ní chyba pÅ™i spouÅ¡tÄ›ní příkazu. Bad parameters for process job call. Chybné parametry volání úlohy procesu. External command failed to finish. VnÄ›jší příkaz se nepodaÅ™ilo dokonÄit. Command <i>%1</i> failed to finish in %2 seconds. Příkaz <i>%1</i> se nepodaÅ™ilo dokonÄit do %2 sekund. External command finished with errors. VnÄ›jší příkaz skonÄil s chybami. Command <i>%1</i> finished with exit code %2. Příkaz <i>%1</i> skonÄil s návratovým kódem %2. QObject Default Keyboard Model Výchozí model klávesnice Default Výchozí unknown neznámý extended rozšířený unformatted nenaformátovaný swap odkládací oddíl Unpartitioned space or unknown partition table NerozdÄ›lené prázné místo nebo neznámá tabulka oddílů (no mount point) (žádný přípojný bod) Requirements checking for module <i>%1</i> is complete. Kontrola požadavků pro modul <i>%1</i> dokonÄena. %1 (%2) language[name] (country[name]) %1 (%2) No product Žádný produkt No description provided. Nebyl poskytnut žádný popis. File not found Soubor nenalezen Path <pre>%1</pre> must be an absolute path. Je tÅ™eba, aby <pre>%1</pre>byl úplný popis umístÄ›ní. Could not create new random file <pre>%1</pre>. NepodaÅ™ilo se vytvoÅ™it nový náhodný soubor <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Odebrat skupinu svazků nazvanou %1. Remove Volume Group named <strong>%1</strong>. Odebrat skupinu svazků nazvanou <strong>%1</strong>. The installer failed to remove a volume group named '%1'. Instalátoru se nepodaÅ™ilo odebrat skupinu svazků nazvanou „%1“. ReplaceWidget Form Formulář Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Vyberte, kam nainstalovat %1.<br/><font color="red">UpozornÄ›ní: </font>tímto smažete vÅ¡echny soubory ve vybraném oddílu. The selected item does not appear to be a valid partition. Vybraná položka se nezdá být platným oddílem. %1 cannot be installed on empty space. Please select an existing partition. %1 nemůže být instalován na místo bez oddílu. Vyberte existující oddíl. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 nemůže být instalován na rozšířený oddíl. Vyberte existující primární nebo logický oddíl. %1 cannot be installed on this partition. %1 nemůže být instalován na tento oddíl. Data partition (%1) Datový oddíl (%1) Unknown system partition (%1) Neznámý systémový oddíl (%1) %1 system partition (%2) %1 systémový oddíl (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>Oddíl %1 je příliÅ¡ malý pro %2. Vyberte oddíl s kapacitou alespoň %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/>EFI systémový oddíl nenalezen. VraÅ¥te se, zvolte ruÄní rozdÄ›lení jednotky, a nastavte %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>%1 bude instalován na %2.<br/><font color="red">UpozornÄ›ní: </font>vÅ¡echna data v oddílu %2 budou ztracena. The EFI system partition at %1 will be used for starting %2. Pro zavedení %2 se využije EFI systémový oddíl %1. EFI system partition: EFI systémový oddíl: ResizeFSJob Resize Filesystem Job Úloha zmÄ›ny velikosti souborového systému Invalid configuration Neplatné nastavení The file-system resize job has an invalid configuration and will not run. Úloha zmÄ›ny velikosti souborového systému nemá platné nastavení a nebude spuÅ¡tÄ›na. KPMCore not Available KPMCore není k dispozici Calamares cannot start KPMCore for the file-system resize job. Kalamares nemůže spustit KPMCore pro úlohu zmÄ›ny velikosti souborového systému. Resize Failed ZmÄ›na velikosti se nezdaÅ™ila The filesystem %1 could not be found in this system, and cannot be resized. Souborový systém %1 nebyl na tomto systému nalezen a jeho velikost proto nemůže být zmÄ›nÄ›na. The device %1 could not be found in this system, and cannot be resized. Zařízení %1 nebylo na tomto systému nalezeno a proto nemůže být jeho velikost zmÄ›nÄ›na. The filesystem %1 cannot be resized. Velikost souborového systému %1 není možné zmÄ›nit. The device %1 cannot be resized. Velikost zařízení %1 nelze mÄ›nit. The filesystem %1 must be resized, but cannot. Velikost souborového systému %1 je tÅ™eba zmÄ›nit, ale není to možné. The device %1 must be resized, but cannot Velikost zařízení %1 je tÅ™eba zmÄ›nit, ale není to možné ResizePartitionJob Resize partition %1. ZmÄ›nit velikost oddílu %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. ZmÄ›nit velikost <strong>%2MiB</strong> oddílu <strong>%1</strong> na <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. ZmÄ›na velikosti %2MiB oddílu %1 na %3MiB. The installer failed to resize partition %1 on disk '%2'. Instalátoru se nepodaÅ™ilo zmÄ›nit velikost oddílu %1 na jednotce „%2“. ResizeVolumeGroupDialog Resize Volume Group ZmÄ›nit velikost skupiny svazků ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. ZmÄ›nit skupinu svazků nazvanou %1 z %2 na %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. ZmÄ›nit velikost skupiny nazvané <strong>%1</strong> z <strong>%</strong> na <strong>%3</strong>. The installer failed to resize a volume group named '%1'. Instalátoru se nepodaÅ™ilo zmÄ›nit velikost skupiny svazků zvanou „%1“. ResultsListDialog For best results, please ensure that this computer: Nejlepších výsledků se dosáhne, pokud tento poÄítaÄ bude: System requirements Požadavky na systém ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> PoÄítaÄ nesplňuje minimální požadavky pro instalaci %1.<br/>Instalace nemůže pokraÄovat <a href="#details">Podrobnosti…</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> PoÄítaÄ nesplňuje minimální požadavky pro instalaci %1.<br/>Instalace nemůže pokraÄovat <a href="#details">Podrobnosti…</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. PoÄítaÄ nesplňuje nÄ›které doporuÄené požadavky pro instalaci %1.<br/>Instalace může pokraÄovat, ale nÄ›které funkce mohou být vypnuty. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. PoÄítaÄ nesplňuje nÄ›které doporuÄené požadavky pro instalaci %1.<br/>Instalace může pokraÄovat, ale nÄ›které funkce mohou být vypnuty. This program will ask you some questions and set up %2 on your computer. Tento program vám položí nÄ›kolik dotazů, aby na základÄ› odpovÄ›dí přísluÅ¡nÄ› nainstaloval %2 na váš poÄítaÄ. ScanningDialog Scanning storage devices... Skenování úložných zařízení… Partitioning DÄ›lení jednotky SetHostNameJob Set hostname %1 Nastavit název poÄítaÄe %1 Set hostname <strong>%1</strong>. Nastavit název poÄítaÄe <strong>%1</strong>. Setting hostname %1. Nastavuje se název poÄítaÄe %1. Internal Error VnitÅ™ní chyba Cannot write hostname to target system Název poÄítaÄe se nedaří zapsat do cílového systému SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Nastavit model klávesnice na %1, rozložení na %2-%3 Failed to write keyboard configuration for the virtual console. Zápis nastavení klávesnice pro virtuální konzoli se nezdaÅ™il. Failed to write to %1 Zápis do %1 se nezdaÅ™il Failed to write keyboard configuration for X11. Zápis nastavení klávesnice pro grafický server X11 se nezdaÅ™il. Failed to write keyboard configuration to existing /etc/default directory. Zápis nastavení klávesnice do existující složky /etc/default se nezdaÅ™il. SetPartFlagsJob Set flags on partition %1. Nastavit příznaky na oddílu %1. Set flags on %1MiB %2 partition. Nastavit příznaky na %1MiB %2 oddílu. Set flags on new partition. Nastavit příznaky na novém oddílu. Clear flags on partition <strong>%1</strong>. Vymazat příznaky z oddílu <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Odstranit příznaky z %1MiB <strong>%2</strong> oddílu. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. OznaÄit %1MiB <strong>%2</strong> oddíl jako <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Odstraňování příznaků na %1MiB <strong>%2</strong> oddílu. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Nastavování příznaků <strong>%3</strong> na %1MiB <strong>%2</strong> oddílu. Clear flags on new partition. Vymazat příznaky z nového oddílu. Flag partition <strong>%1</strong> as <strong>%2</strong>. Nastavit příznak oddílu <strong>%1</strong> jako <strong>%2</strong>. Flag new partition as <strong>%1</strong>. Nastavit příznak <strong>%1</strong> na novém oddílu. Clearing flags on partition <strong>%1</strong>. Mazání příznaků oddílu <strong>%1</strong>. Clearing flags on new partition. Mazání příznaků na novém oddílu. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Nastavování příznaků <strong>%2</strong> na oddílu <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. Nastavování příznaků <strong>%1</strong> na novém oddílu. The installer failed to set flags on partition %1. Instalátoru se nepodaÅ™ilo nastavit příznak na oddílu %1 SetPasswordJob Set password for user %1 Nastavit heslo pro uživatele %1 Setting password for user %1. Nastavuje se heslo pro uživatele %1. Bad destination system path. Chybný popis cílového umístÄ›ní systému. rootMountPoint is %1 Přípojný bod koÅ™enového souborového systému (root) je %1 Cannot disable root account. Nedaří se zakázat úÄet správce systému (root). passwd terminated with error code %1. Příkaz passwd ukonÄen s chybovým kódem %1. Cannot set password for user %1. NepodaÅ™ilo se nastavit heslo uživatele %1. usermod terminated with error code %1. Příkaz usermod ukonÄen s chybovým kódem %1. SetTimezoneJob Set timezone to %1/%2 Nastavit Äasové pásmo na %1/%2 Cannot access selected timezone path. Není přístup k vybranému popisu umístÄ›ní Äasové zóny. Bad path: %1 Chybný popis umístÄ›ní: %1 Cannot set timezone. ÄŒasovou zónu se nedaří nastavit. Link creation failed, target: %1; link name: %2 Odkaz se nepodaÅ™ilo vytvoÅ™it, cíl: %1; název odkazu: %2 Cannot set timezone, Nedaří se nastavit Äasovou zónu, Cannot open /etc/timezone for writing Soubor /etc/timezone se nedaří otevřít pro zápis ShellProcessJob Shell Processes Job Úloha shellových procesů SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage This is an overview of what will happen once you start the setup procedure. Toto je pÅ™ehled událostí které nastanou po spuÅ¡tÄ›ní instalaÄního procesu. This is an overview of what will happen once you start the install procedure. Toto je pÅ™ehled událostí které nastanou po spuÅ¡tÄ›ní instalaÄního procesu. SummaryViewStep Summary Souhrn TrackingInstallJob Installation feedback ZpÄ›tná vazba z instalace Sending installation feedback. Posílání zpÄ›tné vazby z instalace. Internal error in install-tracking. VnitÅ™ní chyba v install-tracking. HTTP request timed out. PÅ™ekroÄen Äasový limit HTTP požadavku. TrackingMachineNeonJob Machine feedback ZpÄ›tná vazba stroje Configuring machine feedback. Nastavování zpÄ›tné vazby stroje Error in machine feedback configuration. Chyba v nastavení zpÄ›tné vazby stroje. Could not configure machine feedback correctly, script error %1. NepodaÅ™ilo se správnÄ› nastavit zpÄ›tnou vazbu stroje, chyba skriptu %1. Could not configure machine feedback correctly, Calamares error %1. NepodaÅ™ilo se správnÄ› nastavit zpÄ›tnou vazbu stroje, chyba Calamares %1. TrackingPage Form Form Placeholder Výplň <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>Nastavením tohoto nebudete posílat <span style=" font-weight:600;">žádné vůbec žádné informace</span> o vaší instalaci.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Kliknutím sem se dozvíte více o zpÄ›tné vazbÄ› od uživatelů</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. Sledování instalace pomůže %1 zjistit, kolik má uživatelů, na jakém hardware %1 instalují a (s posledními dvÄ›ma možnostmi níže), získávat průběžné informace o upÅ™ednostňovaných aplikacích. Co bude posíláno je možné si zobrazit kliknutím na ikonu nápovÄ›dy v každé z oblastí. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. VýbÄ›rem tohoto poÅ¡lete informace o své instalaci a hardware. Tyto údaje budou poslány <b>pouze jednorázovÄ›</b> po dokonÄení instalace. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. VýbÄ›rem tohoto budete <b>pravidelnÄ›</b> posílat informace o své instalaci, hardware a aplikacích do %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. VýbÄ›rem tohoto budete <b>pravidelnÄ›</b> posílat informace o své instalaci, hardware, aplikacích a způsobu využití do %1. TrackingViewStep Feedback ZpÄ›tná vazba UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Pokud bude tento poÄítaÄ používat více lidí, můžete pÅ™idat uživatelské úÄty po dokonÄení instalace.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Pokud bude tento poÄítaÄ používat více lidí, můžete pÅ™idat uživatelské úÄty po dokonÄení instalace.</small> Your username is too long. VaÅ¡e uživatelské jméno je příliÅ¡ dlouhé. Your username must start with a lowercase letter or underscore. Je tÅ™eba, aby uživatelské jméno zaÄínalo na malé písmeno nebo podtržítko. Only lowercase letters, numbers, underscore and hyphen are allowed. Je možné použít pouze malá písmena, Äíslice, podtržítko a spojovník. Only letters, numbers, underscore and hyphen are allowed. Je možné použít pouze písmena, Äíslice, podtržítko a spojovník. Your hostname is too short. Název stroje je příliÅ¡ krátký. Your hostname is too long. Název stroje je příliÅ¡ dlouhý. Your passwords do not match! Zadání hesla se neshodují! UsersViewStep Users Uživatelé VariantModel Key KlÃ­Ä Value Hodnota VolumeGroupBaseDialog Create Volume Group VytvoÅ™it skupinu svazků List of Physical Volumes Seznam fyzických svazků Volume Group Name: Název skupiny svazků: Volume Group Type: Typ skupiny svazků: Physical Extent Size: Velikost fyzického bloku dat: MiB MiB Total Size: Celková velikost: Used Size: Využitá velikost: Total Sectors: Celkem sektorů: Quantity of LVs: PoÄet logických svazků: WelcomePage Form Formulář Select application and system language Vybrat jazyk pro aplikace a systém Open donations website Otevřít webovou stránku po poskytnutí daru &Donate &Darovat Open help and support website Otevřít webovou stránku s nápovÄ›dou a podporou Open issues and bug-tracking website Otevřít webovou stránku se správou hlášení problémů Open release notes website Otevřít webovou stránku s poznámkami k vydání &Release notes &Poznámky k vydání &Known issues &Známé problémy &Support &Podpora &About &O projektu <h1>Welcome to the %1 installer.</h1> <h1>Vítejte v instalátoru %1.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Vítejte v Calamares, instalaÄním programu (nejen) pro %1.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Vítejte v Calamares, instalaÄním programu (nejen) pro %1.</h1> <h1>Welcome to %1 setup.</h1> <h1>Vítejte v instalátoru pro %1.</h1> About %1 setup O nastavování %1 About %1 installer O instalátoru %1. <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>PodÄ›kování <a href="https://calamares.io/team/">týmu Calamares</a> a <a href="https://www.transifex.com/calamares/calamares/">týmu pÅ™ekladatelů Calamares</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> vývoj je sponzorován <br/><a href="http://www.blue-systems.com/">Blue Systems</a> – Liberating Software. %1 support %1 podpora WelcomeQmlViewStep Welcome Vítejte WelcomeViewStep Welcome Vítejte notesqml <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> About Support Known issues Release notes Donate calamares-3.2.20/lang/calamares_da.ts000066400000000000000000005513731362604102500174300ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. Systemets <strong>bootmiljø</strong>.<br><br>Ældre x86-systemer understøtter kun <strong>BIOS</strong>.<br>Moderne systemer bruger normalt <strong>EFI</strong>, men kan ogsÃ¥ vises som BIOS hvis det startes i kompatibilitetstilstand. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. Systemet blev startet med et <strong>EFI</strong>-bootmiljø.<br><br>For at konfigurere opstart fra et EFI-miljø, bliver installationsprogrammet nødt til at installere et bootloaderprogram, sÃ¥som <strong>GRUB</strong> eller <strong>systemd-boot</strong> pÃ¥ en <strong>EFI-systempartition</strong>. Det sker automatisk, med mindre du vælger manuel partitionering, hvor du i sÃ¥ fald skal vælge eller oprette den selv. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. Systemet blev startet med et <strong>BIOS</strong>-bootmiljø.<br><br>For at konfigurere opstart fra et BIOS-miljø, bliver installationsprogrammet nødt til at installere en bootloader, sÃ¥som <strong>GRUB</strong>, enten i begyndelsen af en partition eller pÃ¥ <strong>Master Boot Record</strong> nær begyndelsen af partitionstabellen (foretrukket). Det sker automatisk, med mindre du vælger manuel partitionering, hvor du i sÃ¥ fald skal opsætte den selv. BootLoaderModel Master Boot Record of %1 Master Boot Record af %1 Boot Partition Bootpartition System Partition Systempartition Do not install a boot loader Installér ikke en bootloader %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page Tom side Calamares::DebugWindow Form Formular GlobalStorage Globalt lager JobQueue Jobkø Modules Moduler Type: Type: none ingen Interface: Grænseflade: Tools Værktøjer Reload Stylesheet Genindlæs stilark Widget Tree Widgettræ Debug information Fejlretningsinformation Calamares::ExecutionViewStep Set up Sæt op Install Installation Calamares::FailJob Job failed (%1) Job mislykkedes (%1) Programmed job failure was explicitly requested. Mislykket programmeret job blev udtrykkeligt anmodet. Calamares::JobThread Done Færdig Calamares::NamedJob Example job (%1) Eksempeljob (%1) Calamares::ProcessJob Run command '%1' in target system. Kør kommandoen '%1' i mÃ¥lsystemet. Run command '%1'. Kør kommandoen '%1'. Running command %1 %2 Kører kommando %1 %2 Calamares::PythonJob Running %1 operation. Kører %1-handling. Bad working directory path Ugyldig arbejdsmappesti Working directory %1 for python job %2 is not readable. Arbejdsmappen %1 til python-jobbet %2 er ikke læsbar. Bad main script file Ugyldig primær skriptfil Main script file %1 for python job %2 is not readable. Primær skriptfil %1 til python-jobbet %2 er ikke læsbar. Boost.Python error in job "%1". Boost.Python-fejl i job "%1". Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Waiting for %n module(s). Venter pÃ¥ %n modul. Venter pÃ¥ %n moduler. (%n second(s)) (%n sekund) (%n sekunder) System-requirements checking is complete. Tjek af systemkrav er fuldført. Calamares::ViewManager &Back &Tilbage &Next &Næste &Cancel &Annullér Cancel setup without changing the system. Annullér opsætningen uden at ændre systemet. Cancel installation without changing the system. Annullér installation uden at ændre systemet. Setup Failed Opsætningen mislykkedes Would you like to paste the install log to the web? Vil du indsætte installationsloggen pÃ¥ webbet? Install Log Paste URL Indsættelses-URL for installationslog The upload was unsuccessful. No web-paste was done. Uploaden lykkedes ikke. Der blev ikke foretaget nogen webindsættelse. Calamares Initialization Failed Initiering af Calamares mislykkedes %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. %1 kan ikke installeres. Calamares kunne ikke indlæse alle de konfigurerede moduler. Det er et problem med den mÃ¥de Calamares bruges pÃ¥ af distributionen. <br/>The following modules could not be loaded: <br/>Følgende moduler kunne ikke indlæses: Continue with installation? Fortsæt installationen? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> %1-opsætningsprogrammet er ved at foretage ændringer til din disk for at opsætte %2.<br/><strong>Det vil ikke være muligt at fortryde ændringerne.</strong> &Set up now &Sæt op nu &Set up &Sæt op &Install &Installér Setup is complete. Close the setup program. Opsætningen er fuldført. Luk opsætningsprogrammet. Cancel setup? Annullér opsætningen? Cancel installation? Annullér installationen? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Vil du virkelig annullere den igangværende opsætningsproces? Opsætningsprogrammet vil stoppe og alle ændringer vil gÃ¥ tabt. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Vil du virkelig annullere den igangværende installationsproces? Installationsprogrammet vil stoppe og alle ændringer vil gÃ¥ tabt. &Yes &Ja &No &Nej &Close &Luk Continue with setup? Fortsæt med opsætningen? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> %1-installationsprogrammet er ved at foretage ændringer til din disk for at installere %2.<br/><strong>Det vil ikke være muligt at fortryde ændringerne.</strong> &Install now &Installér nu Go &back GÃ¥ &tilbage &Done &Færdig The installation is complete. Close the installer. Installationen er fuldført. Luk installationsprogrammet. Error Fejl Installation Failed Installation mislykkedes CalamaresPython::Helper Unknown exception type Ukendt undtagelsestype unparseable Python error Python-fejl som ikke kan fortolkes unparseable Python traceback Python-traceback som ikke kan fortolkes Unfetchable Python error. Python-fejl som ikke kan hentes. CalamaresUtils Install log posted to: %1 Installationslog indsendt til: %1 CalamaresWindow %1 Setup Program %1-opsætningsprogram %1 Installer %1-installationsprogram Show debug information Vis fejlretningsinformation CheckerContainer Gathering system information... Indsamler systeminformation ... ChoicePage Form Formular After: Efter: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Manuel partitionering</strong><br/>Du kan selv oprette og ændre størrelse pÃ¥ partitioner. Boot loader location: Placering af bootloader: Select storage de&vice: Vælg lageren&hed: Current: Nuværende: Reuse %1 as home partition for %2. Genbrug %1 som hjemmepartition til %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Vælg en partition der skal mindskes, træk herefter den nederste bjælke for at ændre størrelsen</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 vil blive skrumpet til %2 MiB og en ny %3 MiB partition vil blive oprettet for %4. <strong>Select a partition to install on</strong> <strong>Vælg en partition at installere pÃ¥</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. En EFI-partition blev ikke fundet pÃ¥ systemet. GÃ¥ venligst tilbage og brug manuel partitionering til at opsætte %1. The EFI system partition at %1 will be used for starting %2. EFI-systempartitionen ved %1 vil blive brugt til at starte %2. EFI system partition: EFI-systempartition: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Lagerenheden ser ikke ud til at indeholde et styresystem. Hvad ønsker du at gøre?<br/>Du vil fÃ¥ mulighed for at se og bekræfte dine valg før der sker ændringer til lagerenheden. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Slet disk</strong><br/>Det vil <font color="red">slette</font> alt data pÃ¥ den valgte lagerenhed. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Lagerenheden har %1 pÃ¥ sig. Hvad ønsker du at gøre?<br/>Du vil fÃ¥ mulighed for at se og bekræfte dine valg før det sker ændringer til lagerenheden. No Swap Ingen swap Reuse Swap Genbrug swap Swap (no Hibernate) Swap (ingen dvale) Swap (with Hibernate) Swap (med dvale) Swap to file Swap til fil <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Installér ved siden af</strong><br/>Installationsprogrammet vil mindske en partition for at gøre plads til %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Erstat en partition</strong><br/>Erstatter en partition med %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Lagerenheden indeholder allerede et styresystem. Hvad ønsker du at gøre?<br/>Du vil fÃ¥ mulighed for at se og bekræfte dine valg før der sker ændringer til lagerenheden. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Lagerenheden indeholder flere styresystemer. Hvad ønsker du at gøre?<br/>Du vil fÃ¥ mulighed for at se og bekræfte dine valg før der sker ændringer til lagerenheden. ClearMountsJob Clear mounts for partitioning operations on %1 Ryd monteringspunkter for partitioneringshandlinger pÃ¥ %1 Clearing mounts for partitioning operations on %1. Rydder monteringspunkter for partitioneringshandlinger pÃ¥ %1. Cleared all mounts for %1 Ryddede alle monteringspunkter til %1 ClearTempMountsJob Clear all temporary mounts. Ryd alle midlertidige monteringspunkter. Clearing all temporary mounts. Rydder alle midlertidige monteringspunkter. Cannot get list of temporary mounts. Kan ikke fÃ¥ liste over midlertidige monteringspunkter. Cleared all temporary mounts. Rydder alle midlertidige monteringspunkter. CommandList Could not run command. Kunne ikke køre kommando. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. Kommandoen kører i værtsmiljøet og har brug for at kende rodstien, men der er ikke defineret nogen rootMountPoint. The command needs to know the user's name, but no username is defined. Kommandoen har brug for at kende brugerens navn, men der er ikke defineret noget brugernavn. ContextualProcessJob Contextual Processes Job Kontekstuelt procesjob CreatePartitionDialog Create a Partition Opret en partition MiB MiB Partition &Type: Partitions&type: &Primary &Primær E&xtended &Udvidet Fi&le System: Fi&lsystem: LVM LV name LVM LV-navn Flags: Flag: &Mount Point: &Monteringspunkt: Si&ze: &Størrelse: En&crypt Kryp&tér Logical Logisk Primary Primær GPT GPT Mountpoint already in use. Please select another one. Monteringspunktet er allerede i brug. Vælg venligst et andet. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Opret en ny %2 MiB partition pÃ¥ %4 (%3) med %1-filsystem. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Opret en ny <strong>%2 MiB</strong> partition pÃ¥ <strong>%4</strong> (%3) med <strong>%1</strong>-filsystem. Creating new %1 partition on %2. Opretter ny %1-partition pÃ¥ %2. The installer failed to create partition on disk '%1'. Installationsprogrammet kunne ikke oprette partition pÃ¥ disk '%1'. CreatePartitionTableDialog Create Partition Table Opret partitionstabel Creating a new partition table will delete all existing data on the disk. Oprettelse af en ny partitionstabel vil slette alle data pÃ¥ disken. What kind of partition table do you want to create? Hvilken slags partitionstabel vil du oprette? Master Boot Record (MBR) Master Boot Record (MBR) GUID Partition Table (GPT) GUID-partitionstabel (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Opret en ny %1-partitionstabel pÃ¥ %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Opret en ny <strong>%1</strong>-partitionstabel pÃ¥ <strong>%2</strong> (%3). Creating new %1 partition table on %2. Opretter ny %1-partitionstabel pÃ¥ %2. The installer failed to create a partition table on %1. Installationsprogrammet kunne ikke oprette en partitionstabel pÃ¥ %1. CreateUserJob Create user %1 Opret bruger %1 Create user <strong>%1</strong>. Opret bruger <strong>%1</strong>. Creating user %1. Opretter bruger %1. Sudoers dir is not writable. Sudoers mappe er skrivebeskyttet. Cannot create sudoers file for writing. Kan ikke oprette sudoers fil til skrivning. Cannot chmod sudoers file. Kan ikke chmod sudoers fil. Cannot open groups file for reading. Kan ikke Ã¥bne gruppernes fil til læsning. CreateVolumeGroupDialog Create Volume Group Opret diskomrÃ¥degruppe CreateVolumeGroupJob Create new volume group named %1. Opret ny diskomrÃ¥degruppe ved navn %1. Create new volume group named <strong>%1</strong>. Opret ny diskomrÃ¥degruppe ved navn <strong>%1</strong>. Creating new volume group named %1. Opretter ny diskomrÃ¥degruppe ved navn %1. The installer failed to create a volume group named '%1'. Installationsprogrammet kunne ikke oprette en diskomrÃ¥degruppe ved navn '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deaktivér diskomrÃ¥degruppe ved navn %1. Deactivate volume group named <strong>%1</strong>. Deaktivér diskomrÃ¥degruppe ved navn <strong>%1</strong>. The installer failed to deactivate a volume group named %1. Installationsprogrammet kunne ikke deaktivere en diskomrÃ¥degruppe ved navn %1. DeletePartitionJob Delete partition %1. Slet partition %1. Delete partition <strong>%1</strong>. Slet partition <strong>%1</strong>. Deleting partition %1. Sletter partition %1. The installer failed to delete partition %1. Installationsprogrammet kunne ikke slette partition %1. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. Typen af <strong>partitionstabel</strong> pÃ¥ den valgte lagerenhed.<br><br>Den eneste mÃ¥de at ændre partitionstabeltypen, er at slette og oprette partitionstabellen igen, hvilket vil destruere al data pÃ¥ lagerenheden.<br>Installationsprogrammet vil beholde den nuværende partitionstabel medmindre du specifikt vælger andet.<br>Hvis usikker, er GPT foretrukket pÃ¥ moderne systemer. This device has a <strong>%1</strong> partition table. Enheden har en <strong>%1</strong> partitionstabel. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. Dette er en <strong>loop</strong>-enhed.<br><br>Det er en pseudo-enhed uden en partitionstabel, der gør en fil tilgængelig som en blokenhed. Denne slags opsætning indeholder typisk kun et enkelt filsystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. Installationsprogrammet <strong>kan ikke finde en partitionstabel</strong> pÃ¥ den valgte lagerenhed.<br><br>Enten har enheden ikke nogen partitionstabel, eller partitionstabellen er ødelagt eller ogsÃ¥ er den af en ukendt type.<br>Installationsprogrammet kan oprette en ny partitionstabel for dig, enten automatisk, eller igennem den manuelle partitioneringsside. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Dette er den anbefalede partitionstabeltype til moderne systemer som starter fra et <strong>EFI</strong>-bootmiljø. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. <br><br>Partitionstabeltypen anbefales kun pÃ¥ ældre systemer der starter fra et <strong>BIOS</strong>-bootmiljø. GPT anbefales i de fleste tilfælde.<br><br><strong>Advarsel:</strong> MBR-partitionstabeltypen er en forældet MS-DOS-æra standard.<br>Kun 4 <em>primære</em> partitioner var tilladt, og ud af de fire kan én af dem være en <em>udvidet</em> partition, som igen mÃ¥ indeholde mange <em>logiske</em> partitioner. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1 - (%2) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Skriv LUKS-konfiguration for Dracut til %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Spring skrivning af LUKS-konfiguration over for Dracut: "/"-partitionen er ikke krypteret Failed to open %1 Kunne ikke Ã¥bne %1 DummyCppJob Dummy C++ Job Dummy C++-job EditExistingPartitionDialog Edit Existing Partition Redigér eksisterende partition Content: Indhold: &Keep &Behold Format Formatér Warning: Formatting the partition will erase all existing data. Advarsel: Formatering af partitionen vil slette alle eksisterende data. &Mount Point: &Monteringspunkt: Si&ze: Stø&rrelse: MiB MiB Fi&le System: Fi&lsystem: Flags: Flag: Mountpoint already in use. Please select another one. Monteringspunktet er allerede i brug. Vælg venligst et andet. EncryptWidget Form Formular En&crypt system Kryp&tér system Passphrase Adgangskode Confirm passphrase Bekræft adgangskode Please enter the same passphrase in both boxes. Indtast venligst samme adgangskode i begge bokse. FillGlobalStorageJob Set partition information Sæt partitionsinformation Install %1 on <strong>new</strong> %2 system partition. Installér %1 pÃ¥ <strong>ny</strong> %2-systempartition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Opsæt den <strong>nye</strong> %2 partition med monteringspunkt <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Installér %2 pÃ¥ %3-systempartition <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Opsæt %3 partition <strong>%1</strong> med monteringspunkt <strong>%2</strong>. Install boot loader on <strong>%1</strong>. Installér bootloader pÃ¥ <strong>%1</strong>. Setting up mount points. Opsætter monteringspunkter. FinishedPage Form Formular <Restart checkbox tooltip> <Restart checkbox tooltip> &Restart now &Genstart nu <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>Færdig.</h1><br/>%1 er blevet opsat pÃ¥ din computer.<br/>Du kan nu begynde at bruge dit nye system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <html><head/><body><p>NÃ¥r boksen er tilvalgt, vil dit system genstarte med det samme nÃ¥r du klikker pÃ¥ <span style="font-style:italic;">Færdig</span> eller lukker opsætningsprogrammet.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>Færdig.</h1><br/>%1 er blevet installeret pÃ¥ din computer.<br/>Du kan nu genstarte for at komme ind i dit nye system eller fortsætte med at bruge %2 livemiljøet. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <html><head/><body><p>NÃ¥r boksen er tilvalgt, vil dit system genstarte med det samme nÃ¥r du klikker pÃ¥ <span style="font-style:italic;">Færdig</span> eller lukker installationsprogrammet.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Opsætningen mislykkede</h1><br/>%1 er ikke blevet sat op pÃ¥ din computer.<br/>Fejlmeddelelsen var: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Installation mislykkede</h1><br/>%1 er ikke blevet installeret pÃ¥ din computer.<br/>Fejlmeddelelsen var: %2. FinishedViewStep Finish Færdig Setup Complete Opsætningen er fuldført Installation Complete Installation fuldført The setup of %1 is complete. Opsætningen af %1 er fuldført. The installation of %1 is complete. Installationen af %1 er fuldført. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Formatér partition %1 (filsystem: %2, størrelse: %3 MiB) pÃ¥ %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatér <strong>%3 MiB</strong> partition <strong>%1</strong> med <strong>%2</strong>-filsystem. Formatting partition %1 with file system %2. Formatterer partition %1 med %2-filsystem. The installer failed to format partition %1 on disk '%2'. Installationsprogrammet kunne ikke formatere partition %1 pÃ¥ disk '%2'. GeneralRequirements has at least %1 GiB available drive space har mindst %1 GiB ledig plads pÃ¥ drevet There is not enough drive space. At least %1 GiB is required. Der er ikke nok ledig plads pÃ¥ drevet. Mindst %1 GiB er pÃ¥krævet. has at least %1 GiB working memory har mindst %1 GiB hukkommelse The system does not have enough working memory. At least %1 GiB is required. Systemet har ikke nok arbejdshukommelse. Mindst %1 GiB er pÃ¥krævet. is plugged in to a power source er tilsluttet en strømkilde The system is not plugged in to a power source. Systemet er ikke tilsluttet en strømkilde. is connected to the Internet er forbundet til internettet The system is not connected to the Internet. Systemet er ikke forbundet til internettet. is running the installer as an administrator (root) kører installationsprogrammet som administrator (root) The setup program is not running with administrator rights. Opsætningsprogrammet kører ikke med administratorrettigheder. The installer is not running with administrator rights. Installationsprogrammet kører ikke med administratorrettigheder. has a screen large enough to show the whole installer har en skærm, som er stor nok til at vise hele installationsprogrammet The screen is too small to display the setup program. Skærmen er for lille til at vise opsætningsprogrammet. The screen is too small to display the installer. Skærmen er for lille til at vise installationsprogrammet. HostInfoJob Collecting information about your machine. Indsamler information om din maskine. IDJob OEM Batch Identifier OEM-batchidentifikator Could not create directories <code>%1</code>. Kunne ikke oprette mapperne <code>%1</code>. Could not open file <code>%1</code>. Kunne ikke Ã¥bne filen <code>%1</code>. Could not write to file <code>%1</code>. Kunne ikke skrive til filen <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. Opretter initramfs med mkinitcpio. InitramfsJob Creating initramfs. Opretter initramfs. InteractiveTerminalPage Konsole not installed Konsole er ikke installeret Please install KDE Konsole and try again! Installér venligst KDE Konsole og prøv igen! Executing script: &nbsp;<code>%1</code> Eksekverer skript: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script Skript KeyboardPage Set keyboard model to %1.<br/> Sæt tastaturmodel til %1.<br/> Set keyboard layout to %1/%2. Sæt tastaturlayout til %1/%2. KeyboardViewStep Keyboard Tastatur LCLocaleDialog System locale setting Systemets lokalitetsindstilling The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. Systemets lokalitetsindstilling har indflydelse pÃ¥ sproget og tegnsættet for nogle kommandolinje-brugerelementer.<br/>Den nuværende indstilling er <strong>%1</strong>. &Cancel &Annullér &OK &OK LicensePage Form Formular <h1>License Agreement</h1> <h1>Licensaftale</h1> I accept the terms and conditions above. Jeg accepterer de ovenstÃ¥ende vilkÃ¥r og betingelser. Please review the End User License Agreements (EULAs). Gennemse venligst slutbrugerlicensaftalerne (EULA'erne). This setup procedure will install proprietary software that is subject to licensing terms. Opsætningsproceduren installerer proprietær software der er underlagt licenseringsvilkÃ¥r. If you do not agree with the terms, the setup procedure cannot continue. Hvis du ikke er enig med disse vilkÃ¥r, kan opsætningsproceduren ikke fortsætte. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Opsætningsproceduren kan installere proprietær software der er underlagt licenseringsvilkÃ¥r, for at kunne tilbyde yderligere funktionaliteter og forbedre brugeroplevelsen. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Hvis du ikke er enig med disse vilkÃ¥r vil der ikke blive installeret proprietær software, og open source-alternativer vil blive brugt i stedet. LicenseViewStep License Licens LicenseWidget URL: %1 URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 driver</strong><br/>af %2 <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 grafikdriver</strong><br/><font color="Grey">af %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 browser-plugin</strong><br/><font color="Grey">af %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">af %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 pakke</strong><br/><font color="Grey">af %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">af %2</font> File: %1 Fil: %1 Show the license text Vis licensteksten Open license agreement in browser. Ã…bn licensaftale i browser. Hide license text Skjul licenstekst LocalePage The system language will be set to %1. Systemsproget vil blive sat til %1. The numbers and dates locale will be set to %1. Lokalitet for tal og datoer vil blive sat til %1. Region: Region: Zone: Zone: &Change... &Skift ... Set timezone to %1/%2.<br/> Sæt tidszone til %1/%2.<br/> LocaleViewStep Location Placering LuksBootKeyFileJob Configuring LUKS key file. Konfigurerer LUKS-nøglefil. No partitions are defined. Der er ikke defineret nogen partitioner. Encrypted rootfs setup error Fejl ved opsætning af krypteret rootfs Root partition %1 is LUKS but no passphrase has been set. Rodpartitionen %1 er LUKS men der er ikke indstillet nogen adgangskode. Could not create LUKS key file for root partition %1. Kunne ikke oprette LUKS-nøglefil for rodpartitionen %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Generér maskin-id. Configuration Error Fejl ved konfiguration No root mount point is set for MachineId. Der er ikke angivet noget rodmonteringspunkt for MachineId. NetInstallPage Name Navn Description Beskrivelse Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Netværksinstallation. (Deaktiveret: Kunne ikke hente pakkelister, tjek din netværksforbindelse) Network Installation. (Disabled: Received invalid groups data) Netværksinstallation. (Deaktiveret: Modtog ugyldige gruppers data) Network Installation. (Disabled: Incorrect configuration) Netværksinstallation. (deaktiveret: forkert konfiguration) NetInstallViewStep Package selection Valg af pakke Office software Office package Browser software Browser package Web browser Kernel Services Login Desktop Applications NotesQmlViewStep Notes OEMPage Ba&tch: Ba&tch: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>Indtast en batchidentifikator her. Det gemmes pÃ¥ mÃ¥lsystemet.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>OEM-konfiguration</h1><p>Calamares bruger OEM-indstillingerne under konfigurering af mÃ¥lsystemet.</p></body></html> OEMViewStep OEM Configuration OEM-konfiguration Set the OEM Batch Identifier to <code>%1</code>. Indstil OEM-batchidentifikatoren til <code>%1</code>. PWQ Password is too short Adgangskoden er for kort Password is too long Adgangskoden er for lang Password is too weak Adgangskoden er for svag Memory allocation error when setting '%1' Fejl ved allokering af hukommelse da '%1' blev sat Memory allocation error Fejl ved allokering af hukommelse The password is the same as the old one Adgangskoden er den samme som den gamle The password is a palindrome Adgangskoden er et palindrom The password differs with case changes only Adgangskoden har kun ændringer i store/smÃ¥ bogstaver The password is too similar to the old one Adgangskoden minder for meget om den gamle The password contains the user name in some form Adgangskoden indeholder i nogen form brugernavnet The password contains words from the real name of the user in some form Adgangskoden indeholder i nogen form ord fra brugerens rigtige navn The password contains forbidden words in some form Adgangskoden indeholder i nogen form forbudte ord The password contains less than %1 digits Adgangskoden indeholder færre end %1 cifre The password contains too few digits Adgangskoden indeholder for fÃ¥ cifre The password contains less than %1 uppercase letters Adgangskoden indeholder færre end %1 bogstaver med stort The password contains too few uppercase letters Adgangskoden indeholder for fÃ¥ bogstaver med stort The password contains less than %1 lowercase letters Adgangskoden indeholder færre end %1 bogstaver med smÃ¥t The password contains too few lowercase letters Adgangskoden indeholder for fÃ¥ bogstaver med smÃ¥t The password contains less than %1 non-alphanumeric characters Adgangskoden indeholder færre end %1 ikke-alfanumeriske tegn The password contains too few non-alphanumeric characters Adgangskoden indeholder for fÃ¥ ikke-alfanumeriske tegn The password is shorter than %1 characters Adgangskoden er kortere end %1 tegn The password is too short Adgangskoden er for kort The password is just rotated old one Adgangskoden er blot det gamle hvor der er byttet om pÃ¥ tegnene The password contains less than %1 character classes Adgangskoden indeholder færre end %1 tegnklasser The password does not contain enough character classes Adgangskoden indeholder ikke nok tegnklasser The password contains more than %1 same characters consecutively Adgangskoden indeholder flere end %1 af de samme tegn i træk The password contains too many same characters consecutively Adgangskoden indeholder for mange af de samme tegn i træk The password contains more than %1 characters of the same class consecutively Adgangskoden indeholder flere end %1 tegn af den samme klasse i træk The password contains too many characters of the same class consecutively Adgangskoden indeholder for mange tegn af den samme klasse i træk The password contains monotonic sequence longer than %1 characters Adgangskoden indeholder monoton sekvens som er længere end %1 tegn The password contains too long of a monotonic character sequence Adgangskoden indeholder en monoton tegnsekvens som er for lang No password supplied Der er ikke angivet nogen adgangskode Cannot obtain random numbers from the RNG device Kan ikke fÃ¥ tilfældige tal fra RNG-enhed Password generation failed - required entropy too low for settings Generering af adgangskode mislykkedes - krævede entropi er for lav til indstillinger The password fails the dictionary check - %1 Adgangskoden bestod ikke ordbogstjekket - %1 The password fails the dictionary check Adgangskoden bestod ikke ordbogstjekket Unknown setting - %1 Ukendt indstilling - %1 Unknown setting Ukendt indstilling Bad integer value of setting - %1 Ugyldig heltalsværdi til indstilling - %1 Bad integer value Ugyldig heltalsværdi Setting %1 is not of integer type Indstillingen %1 er ikke en helttalsstype Setting is not of integer type Indstillingen er ikke en helttalsstype Setting %1 is not of string type Indstillingen %1 er ikke en strengtype Setting is not of string type Indstillingen er ikke en strengtype Opening the configuration file failed Ã…bningen af konfigurationsfilen mislykkedes The configuration file is malformed Konfigurationsfilen er forkert udformet Fatal failure Fatal fejl Unknown error Ukendt fejl Password is empty Adgangskoden er tom PackageChooserPage Form Formular Product Name Produktnavn TextLabel Tekstetiket Long Product Description Lang produktbeskrivelse Package Selection Valg af pakke Please pick a product from the list. The selected product will be installed. Vælg venligst et produkt fra listen. Det valgte produkt installeres. PackageChooserViewStep Packages Pakker Page_Keyboard Form Formular Keyboard Model: Tastaturmodel: Type here to test your keyboard Skriv her for at teste dit tastatur Page_UserSetup Form Formular What is your name? Hvad er dit navn? What name do you want to use to log in? Hvilket navn skal bruges til at logge ind? Choose a password to keep your account safe. Vælg en adgangskode for at beskytte din konto. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>Skriv den samme adgangskode to gange, sÃ¥ det kan blive tjekket for skrivefejl. En god adgangskode indeholder en blanding af bogstaver, tal og specialtegn, og bør være mindst 8 tegn langt og bør skiftes jævnligt.</small> What is the name of this computer? Hvad er navnet pÃ¥ computeren? Your Full Name Dit fulde navn login login <small>This name will be used if you make the computer visible to others on a network.</small> <small>Navnet bruges, hvis du gør computeren synlig for andre pÃ¥ et netværk.</small> Computer Name Computernavn Password Adgangskode Repeat Password Gentag adgangskode When this box is checked, password-strength checking is done and you will not be able to use a weak password. NÃ¥r boksen er tilvalgt, sÃ¥ foretages der tjek af adgangskodens styrke og du vil ikke være i stand til at bruge en svag adgangskode. Require strong passwords. Kræv stærke adgangskoder. Log in automatically without asking for the password. Log ind automatisk uden at spørge efter adgangskoden. Use the same password for the administrator account. Brug den samme adgangskode til administratorkontoen. Choose a password for the administrator account. Vælg en adgangskode til administratorkontoen. <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Skriv den samme adgangskode to gange, sÃ¥ det kan blive tjekket for skrivefejl.</small> PartitionLabelsView Root Rod Home Hjem Boot Boot EFI system EFI-system Swap Swap New partition for %1 Ny partition til %1 New partition Ny partition %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space Ledig plads New partition Ny partition Name Navn File System Filsystem Mount Point Monteringspunkt Size Størrelse PartitionPage Form Formular Storage de&vice: Lageren&hed: &Revert All Changes &Tilbagefør alle ændringer New Partition &Table Ny partitions&tabel Cre&ate &Opret &Edit &Redigér &Delete &Slet New Volume Group Ny diskomrÃ¥degruppe Resize Volume Group Ændr størrelse pÃ¥ diskomrÃ¥degruppe Deactivate Volume Group Deaktivér diskomrÃ¥degruppe Remove Volume Group Fjern diskomrÃ¥degruppe I&nstall boot loader on: I&nstallér bootloader pÃ¥: Are you sure you want to create a new partition table on %1? Er du sikker pÃ¥, at du vil oprette en ny partitionstabel pÃ¥ %1? Can not create new partition Kan ikke oprette ny partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. Partitionstabellen pÃ¥ %1 har allerede %2 primære partitioner, og der kan ikke tilføjes flere. Fjern venligst en primær partition og tilføj i stedet en udvidet partition. PartitionViewStep Gathering system information... Indsamler systeminformation ... Partitions Partitioner Install %1 <strong>alongside</strong> another operating system. Installér %1 <strong>ved siden af</strong> et andet styresystem. <strong>Erase</strong> disk and install %1. <strong>Slet</strong> disk og installér %1. <strong>Replace</strong> a partition with %1. <strong>Erstat</strong> en partition med %1. <strong>Manual</strong> partitioning. <strong>Manuel</strong> partitionering. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Installér %1 <strong>ved siden af</strong> et andet styresystem pÃ¥ disk <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Slet</strong> disk <strong>%2</strong> (%3) og installér %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Erstat</strong> en partition pÃ¥ disk <strong>%2</strong> (%3) med %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>Manuel</strong> partitionering pÃ¥ disk <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Disk <strong>%1</strong> (%2) Current: Nuværende: After: Efter: No EFI system partition configured Der er ikke konfigureret nogen EFI-systempartition An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. En EFI-systempartition er nødvendig for at starte %1.<br/><br/>For at konfigurere en EFI-systempartition skal du gÃ¥ tilbage og vælge eller oprette et FAT32-filsystem med <strong>esp</strong>-flaget aktiveret og monteringspunkt <strong>%2</strong>.<br/><br/>Du kan fortsætte uden at opsætte en EFI-systempartition, men dit system vil muligvis ikke kunne starte. EFI system partition flag not set EFI-systempartitionsflag ikke sat An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. En EFI-systempartition er nødvendig for at starte %1.<br/><br/>En partition var konfigureret med monteringspunkt <strong>%2</strong>, men dens <strong>esp</strong>-flag var ikke sat.<br/>For at sætte flaget skal du gÃ¥ tilbage og redigere partitionen.<br/><br/>Du kan fortsætte uden at konfigurere flaget, men dit system vil muligvis ikke kunne starte. Boot partition not encrypted Bootpartition ikke krypteret A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. En separat bootpartition blev opsat sammen med en krypteret rodpartition, men bootpartitionen er ikke krypteret.<br/><br/>Der er sikkerhedsmæssige bekymringer med denne slags opsætning, da vigtige systemfiler er gemt pÃ¥ en ikke-krypteret partition.<br/>Du kan fortsætte hvis du vil, men oplÃ¥sning af filsystemet sker senere under systemets opstart.<br/>For at kryptere bootpartitionen skal du gÃ¥ tilbage og oprette den igen, vælge <strong>Kryptér</strong> i partitionsoprettelsesvinduet. has at least one disk device available. har mindst én tilgængelig diskenhed. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Plasma udseende og fremtoning-job Could not select KDE Plasma Look-and-Feel package Kunne ikke vælge KDE Plasma udseende og fremtoning-pakke PlasmaLnfPage Form Formular Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Vælg venligst et udseende og fremtoning til KDE Plasma-skrivebordet. Du kan ogsÃ¥ springe trinnet over og konfigurere udseendet og fremtoningen nÃ¥r systemet er sat op. Ved klik pÃ¥ et udseende og fremtoning giver det dig en liveforhÃ¥ndsvisning af det. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Vælg venligst et udseende og fremtoning til KDE Plasma-skrivebordet. Du kan ogsÃ¥ springe trinnet over og konfigurere udseendet og fremtoningen nÃ¥r systemet er installeret. Ved klik pÃ¥ et udseende og fremtoning giver det dig en liveforhÃ¥ndsvisning af det. PlasmaLnfViewStep Look-and-Feel Udseende og fremtoning PreserveFiles Saving files for later ... Gemmer filer til senere ... No files configured to save for later. Der er ikke konfigureret nogen filer til at blive gemt til senere. Not all of the configured files could be preserved. Kunne ikke bevare alle de konfigurerede filer. ProcessResult There was no output from the command. Der var ikke nogen output fra kommandoen. Output: Output: External command crashed. Ekstern kommando holdt op med at virke. Command <i>%1</i> crashed. Kommandoen <i>%1</i> holdte op med at virke. External command failed to start. Ekstern kommando kunne ikke starte. Command <i>%1</i> failed to start. Kommandoen <i>%1</i> kunne ikke starte. Internal error when starting command. Intern fejl ved start af kommando. Bad parameters for process job call. Ugyldige parametre til kald af procesjob. External command failed to finish. Ekstern kommando blev ikke færdig. Command <i>%1</i> failed to finish in %2 seconds. Kommandoen <i>%1</i> blev ikke færdig pÃ¥ %2 sekunder. External command finished with errors. Ekstern kommando blev færdig med fejl. Command <i>%1</i> finished with exit code %2. Kommandoen <i>%1</i> blev færdig med afslutningskoden %2. QObject Default Keyboard Model Standardtastaturmodel Default Standard unknown ukendt extended udvidet unformatted uformatteret swap swap Unpartitioned space or unknown partition table Upartitioneret plads eller ukendt partitionstabel (no mount point) (intet monteringspunkt) Requirements checking for module <i>%1</i> is complete. Tjek at krav for modulet <i>%1</i> er fuldført. %1 (%2) language[name] (country[name]) %1 (%2) No product Intet produkt No description provided. Der er ikke angivet nogen beskrivelse. File not found Filen blev ikke fundet Path <pre>%1</pre> must be an absolute path. Stien <pre>%1</pre> skal være en absolut sti. Could not create new random file <pre>%1</pre>. Kunne ikke oprette den tilfældige fil <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Fjern diskomrÃ¥degruppe ved navn %1. Remove Volume Group named <strong>%1</strong>. Fjern diskomrÃ¥degruppe ved navn <strong>%1</strong>. The installer failed to remove a volume group named '%1'. Installationsprogrammet kunne ikke fjern en diskomrÃ¥degruppe ved navn '%1'. ReplaceWidget Form Formular Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Vælg hvor %1 skal installeres.<br/><font color="red">Advarsel: </font>Det vil slette alle filer pÃ¥ den valgte partition. The selected item does not appear to be a valid partition. Det valgte emne ser ikke ud til at være en gyldig partition. %1 cannot be installed on empty space. Please select an existing partition. %1 kan ikke installeres pÃ¥ tom plads. Vælg venligst en eksisterende partition. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 kan ikke installeres pÃ¥ en udvidet partition. Vælg venligst en eksisterende primær eller logisk partition. %1 cannot be installed on this partition. %1 kan ikke installeres pÃ¥ denne partition. Data partition (%1) Datapartition (%1) Unknown system partition (%1) Ukendt systempartition (%1) %1 system partition (%2) %1-systempartition (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>Partitionen %1 er for lille til %2. Vælg venligst en partition med mindst %3 GiB plads. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/>En EFI-systempartition kunne ikke findes pÃ¥ systemet. GÃ¥ venligst tilbage og brug manuel partitionering til at opsætte %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>%1 vil blive installeret pÃ¥ %2.<br/><font color="red">Advarsel: </font>Al data pÃ¥ partition %2 vil gÃ¥ tabt. The EFI system partition at %1 will be used for starting %2. EFI-systempartitionen ved %1 vil blive brugt til at starte %2. EFI system partition: EFI-systempartition: ResizeFSJob Resize Filesystem Job Job til ændring af størrelse Invalid configuration Ugyldig konfiguration The file-system resize job has an invalid configuration and will not run. Filsystemets job til ændring af størrelse har en ugyldig konfiguration og kan ikke køre. KPMCore not Available KPMCore ikke tilgængelig Calamares cannot start KPMCore for the file-system resize job. Calamares kan ikke starte KPMCore for jobbet til ændring af størrelse. Resize Failed Ændring af størrelse mislykkedes The filesystem %1 could not be found in this system, and cannot be resized. Filsystemet %1 kunne ikke findes i systemet, og kan ikke ændres i størrelse. The device %1 could not be found in this system, and cannot be resized. Enheden %1 kunne ikke findes i systemet, og kan ikke ændres i størrelse. The filesystem %1 cannot be resized. Filsystemet størrelse %1 kan ikke ændres. The device %1 cannot be resized. Enheden %1 kan ikke ændres i størrelse. The filesystem %1 must be resized, but cannot. Filsystemet %1 skal ændres i størrelse, men er ikke i stand til det. The device %1 must be resized, but cannot Enheden størrelse %1 skal ændres, men er ikke i stand til det. ResizePartitionJob Resize partition %1. Ændr størrelse pÃ¥ partition %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Ændr størrelse af <strong>%2 MiB</strong> partition <strong>%1</strong> til <strong>%3 MiB</strong>. Resizing %2MiB partition %1 to %3MiB. Ændrer størrelsen pÃ¥ %2 MiB partition %1 til %3 MiB. The installer failed to resize partition %1 on disk '%2'. Installationsprogrammet kunne ikke ændre størrelse pÃ¥ partition %1 pÃ¥ disk '%2'. ResizeVolumeGroupDialog Resize Volume Group Ændr størrelse pÃ¥ diskomrÃ¥degruppe ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Ændr størrelse pÃ¥ diskomrÃ¥degruppe ved navn %1 fra %2 til %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. Ændr størrelse af diskomrÃ¥degruppe ved navn <strong>%1</strong> fra <strong>%2</strong> til <strong>%3</strong>. The installer failed to resize a volume group named '%1'. Installationsprogrammet kunne ikke ændre størrelsen pÃ¥ en diskomrÃ¥degruppe ved navn '%1'. ResultsListDialog For best results, please ensure that this computer: For at fÃ¥ det bedste resultat sørg venligst for at computeren: System requirements Systemkrav ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> Computeren imødekommer ikke minimumsystemkravene for at opsætte %1.<br/>Opsætningen kan ikke fortsætte. <a href="#details">Detaljer ...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> Computeren imødekommer ikke minimumsystemkravene for at installere %1.<br/>Installationen kan ikke fortsætte. <a href="#details">Detaljer ...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. Computeren imødekommer ikke nogle af de anbefalede systemkrav for at opsætte %1.<br/>Opsætningen kan fortsætte, men nogle funktionaliteter kan være deaktiveret. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. Computeren imødekommer ikke nogle af de anbefalede systemkrav for at installere %1.<br/>Installationen kan fortsætte, men nogle funktionaliteter kan være deaktiveret. This program will ask you some questions and set up %2 on your computer. Programmet vil stille dig nogle spørgsmÃ¥l og opsætte %2 pÃ¥ din computer. ScanningDialog Scanning storage devices... Skanner lagerenheder ... Partitioning Partitionering SetHostNameJob Set hostname %1 Sæt værtsnavn %1 Set hostname <strong>%1</strong>. Sæt værtsnavn <strong>%1</strong>. Setting hostname %1. Sætter værtsnavn %1. Internal Error Intern fejl Cannot write hostname to target system Kan ikke skrive værtsnavn til destinationssystem SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Sæt tastaturmodel til %1, layout til %2-%3 Failed to write keyboard configuration for the virtual console. Kunne ikke skrive tastaturkonfiguration for den virtuelle konsol. Failed to write to %1 Kunne ikke skrive til %1 Failed to write keyboard configuration for X11. Kunne ikke skrive tastaturkonfiguration for X11. Failed to write keyboard configuration to existing /etc/default directory. Kunne ikke skrive tastaturkonfiguration til eksisterende /etc/default-mappe. SetPartFlagsJob Set flags on partition %1. Sæt flag pÃ¥ partition %1. Set flags on %1MiB %2 partition. Sæt flag pÃ¥ %1 MiB %2 partition. Set flags on new partition. Sæt flag pÃ¥ ny partition. Clear flags on partition <strong>%1</strong>. Ryd flag pÃ¥ partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Ryd flag pÃ¥ %1 MiB <strong>%2</strong> partition. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Flag %1 MiB <strong>%2</strong> partition som <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Rydder flag pÃ¥ %1 MiB <strong>%2</strong> partition. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Sætter flag <strong>%3</strong> pÃ¥ %1 MiB <strong>%2</strong> partition. Clear flags on new partition. Ryd flag pÃ¥ ny partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag partition <strong>%1</strong> som <strong>%2</strong>. Flag new partition as <strong>%1</strong>. Flag ny partition som <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Rydder flag pÃ¥ partition <strong>%1</strong>. Clearing flags on new partition. Rydder flag pÃ¥ ny partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Sætter flag <strong>%2</strong> pÃ¥ partition <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. Sætter flag <strong>%1</strong> pÃ¥ ny partition. The installer failed to set flags on partition %1. Installationsprogrammet kunne ikke sætte flag pÃ¥ partition %1. SetPasswordJob Set password for user %1 Sæt adgangskode for bruger %1 Setting password for user %1. Sætter adgangskode for bruger %1. Bad destination system path. Ugyldig destinationssystemsti. rootMountPoint is %1 rodMonteringsPunkt er %1 Cannot disable root account. Kan ikke deaktivere root-konto. passwd terminated with error code %1. passwd stoppet med fejlkode %1. Cannot set password for user %1. Kan ikke sætte adgangskode for bruger %1. usermod terminated with error code %1. usermod stoppet med fejlkode %1. SetTimezoneJob Set timezone to %1/%2 Sæt tidszone til %1/%2 Cannot access selected timezone path. Kan ikke tilgÃ¥ den valgte tidszonesti. Bad path: %1 Ugyldig sti: %1 Cannot set timezone. Kan ikke sætte tidszone. Link creation failed, target: %1; link name: %2 Oprettelse af link mislykkedes, destination: %1; linknavn: %2 Cannot set timezone, Kan ikke sætte tidszone, Cannot open /etc/timezone for writing Kan ikke Ã¥bne /etc/timezone til skrivning ShellProcessJob Shell Processes Job Skal-procesjob SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1/%L2 SummaryPage This is an overview of what will happen once you start the setup procedure. Dette er et overblik over hvad der vil ske nÃ¥r du starter opsætningsprocessen. This is an overview of what will happen once you start the install procedure. Dette er et overblik over hvad der vil ske nÃ¥r du starter installationsprocessen. SummaryViewStep Summary Opsummering TrackingInstallJob Installation feedback Installationsfeedback Sending installation feedback. Sender installationsfeedback. Internal error in install-tracking. Intern fejl i installationssporing. HTTP request timed out. HTTP-anmodning fik timeout. TrackingMachineNeonJob Machine feedback Maskinfeedback Configuring machine feedback. Konfigurer maskinfeedback. Error in machine feedback configuration. Fejl i maskinfeedback-konfiguration. Could not configure machine feedback correctly, script error %1. Kunne ikke konfigurere maskinfeedback korrekt, skript-fejl %1. Could not configure machine feedback correctly, Calamares error %1. Kunne ikke konfigurere maskinfeedback korrekt, Calamares-fejl %1. TrackingPage Form Formular Placeholder Pladsholder <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>Vælges dette sender du <span style=" font-weight:600;">slet ikke nogen information</span> om din installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Klik her for mere information om brugerfeedback</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. Installationssporing hjælper %1 til at se hvor mange brugere de har, hvilket hardware de installere %1 pÃ¥ og (med de sidste to valgmuligheder nedenfor), hente information om fortrukne programmer løbende. Klik venligst pÃ¥ hjælp-ikonet ved siden af hvert omrÃ¥de, for at se hvad der vil blive sendt. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. Vælges dette sender du information om din installation og hardware. Informationen vil <b>første blive sendt</b> efter installationen er færdig. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. Vælges dette sender du <b>periodisk</b> information om din installation, hardware og programmer, til %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. Vælges dette sender du <b>regelmæssigt</b> information om din installation, hardware, programmer og anvendelsesmønstre, til %1. TrackingViewStep Feedback Feedback UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Hvis mere end én person bruger computeren, kan du oprette flere konti efter opsætningen.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Hvis mere end én person bruger computeren, kan du oprette flere konti efter installationen.</small> Your username is too long. Dit brugernavn er for langt. Your username must start with a lowercase letter or underscore. Dit brugernavn skal begynde med et bogstav med smÃ¥t eller understregning. Only lowercase letters, numbers, underscore and hyphen are allowed. Det er kun tilladt at bruge bogstaver med smÃ¥t, tal, understregning og bindestreg. Only letters, numbers, underscore and hyphen are allowed. Det er kun tilladt at bruge bogstaver, tal, understregning og bindestreg. Your hostname is too short. Dit værtsnavn er for kort. Your hostname is too long. Dit værtsnavn er for langt. Your passwords do not match! Dine adgangskoder er ikke ens! UsersViewStep Users Brugere VariantModel Key Nøgle Value Værdi VolumeGroupBaseDialog Create Volume Group Opret diskomrÃ¥degruppe List of Physical Volumes Liste over fysiske disomrÃ¥der Volume Group Name: DiskomrÃ¥degruppenavn: Volume Group Type: DiskomrÃ¥degruppetype: Physical Extent Size: Størrelse pÃ¥ fysisk udbredelse: MiB MiB Total Size: Samlet størrelse: Used Size: Anvendt størrelse: Total Sectors: Samlet sektorer: Quantity of LVs: Mængde af LV'er: WelcomePage Form Formular Select application and system language Vælg program- og systemsprog Open donations website Ã…bn websted for donationer &Donate &Donér Open help and support website Ã…bn websted for hjælp og support Open issues and bug-tracking website Ã…bn websted for issues og bug-tracking Open release notes website Ã…bn websted med udgivelsesnoter &Release notes &Udgivelsesnoter &Known issues &Kendte problemer &Support &Support &About &Om <h1>Welcome to the %1 installer.</h1> <h1>Velkommen til %1-installationsprogrammet.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Velkommen til Calamares-installationsprogrammet for %1.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Velkommen til Calamares-opsætningsprogrammet til %1.</h1> <h1>Welcome to %1 setup.</h1> <h1>Velkommen til %1-opsætningen.</h1> About %1 setup Om %1-opsætningen About %1 installer Om %1-installationsprogrammet <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. <h1>%1</h1><br/><strong>%2<br/>til %3</strong><br/><br/>Ophavsret 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Ophavsret 2017 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Tak til <a href="https://calamares.io/team/">Calamares-teamet</a> og <a href="https://www.transifex.com/calamares/calamares/">Calamares oversætter-teamet</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> udvikling er sponsoreret af <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support %1 support WelcomeQmlViewStep Welcome Velkommen WelcomeViewStep Welcome Velkommen notesqml <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> About Support Known issues Release notes Donate calamares-3.2.20/lang/calamares_de.ts000066400000000000000000005622721362604102500174340ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. Die <strong>Boot-Umgebung</strong> dieses Systems.<br><br>Ältere x86-Systeme unterstützen nur <strong>BIOS</strong>.<br>Moderne Systeme verwenden normalerweise <strong>EFI</strong>, können jedoch auch als BIOS angezeigt werden, wenn sie im Kompatibilitätsmodus gestartet werden. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. Dieses System wurde mit einer <strong>EFI</strong> Boot-Umgebung gestartet.<br><br>Um den Start von einer EFI-Umgebung einzurichten, muss das Installationsprogramm einen Bootloader wie <strong>GRUB</strong> oder <strong>systemd-boot</strong> auf einer <strong>EFI System-Partition</strong> installieren. Dies passiert automatisch, außer Sie wählen die manuelle Partitionierung. In diesem Fall müssen Sie die EFI System-Partition selbst auswählen oder erstellen. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. Dieses System wurde mit einer <strong>BIOS</strong> Boot-Umgebung gestartet.<br><br>Um den Systemstart von einer BIOS-Umgebung einzurichten, muss das Installationsprogramm einen Bootloader wie <strong>GRUB</strong>installieren, entweder am Anfang einer Partition oder im <strong>Master Boot Record</strong> nahe des Anfangs der Partitionstabelle (bevorzugt). Dies passiert automatisch, außer Sie wählen die manuelle Partitionierung. In diesem Fall müssen Sie ihn selbst einrichten. BootLoaderModel Master Boot Record of %1 Master Boot Record von %1 Boot Partition Boot-Partition System Partition System-Partition Do not install a boot loader Installiere keinen Bootloader %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page Leere Seite Calamares::DebugWindow Form Formular GlobalStorage Globale Einstellungen JobQueue Job-Queue Modules Module Type: Typ: none keiner Interface: Schnittstelle: Tools Werkzeuge Reload Stylesheet Stylesheet neu laden Widget Tree Widget-Baum Debug information Debug-Information Calamares::ExecutionViewStep Set up Einrichtung Install Installieren Calamares::FailJob Job failed (%1) Auftrag fehlgeschlagen (%1) Programmed job failure was explicitly requested. Die Unterlassung einer vorgesehenen Aufgabe wurde ausdrücklich erwünscht. Calamares::JobThread Done Fertig Calamares::NamedJob Example job (%1) Beispielaufgabe (%1) Calamares::ProcessJob Run command '%1' in target system. Führen Sie den Befehl '%1' im Zielsystem aus. Run command '%1'. Führen Sie den Befehl '%1' aus. Running command %1 %2 Befehl %1 %2 wird ausgeführt Calamares::PythonJob Running %1 operation. Operation %1 wird ausgeführt. Bad working directory path Fehlerhafter Arbeitsverzeichnis-Pfad Working directory %1 for python job %2 is not readable. Arbeitsverzeichnis %1 für Python-Job %2 ist nicht lesbar. Bad main script file Fehlerhaftes Hauptskript Main script file %1 for python job %2 is not readable. Hauptskript-Datei %1 für Python-Job %2 ist nicht lesbar. Boost.Python error in job "%1". Boost.Python-Fehler in Job "%1". Calamares::QmlViewStep Loading ... Lade ... QML Step <i>%1</i>. QML Schritt <i>%1</i>. Loading failed. Laden fehlgeschlagen. Calamares::RequirementsChecker Waiting for %n module(s). Warten auf %n Modul. Warten auf %n Modul(e). (%n second(s)) (%n Sekunde) (%n Sekunde(n)) System-requirements checking is complete. Die Überprüfung der Systemvoraussetzungen ist abgeschlossen. Calamares::ViewManager &Back &Zurück &Next &Weiter &Cancel &Abbrechen Cancel setup without changing the system. Installation abbrechen ohne das System zu verändern. Cancel installation without changing the system. Installation abbrechen, ohne das System zu verändern. Setup Failed Setup fehlgeschlagen Would you like to paste the install log to the web? Möchten Sie das Installationsprotokoll an eine Internetadresse senden? Install Log Paste URL Internetadresse für das Senden des Installationsprotokolls The upload was unsuccessful. No web-paste was done. Das Hochladen ist fehlgeschlagen. Es wurde nichts an eine Internetadresse gesendet. Calamares Initialization Failed Initialisierung von Calamares fehlgeschlagen %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. %1 kann nicht installiert werden. Calamares war nicht in der Lage, alle konfigurierten Module zu laden. Dieses Problem hängt mit der Art und Weise zusammen, wie Calamares von der jeweiligen Distribution eingesetzt wird. <br/>The following modules could not be loaded: <br/>Die folgenden Module konnten nicht geladen werden: Continue with installation? Installation fortsetzen? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> Das %1 Installationsprogramm ist dabei, Änderungen an Ihrer Festplatte vorzunehmen, um %2 einzurichten.<br/><strong> Sie werden diese Änderungen nicht rückgängig machen können.</strong> &Set up now &Jetzt einrichten &Set up &Einrichten &Install &Installieren Setup is complete. Close the setup program. Setup ist abgeschlossen. Schließe das Installationsprogramm. Cancel setup? Installation abbrechen? Cancel installation? Installation abbrechen? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Wollen Sie die Installation wirklich abbrechen? Dadurch wird das Installationsprogramm beendet und alle Änderungen gehen verloren. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Wollen Sie wirklich die aktuelle Installation abbrechen? Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. &Yes &Ja &No &Nein &Close &Schließen Continue with setup? Setup fortsetzen? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> Das %1 Installationsprogramm wird Änderungen an Ihrer Festplatte vornehmen, um %2 zu installieren.<br/><strong>Diese Änderungen können nicht rückgängig gemacht werden.</strong> &Install now Jetzt &installieren Go &back Gehe &zurück &Done &Erledigt The installation is complete. Close the installer. Die Installation ist abgeschlossen. Schließe das Installationsprogramm. Error Fehler Installation Failed Installation gescheitert CalamaresPython::Helper Unknown exception type Unbekannter Ausnahmefehler unparseable Python error Nicht analysierbarer Python-Fehler unparseable Python traceback Nicht analysierbarer Python-Traceback Unfetchable Python error. Nicht zuzuordnender Python-Fehler CalamaresUtils Install log posted to: %1 Installationsprotokoll gesendet an: %1 CalamaresWindow %1 Setup Program %1 Installationsprogramm %1 Installer %1 Installationsprogramm Show debug information Debug-Information anzeigen CheckerContainer Gathering system information... Sammle Systeminformationen... ChoicePage Form Form After: Nachher: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Manuelle Partitionierung</strong><br/>Sie können Partitionen eigenhändig erstellen oder in der Grösse verändern. Boot loader location: Installationsziel des Bootloaders: Select storage de&vice: Speichermedium auswählen Current: Aktuell: Reuse %1 as home partition for %2. %1 als Home-Partition für %2 wiederverwenden. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Wählen Sie die zu verkleinernde Partition, dann ziehen Sie den Regler, um die Größe zu ändern</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 wird auf %2MiB verkleinert und eine neue Partition mit einer Größe von %3MiB wird für %4 erstellt werden. <strong>Select a partition to install on</strong> <strong>Wählen Sie eine Partition für die Installation</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Es wurde keine EFI-Systempartition auf diesem System gefunden. Bitte gehen Sie zurück und nutzen Sie die manuelle Partitionierung für das Einrichten von %1. The EFI system partition at %1 will be used for starting %2. Die EFI-Systempartition %1 wird benutzt, um %2 zu starten. EFI system partition: EFI-Systempartition: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Auf diesem Speichermedium scheint kein Betriebssystem installiert zu sein. Was möchten Sie tun?<br/>Sie können Ihre Auswahl überprüfen und bestätigen, bevor Änderungen auf diesem Speichermedium vorgenommen werden. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Festplatte löschen</strong><br/>Dies wird alle vorhandenen Daten auf dem gewählten Speichermedium <font color="red">löschen</font>. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Auf diesem Speichermedium ist %1 installiert. Was möchten Sie tun?<br/>Sie können Ihre Auswahl überprüfen und bestätigen, bevor Änderungen an dem Speichermedium vorgenommen werden. No Swap Kein Swap Reuse Swap Swap wiederverwenden Swap (no Hibernate) Swap (ohne Ruhezustand) Swap (with Hibernate) Swap (mit Ruhezustand) Swap to file Auslagerungsdatei verwenden <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Parallel dazu installieren</strong><br/>Das Installationsprogramm wird eine Partition verkleinern, um Platz für %1 zu schaffen. <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Ersetze eine Partition</strong><br/>Ersetzt eine Partition durch %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Dieses Speichermedium enthält bereits ein Betriebssystem. Was möchten Sie tun?<br/>Sie können Ihre Auswahl überprüfen und bestätigen, bevor Änderungen an dem Speichermedium vorgenommen wird. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Auf diesem Speichermedium sind mehrere Betriebssysteme installiert. Was möchten Sie tun?<br/>Sie können Ihre Auswahl überprüfen und bestätigen, bevor Änderungen an dem Speichermedium vorgenommen werden. ClearMountsJob Clear mounts for partitioning operations on %1 Leere Mount-Points für Partitioning-Operation auf %1 Clearing mounts for partitioning operations on %1. Löse eingehängte Laufwerke für die Partitionierung von %1 Cleared all mounts for %1 Alle Mount-Points für %1 geleert ClearTempMountsJob Clear all temporary mounts. Alle temporären Mount-Points leeren. Clearing all temporary mounts. Löse alle temporär eingehängten Laufwerke. Cannot get list of temporary mounts. Konnte keine Liste von temporären Mount-Points einlesen. Cleared all temporary mounts. Alle temporären Mount-Points geleert. CommandList Could not run command. Befehl konnte nicht ausgeführt werden. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. Dieser Befehl wird im installierten System ausgeführt und muss daher den Root-Pfad kennen, jedoch wurde kein rootMountPoint definiert. The command needs to know the user's name, but no username is defined. Dieser Befehl benötigt den Benutzernamen, jedoch ist kein Benutzername definiert. ContextualProcessJob Contextual Processes Job Job für kontextuale Prozesse CreatePartitionDialog Create a Partition Partition erstellen MiB MiB Partition &Type: Partitions&typ: &Primary &Primär E&xtended Er&weitert Fi&le System: Dateisystem: LVM LV name LVM LV Name Flags: Markierungen: &Mount Point: Ein&hängepunkt: Si&ze: Grö&sse: En&crypt Verschlüsseln Logical Logisch Primary Primär GPT GPT Mountpoint already in use. Please select another one. Dieser Einhängepunkt wird schon benuztzt. Bitte wählen Sie einen anderen. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Erstelle eine neue Partition mit einer Größe von %2MiB auf %4 (%3) mit dem Dateisystem %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Erstelle eine neue Partition mit einer Größe von <strong>%2MiB</strong> auf <strong>%4</strong> (%3) mit dem Dateisystem <strong>%1</strong>. Creating new %1 partition on %2. Erstelle eine neue %1 Partition auf %2. The installer failed to create partition on disk '%1'. Das Installationsprogramm scheiterte beim Erstellen der Partition auf Datenträger '%1'. CreatePartitionTableDialog Create Partition Table Partitionstabelle erstellen Creating a new partition table will delete all existing data on the disk. Beim Erstellen einer neuen Partitionstabelle werden alle Daten auf dem Datenträger gelöscht. What kind of partition table do you want to create? Welchen Partitionstabellen-Typ möchten Sie erstellen? Master Boot Record (MBR) Master Boot Record (MBR) GUID Partition Table (GPT) GUID Partitions-Tabelle (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Erstelle eine neue %1 Partitionstabelle auf %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Erstelle eine neue <strong>%1</strong> Partitionstabelle auf <strong>%2</strong> (%3). Creating new %1 partition table on %2. Erstelle eine neue %1 Partitionstabelle auf %2. The installer failed to create a partition table on %1. Das Installationsprogramm konnte die Partitionstabelle auf %1 nicht erstellen. CreateUserJob Create user %1 Erstelle Benutzer %1 Create user <strong>%1</strong>. Erstelle Benutzer <strong>%1</strong>. Creating user %1. Erstelle Benutzer %1. Sudoers dir is not writable. Sudoers-Verzeichnis ist nicht beschreibbar. Cannot create sudoers file for writing. Kann sudoers-Datei nicht zum Schreiben erstellen. Cannot chmod sudoers file. Kann chmod nicht auf sudoers-Datei anwenden. Cannot open groups file for reading. Kann groups-Datei nicht zum Lesen öffnen. CreateVolumeGroupDialog Create Volume Group Erstelle Volumengruppe CreateVolumeGroupJob Create new volume group named %1. Erstelle eine neue Volumengruppe mit der Bezeichnung %1. Create new volume group named <strong>%1</strong>. Erstelle eine neue Volumengruppe mit der Bezeichnung <strong>%1</strong>. Creating new volume group named %1. Erstelle eine neue Volumengruppe mit der Bezeichnung %1. The installer failed to create a volume group named '%1'. Das Installationsprogramm konnte keine Volumengruppe mit der Bezeichnung '%1' erstellen. DeactivateVolumeGroupJob Deactivate volume group named %1. Deaktiviere Volumengruppe mit der Bezeichnung %1. Deactivate volume group named <strong>%1</strong>. Deaktiviere Volumengruppe mit der Bezeichnung <strong>%1</strong>. The installer failed to deactivate a volume group named %1. Das Installationsprogramm konnte die Volumengruppe %1 nicht deaktivieren. DeletePartitionJob Delete partition %1. Lösche Partition %1. Delete partition <strong>%1</strong>. Lösche Partition <strong>%1</strong>. Deleting partition %1. Partition %1 wird gelöscht. The installer failed to delete partition %1. Das Installationsprogramm konnte Partition %1 nicht löschen. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. Die Art von <strong>Partitionstabelle</strong> auf dem gewählten Speichermedium.<br><br>Die einzige Möglichkeit, die Art der Partitionstabelle zu ändern, ist sie zu löschen und sie erneut zu erstellen, wodurch alle Daten auf dem Speichermedium gelöscht werden.<br>Dieses Installationsprogramm wird die aktuelle Partitionstabelle beibehalten, außer Sie entscheiden sich ausdrücklich dagegen.<br>Falls Sie unsicher sind: auf modernen Systemen wird GPT bevorzugt. This device has a <strong>%1</strong> partition table. Dieses Gerät hat eine <strong>%1</strong> Partitionstabelle. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. Dies ist ein <strong>Loop</strong>-Gerät.<br><br>Es ist ein Pseudo-Gerät ohne Partitionstabelle, das eine Datei als Blockgerät zugänglich macht. Diese Art der Einrichtung enthält in der Regel nur ein einziges Dateisystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. Auf dem ausgewählten Speichermedium konnte <strong>keine Partitionstabelle gefunden</strong> werden.<br><br>Die Partitionstabelle dieses Gerätes ist nicht vorhanden, beschädigt oder von einem unbekannten Typ.<br>Dieses Installationsprogramm kann eine neue Partitionstabelle für Sie erstellen, entweder automatisch oder nach Auswahl der manuellen Partitionierung. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Dies ist die empfohlene Partitionstabelle für moderne Systeme, die von einer <strong>EFI</ strong> Boot-Umgebung starten. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. <br><br>Diese Art von Partitionstabelle ist nur für ältere Systeme ratsam, welche von einer <strong>BIOS</strong> Boot-Umgebung starten. GPT wird in den meisten anderen Fällen empfohlen.<br><br><strong>Achtung:</strong> Die MBR-Partitionstabelle ist ein veralteter Standard aus der MS-DOS-Ära.<br>Es können nur 4 <em>primäre</em> Partitionen erstellt werden. Davon kann eine als <em>erweiterte</em> Partition eingerichtet werden, die wiederum viele <em>logische</em> Partitionen enthalten kann. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1 - (%2) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Schreibe LUKS-Konfiguration für Dracut nach %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Überspringe das Schreiben der LUKS-Konfiguration für Dracut: die Partition "/" ist nicht verschlüsselt Failed to open %1 Konnte %1 nicht öffnen DummyCppJob Dummy C++ Job Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Editiere bestehende Partition Content: Inhalt: &Keep &Beibehalten Format Formatieren Warning: Formatting the partition will erase all existing data. Warnung: Beim Formatieren der Partition werden alle Daten gelöscht. &Mount Point: Einhängepun&kt: Si&ze: Grö&sse: MiB MiB Fi&le System: Datei&system: Flags: Markierungen: Mountpoint already in use. Please select another one. Der Einhängepunkt wird schon benutzt. Bitte wählen Sie einen anderen. EncryptWidget Form Formular En&crypt system Verschlüssele System Passphrase Passwort Confirm passphrase Passwort wiederholen Please enter the same passphrase in both boxes. Bitte tragen Sie dasselbe Passwort in beide Felder ein. FillGlobalStorageJob Set partition information Setze Partitionsinformationen Install %1 on <strong>new</strong> %2 system partition. Installiere %1 auf <strong>neuer</strong> %2 Systempartition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Erstelle <strong>neue</strong> %2 Partition mit Einhängepunkt <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Installiere %2 auf %3 Systempartition <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Erstelle %3 Partition <strong>%1</strong> mit Einhängepunkt <strong>%2</strong>. Install boot loader on <strong>%1</strong>. Installiere Bootloader auf <strong>%1</strong>. Setting up mount points. Richte Einhängepunkte ein. FinishedPage Form Form <Restart checkbox tooltip> <Restart checkbox tooltip> &Restart now Jetzt &Neustarten <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>Alles erledigt.</h1><br/>%1 wurde auf Ihrem Computer eingerichtet.<br/>Sie können nun mit Ihrem neuen System arbeiten. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <html><head/><body><p>Wenn diese Option aktiviert ist, genügt zum Neustart des Systems ein Klick auf <span style="font-style:italic;">Fertig</span> oder das Schließen des Installationsprogramms.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>Alles erledigt.</h1><br/>%1 wurde auf Ihrem Computer installiert.<br/>Sie können nun in Ihr neues System neustarten oder mit der %2 Live-Umgebung fortfahren. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <html><head/><body><p>Wenn diese Option aktiviert ist, genügt zum Neustart des Systems ein Klick auf <span style="font-style:italic;">Fertig</span> oder das Schließen des Installationsprogramms.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation fehlgeschlagen</h1><br/>%1 wurde nicht auf Ihrem Computer eingerichtet.<br/>Die Fehlermeldung war: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Installation fehlgeschlagen</h1><br/>%1 wurde nicht auf deinem Computer installiert.<br/>Die Fehlermeldung lautet: %2. FinishedViewStep Finish Beenden Setup Complete Installation abgeschlossen Installation Complete Installation abgeschlossen The setup of %1 is complete. Die Installation von %1 ist abgeschlossen. The installation of %1 is complete. Die Installation von %1 ist abgeschlossen. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Formatiere Partition %1 (Dateisystem: %2, Größe: %3 MiB) auf %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatiere <strong>%3MiB</strong> Partition <strong>%1</strong> mit dem Dateisystem <strong>%2</strong>. Formatting partition %1 with file system %2. Formatiere Partition %1 mit Dateisystem %2. The installer failed to format partition %1 on disk '%2'. Das Formatieren von Partition %1 auf Datenträger '%2' ist fehlgeschlagen. GeneralRequirements has at least %1 GiB available drive space mindestens %1 GiB freien Festplattenplatz hat There is not enough drive space. At least %1 GiB is required. Zu wenig Speicherplatz auf der Festplatte. Es wird mindestens %1 GiB benötigt. has at least %1 GiB working memory mindestens %1 GiB Arbeitsspeicher hat The system does not have enough working memory. At least %1 GiB is required. Das System hat nicht genug Arbeitsspeicher. Es wird mindestens %1 GiB benötigt. is plugged in to a power source ist an eine Stromquelle angeschlossen The system is not plugged in to a power source. Der Computer ist an keine Stromquelle angeschlossen. is connected to the Internet ist mit dem Internet verbunden The system is not connected to the Internet. Der Computer ist nicht mit dem Internet verbunden. is running the installer as an administrator (root) führt das Installationsprogramm als Administrator (root) aus The setup program is not running with administrator rights. Das Installationsprogramm wird nicht mit Administratorrechten ausgeführt. The installer is not running with administrator rights. Das Installationsprogramm wird nicht mit Administratorrechten ausgeführt. has a screen large enough to show the whole installer hat einen ausreichend großen Bildschirm für die Anzeige des gesamten Installationsprogramm The screen is too small to display the setup program. Der Bildschirm ist zu klein, um das Installationsprogramm anzuzeigen. The screen is too small to display the installer. Der Bildschirm ist zu klein, um das Installationsprogramm anzuzeigen. HostInfoJob Collecting information about your machine. Sammeln von Informationen über Ihren Computer. IDJob OEM Batch Identifier OEM-Chargenkennung Could not create directories <code>%1</code>. Verzeichnisse <code>%1</code> konnten nicht erstellt werden. Could not open file <code>%1</code>. Die Datei <code>%1</code> konnte nicht geöffnet werden. Could not write to file <code>%1</code>. Konnte nicht in die Datei <code>%1</code> schreiben. InitcpioJob Creating initramfs with mkinitcpio. Erstelle initramfs mit mkinitcpio. InitramfsJob Creating initramfs. Erstelle initramfs. InteractiveTerminalPage Konsole not installed Konsole nicht installiert Please install KDE Konsole and try again! Bitte installieren Sie das KDE-Programm namens Konsole und probieren Sie es erneut! Executing script: &nbsp;<code>%1</code> Führe Skript aus: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script Skript KeyboardPage Set keyboard model to %1.<br/> Setze Tastaturmodell auf %1.<br/> Set keyboard layout to %1/%2. Setze Tastaturbelegung auf %1/%2. KeyboardViewStep Keyboard Tastatur LCLocaleDialog System locale setting Regions- und Spracheinstellungen The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. Die Lokalisierung des Systems beeinflusst die Sprache und den Zeichensatz einiger Elemente der Kommandozeile.<br/>Die derzeitige Einstellung ist <strong>%1</strong>. &Cancel &Abbrechen &OK &OK LicensePage Form Formular <h1>License Agreement</h1> <h1>Lizenzvereinbarung</h1> I accept the terms and conditions above. Ich akzeptiere die obigen Allgemeinen Geschäftsbedingungen. Please review the End User License Agreements (EULAs). Bitte lesen Sie die Lizenzvereinbarungen für Endanwender (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. Diese Installationsroutine wird proprietäre Software installieren, die Lizenzbedingungen unterliegt. If you do not agree with the terms, the setup procedure cannot continue. Wenn Sie diesen Bedingungen nicht zustimmen, kann die Installation nicht fortgesetzt werden. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Um zusätzliche Funktionen bereitzustellen und das Benutzererlebnis zu verbessern, kann diese Installationsroutine proprietäre Software installieren, die Lizenzbedingungen unterliegt. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Wenn Sie diesen Bedingungen nicht zustimmen, wird keine proprietäre Software installiert, stattdessen werden Open-Source-Alternativen verwendet. LicenseViewStep License Lizenz LicenseWidget URL: %1 URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 Treiber</strong><br/>von %2 <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 Grafiktreiber</strong><br/><font color="Grey">von %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 Browser-Plugin</strong><br/><font color="Grey">von %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 Codec</strong><br/><font color="Grey">von %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 Paket</strong><br/><font color="Grey">von %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">von %2</font> File: %1 Datei: %1 Show the license text Lizenzvereinbarung anzeigen Open license agreement in browser. Lizenzvereinbarung im Browser öffnen Hide license text Lizenztext ausblenden LocalePage The system language will be set to %1. Die Systemsprache wird auf %1 gestellt. The numbers and dates locale will be set to %1. Das Format für Zahlen und Datum wird auf %1 gesetzt. Region: Region: Zone: Zeitzone: &Change... &Ändern... Set timezone to %1/%2.<br/> Setze Zeitzone auf %1/%2.<br/> LocaleViewStep Location Standort LuksBootKeyFileJob Configuring LUKS key file. Konfiguriere LUKS-Schlüsseldatei. No partitions are defined. Keine Partitionen definiert. Encrypted rootfs setup error Fehler bei der Einrichtung der verschlüsselten Root-Partition Root partition %1 is LUKS but no passphrase has been set. Root-Partition %1 ist mit LUKS verschlüsselt, aber es wurde kein Passwort gesetzt. Could not create LUKS key file for root partition %1. Konnte die LUKS-Schlüsseldatei für die Root-Partition %1 nicht erstellen. Could not configure LUKS key file on partition %1. Die LUKS-Schlüsseldatei konnte nicht auf Partition %1 eingerichtet werden. MachineIdJob Generate machine-id. Generiere Computer-ID. Configuration Error Konfigurationsfehler No root mount point is set for MachineId. Für die Computer-ID wurde kein Einhängepunkt für die Root-Partition festgelegt. NetInstallPage Name Name Description Beschreibung Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Netzwerk-Installation. (Deaktiviert: Paketlisten nicht erreichbar, prüfe deine Netzwerk-Verbindung) Network Installation. (Disabled: Received invalid groups data) Netwerk-Installation. (Deaktiviert: Ungültige Gruppen-Daten eingegeben) Network Installation. (Disabled: Incorrect configuration) Netzwerk-Installation. (Deaktiviert: Ungültige Konfiguration) NetInstallViewStep Package selection Paketauswahl Office software Office-Software Office package Office-Paket Browser software Browser-Software Browser package Browser-Paket Web browser Webbrowser Kernel Kernel Services Dienste Login Anmeldung Desktop Desktop Applications Anwendungen NotesQmlViewStep Notes Anmerkungen OEMPage Ba&tch: S&tapel: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>Geben Sie hier eine Chargenkennung ein. Diese wird im Zielsystem gespeichert.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>OEM-Konfiguration</h1><p>Calamares verwendet OEM-Einstellungen bei der Konfiguration des Zielsystems.</p></body></html> OEMViewStep OEM Configuration OEM-Konfiguration Set the OEM Batch Identifier to <code>%1</code>. OEM-Chargenkennung auf <code>%1</code> setzen. PWQ Password is too short Das Passwort ist zu kurz Password is too long Das Passwort ist zu lang Password is too weak Das Passwort ist zu schwach Memory allocation error when setting '%1' Fehler bei der Speicherzuweisung beim Einrichten von '%1' Memory allocation error Fehler bei der Speicherzuweisung The password is the same as the old one Das Passwort ist dasselbe wie das alte The password is a palindrome Das Passwort ist ein Palindrom The password differs with case changes only Das Passwort unterscheidet sich nur durch Groß- und Kleinschreibung The password is too similar to the old one Das Passwort ist dem alten zu ähnlich The password contains the user name in some form Das Passwort enthält eine Form des Benutzernamens The password contains words from the real name of the user in some form Das Passwort enthält Teile des Klarnamens des Benutzers The password contains forbidden words in some form Das Passwort enthält verbotene Wörter The password contains less than %1 digits Das Passwort hat weniger als %1 Stellen The password contains too few digits Das Passwort hat zu wenige Stellen The password contains less than %1 uppercase letters Das Passwort enthält weniger als %1 Großbuchstaben The password contains too few uppercase letters Das Passwort enthält zu wenige Großbuchstaben The password contains less than %1 lowercase letters Das Passwort enthält weniger als %1 Kleinbuchstaben The password contains too few lowercase letters Das Passwort enthält zu wenige Kleinbuchstaben The password contains less than %1 non-alphanumeric characters Das Passwort enthält weniger als %1 nicht-alphanumerische Zeichen The password contains too few non-alphanumeric characters Das Passwort enthält zu wenige nicht-alphanumerische Zeichen The password is shorter than %1 characters Das Passwort hat weniger als %1 Stellen The password is too short Das Passwort ist zu kurz The password is just rotated old one Das Passwort wurde schon einmal verwendet The password contains less than %1 character classes Das Passwort enthält weniger als %1 verschiedene Zeichenarten The password does not contain enough character classes Das Passwort enthält nicht genügend verschiedene Zeichenarten The password contains more than %1 same characters consecutively Das Passwort enthält mehr als %1 gleiche Zeichen am Stück The password contains too many same characters consecutively Das Passwort enthält zu viele gleiche Zeichen am Stück The password contains more than %1 characters of the same class consecutively Das Passwort enthält mehr als %1 gleiche Zeichenarten am Stück The password contains too many characters of the same class consecutively Das Passwort enthält zu viele gleiche Zeichenarten am Stück The password contains monotonic sequence longer than %1 characters Das Passwort enthält eine gleichartige Sequenz von mehr als %1 Zeichen The password contains too long of a monotonic character sequence Das Passwort enthält eine gleichartige Sequenz von zu großer Länge No password supplied Kein Passwort angegeben Cannot obtain random numbers from the RNG device Zufallszahlen konnten nicht vom Zufallszahlengenerator abgerufen werden Password generation failed - required entropy too low for settings Passwortgeneration fehlgeschlagen - Zufallszahlen zu schwach für die gewählten Einstellungen The password fails the dictionary check - %1 Das Passwort besteht den Wörterbuch-Test nicht - %1 The password fails the dictionary check Das Passwort besteht den Wörterbuch-Test nicht Unknown setting - %1 Unbekannte Einstellung - %1 Unknown setting Unbekannte Einstellung Bad integer value of setting - %1 Fehlerhafter Integerwert der Einstellung - %1 Bad integer value Fehlerhafter Integerwert Setting %1 is not of integer type Die Einstellung %1 ist kein Integerwert Setting is not of integer type Die Einstellung ist kein Integerwert Setting %1 is not of string type Die Einstellung %1 ist keine Zeichenkette Setting is not of string type Die Einstellung ist keine Zeichenkette Opening the configuration file failed Öffnen der Konfigurationsdatei fehlgeschlagen The configuration file is malformed Die Konfigurationsdatei ist falsch strukturiert Fatal failure Fataler Fehler Unknown error Unbekannter Fehler Password is empty Passwort nicht vergeben PackageChooserPage Form Formular Product Name Produktname TextLabel TextLabel Long Product Description Lange Produktbeschreibung Package Selection Paketauswahl Please pick a product from the list. The selected product will be installed. Bitte wählen Sie ein Produkt aus der Liste aus. Das ausgewählte Produkt wird installiert. PackageChooserViewStep Packages Pakete Page_Keyboard Form Formular Keyboard Model: Tastaturmodell: Type here to test your keyboard Tippen Sie hier, um die Tastaturbelegung zu testen Page_UserSetup Form Formular What is your name? Wie ist Ihr Vor- und Nachname? What name do you want to use to log in? Welchen Namen möchten Sie zum Anmelden benutzen? Choose a password to keep your account safe. Wählen Sie ein Passwort, um Ihr Konto zu sichern. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>Bitte geben Sie Ihr Passwort zweimal ein, um Tippfehler auszuschliessen. Ein gutes Passwort enthält Buchstaben, Zahlen und Sonderzeichen. Ferner sollte es mindestens acht Zeichen umfassen und regelmässig geändert werden.</small> What is the name of this computer? Wie ist der Name dieses Computers? Your Full Name Ihr vollständiger Name login Anmeldung <small>This name will be used if you make the computer visible to others on a network.</small> <small>Dieser Name wird benutzt, wenn Sie den Computer im Netzwerk sichtbar machen.</small> Computer Name Computername Password Passwort Repeat Password Passwort wiederholen When this box is checked, password-strength checking is done and you will not be able to use a weak password. Wenn dieses Kontrollkästchen aktiviert ist, wird die Passwortstärke überprüft und verhindert, dass Sie ein schwaches Passwort verwenden. Require strong passwords. Verlange sichere Passwörter. Log in automatically without asking for the password. Automatisches Einloggen ohne Passwortabfrage. Use the same password for the administrator account. Nutze das gleiche Passwort auch für das Administratorkonto. Choose a password for the administrator account. Wählen Sie ein Passwort für das Administrationskonto. <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Geben Sie das Passwort zweimal ein, um es auf Tippfehler zu prüfen.</small> PartitionLabelsView Root Root Home Home Boot Boot EFI system EFI-System Swap Swap New partition for %1 Neue Partition für %1 New partition Neue Partition %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space Freier Platz New partition Neue Partition Name Name File System Dateisystem Mount Point Einhängepunkt Size Grösse PartitionPage Form Form Storage de&vice: Speicher&medium: &Revert All Changes Alle Änderungen &rückgängig machen New Partition &Table Neue Partitions&tabelle Cre&ate Erstellen &Edit Ä&ndern &Delete Lösc&hen New Volume Group Neue Volumengruppe Resize Volume Group Größe der Volumengruppe verändern Deactivate Volume Group Volumengruppe deaktivieren Remove Volume Group Volumengruppe löschen I&nstall boot loader on: I&nstalliere Bootloader auf: Are you sure you want to create a new partition table on %1? Sind Sie sicher, dass Sie eine neue Partitionstabelle auf %1 erstellen möchten? Can not create new partition Neue Partition kann nicht erstellt werden The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. Die Partitionstabelle auf %1 hat bereits %2 primäre Partitionen und weitere können nicht hinzugefügt werden. Bitte entfernen Sie eine primäre Partition und fügen Sie stattdessen eine erweiterte Partition hinzu. PartitionViewStep Gathering system information... Sammle Systeminformationen... Partitions Partitionen Install %1 <strong>alongside</strong> another operating system. Installiere %1 <strong>neben</strong> einem anderen Betriebssystem. <strong>Erase</strong> disk and install %1. <strong>Lösche</strong> Festplatte und installiere %1. <strong>Replace</strong> a partition with %1. <strong>Ersetze</strong> eine Partition durch %1. <strong>Manual</strong> partitioning. <strong>Manuelle</strong> Partitionierung. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). %1 <strong>parallel</strong> zu einem anderen Betriebssystem auf der Festplatte <strong>%2</strong> (%3) installieren. <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. Festplatte <strong>%2</strong> <strong>löschen</strong> (%3) und %1 installieren. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. Eine Partition auf Festplatte <strong>%2</strong> (%3) durch %1 <strong>ersetzen</strong>. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>Manuelle</strong> Partitionierung auf Festplatte <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Festplatte <strong>%1</strong> (%2) Current: Aktuell: After: Nachher: No EFI system partition configured Keine EFI-Systempartition konfiguriert An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. Eine EFI Systempartition wird benötigt, um %1 zu starten.<br/><br/>Um eine EFI Systempartition einzurichten, gehen Sie zurück und wählen oder erstellen Sie ein FAT32-Dateisystem mit einer aktivierten <strong>esp</strong> Markierung sowie <strong>%2</strong> als Einhängepunkt .<br/><br/>Sie können ohne die Einrichtung einer EFI-Systempartition fortfahren, aber ihr System wird unter Umständen nicht starten können. EFI system partition flag not set Die Markierung als EFI-Systempartition wurde nicht gesetzt An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Eine EFI Systempartition wird benötigt, um %1 zu starten.<br/><br/>Eine Partition mit dem Einhängepunkt <strong>%2</strong> wurd eingerichtet, jedoch wurde dort keine <strong>esp</strong> Markierung gesetzt.<br/>Um diese Markierung zu setzen, gehen Sie zurück und bearbeiten Sie die Partition.<br/><br/>Sie können ohne diese Markierung fortfahren, aber ihr System wird unter Umständen nicht starten können. Boot partition not encrypted Bootpartition nicht verschlüsselt A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. Eine separate Bootpartition wurde zusammen mit einer verschlüsselten Rootpartition erstellt, die Bootpartition ist aber unverschlüsselt.<br/><br/> Dies ist sicherheitstechnisch nicht optimal, da wichtige Systemdateien auf der unverschlüsselten Bootpartition gespeichert werden.<br/>Wenn Sie wollen, können Sie fortfahren, aber das Entschlüsseln des Dateisystems wird erst später während des Systemstarts erfolgen.<br/>Um die Bootpartition zu verschlüsseln, gehen Sie zurück und erstellen Sie diese neu, indem Sie bei der Partitionierung <strong>Verschlüsseln</strong> wählen. has at least one disk device available. mindestens eine Festplatte zur Verfügung hat There are no partitions to install on. Keine Partitionen für die Installation verfügbar. PlasmaLnfJob Plasma Look-and-Feel Job Job für das Erscheinungsbild von Plasma Could not select KDE Plasma Look-and-Feel package Das Paket für das Erscheinungsbild von KDE Plasma konnte nicht ausgewählt werden PlasmaLnfPage Form Formular Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Bitte wählen Sie ein Erscheinungsbild für die Be­nut­zer­ober­flä­che von KDE Plasma. Sie können diesen Schritt auch überspringen und das Erscheinungsbild nach der Installation festlegen. Per Klick auf einen Eintrag können Sie sich eine Vorschau dieses Erscheinungsbildes anzeigen lassen. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Bitte wählen Sie das Erscheinungsbild für den KDE Plasma Desktop. Sie können diesen Schritt auch überspringen und das Erscheinungsbild festlegen, sobald das System installiert ist. Per Klick auf einen Eintrag können Sie sich eine Vorschau dieses Erscheinungsbildes anzeigen lassen. PlasmaLnfViewStep Look-and-Feel Erscheinungsbild PreserveFiles Saving files for later ... Speichere Dateien für später ... No files configured to save for later. Keine Dateien für das Speichern zur späteren Verwendung konfiguriert. Not all of the configured files could be preserved. Nicht alle konfigurierten Dateien konnten erhalten werden. ProcessResult There was no output from the command. Dieser Befehl hat keine Ausgabe erzeugt. Output: Ausgabe: External command crashed. Externes Programm abgestürzt. Command <i>%1</i> crashed. Programm <i>%1</i> abgestürzt. External command failed to start. Externes Programm konnte nicht gestartet werden. Command <i>%1</i> failed to start. Das Programm <i>%1</i> konnte nicht gestartet werden. Internal error when starting command. Interner Fehler beim Starten des Programms. Bad parameters for process job call. Ungültige Parameter für Prozessaufruf. External command failed to finish. Externes Programm konnte nicht abgeschlossen werden. Command <i>%1</i> failed to finish in %2 seconds. Programm <i>%1</i> konnte nicht innerhalb von %2 Sekunden abgeschlossen werden. External command finished with errors. Externes Programm mit Fehlern beendet. Command <i>%1</i> finished with exit code %2. Befehl <i>%1</i> beendet mit Exit-Code %2. QObject Default Keyboard Model Standard-Tastaturmodell Default Standard unknown unbekannt extended erweitert unformatted unformatiert swap Swap Unpartitioned space or unknown partition table Nicht zugeteilter Speicherplatz oder unbekannte Partitionstabelle (no mount point) (kein Einhängepunkt) Requirements checking for module <i>%1</i> is complete. Die Anforderungsprüfung für das Modul <i>%1</i> ist abgeschlossen. %1 (%2) language[name] (country[name]) %1 (%2) No product Kein Produkt No description provided. Keine Beschreibung vorhanden. File not found Datei nicht gefunden Path <pre>%1</pre> must be an absolute path. Der Pfad <pre>%1</pre> muss ein absoluter Pfad sein. Could not create new random file <pre>%1</pre>. Die neue Zufallsdatei <pre>%1</pre> konnte nicht erstellt werden. RemoveVolumeGroupJob Remove Volume Group named %1. Lösche Volumengruppe mit der Bezeichnung %1. Remove Volume Group named <strong>%1</strong>. Lösche Volumengruppe mit der Bezeichnung <strong>%1</strong>. The installer failed to remove a volume group named '%1'. Das Installationsprogramm konnte die Volumengruppe mit der Bezeichnung '%1' nicht löschen. ReplaceWidget Form Form Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Wählen Sie den Installationsort für %1.<br/><font color="red">Warnung: </font>Dies wird alle Daten auf der ausgewählten Partition löschen. The selected item does not appear to be a valid partition. Die aktuelle Auswahl scheint keine gültige Partition zu sein. %1 cannot be installed on empty space. Please select an existing partition. %1 kann nicht in einem unpartitionierten Bereich installiert werden. Bitte wählen Sie eine existierende Partition aus. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 kann nicht auf einer erweiterten Partition installiert werden. Bitte wählen Sie eine primäre oder logische Partition aus. %1 cannot be installed on this partition. %1 kann auf dieser Partition nicht installiert werden. Data partition (%1) Datenpartition (%1) Unknown system partition (%1) Unbekannte Systempartition (%1) %1 system partition (%2) %1 Systempartition (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>Die Partition %1 ist zu klein für %2. Bitte wählen Sie eine Partition mit einer Kapazität von mindestens %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/>Es wurde keine EFI-Systempartition auf diesem System gefunden. Bitte gehen Sie zurück, und nutzen Sie die manuelle Partitionierung, um %1 aufzusetzen. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>%1 wird installiert auf %2.<br/><font color="red">Warnung: </font> Alle Daten auf der Partition %2 werden gelöscht. The EFI system partition at %1 will be used for starting %2. Die EFI-Systempartition auf %1 wird benutzt, um %2 zu starten. EFI system partition: EFI-Systempartition: ResizeFSJob Resize Filesystem Job Auftrag zur Änderung der Dateisystemgröße Invalid configuration Ungültige Konfiguration The file-system resize job has an invalid configuration and will not run. Die Aufgabe zur Änderung der Größe des Dateisystems enthält eine ungültige Konfiguration und wird nicht ausgeführt. KPMCore not Available KPMCore ist nicht verfügbar Calamares cannot start KPMCore for the file-system resize job. Calamares kann KPMCore zur Änderung der Dateisystemgröße nicht starten. Resize Failed Größenänderung ist fehlgeschlagen. The filesystem %1 could not be found in this system, and cannot be resized. Das Dateisystem %1 konnte auf diesem System weder gefunden noch in der Größe verändert werden. The device %1 could not be found in this system, and cannot be resized. Das Gerät %1 konnte auf diesem System weder gefunden noch in der Größe verändert werden. The filesystem %1 cannot be resized. Die Größe des Dateisystems %1 kann nicht geändert werden. The device %1 cannot be resized. Das Gerät %1 kann nicht in seiner Größe verändert werden. The filesystem %1 must be resized, but cannot. Die Größe des Dateisystems %1 muss geändert werden, dies ist aber nicht möglich. The device %1 must be resized, but cannot Das Gerät %1 muss in seiner Größe verändert werden, dies ist aber nicht möglich. ResizePartitionJob Resize partition %1. Ändere die Grösse von Partition %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Partition <strong>%1</strong> von <strong>%2MiB</strong> auf <strong>%3MiB</strong> vergrößern. Resizing %2MiB partition %1 to %3MiB. Ändere die Größe der Partition %1 von %2MiB auf %3MiB. The installer failed to resize partition %1 on disk '%2'. Das Installationsprogramm konnte die Grösse von Partition %1 auf Datenträger '%2' nicht ändern. ResizeVolumeGroupDialog Resize Volume Group Größe der Volumengruppe verändern ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Verändere die Größe der Volumengruppe %1 von %2 auf %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. Verändere die Größe der Volumengruppe <strong>%1</strong> von <strong>%2</strong> auf <strong>%3</strong>. The installer failed to resize a volume group named '%1'. Das Installationsprogramm konnte die Größe der Volumengruppe '%1' nicht verändern. ResultsListDialog For best results, please ensure that this computer: Für das beste Ergebnis stellen Sie bitte sicher, dass dieser Computer: System requirements Systemanforderungen ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> Dieser Computer erfüllt nicht die Mindestvoraussetzungen für die Installation von %1.<br/>Die Installation kann nicht fortgesetzt werden. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> Dieser Computer erfüllt nicht die Mindestvoraussetzungen für die Installation von %1.<br/>Die Installation kann nicht fortgesetzt werden. <a href="#details">Details...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. Dieser Computer erfüllt nicht alle empfohlenen Voraussetzungen für die Installation von %1.<br/>Die Installation kann fortgesetzt werden, aber es werden eventuell nicht alle Funktionen verfügbar sein. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. Dieser Computer erfüllt nicht alle empfohlenen Voraussetzungen für die Installation von %1.<br/>Die Installation kann fortgesetzt werden, aber es werden eventuell nicht alle Funktionen verfügbar sein. This program will ask you some questions and set up %2 on your computer. Dieses Programm wird Ihnen einige Fragen stellen, um %2 auf Ihrem Computer zu installieren. ScanningDialog Scanning storage devices... Scanne Speichermedien... Partitioning Partitionierung SetHostNameJob Set hostname %1 Setze Computername auf %1 Set hostname <strong>%1</strong>. Setze Computernamen <strong>%1</strong>. Setting hostname %1. Setze Computernamen %1. Internal Error Interner Fehler Cannot write hostname to target system Kann den Computernamen nicht auf das Zielsystem schreiben SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Definiere Tastaturmodel zu %1, Layout zu %2-%3 Failed to write keyboard configuration for the virtual console. Konnte keine Tastatur-Konfiguration für die virtuelle Konsole schreiben. Failed to write to %1 Konnte nicht auf %1 schreiben Failed to write keyboard configuration for X11. Konnte keine Tastatur-Konfiguration für X11 schreiben. Failed to write keyboard configuration to existing /etc/default directory. Die Konfiguration der Tastatur konnte nicht in das bereits existierende Verzeichnis /etc/default geschrieben werden. SetPartFlagsJob Set flags on partition %1. Setze Markierungen für Partition %1. Set flags on %1MiB %2 partition. Setze Markierungen für %1MiB %2 Partition. Set flags on new partition. Setze Markierungen für neue Partition. Clear flags on partition <strong>%1</strong>. Markierungen für Partition <strong>%1</strong> entfernen. Clear flags on %1MiB <strong>%2</strong> partition. Markierungen für %1MiB <strong>%2</strong> Partition entfernen. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Markiere %1MiB <strong>%2</strong> Partition als <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Lösche Markierungen für %1MiB <strong>%2</strong> Partition. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Setze Markierungen <strong>%3</strong> für %1MiB <strong>%2</strong> Partition. Clear flags on new partition. Markierungen für neue Partition entfernen. Flag partition <strong>%1</strong> as <strong>%2</strong>. Partition markieren <strong>%1</strong> als <strong>%2</strong>. Flag new partition as <strong>%1</strong>. Markiere neue Partition als <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Lösche Markierungen für Partition <strong>%1</strong>. Clearing flags on new partition. Lösche Markierungen für neue Partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setze Markierungen <strong>%2</strong> für Partition <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. Setze Markierungen <strong>%1</strong> für neue Partition. The installer failed to set flags on partition %1. Das Installationsprogramm konnte keine Markierungen für Partition %1 setzen. SetPasswordJob Set password for user %1 Setze Passwort für Benutzer %1 Setting password for user %1. Setze Passwort für Benutzer %1. Bad destination system path. Ungültiger System-Zielpfad. rootMountPoint is %1 root-Einhängepunkt ist %1 Cannot disable root account. Das Root-Konto kann nicht deaktiviert werden. passwd terminated with error code %1. Passwd beendet mit Fehlercode %1. Cannot set password for user %1. Passwort für Benutzer %1 kann nicht gesetzt werden. usermod terminated with error code %1. usermod wurde mit Fehlercode %1 beendet. SetTimezoneJob Set timezone to %1/%2 Setze Zeitzone auf %1/%2 Cannot access selected timezone path. Zugriff auf den Pfad der gewählten Zeitzone fehlgeschlagen. Bad path: %1 Ungültiger Pfad: %1 Cannot set timezone. Zeitzone kann nicht gesetzt werden. Link creation failed, target: %1; link name: %2 Erstellen der Verknüpfung fehlgeschlagen, Ziel: %1; Verknüpfung: %2 Cannot set timezone, Kann die Zeitzone nicht setzen, Cannot open /etc/timezone for writing Kein Schreibzugriff auf /etc/timezone ShellProcessJob Shell Processes Job Job für Shell-Prozesse SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage This is an overview of what will happen once you start the setup procedure. Dies ist eine Übersicht der Aktionen, die nach dem Starten des Installationsprozesses durchgeführt werden. This is an overview of what will happen once you start the install procedure. Dies ist eine Übersicht der Aktionen, die nach dem Starten des Installationsprozesses durchgeführt werden. SummaryViewStep Summary Zusammenfassung TrackingInstallJob Installation feedback Rückmeldungen zur Installation Sending installation feedback. Senden der Rückmeldungen zur Installation. Internal error in install-tracking. Interner Fehler bei der Überwachung der Installation. HTTP request timed out. Zeitüberschreitung bei HTTP-Anfrage TrackingMachineNeonJob Machine feedback Rückinformationen zum Computer Configuring machine feedback. Konfiguriere Rückmeldungen zum Computer. Error in machine feedback configuration. Fehler bei der Konfiguration der Rückmeldungen zum Computer Could not configure machine feedback correctly, script error %1. Rückmeldungen zum Computer konnten nicht korrekt konfiguriert werden, Skriptfehler %1. Could not configure machine feedback correctly, Calamares error %1. Rückmeldungen zum Computer konnten nicht korrekt konfiguriert werden, Calamares-Fehler %1. TrackingPage Form Formular Placeholder Platzhalter <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>Ist diese Option aktiviert, werden <span style=" font-weight:600;">keinerlei Informationen</span> über Ihre Installation gesendet.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Klicken sie hier für weitere Informationen über Benutzer-Rückmeldungen</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. Rückinformationen über die Installation helfen %1 festzustellen, wieviele Menschen es benutzen und auf welcher Hardware sie %1 installieren. Mit den beiden letzten Optionen gestatten Sie die Erhebung kontinuierlicher Informationen über Ihre bevorzugte Software. Um zu prüfen, welche Informationen gesendet werden, klicken Sie bitte auf das Hilfesymbol neben dem jeweiligen Abschnitt. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. Wenn Sie diese Option auswählen, senden Sie Informationen zu Ihrer Installation und Hardware. Diese Informationen werden <b>nur einmalig</b> nach Abschluss der Installation gesendet. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. Wenn Sie diese Option auswählen, senden Sie <b>regelmäßig</b> Informationen zu Installation, Hardware und Anwendungen an %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. Wenn Sie diese Option auswählen, senden Sie <b>regelmäßig</b> Informationen zu Installation, Hardware, Anwendungen und Nutzungsmuster an %1. TrackingViewStep Feedback Rückmeldung UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Falls dieser Computer von mehr als einer Person benutzt werden soll, können weitere Benutzerkonten nach der Installation eingerichtet werden.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Falls dieser Computer von mehr als einer Person benutzt werden soll, können weitere Benutzerkonten nach der Installation eingerichtet werden.</small> Your username is too long. Ihr Nutzername ist zu lang. Your username must start with a lowercase letter or underscore. Ihr Benutzername muss mit einem Kleinbuchstaben oder Unterstrich beginnen. Only lowercase letters, numbers, underscore and hyphen are allowed. Es sind nur Kleinbuchstaben, Zahlen, Unterstrich und Bindestrich erlaubt. Only letters, numbers, underscore and hyphen are allowed. Es sind nur Buchstaben, Zahlen, Unter- und Bindestriche erlaubt. Your hostname is too short. Ihr Computername ist zu kurz. Your hostname is too long. Ihr Computername ist zu lang. Your passwords do not match! Ihre Passwörter stimmen nicht überein! UsersViewStep Users Benutzer VariantModel Key Schlüssel Value Wert VolumeGroupBaseDialog Create Volume Group Erstelle Volumengruppe List of Physical Volumes Liste der physikalischen Volumen Volume Group Name: Name der Volumengruppe: Volume Group Type: Typ der Volumengruppe: Physical Extent Size: Blockgröße der physikalischen Volumen: MiB MiB Total Size: Gesamtkapazität: Used Size: Benutzte Kapazität: Total Sectors: Sektoren insgesamt: Quantity of LVs: Menge der LVs: WelcomePage Form Form Select application and system language Anwendungs- und Systemsprache auswählen Open donations website Öffne Spenden-Website &Donate Spen&den Open help and support website Webseite für Hilfe und Support aufrufen Open issues and bug-tracking website Webseite für das Melden von Fehlern aufrufen Open release notes website Webseite für Versionshinweise aufrufen &Release notes &Veröffentlichungshinweise &Known issues &Bekannte Probleme &Support &Unterstützung &About &Über <h1>Welcome to the %1 installer.</h1> <h1>Willkommen im %1 Installationsprogramm.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Willkommen beim Calamares-Installationsprogramm für %1. <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Willkommen bei Calamares, dem Installationsprogramm für %1.</h1> <h1>Welcome to %1 setup.</h1> <h1>Willkommen zur Installation von %1.</h1> About %1 setup Über das Installationsprogramm %1 About %1 installer Über das %1 Installationsprogramm <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. <h1>%1</h1><br/><strong>%2<br/>für %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Dank an <a href="https://calamares.io/team/">das Calamares-Team</a> und das <a href="https://www.transifex.com/calamares/calamares/">Calamares-Übersetzerteam</a>.<br/><br/>Die <a href="https://calamares.io/">Calamares</a>-Entwicklung wird unterstützt von<br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support Unterstützung für %1 WelcomeQmlViewStep Welcome Willkommen WelcomeViewStep Welcome Willkommen notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>Dies sind beispielhafte Veröffentlichungshinweise.</p> welcomeq <h3>%1 <quote>%2</quote></h3> <h3>%1 <quote>%2</quote></h3> About Über Support Unterstützung Known issues Bekannte Probleme Release notes Veröffentlichungshinweise Donate Spenden calamares-3.2.20/lang/calamares_el.ts000066400000000000000000005245031362604102500174370ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. Το <strong> πεÏιβάλλον εκκίνησης <strong> Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… συστήματος.<br><br>ΠαλαιότεÏα συστήματα x86 υποστηÏίζουν μόνο <strong>BIOS</strong>.<br> Τα σÏγχÏονα συστήματα συνήθως χÏησιμοποιοÏν <strong>EFI</strong>, αλλά ίσως επίσης να φαίνονται ως BIOS εάν εκκινήθηκαν σε λειτουÏγία συμβατότητας. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. Αυτό το σÏστημα εκκινήθηκε με ένα <strong>EFI</strong> πεÏιβάλλον εκκίνησης.<br><br>Για να Ïυθμιστεί η εκκίνηση από ένα πεÏιβάλλον EFI, αυτός ο εγκαταστάτης Ï€Ïέπει να αναπτυχθεί ένα Ï€ÏόγÏαμμα φοÏτωτή εκκίνησης, όπως <strong>GRUB</strong> ή <strong>systemd-boot</strong> σε ένα <strong>EFI ΣÏστημα ΔιαμεÏισμοÏ</strong>. Αυτό είναι αυτόματο, εκτός εάν επιλέξεις χειÏοκίνητο διαμεÏισμό, στην οποία πεÏίπτωση οφείλεις να το επιλέξεις ή να το δημιουÏγήσεις από μόνος σου. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. BootLoaderModel Master Boot Record of %1 Master Boot Record του %1 Boot Partition Κατάτμηση εκκίνησης System Partition Κατάτμηση συστήματος Do not install a boot loader Îα μην εγκατασταθεί το Ï€ÏόγÏαμμα εκκίνησης %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page Κενή Σελίδα Calamares::DebugWindow Form ΤÏπος GlobalStorage GlobalStorage JobQueue JobQueue Modules ΑÏθÏώματα Type: ΤÏπος: none κανένα Interface: Διεπαφή: Tools ΕÏγαλεία Reload Stylesheet Widget Tree Debug information ΠληÏοφοÏίες αποσφαλμάτωσης Calamares::ExecutionViewStep Set up Install Εγκατάσταση Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done ΟλοκληÏώθηκε Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Εκτελείται η εντολή %1 %2 Calamares::PythonJob Running %1 operation. Εκτελείται η λειτουÏγία %1. Bad working directory path Λανθασμένη διαδÏομή καταλόγου εÏγασίας Working directory %1 for python job %2 is not readable. Ο ενεÏγός κατάλογος %1 για την εÏγασία python %2 δεν είναι δυνατόν να διαβαστεί. Bad main script file Λανθασμένο κÏÏιο αÏχείο δέσμης ενεÏγειών Main script file %1 for python job %2 is not readable. Η κÏÏια δέσμη ενεÏγειών %1 για την εÏγασία python %2 δεν είναι δυνατόν να διαβαστεί. Boost.Python error in job "%1". Σφάλμα Boost.Python στην εÏγασία "%1". Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager &Back &ΠÏοηγοÏμενο &Next &Επόμενο &Cancel &ΑκÏÏωση Cancel setup without changing the system. Cancel installation without changing the system. ΑκÏÏωση της εγκατάστασης χωÏίς αλλαγές στο σÏστημα. Setup Failed Would you like to paste the install log to the web? Install Log Paste URL The upload was unsuccessful. No web-paste was done. Calamares Initialization Failed Η αÏχικοποίηση του Calamares απέτυχε %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. <br/>The following modules could not be loaded: Continue with installation? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Set up &Install &Εγκατάσταση Setup is complete. Close the setup program. Cancel setup? Cancel installation? ΑκÏÏωση της εγκατάστασης; Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Θέλετε Ï€Ïαγματικά να ακυÏώσετε τη διαδικασία εγκατάστασης; Το Ï€ÏόγÏαμμα εγκατάστασης θα τεÏματιστεί και όλες οι αλλαγές θα χαθοÏν. &Yes &Îαι &No &Όχι &Close &Κλείσιμο Continue with setup? Συνέχεια με την εγκατάσταση; The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> Το Ï€ÏόγÏαμμα εγκατάστασης %1 θα κάνει αλλαγές στον δίσκο για να εγκαταστήσετε το %2.<br/><strong>Δεν θα είστε σε θέση να αναιÏέσετε τις αλλαγές.</strong> &Install now &Εγκατάσταση τώÏα Go &back Μετάβαση &πίσω &Done &ΟλοκληÏώθηκε The installation is complete. Close the installer. Η εγκτάσταση ολοκληÏώθηκε. Κλείστε το Ï€ÏόγÏαμμα εγκατάστασης. Error Σφάλμα Installation Failed Η εγκατάσταση απέτυχε CalamaresPython::Helper Unknown exception type Άγνωστος Ï„Ïπος εξαίÏεσης unparseable Python error Μη αναγνώσιμο σφάλμα Python unparseable Python traceback Μη αναγνώσιμη ανίχνευση Python Unfetchable Python error. Μη ανακτήσιµο σφάλμα Python. CalamaresUtils Install log posted to: %1 CalamaresWindow %1 Setup Program %1 Installer ΕφαÏμογή εγκατάστασης του %1 Show debug information Εμφάνιση πληÏοφοÏιών απασφαλμάτωσης CheckerContainer Gathering system information... Συλλογή πληÏοφοÏιών συστήματος... ChoicePage Form ΤÏπος After: Μετά: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>ΧειÏοκίνητη τμηματοποίηση</strong><br/>ΜποÏείτε να δημιουÏγήσετε κατατμήσεις ή να αλλάξετε το μέγεθός τους μόνοι σας. Boot loader location: Τοποθεσία Ï€ÏογÏάμματος εκκίνησης: Select storage de&vice: Επιλέξτε συσκευή απ&οθήκευσης: Current: ΤÏέχον: Reuse %1 as home partition for %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Επιλέξτε ένα διαμέÏισμα για σμίκÏυνση, και μετά σÏÏετε το κάτω τμήμα της μπάÏας για αλλαγή του μεγέθους</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. <strong>Select a partition to install on</strong> <strong>Επιλέξτε διαμέÏισμα για την εγκατάσταση</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Πουθενά στο σÏστημα δεν μποÏεί να ανιχθευθεί μία κατάτμηση EFI. ΠαÏακαλώ επιστÏέψτε πίσω και χÏησιμοποιήστε τη χειÏοκίνητη τμηματοποίηση για την εγκατάσταση του %1. The EFI system partition at %1 will be used for starting %2. Η κατάτμηση συστήματος EFI στο %1 θα χÏησιμοποιηθεί για την εκκίνηση του %2. EFI system partition: Κατάτμηση συστήματος EFI: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Η συσκευή αποθήκευσης δεν φαίνεται να διαθέτει κάποιο λειτουÏγικό σÏστημα. Τί θα ήθελες να κάνεις;<br/>Θα έχεις την δυνατότητα να επιβεβαιώσεις και αναθεωÏήσεις τις αλλαγές Ï€Ïιν γίνει οποιαδήποτε αλλαγή στην συσκευή αποθήκευσης. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>ΔιαγÏαφή του δίσκου</strong><br/>Αυτό θα <font color="red">διαγÏάψει</font> όλα τα αÏχεία στην επιλεγμένη συσκευή αποθήκευσης. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. No Swap Reuse Swap Swap (no Hibernate) Swap (with Hibernate) Swap to file <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Εγκατάσταση σε επαλληλία</strong><br/>Η εγκατάσταση θα συÏÏικνώσει μία κατάτμηση για να κάνει χώÏο για το %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Αντικατάσταση μίας κατάτμησης</strong><br/>Αντικαθιστά μία κατάτμηση με το %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. ClearMountsJob Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 ΚαθαÏίστηκαν όλες οι Ï€ÏοσαÏτήσεις για %1 ClearTempMountsJob Clear all temporary mounts. ΚαθάÏισε όλες τις Ï€ÏοσωÏινές Ï€ÏοσαÏτήσεις. Clearing all temporary mounts. ΚαθάÏισμα όλων των Ï€ÏοσωÏινών Ï€ÏοσαÏτήσεων. Cannot get list of temporary mounts. Η λίστα των Ï€ÏοσωÏινών Ï€ÏοσαÏτήσεων δεν μποÏεί να ληφθεί. Cleared all temporary mounts. ΚαθαÏίστηκαν όλες οι Ï€ÏοσωÏινές Ï€ÏοσαÏτήσεις. CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition ΔημιουÏγία κατάτμησης MiB MiB Partition &Type: ΤÏ&πος κατάτμησης: &Primary Π&ÏωτεÏουσα E&xtended Ε&κτεταμένη Fi&le System: ΣÏστημα ΑÏχ&είων: LVM LV name Flags: Σημαίες: &Mount Point: Σ&ημείο Ï€ÏοσάÏτησης: Si&ze: &Μέγεθος: En&crypt Logical Λογική Primary ΠÏωτεÏουσα GPT GPT Mountpoint already in use. Please select another one. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. ΔημιουÏγείται νέα %1 κατάτμηση στο %2. The installer failed to create partition on disk '%1'. Η εγκατάσταση απέτυχε να δημιουÏγήσει μία κατάτμηση στον δίσκο '%1'. CreatePartitionTableDialog Create Partition Table ΔημιοÏÏγησε πίνακα κατατμήσεων Creating a new partition table will delete all existing data on the disk. Με τη δημιουÏγία ενός νέου πίνακα κατατμήσεων θα διαγÏαφοÏν όλα τα δεδομένα στον δίσκο. What kind of partition table do you want to create? Τι είδους πίνακα κατατμήσεων θέλετε να δημιουÏγήσετε; Master Boot Record (MBR) Master Boot Record (MBR) GUID Partition Table (GPT) GUID Partition Table (GPT) CreatePartitionTableJob Create new %1 partition table on %2. ΔημιουÏγία νέου πίνακα κατατμήσεων %1 στο %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). ΔημιουÏγία νέου πίνακα κατατμήσεων <strong>%1</strong> στο <strong>%2</strong> (%3). Creating new %1 partition table on %2. ΔημιουÏγείται νέα %1 κατάτμηση στο %2. The installer failed to create a partition table on %1. Η εγκατάσταση απέτυχε να δημιουÏγήσει ένα πίνακα κατατμήσεων στο %1. CreateUserJob Create user %1 ΔημιουÏγία χÏήστη %1 Create user <strong>%1</strong>. ΔημιουÏγία χÏήστη <strong>%1</strong>. Creating user %1. ΔημιουÏγείται ο χÏήστης %1. Sudoers dir is not writable. Ο κατάλογος sudoers δεν είναι εγγÏάψιμος. Cannot create sudoers file for writing. Δεν είναι δυνατή η δημιουÏγία του αÏχείου sudoers για εγγÏαφή. Cannot chmod sudoers file. Δεν είναι δυνατό το chmod στο αÏχείο sudoers. Cannot open groups file for reading. Δεν είναι δυνατό το άνοιγμα του αÏχείου ομάδων για ανάγνωση. CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. ΔιαγÏαφή της κατάτμησης %1. Delete partition <strong>%1</strong>. ΔιαγÏαφή της κατάτμησης <strong>%1</strong>. Deleting partition %1. ΔιαγÏάφεται η κατάτμηση %1. The installer failed to delete partition %1. Απέτυχε η διαγÏαφή της κατάτμησης %1. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. This device has a <strong>%1</strong> partition table. Αυτή η συσκευή έχει ένα <strong>%1</strong> πίνακα διαμεÏισμάτων. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Αυτός είναι ο Ï€Ïοτεινόμενος Ï„Ïπος πίνακα διαμεÏισμάτων για σÏγχÏονα συστήματα τα οποία εκκινοÏν από ένα <strong>EFI</strong> πεÏιβάλλον εκκίνησης. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Failed to open %1 DummyCppJob Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition ΕπεξεÏγασία υπάÏχουσας κατάτμησης Content: ΠεÏιεχόμενο: &Keep &ΔιατήÏηση Format ΜοÏφοποίηση Warning: Formatting the partition will erase all existing data. ΠÏοειδοποίηση: Η μοÏφοποίηση της κατάτμησης θα διαγÏάψει όλα τα δεδομένα. &Mount Point: Σ&ημείο Ï€ÏοσάÏτησης: Si&ze: &Μέγεθος: MiB MiB Fi&le System: &ΣÏστημα αÏχείων: Flags: Σημαίες: Mountpoint already in use. Please select another one. EncryptWidget Form ΤÏπος En&crypt system Passphrase Λέξη Κλειδί Confirm passphrase Επιβεβαίωση λέξης κλειδί Please enter the same passphrase in both boxes. ΠαÏακαλώ εισάγετε την ίδια λέξη κλειδί και στα δÏο κουτιά. FillGlobalStorageJob Set partition information ΟÏισμός πληÏοφοÏιών κατάτμησης Install %1 on <strong>new</strong> %2 system partition. Εγκατάσταση %1 στο <strong>νέο</strong> %2 διαμέÏισμα συστήματος. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Install boot loader on <strong>%1</strong>. Εγκατάσταση φοÏτωτή εκκίνησης στο <strong>%1</strong>. Setting up mount points. FinishedPage Form ΤÏπος <Restart checkbox tooltip> &Restart now Ε&πανεκκίνηση τώÏα <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>Η εγκατάσταση ολοκληÏώθηκε.</h1><br/>Το %1 εγκαταστήθηκε στον υπολογιστή.<br/>ΤώÏα, μποÏείτε να επανεκκινήσετε τον υπολογιστή σας ή να συνεχίσετε να δοκιμάζετε το %2. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. FinishedViewStep Finish Τέλος Setup Complete Installation Complete The setup of %1 is complete. The installation of %1 is complete. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatting partition %1 with file system %2. The installer failed to format partition %1 on disk '%2'. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source είναι συνδεδεμένος σε πηγή ÏεÏματος The system is not plugged in to a power source. Το σÏστημα δεν είναι συνδεδεμένο σε πηγή ÏεÏματος. is connected to the Internet είναι συνδεδεμένος στο διαδίκτυο The system is not connected to the Internet. Το σÏστημα δεν είναι συνδεδεμένο στο διαδίκτυο. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. Το Ï€ÏόγÏαμμα εγκατάστασης δεν εκτελείται με δικαιώματα διαχειÏιστή. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. Η οθόνη είναι Ï€Î¿Î»Ï Î¼Î¹ÎºÏή για να απεικονίσει το Ï€ÏόγÏαμμα εγκατάστασης HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Το Konsole δεν είναι εγκατεστημένο Please install KDE Konsole and try again! Executing script: &nbsp;<code>%1</code> Εκτελείται το σενάÏιο: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script ΣενάÏιο KeyboardPage Set keyboard model to %1.<br/> ΟÏισμός του μοντέλου πληκτÏολογίου σε %1.<br/> Set keyboard layout to %1/%2. ΟÏισμός της διάταξης πληκτÏολογίου σε %1/%2. KeyboardViewStep Keyboard ΠληκτÏολόγιο LCLocaleDialog System locale setting Τοπική ÏÏθμιση συστήματος The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. Η τοπική ÏÏθμιση του συστήματος επηÏεάζει τη γλώσσα και το σÏνολο χαÏακτήÏων για οÏισμένα στοιχεία διεπαφής χÏήστη της γÏαμμής εντολών.<br/>Η Ï„Ïέχουσα ÏÏθμιση είναι <strong>%1</strong>. &Cancel &ΑκÏÏωση &OK LicensePage Form ΤÏπος <h1>License Agreement</h1> I accept the terms and conditions above. Δέχομαι τους παÏαπάνω ÏŒÏους και Ï€Ïοϋποθέσεις. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License Άδεια LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>οδηγός %1</strong><br/>από %2 <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 οδηγός κάÏτας γÏαφικών</strong><br/><font color="Grey">από %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 Ï€Ïόσθετο πεÏιηγητή</strong><br/><font color="Grey">από %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>κωδικοποιητής %1</strong><br/><font color="Grey">από %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>πακέτο %1</strong><br/><font color="Grey">από %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">από %2</font> File: %1 Show the license text Open license agreement in browser. Hide license text LocalePage The system language will be set to %1. Η τοπική γλώσσα του συστήματος έχει οÏιστεί σε %1. The numbers and dates locale will be set to %1. Region: ΠεÏιοχή: Zone: Ζώνη: &Change... &Αλλαγή... Set timezone to %1/%2.<br/> ΟÏισμός της ζώνης ÏŽÏας σε %1/%2.<br/> LocaleViewStep Location Τοποθεσία LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Configuration Error No root mount point is set for MachineId. NetInstallPage Name Όνομα Description ΠεÏιγÏαφή Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Incorrect configuration) NetInstallViewStep Package selection Επιλογή πακέτου Office software Office package Browser software Browser package Web browser Kernel Services Login Desktop Applications NotesQmlViewStep Notes OEMPage Ba&tch: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> OEMViewStep OEM Configuration Set the OEM Batch Identifier to <code>%1</code>. PWQ Password is too short Password is too long Password is too weak Memory allocation error when setting '%1' Memory allocation error The password is the same as the old one The password is a palindrome The password differs with case changes only The password is too similar to the old one The password contains the user name in some form The password contains words from the real name of the user in some form The password contains forbidden words in some form The password contains less than %1 digits The password contains too few digits The password contains less than %1 uppercase letters The password contains too few uppercase letters The password contains less than %1 lowercase letters The password contains too few lowercase letters The password contains less than %1 non-alphanumeric characters The password contains too few non-alphanumeric characters The password is shorter than %1 characters The password is too short The password is just rotated old one The password contains less than %1 character classes The password does not contain enough character classes The password contains more than %1 same characters consecutively The password contains too many same characters consecutively The password contains more than %1 characters of the same class consecutively The password contains too many characters of the same class consecutively The password contains monotonic sequence longer than %1 characters The password contains too long of a monotonic character sequence No password supplied Cannot obtain random numbers from the RNG device Password generation failed - required entropy too low for settings The password fails the dictionary check - %1 The password fails the dictionary check Unknown setting - %1 Unknown setting Bad integer value of setting - %1 Bad integer value Setting %1 is not of integer type Setting is not of integer type Setting %1 is not of string type Setting is not of string type Opening the configuration file failed The configuration file is malformed Fatal failure Unknown error Password is empty PackageChooserPage Form ΤÏπος Product Name TextLabel Long Product Description Package Selection Please pick a product from the list. The selected product will be installed. PackageChooserViewStep Packages Page_Keyboard Form ΤÏπος Keyboard Model: Μοντέλο πληκτÏολογίου: Type here to test your keyboard ΠληκτÏολογείστε εδώ για να δοκιμάσετε το πληκτÏολόγιο σας Page_UserSetup Form ΤÏπος What is your name? Ποιο είναι το όνομά σας; What name do you want to use to log in? Ποιο όνομα θα θέλατε να χÏησιμοποιείτε για σÏνδεση; Choose a password to keep your account safe. Επιλέξτε ένα κωδικό για να διατηÏήσετε το λογαÏιασμό σας ασφαλή. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>Εισάγετε τον ίδιο κωδικό δÏο φοÏές, ώστε να γίνει έλεγχος για τυπογÏαφικά σφάλματα. Ένας καλός κωδικός πεÏιέχει γÏάμματα, αÏιθμοÏÏ‚ και σημεία στίξης, έχει μήκος τουλάχιστον οκτώ χαÏακτήÏες, και θα Ï€Ïέπει να τον αλλάζετε σε τακτά χÏονικά διαστήματα.</small> What is the name of this computer? Ποιο είναι το όνομά του υπολογιστή; Your Full Name login <small>This name will be used if you make the computer visible to others on a network.</small> <small>Αυτό το όνομα θα χÏησιμοποιηθεί αν κάνετε τον υπολογιστή οÏατό στους άλλους σε ένα δίκτυο.</small> Computer Name Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. ΣÏνδεση αυτόματα χωÏίς να ζητείται κωδικός Ï€Ïόσβασης. Use the same password for the administrator account. ΧÏησιμοποιήστε τον ίδιο κωδικό Ï€Ïόσβασης για τον λογαÏιασμό διαχειÏιστή. Choose a password for the administrator account. Επιλέξτε ένα κωδικό για τον λογαÏιασμό διαχειÏιστή. <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Εισάγετε τον ίδιο κωδικό δÏο φοÏές, ώστε να γίνει έλεγχος για τυπογÏαφικά σφάλματα.</small> PartitionLabelsView Root Ριζική Home Home Boot Εκκίνηση EFI system ΣÏστημα EFI Swap Swap New partition for %1 Îέα κατάτμηση για το %1 New partition Îέα κατάτμηση %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space ΕλεÏθεÏος χώÏος New partition Îέα κατάτμηση Name Όνομα File System ΣÏστημα αÏχείων Mount Point Σημείο Ï€ÏοσάÏτησης Size Μέγεθος PartitionPage Form ΤÏπος Storage de&vice: Συσκευή απ&οθήκευσης: &Revert All Changes Επ&αναφοÏά όλων των αλλαγών New Partition &Table Îέος πίνακας κα&τατμήσεων Cre&ate &Edit &ΕπεξεÏγασία &Delete &ΔιαγÏαφή New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group I&nstall boot loader on: Are you sure you want to create a new partition table on %1? Θέλετε σίγουÏα να δημιουÏγήσετε έναν νέο πίνακα κατατμήσεων στο %1; Can not create new partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. PartitionViewStep Gathering system information... Συλλογή πληÏοφοÏιών συστήματος... Partitions Κατατμήσεις Install %1 <strong>alongside</strong> another operating system. Εγκατάσταση του %1 <strong>παÏάλληλα με</strong> ένα άλλο λειτουÏγικό σÏστημα στον δίσκο. <strong>Erase</strong> disk and install %1. <strong>ΔιαγÏαφή</strong> του δίσκου και εγκατάσταση του %1. <strong>Replace</strong> a partition with %1. <strong>Αντικατάσταση</strong> μιας κατάτμησης με το %1. <strong>Manual</strong> partitioning. <strong>ΧειÏοκίνητη</strong> τμηματοποίηση. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Εγκατάσταση του %1 <strong>παÏάλληλα με</strong> ένα άλλο λειτουÏγικό σÏστημα στον δίσκο<strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>ΔιαγÏαφή</strong> του δίσκου <strong>%2</strong> (%3) και εγκατάσταση του %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Αντικατάσταση</strong> μιας κατάτμησης στον δίσκο <strong>%2</strong> (%3) με το %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>ΧειÏοκίνητη</strong> τμηματοποίηση του δίσκου <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Δίσκος <strong>%1</strong> (%2) Current: ΤÏέχον: After: Μετά: No EFI system partition configured An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. EFI system partition flag not set An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form ΤÏπος Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: External command crashed. Command <i>%1</i> crashed. External command failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Bad parameters for process job call. Λανθασμένοι παÏάμετÏοι για την κλήση διεÏγασίας. External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Command <i>%1</i> finished with exit code %2. QObject Default Keyboard Model ΠÏοκαθοÏισμένο μοντέλο πληκτÏολογίου Default ΠÏοκαθοÏισμένο unknown άγνωστη extended εκτεταμένη unformatted μη μοÏφοποιημένη swap Unpartitioned space or unknown partition table Μη κατανεμημένος χώÏος ή άγνωστος πίνακας κατατμήσεων (no mount point) Requirements checking for module <i>%1</i> is complete. %1 (%2) language[name] (country[name]) %1 (%2) No product No description provided. File not found Path <pre>%1</pre> must be an absolute path. Could not create new random file <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form ΤÏπος Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. The selected item does not appear to be a valid partition. Το επιλεγμένο στοιχείο φαίνεται να μην είναι ένα έγκυÏο διαμέÏισμα. %1 cannot be installed on empty space. Please select an existing partition. %1 δεν μποÏεί να εγκατασταθεί σε άδειο χώÏο. ΠαÏακαλώ επίλεξε ένα υφιστάμενο διαμέÏισμα. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 δεν μποÏεί να εγκατασταθεί σε ένα εκτεταμένο διαμέÏισμα. ΠαÏακαλώ επίλεξε ένα υφιστάμενο Ï€ÏωτεÏον ή λογικό διαμέÏισμα. %1 cannot be installed on this partition. %1 δεν μποÏεί να εγκατασταθεί σ' αυτό το διαμέÏισμα. Data partition (%1) Κατάτμηση δεδομένων (%1) Unknown system partition (%1) Άγνωστη κατάτμηση συστήματος (%1) %1 system partition (%2) %1 κατάτμηση συστήματος (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/>Πουθενά στο σÏστημα δεν μποÏεί να ανιχθευθεί μία κατάτμηση EFI. ΠαÏακαλώ επιστÏέψτε πίσω και χÏησιμοποιήστε τη χειÏοκίνητη τμηματοποίηση για την εγκατάσταση του %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. The EFI system partition at %1 will be used for starting %2. Η κατάτμηση συστήματος EFI στο %1 θα χÏησιμοποιηθεί για την εκκίνηση του %2. EFI system partition: Κατάτμηση συστήματος EFI: ResizeFSJob Resize Filesystem Job Invalid configuration The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. Αλλαγή μεγέθους κατάτμησης %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. Η εγκατάσταση απέτυχε να αλλάξει το μέγεθος της κατάτμησης %1 στον δίσκο '%2'. ResizeVolumeGroupDialog Resize Volume Group ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: Για καλÏτεÏο αποτέλεσμα, παÏακαλώ βεβαιωθείτε ότι ο υπολογιστής: System requirements Απαιτήσεις συστήματος ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> Ο υπολογιστής δεν ικανοποιεί τις ελάχιστες απαιτήσεις για την εγκατάσταση του %1.<br/>Η εγκατάσταση δεν μποÏεί να συνεχιστεί. <a href="#details">ΛεπτομέÏιες...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. Αυτός ο υπολογιστής δεν ικανοποιεί μεÏικές από τις συνιστώμενες απαιτήσεις για την εγκατάσταση του %1.<br/>Η εγκατάσταση μποÏεί να συνεχιστεί, αλλά οÏισμένες λειτουÏγίες μποÏεί να απενεÏγοποιηθοÏν. This program will ask you some questions and set up %2 on your computer. Το Ï€ÏόγÏαμμα θα σας κάνει μεÏικές εÏωτήσεις και θα Ïυθμίσει το %2 στον υπολογιστή σας. ScanningDialog Scanning storage devices... ΣάÏωση των συσκευών αποθήκευσης... Partitioning Τμηματοποίηση SetHostNameJob Set hostname %1 ΟÏισμός ονόματος υπολογιστή %1 Set hostname <strong>%1</strong>. ΟÏισμός ονόματος υπολογιστή <strong>%1</strong>. Setting hostname %1. ΟÏίζεται το όνομα υπολογιστή %1. Internal Error ΕσωτεÏικό σφάλμα Cannot write hostname to target system Δεν είναι δυνατή η εγγÏαφή του ονόματος υπολογιστή στο σÏστημα SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Failed to write keyboard configuration for the virtual console. Failed to write to %1 Αδυναμία εγγÏαφής στο %1 Failed to write keyboard configuration for X11. Αδυναμία εγγÏαφής στοιχείων διαμόÏφωσης πληκτÏολογίου για Χ11 Failed to write keyboard configuration to existing /etc/default directory. Αδυναμία εγγÏαφής στοιχείων διαμόÏφωσης πληκτÏολογίου στον υπάÏχων κατάλογο /etc/default SetPartFlagsJob Set flags on partition %1. Set flags on %1MiB %2 partition. Set flags on new partition. Clear flags on partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag new partition as <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. Ο εγκαταστάτης απέτυχε να θέσει τις σημαίες στο διαμέÏισμα %1. SetPasswordJob Set password for user %1 ΟÏισμός ÎºÏ‰Î´Î¹ÎºÎ¿Ï Î³Î¹Î± τον χÏήστη %1 Setting password for user %1. ΟÏίζεται κωδικός για τον χÏήστη %1. Bad destination system path. rootMountPoint is %1 Cannot disable root account. passwd terminated with error code %1. Cannot set password for user %1. usermod terminated with error code %1. SetTimezoneJob Set timezone to %1/%2 Cannot access selected timezone path. Bad path: %1 Cannot set timezone. Αδυναμία οÏÎ¹ÏƒÎ¼Î¿Ï Î¶ÏŽÎ½Î·Ï‚ ÏŽÏας. Link creation failed, target: %1; link name: %2 Cannot set timezone, Αδυναμία οÏÎ¹ÏƒÎ¼Î¿Ï Î¶ÏŽÎ½Î·Ï‚ ÏŽÏας, Cannot open /etc/timezone for writing Αδυναμία ανοίγματος /etc/timezone για εγγÏαφή ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) SummaryPage This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. Αυτή είναι μια επισκόπηση του τι θα συμβεί μόλις ξεκινήσετε τη διαδικασία εγκατάστασης. SummaryViewStep Summary ΣÏνοψη TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingMachineNeonJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form ΤÏπος Placeholder <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. TrackingViewStep Feedback UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> Your username is too long. Το όνομα χÏήστη είναι Ï€Î¿Î»Ï Î¼Î±ÎºÏÏ. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Only letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Το όνομα υπολογιστή είναι Ï€Î¿Î»Ï ÏƒÏντομο. Your hostname is too long. Το όνομα υπολογιστή είναι Ï€Î¿Î»Ï Î¼Î±ÎºÏÏ. Your passwords do not match! Οι κωδικοί Ï€Ïόσβασης δεν ταιÏιάζουν! UsersViewStep Users ΧÏήστες VariantModel Key Value VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB MiB Total Size: Used Size: Total Sectors: Quantity of LVs: WelcomePage Form ΤÏπος Select application and system language Open donations website &Donate Open help and support website Open issues and bug-tracking website Open release notes website &Release notes Ση&μειώσεις έκδοσης &Known issues &Γνωστά Ï€Ïοβλήματα &Support &ΥποστήÏιξη &About Σ&χετικά με <h1>Welcome to the %1 installer.</h1> <h1>Καλώς ήλθατε στην εγκατάσταση του %1.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Welcome to %1 setup.</h1> About %1 setup About %1 installer Σχετικά με το Ï€ÏόγÏαμμα εγκατάστασης %1 <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support ΥποστήÏιξη %1 WelcomeQmlViewStep Welcome Καλώς ήλθατε WelcomeViewStep Welcome Καλώς ήλθατε notesqml <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> About Support Known issues Release notes Donate calamares-3.2.20/lang/calamares_en.ts000066400000000000000000005456621362604102500174520ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. BootLoaderModel Master Boot Record of %1 Master Boot Record of %1 Boot Partition Boot Partition System Partition System Partition Do not install a boot loader Do not install a boot loader %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page Blank Page Calamares::DebugWindow Form Form GlobalStorage GlobalStorage JobQueue JobQueue Modules Modules Type: Type: none none Interface: Interface: Tools Tools Reload Stylesheet Reload Stylesheet Widget Tree Widget Tree Debug information Debug information Calamares::ExecutionViewStep Set up Set up Install Install Calamares::FailJob Job failed (%1) Job failed (%1) Programmed job failure was explicitly requested. Programmed job failure was explicitly requested. Calamares::JobThread Done Done Calamares::NamedJob Example job (%1) Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1' in target system. Run command '%1'. Run command '%1'. Running command %1 %2 Running command %1 %2 Calamares::PythonJob Running %1 operation. Running %1 operation. Bad working directory path Bad working directory path Working directory %1 for python job %2 is not readable. Working directory %1 for python job %2 is not readable. Bad main script file Bad main script file Main script file %1 for python job %2 is not readable. Main script file %1 for python job %2 is not readable. Boost.Python error in job "%1". Boost.Python error in job "%1". Calamares::QmlViewStep Loading ... Loading ... QML Step <i>%1</i>. QML Step <i>%1</i>. Loading failed. Loading failed. Calamares::RequirementsChecker Waiting for %n module(s). Waiting for %n module(s). Waiting for %n module(s). (%n second(s)) (%n second(s)) (%n second(s)) System-requirements checking is complete. System-requirements checking is complete. Calamares::ViewManager &Back &Back &Next &Next &Cancel &Cancel Cancel setup without changing the system. Cancel setup without changing the system. Cancel installation without changing the system. Cancel installation without changing the system. Setup Failed Setup Failed Would you like to paste the install log to the web? Would you like to paste the install log to the web? Install Log Paste URL Install Log Paste URL The upload was unsuccessful. No web-paste was done. The upload was unsuccessful. No web-paste was done. Calamares Initialization Failed Calamares Initialization Failed %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. <br/>The following modules could not be loaded: <br/>The following modules could not be loaded: Continue with installation? Continue with installation? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Set up now &Set up &Set up &Install &Install Setup is complete. Close the setup program. Setup is complete. Close the setup program. Cancel setup? Cancel setup? Cancel installation? Cancel installation? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. &Yes &Yes &No &No &Close &Close Continue with setup? Continue with setup? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> &Install now &Install now Go &back Go &back &Done &Done The installation is complete. Close the installer. The installation is complete. Close the installer. Error Error Installation Failed Installation Failed CalamaresPython::Helper Unknown exception type Unknown exception type unparseable Python error unparseable Python error unparseable Python traceback unparseable Python traceback Unfetchable Python error. Unfetchable Python error. CalamaresUtils Install log posted to: %1 Install log posted to: %1 CalamaresWindow %1 Setup Program %1 Setup Program %1 Installer %1 Installer Show debug information Show debug information CheckerContainer Gathering system information... Gathering system information... ChoicePage Form Form After: After: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Boot loader location: Boot loader location: Select storage de&vice: Select storage de&vice: Current: Current: Reuse %1 as home partition for %2. Reuse %1 as home partition for %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. <strong>Select a partition to install on</strong> <strong>Select a partition to install on</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. The EFI system partition at %1 will be used for starting %2. The EFI system partition at %1 will be used for starting %2. EFI system partition: EFI system partition: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. No Swap No Swap Reuse Swap Reuse Swap Swap (no Hibernate) Swap (no Hibernate) Swap (with Hibernate) Swap (with Hibernate) Swap to file Swap to file <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. ClearMountsJob Clear mounts for partitioning operations on %1 Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 Cleared all mounts for %1 ClearTempMountsJob Clear all temporary mounts. Clear all temporary mounts. Clearing all temporary mounts. Clearing all temporary mounts. Cannot get list of temporary mounts. Cannot get list of temporary mounts. Cleared all temporary mounts. Cleared all temporary mounts. CommandList Could not run command. Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. The command needs to know the user's name, but no username is defined. ContextualProcessJob Contextual Processes Job Contextual Processes Job CreatePartitionDialog Create a Partition Create a Partition MiB MiB Partition &Type: Partition &Type: &Primary &Primary E&xtended E&xtended Fi&le System: Fi&le System: LVM LV name LVM LV name Flags: Flags: &Mount Point: &Mount Point: Si&ze: Si&ze: En&crypt En&crypt Logical Logical Primary Primary GPT GPT Mountpoint already in use. Please select another one. Mountpoint already in use. Please select another one. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. Creating new %1 partition on %2. The installer failed to create partition on disk '%1'. The installer failed to create partition on disk '%1'. CreatePartitionTableDialog Create Partition Table Create Partition Table Creating a new partition table will delete all existing data on the disk. Creating a new partition table will delete all existing data on the disk. What kind of partition table do you want to create? What kind of partition table do you want to create? Master Boot Record (MBR) Master Boot Record (MBR) GUID Partition Table (GPT) GUID Partition Table (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Create new %1 partition table on %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Creating new %1 partition table on %2. Creating new %1 partition table on %2. The installer failed to create a partition table on %1. The installer failed to create a partition table on %1. CreateUserJob Create user %1 Create user %1 Create user <strong>%1</strong>. Create user <strong>%1</strong>. Creating user %1. Creating user %1. Sudoers dir is not writable. Sudoers dir is not writable. Cannot create sudoers file for writing. Cannot create sudoers file for writing. Cannot chmod sudoers file. Cannot chmod sudoers file. Cannot open groups file for reading. Cannot open groups file for reading. CreateVolumeGroupDialog Create Volume Group Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Create new volume group named %1. Create new volume group named <strong>%1</strong>. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. Creating new volume group named %1. The installer failed to create a volume group named '%1'. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. Delete partition %1. Delete partition <strong>%1</strong>. Delete partition <strong>%1</strong>. Deleting partition %1. Deleting partition %1. The installer failed to delete partition %1. The installer failed to delete partition %1. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. This device has a <strong>%1</strong> partition table. This device has a <strong>%1</strong> partition table. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1 - (%2) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Write LUKS configuration for Dracut to %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Failed to open %1 Failed to open %1 DummyCppJob Dummy C++ Job Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Edit Existing Partition Content: Content: &Keep &Keep Format Format Warning: Formatting the partition will erase all existing data. Warning: Formatting the partition will erase all existing data. &Mount Point: &Mount Point: Si&ze: Si&ze: MiB MiB Fi&le System: Fi&le System: Flags: Flags: Mountpoint already in use. Please select another one. Mountpoint already in use. Please select another one. EncryptWidget Form Form En&crypt system En&crypt system Passphrase Passphrase Confirm passphrase Confirm passphrase Please enter the same passphrase in both boxes. Please enter the same passphrase in both boxes. FillGlobalStorageJob Set partition information Set partition information Install %1 on <strong>new</strong> %2 system partition. Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Install boot loader on <strong>%1</strong>. Install boot loader on <strong>%1</strong>. Setting up mount points. Setting up mount points. FinishedPage Form Form <Restart checkbox tooltip> <Restart checkbox tooltip> &Restart now &Restart now <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. FinishedViewStep Finish Finish Setup Complete Setup Complete Installation Complete Installation Complete The setup of %1 is complete. The setup of %1 is complete. The installation of %1 is complete. The installation of %1 is complete. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatting partition %1 with file system %2. Formatting partition %1 with file system %2. The installer failed to format partition %1 on disk '%2'. The installer failed to format partition %1 on disk '%2'. GeneralRequirements has at least %1 GiB available drive space has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source is plugged in to a power source The system is not plugged in to a power source. The system is not plugged in to a power source. is connected to the Internet is connected to the Internet The system is not connected to the Internet. The system is not connected to the Internet. is running the installer as an administrator (root) is running the installer as an administrator (root) The setup program is not running with administrator rights. The setup program is not running with administrator rights. The installer is not running with administrator rights. The installer is not running with administrator rights. has a screen large enough to show the whole installer has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the setup program. The screen is too small to display the installer. The screen is too small to display the installer. HostInfoJob Collecting information about your machine. Collecting information about your machine. IDJob OEM Batch Identifier OEM Batch Identifier Could not create directories <code>%1</code>. Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. Creating initramfs. InteractiveTerminalPage Konsole not installed Konsole not installed Please install KDE Konsole and try again! Please install KDE Konsole and try again! Executing script: &nbsp;<code>%1</code> Executing script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script Script KeyboardPage Set keyboard model to %1.<br/> Set keyboard model to %1.<br/> Set keyboard layout to %1/%2. Set keyboard layout to %1/%2. KeyboardViewStep Keyboard Keyboard LCLocaleDialog System locale setting System locale setting The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. &Cancel &Cancel &OK &OK LicensePage Form Form <h1>License Agreement</h1> <h1>License Agreement</h1> I accept the terms and conditions above. I accept the terms and conditions above. Please review the End User License Agreements (EULAs). Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License License LicenseWidget URL: %1 URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 driver</strong><br/>by %2 <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> File: %1 File: %1 Show the license text Show the license text Open license agreement in browser. Open license agreement in browser. Hide license text Hide license text LocalePage The system language will be set to %1. The system language will be set to %1. The numbers and dates locale will be set to %1. The numbers and dates locale will be set to %1. Region: Region: Zone: Zone: &Change... &Change... Set timezone to %1/%2.<br/> Set timezone to %1/%2.<br/> LocaleViewStep Location Location LuksBootKeyFileJob Configuring LUKS key file. Configuring LUKS key file. No partitions are defined. No partitions are defined. Encrypted rootfs setup error Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Generate machine-id. Configuration Error Configuration Error No root mount point is set for MachineId. No root mount point is set for MachineId. NetInstallPage Name Name Description Description Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Incorrect configuration) Network Installation. (Disabled: Incorrect configuration) NetInstallViewStep Package selection Package selection Office software Office software Office package Office package Browser software Browser software Browser package Browser package Web browser Web browser Kernel Kernel Services Services Login Login Desktop Desktop Applications Applications NotesQmlViewStep Notes Notes OEMPage Ba&tch: Ba&tch: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> OEMViewStep OEM Configuration OEM Configuration Set the OEM Batch Identifier to <code>%1</code>. Set the OEM Batch Identifier to <code>%1</code>. PWQ Password is too short Password is too short Password is too long Password is too long Password is too weak Password is too weak Memory allocation error when setting '%1' Memory allocation error when setting '%1' Memory allocation error Memory allocation error The password is the same as the old one The password is the same as the old one The password is a palindrome The password is a palindrome The password differs with case changes only The password differs with case changes only The password is too similar to the old one The password is too similar to the old one The password contains the user name in some form The password contains the user name in some form The password contains words from the real name of the user in some form The password contains words from the real name of the user in some form The password contains forbidden words in some form The password contains forbidden words in some form The password contains less than %1 digits The password contains less than %1 digits The password contains too few digits The password contains too few digits The password contains less than %1 uppercase letters The password contains less than %1 uppercase letters The password contains too few uppercase letters The password contains too few uppercase letters The password contains less than %1 lowercase letters The password contains less than %1 lowercase letters The password contains too few lowercase letters The password contains too few lowercase letters The password contains less than %1 non-alphanumeric characters The password contains less than %1 non-alphanumeric characters The password contains too few non-alphanumeric characters The password contains too few non-alphanumeric characters The password is shorter than %1 characters The password is shorter than %1 characters The password is too short The password is too short The password is just rotated old one The password is just rotated old one The password contains less than %1 character classes The password contains less than %1 character classes The password does not contain enough character classes The password does not contain enough character classes The password contains more than %1 same characters consecutively The password contains more than %1 same characters consecutively The password contains too many same characters consecutively The password contains too many same characters consecutively The password contains more than %1 characters of the same class consecutively The password contains more than %1 characters of the same class consecutively The password contains too many characters of the same class consecutively The password contains too many characters of the same class consecutively The password contains monotonic sequence longer than %1 characters The password contains monotonic sequence longer than %1 characters The password contains too long of a monotonic character sequence The password contains too long of a monotonic character sequence No password supplied No password supplied Cannot obtain random numbers from the RNG device Cannot obtain random numbers from the RNG device Password generation failed - required entropy too low for settings Password generation failed - required entropy too low for settings The password fails the dictionary check - %1 The password fails the dictionary check - %1 The password fails the dictionary check The password fails the dictionary check Unknown setting - %1 Unknown setting - %1 Unknown setting Unknown setting Bad integer value of setting - %1 Bad integer value of setting - %1 Bad integer value Bad integer value Setting %1 is not of integer type Setting %1 is not of integer type Setting is not of integer type Setting is not of integer type Setting %1 is not of string type Setting %1 is not of string type Setting is not of string type Setting is not of string type Opening the configuration file failed Opening the configuration file failed The configuration file is malformed The configuration file is malformed Fatal failure Fatal failure Unknown error Unknown error Password is empty Password is empty PackageChooserPage Form Form Product Name Product Name TextLabel TextLabel Long Product Description Long Product Description Package Selection Package Selection Please pick a product from the list. The selected product will be installed. Please pick a product from the list. The selected product will be installed. PackageChooserViewStep Packages Packages Page_Keyboard Form Form Keyboard Model: Keyboard Model: Type here to test your keyboard Type here to test your keyboard Page_UserSetup Form Form What is your name? What is your name? What name do you want to use to log in? What name do you want to use to log in? Choose a password to keep your account safe. Choose a password to keep your account safe. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> What is the name of this computer? What is the name of this computer? Your Full Name Your Full Name login login <small>This name will be used if you make the computer visible to others on a network.</small> <small>This name will be used if you make the computer visible to others on a network.</small> Computer Name Computer Name Password Password Repeat Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Require strong passwords. Log in automatically without asking for the password. Log in automatically without asking for the password. Use the same password for the administrator account. Use the same password for the administrator account. Choose a password for the administrator account. Choose a password for the administrator account. <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Enter the same password twice, so that it can be checked for typing errors.</small> PartitionLabelsView Root Root Home Home Boot Boot EFI system EFI system Swap Swap New partition for %1 New partition for %1 New partition New partition %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space Free Space New partition New partition Name Name File System File System Mount Point Mount Point Size Size PartitionPage Form Form Storage de&vice: Storage de&vice: &Revert All Changes &Revert All Changes New Partition &Table New Partition &Table Cre&ate Cre&ate &Edit &Edit &Delete &Delete New Volume Group New Volume Group Resize Volume Group Resize Volume Group Deactivate Volume Group Deactivate Volume Group Remove Volume Group Remove Volume Group I&nstall boot loader on: I&nstall boot loader on: Are you sure you want to create a new partition table on %1? Are you sure you want to create a new partition table on %1? Can not create new partition Can not create new partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. PartitionViewStep Gathering system information... Gathering system information... Partitions Partitions Install %1 <strong>alongside</strong> another operating system. Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <strong>Erase</strong> disk and install %1. <strong>Replace</strong> a partition with %1. <strong>Replace</strong> a partition with %1. <strong>Manual</strong> partitioning. <strong>Manual</strong> partitioning. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Disk <strong>%1</strong> (%2) Current: Current: After: After: No EFI system partition configured No EFI system partition configured An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. EFI system partition flag not set EFI system partition flag not set An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Boot partition not encrypted Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. has at least one disk device available. There are no partitions to install on. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form Form Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel Look-and-Feel PreserveFiles Saving files for later ... Saving files for later ... No files configured to save for later. No files configured to save for later. Not all of the configured files could be preserved. Not all of the configured files could be preserved. ProcessResult There was no output from the command. There was no output from the command. Output: Output: External command crashed. External command crashed. Command <i>%1</i> crashed. Command <i>%1</i> crashed. External command failed to start. External command failed to start. Command <i>%1</i> failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Internal error when starting command. Bad parameters for process job call. Bad parameters for process job call. External command failed to finish. External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. External command finished with errors. Command <i>%1</i> finished with exit code %2. Command <i>%1</i> finished with exit code %2. QObject Default Keyboard Model Default Keyboard Model Default Default unknown unknown extended extended unformatted unformatted swap swap Unpartitioned space or unknown partition table Unpartitioned space or unknown partition table (no mount point) (no mount point) Requirements checking for module <i>%1</i> is complete. Requirements checking for module <i>%1</i> is complete. %1 (%2) language[name] (country[name]) %1 (%2) No product No product No description provided. No description provided. File not found File not found Path <pre>%1</pre> must be an absolute path. Path <pre>%1</pre> must be an absolute path. Could not create new random file <pre>%1</pre>. Could not create new random file <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. The installer failed to remove a volume group named '%1'. ReplaceWidget Form Form Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. The selected item does not appear to be a valid partition. The selected item does not appear to be a valid partition. %1 cannot be installed on empty space. Please select an existing partition. %1 cannot be installed on empty space. Please select an existing partition. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 cannot be installed on this partition. %1 cannot be installed on this partition. Data partition (%1) Data partition (%1) Unknown system partition (%1) Unknown system partition (%1) %1 system partition (%2) %1 system partition (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. The EFI system partition at %1 will be used for starting %2. The EFI system partition at %1 will be used for starting %2. EFI system partition: EFI system partition: ResizeFSJob Resize Filesystem Job Resize Filesystem Job Invalid configuration Invalid configuration The file-system resize job has an invalid configuration and will not run. The file-system resize job has an invalid configuration and will not run. KPMCore not Available KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Calamares cannot start KPMCore for the file-system resize job. Resize Failed Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. Resize partition %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. The installer failed to resize partition %1 on disk '%2'. ResizeVolumeGroupDialog Resize Volume Group Resize Volume Group ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: For best results, please ensure that this computer: System requirements System requirements ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. This program will ask you some questions and set up %2 on your computer. This program will ask you some questions and set up %2 on your computer. ScanningDialog Scanning storage devices... Scanning storage devices... Partitioning Partitioning SetHostNameJob Set hostname %1 Set hostname %1 Set hostname <strong>%1</strong>. Set hostname <strong>%1</strong>. Setting hostname %1. Setting hostname %1. Internal Error Internal Error Cannot write hostname to target system Cannot write hostname to target system SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Set keyboard model to %1, layout to %2-%3 Failed to write keyboard configuration for the virtual console. Failed to write keyboard configuration for the virtual console. Failed to write to %1 Failed to write to %1 Failed to write keyboard configuration for X11. Failed to write keyboard configuration for X11. Failed to write keyboard configuration to existing /etc/default directory. Failed to write keyboard configuration to existing /etc/default directory. SetPartFlagsJob Set flags on partition %1. Set flags on partition %1. Set flags on %1MiB %2 partition. Set flags on %1MiB %2 partition. Set flags on new partition. Set flags on new partition. Clear flags on partition <strong>%1</strong>. Clear flags on partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Clear flags on %1MiB <strong>%2</strong> partition. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Clearing flags on %1MiB <strong>%2</strong> partition. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Clear flags on new partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag new partition as <strong>%1</strong>. Flag new partition as <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on new partition. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. The installer failed to set flags on partition %1. SetPasswordJob Set password for user %1 Set password for user %1 Setting password for user %1. Setting password for user %1. Bad destination system path. Bad destination system path. rootMountPoint is %1 rootMountPoint is %1 Cannot disable root account. Cannot disable root account. passwd terminated with error code %1. passwd terminated with error code %1. Cannot set password for user %1. Cannot set password for user %1. usermod terminated with error code %1. usermod terminated with error code %1. SetTimezoneJob Set timezone to %1/%2 Set timezone to %1/%2 Cannot access selected timezone path. Cannot access selected timezone path. Bad path: %1 Bad path: %1 Cannot set timezone. Cannot set timezone. Link creation failed, target: %1; link name: %2 Link creation failed, target: %1; link name: %2 Cannot set timezone, Cannot set timezone, Cannot open /etc/timezone for writing Cannot open /etc/timezone for writing ShellProcessJob Shell Processes Job Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. This is an overview of what will happen once you start the install procedure. SummaryViewStep Summary Summary TrackingInstallJob Installation feedback Installation feedback Sending installation feedback. Sending installation feedback. Internal error in install-tracking. Internal error in install-tracking. HTTP request timed out. HTTP request timed out. TrackingMachineNeonJob Machine feedback Machine feedback Configuring machine feedback. Configuring machine feedback. Error in machine feedback configuration. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form Form Placeholder Placeholder <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. TrackingViewStep Feedback Feedback UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> Your username is too long. Your username is too long. Your username must start with a lowercase letter or underscore. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Only lowercase letters, numbers, underscore and hyphen are allowed. Only letters, numbers, underscore and hyphen are allowed. Only letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Your hostname is too short. Your hostname is too long. Your hostname is too long. Your passwords do not match! Your passwords do not match! UsersViewStep Users Users VariantModel Key Key Value Value VolumeGroupBaseDialog Create Volume Group Create Volume Group List of Physical Volumes List of Physical Volumes Volume Group Name: Volume Group Name: Volume Group Type: Volume Group Type: Physical Extent Size: Physical Extent Size: MiB MiB Total Size: Total Size: Used Size: Used Size: Total Sectors: Total Sectors: Quantity of LVs: Quantity of LVs: WelcomePage Form Form Select application and system language Select application and system language Open donations website Open donations website &Donate &Donate Open help and support website Open help and support website Open issues and bug-tracking website Open issues and bug-tracking website Open release notes website Open release notes website &Release notes &Release notes &Known issues &Known issues &Support &Support &About &About <h1>Welcome to the %1 installer.</h1> <h1>Welcome to the %1 installer.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Welcome to %1 setup.</h1> <h1>Welcome to %1 setup.</h1> About %1 setup About %1 setup About %1 installer About %1 installer <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support %1 support WelcomeQmlViewStep Welcome Welcome WelcomeViewStep Welcome Welcome notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> <h3>%1 <quote>%2</quote></h3> About About Support Support Known issues Known issues Release notes Release notes Donate Donate calamares-3.2.20/lang/calamares_en_GB.ts000066400000000000000000005252531362604102500200140ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. BootLoaderModel Master Boot Record of %1 Master Boot Record of %1 Boot Partition Boot Partition System Partition System Partition Do not install a boot loader Do not install a boot loader %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page Blank Page Calamares::DebugWindow Form Form GlobalStorage GlobalStorage JobQueue JobQueue Modules Modules Type: Type: none none Interface: Interface: Tools Tools Reload Stylesheet Widget Tree Debug information Debug information Calamares::ExecutionViewStep Set up Install Install Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Done Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Running command %1 %2 Calamares::PythonJob Running %1 operation. Running %1 operation. Bad working directory path Bad working directory path Working directory %1 for python job %2 is not readable. Working directory %1 for python job %2 is not readable. Bad main script file Bad main script file Main script file %1 for python job %2 is not readable. Main script file %1 for python job %2 is not readable. Boost.Python error in job "%1". Boost.Python error in job "%1". Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager &Back &Back &Next &Next &Cancel &Cancel Cancel setup without changing the system. Cancel installation without changing the system. Cancel installation without changing the system. Setup Failed Would you like to paste the install log to the web? Install Log Paste URL The upload was unsuccessful. No web-paste was done. Calamares Initialization Failed Calamares Initialisation Failed %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. <br/>The following modules could not be loaded: <br/>The following modules could not be loaded: Continue with installation? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Set up &Install &Install Setup is complete. Close the setup program. Cancel setup? Cancel installation? Cancel installation? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. &Yes &Yes &No &No &Close &Close Continue with setup? Continue with setup? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> &Install now &Install now Go &back Go &back &Done &Done The installation is complete. Close the installer. The installation is complete. Close the installer. Error Error Installation Failed Installation Failed CalamaresPython::Helper Unknown exception type Unknown exception type unparseable Python error unparseable Python error unparseable Python traceback unparseable Python traceback Unfetchable Python error. Unfetchable Python error. CalamaresUtils Install log posted to: %1 CalamaresWindow %1 Setup Program %1 Installer %1 Installer Show debug information Show debug information CheckerContainer Gathering system information... Gathering system information... ChoicePage Form Form After: After: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Boot loader location: Boot loader location: Select storage de&vice: Select storage de&vice: Current: Current: Reuse %1 as home partition for %2. Reuse %1 as home partition for %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. <strong>Select a partition to install on</strong> <strong>Select a partition to install on</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. The EFI system partition at %1 will be used for starting %2. The EFI system partition at %1 will be used for starting %2. EFI system partition: EFI system partition: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. No Swap Reuse Swap Swap (no Hibernate) Swap (with Hibernate) Swap to file <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. ClearMountsJob Clear mounts for partitioning operations on %1 Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 Cleared all mounts for %1 ClearTempMountsJob Clear all temporary mounts. Clear all temporary mounts. Clearing all temporary mounts. Clearing all temporary mounts. Cannot get list of temporary mounts. Cannot get list of temporary mounts. Cleared all temporary mounts. Cleared all temporary mounts. CommandList Could not run command. Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. The command needs to know the user's name, but no username is defined. ContextualProcessJob Contextual Processes Job Contextual Processes Job CreatePartitionDialog Create a Partition Create a Partition MiB MiB Partition &Type: Partition &Type: &Primary &Primary E&xtended E&xtended Fi&le System: Fi&le System: LVM LV name LVM LV name Flags: Flags: &Mount Point: &Mount Point: Si&ze: Si&ze: En&crypt En&crypt Logical Logical Primary Primary GPT GPT Mountpoint already in use. Please select another one. Mountpoint already in use. Please select another one. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. Creating new %1 partition on %2. The installer failed to create partition on disk '%1'. The installer failed to create partition on disk '%1'. CreatePartitionTableDialog Create Partition Table Create Partition Table Creating a new partition table will delete all existing data on the disk. Creating a new partition table will delete all existing data on the disk. What kind of partition table do you want to create? What kind of partition table do you want to create? Master Boot Record (MBR) Master Boot Record (MBR) GUID Partition Table (GPT) GUID Partition Table (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Create new %1 partition table on %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Creating new %1 partition table on %2. Creating new %1 partition table on %2. The installer failed to create a partition table on %1. The installer failed to create a partition table on %1. CreateUserJob Create user %1 Create user %1 Create user <strong>%1</strong>. Create user <strong>%1</strong>. Creating user %1. Creating user %1. Sudoers dir is not writable. Sudoers dir is not writable. Cannot create sudoers file for writing. Cannot create sudoers file for writing. Cannot chmod sudoers file. Cannot chmod sudoers file. Cannot open groups file for reading. Cannot open groups file for reading. CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. Delete partition %1. Delete partition <strong>%1</strong>. Delete partition <strong>%1</strong>. Deleting partition %1. Deleting partition %1. The installer failed to delete partition %1. The installer failed to delete partition %1. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. This device has a <strong>%1</strong> partition table. This device has a <strong>%1</strong> partition table. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Write LUKS configuration for Dracut to %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Failed to open %1 Failed to open %1 DummyCppJob Dummy C++ Job Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Edit Existing Partition Content: Content: &Keep &Keep Format Format Warning: Formatting the partition will erase all existing data. Warning: Formatting the partition will erase all existing data. &Mount Point: &Mount Point: Si&ze: Si&ze: MiB MiB Fi&le System: Fi&le System: Flags: Flags: Mountpoint already in use. Please select another one. Mountpoint already in use. Please select another one. EncryptWidget Form Form En&crypt system En&crypt system Passphrase Passphrase Confirm passphrase Confirm passphrase Please enter the same passphrase in both boxes. Please enter the same passphrase in both boxes. FillGlobalStorageJob Set partition information Set partition information Install %1 on <strong>new</strong> %2 system partition. Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Install boot loader on <strong>%1</strong>. Install boot loader on <strong>%1</strong>. Setting up mount points. Setting up mount points. FinishedPage Form Form <Restart checkbox tooltip> &Restart now &Restart now <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. FinishedViewStep Finish Finish Setup Complete Installation Complete Installation Complete The setup of %1 is complete. The installation of %1 is complete. The installation of %1 is complete. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatting partition %1 with file system %2. Formatting partition %1 with file system %2. The installer failed to format partition %1 on disk '%2'. The installer failed to format partition %1 on disk '%2'. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source is plugged in to a power source The system is not plugged in to a power source. The system is not plugged in to a power source. is connected to the Internet is connected to the Internet The system is not connected to the Internet. The system is not connected to the Internet. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. The installer is not running with administrator rights. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. The screen is too small to display the installer. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Konsole not installed Please install KDE Konsole and try again! Please install KDE Konsole and try again! Executing script: &nbsp;<code>%1</code> Executing script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script Script KeyboardPage Set keyboard model to %1.<br/> Set keyboard model to %1.<br/> Set keyboard layout to %1/%2. Set keyboard layout to %1/%2. KeyboardViewStep Keyboard Keyboard LCLocaleDialog System locale setting System locale setting The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. &Cancel &Cancel &OK &OK LicensePage Form Form <h1>License Agreement</h1> I accept the terms and conditions above. I accept the terms and conditions above. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License License LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 driver</strong><br/>by %2 <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> File: %1 Show the license text Open license agreement in browser. Hide license text LocalePage The system language will be set to %1. The system language will be set to %1. The numbers and dates locale will be set to %1. The numbers and dates locale will be set to %1. Region: Region: Zone: Zone: &Change... &Change... Set timezone to %1/%2.<br/> Set timezone to %1/%2.<br/> LocaleViewStep Location Location LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Generate machine-id. Configuration Error No root mount point is set for MachineId. NetInstallPage Name Name Description Description Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Incorrect configuration) NetInstallViewStep Package selection Package selection Office software Office package Browser software Browser package Web browser Kernel Services Login Desktop Applications NotesQmlViewStep Notes OEMPage Ba&tch: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> OEMViewStep OEM Configuration Set the OEM Batch Identifier to <code>%1</code>. PWQ Password is too short Password is too short Password is too long Password is too long Password is too weak Password is too weak Memory allocation error when setting '%1' Memory allocation error when setting '%1' Memory allocation error Memory allocation error The password is the same as the old one The password is the same as the old one The password is a palindrome The password is a palindrome The password differs with case changes only The password differs with case changes only The password is too similar to the old one The password is too similar to the old one The password contains the user name in some form The password contains the user name in some form The password contains words from the real name of the user in some form The password contains words from the real name of the user in some form The password contains forbidden words in some form The password contains forbidden words in some form The password contains less than %1 digits The password contains less than %1 digits The password contains too few digits The password contains too few digits The password contains less than %1 uppercase letters The password contains less than %1 uppercase letters The password contains too few uppercase letters The password contains too few uppercase letters The password contains less than %1 lowercase letters The password contains less than %1 lowercase letters The password contains too few lowercase letters The password contains too few lowercase letters The password contains less than %1 non-alphanumeric characters The password contains less than %1 non-alphanumeric characters The password contains too few non-alphanumeric characters The password contains too few non-alphanumeric characters The password is shorter than %1 characters The password is shorter than %1 characters The password is too short The password is too short The password is just rotated old one The password is just rotated old one The password contains less than %1 character classes The password contains less than %1 character classes The password does not contain enough character classes The password does not contain enough character classes The password contains more than %1 same characters consecutively The password contains more than %1 same characters consecutively The password contains too many same characters consecutively The password contains too many same characters consecutively The password contains more than %1 characters of the same class consecutively The password contains more than %1 characters of the same class consecutively The password contains too many characters of the same class consecutively The password contains too many characters of the same class consecutively The password contains monotonic sequence longer than %1 characters The password contains monotonic sequence longer than %1 characters The password contains too long of a monotonic character sequence The password contains too long of a monotonic character sequence No password supplied No password supplied Cannot obtain random numbers from the RNG device Cannot obtain random numbers from the RNG device Password generation failed - required entropy too low for settings Password generation failed - required entropy too low for settings The password fails the dictionary check - %1 The password fails the dictionary check - %1 The password fails the dictionary check The password fails the dictionary check Unknown setting - %1 Unknown setting - %1 Unknown setting Unknown setting Bad integer value of setting - %1 Bad integer value of setting - %1 Bad integer value Bad integer value Setting %1 is not of integer type Setting %1 is not of integer type Setting is not of integer type Setting is not of integer type Setting %1 is not of string type Setting %1 is not of string type Setting is not of string type Setting is not of string type Opening the configuration file failed Opening the configuration file failed The configuration file is malformed The configuration file is malformed Fatal failure Fatal failure Unknown error Unknown error Password is empty PackageChooserPage Form Form Product Name TextLabel TextLabel Long Product Description Package Selection Please pick a product from the list. The selected product will be installed. PackageChooserViewStep Packages Page_Keyboard Form Form Keyboard Model: Keyboard Model: Type here to test your keyboard Type here to test your keyboard Page_UserSetup Form Form What is your name? What is your name? What name do you want to use to log in? What name do you want to use to log in? Choose a password to keep your account safe. Choose a password to keep your account safe. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> What is the name of this computer? What is the name of this computer? Your Full Name login <small>This name will be used if you make the computer visible to others on a network.</small> <small>This name will be used if you make the computer visible to others on a network.</small> Computer Name Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Log in automatically without asking for the password. Use the same password for the administrator account. Use the same password for the administrator account. Choose a password for the administrator account. Choose a password for the administrator account. <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Enter the same password twice, so that it can be checked for typing errors.</small> PartitionLabelsView Root Root Home Home Boot Boot EFI system EFI system Swap Swap New partition for %1 New partition for %1 New partition New partition %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space Free Space New partition New partition Name Name File System File System Mount Point Mount Point Size Size PartitionPage Form Form Storage de&vice: Storage de&vice: &Revert All Changes &Revert All Changes New Partition &Table New Partition &Table Cre&ate Cre&ate &Edit &Edit &Delete &Delete New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group I&nstall boot loader on: Are you sure you want to create a new partition table on %1? Are you sure you want to create a new partition table on %1? Can not create new partition Can not create new partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. PartitionViewStep Gathering system information... Gathering system information... Partitions Partitions Install %1 <strong>alongside</strong> another operating system. Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <strong>Erase</strong> disk and install %1. <strong>Replace</strong> a partition with %1. <strong>Replace</strong> a partition with %1. <strong>Manual</strong> partitioning. <strong>Manual</strong> partitioning. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Disk <strong>%1</strong> (%2) Current: Current: After: After: No EFI system partition configured No EFI system partition configured An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. EFI system partition flag not set EFI system partition flag not set An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Boot partition not encrypted Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form Form Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel Look-and-Feel PreserveFiles Saving files for later ... Saving files for later... No files configured to save for later. No files configured to save for later. Not all of the configured files could be preserved. Not all of the configured files could be preserved. ProcessResult There was no output from the command. There was no output from the command. Output: Output: External command crashed. External command crashed. Command <i>%1</i> crashed. Command <i>%1</i> crashed. External command failed to start. External command failed to start. Command <i>%1</i> failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Internal error when starting command. Bad parameters for process job call. Bad parameters for process job call. External command failed to finish. External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. External command finished with errors. Command <i>%1</i> finished with exit code %2. Command <i>%1</i> finished with exit code %2. QObject Default Keyboard Model Default Keyboard Model Default Default unknown unknown extended extended unformatted unformatted swap swap Unpartitioned space or unknown partition table Unpartitioned space or unknown partition table (no mount point) Requirements checking for module <i>%1</i> is complete. %1 (%2) language[name] (country[name]) %1 (%2) No product No description provided. File not found Path <pre>%1</pre> must be an absolute path. Could not create new random file <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form Form Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. The selected item does not appear to be a valid partition. The selected item does not appear to be a valid partition. %1 cannot be installed on empty space. Please select an existing partition. %1 cannot be installed on empty space. Please select an existing partition. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 cannot be installed on this partition. %1 cannot be installed on this partition. Data partition (%1) Data partition (%1) Unknown system partition (%1) Unknown system partition (%1) %1 system partition (%2) %1 system partition (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. The EFI system partition at %1 will be used for starting %2. The EFI system partition at %1 will be used for starting %2. EFI system partition: EFI system partition: ResizeFSJob Resize Filesystem Job Invalid configuration The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. Resize partition %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. The installer failed to resize partition %1 on disk '%2'. ResizeVolumeGroupDialog Resize Volume Group ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: For best results, please ensure that this computer: System requirements System requirements ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. This program will ask you some questions and set up %2 on your computer. This program will ask you some questions and set up %2 on your computer. ScanningDialog Scanning storage devices... Scanning storage devices... Partitioning Partitioning SetHostNameJob Set hostname %1 Set hostname %1 Set hostname <strong>%1</strong>. Set hostname <strong>%1</strong>. Setting hostname %1. Setting hostname %1. Internal Error Internal Error Cannot write hostname to target system Cannot write hostname to target system SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Set keyboard model to %1, layout to %2-%3 Failed to write keyboard configuration for the virtual console. Failed to write keyboard configuration for the virtual console. Failed to write to %1 Failed to write to %1 Failed to write keyboard configuration for X11. Failed to write keyboard configuration for X11. Failed to write keyboard configuration to existing /etc/default directory. Failed to write keyboard configuration to existing /etc/default directory. SetPartFlagsJob Set flags on partition %1. Set flags on partition %1. Set flags on %1MiB %2 partition. Set flags on new partition. Set flags on new partition. Clear flags on partition <strong>%1</strong>. Clear flags on partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Clear flags on new partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag new partition as <strong>%1</strong>. Flag new partition as <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on new partition. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. The installer failed to set flags on partition %1. SetPasswordJob Set password for user %1 Set password for user %1 Setting password for user %1. Setting password for user %1. Bad destination system path. Bad destination system path. rootMountPoint is %1 rootMountPoint is %1 Cannot disable root account. Cannot disable root account. passwd terminated with error code %1. passwd terminated with error code %1. Cannot set password for user %1. Cannot set password for user %1. usermod terminated with error code %1. usermod terminated with error code %1. SetTimezoneJob Set timezone to %1/%2 Set timezone to %1/%2 Cannot access selected timezone path. Cannot access selected timezone path. Bad path: %1 Bad path: %1 Cannot set timezone. Cannot set timezone. Link creation failed, target: %1; link name: %2 Link creation failed, target: %1; link name: %2 Cannot set timezone, Cannot set timezone, Cannot open /etc/timezone for writing Cannot open /etc/timezone for writing ShellProcessJob Shell Processes Job Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. This is an overview of what will happen once you start the install procedure. SummaryViewStep Summary Summary TrackingInstallJob Installation feedback Installation feedback Sending installation feedback. Sending installation feedback. Internal error in install-tracking. Internal error in install-tracking. HTTP request timed out. HTTP request timed out. TrackingMachineNeonJob Machine feedback Machine feedback Configuring machine feedback. Configuring machine feedback. Error in machine feedback configuration. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form Form Placeholder Placeholder <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. TrackingViewStep Feedback Feedback UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> Your username is too long. Your username is too long. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Only letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Your hostname is too short. Your hostname is too long. Your hostname is too long. Your passwords do not match! Your passwords do not match! UsersViewStep Users Users VariantModel Key Value Value VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB MiB Total Size: Used Size: Total Sectors: Quantity of LVs: WelcomePage Form Form Select application and system language Open donations website &Donate Open help and support website Open issues and bug-tracking website Open release notes website &Release notes &Release notes &Known issues &Known issues &Support &Support &About &About <h1>Welcome to the %1 installer.</h1> <h1>Welcome to the %1 installer.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Welcome to %1 setup.</h1> About %1 setup About %1 installer About %1 installer <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support %1 support WelcomeQmlViewStep Welcome Welcome WelcomeViewStep Welcome Welcome notesqml <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> About Support Known issues Release notes Donate calamares-3.2.20/lang/calamares_eo.ts000066400000000000000000004601121362604102500174350ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. BootLoaderModel Master Boot Record of %1 Boot Partition System Partition Do not install a boot loader %1 (%2) %1(%2) Calamares::BlankViewStep Blank Page Calamares::DebugWindow Form Formularo GlobalStorage JobQueue Modules Moduloj Type: Tipo: none neniu Interface: Interfaco: Tools Iloj Reload Stylesheet Widget Tree Debug information Calamares::ExecutionViewStep Set up AranÄu Install Instali Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Finita Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Calamares::PythonJob Running %1 operation. Bad working directory path Working directory %1 for python job %2 is not readable. Bad main script file Main script file %1 for python job %2 is not readable. Boost.Python error in job "%1". Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager &Back &Reen &Next &Sekva &Cancel &Nuligi Cancel setup without changing the system. Cancel installation without changing the system. Nuligi instalado sen ÅanÄante la sistemo. Setup Failed Would you like to paste the install log to the web? Install Log Paste URL The upload was unsuccessful. No web-paste was done. Calamares Initialization Failed %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. <br/>The following modules could not be loaded: Continue with installation? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &AranÄu nun &Set up &AranÄu &Install &Instali Setup is complete. Close the setup program. Cancel setup? Cancel installation? Nuligi instalado? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Ĉu vi vere volas nuligi la instalan procedon? La instalilo forlasos kaj ĉiuj ÅanÄoj perdos. &Yes &Jes &No &Ne &Close &Fermi Continue with setup? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> &Install now &Instali nun Go &back Iru &Reen &Done &Finita The installation is complete. Close the installer. Error Eraro Installation Failed CalamaresPython::Helper Unknown exception type unparseable Python error unparseable Python traceback Unfetchable Python error. CalamaresUtils Install log posted to: %1 CalamaresWindow %1 Setup Program %1 Installer %1 Instalilo Show debug information CheckerContainer Gathering system information... ChoicePage Form Formularo After: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Boot loader location: Select storage de&vice: Elektita &tenada aparato Current: Reuse %1 as home partition for %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. <strong>Select a partition to install on</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. The EFI system partition at %1 will be used for starting %2. EFI system partition: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. No Swap Reuse Swap Swap (no Hibernate) Swap (with Hibernate) Swap to file <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. ClearMountsJob Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 ClearTempMountsJob Clear all temporary mounts. Clearing all temporary mounts. Cannot get list of temporary mounts. Cleared all temporary mounts. CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Kreiu Subdisko MiB Partition &Type: &Speco de Subdisko: &Primary &Ĉefsubdisko E&xtended &Kromsubdisko Fi&le System: &Dosiersistemo: LVM LV name LVM LV nomo Flags: Flagoj: &Mount Point: &Muntopunkto: Si&ze: &Grandeco: En&crypt &Ĉifras Logical Logika Primary Ĉefa GPT Mountpoint already in use. Please select another one. Muntopunkto jam utiliÄi. Bonvolu elektu alian. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. The installer failed to create partition on disk '%1'. CreatePartitionTableDialog Create Partition Table Creating a new partition table will delete all existing data on the disk. What kind of partition table do you want to create? Master Boot Record (MBR) GUID Partition Table (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Creating new %1 partition table on %2. The installer failed to create a partition table on %1. CreateUserJob Create user %1 Create user <strong>%1</strong>. Creating user %1. Sudoers dir is not writable. Cannot create sudoers file for writing. Cannot chmod sudoers file. Cannot open groups file for reading. CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. Delete partition <strong>%1</strong>. Deleting partition %1. The installer failed to delete partition %1. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. This device has a <strong>%1</strong> partition table. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - (%2) device[name] - (device-node[name]) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Failed to open %1 DummyCppJob Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Content: &Keep &Tenu Format Warning: Formatting the partition will erase all existing data. &Mount Point: &Muntopunkto: Si&ze: &Grandeco: MiB Fi&le System: &Dosiersistemo: Flags: &Flagoj: Mountpoint already in use. Please select another one. Muntopunkto jam utiliÄi. Bonvolu elektu alian. EncryptWidget Form Formularo En&crypt system &Ĉifru la sistemo Passphrase Confirm passphrase Please enter the same passphrase in both boxes. FillGlobalStorageJob Set partition information Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Install boot loader on <strong>%1</strong>. Setting up mount points. FinishedPage Form Formularo <Restart checkbox tooltip> &Restart now &Restartigu nun <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. FinishedViewStep Finish Setup Complete Installation Complete The setup of %1 is complete. The installation of %1 is complete. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatting partition %1 with file system %2. The installer failed to format partition %1 on disk '%2'. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source The system is not plugged in to a power source. is connected to the Internet The system is not connected to the Internet. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Please install KDE Konsole and try again! Executing script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script KeyboardPage Set keyboard model to %1.<br/> Set keyboard layout to %1/%2. KeyboardViewStep Keyboard LCLocaleDialog System locale setting The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. &Cancel &Nuligi &OK &DaÅ­rigu LicensePage Form Formularo <h1>License Agreement</h1> I accept the terms and conditions above. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> File: %1 Show the license text Open license agreement in browser. Hide license text LocalePage The system language will be set to %1. The numbers and dates locale will be set to %1. Region: Zone: &Change... &ÅœanÄu... Set timezone to %1/%2.<br/> LocaleViewStep Location LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Generi maÅino-legitimilo. Configuration Error No root mount point is set for MachineId. NetInstallPage Name Description Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Incorrect configuration) NetInstallViewStep Package selection Office software Office package Browser software Browser package Web browser Kernel Services Login Desktop Applications NotesQmlViewStep Notes OEMPage Ba&tch: &Baĉo <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> OEMViewStep OEM Configuration Set the OEM Batch Identifier to <code>%1</code>. PWQ Password is too short Password is too long Password is too weak Memory allocation error when setting '%1' Memory allocation error The password is the same as the old one The password is a palindrome The password differs with case changes only The password is too similar to the old one The password contains the user name in some form The password contains words from the real name of the user in some form The password contains forbidden words in some form The password contains less than %1 digits The password contains too few digits The password contains less than %1 uppercase letters The password contains too few uppercase letters The password contains less than %1 lowercase letters The password contains too few lowercase letters The password contains less than %1 non-alphanumeric characters The password contains too few non-alphanumeric characters The password is shorter than %1 characters The password is too short The password is just rotated old one The password contains less than %1 character classes The password does not contain enough character classes The password contains more than %1 same characters consecutively The password contains too many same characters consecutively The password contains more than %1 characters of the same class consecutively The password contains too many characters of the same class consecutively The password contains monotonic sequence longer than %1 characters The password contains too long of a monotonic character sequence No password supplied Cannot obtain random numbers from the RNG device Password generation failed - required entropy too low for settings The password fails the dictionary check - %1 The password fails the dictionary check Unknown setting - %1 Unknown setting Bad integer value of setting - %1 Bad integer value Setting %1 is not of integer type Setting is not of integer type Setting %1 is not of string type Setting is not of string type Opening the configuration file failed The configuration file is malformed Fatal failure Unknown error Password is empty PackageChooserPage Form Formularo Product Name TextLabel Long Product Description Package Selection Please pick a product from the list. The selected product will be installed. PackageChooserViewStep Packages Page_Keyboard Form Formularo Keyboard Model: Type here to test your keyboard Page_UserSetup Form Formularo What is your name? What name do you want to use to log in? Choose a password to keep your account safe. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> What is the name of this computer? Your Full Name login <small>This name will be used if you make the computer visible to others on a network.</small> Computer Name Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Use the same password for the administrator account. Choose a password for the administrator account. <small>Enter the same password twice, so that it can be checked for typing errors.</small> PartitionLabelsView Root Home Boot EFI system Swap New partition for %1 New partition %1 %2 size[number] filesystem[name] PartitionModel Free Space New partition Name File System Mount Point Size PartitionPage Form Formularo Storage de&vice: &Tenada aparato &Revert All Changes &Malfari SanÄojn New Partition &Table Cre&ate &Kreiu &Edit &Redaktu &Delete &ForviÅu New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group I&nstall boot loader on: Are you sure you want to create a new partition table on %1? Can not create new partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. PartitionViewStep Gathering system information... Partitions Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <strong>Replace</strong> a partition with %1. <strong>Manual</strong> partitioning. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Current: After: No EFI system partition configured An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. EFI system partition flag not set An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form Formularo Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: External command crashed. Command <i>%1</i> crashed. External command failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Bad parameters for process job call. External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Command <i>%1</i> finished with exit code %2. QObject Default Keyboard Model Default unknown extended kromsubdisko unformatted swap Unpartitioned space or unknown partition table (no mount point) Requirements checking for module <i>%1</i> is complete. %1 (%2) language[name] (country[name]) %1(%2) No product No description provided. File not found Path <pre>%1</pre> must be an absolute path. Could not create new random file <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form Formularo Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. The selected item does not appear to be a valid partition. %1 cannot be installed on empty space. Please select an existing partition. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 cannot be installed on this partition. Data partition (%1) Unknown system partition (%1) %1 system partition (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. The EFI system partition at %1 will be used for starting %2. EFI system partition: ResizeFSJob Resize Filesystem Job Invalid configuration The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. ResizeVolumeGroupDialog Resize Volume Group ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: System requirements ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. This program will ask you some questions and set up %2 on your computer. ScanningDialog Scanning storage devices... Partitioning SetHostNameJob Set hostname %1 Set hostname <strong>%1</strong>. Setting hostname %1. Internal Error Cannot write hostname to target system SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Failed to write keyboard configuration for the virtual console. Failed to write to %1 Failed to write keyboard configuration for X11. Failed to write keyboard configuration to existing /etc/default directory. SetPartFlagsJob Set flags on partition %1. Set flags on %1MiB %2 partition. Set flags on new partition. Clear flags on partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag new partition as <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. SetPasswordJob Set password for user %1 Setting password for user %1. Bad destination system path. rootMountPoint is %1 Cannot disable root account. passwd terminated with error code %1. Cannot set password for user %1. usermod terminated with error code %1. SetTimezoneJob Set timezone to %1/%2 Cannot access selected timezone path. Bad path: %1 Cannot set timezone. Link creation failed, target: %1; link name: %2 Cannot set timezone, Cannot open /etc/timezone for writing ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) SummaryPage This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. SummaryViewStep Summary TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingMachineNeonJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form Formularo Placeholder <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. TrackingViewStep Feedback UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> Your username is too long. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Only letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Your hostname is too long. Your passwords do not match! UsersViewStep Users VariantModel Key Value VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB Total Size: Used Size: Total Sectors: Quantity of LVs: WelcomePage Form Formularo Select application and system language Open donations website &Donate Open help and support website Open issues and bug-tracking website Open release notes website &Release notes &Known issues &Support &About <h1>Welcome to the %1 installer.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Welcome to %1 setup.</h1> About %1 setup About %1 installer <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support WelcomeQmlViewStep Welcome WelcomeViewStep Welcome notesqml <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> About Support Known issues Release notes Donate calamares-3.2.20/lang/calamares_es.ts000066400000000000000000005412201362604102500174410ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. El <strong>entorno de arranque<strong> de este sistema.<br><br>Los sistemas x86 sólo soportan <strong>BIOS</strong>.<br>Los sistemas modernos habitualmente usan <strong>EFI</strong>, pero también pueden mostrarse como BIOS si se inician en modo de compatibildiad. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. Este sistema se inició con un entorno de arranque <strong>EFI</strong>.<br><br>Para configurar el arranque desde un entorno EFI, este instalador debe desplegar una aplicación de gestor de arranque, como <strong>GRUB</strong> o <strong>systemd-boot</strong> en una <strong>Partición de Sistema EFI</strong>. Esto es automático, a menos que escoja particionamiento manual, en cuyo caso debe escogerlo o crearlo usted mismo. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. Este sistema fue iniciado con un entorno de arranque <strong>BIOS</strong>.<br><br> Para configurar el arranque desde un entorno BIOS, este instalador debe instalar un gestor de arranque, como <strong>GRUB</strong>, tanto al principio de una partición o en el <strong>Master Boot Record</strong> (registro maestro de arranque) cerca del principio de la tabla de partición (preferentemente). Esto es automático, a menos que escoja particionamiento manual, en cuayo caso debe establecerlo usted mismo. BootLoaderModel Master Boot Record of %1 Master Boot Record de %1 Boot Partition Partición de Arranque System Partition Partición del Sistema Do not install a boot loader No instalar el gestor de arranque %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page Página vacía Calamares::DebugWindow Form Formulario GlobalStorage Almacenamiento Global JobQueue Lista de trabajos pendientes Modules Módulos Type: Tipo: none ninguno Interface: Interfaz: Tools Herramientas Reload Stylesheet Widget Tree Debug information Información de depuración. Calamares::ExecutionViewStep Set up Install Instalar Calamares::FailJob Job failed (%1) Trabajo fallido (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Hecho Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Ejecutando comando %1 %2 Calamares::PythonJob Running %1 operation. Ejecutando %1 operación. Bad working directory path Error en la ruta del directorio de trabajo Working directory %1 for python job %2 is not readable. El directorio de trabajo %1 para el script de python %2 no se puede leer. Bad main script file Script principal erróneo Main script file %1 for python job %2 is not readable. El script principal %1 del proceso python %2 no es accesible. Boost.Python error in job "%1". Error Boost.Python en el proceso "%1". Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager &Back &Atrás &Next &Siguiente &Cancel &Cancelar Cancel setup without changing the system. Cancel installation without changing the system. Cancelar instalación sin cambiar el sistema. Setup Failed Would you like to paste the install log to the web? Install Log Paste URL The upload was unsuccessful. No web-paste was done. Calamares Initialization Failed La inicialización de Calamares falló %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. %1 no se pudo instalar. Calamares no fue capaz de cargar todos los módulos configurados. Esto es un problema con la forma en que Calamares es usado por la distribución <br/>The following modules could not be loaded: Los siguientes módulos no se pudieron cargar: Continue with installation? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Set up &Install &Instalar Setup is complete. Close the setup program. Cancel setup? Cancel installation? ¿Cancelar la instalación? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. ¿Realmente quiere cancelar el proceso de instalación? Saldrá del instalador y se perderán todos los cambios. &Yes &Sí &No &No &Close &Cerrar Continue with setup? ¿Continuar con la configuración? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> El instalador %1 va a realizar cambios en su disco para instalar %2.<br/><strong>No podrá deshacer estos cambios.</strong> &Install now &Instalar ahora Go &back Regresar &Done &Hecho The installation is complete. Close the installer. La instalación se ha completado. Cierre el instalador. Error Error Installation Failed Error en la Instalación CalamaresPython::Helper Unknown exception type Excepción desconocida unparseable Python error error unparseable Python unparseable Python traceback rastreo de Python unparseable Unfetchable Python error. Error de Python Unfetchable. CalamaresUtils Install log posted to: %1 CalamaresWindow %1 Setup Program %1 Installer %1 Instalador Show debug information Mostrar información de depuración. CheckerContainer Gathering system information... Obteniendo información del sistema... ChoicePage Form Formulario After: Despues: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Particionado manual </strong><br/> Usted puede crear o cambiar el tamaño de las particiones usted mismo. Boot loader location: Ubicación del cargador de arranque: Select storage de&vice: Seleccionar dispositivo de almacenamiento: Current: Actual: Reuse %1 as home partition for %2. Volver a usar %1 como partición home para %2 <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Seleccione una partición para reducir el tamaño, a continuación, arrastre la barra inferior para cambiar el tamaño</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. <strong>Select a partition to install on</strong> <strong>Seleccione una partición para instalar en</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. No se puede encontrar una partición de sistema EFI en ningún lugar de este sistema. Por favor, vuelva y use el particionamiento manual para establecer %1. The EFI system partition at %1 will be used for starting %2. La partición de sistema EFI en %1 se usará para iniciar %2. EFI system partition: Partición del sistema EFI: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Este dispositivo de almacenamiento no parece tener un sistema operativo en él. ¿Qué quiere hacer?<br/>Podrá revisar y confirmar sus elecciones antes de que se haga cualquier cambio en el dispositivo de almacenamiento. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Borrar disco</strong><br/>Esto <font color="red">borrará</font> todos los datos presentes actualmente en el dispositivo de almacenamiento. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. %1 se encuentra instalado en este dispositivo de almacenamiento. ¿Qué desea hacer?<br/>Podrá revisar y confirmar su elección antes de que cualquier cambio se haga efectivo en el dispositivo de almacenamiento. No Swap Sin Swap Reuse Swap Reusar Swap Swap (no Hibernate) Swap (sin hibernación) Swap (with Hibernate) Swap (con hibernación) Swap to file Swap a archivo <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Instalar junto al otro SO</strong><br/>El instalador reducirá la partición del SO existente para tener espacio para instalar %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Reemplazar una partición</strong><br/>Reemplazar una partición con %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Este dispositivo de almacenamiento parece que ya tiene un sistema operativo instalado en él. ¿Qué desea hacer?<br/>Podrá revisar y confirmar su elección antes de que cualquier cambio se haga efectivo en el dispositivo de almacenamiento. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Este dispositivo de almacenamiento contiene múltiples sistemas operativos instalados en él. ¿Qué desea hacer?<br/>Podrá revisar y confirmar su elección antes de que cualquier cambio se haga efectivo en el dispositivo de almacenamiento. ClearMountsJob Clear mounts for partitioning operations on %1 Limpiar puntos de montaje para operaciones de particionamiento en %1 Clearing mounts for partitioning operations on %1. Limpiando puntos de montaje para operaciones de particionamiento en %1. Cleared all mounts for %1 Limpiados todos los puntos de montaje para %1 ClearTempMountsJob Clear all temporary mounts. Limpiar todos los puntos de montaje temporales. Clearing all temporary mounts. Limpiando todos los puntos de montaje temporales. Cannot get list of temporary mounts. No se puede obtener la lista de puntos de montaje temporales. Cleared all temporary mounts. Limpiado todos los puntos de montaje temporales. CommandList Could not run command. No se pudo ejecutar el comando. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. El comando corre en el ambiente anfitrión y necesita saber el directorio raiz, pero no está definido el punto de montaje de la raiz The command needs to know the user's name, but no username is defined. El comando necesita saber el nombre de usuario, pero no hay nombre de usuario definido. ContextualProcessJob Contextual Processes Job Tarea Contextual Processes CreatePartitionDialog Create a Partition Crear partición MiB MiB Partition &Type: &Tipo de partición: &Primary &Primaria E&xtended E&xtendida Fi&le System: Sistema de archivos: LVM LV name Nombre del LV (volumen lógico) del LVM (administrador de LVs) Flags: Banderas: &Mount Point: Punto de &montaje: Si&ze: &Tamaño: En&crypt &Cifrar Logical Lógica Primary Primaria GPT GPT Mountpoint already in use. Please select another one. Punto de montaje ya en uso. Por favor, seleccione otro. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. Creando nueva %1 partición en %2 The installer failed to create partition on disk '%1'. El instalador fallo al crear la partición en el disco '%1'. CreatePartitionTableDialog Create Partition Table Crear Tabla de Particiones Creating a new partition table will delete all existing data on the disk. Crear una nueva tabla de particiones borrara todos los datos existentes en el disco. What kind of partition table do you want to create? ¿Qué tipo de tabla de particiones desea crear? Master Boot Record (MBR) Registro de arranque principal (MBR) GUID Partition Table (GPT) Tabla de Particiones GUID (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Crear nueva %1 tabla de particiones en %2 Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Crear nueva <strong>%1</strong> tabla de particiones en <strong>%2</strong> (%3). Creating new %1 partition table on %2. Creando nueva %1 tabla de particiones en %2. The installer failed to create a partition table on %1. El instalador fallo al crear la tabla de partición en %1. CreateUserJob Create user %1 Crear usuario %1 Create user <strong>%1</strong>. Crear usuario <strong>%1</strong>. Creating user %1. Creando usuario %1. Sudoers dir is not writable. El directorio de sudoers no dispone de permisos de escritura. Cannot create sudoers file for writing. No es posible crear el archivo de escritura para sudoers. Cannot chmod sudoers file. No es posible modificar los permisos de sudoers. Cannot open groups file for reading. No es posible abrir el archivo de grupos del sistema. CreateVolumeGroupDialog Create Volume Group Crear grupo de volúmenes CreateVolumeGroupJob Create new volume group named %1. Crear un nuevo grupo de volúmenes llamado %1. Create new volume group named <strong>%1</strong>. Crear un nuevo grupo de volúmenes llamado <strong>%1</strong>. Creating new volume group named %1. Creando un nuevo grupo de volúmenes llamado %1. The installer failed to create a volume group named '%1'. El instalador falló en crear un grupo de volúmenes llamado '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Desactivar grupo de volúmenes llamado %1. Deactivate volume group named <strong>%1</strong>. Desactivar grupo de volúmenes llamado <strong>%1</strong>. The installer failed to deactivate a volume group named %1. El instalador falló en desactivar el grupo de volúmenes llamado %1. DeletePartitionJob Delete partition %1. Eliminar partición %1. Delete partition <strong>%1</strong>. Eliminar partición <strong>%1</strong>. Deleting partition %1. Eliminando partición %1. The installer failed to delete partition %1. El instalador falló al eliminar la partición %1. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. El tipo de <strong>tabla de particiones</strong> en el dispositivo de almacenamiento seleccionado.<br/><br/>La única forma de cambiar el tipo de la tabla de particiones es borrando y creando la tabla de particiones de nuevo, lo cual destruirá todos los datos almacenados en el dispositivo de almacenamiento.<br/>Este instalador mantendrá la tabla de particiones actual salvo que explícitamente se indique lo contrario.<br/>En caso de dudas, GPT es preferible en sistemas modernos. This device has a <strong>%1</strong> partition table. Este dispositivo tiene un <strong>% 1 </ strong> tabla de particiones. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. Este es un dispositivo <strong>loop</strong>.<br/><br/>Se trata de un pseudo-dispositivo sin tabla de particiones que permite el acceso a los archivos como un dispositivo orientado a bloques. Este tipo de configuración normalmente solo contiene un único sistema de archivos. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. Este instalador <strong>no puede detectar una tabla de particiones</strong> en el dispositivo de almacenamiento seleccionado.<br><br> El dispositivo no tiene una tabla de particiones o la tabla de particiones está corrupta o es de un tipo desconocido.<br> Este instalador puede crearte una nueva tabla de particiones automáticamente o mediante la página de particionamiento manual. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Este es el tipo de tabla de particiones recomendado para sistemas modernos que arrancan mediante un entorno de arranque <strong>EFI</strong>. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. <br><br>Este tipo de tabla de partición sólo es aconsejable en sistemas antiguos que se inician desde un entorno de arranque <strong>BIOS</strong>. La tabla GPT está recomendada en la mayoría de los demás casos.<br><br><strong>Advertencia:</strong> La tabla de partición MBR es un estándar obsoleto de la era MS-DOS.<br>Sólo se pueden crear 4 particiones <em>primarias</em>, y de esas 4, una puede ser una partición <em>extendida</em> que, en cambio, puede contener varias particiones <em>lógicas</em>. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1-(%2) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Escribir la configuración de LUKS para Dracut en %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Omitir la escritura de la configuración de LUKS para Dracut: La partición "/" no está cifrada Failed to open %1 No se pudo abrir %1 DummyCppJob Dummy C++ Job Tarea C++ ficticia EditExistingPartitionDialog Edit Existing Partition Editar Partición Existente Content: Contenido: &Keep &Mantener Format Formato Warning: Formatting the partition will erase all existing data. Advertencia: Formatear la partición borrará todos los datos existentes. &Mount Point: Punto de &montaje: Si&ze: &Tamaño: MiB MiB Fi&le System: S&istema de archivo: Flags: Banderas: Mountpoint already in use. Please select another one. Punto de montaje ya en uso. Por favor, seleccione otro. EncryptWidget Form Formulario En&crypt system &Cifrar sistema Passphrase Frase-contraseña Confirm passphrase Confirmar frase-contraseña Please enter the same passphrase in both boxes. Por favor, introduzca la misma frase-contraseña en ambos recuadros. FillGlobalStorageJob Set partition information Establecer la información de la partición Install %1 on <strong>new</strong> %2 system partition. Instalar %1 en <strong>nuevo</strong> %2 partición del sistema. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Configurar <strong>nueva</strong> %2 partición con punto de montaje <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Instalar %2 en %3 partición del sistema <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Configurar %3 partición <strong>%1</strong> con punto de montaje <strong>%2</strong>. Install boot loader on <strong>%1</strong>. Instalar gestor de arranque en <strong>%1</strong>. Setting up mount points. Configurando puntos de montaje. FinishedPage Form Formulario <Restart checkbox tooltip> &Restart now &Reiniciar ahora <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>Listo.</h1><br/>%1 ha sido instalado en su equipo.<br/>Ahora puede reiniciar hacia su nuevo sistema, o continuar utilizando %2 Live. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>La instalación falló</h1><br/>%1 no se ha instalado en su equipo.<br/>El mensaje de error fue: %2. FinishedViewStep Finish Finalizar Setup Complete Installation Complete Instalación completada The setup of %1 is complete. The installation of %1 is complete. Se ha completado la instalación de %1. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatting partition %1 with file system %2. Formateando partición %1 con sistema de ficheros %2. The installer failed to format partition %1 on disk '%2'. El instalador falló al formatear la partición %1 del disco '%2'. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source esta conectado a una fuente de alimentación The system is not plugged in to a power source. El sistema no esta conectado a una fuente de alimentación. is connected to the Internet esta conectado a Internet The system is not connected to the Internet. El sistema no esta conectado a Internet is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. El instalador no esta ejecutándose con permisos de administrador. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. La pantalla es demasiado pequeña para mostrar el instalador. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Konsole no está instalada Please install KDE Konsole and try again! ¡Por favor, instale KDE Konsole e inténtelo de nuevo! Executing script: &nbsp;<code>%1</code> Ejecutando script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script Script KeyboardPage Set keyboard model to %1.<br/> Establecer el modelo de teclado a %1.<br/> Set keyboard layout to %1/%2. Configurar la disposición de teclado a %1/%2. KeyboardViewStep Keyboard Teclado LCLocaleDialog System locale setting Configuración regional del sistema. The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. La configuración regional del sistema afecta al idioma y a al conjunto de caracteres para algunos elementos de interfaz de la linea de comandos.<br/>La configuración actual es <strong>%1</strong>. &Cancel &Cancelar &OK &Aceptar LicensePage Form Formulario <h1>License Agreement</h1> I accept the terms and conditions above. Acepto los términos y condiciones anteriores. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License Licencia LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 driver</strong><br/>por %2 <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 driver gráficos</strong><br/><font color="Grey">por %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 plugin del navegador</strong><br/><font color="Grey">por %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">por %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 paquete</strong><br/><font color="Grey">por %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">por %2</font> File: %1 Show the license text Open license agreement in browser. Hide license text LocalePage The system language will be set to %1. El idioma del sistema se establecerá a %1. The numbers and dates locale will be set to %1. La localización de números y fechas se establecerá a %1. Region: Región: Zone: Zona: &Change... &Cambiar... Set timezone to %1/%2.<br/> Configurar zona horaria a %1/%2.<br/> LocaleViewStep Location Ubicación LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Generar identificación-de-máquina. Configuration Error Error de configuración No root mount point is set for MachineId. NetInstallPage Name Nombre Description Descripción Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Instalación a través de la Red. (Desactivada: no se ha podido obtener una lista de paquetes, comprueba tu conexión a la red) Network Installation. (Disabled: Received invalid groups data) Instalación de red. (Deshabilitada: Se recibieron grupos de datos no válidos) Network Installation. (Disabled: Incorrect configuration) NetInstallViewStep Package selection Selección de paquetes Office software Office package Browser software Browser package Web browser Kernel Services Login Desktop Applications NotesQmlViewStep Notes OEMPage Ba&tch: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> OEMViewStep OEM Configuration Set the OEM Batch Identifier to <code>%1</code>. PWQ Password is too short La contraseña es demasiado corta Password is too long La contraseña es demasiado larga Password is too weak La contraseña es demasiado débil Memory allocation error when setting '%1' Error de asignación de memoria al establecer '%1' Memory allocation error Error de asignación de memoria The password is the same as the old one La contraseña es la misma que la antigua The password is a palindrome La contraseña es un palíndromo The password differs with case changes only La contraseña difiere sólo en cambios de mayúsculas/minúsculas The password is too similar to the old one La contraseña es demasiado similar a la antigua The password contains the user name in some form La contraseña contiene el nombre de usuario de alguna forma The password contains words from the real name of the user in some form La contraseña contiene palabras procedentes del nombre real del usuario de alguna forma The password contains forbidden words in some form La contraseña contiene palabras prohibidas de alguna forma The password contains less than %1 digits La contraseña contiene menos de %1 dígitos The password contains too few digits La contraseña contiene demasiado pocos dígitos The password contains less than %1 uppercase letters La contraseña contiene menos de %1 letras mayúsculas The password contains too few uppercase letters La contraseña contiene demasiado pocas letras mayúsculas The password contains less than %1 lowercase letters La contraseña contiene menos de %1 letras mayúsculas The password contains too few lowercase letters La contraseña contiene demasiado pocas letras minúsculas The password contains less than %1 non-alphanumeric characters La contraseña contiene menos de %1 caracteres alfanuméricos The password contains too few non-alphanumeric characters La contraseña contiene demasiado pocos caracteres alfanuméricos The password is shorter than %1 characters La contraseña tiene menos de %1 caracteres The password is too short La contraseña es demasiado corta The password is just rotated old one La contraseña sólo es la antigua invertida The password contains less than %1 character classes La contraseña contiene menos de %1 clases de caracteres The password does not contain enough character classes La contraseña no contiene suficientes clases de caracteres The password contains more than %1 same characters consecutively La contraseña contiene más de %1 caracteres iguales consecutivamente The password contains too many same characters consecutively La contraseña contiene demasiados caracteres iguales consecutivamente The password contains more than %1 characters of the same class consecutively La contraseña contiene más de %1 caracteres de la misma clase consecutivamente The password contains too many characters of the same class consecutively La contraseña contiene demasiados caracteres de la misma clase consecutivamente The password contains monotonic sequence longer than %1 characters La contraseña contiene una secuencia monótona de más de %1 caracteres The password contains too long of a monotonic character sequence La contraseña contiene una secuencia monótona de caracteres demasiado larga No password supplied No se proporcionó contraseña Cannot obtain random numbers from the RNG device No se puede obtener números aleatorios del dispositivo RNG (generador de números aleatorios) Password generation failed - required entropy too low for settings La generación de contraseña falló - la entropía requerida es demasiado baja para la configuración The password fails the dictionary check - %1 La contraseña no paso el test de diccionario - %1 The password fails the dictionary check La contraseña no pasó el test de diccionario Unknown setting - %1 Configuración desconocida - %1 Unknown setting Configuración desconocida Bad integer value of setting - %1 Valor entero de la configuración erróneo - %1 Bad integer value Valor entero erróneo Setting %1 is not of integer type La configuración %1 no es de tipo entero Setting is not of integer type La configuración no es de tipo entero Setting %1 is not of string type La configuración %1 no es de tipo cadena de caracteres Setting is not of string type La configuración no es de tipo cadena de caracteres Opening the configuration file failed No se pudo abrir el fichero de configuración The configuration file is malformed El fichero de configuración está mal formado Fatal failure Fallo fatal Unknown error Error desconocido Password is empty PackageChooserPage Form Formulario Product Name TextLabel Etiqueta de texto Long Product Description Package Selection Please pick a product from the list. The selected product will be installed. PackageChooserViewStep Packages Page_Keyboard Form Formulario Keyboard Model: Modelo de teclado: Type here to test your keyboard Escriba aquí para comprobar su teclado Page_UserSetup Form Formulario What is your name? Nombre What name do you want to use to log in? ¿Qué nombre desea usar para ingresar? Choose a password to keep your account safe. Elija una contraseña para mantener su cuenta segura. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>Ingrese la misma contraseña dos veces para poder revisar los errores al escribir. Una buena contraseña debe contener una mezcla entre letras, números y puntuación, deberá contener al menos ocho caracteres de longitud, y ser cambiada con regularidad.</small> What is the name of this computer? Nombre del equipo Your Full Name login <small>This name will be used if you make the computer visible to others on a network.</small> <small>Este nombre será utilizado si hace este equipo visible para otros en una red.</small> Computer Name Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Conectarse automaticamente sin pedir la contraseña. Use the same password for the administrator account. Usar la misma contraseña para la cuenta de administrador. Choose a password for the administrator account. Elegir una contraseña para la cuenta de administrador. <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Escriba dos veces la contraseña para que se puede verificar en caso de errores al escribir.</small> PartitionLabelsView Root Root Home Inicio Boot Boot EFI system Sistema EFI Swap Swap New partition for %1 Nueva partición de %1 New partition Partición nueva %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space Espacio libre New partition Partición nueva Name Nombre File System Sistema de archivos Mount Point Punto de montaje Size Tamaño PartitionPage Form Formulario Storage de&vice: Dispositivo de almacenamiento: &Revert All Changes &Deshacer todos los cambios New Partition &Table Nueva &tabla de particiones Cre&ate Cre&ar &Edit &Editar &Delete &Borrar New Volume Group Nuevo grupo de volúmenes Resize Volume Group Cambiar el tamaño del grupo de volúmenes Deactivate Volume Group Desactivar grupo de volúmenes Remove Volume Group Remover grupo de volúmenes I&nstall boot loader on: Instalar gestor de arranque en: Are you sure you want to create a new partition table on %1? ¿Está seguro de querer crear una nueva tabla de particiones en %1? Can not create new partition No se puede crear una partición nueva The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. La tabla de particiones en %1 tiene %2 particiones primarias y no se pueden agregar más. Por favor remueva una partición primaria y agregue una partición extendida en su reemplazo. PartitionViewStep Gathering system information... Obteniendo información del sistema... Partitions Particiones Install %1 <strong>alongside</strong> another operating system. Instalar %1 <strong>junto a</strong> otro sistema operativo. <strong>Erase</strong> disk and install %1. <strong>Borrar</strong> disco e instalar %1. <strong>Replace</strong> a partition with %1. <strong>Reemplazar</strong> una partición con %1. <strong>Manual</strong> partitioning. Particionamiento <strong>manual</strong>. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Instalar %1 <strong>junto a</strong> otro sistema operativo en disco <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Borrar</strong> disco <strong>%2</strong> (%3) e instalar %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Reemplazar</strong> una partición en disco <strong>%2</strong> (%3) con %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Particionamiento <strong>manual</strong> en disco <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Disco <strong>%1<strong> (%2) Current: Corriente After: Despúes: No EFI system partition configured No hay una partición del sistema EFI configurada An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. Una partición EFI del sistema es necesaria para empezar %1.<br/><br/>Para configurar una partición EFI, vuelva atrás y seleccione crear un sistema de archivos FAT32 con el argumento <strong>esp</strong> activado y montada en <strong>%2</strong>.<br/><br/>Puede continuar sin configurar una partición EFI pero su sistema puede fallar al arrancar. EFI system partition flag not set Bandera EFI no establecida en la partición del sistema An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Una partición EFI del sistema es necesaria para empezar %1.<br/><br/>Una partición EFI fue configurada para ser montada en <strong>%2</strong> pero su argumento <strong>esp</strong> no fue seleccionado.<br/>Para activar el argumento, vuelva atrás y edite la partición.<br/><br/>Puede continuar sin configurar el argumento pero su sistema puede fallar al arrancar. Boot partition not encrypted Partición de arranque no cifrada A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. Se estableció una partición de arranque aparte junto con una partición raíz cifrada, pero la partición de arranque no está cifrada.<br/><br/>Hay consideraciones de seguridad con esta clase de instalación, porque los ficheros de sistema importantes se mantienen en una partición no cifrada.<br/>Puede continuar si lo desea, pero el desbloqueo del sistema de ficheros ocurrirá más tarde durante el arranque del sistema.<br/>Para cifrar la partición de arranque, retroceda y vuelva a crearla, seleccionando <strong>Cifrar</strong> en la ventana de creación de la partición. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Tarea Plasma Look-and-Feel Could not select KDE Plasma Look-and-Feel package No se pudo seleccionar el paquete Plasma Look-and-Feel de KDE PlasmaLnfPage Form Formulario Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Elija una apariencia para KDE Plasma Desktop. También puede omitir este paso y configurar el aspecto una vez que el sistema está instalado. Al hacer clic en una selección de apariencia, obtendrá una vista previa en vivo de esa apariencia. PlasmaLnfViewStep Look-and-Feel Apariencia PreserveFiles Saving files for later ... Guardando archivos para después ... No files configured to save for later. No hay archivos configurados para guardarlos para después. Not all of the configured files could be preserved. No todos los archivos de configuración se pudieron preservar. ProcessResult There was no output from the command. No hubo salida del comando. Output: Salida: External command crashed. El comando externo falló. Command <i>%1</i> crashed. El comando <i>%1</i> falló. External command failed to start. El comando externo no se pudo iniciar. Command <i>%1</i> failed to start. El comando <i>%1</i> no se pudo iniciar. Internal error when starting command. Error interno al iniciar el comando. Bad parameters for process job call. Parámetros erróneos para la llamada de la tarea del procreso. External command failed to finish. El comando externo no se pudo finalizar. Command <i>%1</i> failed to finish in %2 seconds. El comando <i>%1</i> no se pudo finalizar en %2 segundos. External command finished with errors. El comando externo finalizó con errores. Command <i>%1</i> finished with exit code %2. El comando <i>%1</i> finalizó con un código de salida %2. QObject Default Keyboard Model Modelo de teclado por defecto Default Por defecto unknown desconocido extended extendido unformatted sin formato swap swap Unpartitioned space or unknown partition table Espacio no particionado o tabla de partición desconocida (no mount point) (sin punto de montaje) Requirements checking for module <i>%1</i> is complete. %1 (%2) language[name] (country[name]) %1 (%2) No product No description provided. File not found Path <pre>%1</pre> must be an absolute path. Could not create new random file <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Remover grupo de volúmenes llamado %1. Remove Volume Group named <strong>%1</strong>. Remover grupo de volúmenes llamado <strong>%1</strong>. The installer failed to remove a volume group named '%1'. El instalador no pudo eliminar el grupo de volúmenes denominado «%1». ReplaceWidget Form Formulario Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Seleccione dónde instalar %1<br/><font color="red">Atención: </font>esto borrará todos sus archivos en la partición seleccionada. The selected item does not appear to be a valid partition. El elemento seleccionado no parece ser una partición válida. %1 cannot be installed on empty space. Please select an existing partition. %1 no se puede instalar en el espacio vacío. Por favor, seleccione una partición existente. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 no se puede instalar en una partición extendida. Por favor, seleccione una partición primaria o lógica existente. %1 cannot be installed on this partition. %1 no se puede instalar en esta partición. Data partition (%1) Partición de datos (%1) Unknown system partition (%1) Partición desconocida del sistema (%1) %1 system partition (%2) %1 partición del sistema (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>La partición %1 es demasiado pequeña para %2. Por favor, seleccione una participación con capacidad para al menos %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/>No se puede encontrar una partición de sistema EFI en ninguna parte de este sistema. Por favor, retroceda y use el particionamiento manual para establecer %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>%1 se instalará en %2.<br/><font color="red">Advertencia: </font>Todos los datos en la partición %2 se perderán. The EFI system partition at %1 will be used for starting %2. La partición del sistema EFI en %1 se utilizará para iniciar %2. EFI system partition: Partición del sistema EFI: ResizeFSJob Resize Filesystem Job Tarea de redimensionamiento de sistema de archivos Invalid configuration Configuración no válida The file-system resize job has an invalid configuration and will not run. La tarea de redimensionamiento del sistema de archivos no posee una configuración válida y no se ejecutará. KPMCore not Available KPMCore no disponible Calamares cannot start KPMCore for the file-system resize job. Calamares no puede iniciar KPMCore para la tarea de redimensionamiento del sistema de archivos. Resize Failed Falló el redimiensionamiento The filesystem %1 could not be found in this system, and cannot be resized. No se encontró en este sistema el sistema de archivos %1, por lo que no puede redimensionarse. The device %1 could not be found in this system, and cannot be resized. No se encontró en este sistema el dispositivo %1, por lo que no puede redimensionarse. The filesystem %1 cannot be resized. No puede redimensionarse el sistema de archivos %1. The device %1 cannot be resized. No puede redimensionarse el dispositivo %1. The filesystem %1 must be resized, but cannot. Es necesario redimensionar el sistema de archivos %1 pero no es posible hacerlo. The device %1 must be resized, but cannot Es necesario redimensionar el dispositivo %1 pero no es posible hacerlo. ResizePartitionJob Resize partition %1. Redimensionar partición %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. El instalador ha fallado a la hora de reducir la partición %1 en el disco '%2'. ResizeVolumeGroupDialog Resize Volume Group Cambiar el tamaño del grupo de volúmenes ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Cambiar el tamaño del grupo de volúmenes llamado %1 de %2 a %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. Cambiar el tamaño del grupo de volúmenes llamado <strong>%1</strong> de <strong>%2</strong> a <strong>%3</strong>. The installer failed to resize a volume group named '%1'. El instalador no pudo redimensionar el grupo de volúmenes denominado «%1». ResultsListDialog For best results, please ensure that this computer: Para obtener los mejores resultados, por favor asegúrese que este ordenador: System requirements Requisitos del sistema ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> Este ordenador no cumple los requisitos mínimos para la instalación. %1.<br/>La instalación no puede continuar. <a href="#details">Detalles...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. Este ordenador no cumple alguno de los requisitos recomendados para la instalación %1.<br/>La instalación puede continuar, pero algunas funcionalidades podrían ser deshabilitadas. This program will ask you some questions and set up %2 on your computer. El programa le preguntará algunas cuestiones y configurará %2 en su ordenador. ScanningDialog Scanning storage devices... Dispositivos de almacenamiento de escaneado... Partitioning Particiones SetHostNameJob Set hostname %1 Hostname: %1 Set hostname <strong>%1</strong>. Configurar hostname <strong>%1</strong>. Setting hostname %1. Configurando hostname %1. Internal Error Error interno Cannot write hostname to target system No es posible escribir el hostname en el sistema de destino SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Configurar modelo de teclado a %1, distribución a %2-%3 Failed to write keyboard configuration for the virtual console. Hubo un fallo al escribir la configuración del teclado para la consola virtual. Failed to write to %1 No se puede escribir en %1 Failed to write keyboard configuration for X11. Hubo un fallo al escribir la configuración del teclado para X11. Failed to write keyboard configuration to existing /etc/default directory. No se pudo escribir la configuración de teclado en el directorio /etc/default existente. SetPartFlagsJob Set flags on partition %1. Establecer indicadores en la partición %1. Set flags on %1MiB %2 partition. Set flags on new partition. Establecer indicadores en una nueva partición. Clear flags on partition <strong>%1</strong>. Limpiar indicadores en la partición <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Limpiar indicadores en la nueva partición. Flag partition <strong>%1</strong> as <strong>%2</strong>. Indicar partición <strong>%1</strong> como <strong>%2</strong>. Flag new partition as <strong>%1</strong>. Indicar nueva partición como <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Limpiando indicadores en la partición <strong>%1</strong>. Clearing flags on new partition. Limpiando indicadores en la nueva partición. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Estableciendo indicadores <strong>%2</strong> en la partición <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. Estableciendo indicadores <strong>%1</strong> en una nueva partición. The installer failed to set flags on partition %1. El instalador no pudo establecer indicadores en la partición %1. SetPasswordJob Set password for user %1 Definir contraseña para el usuario %1. Setting password for user %1. Configurando contraseña para el usuario %1. Bad destination system path. Destino erróneo del sistema. rootMountPoint is %1 El punto de montaje de la raíz es %1 Cannot disable root account. No se puede deshabilitar la cuenta root passwd terminated with error code %1. passwd finalizó con el código de error %1. Cannot set password for user %1. No se puede definir contraseña para el usuario %1. usermod terminated with error code %1. usermod ha terminado con el código de error %1 SetTimezoneJob Set timezone to %1/%2 Configurar uso horario a %1/%2 Cannot access selected timezone path. No se puede acceder a la ruta de la zona horaria. Bad path: %1 Ruta errónea: %1 Cannot set timezone. No se puede definir la zona horaria Link creation failed, target: %1; link name: %2 Fallo al crear el enlace, destino: %1; nombre del enlace: %2 Cannot set timezone, No se puede establecer la zona horaria, Cannot open /etc/timezone for writing No se puede abrir/etc/timezone para la escritura ShellProcessJob Shell Processes Job Tarea de procesos del interprete de comandos SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. Esto es una previsualización de que ocurrirá una vez que empiece la instalación. SummaryViewStep Summary Resumen TrackingInstallJob Installation feedback Respuesta de la instalación Sending installation feedback. Enviar respuesta de la instalación Internal error in install-tracking. Error interno en el seguimiento-de-instalación. HTTP request timed out. La petición HTTP agotó el tiempo de espera. TrackingMachineNeonJob Machine feedback Respuesta de la máquina Configuring machine feedback. Configurando respuesta de la máquina. Error in machine feedback configuration. Error en la configuración de la respuesta de la máquina. Could not configure machine feedback correctly, script error %1. No se pudo configurar correctamente la respuesta de la máquina, error de script %1. Could not configure machine feedback correctly, Calamares error %1. No se pudo configurar correctamente la respuesta de la máquina, error de Calamares %1. TrackingPage Form Formulario Placeholder Indicador de posición <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>Al seleccionar esto, no enviará <span style=" font-weight:600;">información en absoluto</span> acerca de su instalación.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Pulse aquí para más información acerca de la respuesta del usuario</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. El seguimiento de instalación ayuda a %1 a ver cuántos usuarios tiene, en qué hardware se instala %1, y (con las últimas dos opciones de debajo) a obtener información continua acerca de las aplicaciones preferidas. Para ver lo que se enviará, por favor, pulse en el icono de ayuda junto a cada área. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. Al seleccionar esto enviará información acerca de su instalación y hardware. Esta información <b>sólo se enviará una vez</b> después de que finalice la instalación. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. Al seleccionar esto enviará información <b>periódicamente</b> acerca de su instalación, hardware y aplicaciones, a %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. Al seleccionar esto enviará información <b>regularmente</b> acerca de su instalación, hardware, aplicaciones y patrones de uso, a %1. TrackingViewStep Feedback Respuesta UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> Your username is too long. Su nombre de usuario es demasiado largo. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Only letters, numbers, underscore and hyphen are allowed. Your hostname is too short. El nombre del Host es demasiado corto. Your hostname is too long. El nombre del Host es demasiado largo. Your passwords do not match! ¡Sus contraseñas no coinciden! UsersViewStep Users Usuarios VariantModel Key Value Valor VolumeGroupBaseDialog Create Volume Group Crear grupo de volúmenes List of Physical Volumes Lista de volúmenes físicos Volume Group Name: Nombre del grupo de volúmenes: Volume Group Type: Tipo del grupo de volúmenes: Physical Extent Size: Tamaño de sector físico: MiB MiB Total Size: Tamaño total: Used Size: Tamaño utilizado Total Sectors: Sectores totales: Quantity of LVs: Cantidad de LVs: WelcomePage Form Formulario Select application and system language Open donations website &Donate Open help and support website Open issues and bug-tracking website Open release notes website &Release notes &Notas de publicación &Known issues &Problemas conocidos &Support &Ayuda &About &Acerca de <h1>Welcome to the %1 installer.</h1> <h1>Bienvenido al instalador %1.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Bienvenido al instalador de Calamares para %1.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Welcome to %1 setup.</h1> About %1 setup Acerca de la configuración %1 About %1 installer Acerca del instalador %1 <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support %1 ayuda WelcomeQmlViewStep Welcome Bienvenido WelcomeViewStep Welcome Bienvenido notesqml <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> About Support Known issues Release notes Donate calamares-3.2.20/lang/calamares_es_MX.ts000066400000000000000000005412301362604102500200460ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. El <strong>entorno de arranque </strong>de este sistema. <br><br>Sistemas antiguos x86 solo admiten <strong>BIOS</strong>. <br>Sistemas modernos usualmente usan <strong>EFI</strong>, pero podrían aparecer como BIOS si inició en modo de compatibilidad. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. Este sistema fue iniciado con un entorno de arranque <strong>EFI. </strong><br><br>Para configurar el arranque desde un entorno EFI, este instalador debe hacer uso de un cargador de arranque, como <strong>GRUB</strong>, <strong>system-boot </strong> o una <strong>Partición de sistema EFI</strong>. Esto es automático, a menos que escoja el particionado manual, en tal caso debe escogerla o crearla por su cuenta. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. Este sistema fue iniciado con un entorno de arranque <strong>BIOS. </strong><br><br>Para configurar el arranque desde un entorno BIOS, este instalador debe instalar un gestor de arranque como <strong>GRUB</strong>, ya sea al inicio de la partición o en el <strong> Master Boot Record</strong> cerca del inicio de la tabla de particiones (preferido). Esto es automático, a menos que escoja el particionado manual, en este caso debe configurarlo por su cuenta. BootLoaderModel Master Boot Record of %1 Master Boot Record de %1 Boot Partition Partición de arranque System Partition Partición del Sistema Do not install a boot loader No instalar el gestor de arranque %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page Página en blanco Calamares::DebugWindow Form Formulario GlobalStorage Almacenamiento Global JobQueue Cola de trabajo Modules Módulos Type: Tipo: none ninguno Interface: Interfaz: Tools Herramientas Reload Stylesheet Widget Tree Debug information Información de depuración Calamares::ExecutionViewStep Set up Preparar Install Instalar Calamares::FailJob Job failed (%1) Trabajo fallido (%1) Programmed job failure was explicitly requested. Falla del trabajo programado fue solicitado explícitamente. Calamares::JobThread Done Hecho Calamares::NamedJob Example job (%1) Trabajo de ejemplo. (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Ejecutando comando %1 %2 Calamares::PythonJob Running %1 operation. Ejecutando operación %1. Bad working directory path Ruta a la carpeta de trabajo errónea Working directory %1 for python job %2 is not readable. La carpeta de trabajo %1 para la tarea de python %2 no es accesible. Bad main script file Script principal erróneo Main script file %1 for python job %2 is not readable. El script principal %1 del proceso python %2 no es accesible. Boost.Python error in job "%1". Error Boost.Python en el proceso "%1". Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Chequeo de requerimientos del sistema completado. Calamares::ViewManager &Back &Atrás &Next &Siguiente &Cancel &Cancelar Cancel setup without changing the system. Cancelar la configuración sin cambiar el sistema. Cancel installation without changing the system. Cancelar instalación sin cambiar el sistema. Setup Failed Fallo en la configuración. Would you like to paste the install log to the web? Install Log Paste URL The upload was unsuccessful. No web-paste was done. Calamares Initialization Failed La inicialización de Calamares ha fallado %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. %1 no pudo ser instalado. Calamares no pudo cargar todos los módulos configurados. Este es un problema con la forma en que Calamares esta siendo usada por la distribución. <br/>The following modules could not be loaded: <br/>Los siguientes módulos no pudieron ser cargados: Continue with installation? ¿Continuar con la instalación? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> El %1 programa de instalación esta a punto de realizar cambios a su disco con el fin de establecer %2.<br/><strong>Usted no podrá deshacer estos cambios.</strong> &Set up now &Configurar ahora &Set up &Configurar &Install &Instalar Setup is complete. Close the setup program. Configuración completa. Cierre el programa de instalación. Cancel setup? ¿Cancelar la configuración? Cancel installation? ¿Cancelar la instalación? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. ¿Realmente desea cancelar el actual proceso de configuración? El programa de instalación se cerrará y todos los cambios se perderán. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. ¿Realmente desea cancelar el proceso de instalación actual? El instalador terminará y se perderán todos los cambios. &Yes &Si &No &No &Close &Cerrar Continue with setup? ¿Continuar con la instalación? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> El instalador %1 va a realizar cambios en su disco para instalar %2.<br/><strong>No podrá deshacer estos cambios.</strong> &Install now &Instalar ahora Go &back &Regresar &Done &Hecho The installation is complete. Close the installer. Instalación completa. Cierre el instalador. Error Error Installation Failed Instalación Fallida CalamaresPython::Helper Unknown exception type Tipo de excepción desconocida unparseable Python error error Python no analizable unparseable Python traceback rastreo de Python no analizable Unfetchable Python error. Error de Python inalcanzable. CalamaresUtils Install log posted to: %1 CalamaresWindow %1 Setup Program %1 Programa de instalación %1 Installer %1 Instalador Show debug information Mostrar información de depuración CheckerContainer Gathering system information... Obteniendo información del sistema... ChoicePage Form Formulario After: Después: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Particionado manual </strong><br/> Puede crear o cambiar el tamaño de las particiones usted mismo. Boot loader location: Ubicación del cargador de arranque: Select storage de&vice: Seleccionar dispositivo de almacenamiento: Current: Actual: Reuse %1 as home partition for %2. Reuse %1 como partición home para %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Seleccione una partición para reducir el tamaño, a continuación, arrastre la barra inferior para redimencinar</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 será reducido a %2MiB y una nueva %3MiB partición se creará para %4. <strong>Select a partition to install on</strong> <strong>Seleccione una partición para instalar</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. No se puede encontrar en el sistema una partición EFI. Por favor vuelva atrás y use el particionamiento manual para configurar %1. The EFI system partition at %1 will be used for starting %2. La partición EFI en %1 será usada para iniciar %2. EFI system partition: Partición de sistema EFI: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Este dispositivo de almacenamiento parece no tener un sistema operativo en el. ¿que le gustaría hacer?<br/> Usted podrá revisar y confirmar sus elecciones antes que cualquier cambio se realice al dispositivo de almacenamiento. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Borrar disco</strong> <br/>Esto <font color="red">borrará</font> todos los datos presentes actualmente en el dispositivo de almacenamiento seleccionado. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Este dispositivo de almacenamiento tiene %1 en el. ¿Que le gustaría hacer? <br/>Usted podrá revisar y confirmar sus elecciones antes de que cualquier cambio se realice al dispositivo de almacenamiento. No Swap Sin Swap Reuse Swap Reutilizar Swap Swap (no Hibernate) Swap (sin hibernación) Swap (with Hibernate) Swap (con hibernación) Swap to file Swap a archivo <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Instalar junto a</strong> <br/>El instalador reducirá una partición con el fin de hacer espacio para %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Reemplazar una partición</strong> <br/>Reemplaza una partición con %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Este dispositivo de almacenamiento ya tiene un sistema operativo en el. ¿Que le gustaría hacer?<br/> Usted podrá revisar y confirmar sus elecciones antes que cualquier cambio se realice al dispositivo de almacenamiento. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Este dispositivo de almacenamiento tiene múltiples sistemas operativos en el. ¿Que le gustaria hacer?<br/> Usted podrá revisar y confirmar sus elecciones antes que cualquier cambio se realice al dispositivo de almacenamiento. ClearMountsJob Clear mounts for partitioning operations on %1 Borrar puntos de montaje para operaciones de particionamiento en %1 Clearing mounts for partitioning operations on %1. Borrando puntos de montaje para operaciones de particionamiento en %1. Cleared all mounts for %1 Puntos de montaje despejados para %1 ClearTempMountsJob Clear all temporary mounts. Despejar todos los puntos de montaje temporales. Clearing all temporary mounts. Despejando todos los puntos de montaje temporales. Cannot get list of temporary mounts. No se puede obtener la lista de puntos de montaje temporales. Cleared all temporary mounts. Todos los puntos de montaje temporales despejados. CommandList Could not run command. No puede ejecutarse el comando. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. Este comando se ejecuta en el entorno host y necesita saber la ruta root, pero no hay rootMountPoint definido. The command needs to know the user's name, but no username is defined. Este comando necesita saber el nombre de usuario, pero no hay nombre de usuario definido. ContextualProcessJob Contextual Processes Job Tareas de procesos contextuales CreatePartitionDialog Create a Partition Crear una Partición MiB MiB Partition &Type: &Tipo de partición: &Primary &Primaria E&xtended E&xtendida Fi&le System: Sis&tema de Archivos: LVM LV name Nombre del LVM LV. Flags: Indicadores: &Mount Point: Punto de &Montaje: Si&ze: Ta&maño: En&crypt En&criptar Logical Lógica Primary Primaria GPT GPT Mountpoint already in use. Please select another one. Punto de montaje ya esta en uso. Por favor seleccione otro. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Crear nueva %2MiB partición en %4 (%3) con el sistema de archivos %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Crear nueva<strong>%2MiB</strong> partición en<strong>%2MiB</strong> (%3) con el sistema de archivos <strong>%1</strong>. Creating new %1 partition on %2. Creando nueva partición %1 en %2 The installer failed to create partition on disk '%1'. El instalador falló en crear la partición en el disco '%1'. CreatePartitionTableDialog Create Partition Table Crear Tabla de Particiones Creating a new partition table will delete all existing data on the disk. Crear una nueva tabla de particiones borrara todos los datos existentes en el disco. What kind of partition table do you want to create? ¿Qué tipo de tabla de particiones desea crear? Master Boot Record (MBR) Master Boot Record (MBR) GUID Partition Table (GPT) Tabla de Particiones GUID (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Crear nueva tabla de partición %1 en %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Crear nueva tabla de particiones <strong>%1</strong> en <strong>%2</strong> (%3). Creating new %1 partition table on %2. Creando nueva tabla de particiones %1 en %2. The installer failed to create a partition table on %1. El instalador falló al crear una tabla de partición en %1. CreateUserJob Create user %1 Crear usuario %1 Create user <strong>%1</strong>. Crear usuario <strong>%1</strong>. Creating user %1. Creando cuenta de susuario %1. Sudoers dir is not writable. El directorio "Sudoers" no es editable. Cannot create sudoers file for writing. No se puede crear el archivo sudoers para editarlo. Cannot chmod sudoers file. No se puede aplicar chmod al archivo sudoers. Cannot open groups file for reading. No se puede abrir el archivo groups para lectura. CreateVolumeGroupDialog Create Volume Group Crear Grupo de Volumen CreateVolumeGroupJob Create new volume group named %1. Crear nuevo grupo de volumen llamado %1. Create new volume group named <strong>%1</strong>. Crear nuevo grupo de volumen llamado <strong>%1</strong>. Creating new volume group named %1. Creando nuevo grupo de volumen llamado %1. The installer failed to create a volume group named '%1'. El instalador no pudo crear un grupo de volumen llamado '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Desactivar el grupo de volúmenes llamado%1. Deactivate volume group named <strong>%1</strong>. Desactivar el grupo de volúmenes llamado<strong>% 1</strong>. The installer failed to deactivate a volume group named %1. El instalador no pudo desactivar un grupo de volúmenes llamado%1. DeletePartitionJob Delete partition %1. Eliminar la partición %1. Delete partition <strong>%1</strong>. Eliminar la partición <strong>%1</strong>. Deleting partition %1. Eliminando partición %1. The installer failed to delete partition %1. El instalador no pudo borrar la partición %1. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. Este tipo de <strong>tabla de partición</strong> en el dispositivo de almacenamiento seleccionado.<br> <br>La única forma de cambiar el tipo de tabla de partición es borrar y recrear la tabla de partición de cero. lo cual destruye todos los datos en el dispositivo de almacenamiento.<br> Este instalador conservará la actual tabla de partición a menos que usted explícitamente elija lo contrario. <br>Si no está seguro, en los sistemas modernos GPT es lo preferible. This device has a <strong>%1</strong> partition table. Este dispositivo tiene una tabla de partición <strong>%1</strong> This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. Este es un dispositivo<br> <strong>loop</strong>. <br>Es un pseudo - dispositivo sin tabla de partición que hace un archivo accesible como un dispositivo bloque. Este tipo de configuración usualmente contiene un solo sistema de archivos. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. Este instalador <strong>no puede detectar una tabla de partición</strong> en el dispositivo de almacenamiento seleccionado.<br> <br>El dispositivo o no tiene tabla de partición, o la tabla de partición esta corrupta o de un tipo desconocido. <br>Este instalador puede crear una nueva tabla de partición por usted ya sea automáticamente, o a través de la página de particionado manual. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Este es el tipo de tabla de partición recomendada para sistemas modernos que inician desde un entorno de arranque <strong>EFI</strong>. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. <br><br>Este tipo de tabla de partición solo es recomendable en sistemas antiguos que inician desde un entorno de arranque <strong>BIOS</strong>. GPT es recomendado en la otra mayoría de casos.<br><br><strong> Precaución:</strong> La tabla de partición MBR es una era estándar MS-DOS obsoleta.<br> Unicamente 4 particiones <em>primarias</em> pueden ser creadas, y de esas 4, una puede ser una partición <em>extendida</em>, la cual puede a su vez contener varias particiones <em>logicas</em>. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1 - (%2) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Escribe configuración LUKS para Dracut a %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Omitir escritura de configuración LUKS por Dracut: "/" partición no está encriptada. Failed to open %1 Falla al abrir %1 DummyCppJob Dummy C++ Job Trabajo C++ Simulado EditExistingPartitionDialog Edit Existing Partition Editar Partición Existente Content: Contenido: &Keep &Conservar Format Formato Warning: Formatting the partition will erase all existing data. Advertencia: Formatear la partición borrara todos los datos existentes. &Mount Point: Punto de &Montaje Si&ze: Tam&año: MiB MiB Fi&le System: Sis&tema de Archivos: Flags: Indicadores: Mountpoint already in use. Please select another one. Punto de montaje ya esta en uso. Por favor seleccione otro. EncryptWidget Form Formulario En&crypt system En&criptar sistema Passphrase Contraseña segura Confirm passphrase Confirmar contraseña segura Please enter the same passphrase in both boxes. Favor ingrese la misma contraseña segura en ambas casillas. FillGlobalStorageJob Set partition information Fijar información de la partición. Install %1 on <strong>new</strong> %2 system partition. Instalar %1 en <strong>nueva</strong> %2 partición de sistema. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Configurar <strong>nueva</strong> %2 partición con punto de montaje <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Instalar %2 en %3 partición del sistema <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Configurar %3 partición <strong>%1</strong> con punto de montaje <strong>%2</strong>. Install boot loader on <strong>%1</strong>. Instalar el cargador de arranque en <strong>%1</strong>. Setting up mount points. Configurando puntos de montaje. FinishedPage Form Formulario <Restart checkbox tooltip> <Restart checkbox tooltip> &Restart now &Reiniciar ahora <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>Todo listo.</h1><br/>% 1 se ha configurado en su computadora. <br/>Ahora puede comenzar a usar su nuevo sistema. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <html><head/><body><p>Cuando esta casilla está marcada, su sistema se reiniciará inmediatamente cuando haga clic en <span style="font-style:italic;">Listo</span> o cierre el programa de instalación.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>Listo.</h1><br/>%1 ha sido instalado en su computadora.<br/>Ahora puede reiniciar su nuevo sistema, o continuar usando el entorno Live %2. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Instalación fallida</h1> <br/>%1 no ha sido instalado en su computador. <br/>El mensaje de error es: %2. FinishedViewStep Finish Terminado Setup Complete Installation Complete Instalación Completa The setup of %1 is complete. The installation of %1 is complete. La instalación de %1 está completa. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatting partition %1 with file system %2. Formateando partición %1 con sistema de archivos %2. The installer failed to format partition %1 on disk '%2'. El instalador no ha podido formatear la partición %1 en el disco '%2' GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source está conectado a una fuente de energía The system is not plugged in to a power source. El sistema no está conectado a una fuente de energía. is connected to the Internet está conectado a Internet The system is not connected to the Internet. El sistema no está conectado a Internet. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. El instalador no se está ejecutando con privilegios de administrador. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. La pantalla es muy pequeña para mostrar el instalador HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Konsole no instalado Please install KDE Konsole and try again! Favor instale la Konsola KDE e intentelo de nuevo! Executing script: &nbsp;<code>%1</code> Ejecutando script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script Script KeyboardPage Set keyboard model to %1.<br/> Ajustar el modelo de teclado a %1.<br/> Set keyboard layout to %1/%2. Ajustar teclado a %1/%2. KeyboardViewStep Keyboard Teclado LCLocaleDialog System locale setting Configuración de localización del sistema The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. La configuración regional del sistema afecta al idioma y a al conjunto de caracteres para algunos elementos de interfaz de la linea de comandos.<br/>La configuración actual es <strong>%1</strong>. &Cancel &Cancelar &OK &OK LicensePage Form Formulario <h1>License Agreement</h1> I accept the terms and conditions above. Acepto los terminos y condiciones anteriores. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License Licencia LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>controlador %1</strong><br/>por %2 <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>controladores gráficos de %1</strong><br/><font color="Grey">por %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>plugin del navegador %1</strong><br/><font color="Grey">por %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>codec %1</strong><br/><font color="Grey">por %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>paquete %1</strong><br/><font color="Grey">por %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">por %2</font> File: %1 Show the license text Open license agreement in browser. Hide license text LocalePage The system language will be set to %1. El lenguaje del sistema será establecido a %1. The numbers and dates locale will be set to %1. Los números y datos locales serán establecidos a %1. Region: Región: Zone: Zona: &Change... &Cambiar... Set timezone to %1/%2.<br/> Definir la zona horaria como %1/%2.<br/> LocaleViewStep Location Ubicación LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Generar identificación de la maquina. Configuration Error No root mount point is set for MachineId. NetInstallPage Name Nombre Description Descripción Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Instalación de Red. (Deshabilitada: No se puede acceder a la lista de paquetes, verifique su conección de red) Network Installation. (Disabled: Received invalid groups data) Instalación de Red. (Deshabilitada: Grupos de datos invalidos recibidos) Network Installation. (Disabled: Incorrect configuration) NetInstallViewStep Package selection Selección de paquete Office software Office package Browser software Browser package Web browser Kernel Services Login Desktop Applications NotesQmlViewStep Notes OEMPage Ba&tch: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> OEMViewStep OEM Configuration Set the OEM Batch Identifier to <code>%1</code>. PWQ Password is too short La contraseña es muy corta Password is too long La contraseña es muy larga Password is too weak La contraseña es muy débil Memory allocation error when setting '%1' Error de asignación de memoria al configurar '%1' Memory allocation error Error en la asignación de memoria The password is the same as the old one La contraseña es la misma que la anterior The password is a palindrome La contraseña es un Palíndromo The password differs with case changes only La contraseña solo difiere en cambios de mayúsculas y minúsculas The password is too similar to the old one La contraseña es muy similar a la anterior. The password contains the user name in some form La contraseña contiene el nombre de usuario de alguna forma The password contains words from the real name of the user in some form La contraseña contiene palabras del nombre real del usuario de alguna forma The password contains forbidden words in some form La contraseña contiene palabras prohibidas de alguna forma The password contains less than %1 digits La contraseña contiene menos de %1 dígitos The password contains too few digits La contraseña contiene muy pocos dígitos The password contains less than %1 uppercase letters La contraseña contiene menos de %1 letras mayúsculas The password contains too few uppercase letters La contraseña contiene muy pocas letras mayúsculas The password contains less than %1 lowercase letters La contraseña continee menos de %1 letras minúsculas The password contains too few lowercase letters La contraseña contiene muy pocas letras minúsculas The password contains less than %1 non-alphanumeric characters La contraseña contiene menos de %1 caracteres no alfanuméricos The password contains too few non-alphanumeric characters La contraseña contiene muy pocos caracteres alfanuméricos The password is shorter than %1 characters La contraseña es mas corta que %1 caracteres The password is too short La contraseña es muy corta The password is just rotated old one La contraseña solo es la rotación de la anterior The password contains less than %1 character classes La contraseña contiene menos de %1 tipos de caracteres The password does not contain enough character classes La contraseña no contiene suficientes tipos de caracteres The password contains more than %1 same characters consecutively La contraseña contiene más de %1 caracteres iguales consecutivamente The password contains too many same characters consecutively La contraseña contiene muchos caracteres iguales repetidos consecutivamente The password contains more than %1 characters of the same class consecutively La contraseña contiene mas de %1 caracteres de la misma clase consecutivamente The password contains too many characters of the same class consecutively La contraseña contiene muchos caracteres de la misma clase consecutivamente The password contains monotonic sequence longer than %1 characters La contraseña contiene secuencias monotónicas mas larga que %1 caracteres The password contains too long of a monotonic character sequence La contraseña contiene secuencias monotónicas muy largas No password supplied Contraseña no suministrada Cannot obtain random numbers from the RNG device No pueden obtenerse números aleatorios del dispositivo RING Password generation failed - required entropy too low for settings Generación de contraseña fallida - entropía requerida muy baja para los ajustes The password fails the dictionary check - %1 La contraseña falla el chequeo del diccionario %1 The password fails the dictionary check La contraseña falla el chequeo del diccionario Unknown setting - %1 Configuración desconocida - %1 Unknown setting Configuración desconocida Bad integer value of setting - %1 Valor entero de configuración incorrecto - %1 Bad integer value Valor entero incorrecto Setting %1 is not of integer type Ajuste de % 1 no es de tipo entero Setting is not of integer type Ajuste no es de tipo entero Setting %1 is not of string type El ajuste %1 no es de tipo cadena Setting is not of string type El ajuste no es de tipo cadena Opening the configuration file failed Apertura del archivo de configuración fallida The configuration file is malformed El archivo de configuración está malformado Fatal failure Falla fatal Unknown error Error desconocido Password is empty PackageChooserPage Form Formulario Product Name TextLabel Etiqueta de texto Long Product Description Package Selection Please pick a product from the list. The selected product will be installed. PackageChooserViewStep Packages Page_Keyboard Form Formulario Keyboard Model: Modelo de teclado: Type here to test your keyboard Teclee aquí para probar su teclado Page_UserSetup Form Formulario What is your name? ¿Cuál es su nombre? What name do you want to use to log in? ¿Qué nombre desea usar para acceder al sistema? Choose a password to keep your account safe. Seleccione una contraseña para mantener segura su cuenta. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>Escribe dos veces la misma contraseña para que se pueda comprobar si tiene errores. Una buena contraseña está formada por letras, números y signos de puntuación, tiene por lo menos ocho caracteres y hay que cambiarla cada cierto tiempo.</small> What is the name of this computer? ¿Cuál es el nombre de esta computadora? Your Full Name login <small>This name will be used if you make the computer visible to others on a network.</small> <small>Este nombre sera usado si hace esta computadora visible para otros en una red.</small> Computer Name Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Iniciar sesión automáticamente sin preguntar por la contraseña. Use the same password for the administrator account. Usar la misma contraseña para la cuenta de administrador. Choose a password for the administrator account. Elegir una contraseña para la cuenta de administrador. <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Escribe dos veces la contraseña para comprobar si tiene errores</small> PartitionLabelsView Root Root Home Home Boot Boot EFI system Sistema EFI Swap Swap New partition for %1 Partición nueva para %1 New partition Partición nueva %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space Espacio libre New partition Partición nueva Name Nombre File System Sistema de archivos Mount Point Punto de montaje Size Tamaño PartitionPage Form Formulario Storage de&vice: Dis&positivo de almacenamiento: &Revert All Changes &Deshacer todos los cambios New Partition &Table Nueva &tabla de particiones Cre&ate Cre&ar &Edit &Editar &Delete &Borrar New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group I&nstall boot loader on: Are you sure you want to create a new partition table on %1? ¿Está seguro de querer crear una nueva tabla de particiones en %1? Can not create new partition No se puede crear nueva partición The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. La tabla de partición en %1 ya tiene %2 particiones primarias, y no pueden agregarse mas. Favor remover una partición primaria y en cambio, agregue una partición extendida. PartitionViewStep Gathering system information... Obteniendo información del sistema... Partitions Particiones Install %1 <strong>alongside</strong> another operating system. Instalar %1 <strong>junto con</strong> otro sistema operativo. <strong>Erase</strong> disk and install %1. <strong>Borrar</strong> el disco e instalar %1. <strong>Replace</strong> a partition with %1. <strong>Reemplazar</strong> una parición con %1. <strong>Manual</strong> partitioning. Particionamiento <strong>manual</strong>. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Instalar %1 <strong>junto con</strong> otro sistema operativo en el disco <strong>%2</strong>(%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Borrar</strong> el disco <strong>%2<strong> (%3) e instalar %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Reemplazar</strong> una parición en el disco <strong>%2</strong> (%3) con %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Particionar <strong>manualmente</strong> el disco <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Disco <strong>%1</strong> (%2) Current: Actual: After: Después: No EFI system partition configured Sistema de partición EFI no configurada An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. Un sistema de partición EFI es necesario para iniciar %1. <br/><br/>Para configurar un sistema de partición EFI, Regrese y seleccione o cree un sistema de archivos FAT32 con la bandera <strong>esp</strong> activada y el punto de montaje <strong>%2</strong>. <br/><br/>Puede continuar sin configurar una partición de sistema EFI, pero su sistema podría fallar al iniciar. EFI system partition flag not set Indicador de partición del sistema EFI no configurado An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Una partición del sistema EFI es necesaria para iniciar% 1. <br/><br/>Una partición se configuró con el punto de montaje <strong>% 2</strong>, pero su bandera <strong>esp</strong> no está configurada. <br/>Para establecer el indicador, retroceda y edite la partición.<br/><br/> Puede continuar sin configurar el indicador, pero su sistema puede fallar al iniciar. Boot partition not encrypted Partición de arranque no encriptada A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. Se creó una partición de arranque separada junto con una partición raíz cifrada, pero la partición de arranque no está encriptada.<br/><br/> Existen problemas de seguridad con este tipo de configuración, ya que los archivos importantes del sistema se guardan en una partición no encriptada. <br/>Puede continuar si lo desea, pero el desbloqueo del sistema de archivos ocurrirá más tarde durante el inicio del sistema. <br/>Para encriptar la partición de arranque, retroceda y vuelva a crearla, seleccionando <strong>Encriptar</strong> en la ventana de creación de la partición. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Trabajo Plasma Look-and-Feel Could not select KDE Plasma Look-and-Feel package No se pudo seleccionar el paquete KDE Plasma Look-and-Feel PlasmaLnfPage Form Formulario Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Favor seleccione un Escritorio Plasma KDE Look-and-Feel. También puede omitir este paso y configurar el Look-and-Feel una vez el sistema está instalado. Haciendo clic en la selección Look-and-Feel le dará una previsualización en vivo de ese Look-and-Feel. PlasmaLnfViewStep Look-and-Feel Look-and-Feel PreserveFiles Saving files for later ... Guardando archivos para más tarde ... No files configured to save for later. No hay archivos configurados para guardar más tarde. Not all of the configured files could be preserved. No todos los archivos configurados podrían conservarse. ProcessResult There was no output from the command. No hubo salida desde el comando. Output: Salida External command crashed. El comando externo ha fallado. Command <i>%1</i> crashed. El comando <i>%1</i> ha fallado. External command failed to start. El comando externo falló al iniciar. Command <i>%1</i> failed to start. El comando <i>%1</i> Falló al iniciar. Internal error when starting command. Error interno al iniciar el comando. Bad parameters for process job call. Parámetros erróneos en la llamada al proceso. External command failed to finish. Comando externo falla al finalizar Command <i>%1</i> failed to finish in %2 seconds. Comando <i>%1</i> falló al finalizar en %2 segundos. External command finished with errors. Comando externo finalizado con errores Command <i>%1</i> finished with exit code %2. Comando <i>%1</i> finalizó con código de salida %2. QObject Default Keyboard Model Modelo de teclado por defecto Default Por defecto unknown desconocido extended extendido unformatted no formateado swap swap Unpartitioned space or unknown partition table Espacio no particionado o tabla de partición desconocida (no mount point) Requirements checking for module <i>%1</i> is complete. %1 (%2) language[name] (country[name]) %1 (%2) No product No description provided. File not found Path <pre>%1</pre> must be an absolute path. Could not create new random file <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form Formulario Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Selecciona donde instalar %1.<br/><font color="red">Aviso: </font>Se borrarán todos los archivos de la partición seleccionada. The selected item does not appear to be a valid partition. El elemento seleccionado no parece ser una partición válida. %1 cannot be installed on empty space. Please select an existing partition. %1 no se puede instalar en un espacio vacío. Selecciona una partición existente. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 no se puede instalar en una partición extendida. Selecciona una partición primaria o lógica. %1 cannot be installed on this partition. No se puede instalar %1 en esta partición. Data partition (%1) Partición de datos (%1) Unknown system partition (%1) Partición de sistema desconocida (%1) %1 system partition (%2) %1 partición de sistema (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>La partición %1 es muy pequeña para %2. Selecciona otra partición que tenga al menos %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/>No se puede encontrar una partición EFI en este sistema. Por favor vuelva atrás y use el particionamiento manual para configurar %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>%1 sera instalado en %2.<br/><font color="red">Advertencia: </font>toda la información en la partición %2 se perdera. The EFI system partition at %1 will be used for starting %2. La partición EFI en %1 será usada para iniciar %2. EFI system partition: Partición de sistema EFI: ResizeFSJob Resize Filesystem Job Invalid configuration Configuración inválida The file-system resize job has an invalid configuration and will not run. KPMCore not Available KPMCore no está disponible Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. Redimensionar partición %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. El instalador ha fallado al reducir la partición %1 en el disco '%2'. ResizeVolumeGroupDialog Resize Volume Group ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: Para mejores resultados, por favor verifique que esta computadora: System requirements Requisitos de sistema ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> Este equipo no cumple los requisitos mínimos para la instalación. %1.<br/>La instalación no puede continuar. <a href="#details">Detalles...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. Este equipo no cumple alguno de los requisitos recomendados para la instalación %1.<br/>La instalación puede continuar, pero algunas funcionalidades podrían ser deshabilitadas. This program will ask you some questions and set up %2 on your computer. El programa le hará algunas preguntas y configurará %2 en su ordenador. ScanningDialog Scanning storage devices... Escaneando dispositivos de almacenamiento... Partitioning Particionando SetHostNameJob Set hostname %1 Hostname: %1 Set hostname <strong>%1</strong>. Establecer nombre del equipo <strong>%1</strong>. Setting hostname %1. Configurando nombre de host %1. Internal Error Error interno Cannot write hostname to target system No es posible escribir el hostname en el sistema de destino SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Establecer el modelo de teclado %1, a una disposición %2-%3 Failed to write keyboard configuration for the virtual console. No se ha podido guardar la configuración de teclado para la consola virtual. Failed to write to %1 No se ha podido escribir en %1 Failed to write keyboard configuration for X11. No se ha podido guardar la configuración del teclado de X11. Failed to write keyboard configuration to existing /etc/default directory. Fallo al escribir la configuración del teclado en el directorio /etc/default existente. SetPartFlagsJob Set flags on partition %1. Establecer indicadores en la partición% 1. Set flags on %1MiB %2 partition. Set flags on new partition. Establecer indicadores en la nueva partición. Clear flags on partition <strong>%1</strong>. Borrar indicadores en la partición <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Borrar indicadores en la nueva partición. Flag partition <strong>%1</strong> as <strong>%2</strong>. Indicador de partición <strong>%1</strong> como <strong>%2</strong>. Flag new partition as <strong>%1</strong>. Marcar la nueva partición como <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Borrar indicadores en la partición <strong>%1</strong>. Clearing flags on new partition. Borrar indicadores en la nueva partición. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Establecer indicadores <strong>%2</strong> en la partición <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. Establecer indicadores <strong>%1</strong> en nueva partición. The installer failed to set flags on partition %1. El instalador no pudo establecer indicadores en la partición% 1. SetPasswordJob Set password for user %1 Definir contraseña para el usuario %1. Setting password for user %1. Configurando contraseña para el usuario %1. Bad destination system path. Destino erróneo del sistema. rootMountPoint is %1 El punto de montaje de root es %1 Cannot disable root account. No se puede deshabilitar la cuenta root. passwd terminated with error code %1. Contraseña terminada con un error de código %1. Cannot set password for user %1. No se puede definir contraseña para el usuario %1. usermod terminated with error code %1. usermod ha terminado con el código de error %1 SetTimezoneJob Set timezone to %1/%2 Configurar zona horaria a %1/%2 Cannot access selected timezone path. No se puede acceder a la ruta de la zona horaria. Bad path: %1 Ruta errónea: %1 Cannot set timezone. No se puede definir la zona horaria Link creation failed, target: %1; link name: %2 Fallo al crear el enlace, destino: %1; nombre del enlace: %2 Cannot set timezone, No se puede establer la zona horaria. Cannot open /etc/timezone for writing No se puede abrir /etc/timezone para escritura ShellProcessJob Shell Processes Job Trabajo de procesos Shell SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage This is an overview of what will happen once you start the setup procedure. Esta es una descripción general de lo que sucederá una vez que comience el procedimiento de configuración. This is an overview of what will happen once you start the install procedure. Esto es un resumen de lo que pasará una vez que inicie el procedimiento de instalación. SummaryViewStep Summary Resumen TrackingInstallJob Installation feedback Retroalimentacion de la instalación Sending installation feedback. Envío de retroalimentación de instalación. Internal error in install-tracking. Error interno en el seguimiento de instalación. HTTP request timed out. Tiempo de espera en la solicitud HTTP agotado. TrackingMachineNeonJob Machine feedback Retroalimentación de la maquina Configuring machine feedback. Configurando la retroalimentación de la maquina. Error in machine feedback configuration. Error en la configuración de retroalimentación de la máquina. Could not configure machine feedback correctly, script error %1. No se pudo configurar correctamente la retroalimentación de la máquina, error de script% 1. Could not configure machine feedback correctly, Calamares error %1. No se pudo configurar la retroalimentación de la máquina correctamente, Calamares error% 1. TrackingPage Form Formulario Placeholder Marcador de posición <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>Al seleccionar esto, usted no enviará <span style=" font-weight:600;">ninguna información</span> acerca de su instalacion.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Haga clic aquí para más información acerca de comentarios del usuario</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. El seguimiento de instalación ayuda a% 1 a ver cuántos usuarios tienen, qué hardware instalan% 1 y (con las dos últimas opciones a continuación), obtener información continua sobre las aplicaciones preferidas. Para ver qué se enviará, haga clic en el ícono de ayuda al lado de cada área. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. Al seleccionar esto usted enviará información acerca de su instalación y hardware. Esta informacion será <b>enviada unicamente una vez</b> después de terminada la instalación. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. Al seleccionar esto usted enviará información <b>periodicamente</b> acerca de su instalación, hardware y aplicaciones a %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. Al seleccionar esto usted enviará información <b>regularmente</b> acerca de su instalación, hardware y patrones de uso de aplicaciones a %1. TrackingViewStep Feedback Retroalimentación UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Si más de una persona usará esta computadora, puede crear múltiples cuentas después de la configuración</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Si más de una persona usará esta computadora, puede crear varias cuentas después de la instalación.</small> Your username is too long. Tu nombre de usuario es demasiado largo. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Only letters, numbers, underscore and hyphen are allowed. Your hostname is too short. El nombre de tu equipo es demasiado corto. Your hostname is too long. El nombre de tu equipo es demasiado largo. Your passwords do not match! Las contraseñas no coinciden! UsersViewStep Users Usuarios VariantModel Key Value Valor VolumeGroupBaseDialog Create Volume Group Crear Grupo de Volumen List of Physical Volumes Lista de volúmenes físicos Volume Group Name: Nombre de Grupo de volumen: Volume Group Type: Tipo de Grupo de volumen: Physical Extent Size: Tamaño de la extensión física: MiB MiB Total Size: Tamaño total: Used Size: Tamaño usado: Total Sectors: Total de Sectores: Quantity of LVs: Cantidad de LVs: WelcomePage Form Formulario Select application and system language Open donations website &Donate Open help and support website Open issues and bug-tracking website Open release notes website &Release notes &Notas de lanzamiento &Known issues &Problemas Conocidos &Support &Soporte &About &Acerca de <h1>Welcome to the %1 installer.</h1> <h1>Bienvenido al instalador de %1.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Bienvenido al instalador Calamares para %1.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Bienvenido al programa de instalación Calamares para %1.</h1> <h1>Welcome to %1 setup.</h1> <h1>Bienvenido a la configuración %1</h1> About %1 setup Acerca de la configuración %1 About %1 installer Acerca del instalador %1 <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support %1 Soporte WelcomeQmlViewStep Welcome Bienvenido WelcomeViewStep Welcome Bienvenido notesqml <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> About Support Known issues Release notes Donate calamares-3.2.20/lang/calamares_es_PR.ts000066400000000000000000004576101362604102500200530ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. BootLoaderModel Master Boot Record of %1 Registro de arranque maestro de %1 Boot Partition Partición de arranque System Partition Partición del sistema Do not install a boot loader %1 (%2) Calamares::BlankViewStep Blank Page Calamares::DebugWindow Form Formulario GlobalStorage AlmacenamientoGlobal JobQueue ColadeTrabajos Modules Módulos Type: none Interface: Tools Reload Stylesheet Widget Tree Debug information Información de depuración Calamares::ExecutionViewStep Set up Install Instalar Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Hecho Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Calamares::PythonJob Running %1 operation. Bad working directory path La ruta del directorio de trabajo es incorrecta Working directory %1 for python job %2 is not readable. El directorio de trabajo %1 para el script de python %2 no se puede leer. Bad main script file Script principal erróneo Main script file %1 for python job %2 is not readable. El script principal %1 del proceso python %2 no es accesible. Boost.Python error in job "%1". Error Boost.Python en el proceso "%1". Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager &Back &Atrás &Next &Próximo &Cancel Cancel setup without changing the system. Cancel installation without changing the system. Setup Failed Would you like to paste the install log to the web? Install Log Paste URL The upload was unsuccessful. No web-paste was done. Calamares Initialization Failed %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. <br/>The following modules could not be loaded: Continue with installation? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Set up &Install Setup is complete. Close the setup program. Cancel setup? Cancel installation? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. &Yes &No &Close Continue with setup? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> &Install now Go &back &Done The installation is complete. Close the installer. Error Error Installation Failed Falló la instalación CalamaresPython::Helper Unknown exception type unparseable Python error unparseable Python traceback Unfetchable Python error. CalamaresUtils Install log posted to: %1 CalamaresWindow %1 Setup Program %1 Installer Show debug information CheckerContainer Gathering system information... ChoicePage Form Formulario After: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Boot loader location: Select storage de&vice: Current: Reuse %1 as home partition for %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. <strong>Select a partition to install on</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. The EFI system partition at %1 will be used for starting %2. EFI system partition: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. No Swap Reuse Swap Swap (no Hibernate) Swap (with Hibernate) Swap to file <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. ClearMountsJob Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 ClearTempMountsJob Clear all temporary mounts. Clearing all temporary mounts. Cannot get list of temporary mounts. Cleared all temporary mounts. CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition MiB Partition &Type: &Primary E&xtended Fi&le System: LVM LV name Flags: &Mount Point: Si&ze: En&crypt Logical Primary GPT Mountpoint already in use. Please select another one. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. The installer failed to create partition on disk '%1'. CreatePartitionTableDialog Create Partition Table Creating a new partition table will delete all existing data on the disk. What kind of partition table do you want to create? Master Boot Record (MBR) GUID Partition Table (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Creating new %1 partition table on %2. The installer failed to create a partition table on %1. CreateUserJob Create user %1 Create user <strong>%1</strong>. Creating user %1. Sudoers dir is not writable. Cannot create sudoers file for writing. Cannot chmod sudoers file. Cannot open groups file for reading. CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. Delete partition <strong>%1</strong>. Deleting partition %1. The installer failed to delete partition %1. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. This device has a <strong>%1</strong> partition table. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - (%2) device[name] - (device-node[name]) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Failed to open %1 DummyCppJob Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Content: &Keep Format Warning: Formatting the partition will erase all existing data. &Mount Point: Si&ze: MiB Fi&le System: Flags: Mountpoint already in use. Please select another one. EncryptWidget Form Formulario En&crypt system Passphrase Confirm passphrase Please enter the same passphrase in both boxes. FillGlobalStorageJob Set partition information Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Install boot loader on <strong>%1</strong>. Setting up mount points. FinishedPage Form Formulario <Restart checkbox tooltip> &Restart now <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. FinishedViewStep Finish Setup Complete Installation Complete The setup of %1 is complete. The installation of %1 is complete. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatting partition %1 with file system %2. The installer failed to format partition %1 on disk '%2'. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source The system is not plugged in to a power source. is connected to the Internet The system is not connected to the Internet. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Please install KDE Konsole and try again! Executing script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script KeyboardPage Set keyboard model to %1.<br/> Set keyboard layout to %1/%2. KeyboardViewStep Keyboard Teclado LCLocaleDialog System locale setting The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. &Cancel &OK LicensePage Form Formulario <h1>License Agreement</h1> I accept the terms and conditions above. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> File: %1 Show the license text Open license agreement in browser. Hide license text LocalePage The system language will be set to %1. The numbers and dates locale will be set to %1. Region: Zone: &Change... Set timezone to %1/%2.<br/> LocaleViewStep Location Ubicación LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Configuration Error No root mount point is set for MachineId. NetInstallPage Name Description Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Incorrect configuration) NetInstallViewStep Package selection Office software Office package Browser software Browser package Web browser Kernel Services Login Desktop Applications NotesQmlViewStep Notes OEMPage Ba&tch: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> OEMViewStep OEM Configuration Set the OEM Batch Identifier to <code>%1</code>. PWQ Password is too short Password is too long Password is too weak Memory allocation error when setting '%1' Memory allocation error The password is the same as the old one The password is a palindrome The password differs with case changes only The password is too similar to the old one The password contains the user name in some form The password contains words from the real name of the user in some form The password contains forbidden words in some form The password contains less than %1 digits The password contains too few digits The password contains less than %1 uppercase letters The password contains too few uppercase letters The password contains less than %1 lowercase letters The password contains too few lowercase letters The password contains less than %1 non-alphanumeric characters The password contains too few non-alphanumeric characters The password is shorter than %1 characters The password is too short The password is just rotated old one The password contains less than %1 character classes The password does not contain enough character classes The password contains more than %1 same characters consecutively The password contains too many same characters consecutively The password contains more than %1 characters of the same class consecutively The password contains too many characters of the same class consecutively The password contains monotonic sequence longer than %1 characters The password contains too long of a monotonic character sequence No password supplied Cannot obtain random numbers from the RNG device Password generation failed - required entropy too low for settings The password fails the dictionary check - %1 The password fails the dictionary check Unknown setting - %1 Unknown setting Bad integer value of setting - %1 Bad integer value Setting %1 is not of integer type Setting is not of integer type Setting %1 is not of string type Setting is not of string type Opening the configuration file failed The configuration file is malformed Fatal failure Unknown error Password is empty PackageChooserPage Form Formulario Product Name TextLabel Long Product Description Package Selection Please pick a product from the list. The selected product will be installed. PackageChooserViewStep Packages Page_Keyboard Form Formulario Keyboard Model: Type here to test your keyboard Page_UserSetup Form Formulario What is your name? What name do you want to use to log in? Choose a password to keep your account safe. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> What is the name of this computer? Your Full Name login <small>This name will be used if you make the computer visible to others on a network.</small> Computer Name Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Use the same password for the administrator account. Choose a password for the administrator account. <small>Enter the same password twice, so that it can be checked for typing errors.</small> PartitionLabelsView Root Home Boot EFI system Swap New partition for %1 New partition %1 %2 size[number] filesystem[name] PartitionModel Free Space New partition Name File System Mount Point Size PartitionPage Form Formulario Storage de&vice: &Revert All Changes New Partition &Table Cre&ate &Edit &Delete New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group I&nstall boot loader on: Are you sure you want to create a new partition table on %1? Can not create new partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. PartitionViewStep Gathering system information... Partitions Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <strong>Replace</strong> a partition with %1. <strong>Manual</strong> partitioning. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Current: After: No EFI system partition configured An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. EFI system partition flag not set An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form Formulario Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: External command crashed. Command <i>%1</i> crashed. External command failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Bad parameters for process job call. Parámetros erróneos para el trabajo en proceso. External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Command <i>%1</i> finished with exit code %2. QObject Default Keyboard Model Default unknown extended unformatted swap Unpartitioned space or unknown partition table (no mount point) Requirements checking for module <i>%1</i> is complete. %1 (%2) language[name] (country[name]) No product No description provided. File not found Path <pre>%1</pre> must be an absolute path. Could not create new random file <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form Formulario Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. The selected item does not appear to be a valid partition. %1 cannot be installed on empty space. Please select an existing partition. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 cannot be installed on this partition. Data partition (%1) Unknown system partition (%1) %1 system partition (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. The EFI system partition at %1 will be used for starting %2. EFI system partition: ResizeFSJob Resize Filesystem Job Invalid configuration The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. ResizeVolumeGroupDialog Resize Volume Group ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: System requirements ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. This program will ask you some questions and set up %2 on your computer. ScanningDialog Scanning storage devices... Partitioning SetHostNameJob Set hostname %1 Set hostname <strong>%1</strong>. Setting hostname %1. Internal Error Cannot write hostname to target system SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Failed to write keyboard configuration for the virtual console. Failed to write to %1 Failed to write keyboard configuration for X11. Failed to write keyboard configuration to existing /etc/default directory. SetPartFlagsJob Set flags on partition %1. Set flags on %1MiB %2 partition. Set flags on new partition. Clear flags on partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag new partition as <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. SetPasswordJob Set password for user %1 Setting password for user %1. Bad destination system path. rootMountPoint is %1 Cannot disable root account. passwd terminated with error code %1. Cannot set password for user %1. usermod terminated with error code %1. SetTimezoneJob Set timezone to %1/%2 Cannot access selected timezone path. Bad path: %1 Cannot set timezone. Link creation failed, target: %1; link name: %2 Cannot set timezone, Cannot open /etc/timezone for writing ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) SummaryPage This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. SummaryViewStep Summary Resumen TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingMachineNeonJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form Formulario Placeholder <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. TrackingViewStep Feedback UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> Your username is too long. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Only letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Your hostname is too long. Your passwords do not match! UsersViewStep Users VariantModel Key Value VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB Total Size: Used Size: Total Sectors: Quantity of LVs: WelcomePage Form Formulario Select application and system language Open donations website &Donate Open help and support website Open issues and bug-tracking website Open release notes website &Release notes &Known issues &Support &About <h1>Welcome to the %1 installer.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Welcome to %1 setup.</h1> About %1 setup About %1 installer <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support WelcomeQmlViewStep Welcome WelcomeViewStep Welcome notesqml <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> About Support Known issues Release notes Donate calamares-3.2.20/lang/calamares_et.ts000066400000000000000000005310651362604102500174500ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. Selle süsteemi <strong>käivituskeskkond</strong>.<br><br>Vanemad x86 süsteemid toetavad ainult <strong>BIOS</strong>i.<br>Modernsed süsteemid tavaliselt kasutavad <strong>EFI</strong>t, aga võib ka kasutada BIOSi, kui käivitatakse ühilduvusrežiimis. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. See süsteem käivitati <strong>EFI</strong> käivituskeskkonnas.<br><br>Et seadistada käivitust EFI keskkonnast, peab see paigaldaja paigaldama käivituslaaduri rakenduse, näiteks <strong>GRUB</strong> või <strong>systemd-boot</strong> sinu <strong>EFI süsteemipartitsioonile</strong>. See on automaatne, välja arvatud juhul, kui valid käsitsi partitsioneerimise, sel juhul pead sa selle valima või ise looma. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. See süsteem käivitati <strong>BIOS</strong> käivituskeskkonnas.<br><br>Et seadistada käivitust BIOS keskkonnast, peab see paigaldaja paigaldama käivituslaaduri, näiteks <strong>GRUB</strong>, kas mõne partitsiooni algusse või <strong>Master Boot Record</strong>'i paritsioonitabeli alguse lähedale (eelistatud). See on automaatne, välja arvatud juhul, kui valid käsitsi partitsioneerimise, sel juhul pead sa selle ise seadistama. BootLoaderModel Master Boot Record of %1 %1 Master Boot Record Boot Partition Käivituspartitsioon System Partition Süsteemipartitsioon Do not install a boot loader Ära paigalda käivituslaadurit %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page Tühi leht Calamares::DebugWindow Form Form GlobalStorage GlobalStorage JobQueue JobQueue Modules Moodulid Type: Tüüp: none puudub Interface: Liides: Tools Tööriistad Reload Stylesheet Widget Tree Debug information Silumisteave Calamares::ExecutionViewStep Set up Install Paigalda Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Valmis Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Käivitan käsklust %1 %2 Calamares::PythonJob Running %1 operation. Käivitan %1 tegevust. Bad working directory path Halb töökausta tee Working directory %1 for python job %2 is not readable. Töökaust %1 python tööle %2 pole loetav. Bad main script file Halb põhiskripti fail Main script file %1 for python job %2 is not readable. Põhiskripti fail %1 python tööle %2 pole loetav. Boost.Python error in job "%1". Boost.Python viga töös "%1". Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager &Back &Tagasi &Next &Edasi &Cancel &Tühista Cancel setup without changing the system. Cancel installation without changing the system. Tühista paigaldamine ilma süsteemi muutmata. Setup Failed Would you like to paste the install log to the web? Install Log Paste URL The upload was unsuccessful. No web-paste was done. Calamares Initialization Failed Calamarese alglaadimine ebaõnnestus %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. %1 ei saa paigaldada. Calamares ei saanud laadida kõiki konfigureeritud mooduleid. See on distributsiooni põhjustatud Calamarese kasutamise viga. <br/>The following modules could not be loaded: <br/>Järgnevaid mooduleid ei saanud laadida: Continue with installation? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Seadista kohe &Set up &Seadista &Install &Paigalda Setup is complete. Close the setup program. Cancel setup? Cancel installation? Tühista paigaldamine? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Kas sa tõesti soovid tühistada praeguse paigaldusprotsessi? Paigaldaja sulgub ning kõik muutused kaovad. &Yes &Jah &No &Ei &Close &Sulge Continue with setup? Jätka seadistusega? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> %1 paigaldaja on tegemas muudatusi sinu kettale, et paigaldada %2.<br/><strong>Sa ei saa neid muudatusi tagasi võtta.</strong> &Install now &Paigalda kohe Go &back Mine &tagasi &Done &Valmis The installation is complete. Close the installer. Paigaldamine on lõpetatud. Sulge paigaldaja. Error Viga Installation Failed Paigaldamine ebaõnnestus CalamaresPython::Helper Unknown exception type Tundmatu veateade unparseable Python error mittetöödeldav Python'i viga unparseable Python traceback mittetöödeldav Python'i traceback Unfetchable Python error. Kättesaamatu Python'i viga. CalamaresUtils Install log posted to: %1 CalamaresWindow %1 Setup Program %1 Installer %1 paigaldaja Show debug information Kuva silumisteavet CheckerContainer Gathering system information... Hangin süsteemiteavet... ChoicePage Form Form After: Pärast: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Käsitsi partitsioneerimine</strong><br/>Sa võid ise partitsioone luua või nende suurust muuta. Boot loader location: Käivituslaaduri asukoht: Select storage de&vice: Vali mäluseade: Current: Hetkel: Reuse %1 as home partition for %2. Taaskasuta %1 %2 kodupartitsioonina. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Vali vähendatav partitsioon, seejärel sikuta alumist riba suuruse muutmiseks</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. <strong>Select a partition to install on</strong> <strong>Vali partitsioon, kuhu paigaldada</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. EFI süsteemipartitsiooni ei leitud sellest süsteemist. Palun mine tagasi ja kasuta käsitsi partitsioonimist, et seadistada %1. The EFI system partition at %1 will be used for starting %2. EFI süsteemipartitsioon asukohas %1 kasutatakse %2 käivitamiseks. EFI system partition: EFI süsteemipartitsioon: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Sellel mäluseadmel ei paista olevat operatsioonisüsteemi peal. Mida soovid teha?<br/>Sa saad oma valikud üle vaadata ja kinnitada enne kui mistahes muudatus saab mäluseadmele teostatud. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Tühjenda ketas</strong><br/>See <font color="red">kustutab</font> kõik valitud mäluseadmel olevad andmed. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Sellel mäluseadmel on peal %1. Mida soovid teha?<br/>Sa saad oma valikud üle vaadata ja kinnitada enne kui mistahes muudatus saab mäluseadmele teostatud. No Swap Reuse Swap Swap (no Hibernate) Swap (with Hibernate) Swap to file <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Paigalda kõrvale</strong><br/>Paigaldaja vähendab partitsiooni, et teha ruumi operatsioonisüsteemile %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Asenda partitsioon</strong><br/>Asendab partitsiooni operatsioonisüsteemiga %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Sellel mäluseadmel on juba operatsioonisüsteem peal. Mida soovid teha?<br/>Sa saad oma valikud üle vaadata ja kinnitada enne kui mistahes muudatus saab mäluseadmele teostatud. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Sellel mäluseadmel on mitu operatsioonisüsteemi peal. Mida soovid teha?<br/>Sa saad oma valikud üle vaadata ja kinnitada enne kui mistahes muudatus saab mäluseadmele teostatud. ClearMountsJob Clear mounts for partitioning operations on %1 Tühjenda monteeringud partitsioneerimistegevustes %1 juures Clearing mounts for partitioning operations on %1. Tühjendan monteeringud partitsioneerimistegevustes %1 juures. Cleared all mounts for %1 Kõik monteeringud tühjendatud %1 jaoks ClearTempMountsJob Clear all temporary mounts. Tühjenda kõik ajutised monteeringud. Clearing all temporary mounts. Tühjendan kõik ajutised monteeringud. Cannot get list of temporary mounts. Ajutiste monteeringute nimekirja ei saa hankida. Cleared all temporary mounts. Kõik ajutised monteeringud tühjendatud. CommandList Could not run command. Käsku ei saanud käivitada. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. See käsklus käivitatakse hostikeskkonnas ning peab teadma juurteed, kuid rootMountPoint pole defineeritud. The command needs to know the user's name, but no username is defined. Käsklus peab teadma kasutaja nime, aga kasutajanimi pole defineeritud. ContextualProcessJob Contextual Processes Job Kontekstipõhiste protsesside töö CreatePartitionDialog Create a Partition Loo sektsioon MiB MiB Partition &Type: Partitsiooni tüüp: &Primary %Peamine E&xtended %Laiendatud Fi&le System: %Failisüsteem: LVM LV name LVM LV nimi Flags: Sildid: &Mount Point: &Monteerimispunkt: Si&ze: Suurus: En&crypt &Krüpti Logical Loogiline Primary Peamine GPT GPT Mountpoint already in use. Please select another one. Monteerimispunkt on juba kasutusel. Palun vali mõni teine. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. Loon uut %1 partitsiooni kettal %2. The installer failed to create partition on disk '%1'. Paigaldaja ei suutnud luua partitsiooni kettale "%1". CreatePartitionTableDialog Create Partition Table Loo partitsioonitabel Creating a new partition table will delete all existing data on the disk. Uue partitsioonitabeli loomine kustutab kettalt kõik olemasolevad andmed. What kind of partition table do you want to create? Millist partitsioonitabelit soovid luua? Master Boot Record (MBR) Master Boot Record (MBR) GUID Partition Table (GPT) GUID partitsioonitabel (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Loo uus %1 partitsioonitabel kohta %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Loo uus <strong>%1</strong> partitsioonitabel kohta <strong>%2</strong> (%3). Creating new %1 partition table on %2. Loon uut %1 partitsioonitabelit kohta %2. The installer failed to create a partition table on %1. Paigaldaja ei suutnud luua partitsioonitabelit kettale %1. CreateUserJob Create user %1 Loo kasutaja %1 Create user <strong>%1</strong>. Loo kasutaja <strong>%1</strong>. Creating user %1. Loon kasutajat %1. Sudoers dir is not writable. Sudoja tee ei ole kirjutatav. Cannot create sudoers file for writing. Sudoja faili ei saa kirjutamiseks luua. Cannot chmod sudoers file. Sudoja faili ei saa chmod-ida. Cannot open groups file for reading. Grupifaili ei saa lugemiseks avada. CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Loo uus kettagrupp nimega %1. Create new volume group named <strong>%1</strong>. Loo uus kettagrupp nimega <strong>%1</strong>. Creating new volume group named %1. Uue kettagrupi %1 loomine. The installer failed to create a volume group named '%1'. Paigaldaja ei saanud luua kettagruppi "%1". DeactivateVolumeGroupJob Deactivate volume group named %1. Keela kettagrupp nimega %1. Deactivate volume group named <strong>%1</strong>. Keela kettagrupp nimega <strong>%1</strong>. The installer failed to deactivate a volume group named %1. Paigaldaja ei saanud luua kettagruppi "%1". DeletePartitionJob Delete partition %1. Kustuta partitsioon %1. Delete partition <strong>%1</strong>. Kustuta partitsioon <strong>%1</strong>. Deleting partition %1. Kustutan partitsiooni %1. The installer failed to delete partition %1. Paigaldaja ei suutnud kustutada partitsiooni %1. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. <strong>Partitsioonitabeli</strong> tüüp valitud mäluseadmel.<br><br>Ainuke viis partitsioonitabelit muuta on see kustutada ja nullist taasluua, mis hävitab kõik andmed mäluseadmel.<br>See paigaldaja säilitab praeguse partitsioonitabeli, v.a juhul kui sa ise valid vastupidist.<br>Kui pole kindel, eelista modernsetel süsteemidel GPT-d. This device has a <strong>%1</strong> partition table. Sellel seadmel on <strong>%1</strong> partitsioonitabel. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. See on <strong>loop</strong>-seade.<br><br>See on pseudo-seade ilma partitsioonitabelita, mis muudab faili ligipääsetavaks plokiseadmena. Seda tüüpi seadistus sisaldab tavaliselt ainult ühte failisüsteemi. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. See paigaldaja <strong>ei suuda tuvastada partitsioonitabelit</strong>valitud mäluseadmel.<br><br>Seadmel kas pole partitsioonitabelit, see on korrumpeerunud või on tundmatut tüüpi.<br>See paigaldaja võib sulle luua uue partitsioonitabeli, kas automaatselt või läbi käsitsi partitsioneerimise lehe. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>See on soovitatav partitsioonitabeli tüüp modernsetele süsteemidele, mis käivitatakse <strong>EFI</strong>käivituskeskkonnast. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. <br><br>See partitsioonitabel on soovitatav ainult vanemates süsteemides, mis käivitavad <strong>BIOS</strong>-i käivituskeskkonnast. GPT on soovitatav enamus teistel juhtudel.<br><br><strong>Hoiatus:</strong> MBR partitsioonitabel on vananenud MS-DOS aja standard.<br>aVõimalik on luua inult 4 <em>põhilist</em> partitsiooni ja nendest üks võib olla <em>laiendatud</em> partitsioon, mis omakorda sisaldab mitmeid <em>loogilisi</em> partitsioone. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1 - (%2) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Kirjuta Dracut'ile LUKS konfiguratsioon kohta %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Lõpeta Dracut'ile LUKS konfigruatsiooni kirjutamine: "/" partitsioon pole krüptitud Failed to open %1 %1 avamine ebaõnnestus DummyCppJob Dummy C++ Job Testiv C++ töö EditExistingPartitionDialog Edit Existing Partition Muuda olemasolevat partitsiooni Content: Sisu: &Keep &Säilita Format Vorminda Warning: Formatting the partition will erase all existing data. Hoiatus: Partitsiooni vormindamine tühjendab kõik olemasolevad andmed. &Mount Point: &Monteerimispunkt: Si&ze: Suurus: MiB MiB Fi&le System: %Failisüsteem: Flags: Sildid: Mountpoint already in use. Please select another one. Monteerimispunkt on juba kasutusel. Palun vali mõni teine. EncryptWidget Form Form En&crypt system Krüpti süsteem Passphrase Salaväljend Confirm passphrase Kinnita salaväljendit Please enter the same passphrase in both boxes. Palun sisesta sama salaväljend mõlemisse kasti. FillGlobalStorageJob Set partition information Sea partitsiooni teave Install %1 on <strong>new</strong> %2 system partition. Paigalda %1 <strong>uude</strong> %2 süsteemipartitsiooni. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Seadista <strong>uus</strong> %2 partitsioon monteerimiskohaga <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Paigalda %2 %3 süsteemipartitsioonile <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Seadista %3 partitsioon <strong>%1</strong> monteerimiskohaga <strong>%2</strong> Install boot loader on <strong>%1</strong>. Paigalda käivituslaadur kohta <strong>%1</strong>. Setting up mount points. Seadistan monteerimispunkte. FinishedPage Form Form <Restart checkbox tooltip> <Restart checkbox tooltip> &Restart now &Taaskäivita nüüd <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>Kõik on valmis.</h1><br/>%1 on paigaldatud sinu arvutisse.<br/>Sa võid nüüd taaskäivitada oma uude süsteemi või jätkata %2 live-keskkonna kasutamist. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Paigaldamine ebaõnnestus</h1><br/>%1 ei paigaldatud sinu arvutisse.<br/>Veateade oli: %2. FinishedViewStep Finish Valmis Setup Complete Seadistus valmis Installation Complete Paigaldus valmis The setup of %1 is complete. The installation of %1 is complete. %1 paigaldus on valmis. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatting partition %1 with file system %2. Vormindan partitsiooni %1 failisüsteemiga %2. The installer failed to format partition %1 on disk '%2'. Paigaldaja ei suutnud vormindada partitsiooni %1 kettal "%2". GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source on ühendatud vooluallikasse The system is not plugged in to a power source. Süsteem pole ühendatud vooluallikasse. is connected to the Internet on ühendatud Internetti The system is not connected to the Internet. Süsteem pole ühendatud Internetti. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. Paigaldaja pole käivitatud administraatoriõigustega. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. Ekraan on paigaldaja kuvamiseks liiga väike. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Konsole pole paigaldatud Please install KDE Konsole and try again! Palun paigalda KDE Konsole ja proovi uuesti! Executing script: &nbsp;<code>%1</code> Käivitan skripti: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script Skript KeyboardPage Set keyboard model to %1.<br/> Sea klaviatuurimudeliks %1.<br/> Set keyboard layout to %1/%2. Sea klaviatuuripaigutuseks %1/%2. KeyboardViewStep Keyboard Klaviatuur LCLocaleDialog System locale setting Süsteemilokaali valik The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. Süsteemilokaali valik mõjutab keelt ja märgistikku teatud käsurea kasutajaliideste elementidel.<br/>Praegune valik on <strong>%1</strong>. &Cancel &Tühista &OK &OK LicensePage Form Form <h1>License Agreement</h1> I accept the terms and conditions above. Ma nõustun alljärgevate tingimustega. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License Litsents LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 draiver</strong><br/>autorilt %2 <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 graafikadraiver</strong><br/><font color="Grey">autorilt %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 brauseriplugin</strong><br/><font color="Grey">autorilt %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 koodek</strong><br/><font color="Grey">autorilt %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 pakett</strong><br/><font color="Grey">autorilt %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">autorilt %2</font> File: %1 Show the license text Open license agreement in browser. Hide license text LocalePage The system language will be set to %1. Süsteemikeeleks määratakse %1. The numbers and dates locale will be set to %1. Arvude ja kuupäevade lokaaliks seatakse %1. Region: Regioon: Zone: Tsoon: &Change... &Muuda... Set timezone to %1/%2.<br/> Määra ajatsooniks %1/%2.<br/> LocaleViewStep Location Asukoht LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Genereeri masina-id. Configuration Error No root mount point is set for MachineId. NetInstallPage Name Nimi Description Kirjeldus Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Võrgupaigaldus. (Keelatud: paketinimistute saamine ebaõnnestus, kontrolli oma võrguühendust) Network Installation. (Disabled: Received invalid groups data) Võrgupaigaldus. (Keelatud: vastu võetud sobimatud grupiandmed) Network Installation. (Disabled: Incorrect configuration) NetInstallViewStep Package selection Paketivalik Office software Office package Browser software Browser package Web browser Kernel Services Login Desktop Applications NotesQmlViewStep Notes OEMPage Ba&tch: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> OEMViewStep OEM Configuration Set the OEM Batch Identifier to <code>%1</code>. PWQ Password is too short Parool on liiga lühike Password is too long Parool on liiga pikk Password is too weak Parool on liiga nõrk Memory allocation error when setting '%1' Mälu eraldamise viga valikut "%1" määrates Memory allocation error Mälu eraldamise viga The password is the same as the old one Parool on sama mis enne The password is a palindrome Parool on palindroom The password differs with case changes only Parool erineb ainult suurtähtede poolest The password is too similar to the old one Parool on eelmisega liiga sarnane The password contains the user name in some form Parool sisaldab mingil kujul kasutajanime The password contains words from the real name of the user in some form Parool sisaldab mingil kujul sõnu kasutaja pärisnimest The password contains forbidden words in some form Parool sisaldab mingil kujul sobimatuid sõnu The password contains less than %1 digits Parool sisaldab vähem kui %1 numbrit The password contains too few digits Parool sisaldab liiga vähe numbreid The password contains less than %1 uppercase letters Parool sisaldab vähem kui %1 suurtähte The password contains too few uppercase letters Parool sisaldab liiga vähe suurtähti The password contains less than %1 lowercase letters Parool sisaldab vähem kui %1 väiketähte The password contains too few lowercase letters Parool sisaldab liiga vähe väiketähti The password contains less than %1 non-alphanumeric characters Parool sisaldab vähem kui %1 mitte-tähestikulist märki The password contains too few non-alphanumeric characters Parool sisaldab liiga vähe mitte-tähestikulisi märke The password is shorter than %1 characters Parool on lühem kui %1 tähemärki The password is too short Parool on liiga lühike The password is just rotated old one Parool on lihtsalt pööratud eelmine parool The password contains less than %1 character classes Parool sisaldab vähem kui %1 tähemärgiklassi The password does not contain enough character classes Parool ei sisalda piisavalt tähemärgiklasse The password contains more than %1 same characters consecutively Parool sisaldab järjest rohkem kui %1 sama tähemärki The password contains too many same characters consecutively Parool sisaldab järjest liiga palju sama tähemärki The password contains more than %1 characters of the same class consecutively Parool sisaldab järjest samast klassist rohkem kui %1 tähemärki The password contains too many characters of the same class consecutively Parool sisaldab järjest liiga palju samast klassist tähemärke The password contains monotonic sequence longer than %1 characters Parool sisaldab monotoonset jada, mis on pikem kui %1 tähemärki The password contains too long of a monotonic character sequence Parool sisaldab liiga pikka monotoonsete tähemärkide jada No password supplied Parooli ei sisestatud Cannot obtain random numbers from the RNG device RNG seadmest ei saanud hankida juhuslikke numbreid Password generation failed - required entropy too low for settings Parooligenereerimine ebaõnnestus - nõutud entroopia on seadete jaoks liiga vähe The password fails the dictionary check - %1 Parool põrub sõnastikukontrolli - %1 The password fails the dictionary check Parool põrub sõnastikukontrolli Unknown setting - %1 Tundmatu valik - %1 Unknown setting Tundmatu valik Bad integer value of setting - %1 Halb täisarvuline väärtus valikul - %1 Bad integer value Halb täisarvuväärtus Setting %1 is not of integer type Valik %1 pole täisarvu tüüpi Setting is not of integer type Valik ei ole täisarvu tüüpi Setting %1 is not of string type Valik %1 ei ole string-tüüpi Setting is not of string type Valik ei ole string-tüüpi Opening the configuration file failed Konfiguratsioonifaili avamine ebaõnnestus The configuration file is malformed Konfiguratsioonifail on rikutud Fatal failure Saatuslik viga Unknown error Tundmatu viga Password is empty PackageChooserPage Form Form Product Name TextLabel TextLabel Long Product Description Package Selection Please pick a product from the list. The selected product will be installed. PackageChooserViewStep Packages Page_Keyboard Form Form Keyboard Model: Klaviatuurimudel: Type here to test your keyboard Kirjuta siia, et testida oma klaviatuuri Page_UserSetup Form Form What is your name? Mis on su nimi? What name do you want to use to log in? Mis nime soovid sisselogimiseks kasutada? Choose a password to keep your account safe. Vali parool, et hoida oma konto turvalisena. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>Sisesta sama parool kaks korda, et kontrollida kirjavigade puudumist. Hea parool sisaldab segu tähtedest, numbritest ja kirjavahemärkidest, peaks olema vähemalt kaheksa märki pikk ja seda peaks muutma regulaarselt.</small> What is the name of this computer? Mis on selle arvuti nimi? Your Full Name login <small>This name will be used if you make the computer visible to others on a network.</small> <small>Seda nime kasutatakse, kui teed arvuti võrgus teistele nähtavaks.</small> Computer Name Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Logi automaatselt sisse ilma parooli küsimata. Use the same password for the administrator account. Kasuta sama parooli administraatorikontole. Choose a password for the administrator account. Vali administraatori kontole parool. <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Sisesta sama parooli kaks korda, et kontrollida kirjavigade puudumist.</small> PartitionLabelsView Root Juur Home Kodu Boot Käivitus EFI system EFI süsteem Swap Swap New partition for %1 Uus partitsioon %1 jaoks New partition Uus partitsioon %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space Tühi ruum New partition Uus partitsioon Name Nimi File System Failisüsteem Mount Point Monteerimispunkt Size Suurus PartitionPage Form Form Storage de&vice: Mäluseade: &Revert All Changes &Ennista kõik muutused New Partition &Table Uus partitsioonitabel Cre&ate L&oo &Edit &Muuda &Delete &Kustuta New Volume Group Uus kettagrupp Resize Volume Group Muuda kettagrupi suurust Deactivate Volume Group Keela kettagrupp Remove Volume Group Eemalda kettagrupp I&nstall boot loader on: Paigalda käivituslaadur kohta: Are you sure you want to create a new partition table on %1? Kas soovid kindlasti luua uut partitsioonitabelit kettale %1? Can not create new partition Uut partitsiooni ei saa luua The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. Partitsioonitabel kohas %1 juba omab %2 peamist partitsiooni ning rohkem juurde ei saa lisada. Palun eemalda selle asemel üks peamine partitsioon ja lisa juurde laiendatud partitsioon. PartitionViewStep Gathering system information... Hangin süsteemiteavet... Partitions Partitsioonid Install %1 <strong>alongside</strong> another operating system. Paigalda %1 praeguse operatsioonisüsteemi <strong>kõrvale</strong> <strong>Erase</strong> disk and install %1. <strong>Tühjenda</strong> ketas ja paigalda %1. <strong>Replace</strong> a partition with %1. <strong>Asenda</strong> partitsioon operatsioonisüsteemiga %1. <strong>Manual</strong> partitioning. <strong>Käsitsi</strong> partitsioneerimine. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Paigalda %1 teise operatsioonisüsteemi <strong>kõrvale</strong> kettal <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Tühjenda</strong> ketas <strong>%2</strong> (%3) ja paigalda %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Asenda</strong> partitsioon kettal <strong>%2</strong> (%3) operatsioonisüsteemiga %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>Käsitsi</strong> partitsioneerimine kettal <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Ketas <strong>%1</strong> (%2). Current: Hetkel: After: Pärast: No EFI system partition configured EFI süsteemipartitsiooni pole seadistatud An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. %1 käivitamiseks on vajalik EFI süsteemipartitsioon.<br/><br/>Et seadistada EFI süsteemipartitsiooni, mine tagasi ja vali või loo FAT32 failisüsteem sildiga <strong>esp</strong> ja monteerimispunktiga <strong>%2</strong>.<br/><br/>Sa võid jätkata ilma EFI süsteemipartitsiooni seadistamata aga su süsteem ei pruugi käivituda. EFI system partition flag not set EFI süsteemipartitsiooni silt pole määratud An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. %1 käivitamiseks on vajalik EFI süsteemipartitsioon.<br/><br/>Partitsioon seadistati monteerimispunktiga <strong>%2</strong> aga sellel ei määratud <strong>esp</strong> silti.<br/>Sildi määramiseks mine tagasi ja muuda partitsiooni.<br/><br/>Sa võid jätkata ilma silti seadistamata aga su süsteem ei pruugi käivituda. Boot partition not encrypted Käivituspartitsioon pole krüptitud A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. Eraldi käivituspartitsioon seadistati koos krüptitud juurpartitsiooniga, aga käivituspartitsioon ise ei ole krüptitud.<br/><br/>Selle seadistusega kaasnevad turvaprobleemid, sest tähtsad süsteemifailid hoitakse krüptimata partitsioonil.<br/>Sa võid soovi korral jätkata, aga failisüsteemi lukust lahti tegemine toimub hiljem süsteemi käivitusel.<br/>Et krüpteerida käivituspartisiooni, mine tagasi ja taasloo see, valides <strong>Krüpteeri</strong> partitsiooni loomise aknas. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Plasma välimuse-ja-tunnetuse töö Could not select KDE Plasma Look-and-Feel package KDE Plasma välimuse-ja-tunnetuse paketti ei saanud valida PlasmaLnfPage Form Form Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Palun vali KDE Plasma töölauale välimus-ja-tunnetus. Sa võid selle sammu ka vahele jätta ja seadistada välimust-ja-tunnetust siis, kui süsteem on paigaldatud. Välimuse-ja-tunnetuse valikule klõpsates näed selle reaalajas eelvaadet. PlasmaLnfViewStep Look-and-Feel Välimus-ja-tunnetus PreserveFiles Saving files for later ... Salvestan faile hiljemaks... No files configured to save for later. Ühtegi faili ei konfigureeritud hiljemaks salvestamiseks. Not all of the configured files could be preserved. Ühtegi konfigureeritud faili ei suudetud säilitada. ProcessResult There was no output from the command. Käsul polnud väljundit. Output: Väljund: External command crashed. Väline käsk jooksis kokku. Command <i>%1</i> crashed. Käsk <i>%1</i> jooksis kokku. External command failed to start. Välise käsu käivitamine ebaõnnestus. Command <i>%1</i> failed to start. Käsu <i>%1</i> käivitamine ebaõnnestus. Internal error when starting command. Käsu käivitamisel esines sisemine viga. Bad parameters for process job call. Protsessi töö kutsel olid halvad parameetrid. External command failed to finish. Väline käsk ei suutnud lõpetada. Command <i>%1</i> failed to finish in %2 seconds. Käsk <i>%1</i> ei suutnud lõpetada %2 sekundi jooksul. External command finished with errors. Väline käsk lõpetas vigadega. Command <i>%1</i> finished with exit code %2. Käsk <i>%1</i> lõpetas sulgemiskoodiga %2. QObject Default Keyboard Model Vaikimisi klaviatuurimudel Default Vaikimisi unknown tundmatu extended laiendatud unformatted vormindamata swap swap Unpartitioned space or unknown partition table Partitsioneerimata ruum või tundmatu partitsioonitabel (no mount point) Requirements checking for module <i>%1</i> is complete. %1 (%2) language[name] (country[name]) %1 (%2) No product No description provided. File not found Path <pre>%1</pre> must be an absolute path. Could not create new random file <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Eemalda kettagrupp nimega %1. Remove Volume Group named <strong>%1</strong>. Eemalda kettagrupp nimega <strong>%1</strong>. The installer failed to remove a volume group named '%1'. Paigaldaja ei saanud eemaldada kettagruppi "%1". ReplaceWidget Form Form Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Vali, kuhu soovid %1 paigaldada.<br/><font color="red">Hoiatus: </font>see kustutab valitud partitsioonilt kõik failid. The selected item does not appear to be a valid partition. Valitud üksus ei paista olevat sobiv partitsioon. %1 cannot be installed on empty space. Please select an existing partition. %1 ei saa paigldada tühjale kohale. Palun vali olemasolev partitsioon. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 ei saa paigaldada laiendatud partitsioonile. Palun vali olemasolev põhiline või loogiline partitsioon. %1 cannot be installed on this partition. %1 ei saa sellele partitsioonile paigaldada. Data partition (%1) Andmepartitsioon (%1) Unknown system partition (%1) Tundmatu süsteemipartitsioon (%1) %1 system partition (%2) %1 süsteemipartitsioon (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>Partitsioon %1 on liiga väike %2 jaoks. Palun vali partitsioon suurusega vähemalt %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/>Sellest süsteemist ei leitud EFI süsteemipartitsiooni. Palun mine tagasi ja kasuta käsitsi partitsioneerimist, et seadistada %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>%1 paigaldatakse partitsioonile %2.<br/><font color="red">Hoiatus: </font>kõik andmed partitsioonil %2 kaovad. The EFI system partition at %1 will be used for starting %2. EFI süsteemipartitsioon asukohas %1 kasutatakse %2 käivitamiseks. EFI system partition: EFI süsteemipartitsioon: ResizeFSJob Resize Filesystem Job Failisüsteemi suuruse muutmise töö Invalid configuration Sobimatu konfiguratsioon The file-system resize job has an invalid configuration and will not run. Failisüsteemi suuruse muutmise tööl on sobimatu konfiguratsioon ning see ei käivitu. KPMCore not Available KPMCore pole saadaval Calamares cannot start KPMCore for the file-system resize job. Calamares ei saa KPMCore'i käivitada failisüsteemi suuruse muutmise töö jaoks. Resize Failed Suuruse muutmine ebaõnnestus The filesystem %1 could not be found in this system, and cannot be resized. Failisüsteemi %1 ei leitud sellest süsteemist, seega selle suurust ei saa muuta. The device %1 could not be found in this system, and cannot be resized. Seadet %1 ei leitud sellest süsteemist, seega selle suurust ei saa muuta. The filesystem %1 cannot be resized. Failisüsteemi %1 suurust ei saa muuta. The device %1 cannot be resized. Seadme %1 suurust ei saa muuta. The filesystem %1 must be resized, but cannot. Failisüsteemi %1 suurust tuleb muuta, aga ei saa. The device %1 must be resized, but cannot Seadme %1 suurust tuleb muuta, aga ei saa. ResizePartitionJob Resize partition %1. Muuda partitsiooni %1 suurust. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. Paigaldajal ebaõnnestus partitsiooni %1 suuruse muutmine kettal "%2". ResizeVolumeGroupDialog Resize Volume Group Muuda kettagrupi suurust ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Muuda kettagrupi %1 suurust %2-st %3-ks. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. Muuda kettagrupi <strong>%1</strong> suurust <strong>%2</strong>-st <strong>%3</strong>-ks. The installer failed to resize a volume group named '%1'. Paigaldaja ei saanud muuta kettagrupi "%1" suurust. ResultsListDialog For best results, please ensure that this computer: Parimate tulemuste jaoks palun veendu, et see arvuti: System requirements Süsteeminõudmised ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> See arvuti ei rahulda %1 paigldamiseks vajalikke minimaaltingimusi.<br/>Paigaldamine ei saa jätkuda. <a href="#details">Detailid...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. See arvuti ei rahulda mõnda %1 paigaldamiseks soovitatud tingimust.<br/>Paigaldamine võib jätkuda, ent mõned funktsioonid võivad olla keelatud. This program will ask you some questions and set up %2 on your computer. See programm küsib sult mõned küsimused ja seadistab %2 sinu arvutisse. ScanningDialog Scanning storage devices... Skaneerin mäluseadmeid... Partitioning Partitsioneerimine SetHostNameJob Set hostname %1 Määra hostinimi %1 Set hostname <strong>%1</strong>. Määra hostinimi <strong>%1</strong>. Setting hostname %1. Määran hostinime %1. Internal Error Sisemine viga Cannot write hostname to target system Hostinime ei saa sihtsüsteemile kirjutada SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Klaviatuurimudeliks on seatud %1, paigutuseks %2-%3 Failed to write keyboard configuration for the virtual console. Klaviatuurikonfiguratsiooni kirjutamine virtuaalkonsooli ebaõnnestus. Failed to write to %1 Kohta %1 kirjutamine ebaõnnestus Failed to write keyboard configuration for X11. Klaviatuurikonsooli kirjutamine X11-le ebaõnnestus. Failed to write keyboard configuration to existing /etc/default directory. Klaviatuurikonfiguratsiooni kirjutamine olemasolevale /etc/default kaustateele ebaõnnestus. SetPartFlagsJob Set flags on partition %1. Määratud sildid partitsioonil %1: Set flags on %1MiB %2 partition. Set flags on new partition. Määra sildid uuele partitsioonile. Clear flags on partition <strong>%1</strong>. Tühjenda sildid partitsioonil <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Tühjenda sildid uuel partitsioonil Flag partition <strong>%1</strong> as <strong>%2</strong>. Määra partitsioonile <strong>%1</strong> silt <strong>%2</strong>. Flag new partition as <strong>%1</strong>. Määra uuele partitsioonile silt <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Eemaldan sildid partitsioonilt <strong>%1</strong>. Clearing flags on new partition. Eemaldan uuelt partitsioonilt sildid. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Määran sildid <strong>%1</strong> partitsioonile <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. Määran sildid <strong>%1</strong> uuele partitsioonile. The installer failed to set flags on partition %1. Paigaldaja ei suutnud partitsioonile %1 silte määrata. SetPasswordJob Set password for user %1 Määra kasutajale %1 parool Setting password for user %1. Määran kasutajale %1 parooli. Bad destination system path. Halb sihtsüsteemi tee. rootMountPoint is %1 rootMountPoint on %1 Cannot disable root account. Juurkasutajat ei saa keelata. passwd terminated with error code %1. passwd peatatud veakoodiga %1. Cannot set password for user %1. Kasutajale %1 ei saa parooli määrata. usermod terminated with error code %1. usermod peatatud veateatega %1. SetTimezoneJob Set timezone to %1/%2 Määra ajatsooniks %1/%2 Cannot access selected timezone path. Valitud ajatsooni teele ei saa ligi. Bad path: %1 Halb tee: %1 Cannot set timezone. Ajatsooni ei saa määrata. Link creation failed, target: %1; link name: %2 Lingi loomine ebaõnnestus, siht: %1; lingi nimi: %2 Cannot set timezone, Ajatsooni ei saa määrata, Cannot open /etc/timezone for writing /etc/timezone ei saa kirjutamiseks avada ShellProcessJob Shell Processes Job Kesta protsesside töö SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. See on ülevaade sellest mis juhtub, kui alustad paigaldusprotseduuri. SummaryViewStep Summary Kokkuvõte TrackingInstallJob Installation feedback Paigalduse tagasiside Sending installation feedback. Saadan paigalduse tagasisidet. Internal error in install-tracking. Paigaldate jälitamisel esines sisemine viga. HTTP request timed out. HTTP taotlusel esines ajalõpp. TrackingMachineNeonJob Machine feedback Seadme tagasiside Configuring machine feedback. Seadistan seadme tagasisidet. Error in machine feedback configuration. Masina tagasiside konfiguratsioonis esines viga. Could not configure machine feedback correctly, script error %1. Masina tagasisidet ei suudetud korralikult konfigureerida, skripti viga %1. Could not configure machine feedback correctly, Calamares error %1. Masina tagasisidet ei suudetud korralikult konfigureerida, Calamares'e viga %1. TrackingPage Form Form Placeholder Kohatäitja <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>Seda valides <span style=" font-weight:600;">ei saada sa üldse</span> teavet oma paigalduse kohta.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Klõpsa siia, et saada rohkem teavet kasutaja tagasiside kohta</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. Paigalduse jälitamine aitab %1-l näha, mitu kasutajat neil on, mis riistvarale nad %1 paigaldavad ja (märkides kaks alumist valikut) saada pidevat teavet eelistatud rakenduste kohta. Et näha, mis infot saadetakse, palun klõpsa abiikooni iga ala kõrval. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. Seda valides saadad sa teavet oma paigalduse ja riistvara kohta. See teave <b>saadetakse ainult korra</b>peale paigalduse lõppu. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. Seda valides saadad sa %1-le <b>perioodiliselt</b> infot oma paigalduse, riistvara ja rakenduste kohta. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. Seda valides saadad sa %1-le <b>regulaarselt</b> infot oma paigalduse, riistvara, rakenduste ja kasutusharjumuste kohta. TrackingViewStep Feedback Tagasiside UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> Your username is too long. Sinu kasutajanimi on liiga pikk. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Only letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Sinu hostinimi on liiga lühike. Your hostname is too long. Sinu hostinimi on liiga pikk. Your passwords do not match! Sinu paroolid ei ühti! UsersViewStep Users Kasutajad VariantModel Key Value VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Füüsiliste ketaste nimekiri Volume Group Name: Kettagrupi nimi: Volume Group Type: Kettagrupi tüüp: Physical Extent Size: Füüsiline ulatussuurus: MiB MiB Total Size: Kogusuurus: Used Size: Kasutatud suurus: Total Sectors: Kogusektorid: Quantity of LVs: Loogiliste köidete kogus: WelcomePage Form Form Select application and system language Open donations website &Donate Open help and support website Open issues and bug-tracking website Open release notes website &Release notes &Väljalaskemärkmed &Known issues &Teadaolevad vead &Support &Tugi &About &Teave <h1>Welcome to the %1 installer.</h1> <h1>Tere tulemast %1 paigaldajasse.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Tere tulemast Calamares'i paigaldajasse %1 jaoks.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Welcome to %1 setup.</h1> About %1 setup About %1 installer Teave %1 paigaldaja kohta <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support %1 tugi WelcomeQmlViewStep Welcome Tervist WelcomeViewStep Welcome Tervist notesqml <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> About Support Known issues Release notes Donate calamares-3.2.20/lang/calamares_eu.ts000066400000000000000000005047651362604102500174600ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. Sistema honen <strong>abio ingurunea</strong>. <br><br>X86 zaharrek <strong>BIOS</strong> euskarria bakarrik daukate. <br>Sistema modernoek normalean <strong>EFI</strong> darabilte, baina BIOS bezala ere agertu daitezke konpatibilitate moduan hasiz gero. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. Sistema hau <strong>EFI</strong> abio inguruneaz hasi da.<br><br>EFI ingurunetik abiaraztea konfiguratzeko instalatzaile honek abio kargatzaile aplikazioa ezarri behar du, <strong>GRUB </strong> bezalakoa edo <strong>systemd-abioa</strong> <strong>EFI sistema partizio</strong> batean. Hau automatikoa da, zuk partizioak eskuz egitea aukeratzen ez baduzu, eta kasu horretan zuk sortu edo aukeratu beharko duzu zure kabuz. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. Sistema hau <strong>BIOS</strong> abio inguruneaz hasi da.<br><br>BIOS ingurunetik abiaraztea konfiguratzeko instalatzaile honek abio kargatzaile aplikazioa ezarri behar du, <strong>GRUB</strong> bezalakoa, partizioaren hasieran edo <strong>Master Boot Record</strong> deritzonean partizio taularen hasieratik gertu (hobetsia). Hau automatikoa da, zuk partizioak eskuz egitea aukeratzen ez baduzu eta kasu horretan zuk sortu edo aukeratu beharko duzu zure kabuz. BootLoaderModel Master Boot Record of %1 %1-(e)n Master Boot Record Boot Partition Abio partizioa System Partition Sistema-partizioa Do not install a boot loader Ez instalatu abio kargatzailerik %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page Orri zuria Calamares::DebugWindow Form Formulario GlobalStorage Biltegiratze globala JobQueue LanIlara Modules Moduluak Type: Mota: none Ezer ez Interface: Interfasea: Tools Tresnak Reload Stylesheet Widget Tree Debug information Arazte informazioa Calamares::ExecutionViewStep Set up Install Instalatu Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Egina Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 %1 %2 komandoa exekutatzen Calamares::PythonJob Running %1 operation. %1 eragiketa burutzen. Bad working directory path Direktorio ibilbide ezegokia Working directory %1 for python job %2 is not readable. %1 lanerako direktorioa %2 python lanak ezin du irakurri. Bad main script file Script fitxategi nagusi okerra Main script file %1 for python job %2 is not readable. %1 script fitxategi nagusia ezin da irakurri python %2 lanerako Boost.Python error in job "%1". Boost.Python errorea "%1" lanean. Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager &Back &Atzera &Next &Hurrengoa &Cancel &Utzi Cancel setup without changing the system. Cancel installation without changing the system. Instalazioa bertan behera utsi da sisteman aldaketarik gabe. Setup Failed Would you like to paste the install log to the web? Install Log Paste URL The upload was unsuccessful. No web-paste was done. Calamares Initialization Failed Calamares instalazioak huts egin du %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. %1 ezin da instalatu. Calamares ez da gai konfiguratutako modulu guztiak kargatzeko. Arazao hau banaketak Calamares erabiltzen duen eragatik da. <br/>The following modules could not be loaded: <br/> Ondorengo moduluak ezin izan dira kargatu: Continue with installation? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Set up &Install &Instalatu Setup is complete. Close the setup program. Cancel setup? Cancel installation? Bertan behera utzi instalazioa? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Ziur uneko instalazio prozesua bertan behera utzi nahi duzula? Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. &Yes &Bai &No &Ez &Close &Itxi Continue with setup? Ezarpenarekin jarraitu? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> %1 instalatzailea zure diskoan aldaketak egitera doa %2 instalatzeko.<br/><strong>Ezingo dituzu desegin aldaketa hauek.</strong> &Install now &Instalatu orain Go &back &Atzera &Done E&ginda The installation is complete. Close the installer. Instalazioa burutu da. Itxi instalatzailea. Error Akatsa Installation Failed Instalazioak huts egin du CalamaresPython::Helper Unknown exception type Salbuespen-mota ezezaguna unparseable Python error unparseable Python traceback Unfetchable Python error. CalamaresUtils Install log posted to: %1 CalamaresWindow %1 Setup Program %1 Installer %1 Instalatzailea Show debug information Erakutsi arazte informazioa CheckerContainer Gathering system information... Sistemaren informazioa eskuratzen... ChoicePage Form Formulario After: Ondoren: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Eskuz partizioak landu</strong><br/>Zure kasa sortu edo tamainaz alda dezakezu partizioak. Boot loader location: Abio kargatzaile kokapena: Select storage de&vice: Aukeratu &biltegiratze-gailua: Current: Unekoa: Reuse %1 as home partition for %2. Berrerabili %1 home partizio bezala %2rentzat. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Aukeratu partizioa txikitzeko eta gero arrastatu azpiko-barra tamaina aldatzeko</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. <strong>Select a partition to install on</strong> <strong>aukeratu partizioa instalatzeko</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Ezin da inon aurkitu EFI sistemako partiziorik sistema honetan. Mesedez joan atzera eta erabili eskuz partizioak lantzea %1 ezartzeko. The EFI system partition at %1 will be used for starting %2. %1eko EFI partizio sistema erabiliko da abiarazteko %2. EFI system partition: EFI sistema-partizioa: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Biltegiratze-gailuak badirudi ez duela sistema eragilerik. Zer egin nahiko zenuke? <br/>Zure aukerak berrikusteko eta berresteko aukera izango duzu aldaketak gauzatu aurretik biltegiratze-gailuan <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Diskoa ezabatu</strong><br/>Honek orain dauden datu guztiak <font color="red">ezbatuko</font> ditu biltegiratze-gailutik. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Biltegiratze-gailuak %1 dauka. Zer egin nahiko zenuke? <br/>Zure aukerak berrikusteko eta berresteko aukera izango duzu aldaketak gauzatu aurretik biltegiratze-gailuan No Swap Reuse Swap Swap (no Hibernate) Swap (with Hibernate) Swap to file <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Instalatu alboan</strong><br/>Instalatzaileak partizioa txikituko du lekua egiteko %1-(r)i. <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Ordeztu partizioa</strong><br/>ordezkatu partizioa %1-(e)kin. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Biltegiragailu honetan badaude jadanik eragile sistema bat. Zer gustatuko litzaizuke egin?<br/>Biltegiragailuan aldaketarik egin baino lehen zure aukerak aztertu eta konfirmatu ahal izango duzu. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Biltegiragailu honetan badaude jadanik eragile sistema batzuk. Zer gustatuko litzaizuke egin?<br/>Biltegiragailuan aldaketarik egin baino lehen zure aukerak aztertu eta konfirmatu ahal izango duzu. ClearMountsJob Clear mounts for partitioning operations on %1 Garbitu muntaketa puntuak partizioak egiteko %1 -(e)an. Clearing mounts for partitioning operations on %1. Garbitzen muntaketa puntuak partizio eragiketak egiteko %1 -(e)an. Cleared all mounts for %1 Muntaketa puntu guztiak garbitu dira %1 -(e)an ClearTempMountsJob Clear all temporary mounts. Garbitu aldi-baterako muntaketa puntu guztiak. Clearing all temporary mounts. Garbitzen aldi-baterako muntaketa puntu guztiak. Cannot get list of temporary mounts. Ezin izan da aldi-baterako muntaketa puntu guztien zerrenda lortu. Cleared all temporary mounts. Garbitu dira aldi-baterako muntaketa puntu guztiak. CommandList Could not run command. Ezin izan da komandoa exekutatu. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. Komandoa exekutatzen da ostalariaren inguruan eta erro bidea jakin behar da baina erroaren muntaketa punturik ez da zehaztu. The command needs to know the user's name, but no username is defined. Komandoak erabiltzailearen izena jakin behar du baina ez da zehaztu erabiltzaile-izenik. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Sortu partizio bat MiB MiB Partition &Type: PartizioMo&ta: &Primary &Primarioa E&xtended &Hedatua Fi&le System: Fi&txategi-Sistema: LVM LV name LVM LV izena Flags: Banderak: &Mount Point: &Muntatze Puntua: Si&ze: &Tamaina: En&crypt En%kriptatu Logical Logikoa Primary Primarioa GPT GPT Mountpoint already in use. Please select another one. Muntatze-puntua erabiltzen. Mesedez aukeratu beste bat. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. %1 partizioa berria sortzen %2n. The installer failed to create partition on disk '%1'. Huts egin du instalatzaileak '%1' diskoan partizioa sortzen. CreatePartitionTableDialog Create Partition Table Sortu Partizio Taula Creating a new partition table will delete all existing data on the disk. Partizio taula berria sortzean diskoan dauden datu guztiak ezabatuko dira. What kind of partition table do you want to create? Zein motatako partizio taula sortu nahi duzu? Master Boot Record (MBR) Master Boot Record (MBR) GUID Partition Table (GPT) GUID Partizio Taula (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Sortu %1 partizio taula berria %2n. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Sortu <strong>%1</strong> partizio taula berria <strong>%2</strong>n (%3). Creating new %1 partition table on %2. %1 partizio taula berria %2n sortzen. The installer failed to create a partition table on %1. Huts egin du instalatzaileak '%1' diskoan partizioa taula sortzen. CreateUserJob Create user %1 Sortu %1 erabiltzailea Create user <strong>%1</strong>. Sortu <strong>%1</strong> erabiltzailea Creating user %1. %1 erabiltzailea sortzen. Sudoers dir is not writable. Ezin da sudoers direktorioan idatzi. Cannot create sudoers file for writing. Ezin da sudoers fitxategia sortu bertan idazteko. Cannot chmod sudoers file. Ezin zaio chmod egin sudoers fitxategiari. Cannot open groups file for reading. Ezin da groups fitxategia ireki berau irakurtzeko. CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Sortu bolumen talde berria %1 izenaz. Create new volume group named <strong>%1</strong>. Sortu bolumen talde berria<strong> %1</strong> izenaz. Creating new volume group named %1. Bolumen talde berria sortzen %1 izenaz. The installer failed to create a volume group named '%1'. Huts egin du instalatzaileak '%1' izeneko bolumen taldea sortzen. DeactivateVolumeGroupJob Deactivate volume group named %1. Desaktibatu %1 izeneko bolumen taldea. Deactivate volume group named <strong>%1</strong>. Desaktibatu <strong>%1</strong> izeneko bolumen taldea. The installer failed to deactivate a volume group named %1. Huts egin du instalatzaileak '%1' izeneko bolumen taldea desaktibatzen. DeletePartitionJob Delete partition %1. Ezabatu %1 partizioa. Delete partition <strong>%1</strong>. Ezabatu <strong>%1</strong> partizioa. Deleting partition %1. %1 partizioa ezabatzen. The installer failed to delete partition %1. Huts egin du instalatzaileak %1 partizioa ezabatzen. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. <strong>partizio-taula</strong> mota aukeratutako biltegiragailuan.<br><br>Partizio-taula mota aldatzeko modu bakarra ezabatzea da eta berriro sortu partizio-taula zerotik, eta ekintza horrek biltegiragailuan dauden datu guztiak hondatuko ditu.<br>Instalatzaile honek egungo partizio-taula mantenduko du, besterik ez baduzu esplizituki aukeratzen.<br>Ez bazaude seguru horri buruz, sistema modernoetan GPT hobe da. This device has a <strong>%1</strong> partition table. Gailuak <strong>%1</strong> partizio taula dauka. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. Hau <strong>begizta</strong> gailu bat da. <br><br>Partiziorik gabeko sasi-gailu bat fitxategiak eskuragarri jartzen dituena gailu bloke erara. Ezarpen mota honek normalean fitxategi-sistema bakarra dauka. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1 - (%2) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Failed to open %1 Huts egin du %1 irekitzean DummyCppJob Dummy C++ Job Dummy C++ lana EditExistingPartitionDialog Edit Existing Partition Editatu badagoen partizioa Content: Edukia: &Keep M&antendu Format Formateatu Warning: Formatting the partition will erase all existing data. Oharra: Partizioa formateatzean dauden datu guztiak ezabatuko dira. &Mount Point: &Muntatze Puntua: Si&ze: &Tamaina: MiB MiB Fi&le System: Fi&txategi-Sistema: Flags: Banderak: Mountpoint already in use. Please select another one. Muntatze-puntua erabiltzen. Mesedez aukeratu beste bat. EncryptWidget Form Formulario En&crypt system Sistema en%kriptatua Passphrase Pasahitza Confirm passphrase Berretsi pasahitza Please enter the same passphrase in both boxes. Mesedez sartu pasahitz berdina bi kutxatan. FillGlobalStorageJob Set partition information Ezarri partizioaren informazioa Install %1 on <strong>new</strong> %2 system partition. Instalatu %1 sistemako %2 partizio <strong>berrian</strong>. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Ezarri %2 partizio <strong>berria</strong> <strong>%1</strong> muntatze puntuarekin. Install %2 on %3 system partition <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Ezarri %3 partizioa <strong>%1</strong> <strong>%2</strong> muntatze puntuarekin. Install boot loader on <strong>%1</strong>. Instalatu abio kargatzailea <strong>%1</strong>-(e)n. Setting up mount points. Muntatze puntuak ezartzen. FinishedPage Form Formulario <Restart checkbox tooltip> &Restart now &Berrabiarazi orain <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. FinishedViewStep Finish Bukatu Setup Complete Installation Complete Instalazioa amaitua The setup of %1 is complete. The installation of %1 is complete. %1 instalazioa amaitu da. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatting partition %1 with file system %2. %1 partizioa formateatzen %2 sistemaz. The installer failed to format partition %1 on disk '%2'. Huts egin du instalatzaileak %1 partizioa sortzen '%2' diskoan. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source The system is not plugged in to a power source. Sistema ez dago indar iturri batetara konektatuta. is connected to the Internet Internetera konektatuta dago The system is not connected to the Internet. Sistema ez dago Internetera konektatuta. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. Instalatzailea ez dabil exekutatzen administrari eskubideekin. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. Pantaila txikiegia da instalatzailea erakusteko. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Konsole ez dago instalatuta Please install KDE Konsole and try again! Mesedez instalatu KDE kontsola eta saiatu berriz! Executing script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script Script KeyboardPage Set keyboard model to %1.<br/> Ezarri teklatu mota %1ra.<br/> Set keyboard layout to %1/%2. Ezarri teklatu diseinua %1%2ra. KeyboardViewStep Keyboard Teklatua LCLocaleDialog System locale setting Sistemaren locale ezarpena The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. &Cancel &Utzi &OK &Ados LicensePage Form Formulario <h1>License Agreement</h1> I accept the terms and conditions above. Goiko baldintzak onartzen ditut. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License Lizentzia LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> File: %1 Show the license text Open license agreement in browser. Hide license text LocalePage The system language will be set to %1. %1 ezarriko da sistemako hizkuntza bezala. The numbers and dates locale will be set to %1. Zenbaki eta daten eskualdea %1-(e)ra ezarri da. Region: Eskualdea: Zone: Zonaldea: &Change... &Aldatu... Set timezone to %1/%2.<br/> Ordu-zonaldea %1%2-ra ezarri da.<br/> LocaleViewStep Location Kokapena LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Sortu makina-id. Configuration Error No root mount point is set for MachineId. NetInstallPage Name Izena Description Deskribapena Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Incorrect configuration) NetInstallViewStep Package selection Pakete aukeraketa Office software Office package Browser software Browser package Web browser Kernel Services Login Desktop Applications NotesQmlViewStep Notes OEMPage Ba&tch: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> OEMViewStep OEM Configuration Set the OEM Batch Identifier to <code>%1</code>. PWQ Password is too short Pasahitza laburregia da Password is too long Pasahitza luzeegia da Password is too weak Pasahitza ahulegia da Memory allocation error when setting '%1' Memory allocation error The password is the same as the old one Pasahitza aurreko zahar baten berdina da The password is a palindrome Pasahitza palindromoa da The password differs with case changes only The password is too similar to the old one Pasahitza aurreko zahar baten oso antzerakoa da The password contains the user name in some form The password contains words from the real name of the user in some form The password contains forbidden words in some form The password contains less than %1 digits Pasahitzak %1 baino zenbaki gutxiago ditu The password contains too few digits Pasahitzak zenbaki gutxiegi ditu The password contains less than %1 uppercase letters Pasahitzak %1 baino maiuskula gutxiago ditu The password contains too few uppercase letters Pasahitzak maiuskula gutxiegi ditu The password contains less than %1 lowercase letters Pasahitzak %1 baino minuskula gutxiago ditu The password contains too few lowercase letters Pasahitzak minuskula gutxiegi ditu The password contains less than %1 non-alphanumeric characters Pasahitzak alfabetokoak ez diren %1 baino karaktere gutxiago ditu The password contains too few non-alphanumeric characters Pasahitzak alfabetokoak ez diren karaktere gutxiegi ditu The password is shorter than %1 characters Pasahitza %1 karaktere baino motzagoa da. The password is too short Pasahitza motzegia da The password is just rotated old one The password contains less than %1 character classes The password does not contain enough character classes The password contains more than %1 same characters consecutively The password contains too many same characters consecutively The password contains more than %1 characters of the same class consecutively The password contains too many characters of the same class consecutively The password contains monotonic sequence longer than %1 characters The password contains too long of a monotonic character sequence No password supplied Cannot obtain random numbers from the RNG device Password generation failed - required entropy too low for settings The password fails the dictionary check - %1 The password fails the dictionary check Unknown setting - %1 Unknown setting Bad integer value of setting - %1 Bad integer value Setting %1 is not of integer type Setting is not of integer type Setting %1 is not of string type Setting is not of string type Opening the configuration file failed Ezin izan da konfigurazio fitxategia zabaldu. The configuration file is malformed Konfigurazio fitxategia ez dago ondo eginda. Fatal failure Hutsegite larria Unknown error Hutsegite ezezaguna Password is empty PackageChooserPage Form Formulario Product Name TextLabel Long Product Description Package Selection Please pick a product from the list. The selected product will be installed. PackageChooserViewStep Packages Page_Keyboard Form Formulario Keyboard Model: Teklatu Modeloa: Type here to test your keyboard Idatzi hemen zure teklatua frogatzeko Page_UserSetup Form Formulario What is your name? Zein da zure izena? What name do you want to use to log in? Zein izen erabili nahi duzu saioa hastean? Choose a password to keep your account safe. Aukeratu pasahitza zure kontua babesteko. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>Pasahitza berbera birritan sartu, idazketa akatsak ez dauden egiaztatzeko. Pasahitza on batek letrak, zenbakiak eta puntuazio sinboloak izan behar ditu, zortzi karaktere gutxienez izan behar ditu eta tarteka-marteka aldatu behar izango litzateke.</small> What is the name of this computer? Zein da ordenagailu honen izena? Your Full Name login <small>This name will be used if you make the computer visible to others on a network.</small> <small>Izen hau erakutsiko da sarean zure ordenagailua besteei erakustean.</small> Computer Name Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Hasi saioa automatikoki pasahitza eskatu gabe. Use the same password for the administrator account. Erabili pasahitz bera administratzaile kontuan. Choose a password for the administrator account. Aukeratu pasahitz bat administratzaile kontuarentzat. <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Sartu pasahitza birritan, honela tekleatze erroreak egiaztatzeko.</small> PartitionLabelsView Root Root Home Home Boot Boot EFI system EFI sistema Swap Swap New partition for %1 Partizio berri %1(e)ntzat New partition Partizio berria %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space Espazio librea New partition Partizio berria Name Izena File System Fitxategi Sistema Mount Point Muntatze Puntua Size Tamaina PartitionPage Form Formulario Storage de&vice: Biltegiratze-gailua: &Revert All Changes Atze&ra bota aldaketa guztiak: New Partition &Table Partizio &Taula berria Cre&ate Sor&tu &Edit &Editatu &Delete E&zabatu New Volume Group Bolumen Talde berria Resize Volume Group Bolumen Talde berriaren tamaina aldatu Deactivate Volume Group Bolumen Taldea desaktibatu Remove Volume Group Bolumen Taldea ezabatu I&nstall boot loader on: Abio kargatzailea I&nstalatu bertan: Are you sure you want to create a new partition table on %1? Ziur al zaude partizio-taula berri bat %1-(e)an sortu nahi duzula? Can not create new partition Ezin da partizio berririk sortu The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. PartitionViewStep Gathering system information... Sistemaren informazioa eskuratzen... Partitions Partizioak Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <strong>Replace</strong> a partition with %1. <strong>Manual</strong> partitioning. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Current: Unekoa: After: Ondoren: No EFI system partition configured An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. EFI system partition flag not set An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form Formulario Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... Fitxategiak geroko gordetzen... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: Irteera: External command crashed. Kanpo-komandoak huts egin du. Command <i>%1</i> crashed. <i>%1</i> komandoak huts egin du. External command failed to start. Ezin izan da %1 kanpo-komandoa abiarazi. Command <i>%1</i> failed to start. Ezin izan da <i>%1</i> komandoa abiarazi. Internal error when starting command. Barne-akatsa komandoa abiarazterakoan. Bad parameters for process job call. External command failed to finish. Kanpo-komandoa ez da bukatu. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Kanpo-komandoak akatsekin bukatu da. Command <i>%1</i> finished with exit code %2. QObject Default Keyboard Model Teklatu mota lehenetsia Default Lehenetsia unknown Ezezaguna extended Hedatua unformatted Formatugabea swap swap Unpartitioned space or unknown partition table (no mount point) Requirements checking for module <i>%1</i> is complete. %1 (%2) language[name] (country[name]) %1 (%2) No product No description provided. File not found Path <pre>%1</pre> must be an absolute path. Could not create new random file <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form Formulario Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. The selected item does not appear to be a valid partition. %1 cannot be installed on empty space. Please select an existing partition. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 cannot be installed on this partition. Data partition (%1) Unknown system partition (%1) %1 system partition (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. The EFI system partition at %1 will be used for starting %2. %1eko EFI partizio sistema erabiliko da abiarazteko %2. EFI system partition: EFI sistema-partizioa: ResizeFSJob Resize Filesystem Job Invalid configuration Konfigurazio baliogabea The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. Tamaina aldatu %1 partizioari. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. ResizeVolumeGroupDialog Resize Volume Group Bolumen Talde berriaren tamaina aldatu ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: Emaitza egokienak lortzeko, ziurtatu ordenagailu honek baduela: System requirements Sistemaren betebeharrak ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> Konputagailu honek ez dauzka gutxieneko eskakizunak %1 instalatzeko. <br/>Instalazioak ezin du jarraitu. <a href="#details">Xehetasunak...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. Konputagailu honek ez du betetzen gomendatutako zenbait eskakizun %1 instalatzeko. <br/>Instalazioak jarraitu ahal du, baina zenbait ezaugarri desgaituko dira. This program will ask you some questions and set up %2 on your computer. Konputagailuan %2 ezartzeko programa honek hainbat galdera egingo dizkizu. ScanningDialog Scanning storage devices... Biltegiratze-gailuak eskaneatzen... Partitioning Partizioa(k) egiten SetHostNameJob Set hostname %1 Set hostname <strong>%1</strong>. Setting hostname %1. Internal Error Barne errorea Cannot write hostname to target system SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Failed to write keyboard configuration for the virtual console. Failed to write to %1 Ezin izan da %1 partizioan idatzi Failed to write keyboard configuration for X11. Failed to write keyboard configuration to existing /etc/default directory. SetPartFlagsJob Set flags on partition %1. Set flags on %1MiB %2 partition. Set flags on new partition. Clear flags on partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag new partition as <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. SetPasswordJob Set password for user %1 Ezarri %1 erabiltzailearen pasahitza Setting password for user %1. Bad destination system path. rootMountPoint is %1 root Muntatze Puntua %1 da Cannot disable root account. Ezin da desgaitu root kontua. passwd terminated with error code %1. Cannot set password for user %1. usermod terminated with error code %1. SetTimezoneJob Set timezone to %1/%2 Cannot access selected timezone path. Bad path: %1 Bide okerra: %1 Cannot set timezone. Link creation failed, target: %1; link name: %2 Cannot set timezone, Ezin da ezarri ordu-zonaldea Cannot open /etc/timezone for writing ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) SummaryPage This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. SummaryViewStep Summary Laburpena TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingMachineNeonJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form Formulario Placeholder <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. TrackingViewStep Feedback Feedback UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> Your username is too long. Zure erabiltzaile-izena luzeegia da. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Only letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Zure ostalari-izena laburregia da. Your hostname is too long. Zure ostalari-izena luzeegia da. Your passwords do not match! Pasahitzak ez datoz bat! UsersViewStep Users Erabiltzaileak VariantModel Key Value VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Bolumen Fisikoen Zerrenda Volume Group Name: Bolumen Taldearen Izena: Volume Group Type: Bolumen Talde Mota: Physical Extent Size: MiB MiB Total Size: Tamaina guztira: Used Size: Erabilitako tamaina: Total Sectors: Sektoreak guztira: Quantity of LVs: LV kopurua: WelcomePage Form Formulario Select application and system language Open donations website &Donate Open help and support website Open issues and bug-tracking website Open release notes website &Release notes &Known issues &Arazo ezagunak &Support &Laguntza &About Honi &buruz <h1>Welcome to the %1 installer.</h1> <h1>Ongi etorri %1 instalatzailera.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Welcome to %1 setup.</h1> About %1 setup About %1 installer %1 instalatzaileari buruz <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support %1 euskarria WelcomeQmlViewStep Welcome Ongi etorri WelcomeViewStep Welcome Ongi etorri notesqml <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> About Support Known issues Release notes Donate calamares-3.2.20/lang/calamares_fa.ts000066400000000000000000004566421362604102500174350ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. BootLoaderModel Master Boot Record of %1 Boot Partition System Partition Do not install a boot loader %1 (%2) Calamares::BlankViewStep Blank Page Calamares::DebugWindow Form GlobalStorage JobQueue Modules Type: none Interface: Tools Reload Stylesheet Widget Tree Debug information Calamares::ExecutionViewStep Set up Install Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Calamares::PythonJob Running %1 operation. Bad working directory path Working directory %1 for python job %2 is not readable. Bad main script file Main script file %1 for python job %2 is not readable. Boost.Python error in job "%1". Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager &Back &Next &Cancel Cancel setup without changing the system. Cancel installation without changing the system. Setup Failed Would you like to paste the install log to the web? Install Log Paste URL The upload was unsuccessful. No web-paste was done. Calamares Initialization Failed %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. <br/>The following modules could not be loaded: Continue with installation? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Set up &Install Setup is complete. Close the setup program. Cancel setup? Cancel installation? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. &Yes &No &Close Continue with setup? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> &Install now Go &back &Done The installation is complete. Close the installer. Error Installation Failed CalamaresPython::Helper Unknown exception type unparseable Python error unparseable Python traceback Unfetchable Python error. CalamaresUtils Install log posted to: %1 CalamaresWindow %1 Setup Program %1 Installer Show debug information CheckerContainer Gathering system information... ChoicePage Form After: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Boot loader location: Select storage de&vice: Current: Reuse %1 as home partition for %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. <strong>Select a partition to install on</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. The EFI system partition at %1 will be used for starting %2. EFI system partition: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. No Swap Reuse Swap Swap (no Hibernate) Swap (with Hibernate) Swap to file <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. ClearMountsJob Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 ClearTempMountsJob Clear all temporary mounts. Clearing all temporary mounts. Cannot get list of temporary mounts. Cleared all temporary mounts. CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition MiB Partition &Type: &Primary E&xtended Fi&le System: LVM LV name Flags: &Mount Point: Si&ze: En&crypt Logical Primary GPT Mountpoint already in use. Please select another one. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. The installer failed to create partition on disk '%1'. CreatePartitionTableDialog Create Partition Table Creating a new partition table will delete all existing data on the disk. What kind of partition table do you want to create? Master Boot Record (MBR) GUID Partition Table (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Creating new %1 partition table on %2. The installer failed to create a partition table on %1. CreateUserJob Create user %1 Create user <strong>%1</strong>. Creating user %1. Sudoers dir is not writable. Cannot create sudoers file for writing. Cannot chmod sudoers file. Cannot open groups file for reading. CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. Delete partition <strong>%1</strong>. Deleting partition %1. The installer failed to delete partition %1. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. This device has a <strong>%1</strong> partition table. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - (%2) device[name] - (device-node[name]) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Failed to open %1 DummyCppJob Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Content: &Keep Format Warning: Formatting the partition will erase all existing data. &Mount Point: Si&ze: MiB Fi&le System: Flags: Mountpoint already in use. Please select another one. EncryptWidget Form En&crypt system Passphrase Confirm passphrase Please enter the same passphrase in both boxes. FillGlobalStorageJob Set partition information Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Install boot loader on <strong>%1</strong>. Setting up mount points. FinishedPage Form <Restart checkbox tooltip> &Restart now <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. FinishedViewStep Finish Setup Complete Installation Complete The setup of %1 is complete. The installation of %1 is complete. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatting partition %1 with file system %2. The installer failed to format partition %1 on disk '%2'. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source The system is not plugged in to a power source. is connected to the Internet The system is not connected to the Internet. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Please install KDE Konsole and try again! Executing script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script KeyboardPage Set keyboard model to %1.<br/> Set keyboard layout to %1/%2. KeyboardViewStep Keyboard LCLocaleDialog System locale setting The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. &Cancel &OK LicensePage Form <h1>License Agreement</h1> I accept the terms and conditions above. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> File: %1 Show the license text Open license agreement in browser. Hide license text LocalePage The system language will be set to %1. The numbers and dates locale will be set to %1. Region: Zone: &Change... Set timezone to %1/%2.<br/> LocaleViewStep Location LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Configuration Error No root mount point is set for MachineId. NetInstallPage Name Description Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Incorrect configuration) NetInstallViewStep Package selection Office software Office package Browser software Browser package Web browser Kernel Services Login Desktop Applications NotesQmlViewStep Notes OEMPage Ba&tch: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> OEMViewStep OEM Configuration Set the OEM Batch Identifier to <code>%1</code>. PWQ Password is too short Password is too long Password is too weak Memory allocation error when setting '%1' Memory allocation error The password is the same as the old one The password is a palindrome The password differs with case changes only The password is too similar to the old one The password contains the user name in some form The password contains words from the real name of the user in some form The password contains forbidden words in some form The password contains less than %1 digits The password contains too few digits The password contains less than %1 uppercase letters The password contains too few uppercase letters The password contains less than %1 lowercase letters The password contains too few lowercase letters The password contains less than %1 non-alphanumeric characters The password contains too few non-alphanumeric characters The password is shorter than %1 characters The password is too short The password is just rotated old one The password contains less than %1 character classes The password does not contain enough character classes The password contains more than %1 same characters consecutively The password contains too many same characters consecutively The password contains more than %1 characters of the same class consecutively The password contains too many characters of the same class consecutively The password contains monotonic sequence longer than %1 characters The password contains too long of a monotonic character sequence No password supplied Cannot obtain random numbers from the RNG device Password generation failed - required entropy too low for settings The password fails the dictionary check - %1 The password fails the dictionary check Unknown setting - %1 Unknown setting Bad integer value of setting - %1 Bad integer value Setting %1 is not of integer type Setting is not of integer type Setting %1 is not of string type Setting is not of string type Opening the configuration file failed The configuration file is malformed Fatal failure Unknown error Password is empty PackageChooserPage Form Product Name TextLabel Long Product Description Package Selection Please pick a product from the list. The selected product will be installed. PackageChooserViewStep Packages Page_Keyboard Form Keyboard Model: Type here to test your keyboard Page_UserSetup Form What is your name? What name do you want to use to log in? Choose a password to keep your account safe. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> What is the name of this computer? Your Full Name login <small>This name will be used if you make the computer visible to others on a network.</small> Computer Name Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Use the same password for the administrator account. Choose a password for the administrator account. <small>Enter the same password twice, so that it can be checked for typing errors.</small> PartitionLabelsView Root Home Boot EFI system Swap New partition for %1 New partition %1 %2 size[number] filesystem[name] PartitionModel Free Space New partition Name File System Mount Point Size PartitionPage Form Storage de&vice: &Revert All Changes New Partition &Table Cre&ate &Edit &Delete New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group I&nstall boot loader on: Are you sure you want to create a new partition table on %1? Can not create new partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. PartitionViewStep Gathering system information... Partitions Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <strong>Replace</strong> a partition with %1. <strong>Manual</strong> partitioning. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Current: After: No EFI system partition configured An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. EFI system partition flag not set An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: External command crashed. Command <i>%1</i> crashed. External command failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Bad parameters for process job call. External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Command <i>%1</i> finished with exit code %2. QObject Default Keyboard Model Default unknown extended unformatted swap Unpartitioned space or unknown partition table (no mount point) Requirements checking for module <i>%1</i> is complete. %1 (%2) language[name] (country[name]) No product No description provided. File not found Path <pre>%1</pre> must be an absolute path. Could not create new random file <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. The selected item does not appear to be a valid partition. %1 cannot be installed on empty space. Please select an existing partition. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 cannot be installed on this partition. Data partition (%1) Unknown system partition (%1) %1 system partition (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. The EFI system partition at %1 will be used for starting %2. EFI system partition: ResizeFSJob Resize Filesystem Job Invalid configuration The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. ResizeVolumeGroupDialog Resize Volume Group ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: System requirements ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. This program will ask you some questions and set up %2 on your computer. ScanningDialog Scanning storage devices... Partitioning SetHostNameJob Set hostname %1 Set hostname <strong>%1</strong>. Setting hostname %1. Internal Error Cannot write hostname to target system SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Failed to write keyboard configuration for the virtual console. Failed to write to %1 Failed to write keyboard configuration for X11. Failed to write keyboard configuration to existing /etc/default directory. SetPartFlagsJob Set flags on partition %1. Set flags on %1MiB %2 partition. Set flags on new partition. Clear flags on partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag new partition as <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. SetPasswordJob Set password for user %1 Setting password for user %1. Bad destination system path. rootMountPoint is %1 Cannot disable root account. passwd terminated with error code %1. Cannot set password for user %1. usermod terminated with error code %1. SetTimezoneJob Set timezone to %1/%2 Cannot access selected timezone path. Bad path: %1 Cannot set timezone. Link creation failed, target: %1; link name: %2 Cannot set timezone, Cannot open /etc/timezone for writing ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) SummaryPage This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. SummaryViewStep Summary TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingMachineNeonJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form Placeholder <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. TrackingViewStep Feedback UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> Your username is too long. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Only letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Your hostname is too long. Your passwords do not match! UsersViewStep Users VariantModel Key Value VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB Total Size: Used Size: Total Sectors: Quantity of LVs: WelcomePage Form Select application and system language Open donations website &Donate Open help and support website Open issues and bug-tracking website Open release notes website &Release notes &Known issues &Support &About <h1>Welcome to the %1 installer.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Welcome to %1 setup.</h1> About %1 setup About %1 installer <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support WelcomeQmlViewStep Welcome WelcomeViewStep Welcome notesqml <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> About Support Known issues Release notes Donate calamares-3.2.20/lang/calamares_fi_FI.ts000066400000000000000000005504001362604102500200060ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. Järjestelmän <strong>käynnistysympäristö.</strong> <br><br>Vanhemmat x86-järjestelmät tukevat vain <strong>BIOS</strong>-järjestelmää.<br>Nykyaikaiset järjestelmät käyttävät yleensä <strong>EFI</strong>,mutta voivat myös näkyä BIOS tilassa, jos ne käynnistetään yhteensopivuustilassa. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. Tämä järjestelmä käynnistettiin <strong>EFI</strong> -käynnistysympäristössä.<br><br>Jos haluat määrittää EFI-ympäristön, tämän asennuksen on asennettava käynnistyksen latausohjelma, kuten <strong>GRUB</strong> tai <strong>systemd-boot</strong> ohjaus <strong>EFI -järjestelmän osioon</strong>. Tämä on automaattinen oletus, ellet valitse manuaalista osiota, jolloin sinun on valittava asetukset itse. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. Järjestelmä käynnistettiin <strong>BIOS</strong> -käynnistysympäristössä.<br><br>Jos haluat määrittää käynnistämisen BIOS-ympäristöstä, tämän asennusohjelman on asennettava käynnistyksen lataaja, kuten<strong>GRUB</strong>, joko osion alkuun tai <strong>Master Boot Record</strong> ,joka on osiotaulukon alussa (suositus). Tämä on automaattista, ellet valitset manuaalista osiota, jolloin sinun on valittava asetukset itse. BootLoaderModel Master Boot Record of %1 %1:n MBR Boot Partition Käynnistysosio System Partition Järjestelmäosio Do not install a boot loader Älä asenna käynnistyslatainta %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page Tyhjä sivu Calamares::DebugWindow Form Lomake GlobalStorage Globaali-tallennus JobQueue Työjono Modules Moduulit Type: Tyyppi: none tyhjä Interface: Käyttöliittymä: Tools Työkalut Reload Stylesheet Virkistä tyylisivu Widget Tree Widget puu Debug information Virheenkorjaustiedot Calamares::ExecutionViewStep Set up Määritä Install Asenna Calamares::FailJob Job failed (%1) Työ epäonnistui (%1) Programmed job failure was explicitly requested. Ohjelmoitua työn epäonnistumista pyydettiin erikseen. Calamares::JobThread Done Valmis Calamares::NamedJob Example job (%1) Esimerkki työ (%1) Calamares::ProcessJob Run command '%1' in target system. Suorita komento '%1' kohdejärjestelmässä. Run command '%1'. Suorita komento '%1'. Running command %1 %2 Suoritetaan komentoa %1 %2 Calamares::PythonJob Running %1 operation. Suoritetaan %1 toimenpidettä. Bad working directory path Epäkelpo työskentelyhakemiston polku Working directory %1 for python job %2 is not readable. Työkansio %1 pythonin työlle %2 ei ole luettavissa. Bad main script file Huono pää-skripti tiedosto Main script file %1 for python job %2 is not readable. Pääskriptitiedosto %1 pythonin työlle %2 ei ole luettavissa. Boost.Python error in job "%1". Boost.Python virhe työlle "%1". Calamares::QmlViewStep Loading ... Ladataan ... QML Step <i>%1</i>. QML-vaihe <i>%1</i>. Loading failed. Lataus epäonnistui. Calamares::RequirementsChecker Waiting for %n module(s). Odotetaan %n moduuli(t). Odotetaan %n moduuli(t). (%n second(s)) (%n sekunttia(s)) (%n sekunttia(s)) System-requirements checking is complete. Järjestelmävaatimusten tarkistus on valmis. Calamares::ViewManager &Back &Takaisin &Next &Seuraava &Cancel &Peruuta Cancel setup without changing the system. Peruuta asennus muuttamatta järjestelmää. Cancel installation without changing the system. Peruuta asennus tekemättä muutoksia järjestelmään. Setup Failed Asennus epäonnistui Would you like to paste the install log to the web? Haluatko liittää asennuslokin verkkoon? Install Log Paste URL Asenna lokitiedon URL-osoite The upload was unsuccessful. No web-paste was done. Lähettäminen epäonnistui. Web-liittämistä ei tehty. Calamares Initialization Failed Calamares-alustustaminen epäonnistui %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. %1 ei voida asentaa. Calamares ei voinut ladata kaikkia määritettyjä moduuleja. Ongelma on siinä, miten jakelu käyttää Calamaresia. <br/>The following modules could not be loaded: <br/>Seuraavia moduuleja ei voitu ladata: Continue with installation? Jatka asennusta? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> %1 asennusohjelma on aikeissa tehdä muutoksia levylle, jotta voit määrittää kohteen %2.<br/><strong>Et voi kumota näitä muutoksia.</strong> &Set up now &Määritä nyt &Set up &Määritä &Install &Asenna Setup is complete. Close the setup program. Asennus on valmis. Sulje asennusohjelma. Cancel setup? Peruuta asennus? Cancel installation? Peruuta asennus? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Haluatko todella peruuttaa nykyisen asennuksen? Asennusohjelma lopetetaan ja kaikki muutokset menetetään. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Oletko varma että haluat peruuttaa käynnissä olevan asennusprosessin? Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat. &Yes &Kyllä &No &Ei &Close &Sulje Continue with setup? Jatka asennusta? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> Asennus ohjelman %1 on tehtävä muutoksia levylle, jotta %2 voidaan asentaa.<br/><strong>Et voi kumota näitä muutoksia.</strong> &Install now &Asenna nyt Go &back Mene &takaisin &Done &Valmis The installation is complete. Close the installer. Asennus on valmis. Sulje asennusohjelma. Error Virhe Installation Failed Asennus Epäonnistui CalamaresPython::Helper Unknown exception type Tuntematon poikkeustyyppi unparseable Python error jäsentämätön Python virhe unparseable Python traceback jäsentämätön Python jäljitys Unfetchable Python error. Python virhettä ei voitu hakea. CalamaresUtils Install log posted to: %1 Asennuksen loki lähetetty: %1 CalamaresWindow %1 Setup Program %1 Asennusohjelma %1 Installer %1 Asennusohjelma Show debug information Näytä virheenkorjaustiedot CheckerContainer Gathering system information... Kerätään järjestelmän tietoja... ChoicePage Form Lomake After: Jälkeen: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Manuaalinen osiointi </strong><br/>Voit luoda tai muuttaa osioita itse. Boot loader location: Käynnistyksen lataajan sijainti: Select storage de&vice: Valitse tallennus&laite: Current: Nykyinen: Reuse %1 as home partition for %2. Käytä %1 uudelleen kotiosiona kohteelle %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Valitse supistettava osio ja säädä alarivillä kokoa vetämällä</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 supistetaan %2Mib:iin ja uusi %3MiB-osio luodaan kohteelle %4. <strong>Select a partition to install on</strong> <strong>Valitse asennettava osio</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. EFI-osiota ei löydy mistään tässä järjestelmässä. Siirry takaisin ja käytä manuaalista osiointia, kun haluat määrittää %1 The EFI system partition at %1 will be used for starting %2. EFI-järjestelmän osiota %1 käytetään käynnistettäessä %2. EFI system partition: EFI järjestelmäosio This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Tällä tallennuslaitteella ei näytä olevan käyttöjärjestelmää. Mitä haluat tehdä?<br/>Voit tarkistaa ja vahvistaa valintasi ennen kuin tallennuslaitteeseen tehdään muutoksia. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Tyhjennä levy</strong><br/>Tämä <font color="red">poistaa</font> kaikki tiedot valitussa tallennuslaitteessa. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Tässä tallennuslaitteessa on %1 dataa. Mitä haluat tehdä?<br/>Voit tarkistaa ja vahvistaa valintasi ennen kuin tallennuslaitteeseen tehdään muutoksia. No Swap Ei välimuistia Reuse Swap Kierrätä välimuistia Swap (no Hibernate) Välimuisti (ei lepotilaa) Swap (with Hibernate) Välimuisti (lepotilan kanssa) Swap to file Välimuisti tiedostona <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Asenna nykyisen rinnalle</strong><br/>Asennus ohjelma supistaa osion tehdäkseen tilaa kohteelle %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Osion korvaaminen</strong><br/>korvaa osion %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Tämä tallennuslaite sisältää jo käyttöjärjestelmän. Mitä haluaisit tehdä?<br/>Voit tarkistaa ja vahvistaa valintasi, ennen kuin tallennuslaitteeseen tehdään muutoksia. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Tämä tallennuslaite sisältää jo useita käyttöjärjestelmiä. Mitä haluaisit tehdä?<br/>Voit tarkistaa ja vahvistaa valintasi, ennen kuin tallennuslaitteeseen tehdään muutoksia. ClearMountsJob Clear mounts for partitioning operations on %1 Poista osiointitoimenpiteitä varten tehdyt liitokset kohteesta %1 Clearing mounts for partitioning operations on %1. Tyhjennät kiinnitys osiointitoiminnoille %1. Cleared all mounts for %1 Kaikki liitokset poistettu kohteesta %1 ClearTempMountsJob Clear all temporary mounts. Poista kaikki väliaikaiset liitokset. Clearing all temporary mounts. Kaikki tilapäiset kiinnitykset tyhjennetään. Cannot get list of temporary mounts. Väliaikaisten kiinnitysten luetteloa ei voi hakea. Cleared all temporary mounts. Poistettu kaikki väliaikaiset liitokset. CommandList Could not run command. Komentoa ei voi suorittaa. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. Komento toimii isäntäympäristössä ja sen täytyy tietää juuren polku, mutta root-liityntä kohtaa ei ole määritetty. The command needs to know the user's name, but no username is defined. Komennon on tiedettävä käyttäjän nimi, mutta käyttäjän tunnusta ei ole määritetty. ContextualProcessJob Contextual Processes Job Prosessien yhteydessä tehtävät CreatePartitionDialog Create a Partition Luo levyosio MiB Mib Partition &Type: Osion &Tyyppi: &Primary &Ensisijainen E&xtended &Laajennettu Fi&le System: Tie&dosto järjestelmä: LVM LV name LVM LV nimi Flags: Liput: &Mount Point: &Liitoskohta: Si&ze: K&oko: En&crypt Sa&laa Logical Looginen Primary Ensisijainen GPT GPT Mountpoint already in use. Please select another one. Asennuskohde on jo käytössä. Valitse toinen. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Luo uusi %2Mib-osio %4 (%3) tiedostojärjestelmällä %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Luo uusi <strong>%2Mib</strong> osio <strong>%4</strong> (%3) tiedostojärjestelmällä <strong>%1</strong>. Creating new %1 partition on %2. Luodaan uutta %1-osiota kohteessa %2. The installer failed to create partition on disk '%1'. Asennusohjelma epäonnistui osion luonnissa levylle '%1'. CreatePartitionTableDialog Create Partition Table Luo Osiotaulukko Creating a new partition table will delete all existing data on the disk. Uuden osiotaulukon luominen poistaa kaikki olemassa olevat tiedostot levyltä. What kind of partition table do you want to create? Minkälaisen osiotaulukon haluat luoda? Master Boot Record (MBR) Master Boot Record (MBR) GUID Partition Table (GPT) GUID Partition Table (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Luo uusi %1 osiotaulukko kohteessa %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Luo uusi <strong>%1</strong> osiotaulukko kohteessa <strong>%2</strong> (%3). Creating new %1 partition table on %2. Luodaan uutta %1 osiotaulukkoa kohteelle %2. The installer failed to create a partition table on %1. Asennusohjelma epäonnistui osiotaulukon luonnissa kohteeseen %1. CreateUserJob Create user %1 Luo käyttäjä %1 Create user <strong>%1</strong>. Luo käyttäjä <strong>%1</strong>. Creating user %1. Luodaan käyttäjä %1. Sudoers dir is not writable. Ei voitu kirjoittaa Sudoers -hakemistoon. Cannot create sudoers file for writing. Ei voida luoda sudoers -tiedostoa kirjoitettavaksi. Cannot chmod sudoers file. Ei voida tehdä käyttöoikeuden muutosta sudoers -tiedostolle. Cannot open groups file for reading. Ei voida avata ryhmätiedostoa luettavaksi. CreateVolumeGroupDialog Create Volume Group Luo aseman ryhmä CreateVolumeGroupJob Create new volume group named %1. Luo uusi aseman ryhmä nimellä %1. Create new volume group named <strong>%1</strong>. Luo uusi aseman ryhmä nimellä <strong>%1</strong>. Creating new volume group named %1. Luodaan uusi aseman ryhmä nimellä %1. The installer failed to create a volume group named '%1'. Asennusohjelma ei voinut luoda aseman ryhmää nimellä '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Poista levyryhmän nimi %1 käytöstä. Deactivate volume group named <strong>%1</strong>. Poista levyryhmän nimi käytöstä. <strong>%1</strong>. The installer failed to deactivate a volume group named %1. Asennusohjelma ei pystynyt poistamaan levyryhmää nimellä %1. DeletePartitionJob Delete partition %1. Poista levyosio %1. Delete partition <strong>%1</strong>. Poista levyosio <strong>%1</strong>. Deleting partition %1. Poistetaan levyosiota %1. The installer failed to delete partition %1. Asennusohjelma epäonnistui osion %1 poistossa. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. Valitun tallennuslaitteen <strong>osion taulukon</strong> tyyppi.<br><br>Ainoa tapa muuttaa osion taulukon tyyppiä on poistaa ja luoda uudelleen osiot tyhjästä, mikä tuhoaa kaikki tallennuslaitteen tiedot. <br>Tämä asennusohjelma säilyttää nykyisen osion taulukon, ellet nimenomaisesti valitse muuta.<br>Jos olet epävarma, niin nykyaikaisissa järjestelmissä GPT on suositus. This device has a <strong>%1</strong> partition table. Tässälaitteessa on <strong>%1</strong> osion taulukko. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. Tämä <strong>loop</strong> -laite.<br><br>Se on pseudo-laite, jossa ei ole osio-taulukkoa ja joka tekee tiedostosta lohkotun aseman. Tällainen asennus sisältää yleensä vain yhden tiedostojärjestelmän. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. Tämä asennusohjelma <strong>ei tunnista osion taulukkoa</strong> valitussa tallennuslaitteessa.<br><br>Laitteessa ei ole osio-taulukkoa, tai taulukko on vioittunut tai tuntematon.<br>Tämä asennusohjelma voi luoda uuden osiontaulukon sinulle, joko automaattisesti tai manuaalisesti. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Tämä on suositeltava osion taulun tyyppi nykyaikaisille järjestelmille, jotka käyttävät <strong>EFI</strong> -käynnistysympäristöä. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. <br><br>Tämä osiotaulukon tyyppi on suositeltava vain vanhemmissa järjestelmissä, jotka käyttävät <strong>BIOS</strong> -käynnistysympäristöä. GPT:tä suositellaan useimmissa muissa tapauksissa.<br><br><strong>Varoitus:</strong>MBR-taulukko on vanhentunut MS-DOS-standardi.<br>Vain 4 <em>ensisijaisia</em> Vain ensisijaisia osioita voidaan luoda, ja 4, niistä yksi voi olla <em>laajennettu</em> osio, joka voi puolestaan sisältää monia osioita <em>loogisia</em> osioita. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1 - (%2) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Kirjoita LUKS-kokoonpano Dracutille %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Ohita LUKS-määrityksen kirjoittaminen Dracutille: "/" -osio ei ole salattu Failed to open %1 Ei voi avata %1 DummyCppJob Dummy C++ Job Dummy C++ -työ EditExistingPartitionDialog Edit Existing Partition Muokkaa olemassa olevaa osiota Content: Sisältö: &Keep &Säilytä Format Alusta Warning: Formatting the partition will erase all existing data. Varoitus: Osion alustus tulee poistamaan kaikki olemassa olevat tiedostot. &Mount Point: &Liitoskohta: Si&ze: K&oko: MiB Mib Fi&le System: Tie&dosto järjestelmä: Flags: Liput: Mountpoint already in use. Please select another one. Asennuskohde on jo käytössä. Valitse toinen. EncryptWidget Form Lomake En&crypt system Sa&laa järjestelmä Passphrase Salasana Confirm passphrase Vahvista salasana Please enter the same passphrase in both boxes. Anna sama salasana molemmissa ruuduissa. FillGlobalStorageJob Set partition information Aseta osion tiedot Install %1 on <strong>new</strong> %2 system partition. Asenna %1 <strong>uusi</strong> %2 järjestelmä osio. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Määritä <strong>uusi</strong> %2 -osio liitepisteellä<strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Asenna %2 - %3 -järjestelmän osioon <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Määritä %3 osio <strong>%1</strong> jossa on liitäntäpiste <strong>%2</strong>. Install boot loader on <strong>%1</strong>. Asenna käynnistyslatain <strong>%1</strong>. Setting up mount points. Liitosten määrittäminen. FinishedPage Form Lomake <Restart checkbox tooltip> <Restart checkbox tooltip> &Restart now &Käynnistä uudelleen <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>Valmista.</h1><br/>%1 on määritetty tietokoneellesi.<br/>Voit nyt alkaa käyttää uutta järjestelmääsi. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <html><head/><body><p>Kun tämä valintaruutu on valittu, järjestelmä käynnistyy heti, kun napsautat <span style="font-style:italic;">Valmis</span> -painiketta tai suljet asennusohjelman.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>Kaikki tehty.</h1><br/>%1 on asennettu tietokoneellesi.<br/>Voit joko uudelleenkäynnistää uuteen kokoonpanoosi, tai voit jatkaa %2 live-ympäristön käyttöä. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <html><head/><body><p>Kun tämä valintaruutu on valittuna, järjestelmä käynnistyy heti, kun napsautat <span style="font-style:italic;">Valmis</span> tai suljet asentimen.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Asennus epäonnistui</h1><br/>%1 ei ole määritetty tietokoneellesi.<br/> Virhesanoma oli: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Asennus epäonnistui </h1><br/>%1 ei ole asennettu tietokoneeseesi.<br/>Virhesanoma oli: %2. FinishedViewStep Finish Valmis Setup Complete Asennus valmis Installation Complete Asennus valmis The setup of %1 is complete. Asennus %1 on valmis. The installation of %1 is complete. Asennus %1 on valmis. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Alustaa osiota %1 (tiedostojärjestelmä: %2, koko: %3 MiB) - %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Alustus <strong>%3MiB</strong> osio <strong>%1</strong> tiedostojärjestelmällä <strong>%2</strong>. Formatting partition %1 with file system %2. Alustaa osiota %1 tiedostojärjestelmällä %2. The installer failed to format partition %1 on disk '%2'. Levyn '%2' osion %1 alustus epäonnistui. GeneralRequirements has at least %1 GiB available drive space vähintään %1 GiB vapaata levytilaa There is not enough drive space. At least %1 GiB is required. Levytilaa ei ole riittävästi. Vähintään %1 GiB tarvitaan. has at least %1 GiB working memory vähintään %1 GiB työmuistia The system does not have enough working memory. At least %1 GiB is required. Järjestelmässä ei ole tarpeeksi työmuistia. Vähintään %1 GiB vaaditaan. is plugged in to a power source on yhdistetty virtalähteeseen The system is not plugged in to a power source. Järjestelmä ei ole kytketty virtalähteeseen. is connected to the Internet on yhdistetty internetiin The system is not connected to the Internet. Järjestelmä ei ole yhteydessä internetiin. is running the installer as an administrator (root) ajaa asennusohjelmaa järjestelmänvalvojana (root) The setup program is not running with administrator rights. Asennus -ohjelma ei ole käynnissä järjestelmänvalvojan oikeuksin. The installer is not running with administrator rights. Asennus -ohjelma ei ole käynnissä järjestelmänvalvojan oikeuksin. has a screen large enough to show the whole installer näytöllä on riittävän suuri tarkkuus asentajalle The screen is too small to display the setup program. Näyttö on liian pieni, jotta asennus -ohjelma voidaan näyttää. The screen is too small to display the installer. Näyttö on liian pieni asentajan näyttämiseksi. HostInfoJob Collecting information about your machine. Kerätään tietoja laitteesta. IDJob OEM Batch Identifier OEM-erän tunniste Could not create directories <code>%1</code>. Hakemistoja ei voitu luoda <code>%1</code>. Could not open file <code>%1</code>. Tiedostoa ei voitu avata <code>%1</code>. Could not write to file <code>%1</code>. Tiedostoon ei voitu kirjoittaa <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. Initramfs luominen mkinitcpion avulla. InitramfsJob Creating initramfs. Luodaan initramfs. InteractiveTerminalPage Konsole not installed Pääte ei asennettuna Please install KDE Konsole and try again! Asenna KDE konsole ja yritä uudelleen! Executing script: &nbsp;<code>%1</code> Suoritetaan skripti: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script Skripti KeyboardPage Set keyboard model to %1.<br/> Aseta näppäimiston malli %1.<br/> Set keyboard layout to %1/%2. Aseta näppäimiston asetelmaksi %1/%2. KeyboardViewStep Keyboard Näppäimistö LCLocaleDialog System locale setting Järjestelmän maa-asetus The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. Järjestelmän kieli asetus vaikuttaa joidenkin komentorivin käyttöliittymän kieleen ja merkistön käyttöön.<br/>Nykyinen asetus on <strong>%1</strong>. &Cancel &Peruuta &OK &OK LicensePage Form Lomake <h1>License Agreement</h1> <h1>Lisenssisopimus</h1> I accept the terms and conditions above. Hyväksyn yllä olevat ehdot ja edellytykset. Please review the End User License Agreements (EULAs). Ole hyvä ja tarkista loppukäyttäjän lisenssisopimus (EULA). This setup procedure will install proprietary software that is subject to licensing terms. Tämä asennusohjelma asentaa patentoidun ohjelmiston, johon sovelletaan lisenssiehtoja. If you do not agree with the terms, the setup procedure cannot continue. Jos et hyväksy ehtoja, asennusta ei voida jatkaa. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Tämä asennus voi asentaa patentoidun ohjelmiston, johon sovelletaan lisenssiehtoja lisäominaisuuksien tarjoamiseksi ja käyttökokemuksen parantamiseksi. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Jos et hyväksy ehtoja, omaa ohjelmistoa ei asenneta, vaan sen sijaan käytetään avoimen lähdekoodin vaihtoehtoja. LicenseViewStep License Lisenssi LicenseWidget URL: %1 OSOITE: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 ajuri</strong><br/>- %2 <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 näytönohjaimet</strong><br/><font color="Grey">- %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 selaimen laajennus</strong><br/><font color="Grey">- %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 kodekki</strong><br/><font color="Grey">- %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 paketti</strong><br/><font color="Grey">- %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">- %2</font> File: %1 Tiedosto: %1 Show the license text Näytä lisenssiteksti Open license agreement in browser. Avaa lisenssisopimus selaimessa. Hide license text Piilota lisenssin teksti LocalePage The system language will be set to %1. Järjestelmän kielen asetuksena on %1. The numbers and dates locale will be set to %1. Numerot ja päivämäärät, paikallinen asetus on %1. Region: Alue: Zone: Vyöhyke: &Change... &Vaihda... Set timezone to %1/%2.<br/> Aseta aikavyöhyke %1/%2.<br/> LocaleViewStep Location Sijainti LuksBootKeyFileJob Configuring LUKS key file. LUKS-avaintiedoston määrittäminen. No partitions are defined. Osioita ei ole määritelty. Encrypted rootfs setup error Salattu rootfs asennusvirhe Root partition %1 is LUKS but no passphrase has been set. Juuriosio %1 on LUKS, mutta salasanaa ei ole asetettu. Could not create LUKS key file for root partition %1. LUKS-avaintiedostoa ei voitu luoda juuriosioon %1. Could not configure LUKS key file on partition %1. LUKS-avaintiedostoa ei voi määrittää osiossa %1. MachineIdJob Generate machine-id. Luo koneen-id. Configuration Error Määritysvirhe No root mount point is set for MachineId. Koneen tunnukselle ei ole asetettu root kiinnityskohtaa. NetInstallPage Name Nimi Description Kuvaus Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Verkkoasennus. (Ei käytössä: Pakettiluetteloita ei voi hakea, tarkista verkkoyhteys) Network Installation. (Disabled: Received invalid groups data) Verkkoasennus. (Ei käytössä: Vastaanotettiin virheellisiä ryhmän tietoja) Network Installation. (Disabled: Incorrect configuration) Verkko asennus. (Ei käytössä: virheellinen määritys) NetInstallViewStep Package selection Paketin valinta Office software Office-ohjelmisto Office package Office-paketti Browser software Selainohjelmisto Browser package Selainpaketti Web browser Nettiselain Kernel Kernel Services Palvelut Login Kirjaudu Desktop Työpöytä Applications Sovellukset NotesQmlViewStep Notes Huomautuksia OEMPage Ba&tch: Ba&tch: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>Syötä erän tunniste tähän. Tämä tallennetaan kohdejärjestelmään.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>OEM asetukset</h1><p>Calamares käyttää OEM-asetuksia määritettäessä kohdejärjestelmää.</p></body></html> OEMViewStep OEM Configuration OEM-kokoonpano Set the OEM Batch Identifier to <code>%1</code>. Aseta OEM valmistajan erän tunnus <code>%1</code>. PWQ Password is too short Salasana on liian lyhyt Password is too long Salasana on liian pitkä Password is too weak Salasana on liian heikko Memory allocation error when setting '%1' Muistin varausvirhe asetettaessa '%1' Memory allocation error Muistin varausvirhe The password is the same as the old one Salasana on sama kuin vanha The password is a palindrome Salasana on palindromi The password differs with case changes only Salasana eroaa vain vähäisin muutoksin The password is too similar to the old one Salasana on liian samanlainen kuin vanha The password contains the user name in some form Salasana sisältää jonkin käyttäjänimen The password contains words from the real name of the user in some form Salasana sisältää sanoja käyttäjän todellisesta nimestä jossain muodossa The password contains forbidden words in some form Salasana sisältää kiellettyjä sanoja The password contains less than %1 digits Salasana sisältää vähemmän kuin %1 numeroa The password contains too few digits Salasana sisältää liian vähän numeroita The password contains less than %1 uppercase letters Salasana sisältää vähemmän kuin %1 isoja kirjaimia The password contains too few uppercase letters Salasana sisältää liian vähän isoja kirjaimia The password contains less than %1 lowercase letters Salasana sisältää vähemmän kuin %1 pieniä kirjaimia The password contains too few lowercase letters Salasana sisältää liian vähän pieniä kirjaimia The password contains less than %1 non-alphanumeric characters Salasanassa on vähemmän kuin %1 erikoismerkkiä The password contains too few non-alphanumeric characters Salasana sisältää liian vähän erikoismerkkejä The password is shorter than %1 characters Salasana on lyhyempi kuin %1 merkkiä The password is too short Salasana on liian lyhyt The password is just rotated old one Salasana on vain vanhan pyöritystä The password contains less than %1 character classes Salasana sisältää vähemmän kuin %1 merkkiluokkaa The password does not contain enough character classes Salasana ei sisällä tarpeeksi merkkiluokkia The password contains more than %1 same characters consecutively Salasana sisältää enemmän kuin %1 samaa merkkiä peräkkäin The password contains too many same characters consecutively Salasana sisältää liian monta samaa merkkiä peräkkäin The password contains more than %1 characters of the same class consecutively Salasana sisältää enemmän kuin %1 merkkiä samasta luokasta peräkkäin The password contains too many characters of the same class consecutively Salasana sisältää liian monta saman luokan merkkiä peräkkäin The password contains monotonic sequence longer than %1 characters Salasana sisältää monotonisen merkkijonon, joka on pidempi kuin %1 merkkiä The password contains too long of a monotonic character sequence Salasanassa on liian pitkä monotoninen merkkijono No password supplied Salasanaa ei annettu Cannot obtain random numbers from the RNG device Satunnaislukuja ei voi saada RNG-laitteesta Password generation failed - required entropy too low for settings Salasanojen luonti epäonnistui - pakollinen vähimmäistaso liian alhainen asetuksia varten The password fails the dictionary check - %1 Salasana epäonnistui sanaston tarkistuksessa -%1 The password fails the dictionary check Salasana epäonnistui sanaston tarkistuksessa Unknown setting - %1 Tuntematon asetus - %1 Unknown setting Tuntematon asetus Bad integer value of setting - %1 Asetuksen virheellinen kokonaisluku - %1 Bad integer value Virheellinen kokonaisluku Setting %1 is not of integer type Asetus %1 ei ole kokonaisluku Setting is not of integer type Asetus ei ole kokonaisluku Setting %1 is not of string type Asetus %1 ei ole merkkijono Setting is not of string type Asetus ei ole merkkijono Opening the configuration file failed Määritystiedoston avaaminen epäonnistui The configuration file is malformed Määritystiedosto on väärin muotoiltu Fatal failure Vakava virhe Unknown error Tuntematon virhe Password is empty Salasana on tyhjä PackageChooserPage Form Lomake Product Name Tuotteen nimi TextLabel Nimilappu Long Product Description Pitkä tuotekuvaus Package Selection Paketin valinta Please pick a product from the list. The selected product will be installed. Ole hyvä ja valitse tuote luettelosta. Valittu tuote asennetaan. PackageChooserViewStep Packages Paketit Page_Keyboard Form Lomake Keyboard Model: Näppäimistön malli: Type here to test your keyboard Kirjoita tähän testaksesi näppäimistöäsi. Page_UserSetup Form Lomake What is your name? Mikä on nimesi? What name do you want to use to log in? Mitä nimeä haluat käyttää sisäänkirjautumisessa? Choose a password to keep your account safe. Valitse salasana pitääksesi tilisi turvallisena. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>Syötä salasana kahdesti välttääksesi kirjoitusvirheitä. Hyvän salasanan tulee sisältää sekoitetusti kirjaimia, numeroita ja erikoismerkkejä. Salasanan täytyy olla vähintään kahdeksan merkin mittainen ja tulee vaihtaa säännöllisin väliajoin.</small> What is the name of this computer? Mikä on tämän tietokoneen nimi? Your Full Name Koko nimesi login Kirjaudu <small>This name will be used if you make the computer visible to others on a network.</small> <small>Tätä nimeä tullaan käyttämään mikäli asetat tietokoneen näkyviin muille verkossa.</small> Computer Name Tietokoneen nimi Password Salasana Repeat Password Toista salasana When this box is checked, password-strength checking is done and you will not be able to use a weak password. Kun tämä valintaruutu on valittu, salasanan vahvuus tarkistetaan, etkä voi käyttää heikkoa salasanaa. Require strong passwords. Vaaditaan vahvat salasanat. Log in automatically without asking for the password. Kirjaudu automaattisesti ilman salasanaa. Use the same password for the administrator account. Käytä pääkäyttäjän tilillä samaa salasanaa. Choose a password for the administrator account. Valitse salasana pääkäyttäjän tilille. <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Syötä salasana kahdesti välttääksesi kirjoitusvirheitä.</small> PartitionLabelsView Root Root Home Home Boot Boot EFI system EFI-järjestelmä Swap Swap New partition for %1 Uusi osio %1 New partition Uusi osiointi %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space Vapaa tila New partition Uusi osiointi Name Nimi File System Tiedostojärjestelmä Mount Point Liitoskohta Size Koko PartitionPage Form Lomake Storage de&vice: Tallennus&laite: &Revert All Changes &Peru kaikki muutokset New Partition &Table Uusi osiointi&taulukko Cre&ate Luo& &Edit &Muokkaa &Delete &Poista New Volume Group Uusi aseman ryhmä Resize Volume Group Muuta kokoa aseman-ryhmässä Deactivate Volume Group Poista asemaryhmä käytöstä Remove Volume Group Poista asemaryhmä I&nstall boot loader on: A&senna käynnistyslatain: Are you sure you want to create a new partition table on %1? Oletko varma, että haluat luoda uuden osion %1? Can not create new partition Ei voi luoda uutta osiota The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. %1 osio-taulukossa on jo %2 ensisijaista osiota, eikä sitä voi lisätä. Poista yksi ensisijainen osio ja lisää laajennettu osio. PartitionViewStep Gathering system information... Kerätään järjestelmän tietoja... Partitions Osiot Install %1 <strong>alongside</strong> another operating system. Asenna toisen käyttöjärjestelmän %1 <strong>rinnalle</strong>. <strong>Erase</strong> disk and install %1. <strong>Tyhjennä</strong> levy ja asenna %1. <strong>Replace</strong> a partition with %1. <strong>Vaihda</strong> osio jolla on %1. <strong>Manual</strong> partitioning. <strong>Manuaalinen</strong> osointi. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Asenna toisen käyttöjärjestelmän %1 <strong>rinnalle</strong> levylle <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Tyhjennä</strong> levy <strong>%2</strong> (%3) ja asenna %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Korvaa</strong> levyn osio <strong>%2</strong> (%3) jolla on %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>Manuaalinen</strong> osiointi levyllä <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Levy <strong>%1</strong> (%2) Current: Nykyinen: After: Jälkeen: No EFI system partition configured EFI-järjestelmäosiota ei ole määritetty An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. EFI-järjestelmäosio on välttämätön käynnistystä varten %1.<br/><br/>Jos haluat tehdä EFI-järjestelmäosion, mene takaisin ja luo FAT32-tiedostojärjestelmä, jossa on<strong>esp</strong> lippu yhdistettynä asennuspisteen liitokseen <strong>%2</strong>.<br/><br/>Voit jatkaa ilman EFI-järjestelmäosiota, mutta järjestelmä ei ehkä käynnisty. EFI system partition flag not set EFI-järjestelmäosion lippua ei ole asetettu An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI-järjestelmäosio on välttämätön käynnistystä varten %1.<br/><br/>Osio määritettiin liittymäpisteellä, <strong>%2</strong> mutta sen <strong>esp</strong> lippua ei ole asetettu.<br/>Jos haluat asettaa lipun, palaa takaisin ja muokkaa osiota.<br/><br/>Voit jatkaa lippua asettamatta, mutta järjestelmä ei ehkä käynnisty. Boot partition not encrypted Käynnistysosiota ei ole salattu A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. Erillinen käynnistysosio perustettiin yhdessä salatun juuriosion kanssa, mutta käynnistysosio ei ole salattu.<br/><br/>Tällaisissa asetuksissa on tietoturvaongelmia, koska tärkeät järjestelmätiedostot pidetään salaamattomassa osiossa.<br/>Voit jatkaa, jos haluat, mutta tiedostojärjestelmän lukituksen avaaminen tapahtuu myöhemmin järjestelmän käynnistyksen aikana.<br/>Käynnistysosion salaamiseksi siirry takaisin ja luo se uudelleen valitsemalla <strong>Salaa</strong> osion luominen -ikkunassa. has at least one disk device available. on vähintään yksi levy käytettävissä. There are no partitions to install on. Asennettavia osioita ei ole. PlasmaLnfJob Plasma Look-and-Feel Job Plasman ulkoasu Could not select KDE Plasma Look-and-Feel package KDE-plasman ulkoasupakettia ei voi valita PlasmaLnfPage Form Lomake Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Valitse ulkoasu KDE-plasma -työpöydälle. Voit myös ohittaa tämän vaiheen ja määrittää ulkoasun, kun järjestelmä on asetettu. Klikkaamalla ulkoasun valintaa saat suoran esikatselun tästä ulkoasusta. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Valitse KDE-plasma -työpöydän ulkoasu. Voit myös ohittaa tämän vaiheen ja määrittää ulkoasun, kun järjestelmä on asennettu. Klikkaamalla ulkoasun valintaa saat suoran esikatselun tästä ulkoasusta. PlasmaLnfViewStep Look-and-Feel Ulkoasu PreserveFiles Saving files for later ... Tiedostojen tallentaminen myöhemmin ... No files configured to save for later. Ei tiedostoja, joita olisi määritetty tallentamaan myöhemmin. Not all of the configured files could be preserved. Kaikkia määritettyjä tiedostoja ei voitu säilyttää. ProcessResult There was no output from the command. Komentoa ei voitu ajaa. Output: Ulostulo: External command crashed. Ulkoinen komento kaatui. Command <i>%1</i> crashed. Komento <i>%1</i> kaatui. External command failed to start. Ulkoisen komennon käynnistäminen epäonnistui. Command <i>%1</i> failed to start. Komennon <i>%1</i> käynnistäminen epäonnistui. Internal error when starting command. Sisäinen virhe käynnistettäessä komentoa. Bad parameters for process job call. Huonot parametrit prosessin kutsuun. External command failed to finish. Ulkoinen komento ei onnistunut. Command <i>%1</i> failed to finish in %2 seconds. Komento <i>%1</i> epäonnistui %2 sekunnissa. External command finished with errors. Ulkoinen komento päättyi virheisiin. Command <i>%1</i> finished with exit code %2. Komento <i>%1</i> päättyi koodiin %2. QObject Default Keyboard Model Oletus näppäimistömalli Default Oletus unknown tuntematon extended laajennettu unformatted formatoimaton swap swap Unpartitioned space or unknown partition table Osioimaton tila tai tuntematon osion taulu (no mount point) (ei liitoskohtaa) Requirements checking for module <i>%1</i> is complete. Moduulin vaatimusten tarkistaminen <i>%1</i> on valmis. %1 (%2) language[name] (country[name]) %1 (%2) No product Ei tuotetta No description provided. Kuvausta ei ole. File not found Tiedostoa ei löytynyt Path <pre>%1</pre> must be an absolute path. Polku <pre>%1</pre> täytyy olla ehdoton polku. Could not create new random file <pre>%1</pre>. Uutta satunnaista tiedostoa ei voitu luoda <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Poista asemaryhmä nimeltä %1. Remove Volume Group named <strong>%1</strong>. Poista asemaryhmä nimeltä <strong>%1</strong>. The installer failed to remove a volume group named '%1'. Asentaja ei onnistunut poistamaan nimettyä asemaryhmää '%1'. ReplaceWidget Form Lomake Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Valitse minne %1 asennetaan.<br/><font color="red">Varoitus: </font>tämä poistaa kaikki tiedostot valitulta osiolta. The selected item does not appear to be a valid partition. Valitsemaasi kohta ei näytä olevan kelvollinen osio. %1 cannot be installed on empty space. Please select an existing partition. %1 ei voi asentaa tyhjään tilaan. Valitse olemassa oleva osio. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 ei voida asentaa jatketun osion. Valitse olemassa oleva ensisijainen tai looginen osio. %1 cannot be installed on this partition. %1 ei voida asentaa tähän osioon. Data partition (%1) Data osio (%1) Unknown system partition (%1) Tuntematon järjestelmä osio (%1) %1 system partition (%2) %1 järjestelmäosio (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>Osio %1 on liian pieni %2. Valitse osio, jonka kapasiteetti on vähintään %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/>EFI-järjestelmäosiota ei löydy mistään tässä järjestelmässä. Palaa takaisin ja käytä manuaalista osiointia määrittämällä %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>%1 asennetaan %2.<br/><font color="red">Varoitus: </font>kaikki osion %2 tiedot katoavat. The EFI system partition at %1 will be used for starting %2. EFI-järjestelmän osiota %1 käytetään käynnistettäessä %2. EFI system partition: EFI järjestelmäosio ResizeFSJob Resize Filesystem Job Muuta tiedostojärjestelmän kokoa Invalid configuration Virheellinen konfiguraatio The file-system resize job has an invalid configuration and will not run. Tiedostojärjestelmän koon muutto ei kelpaa eikä sitä suoriteta. KPMCore not Available KPMCore ei saatavilla Calamares cannot start KPMCore for the file-system resize job. Calamares ei voi käynnistää KPMCore-tiedostoa tiedostojärjestelmän koon muuttamiseksi. Resize Failed Kokomuutos epäonnistui The filesystem %1 could not be found in this system, and cannot be resized. Tiedostojärjestelmää %1 ei löydy tästä järjestelmästä, eikä sen kokoa voi muuttaa. The device %1 could not be found in this system, and cannot be resized. Laitetta %1 ei löydy tästä järjestelmästä, eikä sen kokoa voi muuttaa. The filesystem %1 cannot be resized. Tiedostojärjestelmän %1 kokoa ei voi muuttaa. The device %1 cannot be resized. Laitteen %1 kokoa ei voi muuttaa. The filesystem %1 must be resized, but cannot. Tiedostojärjestelmän %1 kokoa on muutettava, mutta ei onnistu. The device %1 must be resized, but cannot Laitteen %1 kokoa on muutettava, mutta ei onnistu. ResizePartitionJob Resize partition %1. Muuta osion kokoa %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Muuta <strong>%2MiB</strong> osiota <strong>%1</strong> - <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. Muuntaa %2MiB osion %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. Asennusohjelma epäonnistui osion %1 koon muuttamisessa levyllä '%2'. ResizeVolumeGroupDialog Resize Volume Group Muuta kokoa aseman-ryhmässä ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Muuta %1 levyn kokoa %2:sta %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. Muuta levyä nimeltä <strong>%1</strong> lähde <strong>%2</strong> - <strong>%3</strong>. The installer failed to resize a volume group named '%1'. Asentaja ei onnistunut muuttamaan nimettyä levyä '%1'. ResultsListDialog For best results, please ensure that this computer: Saadaksesi parhaan lopputuloksen, tarkista että tämä tietokone: System requirements Järjestelmävaatimukset ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> Tämä tietokone ei täytä vähimmäisvaatimuksia, %1.<br/>Asennusta ei voi jatkaa. <a href="#details">Yksityiskohdat...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> Tämä tietokone ei täytä asennuksen vähimmäisvaatimuksia, %1.<br/>Asennus ei voi jatkua. <a href="#details">Yksityiskohdat...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. Tämä tietokone ei täytä joitakin suositeltuja vaatimuksia %1.<br/>Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. Tämä tietokone ei täytä joitakin suositeltuja vaatimuksia %1. Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. This program will ask you some questions and set up %2 on your computer. Tämä ohjelma kysyy joitakin kysymyksiä %2 ja asentaa tietokoneeseen. ScanningDialog Scanning storage devices... Skannataan tallennuslaitteita... Partitioning Osiointi SetHostNameJob Set hostname %1 Aseta isäntänimi %1 Set hostname <strong>%1</strong>. Aseta koneellenimi <strong>%1</strong>. Setting hostname %1. Asetetaan koneellenimi %1. Internal Error Sisäinen Virhe Cannot write hostname to target system Ei voida kirjoittaa isäntänimeä kohdejärjestelmään. SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Aseta näppäimistön malliksi %1, asetelmaksi %2-%3 Failed to write keyboard configuration for the virtual console. Virtuaalikonsolin näppäimistöasetuksen tallentaminen epäonnistui. Failed to write to %1 Kirjoittaminen epäonnistui kohteeseen %1 Failed to write keyboard configuration for X11. X11 näppäimistöasetuksen tallentaminen epäonnistui. Failed to write keyboard configuration to existing /etc/default directory. Näppäimistöasetusten kirjoittaminen epäonnistui olemassa olevaan /etc/default hakemistoon. SetPartFlagsJob Set flags on partition %1. Aseta liput osioon %1. Set flags on %1MiB %2 partition. Aseta liput %1MiB %2 osioon. Set flags on new partition. Aseta liput uuteen osioon. Clear flags on partition <strong>%1</strong>. Poista liput osiosta <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Poista liput %1MiB <strong>%2</strong> osiosta. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Lippu %1MiB <strong>%2</strong> osiosta <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Tyhjennä liput %1MiB <strong>%2</strong> osiossa. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Asetetaan liput <strong>%3</strong> %1MiB <strong>%2</strong> osioon. Clear flags on new partition. Tyhjennä liput uuteen osioon. Flag partition <strong>%1</strong> as <strong>%2</strong>. Merkitse osio <strong>%1</strong> - <strong>%2</strong>. Flag new partition as <strong>%1</strong>. Merkitse uusi osio <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Lipun poisto osiosta <strong>%1</strong>. Clearing flags on new partition. Uusien osioiden lippujen poistaminen. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Lippujen <strong>%2</strong> asettaminen osioon <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. Asetetaan liput <strong>%1</strong> uuteen osioon. The installer failed to set flags on partition %1. Asennusohjelma ei voinut asettaa lippuja osioon %1. SetPasswordJob Set password for user %1 Aseta salasana käyttäjälle %1 Setting password for user %1. Salasanan asettaminen käyttäjälle %1. Bad destination system path. Huono kohteen järjestelmäpolku rootMountPoint is %1 rootMountPoint on %1 Cannot disable root account. Root-tiliä ei voi poistaa. passwd terminated with error code %1. passwd päättyi virhekoodiin %1. Cannot set password for user %1. Salasanaa ei voi asettaa käyttäjälle %1. usermod terminated with error code %1. usermod päättyi virhekoodilla %1. SetTimezoneJob Set timezone to %1/%2 Aseta aikavyöhykkeeksi %1/%2 Cannot access selected timezone path. Ei pääsyä valittuun aikavyöhykkeen polkuun. Bad path: %1 Huono polku: %1 Cannot set timezone. Aikavyöhykettä ei voi asettaa. Link creation failed, target: %1; link name: %2 Linkin luominen kohteeseen %1 epäonnistui; linkin nimi: %2 Cannot set timezone, Aikavyöhykettä ei voi määrittää, Cannot open /etc/timezone for writing Ei voi avata /etc/timezone ShellProcessJob Shell Processes Job Shell-prosessien työ SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage This is an overview of what will happen once you start the setup procedure. Tämä on yleiskuva siitä, mitä tapahtuu, kun asennusohjelma käynnistetään. This is an overview of what will happen once you start the install procedure. Tämä on yleiskuva siitä, mitä tapahtuu asennuksen aloittamisen jälkeen. SummaryViewStep Summary Yhteenveto TrackingInstallJob Installation feedback Asennuksen palaute Sending installation feedback. Lähetetään asennuksen palautetta. Internal error in install-tracking. Sisäinen virhe asennuksen seurannassa. HTTP request timed out. HTTP -pyyntö aikakatkaistiin. TrackingMachineNeonJob Machine feedback Koneen palaute Configuring machine feedback. Konekohtaisen palautteen määrittäminen. Error in machine feedback configuration. Virhe koneen palautteen määrityksessä. Could not configure machine feedback correctly, script error %1. Konekohtaista palautetta ei voitu määrittää oikein, komentosarjan virhe %1. Could not configure machine feedback correctly, Calamares error %1. Koneen palautetta ei voitu määrittää oikein, Calamares-virhe %1. TrackingPage Form Lomake Placeholder Paikkamerkki <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>Valitsemalla tämän, <span style=" font-weight:600;">et lähetä mitään</span> tietoja asennuksesta.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Klikkaa tästä saadaksesi lisätietoja käyttäjäpalautteesta</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. Asentamalla seuranta autat %1 näkemään, kuinka monta käyttäjää heillä on, mitä laitteita he asentavat %1 ja (kahdella viimeisellä vaihtoehdolla), saat jatkuvaa tietoa suosituista sovelluksista. Jos haluat nähdä, mitä tietoa lähetetään, napsauta kunkin alueen vieressä olevaa ohjekuvaketta. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. Kun valitset tämän, lähetät tietoja asennuksesta ja laitteistosta. <b>Nämä tiedot lähetetään vain kerran</b> asennuksen päättymisen jälkeen. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. Kun valitset tämän, lähetät <b>määräajoin </b> tietoja asennuksesta, laitteistosta ja sovelluksista osoitteeseen %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. Kun valitset tämän, lähetät <b>säännöllisesti </b> tietoja asennuksesta, laitteistosta, sovelluksista ja käyttötavoista osoitteeseen %1. TrackingViewStep Feedback Palautetta UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Jos useampi kuin yksi henkilö käyttää tätä tietokonetta, voit luoda useita tilejä asennuksen jälkeen.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Jos useampi kuin yksi henkilö käyttää tätä tietokonetta, voit luoda useita tilejä asennuksen jälkeen.</small> Your username is too long. Käyttäjänimesi on liian pitkä. Your username must start with a lowercase letter or underscore. Käyttäjätunnuksesi täytyy alkaa pienillä kirjaimilla tai alaviivoilla. Only lowercase letters, numbers, underscore and hyphen are allowed. Vain pienet kirjaimet, numerot, alaviivat ja tavuviivat ovat sallittuja. Only letters, numbers, underscore and hyphen are allowed. Vain kirjaimet, numerot, alaviivat ja tavuviivat ovat sallittuja. Your hostname is too short. Isäntänimesi on liian lyhyt. Your hostname is too long. Isäntänimesi on liian pitkä. Your passwords do not match! Salasanasi eivät täsmää! UsersViewStep Users Käyttäjät VariantModel Key Avain Value Arvo VolumeGroupBaseDialog Create Volume Group Luo aseman ryhmä List of Physical Volumes Fyysisten levyjen luoettelo Volume Group Name: Aseman ryhmän nimi: Volume Group Type: Aseman ryhmän tyyppi: Physical Extent Size: Fyysinen koko: MiB Mib Total Size: Yhteensä koko: Used Size: Käytetty tila: Total Sectors: Sektorit yhteensä: Quantity of LVs: Määrä LVs: WelcomePage Form Lomake Select application and system language Valitse sovelluksen ja järjestelmän kieli Open donations website Avaa lahjoitussivusto &Donate &Lahjoita Open help and support website Avaa ohje- ja tukisivusto Open issues and bug-tracking website Avaa ongelmia käsittelevä verkkosivusto Open release notes website Avaa julkaisutiedot verkkosivusto &Release notes &Julkaisutiedot &Known issues &Tunnetut ongelmat &Support &Tuki &About &Tietoa <h1>Welcome to the %1 installer.</h1> <h1>Tervetuloa %1 -asennusohjelmaan.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Tervetuloa Calamares -asennusohjelmaan %1.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Tervetuloa Calamares -asennusohjelmaan %1.</h1> <h1>Welcome to %1 setup.</h1> <h1>Tervetuloa %1 asennukseen.</h1> About %1 setup Tietoja %1 asetuksista About %1 installer Tietoa %1 asennusohjelmasta <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. <h1>%1</h1><br/><strong>%2<br/>- %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Kiitokset <a href="https://calamares.io/team/">Calamares-tiimille</a> ja <a href="https://www.transifex.com/calamares/calamares/">Calamares kääntäjille</a>.<br/><br/><a href="https://calamares.io/">Calamaresin</a> kehitystä sponsoroi <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support %1 tuki WelcomeQmlViewStep Welcome Tervetuloa WelcomeViewStep Welcome Tervetuloa notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>Nämä ovat esimerkkejä julkaisutiedoista.</p> welcomeq <h3>%1 <quote>%2</quote></h3> <h3>%1 <quote>%2</quote></h3> About Tietoa Support Tuki Known issues Tunnetut ongelmat Release notes Julkaisutiedot Donate Lahjoita calamares-3.2.20/lang/calamares_fr.ts000066400000000000000000005642651362604102500174570ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. L'<strong>environnement de démarrage</strong> de ce système.<br><br>Les anciens systèmes x86 supportent uniquement <strong>BIOS</strong>.<br>Les systèmes récents utilisent habituellement <strong>EFI</strong>, mais peuvent également afficher BIOS s'ils sont démarrés en mode de compatibilité. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. Ce système a été initialisé avec un environnement de démarrage <strong>EFI</strong>.<br><br>Pour configurer le démarrage depuis un environnement EFI, cet installateur doit déployer un chargeur de démarrage, comme <strong>GRUB</strong> ou <strong>systemd-boot</strong> sur une <strong>partition système EFI</strong>. Ceci est automatique, à moins que vous n'ayez sélectionné le partitionnement manuel, auquel cas vous devez en choisir une ou la créer vous même. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. Ce système a été initialisé avec un environnement de démarrage <strong>BIOS</strong>.<br><br>Pour configurer le démarrage depuis un environnement BIOS, cet installateur doit déployer un chargeur de démarrage, comme <strong>GRUB</strong> ou <strong>systemd-boot</strong> au début d'une partition ou bien sur le <strong>Master Boot Record</strong> au début de la table des partitions (méthode privilégiée). Ceci est automatique, à moins que vous n'ayez sélectionné le partitionnement manuel, auquel cas vous devez le configurer vous-même. BootLoaderModel Master Boot Record of %1 Master Boot Record de %1 Boot Partition Partition de démarrage System Partition Partition Système Do not install a boot loader Ne pas installer de chargeur de démarrage %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page Page blanche Calamares::DebugWindow Form Formulaire GlobalStorage Stockage global JobQueue File de travail Modules Modules Type: Type : none aucun Interface: Interface: Tools Outils Reload Stylesheet Recharger la feuille de style Widget Tree Arbre de Widget Debug information Informations de dépannage Calamares::ExecutionViewStep Set up Configurer Install Installer Calamares::FailJob Job failed (%1) La tâche a échoué (%1) Programmed job failure was explicitly requested. L'échec de la tâche programmée a été explicitement demandée. Calamares::JobThread Done Fait Calamares::NamedJob Example job (%1) Tâche d'exemple (%1) Calamares::ProcessJob Run command '%1' in target system. Exécuter la commande '%1' dans le système cible. Run command '%1'. Exécuter la commande '%1'. Running command %1 %2 Exécution de la commande %1 %2 Calamares::PythonJob Running %1 operation. Exécution de l'opération %1. Bad working directory path Chemin du répertoire de travail invalide Working directory %1 for python job %2 is not readable. Le répertoire de travail %1 pour le job python %2 n'est pas accessible en lecture. Bad main script file Fichier de script principal invalide Main script file %1 for python job %2 is not readable. Le fichier de script principal %1 pour la tâche python %2 n'est pas accessible en lecture. Boost.Python error in job "%1". Erreur Boost.Python pour le job "%1". Calamares::QmlViewStep Loading ... Chargement... QML Step <i>%1</i>. Loading failed. Échec de chargement Calamares::RequirementsChecker Waiting for %n module(s). En attente de %n module(s). En attente de %n module(s). (%n second(s)) (%n seconde(s)) (%n seconde(s)) System-requirements checking is complete. La vérification des prérequis système est terminée. Calamares::ViewManager &Back &Précédent &Next &Suivant &Cancel &Annuler Cancel setup without changing the system. Annuler la configuration sans toucher au système. Cancel installation without changing the system. Annuler l'installation sans modifier votre système. Setup Failed Échec de la configuration Would you like to paste the install log to the web? Voulez-vous copier le journal d'installation sur le Web ? Install Log Paste URL URL de copie du journal d'installation The upload was unsuccessful. No web-paste was done. L'envoi a échoué. La copie sur le web n'a pas été effectuée. Calamares Initialization Failed L'initialisation de Calamares a échoué %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. %1 n'a pas pu être installé. Calamares n'a pas pu charger tous les modules configurés. C'est un problème avec la façon dont Calamares est utilisé par la distribution. <br/>The following modules could not be loaded: Les modules suivants n'ont pas pu être chargés : Continue with installation? Continuer avec l'installation ? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> Le programme de configuration de %1 est sur le point de procéder aux changements sur le disque afin de configurer %2.<br/> <strong>Vous ne pourrez pas annulez ces changements.</strong> &Set up now &Configurer maintenant &Set up &Configurer &Install &Installer Setup is complete. Close the setup program. La configuration est terminée. Fermer le programme de configuration. Cancel setup? Annuler la configuration ? Cancel installation? Abandonner l'installation ? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Voulez-vous réellement abandonner le processus de configuration ? Le programme de configuration se fermera et les changements seront perdus. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Voulez-vous réellement abandonner le processus d'installation ? L'installateur se fermera et les changements seront perdus. &Yes &Oui &No &Non &Close &Fermer Continue with setup? Poursuivre la configuration ? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> L'installateur %1 est sur le point de procéder aux changements sur le disque afin d'installer %2.<br/> <strong>Vous ne pourrez pas annulez ces changements.<strong> &Install now &Installer maintenant Go &back &Retour &Done &Terminé The installation is complete. Close the installer. L'installation est terminée. Fermer l'installateur. Error Erreur Installation Failed L'installation a échoué CalamaresPython::Helper Unknown exception type Type d'exception inconnue unparseable Python error Erreur Python non analysable unparseable Python traceback Traçage Python non exploitable Unfetchable Python error. Erreur Python non rapportable. CalamaresUtils Install log posted to: %1 Le journal d'installation a été posté sur : %1 CalamaresWindow %1 Setup Program Programme de configuration de %1 %1 Installer Installateur %1 Show debug information Afficher les informations de dépannage CheckerContainer Gathering system information... Récupération des informations système... ChoicePage Form Formulaire After: Après: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Partitionnement manuel</strong><br/>Vous pouvez créer ou redimensionner vous-même des partitions. Boot loader location: Emplacement du chargeur de démarrage: Select storage de&vice: Sélectionnez le support de sto&ckage : Current: Actuel : Reuse %1 as home partition for %2. Réutiliser %1 comme partition home pour %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Sélectionnez une partition à réduire, puis faites glisser la barre du bas pour redimensionner</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 va être réduit à %2Mio et une nouvelle partition de %3Mio va être créée pour %4. <strong>Select a partition to install on</strong> <strong>Sélectionner une partition pour l'installation</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Une partition système EFI n'a pas pu être trouvée sur ce système. Veuillez retourner à l'étape précédente et sélectionner le partitionnement manuel pour configurer %1. The EFI system partition at %1 will be used for starting %2. La partition système EFI sur %1 va être utilisée pour démarrer %2. EFI system partition: Partition système EFI : This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Ce périphérique de stockage ne semble pas contenir de système d'exploitation. Que souhaitez-vous faire ?<br/>Vous pourrez relire et confirmer vos choix avant que les modifications soient effectuées sur le périphérique de stockage. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Effacer le disque</strong><br/>Ceci va <font color="red">effacer</font> toutes les données actuellement présentes sur le périphérique de stockage sélectionné. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Ce périphérique de stockage contient %1. Que souhaitez-vous faire ?<br/>Vous pourrez relire et confirmer vos choix avant que les modifications soient effectuées sur le périphérique de stockage. No Swap Aucun Swap Reuse Swap Réutiliser le Swap Swap (no Hibernate) Swap (sans hibernation) Swap (with Hibernate) Swap (avec hibernation) Swap to file Swap dans un fichier <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Installer à côté</strong><br/>L'installateur va réduire une partition pour faire de la place pour %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Remplacer une partition</strong><br>Remplace une partition par %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Ce périphérique de stockage contient déjà un système d'exploitation. Que souhaitez-vous faire ?<br/>Vous pourrez relire et confirmer vos choix avant que les modifications soient effectuées sur le périphérique de stockage. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Ce péiphérique de stockage contient déjà plusieurs systèmes d'exploitation. Que souhaitez-vous faire ?<br/>Vous pourrez relire et confirmer vos choix avant que les modifications soient effectuées sur le périphérique de stockage. ClearMountsJob Clear mounts for partitioning operations on %1 Retirer les montages pour les opérations de partitionnement sur %1 Clearing mounts for partitioning operations on %1. Libération des montages pour les opérations de partitionnement sur %1. Cleared all mounts for %1 Tous les montages ont été retirés pour %1 ClearTempMountsJob Clear all temporary mounts. Supprimer les montages temporaires. Clearing all temporary mounts. Libération des montages temporaires. Cannot get list of temporary mounts. Impossible de récupérer la liste des montages temporaires. Cleared all temporary mounts. Supprimer les montages temporaires. CommandList Could not run command. La commande n'a pas pu être exécutée. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. La commande est exécutée dans l'environnement hôte et a besoin de connaître le chemin racine, mais aucun point de montage racine n'est défini. The command needs to know the user's name, but no username is defined. La commande a besoin de connaître le nom de l'utilisateur, mais aucun nom d'utilisateur n'est défini. ContextualProcessJob Contextual Processes Job Tâche des processus contextuels CreatePartitionDialog Create a Partition Créer une partition MiB Mio Partition &Type: Type de partition : &Primary &Primaire E&xtended É&tendue Fi&le System: Sy&stème de fichiers: LVM LV name Gestion par volumes logiques : Nom du volume logique Flags: Drapeaux: &Mount Point: Point de &Montage : Si&ze: Ta&ille : En&crypt Chi&ffrer Logical Logique Primary Primaire GPT GPT Mountpoint already in use. Please select another one. Le point de montage est déjà utilisé. Merci d'en sélectionner un autre. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Créer une nouvelle partition de %2Mio sur %4 (%3) avec le système de fichier %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Créer une nouvelle partition de <strong>%2Mio</strong> sur <strong>%4</strong> (%3) avec le système de fichiers <strong>%1</strong>. Creating new %1 partition on %2. Création d'une nouvelle partition %1 sur %2. The installer failed to create partition on disk '%1'. Le programme d'installation n'a pas pu créer la partition sur le disque '%1'. CreatePartitionTableDialog Create Partition Table Créer une table de partitionnement Creating a new partition table will delete all existing data on the disk. Créer une nouvelle table de partitionnement supprimera toutes les données existantes sur le disque. What kind of partition table do you want to create? Quel type de table de partitionnement voulez-vous créer ? Master Boot Record (MBR) Master Boot Record (MBR) GUID Partition Table (GPT) Table de partitionnement GUID (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Créer une nouvelle table de partition %1 sur %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Créer une nouvelle table de partitions <strong>%1</strong> sur <strong>%2</strong> (%3). Creating new %1 partition table on %2. Création d'une nouvelle table de partitions %1 sur %2. The installer failed to create a partition table on %1. Le programme d'installation n'a pas pu créer la table de partitionnement sur le disque %1. CreateUserJob Create user %1 Créer l'utilisateur %1 Create user <strong>%1</strong>. Créer l'utilisateur <strong>%1</strong>. Creating user %1. Création de l'utilisateur %1. Sudoers dir is not writable. Le répertoire Superutilisateur n'est pas inscriptible. Cannot create sudoers file for writing. Impossible de créer le fichier sudoers en écriture. Cannot chmod sudoers file. Impossible d'exécuter chmod sur le fichier sudoers. Cannot open groups file for reading. Impossible d'ouvrir le fichier groups en lecture. CreateVolumeGroupDialog Create Volume Group Créer le Groupe de Volumes CreateVolumeGroupJob Create new volume group named %1. Créer un nouveau groupe de volumes nommé %1. Create new volume group named <strong>%1</strong>. Créer un nouveau groupe de volumes nommé <strong>%1</strong>. Creating new volume group named %1. Création en cours du nouveau groupe de volumes nommé %1. The installer failed to create a volume group named '%1'. L'installateur n'a pas pu créer le groupe de volumes nommé %1. DeactivateVolumeGroupJob Deactivate volume group named %1. Désactiver le groupe de volume nommé %1. Deactivate volume group named <strong>%1</strong>. Désactiver le groupe de volumes nommé <strong>%1</strong>. The installer failed to deactivate a volume group named %1. L'installateur n'a pas pu désactiver le groupe de volumes nommé %1. DeletePartitionJob Delete partition %1. Supprimer la partition %1. Delete partition <strong>%1</strong>. Supprimer la partition <strong>%1</strong>. Deleting partition %1. Suppression de la partition %1. The installer failed to delete partition %1. Le programme d'installation n'a pas pu supprimer la partition %1. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. Le type de <strong>table de partitions</strong> sur le périphérique de stockage sélectionné.<br><br>Le seul moyen de changer le type de table de partitions est d'effacer et de recréer entièrement la table de partitions, ce qui détruit toutes les données sur le périphérique de stockage.<br>Cette installateur va conserver la table de partitions actuelle à moins de faire explicitement un autre choix.<br>Si vous n'êtes pas sûr, sur les systèmes modernes GPT est à privilégier. This device has a <strong>%1</strong> partition table. Ce périphérique utilise une table de partitions <strong>%1</strong>. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. Ceci est un périphérique <strong>loop</strong>.<br><br>C'est un pseudo-périphérique sans table de partitions qui rend un fichier acccessible comme un périphérique de type block. Ce genre de configuration ne contient habituellement qu'un seul système de fichiers. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. L'installateur <strong>n'a pas pu détecter de table de partitions</strong> sur le périphérique de stockage sélectionné.<br><br>Le périphérique ne contient pas de table de partition, ou la table de partition est corrompue ou d'un type inconnu.<br>Cet installateur va créer une nouvelle table de partitions pour vous, soit automatiquement, soit au travers de la page de partitionnement manuel. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Ceci est le type de tables de partition recommandé pour les systèmes modernes qui démarrent depuis un environnement <strong>EFI</strong>. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. <br><br>Ce type de table de partitions est uniquement envisageable que sur d'anciens systèmes qui démarrent depuis un environnement <strong>BIOS</strong>. GPT est recommandé dans la plupart des autres cas.<br><br><strong>Attention : </strong> la table de partitions MBR est un standard de l'ère MS-DOS.<br>Seules 4 partitions <em>primaires</em>peuvent être créées, et parmi ces 4, l'une peut être une partition <em>étendue</em>, qui à son tour peut contenir plusieurs partitions <em>logiques</em>. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1 - (%2) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Inscrire la configuration LUKS pour Dracut sur %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Ne pas enreigstrer la configuration LUKS pour Dracut : la partition "/" n'est pas chiffrée Failed to open %1 Impossible d'ouvrir %1 DummyCppJob Dummy C++ Job Tâche C++ fictive EditExistingPartitionDialog Edit Existing Partition Éditer une partition existante Content: Contenu : &Keep &Conserver Format Formater Warning: Formatting the partition will erase all existing data. Attention : le formatage de cette partition effacera toutes les données existantes. &Mount Point: Point de &Montage : Si&ze: Ta&ille: MiB Mio Fi&le System: Sys&tème de fichiers: Flags: Drapeaux: Mountpoint already in use. Please select another one. Le point de montage est déjà utilisé. Merci d'en sélectionner un autre. EncryptWidget Form Formulaire En&crypt system Chi&ffrer le système Passphrase Phrase de passe Confirm passphrase Confirmez la phrase de passe Please enter the same passphrase in both boxes. Merci d'entrer la même phrase de passe dans les deux champs. FillGlobalStorageJob Set partition information Configurer les informations de la partition Install %1 on <strong>new</strong> %2 system partition. Installer %1 sur le <strong>nouveau</strong> système de partition %2. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Configurer la <strong>nouvelle</strong> partition %2 avec le point de montage <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Installer %2 sur la partition système %3 <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Configurer la partition %3 <strong>%1</strong> avec le point de montage <strong>%2</strong>. Install boot loader on <strong>%1</strong>. Installer le chargeur de démarrage sur <strong>%1</strong>. Setting up mount points. Configuration des points de montage. FinishedPage Form Formulaire <Restart checkbox tooltip> <Restart checkbox tooltip> &Restart now &Redémarrer maintenant <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>Configuration terminée.</h1><br/>%1 a été configuré sur votre ordinateur.<br/>Vous pouvez maintenant utiliser votre nouveau système. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <html><head/><body><p>En sélectionnant cette option, votre système redémarrera immédiatement quand vous cliquerez sur <span style=" font-style:italic;">Terminé</span> ou fermerez le programme de configuration.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>Installation terminée.</h1><br/>%1 a été installé sur votre ordinateur.<br/>Vous pouvez redémarrer sur le nouveau système, ou continuer d'utiliser l'environnement actuel %2 . <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <html><head/><body><p>En sélectionnant cette option, votre système redémarrera immédiatement quand vous cliquerez sur <span style=" font-style:italic;">Terminé</span> ou fermerez l'installateur.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Échec de la configuration</h1><br/>%1 n'a pas été configuré sur cet ordinateur.<br/>Le message d'erreur était : %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Installation échouée</h1><br/>%1 n'a pas été installée sur cet ordinateur.<br/>Le message d'erreur était : %2. FinishedViewStep Finish Terminer Setup Complete Configuration terminée Installation Complete Installation terminée The setup of %1 is complete. La configuration de %1 est terminée. The installation of %1 is complete. L'installation de %1 est terminée. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Formater la partition %1 (système de fichiers : %2, taille : %3 Mio) sur %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formater la partition <strong>%1</strong> de <strong>%3Mio</strong>avec le système de fichier <strong>%2</strong>. Formatting partition %1 with file system %2. Formatage de la partition %1 avec le système de fichiers %2. The installer failed to format partition %1 on disk '%2'. Le programme d'installation n'a pas pu formater la partition %1 sur le disque '%2'. GeneralRequirements has at least %1 GiB available drive space a au moins %1 Gio d'espace disque disponible There is not enough drive space. At least %1 GiB is required. Il n'y a pas assez d'espace disque. Au moins %1 Gio sont requis. has at least %1 GiB working memory a au moins %1 Gio de mémoire vive The system does not have enough working memory. At least %1 GiB is required. Le système n'a pas assez de mémoire vive. Au moins %1 Gio sont requis. is plugged in to a power source est relié à une source de courant The system is not plugged in to a power source. Le système n'est pas relié à une source de courant. is connected to the Internet est connecté à Internet The system is not connected to the Internet. Le système n'est pas connecté à Internet. is running the installer as an administrator (root) a démarré l'installateur en tant qu'administrateur (root) The setup program is not running with administrator rights. Le programme de configuration ne dispose pas des droits administrateur. The installer is not running with administrator rights. L'installateur ne dispose pas des droits administrateur. has a screen large enough to show the whole installer a un écran assez large pour afficher l'intégralité de l'installateur The screen is too small to display the setup program. L'écran est trop petit pour afficher le programme de configuration. The screen is too small to display the installer. L'écran est trop petit pour afficher l'installateur. HostInfoJob Collecting information about your machine. Récupération des informations à propos de la machine. IDJob OEM Batch Identifier Identifiant de Lot OEM Could not create directories <code>%1</code>. Impossible de créer les répertoires <code>%1</code>. Could not open file <code>%1</code>. Impossible d'ouvrir le fichier <code>%1</code>. Could not write to file <code>%1</code>. Impossible d'écrire dans le fichier <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. Création de l'initramfs avec mkinitcpio. InitramfsJob Creating initramfs. création du initramfs InteractiveTerminalPage Konsole not installed Konsole n'a pas été installé Please install KDE Konsole and try again! Veuillez installer KDE Konsole et réessayer! Executing script: &nbsp;<code>%1</code> Exécution en cours du script : &nbsp;<code>%1</code> InteractiveTerminalViewStep Script Script KeyboardPage Set keyboard model to %1.<br/> Configurer le modèle de clavier à %1.<br/> Set keyboard layout to %1/%2. Configurer la disposition clavier à %1/%2. KeyboardViewStep Keyboard Clavier LCLocaleDialog System locale setting Paramètre régional The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. Les paramètres régionaux systèmes affectent la langue et le jeu de caractère pour la ligne de commande et différents éléments d'interface.<br/>Le paramètre actuel est <strong>%1</strong>. &Cancel &Annuler &OK &OK LicensePage Form Formulaire <h1>License Agreement</h1> <h1>Accord de Licence</h1> I accept the terms and conditions above. J'accepte les termes et conditions ci-dessus. Please review the End User License Agreements (EULAs). Merci de lire les Contrats de Licence Utilisateur Final (CLUFs). This setup procedure will install proprietary software that is subject to licensing terms. La procédure de configuration va installer des logiciels propriétaires qui sont soumis à des accords de licence. If you do not agree with the terms, the setup procedure cannot continue. Si vous ne validez pas ces accords, la procédure de configuration ne peut pas continuer. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. La procédure de configuration peut installer des logiciels propriétaires qui sont assujetti à des accords de licence afin de fournir des fonctionnalités supplémentaires et améliorer l'expérience utilisateur. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Si vous n'acceptez pas ces termes, les logiciels propriétaires ne seront pas installés, et des alternatives open source seront utilisés à la place. LicenseViewStep License Licence LicenseWidget URL: %1 URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>Pilote %1</strong><br/>par %2 <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>Pilote graphique %1</strong><br/><font color="Grey">par %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>Module de navigateur %1</strong><br/><font color="Grey">par %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>Codec %1</strong><br/><font color="Grey">par %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>Paquet %1</strong><br/><font color="Grey">par %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">par %2</font> File: %1 Fichier : %1 Show the license text Afficher le texte de licence Open license agreement in browser. Ouvrir l'accord de licence dans le navigateur. Hide license text Masquer le texte de licence LocalePage The system language will be set to %1. La langue du système sera réglée sur %1. The numbers and dates locale will be set to %1. Les nombres et les dates seront réglés sur %1. Region: Région : Zone: Zone : &Change... &Modifier... Set timezone to %1/%2.<br/> Configurer le fuseau horaire à %1/%2.<br/> LocaleViewStep Location Localisation LuksBootKeyFileJob Configuring LUKS key file. Configuration de la clé de fichier LUKS. No partitions are defined. Aucune partition n'est définie. Encrypted rootfs setup error Erreur du chiffrement du setup rootfs Root partition %1 is LUKS but no passphrase has been set. La partition racine %1 est LUKS mais aucune passphrase n'a été configurée. Could not create LUKS key file for root partition %1. Impossible de créer le fichier de clé LUKS pour la partition racine %1. Could not configure LUKS key file on partition %1. La clé LUKS n'a pas pu être configurée sur la partition %1. MachineIdJob Generate machine-id. Générer un identifiant machine. Configuration Error Erreur de configuration No root mount point is set for MachineId. Aucun point de montage racine n'est défini pour MachineId. NetInstallPage Name Nom Description Description Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Installation par le réseau (Désactivée : impossible de récupérer leslistes de paquets, vérifiez la connexion réseau) Network Installation. (Disabled: Received invalid groups data) Installation par le réseau. (Désactivée : données de groupes reçues invalides) Network Installation. (Disabled: Incorrect configuration) Installation réseau. (Désactivée : configuration incorrecte) NetInstallViewStep Package selection Sélection des paquets Office software Logiciel de bureau Office package Browser software Logiciel de navigation Browser package Web browser Navigateur web Kernel Noyau Services Services Login Connexion Desktop Bureau Applications Applications NotesQmlViewStep Notes Notes OEMPage Ba&tch: Lo&amp;t: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>Entrez ici un identifiant de lot. Celui-ci sera stocké sur le système cible.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>Configuration OEM</h1><p>Calamares va utiliser les paramètres OEM pendant la configuration du système cible.</p></body></html> OEMViewStep OEM Configuration Configuration OEM Set the OEM Batch Identifier to <code>%1</code>. Utiliser <code>%1</code> comme Identifiant de Lot OEM. PWQ Password is too short Le mot de passe est trop court Password is too long Le mot de passe est trop long Password is too weak Le mot de passe est trop faible Memory allocation error when setting '%1' Erreur d'allocation mémoire lors du paramétrage de '%1' Memory allocation error Erreur d'allocation mémoire The password is the same as the old one Le mot de passe est identique au précédent The password is a palindrome Le mot de passe est un palindrome The password differs with case changes only Le mot de passe ne diffère que sur la casse The password is too similar to the old one Le mot de passe est trop similaire à l'ancien The password contains the user name in some form Le mot de passe contient le nom d'utilisateur sous une certaine forme The password contains words from the real name of the user in some form Le mot de passe contient des mots provenant du nom d'utilisateur sous une certaine forme The password contains forbidden words in some form Le mot de passe contient des mots interdits sous une certaine forme The password contains less than %1 digits Le mot de passe contient moins de %1 chiffres The password contains too few digits Le mot de passe ne contient pas assez de chiffres The password contains less than %1 uppercase letters Le mot de passe contient moins de %1 lettres majuscules The password contains too few uppercase letters Le mot de passe ne contient pas assez de lettres majuscules The password contains less than %1 lowercase letters Le mot de passe contient moins de %1 lettres minuscules The password contains too few lowercase letters Le mot de passe ne contient pas assez de lettres minuscules The password contains less than %1 non-alphanumeric characters Le mot de passe contient moins de %1 caractères spéciaux The password contains too few non-alphanumeric characters Le mot de passe ne contient pas assez de caractères spéciaux The password is shorter than %1 characters Le mot de passe fait moins de %1 caractères The password is too short Le mot de passe est trop court The password is just rotated old one Le mot de passe saisit correspond avec un de vos anciens mot de passe The password contains less than %1 character classes Le mot de passe contient moins de %1 classes de caractères The password does not contain enough character classes Le mot de passe ne contient pas assez de classes de caractères The password contains more than %1 same characters consecutively Le mot de passe contient plus de %1 fois le même caractère à la suite The password contains too many same characters consecutively Le mot de passe contient trop de fois le même caractère à la suite The password contains more than %1 characters of the same class consecutively Le mot de passe contient plus de %1 caractères de la même classe consécutivement The password contains too many characters of the same class consecutively Le mot de passe contient trop de caractères de la même classe consécutivement The password contains monotonic sequence longer than %1 characters Le mot de passe contient une séquence de caractères monotones de %1 caractères The password contains too long of a monotonic character sequence Le mot de passe contient une trop longue séquence de caractères monotones No password supplied Aucun mot de passe saisi Cannot obtain random numbers from the RNG device Impossible d'obtenir des nombres aléatoires depuis le générateur de nombres aléatoires Password generation failed - required entropy too low for settings La génération du mot de passe a échoué - L'entropie minimum nécessaire n'est pas satisfaite par les paramètres The password fails the dictionary check - %1 Le mot de passe a échoué le contrôle de qualité par dictionnaire - %1 The password fails the dictionary check Le mot de passe a échoué le contrôle de qualité par dictionnaire Unknown setting - %1 Paramètre inconnu - %1 Unknown setting Paramètre inconnu Bad integer value of setting - %1 Valeur incorrect du paramètre - %1 Bad integer value Mauvaise valeur d'entier Setting %1 is not of integer type Le paramètre %1 n'est pas de type entier Setting is not of integer type Le paramètre n'est pas de type entier Setting %1 is not of string type Le paramètre %1 n'est pas une chaîne de caractères Setting is not of string type Le paramètre n'est pas une chaîne de caractères Opening the configuration file failed L'ouverture du fichier de configuration a échouée The configuration file is malformed Le fichier de configuration est mal formé Fatal failure Erreur fatale Unknown error Erreur inconnue Password is empty Le mot de passe est vide PackageChooserPage Form Formulaire Product Name Nom du Produit TextLabel TextLabel Long Product Description Description complète du produit Package Selection Sélection des paquets Please pick a product from the list. The selected product will be installed. Merci de sélectionner un produit de la liste. Le produit sélectionné sera installé. PackageChooserViewStep Packages Paquets Page_Keyboard Form Formulaire Keyboard Model: Modèle Clavier : Type here to test your keyboard Saisir ici pour tester votre clavier Page_UserSetup Form Formulaire What is your name? Quel est votre nom ? What name do you want to use to log in? Quel nom souhaitez-vous utiliser pour la connexion ? Choose a password to keep your account safe. Veuillez saisir le mot de passe pour sécuriser votre compte. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>Veuillez entrer le même mot de passe deux fois afin de vérifier qu'il n'y ait pas d'erreur de frappe. Un bon mot de passe doit contenir un mélange de lettres, de nombres et de caractères de ponctuation, contenir au moins huit caractères et être changé à des intervalles réguliers.</small> What is the name of this computer? Quel est le nom de votre ordinateur ? Your Full Name Nom complet login identifiant <small>This name will be used if you make the computer visible to others on a network.</small> <small>Ce nom sera utilisé pour rendre l'ordinateur visible des autres sur le réseau.</small> Computer Name Nom de l'ordinateur Password Mot de passe Repeat Password Répéter le mot de passe When this box is checked, password-strength checking is done and you will not be able to use a weak password. Quand cette case est cochée, la vérification de la puissance du mot de passe est activée et vous ne pourrez pas utiliser de mot de passe faible. Require strong passwords. Nécessite un mot de passe fort. Log in automatically without asking for the password. Démarrer la session sans demander de mot de passe. Use the same password for the administrator account. Utiliser le même mot de passe pour le compte administrateur. Choose a password for the administrator account. Choisir un mot de passe pour le compte administrateur. <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Veuillez entrer le même mot de passe deux fois, afin de vérifier qu'ils n'y ait pas d'erreur de frappe.</small> PartitionLabelsView Root Racine Home Home Boot Démarrage EFI system Système EFI Swap Swap New partition for %1 Nouvelle partition pour %1 New partition Nouvelle partition %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space Espace libre New partition Nouvelle partition Name Nom File System Système de fichiers Mount Point Point de montage Size Taille PartitionPage Form Formulaire Storage de&vice: Périphérique de stockage: &Revert All Changes &Annuler tous les changements New Partition &Table Nouvelle &table de partitionnement Cre&ate Cré&er &Edit &Modifier &Delete &Supprimer New Volume Group Nouveau Groupe de Volumes Resize Volume Group Redimensionner le Groupe de Volumes Deactivate Volume Group Désactiver le Groupe de Volumes Remove Volume Group Supprimer le Groupe de Volumes I&nstall boot loader on: Installer le chargeur de démarrage sur : Are you sure you want to create a new partition table on %1? Êtes-vous sûr de vouloir créer une nouvelle table de partitionnement sur %1 ? Can not create new partition Impossible de créer une nouvelle partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. La table de partition sur %1 contient déjà %2 partitions primaires, et aucune supplémentaire ne peut être ajoutée. Veuillez supprimer une partition primaire et créer une partition étendue à la place. PartitionViewStep Gathering system information... Récupération des informations système… Partitions Partitions Install %1 <strong>alongside</strong> another operating system. Installer %1 <strong>à côté</strong>d'un autre système d'exploitation. <strong>Erase</strong> disk and install %1. <strong>Effacer</strong> le disque et installer %1. <strong>Replace</strong> a partition with %1. <strong>Remplacer</strong> une partition avec %1. <strong>Manual</strong> partitioning. Partitionnement <strong>manuel</strong>. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Installer %1 <strong>à côté</strong> d'un autre système d'exploitation sur le disque <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Effacer</strong> le disque <strong>%2</strong> (%3) et installer %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Remplacer</strong> une partition sur le disque <strong>%2</strong> (%3) avec %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Partitionnement <strong>manuel</strong> sur le disque <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Disque <strong>%1</strong> (%2) Current: Actuel : After: Après : No EFI system partition configured Aucune partition système EFI configurée An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. Une partition système EFI est nécessaire pour démarrer %1.<br/><br/>Pour configurer une partition système EFI, revenez en arrière et sélectionnez ou créez une partition FAT32 avec le drapeau <strong>esp</strong> activé et le point de montage <strong>%2</strong>.<br/><br/>Vous pouvez continuer sans configurer de partition système EFI mais votre système pourrait refuser de démarrer. EFI system partition flag not set Drapeau de partition système EFI non configuré An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Une partition système EFI est nécessaire pour démarrer %1.<br/><br/>Une partition a été configurée avec le point de montage <strong>%2</strong> mais son drapeau <strong>esp</strong> n'est pas activé.<br/>Pour activer le drapeau, revenez en arrière et éditez la partition.<br/><br/>Vous pouvez continuer sans activer le drapeau mais votre système pourrait refuser de démarrer. Boot partition not encrypted Partition d'amorçage non chiffrée. A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. Une partition d'amorçage distincte a été configurée avec une partition racine chiffrée, mais la partition d'amorçage n'est pas chiffrée. <br/> <br/> Il y a des problèmes de sécurité avec ce type d'installation, car des fichiers système importants sont conservés sur une partition non chiffrée <br/> Vous pouvez continuer si vous le souhaitez, mais le déverrouillage du système de fichiers se produira plus tard au démarrage du système. <br/> Pour chiffrer la partition d'amorçage, revenez en arrière et recréez-la, en sélectionnant <strong> Chiffrer </ strong> dans la partition Fenêtre de création. has at least one disk device available. a au moins un disque disponible. There are no partitions to install on. Il n'y a pas de partition pour l'installation PlasmaLnfJob Plasma Look-and-Feel Job Traitement de l'apparence de Plasma Could not select KDE Plasma Look-and-Feel package Impossible de sélectionner le paquet Apparence de KDE Plasma PlasmaLnfPage Form Formulaire Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Merci de choisir l'apparence du bureau KDE Plasma. Vous pouvez aussi passer cette étape et configurer l'apparence une fois le système configuré. Vous pouvez obtenir un aperçu des différentes apparences en cliquant sur celles-ci. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Merci de choisir l'apparence du bureau KDE Plasma. Vous pouvez aussi passer cette étape et configurer l'apparence une fois le système installé. Vous pouvez obtenir un aperçu des différentes apparences en cliquant sur celles-ci. PlasmaLnfViewStep Look-and-Feel Apparence PreserveFiles Saving files for later ... Sauvegarde des fichiers en cours pour plus tard... No files configured to save for later. Aucun fichier de sélectionné pour sauvegarde ultérieure. Not all of the configured files could be preserved. Certains des fichiers configurés n'ont pas pu être préservés. ProcessResult There was no output from the command. Il y a eu aucune sortie de la commande Output: Sortie External command crashed. La commande externe s'est mal terminée. Command <i>%1</i> crashed. La commande <i>%1</i> s'est arrêtée inopinément. External command failed to start. La commande externe n'a pas pu être lancée. Command <i>%1</i> failed to start. La commande <i>%1</i> n'a pas pu être lancée. Internal error when starting command. Erreur interne au lancement de la commande Bad parameters for process job call. Mauvais paramètres pour l'appel au processus de job. External command failed to finish. La commande externe ne s'est pas terminée. Command <i>%1</i> failed to finish in %2 seconds. La commande <i>%1</i> ne s'est pas terminée en %2 secondes. External command finished with errors. La commande externe s'est terminée avec des erreurs. Command <i>%1</i> finished with exit code %2. La commande <i>%1</i> s'est terminée avec le code de sortie %2. QObject Default Keyboard Model Modèle Clavier par défaut Default Défaut unknown inconnu extended étendu unformatted non formaté swap swap Unpartitioned space or unknown partition table Espace non partitionné ou table de partitions inconnue (no mount point) (aucun point de montage) Requirements checking for module <i>%1</i> is complete. La vérification des prérequis pour le module <i>%1</i> est terminée. %1 (%2) language[name] (country[name]) %1 (%2) No product Aucun produit No description provided. Aucune description fournie. File not found Fichier non trouvé Path <pre>%1</pre> must be an absolute path. Le chemin <pre>%1</pre> doit être un chemin absolu. Could not create new random file <pre>%1</pre>. Impossible de créer le nouveau fichier aléatoire <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Supprimer le Groupe de Volumes nommé %1. Remove Volume Group named <strong>%1</strong>. Supprimer le Groupe de Volumes nommé <strong>%1</strong>. The installer failed to remove a volume group named '%1'. L'installateur n'a pas pu supprimer le groupe de volumes nommé '%1'. ReplaceWidget Form Formulaire Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Sélectionnez ou installer %1.<br><font color="red">Attention: </font>ceci va effacer tous les fichiers sur la partition sélectionnée. The selected item does not appear to be a valid partition. L'objet sélectionné ne semble pas être une partition valide. %1 cannot be installed on empty space. Please select an existing partition. %1 ne peut pas être installé sur un espace vide. Merci de sélectionner une partition existante. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 ne peut pas être installé sur une partition étendue. Merci de sélectionner une partition primaire ou logique existante. %1 cannot be installed on this partition. %1 ne peut pas être installé sur cette partition. Data partition (%1) Partition de données (%1) Unknown system partition (%1) Partition système inconnue (%1) %1 system partition (%2) Partition système %1 (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>La partition %1 est trop petite pour %2. Merci de sélectionner une partition avec au moins %3 Gio de capacité. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/>Une partition système EFI n'a pas pu être localisée sur ce système. Veuillez revenir en arrière et utiliser le partitionnement manuel pour configurer %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>%1 va être installé sur %2.<br/><font color="red">Attention:</font> toutes les données sur la partition %2 seront perdues. The EFI system partition at %1 will be used for starting %2. La partition système EFI sur %1 sera utilisée pour démarrer %2. EFI system partition: Partition système EFI: ResizeFSJob Resize Filesystem Job Tâche de redimensionnement du système de fichiers Invalid configuration Configuration incorrecte The file-system resize job has an invalid configuration and will not run. La tâche de redimensionnement du système de fichier a une configuration incorrecte et ne sera pas exécutée. KPMCore not Available KPMCore n'est pas disponible Calamares cannot start KPMCore for the file-system resize job. Calamares ne peut pas démarrer KPMCore pour la tâche de redimensionnement du système de fichiers. Resize Failed Échec du redimensionnement The filesystem %1 could not be found in this system, and cannot be resized. Le système de fichiers %1 n'a pas été trouvé sur ce système, et ne peut pas être redimensionné. The device %1 could not be found in this system, and cannot be resized. Le périphérique %1 n'a pas été trouvé sur ce système, et ne peut pas être redimensionné. The filesystem %1 cannot be resized. Le système de fichiers %1 ne peut pas être redimensionné. The device %1 cannot be resized. Le périphérique %1 ne peut pas être redimensionné. The filesystem %1 must be resized, but cannot. Le système de fichiers %1 doit être redimensionné, mais c'est impossible. The device %1 must be resized, but cannot Le périphérique %1 doit être redimensionné, mais c'est impossible. ResizePartitionJob Resize partition %1. Redimensionner la partition %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Redimensionner la partition <strong>%1</strong> de <strong>%2 Mio</strong> à <strong>%3 Mio</strong>. Resizing %2MiB partition %1 to %3MiB. Redimensionnement de la partition %1 de %2 Mio à %3 Mio. The installer failed to resize partition %1 on disk '%2'. Le programme d'installation n'a pas pu redimensionner la partition %1 sur le disque '%2'. ResizeVolumeGroupDialog Resize Volume Group Redimensionner le Groupe de Volumes ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Redimensionner le groupe de volume nommé %1 de %2 à %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. Redimensionner le groupe de volume nommé <strong>%1</strong> de <strong>%2</strong> à <strong>%3</strong>. The installer failed to resize a volume group named '%1'. L'installateur n'a pas pu redimensionner le groupe de volumes nommé '%1'. ResultsListDialog For best results, please ensure that this computer: Pour de meilleur résultats, merci de s'assurer que cet ordinateur : System requirements Prérequis système ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> Cet ordinateur ne satisfait pas les minimum prérequis pour configurer %1.<br/>La configuration ne peut pas continuer. <a href="#details">Détails...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> Cet ordinateur ne satisfait pas les minimum prérequis pour installer %1.<br/>L'installation ne peut pas continuer. <a href="#details">Détails...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. Cet ordinateur ne satisfait pas certains des prérequis recommandés pour configurer %1.<br/>La configuration peut continuer, mais certaines fonctionnalités pourraient être désactivées. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. Cet ordinateur ne satisfait pas certains des prérequis recommandés pour installer %1.<br/>L'installation peut continuer, mais certaines fonctionnalités pourraient être désactivées. This program will ask you some questions and set up %2 on your computer. Ce programme va vous poser quelques questions et configurer %2 sur votre ordinateur. ScanningDialog Scanning storage devices... Balayage des périphériques de stockage... Partitioning Partitionnement SetHostNameJob Set hostname %1 Définir le nom d'hôte %1 Set hostname <strong>%1</strong>. Configurer le nom d'hôte <strong>%1</strong>. Setting hostname %1. Configuration du nom d'hôte %1. Internal Error Erreur interne Cannot write hostname to target system Impossible d'écrire le nom d'hôte sur le système cible. SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Configurer le modèle de clavier à %1, la disposition des touches à %2-%3 Failed to write keyboard configuration for the virtual console. Échec de l'écriture de la configuration clavier pour la console virtuelle. Failed to write to %1 Échec de l'écriture sur %1 Failed to write keyboard configuration for X11. Échec de l'écriture de la configuration clavier pour X11. Failed to write keyboard configuration to existing /etc/default directory. Impossible d'écrire la configuration du clavier dans le dossier /etc/default existant. SetPartFlagsJob Set flags on partition %1. Configurer les drapeaux sur la partition %1. Set flags on %1MiB %2 partition. Configurer les drapeaux sur la partition %2 de %1 Mio. Set flags on new partition. Configurer les drapeaux sur la nouvelle partition. Clear flags on partition <strong>%1</strong>. Réinitialisez les drapeaux sur la partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Réinitialisez les drapeaux sur la partition <strong>%2</strong> de %1Mio. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Marquer la partition <strong>%2</strong> de %1 Mio comme <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Réinitialisez les drapeaux sur la partition <strong>%2</strong> de %1 Mio. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Configuration des drapeaux <strong>%3</strong> pour la partition <strong>%2</strong> de %1 Mio. Clear flags on new partition. Réinitialisez les drapeaux sur la nouvelle partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Marquer la partition <strong>%1</strong> comme <strong>%2</strong>. Flag new partition as <strong>%1</strong>. Marquer la nouvelle partition comme <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Réinitialisation des drapeaux pour la partition <strong>%1</strong>. Clearing flags on new partition. Réinitialisez les drapeaux sur la nouvelle partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Configuration des drapeaux <strong>%2</strong> pour la partition <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. Configuration des drapeaux <strong>%1</strong> pour la nouvelle partition. The installer failed to set flags on partition %1. L'installateur n'a pas pu activer les drapeaux sur la partition %1. SetPasswordJob Set password for user %1 Définir le mot de passe pour l'utilisateur %1 Setting password for user %1. Configuration du mot de passe pour l'utilisateur %1. Bad destination system path. Mauvaise destination pour le chemin système. rootMountPoint is %1 Le point de montage racine est %1 Cannot disable root account. Impossible de désactiver le compte root. passwd terminated with error code %1. passwd c'est arrêté avec le code d'erreur %1. Cannot set password for user %1. Impossible de créer le mot de passe pour l'utilisateur %1. usermod terminated with error code %1. usermod s'est terminé avec le code erreur %1. SetTimezoneJob Set timezone to %1/%2 Configurer le fuseau-horaire à %1/%2 Cannot access selected timezone path. Impossible d'accéder au chemin d'accès du fuseau horaire sélectionné. Bad path: %1 Mauvais chemin : %1 Cannot set timezone. Impossible de définir le fuseau horaire. Link creation failed, target: %1; link name: %2 Création du lien échouée, destination : %1; nom du lien : %2 Cannot set timezone, Impossible de définir le fuseau horaire. Cannot open /etc/timezone for writing Impossible d'ourvir /etc/timezone pour écriture ShellProcessJob Shell Processes Job Tâche des processus de l'intérpréteur de commande SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage This is an overview of what will happen once you start the setup procedure. Ceci est un aperçu de ce qui va arriver lorsque vous commencerez la configuration. This is an overview of what will happen once you start the install procedure. Ceci est un aperçu de ce qui va arriver lorsque vous commencerez l'installation. SummaryViewStep Summary Résumé TrackingInstallJob Installation feedback Rapport d'installation Sending installation feedback. Envoi en cours du rapport d'installation. Internal error in install-tracking. Erreur interne dans le suivi d'installation. HTTP request timed out. La requête HTTP a échoué. TrackingMachineNeonJob Machine feedback Rapport de la machine Configuring machine feedback. Configuration en cours du rapport de la machine. Error in machine feedback configuration. Erreur dans la configuration du rapport de la machine. Could not configure machine feedback correctly, script error %1. Echec pendant la configuration du rapport de machine, erreur de script %1. Could not configure machine feedback correctly, Calamares error %1. Impossible de mettre en place le rapport d'utilisateurs, erreur %1. TrackingPage Form Formulaire Placeholder Emplacement <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>En sélectionnant cette option, vous n'enverrez <span style=" font-weight:600;">aucune information</span> sur votre installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><span style=" text-decoration: underline; color:#2980b9;">Cliquez ici pour plus d'informations sur les rapports d'utilisateurs</span><a href="placeholder"><p></p></body> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. L'installation de la surveillance permet à %1 de voir combien d'utilisateurs l'utilise, quelle configuration matérielle %1 utilise, et (avec les 2 dernières options ci-dessous), recevoir une information continue concernant les applications préférées. Pour connaître les informations qui seront envoyées, veuillez cliquer sur l'icône d'aide à côté de chaque zone. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. En sélectionnant cette option, vous enverrez des informations sur votre installation et votre matériel. Cette information ne sera <b>seulement envoyée qu'une fois</b> après la finalisation de l'installation. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. En sélectionnant cette option vous enverrez <b>périodiquement</b> des informations sur votre installation, matériel, et applications, à %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. En sélectionnant cette option vous enverrez <b>régulièrement</b> des informations sur votre installation, matériel, applications, et habitudes d'utilisation, à %1. TrackingViewStep Feedback Rapport UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>si plusieurs personnes utilisent cet ordinateur, vous pourrez créer plusieurs comptes après la configuration.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>si plusieurs personnes utilisent cet ordinateur, vous pourrez créer plusieurs comptes après l'installation.</small> Your username is too long. Votre nom d'utilisateur est trop long. Your username must start with a lowercase letter or underscore. Votre nom d'utilisateur doit commencer avec une lettre minuscule ou un underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Seuls les minuscules, nombres, underscores et tirets sont autorisés. Only letters, numbers, underscore and hyphen are allowed. Seuls les lettres, nombres, underscores et tirets sont autorisés. Your hostname is too short. Le nom d'hôte est trop petit. Your hostname is too long. Le nom d'hôte est trop long. Your passwords do not match! Vos mots de passe ne correspondent pas ! UsersViewStep Users Utilisateurs VariantModel Key Clé Value Valeur VolumeGroupBaseDialog Create Volume Group Créer le Groupe de Volumes List of Physical Volumes Liste des Volumes Physiques Volume Group Name: Nom du Groupe de Volume : Volume Group Type: Type de Groupe de Volumes : Physical Extent Size: Taille de l'Extent Physique : MiB Mio Total Size: Taille Totale : Used Size: Taille Utilisée : Total Sectors: Total des Secteurs : Quantity of LVs: Nombre de VLs : WelcomePage Form Formulaire Select application and system language Sélectionner l'application et la langue système Open donations website Ouvrir le site web de dons &Donate &Donner Open help and support website Ouvrir le site web d'aide et support Open issues and bug-tracking website Ouvrir les issues et le site de suivi de bugs Open release notes website Ouvrir le site des notes de publication &Release notes &Notes de publication &Known issues &Problèmes connus &Support &Support &About &À propos <h1>Welcome to the %1 installer.</h1> <h1>Bienvenue dans l'installateur de %1.</h1> <h1>Welcome to the Calamares installer for %1.</h1> Bien dans l'installateur Calamares pour %1. <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Bienvenue dans le programme de configuration Calamares pour %1.</h1> <h1>Welcome to %1 setup.</h1> <h1>Bienvenue dans la configuration de %1.</h1> About %1 setup À propos de la configuration de %1 About %1 installer À propos de l'installateur %1 <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. <h1>%1</h1><br/><strong>%2<br/> pour %3</strong><br/><br/> Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/> Copyright 2017 Adriaan de Groot &lt;groot@kde.org&gt;<br/> Merci à : Anke Boersma, Aurélien Gâteau, Kevin Kofler, Lisa Vitolo, Philip Müller, Pier Luigi Fiorini, Rohan Garg et <a href="https://www.transifex.com/calamares/calamares/">l'équipe de traducteurs de Calamares</a>.<br/><br/> Le développement de <a href="https://calamares.io/">Calamares</a> est sponsorisé par <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support Support de %1 WelcomeQmlViewStep Welcome Bienvenue WelcomeViewStep Welcome Bienvenue notesqml <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> About À propos Support Known issues Problèmes connus Release notes Donate Faites un don calamares-3.2.20/lang/calamares_fr_CH.ts000066400000000000000000004566451362604102500200330ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. BootLoaderModel Master Boot Record of %1 Boot Partition System Partition Do not install a boot loader %1 (%2) Calamares::BlankViewStep Blank Page Calamares::DebugWindow Form GlobalStorage JobQueue Modules Type: none Interface: Tools Reload Stylesheet Widget Tree Debug information Calamares::ExecutionViewStep Set up Install Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Calamares::PythonJob Running %1 operation. Bad working directory path Working directory %1 for python job %2 is not readable. Bad main script file Main script file %1 for python job %2 is not readable. Boost.Python error in job "%1". Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager &Back &Next &Cancel Cancel setup without changing the system. Cancel installation without changing the system. Setup Failed Would you like to paste the install log to the web? Install Log Paste URL The upload was unsuccessful. No web-paste was done. Calamares Initialization Failed %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. <br/>The following modules could not be loaded: Continue with installation? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Set up &Install Setup is complete. Close the setup program. Cancel setup? Cancel installation? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. &Yes &No &Close Continue with setup? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> &Install now Go &back &Done The installation is complete. Close the installer. Error Installation Failed CalamaresPython::Helper Unknown exception type unparseable Python error unparseable Python traceback Unfetchable Python error. CalamaresUtils Install log posted to: %1 CalamaresWindow %1 Setup Program %1 Installer Show debug information CheckerContainer Gathering system information... ChoicePage Form After: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Boot loader location: Select storage de&vice: Current: Reuse %1 as home partition for %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. <strong>Select a partition to install on</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. The EFI system partition at %1 will be used for starting %2. EFI system partition: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. No Swap Reuse Swap Swap (no Hibernate) Swap (with Hibernate) Swap to file <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. ClearMountsJob Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 ClearTempMountsJob Clear all temporary mounts. Clearing all temporary mounts. Cannot get list of temporary mounts. Cleared all temporary mounts. CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition MiB Partition &Type: &Primary E&xtended Fi&le System: LVM LV name Flags: &Mount Point: Si&ze: En&crypt Logical Primary GPT Mountpoint already in use. Please select another one. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. The installer failed to create partition on disk '%1'. CreatePartitionTableDialog Create Partition Table Creating a new partition table will delete all existing data on the disk. What kind of partition table do you want to create? Master Boot Record (MBR) GUID Partition Table (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Creating new %1 partition table on %2. The installer failed to create a partition table on %1. CreateUserJob Create user %1 Create user <strong>%1</strong>. Creating user %1. Sudoers dir is not writable. Cannot create sudoers file for writing. Cannot chmod sudoers file. Cannot open groups file for reading. CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. Delete partition <strong>%1</strong>. Deleting partition %1. The installer failed to delete partition %1. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. This device has a <strong>%1</strong> partition table. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - (%2) device[name] - (device-node[name]) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Failed to open %1 DummyCppJob Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Content: &Keep Format Warning: Formatting the partition will erase all existing data. &Mount Point: Si&ze: MiB Fi&le System: Flags: Mountpoint already in use. Please select another one. EncryptWidget Form En&crypt system Passphrase Confirm passphrase Please enter the same passphrase in both boxes. FillGlobalStorageJob Set partition information Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Install boot loader on <strong>%1</strong>. Setting up mount points. FinishedPage Form <Restart checkbox tooltip> &Restart now <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. FinishedViewStep Finish Setup Complete Installation Complete The setup of %1 is complete. The installation of %1 is complete. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatting partition %1 with file system %2. The installer failed to format partition %1 on disk '%2'. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source The system is not plugged in to a power source. is connected to the Internet The system is not connected to the Internet. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Please install KDE Konsole and try again! Executing script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script KeyboardPage Set keyboard model to %1.<br/> Set keyboard layout to %1/%2. KeyboardViewStep Keyboard LCLocaleDialog System locale setting The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. &Cancel &OK LicensePage Form <h1>License Agreement</h1> I accept the terms and conditions above. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> File: %1 Show the license text Open license agreement in browser. Hide license text LocalePage The system language will be set to %1. The numbers and dates locale will be set to %1. Region: Zone: &Change... Set timezone to %1/%2.<br/> LocaleViewStep Location LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Configuration Error No root mount point is set for MachineId. NetInstallPage Name Description Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Incorrect configuration) NetInstallViewStep Package selection Office software Office package Browser software Browser package Web browser Kernel Services Login Desktop Applications NotesQmlViewStep Notes OEMPage Ba&tch: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> OEMViewStep OEM Configuration Set the OEM Batch Identifier to <code>%1</code>. PWQ Password is too short Password is too long Password is too weak Memory allocation error when setting '%1' Memory allocation error The password is the same as the old one The password is a palindrome The password differs with case changes only The password is too similar to the old one The password contains the user name in some form The password contains words from the real name of the user in some form The password contains forbidden words in some form The password contains less than %1 digits The password contains too few digits The password contains less than %1 uppercase letters The password contains too few uppercase letters The password contains less than %1 lowercase letters The password contains too few lowercase letters The password contains less than %1 non-alphanumeric characters The password contains too few non-alphanumeric characters The password is shorter than %1 characters The password is too short The password is just rotated old one The password contains less than %1 character classes The password does not contain enough character classes The password contains more than %1 same characters consecutively The password contains too many same characters consecutively The password contains more than %1 characters of the same class consecutively The password contains too many characters of the same class consecutively The password contains monotonic sequence longer than %1 characters The password contains too long of a monotonic character sequence No password supplied Cannot obtain random numbers from the RNG device Password generation failed - required entropy too low for settings The password fails the dictionary check - %1 The password fails the dictionary check Unknown setting - %1 Unknown setting Bad integer value of setting - %1 Bad integer value Setting %1 is not of integer type Setting is not of integer type Setting %1 is not of string type Setting is not of string type Opening the configuration file failed The configuration file is malformed Fatal failure Unknown error Password is empty PackageChooserPage Form Product Name TextLabel Long Product Description Package Selection Please pick a product from the list. The selected product will be installed. PackageChooserViewStep Packages Page_Keyboard Form Keyboard Model: Type here to test your keyboard Page_UserSetup Form What is your name? What name do you want to use to log in? Choose a password to keep your account safe. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> What is the name of this computer? Your Full Name login <small>This name will be used if you make the computer visible to others on a network.</small> Computer Name Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Use the same password for the administrator account. Choose a password for the administrator account. <small>Enter the same password twice, so that it can be checked for typing errors.</small> PartitionLabelsView Root Home Boot EFI system Swap New partition for %1 New partition %1 %2 size[number] filesystem[name] PartitionModel Free Space New partition Name File System Mount Point Size PartitionPage Form Storage de&vice: &Revert All Changes New Partition &Table Cre&ate &Edit &Delete New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group I&nstall boot loader on: Are you sure you want to create a new partition table on %1? Can not create new partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. PartitionViewStep Gathering system information... Partitions Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <strong>Replace</strong> a partition with %1. <strong>Manual</strong> partitioning. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Current: After: No EFI system partition configured An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. EFI system partition flag not set An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: External command crashed. Command <i>%1</i> crashed. External command failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Bad parameters for process job call. External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Command <i>%1</i> finished with exit code %2. QObject Default Keyboard Model Default unknown extended unformatted swap Unpartitioned space or unknown partition table (no mount point) Requirements checking for module <i>%1</i> is complete. %1 (%2) language[name] (country[name]) No product No description provided. File not found Path <pre>%1</pre> must be an absolute path. Could not create new random file <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. The selected item does not appear to be a valid partition. %1 cannot be installed on empty space. Please select an existing partition. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 cannot be installed on this partition. Data partition (%1) Unknown system partition (%1) %1 system partition (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. The EFI system partition at %1 will be used for starting %2. EFI system partition: ResizeFSJob Resize Filesystem Job Invalid configuration The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. ResizeVolumeGroupDialog Resize Volume Group ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: System requirements ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. This program will ask you some questions and set up %2 on your computer. ScanningDialog Scanning storage devices... Partitioning SetHostNameJob Set hostname %1 Set hostname <strong>%1</strong>. Setting hostname %1. Internal Error Cannot write hostname to target system SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Failed to write keyboard configuration for the virtual console. Failed to write to %1 Failed to write keyboard configuration for X11. Failed to write keyboard configuration to existing /etc/default directory. SetPartFlagsJob Set flags on partition %1. Set flags on %1MiB %2 partition. Set flags on new partition. Clear flags on partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag new partition as <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. SetPasswordJob Set password for user %1 Setting password for user %1. Bad destination system path. rootMountPoint is %1 Cannot disable root account. passwd terminated with error code %1. Cannot set password for user %1. usermod terminated with error code %1. SetTimezoneJob Set timezone to %1/%2 Cannot access selected timezone path. Bad path: %1 Cannot set timezone. Link creation failed, target: %1; link name: %2 Cannot set timezone, Cannot open /etc/timezone for writing ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) SummaryPage This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. SummaryViewStep Summary TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingMachineNeonJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form Placeholder <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. TrackingViewStep Feedback UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> Your username is too long. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Only letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Your hostname is too long. Your passwords do not match! UsersViewStep Users VariantModel Key Value VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB Total Size: Used Size: Total Sectors: Quantity of LVs: WelcomePage Form Select application and system language Open donations website &Donate Open help and support website Open issues and bug-tracking website Open release notes website &Release notes &Known issues &Support &About <h1>Welcome to the %1 installer.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Welcome to %1 setup.</h1> About %1 setup About %1 installer <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support WelcomeQmlViewStep Welcome WelcomeViewStep Welcome notesqml <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> About Support Known issues Release notes Donate calamares-3.2.20/lang/calamares_gl.ts000066400000000000000000005375731362604102500174540ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. O <strong> entorno de arranque </strong> do sistema. <br><br> Os sistemas x86 antigos só admiten <strong> BIOS </strong>.<br> Os sistemas modernos empregan normalmente <strong> EFI </strong>, pero tamén poden arrincar como BIOS se funcionan no modo de compatibilidade. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. Este sistema arrincou con <strong> EFI </strong> como entorno de arranque.<br><br> Para configurar o arranque dende un entorno EFI, este instalador debe configurar un cargador de arranque, como <strong>GRUB</strong> ou <strong>systemd-boot</strong> nunha <strong> Partición de Sistema EFI</strong>. Este proceso é automático, salvo que escolla particionamento manual. Nese caso deberá escoller unha existente ou crear unha pola súa conta. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. Este sistema arrincou con <strong> BIOS </strong> como entorno de arranque.<br><br> Para configurar o arranque dende un entorno BIOS, este instalador debe configurar un cargador de arranque, como <strong>GRUB</strong>, ben ó comezo dunha partición ou no <strong>Master Boot Record</strong> preto do inicio da táboa de particións (recomendado). Este proceso é automático, salvo que escolla particionamento manual, nese caso deberá configuralo pola súa conta. BootLoaderModel Master Boot Record of %1 Rexistro de arranque maestro de %1 Boot Partition Partición de arranque System Partition Partición do sistema Do not install a boot loader Non instalar un cargador de arranque %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page Páxina en branco Calamares::DebugWindow Form Formulario GlobalStorage Almacenamento global JobQueue Cola de traballo Modules Módulos Type: Tipo: none Non Interface: Interface Tools Ferramentas Reload Stylesheet Widget Tree Debug information Informe de depuración de erros. Calamares::ExecutionViewStep Set up Install Instalar Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Feito Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Executando a orde %1 %2 Calamares::PythonJob Running %1 operation. Excutando a operación %1. Bad working directory path A ruta ó directorio de traballo é errónea Working directory %1 for python job %2 is not readable. O directorio de traballo %1 para o traballo de python %2 non é lexible Bad main script file Ficheiro de script principal erróneo Main script file %1 for python job %2 is not readable. O ficheiro principal de script %1 para a execución de python %2 non é lexible. Boost.Python error in job "%1". Boost.Python tivo un erro na tarefa "%1". Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager &Back &Atrás &Next &Seguinte &Cancel &Cancelar Cancel setup without changing the system. Cancel installation without changing the system. Cancelar a instalación sen cambiar o sistema Setup Failed Would you like to paste the install log to the web? Install Log Paste URL The upload was unsuccessful. No web-paste was done. Calamares Initialization Failed Fallou a inicialización do Calamares %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. Non é posíbel instalar %1. O calamares non foi quen de cargar todos os módulos configurados. Este é un problema relacionado con como esta distribución utiliza o Calamares. <br/>The following modules could not be loaded: <br/> Non foi posíbel cargar os módulos seguintes: Continue with installation? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Set up &Install &Instalar Setup is complete. Close the setup program. Cancel setup? Cancel installation? Cancelar a instalación? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Desexa realmente cancelar o proceso actual de instalación? O instalador pecharase e perderanse todos os cambios. &Yes &Si &No &Non &Close &Pechar Continue with setup? Continuar coa posta en marcha? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> O %1 instalador está a piques de realizar cambios no seu disco para instalar %2.<br/><strong>Estes cambios non poderán desfacerse.</strong> &Install now &Instalar agora Go &back Ir &atrás &Done &Feito The installation is complete. Close the installer. Completouse a instalacion. Peche o instalador Error Erro Installation Failed Erro na instalación CalamaresPython::Helper Unknown exception type Excepción descoñecida unparseable Python error Erro de Python descoñecido unparseable Python traceback O rastreo de Python non é analizable. Unfetchable Python error. Erro de Python non recuperable CalamaresUtils Install log posted to: %1 CalamaresWindow %1 Setup Program %1 Installer Instalador de %1 Show debug information Mostrar informes de depuración CheckerContainer Gathering system information... A reunir a información do sistema... ChoicePage Form Formulario After: Despois: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Particionado manual</strong><br/> Pode crear o redimensionar particións pola súa conta. Boot loader location: Localización do cargador de arranque: Select storage de&vice: Seleccione o dispositivo de almacenamento: Current: Actual: Reuse %1 as home partition for %2. Reutilizar %1 como partición home para %2 <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Seleccione unha partición para acurtar, logo empregue a barra para redimensionala</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. <strong>Select a partition to install on</strong> <strong>Seleccione unha partición para instalar</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Non foi posible atopar unha partición de sistema de tipo EFI. Por favor, volva atrás e empregue a opción de particionado manual para crear unha en %1. The EFI system partition at %1 will be used for starting %2. A partición EFI do sistema en %1 será usada para iniciar %2. EFI system partition: Partición EFI do sistema: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Esta unidade de almacenamento non semella ter un sistema operativo instalado nela. Que desexa facer?<br/>Poderá revisar e confirmar as súas eleccións antes de que calquera cambio sexa feito na unidade de almacenamento. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Borrar disco</strong><br/>Esto <font color="red">eliminará</font> todos os datos gardados na unidade de almacenamento seleccionada. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. A unidade de almacenamento ten %1 nela. Que desexa facer?<br/>Poderá revisar e confirmar a súa elección antes de que se aplique algún cambio á unidade. No Swap Reuse Swap Swap (no Hibernate) Swap (with Hibernate) Swap to file <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Instalar a carón</strong><br/>O instalador encollerá a partición para facerlle sitio a %1 <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Substituír a partición</strong><br/>Substitúe a partición con %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Esta unidade de almacenamento xa ten un sistema operativo instalado nel. Que desexa facer?<br/>Poderá revisar e confirmar as súas eleccións antes de que calquera cambio sexa feito na unidade de almacenamento This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Esta unidade de almacenamento ten múltiples sistemas operativos instalados nela. Que desexa facer?<br/>Poderá revisar e confirmar as súas eleccións antes de que calquera cambio sexa feito na unidade de almacenamento. ClearMountsJob Clear mounts for partitioning operations on %1 Desmontar os volumes para levar a cabo as operacións de particionado en %1 Clearing mounts for partitioning operations on %1. Desmontando os volumes para levar a cabo as operacións de particionado en %1. Cleared all mounts for %1 Os volumes para %1 foron desmontados ClearTempMountsJob Clear all temporary mounts. Limpar todas as montaxes temporais. Clearing all temporary mounts. Limpando todas as montaxes temporais. Cannot get list of temporary mounts. Non se pode obter unha lista dos montaxes temporais. Cleared all temporary mounts. Desmontados todos os volumes temporais. CommandList Could not run command. Non foi posíbel executar a orde. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. A orde execútase no ambiente hóspede e precisa coñecer a ruta a root, mais non se indicou ningún rootMountPoint. The command needs to know the user's name, but no username is defined. A orde precisa coñecer o nome do usuario, mais non se indicou ningún nome de usuario. ContextualProcessJob Contextual Processes Job Tarefa de procesos contextuais CreatePartitionDialog Create a Partition Crear partición MiB MiB Partition &Type: &Tipo de partición: &Primary &Primaria E&xtended E&xtendida Fi&le System: Sistema de ficheiros: LVM LV name Nome de LV de LVM Flags: Bandeiras: &Mount Point: Punto de &montaxe: Si&ze: &Tamaño: En&crypt Encriptar Logical Lóxica Primary Primaria GPT GPT Mountpoint already in use. Please select another one. Punto de montaxe xa en uso. Faga o favor de escoller outro CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. Creando unha nova partición %1 en %2. The installer failed to create partition on disk '%1'. O instalador fallou ó crear a partición no disco '%1'. CreatePartitionTableDialog Create Partition Table Crear Táboa de Particións Creating a new partition table will delete all existing data on the disk. Creando unha nova táboa de particións eliminará todos os datos existentes no disco. What kind of partition table do you want to create? Que tipo de táboa de particións desexa crear? Master Boot Record (MBR) Rexistro de Arranque Maestro (MBR) GUID Partition Table (GPT) Táboa de Particións GUID (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Crear unha nova táboa de particións %1 en %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Crear unha nova táboa de particións %1 en <strong>%2</strong>(%3) Creating new %1 partition table on %2. Creando nova táboa de partición %1 en %2. The installer failed to create a partition table on %1. O instalador fallou ó crear a táboa de partición en %1. CreateUserJob Create user %1 Crear o usuario %1 Create user <strong>%1</strong>. Crear usario <strong>%1</strong> Creating user %1. Creación do usuario %1. Sudoers dir is not writable. O directorio sudoers non ten permisos de escritura. Cannot create sudoers file for writing. Non foi posible crear o arquivo de sudoers. Cannot chmod sudoers file. Non se puideron cambiar os permisos do arquivo sudoers. Cannot open groups file for reading. Non foi posible ler o arquivo grupos. CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Crear un grupo de volume novo chamado %1. Create new volume group named <strong>%1</strong>. Crear un grupo de volume nome chamado <strong>%1</strong>. Creating new volume group named %1. A crear un grupo de volume novo chamado %1. The installer failed to create a volume group named '%1'. O instalador non foi quen de crear un grupo de volume chamado «%1». DeactivateVolumeGroupJob Deactivate volume group named %1. Desactivar o grupo de volume chamado %1. Deactivate volume group named <strong>%1</strong>. Desactivar o grupo de volume chamado <strong>%1</strong>. The installer failed to deactivate a volume group named %1. O instalador non foi quen de desactivar un grupo de volume chamado %1. DeletePartitionJob Delete partition %1. Eliminar partición %1. Delete partition <strong>%1</strong>. Eliminar partición <strong>%1</strong>. Deleting partition %1. Eliminando partición %1 The installer failed to delete partition %1. O instalador fallou ó eliminar a partición %1 DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. O tipo de <strong>táboa de partición</strong>no dispositivo de almacenamento escollido.<br><br>O único xeito de cambia-lo tipo de partición é borrar e volver a crear a táboa de partición dende o comenzo, isto destrúe todolos datos no dispositivo de almacenamento. <br> Este instalador manterá a táboa de partición actúal agás que escolla outra cousa explicitamente. <br> Se non está seguro, en sistemas modernos é preferibel GPT. This device has a <strong>%1</strong> partition table. O dispositivo ten <strong>%1</strong> una táboa de partición. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. Este é un dispositivo de tipo <strong>loop</strong>. <br><br> É un pseudo-dispositivo que non ten táboa de partición que permita acceder aos ficheiros como un dispositivo de bloques. Este,modo de configuración normalmente so contén un sistema de ficheiros individual. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. Este instalador <strong>non pode detectar unha táboa de partición </strong>no sistema de almacenamento seleccionado. <br><br>O dispositivo non ten táboa de particion ou a táboa de partición está corrompida ou é dun tipo descoñecido.<br>Este instalador poder crear una táboa de partición nova por vóstede, ben automaticamente ou a través de páxina de particionamento a man. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Este é o tipo de táboa de partición recomendada para sistema modernos que empezan dende un sistema de arranque <strong>EFI</strong>. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. <br><br>Esta táboa de partición so é recomendabel en sistemas vellos que empezan dende un sistema de arranque <strong>BIOS</strong>. GPT é recomendabel na meirande parte dos outros casos.<br><br><strong>Atención:</strong>A táboa de partición MBR é un estándar obsoleto da época do MS-DOS.<br>So pódense crear 4 particións <em>primarias</em>, e desas 4, una pode ser unha partición<em>extensa</em>, que pode conter muitas particións <em>lóxicas</em>. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1 - (%2) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Escribila configuración LUKS para Dracut en %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Omítese escribir a configuración LUKS para Dracut: A partición «/» non está cifrada Failed to open %1 Fallou ao abrir %1 DummyCppJob Dummy C++ Job Tarefa parva de C++ EditExistingPartitionDialog Edit Existing Partition Editar unha partición existente Content: Contido: &Keep &Gardar Format Formato Warning: Formatting the partition will erase all existing data. Atención: Dar formato á partición borrará tódolos datos existentes. &Mount Point: Punto de &montaxe: Si&ze: &Tamaño: MiB MiB Fi&le System: Sistema de Ficheiros: Flags: Bandeiras: Mountpoint already in use. Please select another one. Punto de montaxe xa en uso. Faga o favor de escoller outro. EncryptWidget Form Formulario En&crypt system En&criptar sistema Passphrase Frase de contrasinal Confirm passphrase Confirme a frase de contrasinal Please enter the same passphrase in both boxes. Faga o favor de introducila a misma frase de contrasinal námbalas dúas caixas. FillGlobalStorageJob Set partition information Poñela información da partición Install %1 on <strong>new</strong> %2 system partition. Instalar %1 nunha <strong>nova</strong> partición do sistema %2 Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Configure unha <strong>nova</strong> partición %2 con punto de montaxe <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Instalar %2 na partición do sistema %3 <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Configurala partición %3 <strong>%1</strong> con punto de montaxe <strong>%2</strong>. Install boot loader on <strong>%1</strong>. Instalar o cargador de arranque en <strong>%1</strong>. Setting up mount points. Configuralos puntos de montaxe. FinishedPage Form Formulario <Restart checkbox tooltip> &Restart now &Reiniciar agora. <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>Todo feito.</h1><br/>%1 foi instalado na súa computadora.<br/>Agora pode reiniciar no seu novo sistema ou continuar a usalo entorno Live %2. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Fallou a instalación</h1><br/>%1 non se pudo instalar na sua computadora. <br/>A mensaxe de erro foi: %2. FinishedViewStep Finish Fin Setup Complete Installation Complete Instalacion completa The setup of %1 is complete. The installation of %1 is complete. Completouse a instalación de %1 FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatting partition %1 with file system %2. Dando formato a %1 con sistema de ficheiros %2. The installer failed to format partition %1 on disk '%2'. O instalador fallou cando formateaba a partición %1 no disco '%2'. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source está conectado a unha fonte de enerxía The system is not plugged in to a power source. O sistema non está conectado a unha fonte de enerxía. is connected to the Internet está conectado á Internet The system is not connected to the Internet. O sistema non está conectado á Internet. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. O instalador non se está a executar con dereitos de administrador. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. A pantalla é demasiado pequena para mostrar o instalador. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Konsole non está instalado Please install KDE Konsole and try again! Instale KDE Konsole e ténteo de novo! Executing script: &nbsp;<code>%1</code> Executando o script: &nbsp; <code>%1</code> InteractiveTerminalViewStep Script Script KeyboardPage Set keyboard model to %1.<br/> Seleccionado modelo de teclado a %1.<br/> Set keyboard layout to %1/%2. Seleccionada a disposición do teclado a %1/%2. KeyboardViewStep Keyboard Teclado LCLocaleDialog System locale setting Configuración da localización The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. A configuración de localización afecta a linguaxe e o conxunto de caracteres dalgúns elementos da interface de usuario de liña de comandos. <br/>A configuración actúal é <strong>%1</strong>. &Cancel &Cancelar &OK &Ok LicensePage Form Formulario <h1>License Agreement</h1> I accept the terms and conditions above. Acepto os termos e condicións anteriores. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License Licenza LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>dispositivo %1</strong><br/>por %2 <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>Controlador gráfico %1</strong><br/><font color="Grey">de %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>Engadido de navegador %1</strong><br/><font color="Grey"> de %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>Códec %1</strong><br/><font color="Grey">de %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>Paquete %1</strong><br/><font color="Grey">de %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">de %2</font> File: %1 Show the license text Open license agreement in browser. Hide license text LocalePage The system language will be set to %1. A linguaxe do sistema será establecida a %1. The numbers and dates locale will be set to %1. A localización de números e datas será establecida a %1. Region: Rexión: Zone: Zona: &Change... &Cambio... Set timezone to %1/%2.<br/> Establecer a zona de tempo a %1/%2.<br/> LocaleViewStep Location Localización... LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Xerar o identificador da máquina. Configuration Error No root mount point is set for MachineId. NetInstallPage Name Nome Description Descripción Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Installación por rede. (Desactivadas. Non se pudo recupera-la lista de pacotes, comprobe a sua conexión a rede) Network Installation. (Disabled: Received invalid groups data) Instalación de rede. (Desactivado: Recibírense datos de grupos incorrectos) Network Installation. (Disabled: Incorrect configuration) NetInstallViewStep Package selection Selección de pacotes. Office software Office package Browser software Browser package Web browser Kernel Services Login Desktop Applications NotesQmlViewStep Notes OEMPage Ba&tch: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> OEMViewStep OEM Configuration Set the OEM Batch Identifier to <code>%1</code>. PWQ Password is too short O contrasinal é demasiado curto Password is too long O contrasinal é demasiado longo Password is too weak O contrasinal é moi feble Memory allocation error when setting '%1' Erro de asignación de memoria ao configurar «%1» Memory allocation error Erro de asignación de memoria The password is the same as the old one O contrasinal é o mesmo que o anterior The password is a palindrome O contrasinal é un palíndromo The password differs with case changes only O contrasinal difire só no uso de maiúsculas The password is too similar to the old one O contrasinal é demasiado semellante ao anterior The password contains the user name in some form O contrasinal contén o nome do usuario ou unha variante The password contains words from the real name of the user in some form O contrasinal contén palabras do nome real do usuario ou unha variante The password contains forbidden words in some form O contrasinal contén palabras prohibidas ou unha variante The password contains less than %1 digits O contrasinal contén menos de %1 díxitos The password contains too few digits O contrasinal contén moi poucos díxitos The password contains less than %1 uppercase letters O contrasinal contén menos de %1 maiúsculas The password contains too few uppercase letters O contrasinal contén moi poucas maiúsculas The password contains less than %1 lowercase letters O contrasinal contén menos de %1 minúsculas The password contains too few lowercase letters O contrasinal contén moi poucas minúsculas The password contains less than %1 non-alphanumeric characters O contrasinal contén menos de %1 caracteres alfanuméricos The password contains too few non-alphanumeric characters O contrasinal contén moi poucos caracteres non alfanuméricos The password is shorter than %1 characters O contrasinal ten menos de %1 caracteres The password is too short O contrasinal é moi curto The password is just rotated old one O contrasinal é un anterior reutilizado The password contains less than %1 character classes O contrasinal contén menos de %1 clases de caracteres The password does not contain enough character classes O contrasinal non contén suficientes clases de caracteres The password contains more than %1 same characters consecutively O contrasinal contén máis de %1 caracteres iguais consecutivos The password contains too many same characters consecutively O contrasinal contén demasiados caracteres iguais consecutivos The password contains more than %1 characters of the same class consecutively O contrasinal contén máis de %1 caracteres consecutivos da mesma clase The password contains too many characters of the same class consecutively O contrasinal contén demasiados caracteres da mesma clase consecutivos The password contains monotonic sequence longer than %1 characters O contrasinal contén unha secuencia monotónica de máis de %1 caracteres The password contains too long of a monotonic character sequence O contrasinal contén unha secuencia de caracteres monotónica demasiado longa No password supplied Non se indicou o contrasinal Cannot obtain random numbers from the RNG device Non é posíbel obter números aleatorios do servizo de RNG Password generation failed - required entropy too low for settings Fallou a xeración do contrasinal - a entropía requirida é demasiado baixa para a configuración The password fails the dictionary check - %1 O contrasinal falla a comprobación do dicionario - %1 The password fails the dictionary check O contrasinal falla a comprobación do dicionario Unknown setting - %1 Configuración descoñecida - %1 Unknown setting Configuración descoñecida Bad integer value of setting - %1 Valor enteiro incorrecto de opción - %1 Bad integer value Valor enteiro incorrecto Setting %1 is not of integer type A opción %1 non é de tipo enteiro Setting is not of integer type A opción non é de tipo enteiro Setting %1 is not of string type A opción %1 non é de tipo cadea Setting is not of string type A opción non é de tipo cadea Opening the configuration file failed Non foi posíbel abrir o ficheiro de configuración The configuration file is malformed O ficheiro de configuración está mal escrito Fatal failure Fallo fatal Unknown error Erro descoñecido Password is empty PackageChooserPage Form Formulario Product Name TextLabel EtiquetaTexto Long Product Description Package Selection Please pick a product from the list. The selected product will be installed. PackageChooserViewStep Packages Page_Keyboard Form Formulario Keyboard Model: Modelo de teclado. Type here to test your keyboard Teclee aquí para comproba-lo seu teclado. Page_UserSetup Form Formulario What is your name? Cal é o seu nome? What name do you want to use to log in? Cal é o nome que quere usar para entrar? Choose a password to keep your account safe. Escolla un contrasinal para mante-la sua conta segura. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>Entre o mesmo contrasinal dúas veces, deste xeito podese comprobar errores ó teclear. Un bo contrasinal debe conter un conxunto de letras, números e signos de puntuación, deberá ter como mínimo oito carácteres, e debe cambiarse a intervalos de tempo regulares.</small> What is the name of this computer? Cal é o nome deste computador? Your Full Name login <small>This name will be used if you make the computer visible to others on a network.</small> <small>Este nome usarase se fai o computador visible para outros nunha rede.</small> Computer Name Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Entrar automáticamente sen preguntar polo contrasinal. Use the same password for the administrator account. Empregar o mesmo contrasinal para a conta de administrador. Choose a password for the administrator account. Escoller un contrasinal para a conta de administrador. <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Introduza o mesmo contrasinal dúas veces para comprobar que non houbo erros ao escribilo.</small> PartitionLabelsView Root Raíz Home Cartafol persoal Boot Arranque EFI system Sistema EFI Swap Intercambio New partition for %1 Nova partición para %1 New partition Nova partición %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space Espazo libre New partition Nova partición Name Nome File System Sistema de ficheiros Mount Point Punto de montaxe Size Tamaño PartitionPage Form Formulario Storage de&vice: &Dispositivo de almacenamento: &Revert All Changes &Reverter todos os cambios New Partition &Table Nova &táboa de particións Cre&ate Cre&ar &Edit &Editar &Delete Elimina&r New Volume Group Novo grupo de volumes Resize Volume Group Cambiar o tamaño do grupo de volumes Deactivate Volume Group Desactivar o grupo de volumes Remove Volume Group Retirar o grupo de volumes I&nstall boot loader on: I&nstalar o cargador de arranque en: Are you sure you want to create a new partition table on %1? Confirma que desexa crear unha táboa de particións nova en %1? Can not create new partition Non é posíbel crear a partición nova The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. A táboa de particións de %1 xa ten %2 particións primarias e non é posíbel engadir máis. Retire unha partición primaria e engada unha partición estendida. PartitionViewStep Gathering system information... A reunir a información do sistema... Partitions Particións Install %1 <strong>alongside</strong> another operating system. Instalar %1 <strong>a carón</strong> doutro sistema operativo. <strong>Erase</strong> disk and install %1. <strong>Limpar</strong> o disco e instalar %1. <strong>Replace</strong> a partition with %1. <strong>Substituír</strong> unha partición por %1. <strong>Manual</strong> partitioning. Particionamento <strong>manual</strong>. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Instalar %1 <strong>a carón</strong> doutro sistema operativo no disco <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Limpar</strong> o disco <strong>%2</strong> (%3) e instalar %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Substituír</strong> unha partición do disco <strong>%2</strong> (%3) por %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Particionamento <strong>manual</strong> do disco <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Disco <strong>%1</strong> (%2) Current: Actual: After: Despois: No EFI system partition configured Non hai ningunha partición de sistema EFI configurada An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. É necesaria unha partición de sistema EFI para iniciar %1.<br/><br/>Para configurar unha partición de sistema EFI volva atrás e seleccione ou cree un sistema de ficheiros FAT32 coa bandeira <strong>esp</strong> activada e co punto de montaxe <strong>%2.<br/><br/>Pode continuar sen configurar unha partición de sistema EFI mais pode que o sistema non dea arrancado. EFI system partition flag not set A bandeira da partición de sistema EFI non está configurada An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. É necesaria unha partición de sistema EFI para iniciar %1.<br/><br/>Configurouse unha partición co punto de montaxe <strong>%2</strong> mais a súa bandeira <strong>esp</strong> non está conrfigurada.<br/>Para configurar a bandeira volva atrás e edite a partición.<br/><br/>Pode continuar sen configurar unha partición de sistema EFI mais pode que o sistema non dea arrancado. Boot partition not encrypted A partición de arranque non está cifrada A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. Configurouse unha partición de arranque separada xunto cunha partición raíz cifrada, mais a partición raíz non está cifrada.<br/><br/>Con este tipo de configuración preocupa a seguranza porque nunha partición sen cifrar grávanse ficheiros de sistema importantes.<br/>Pode continuar, se así o desexa, mais o desbloqueo do sistema de ficheiros producirase máis tarde durante o arranque do sistema.<br/>Para cifrar unha partición raíz volva atrás e créea de novo, seleccionando <strong>Cifrar</strong> na xanela de creación de particións. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Tarefa de aparencia e experiencia de Plasma Could not select KDE Plasma Look-and-Feel package Non foi posíbel seleccionar o paquete de aparencia e experiencia do Plasma de KDE PlasmaLnfPage Form Formulario Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Escolla unha aparencia e experiencia para o Escritorio Plasma de KDE. Tamén pode omitir este paso e configurar a aparencia e experiencia unha vez instalado o sistema. Ao premer nunha selección de aparencia e experiencia pode ver unha vista inmediata dela. PlasmaLnfViewStep Look-and-Feel Aparencia e experiencia PreserveFiles Saving files for later ... A gardar ficheiros para máis tarde... No files configured to save for later. Non hai ficheiros configurados que gardar para máis tarde Not all of the configured files could be preserved. Non foi posíbel manter todos os ficheiros configurados. ProcessResult There was no output from the command. A saída non produciu ningunha saída. Output: Saída: External command crashed. A orde externa fallou Command <i>%1</i> crashed. A orde <i>%1</i> fallou. External command failed to start. Non foi posíbel iniciar a orde externa. Command <i>%1</i> failed to start. Non foi posíbel iniciar a orde <i>%1</i>. Internal error when starting command. Produciuse un erro interno ao iniciar a orde. Bad parameters for process job call. Erro nos parámetros ao chamar o traballo External command failed to finish. A orde externa non se puido rematar. Command <i>%1</i> failed to finish in %2 seconds. A orde <i>%1</i> non se puido rematar en %2s segundos. External command finished with errors. A orde externa rematou con erros. Command <i>%1</i> finished with exit code %2. A orde <i>%1</i> rematou co código de erro %2. QObject Default Keyboard Model Modelo de teclado predeterminado Default Predeterminado unknown descoñecido extended estendido unformatted sen formatar swap intercambio Unpartitioned space or unknown partition table Espazo sen particionar ou táboa de particións descoñecida (no mount point) Requirements checking for module <i>%1</i> is complete. %1 (%2) language[name] (country[name]) %1 (%2) No product No description provided. File not found Path <pre>%1</pre> must be an absolute path. Could not create new random file <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Retirar o grupo de volumes %1. Remove Volume Group named <strong>%1</strong>. Retirar o grupo de volumes chamado <strong>%1</strong>. The installer failed to remove a volume group named '%1'. O instalador non foi quen de retirar un grupo de volumes chamado «%1». ReplaceWidget Form Formulario Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Seleccione onde instalar %1.<br/><font color="red">Advertencia: </font>isto elimina todos os ficheiros da partición seleccionada. The selected item does not appear to be a valid partition. O elemento seleccionado non parece ser unha partición válida. %1 cannot be installed on empty space. Please select an existing partition. Non é posíbel instalar %1 nun espazo baleiro. Seleccione unha partición existente. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. Non é posíbel instalar %1 nunha partición estendida. Seleccione unha partición primaria ou lóxica existente. %1 cannot be installed on this partition. Non é posíbel instalar %1 nesta partición Data partition (%1) Partición de datos (%1) Unknown system partition (%1) Partición de sistema descoñecida (%1) %1 system partition (%2) %1 partición do sistema (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>A partición %1 é demasiado pequena para %2. Seleccione unha partición cunha capacidade mínima de %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/>Non foi posíbel atopar ningunha partición de sistema EFI neste sistema. Recúe e empregue o particionamento manual para configurar %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>%1 vai ser instalado en %2. <br/><font color="red">Advertencia: </font>vanse perder todos os datos da partición %2. The EFI system partition at %1 will be used for starting %2. A partición EFI do sistema en %1 será usada para iniciar %2. EFI system partition: Partición EFI do sistema: ResizeFSJob Resize Filesystem Job Traballo de mudanza de tamaño do sistema de ficheiros Invalid configuration Configuración incorrecta The file-system resize job has an invalid configuration and will not run. O traballo de mudanza do tamaño do sistema de ficheiros ten unha configuración incorrecta e non vai ser executado. KPMCore not Available KPMCore non está dispoñíbel Calamares cannot start KPMCore for the file-system resize job. Calamares non pode iniciar KPMCore para o traballo de mudanza do tamaño do sistema de ficheiros. Resize Failed Fallou a mudanza de tamaño The filesystem %1 could not be found in this system, and cannot be resized. Non foi posíbel atopar o sistema de ficheiros %1 neste sistema e non se pode mudar o seu tamaño. The device %1 could not be found in this system, and cannot be resized. Non foi posíbel atopar o dispositivo %1 neste sistema e non se pode mudar o seu tamaño. The filesystem %1 cannot be resized. Non é posíbel mudar o tamaño do sistema de ficheiros %1. The device %1 cannot be resized. Non é posíbel mudar o tamaño do dispositivo %1. The filesystem %1 must be resized, but cannot. Hai que mudar o tamaño do sistema de ficheiros %1 mais non é posíbel. The device %1 must be resized, but cannot Hai que mudar o tamaño do dispositivo %1 mais non é posíbel ResizePartitionJob Resize partition %1. Redimensionar partición %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. O instalador fallou a hora de reducir a partición %1 no disco '%2'. ResizeVolumeGroupDialog Resize Volume Group Cambiar o tamaño do grupo de volumes ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Mudar o tamaño do grupo de volumes chamado %1 de %2 para %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. Mudar o tamaño do grupo de volumes chamado <strong>%1</strong> de <strong>%2</strong> para <strong>%3</strong>. The installer failed to resize a volume group named '%1'. O instalador non foi quen de lle mudar o tamaño ao grupo de volumes chamado «%1». ResultsListDialog For best results, please ensure that this computer: Para os mellores resultados, por favor, asegúrese que este ordenador: System requirements Requisitos do sistema ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> Este ordenador non satisfai os requerimentos mínimos ara a instalación de %1.<br/>A instalación non pode continuar. <a href="#details">Máis información...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. Este ordenador non satisfai algúns dos requisitos recomendados para instalar %1.<br/> A instalación pode continuar, pero pode que algunhas características sexan desactivadas. This program will ask you some questions and set up %2 on your computer. Este programa faralle algunhas preguntas mentres prepara %2 no seu ordenador. ScanningDialog Scanning storage devices... A examinar os dispositivos de almacenamento... Partitioning Particionamento SetHostNameJob Set hostname %1 Hostname: %1 Set hostname <strong>%1</strong>. Configurar hostname <strong>%1</strong>. Setting hostname %1. Configurando hostname %1. Internal Error Erro interno Cannot write hostname to target system Non foi posíbel escreber o nome do servidor do sistema obxectivo SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Configurar modelo de teclado a %1, distribución a %2-%3 Failed to write keyboard configuration for the virtual console. Houbo un fallo ao escribir a configuración do teclado para a consola virtual. Failed to write to %1 Non pode escribir en %1 Failed to write keyboard configuration for X11. Non foi posíbel escribir a configuración do teclado para X11. Failed to write keyboard configuration to existing /etc/default directory. Non foi posíbel escribir a configuración do teclado no directorio /etc/default existente. SetPartFlagsJob Set flags on partition %1. Configurar as bandeiras na partición %1. Set flags on %1MiB %2 partition. Set flags on new partition. Configurar as bandeiras na nova partición. Clear flags on partition <strong>%1</strong>. Limpar as bandeiras da partición <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Limpar as bandeiras da nova partición. Flag partition <strong>%1</strong> as <strong>%2</strong>. Marcar a partición <strong>%1</strong> coa bandeira <strong>%2</strong>. Flag new partition as <strong>%1</strong>. Marcar a nova partición coa bandeira <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. A limpar as bandeiras da partición <strong>%1</strong>. Clearing flags on new partition. A limpar as bandeiras da nova partición. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. A configurar as bandeiras <strong>%2</strong> na partición <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. A configurar as bandeiras <strong>%1</strong> na nova partición. The installer failed to set flags on partition %1. O instalador non foi quen de configurar as bandeiras na partición %1. SetPasswordJob Set password for user %1 Configurar contrasinal do usuario %1 Setting password for user %1. A configurar o contrasinal do usuario %1. Bad destination system path. Ruta incorrecta ao sistema de destino. rootMountPoint is %1 rootMountPoint é %1 Cannot disable root account. Non é posíbel desactivar a conta do superusuario. passwd terminated with error code %1. passwd terminou co código de erro %1. Cannot set password for user %1. Non é posíbel configurar o contrasinal do usuario %1. usermod terminated with error code %1. usermod terminou co código de erro %1. SetTimezoneJob Set timezone to %1/%2 Estabelecer a fuso horario de %1/%2 Cannot access selected timezone path. Non é posíbel acceder á ruta do fuso horario seleccionado. Bad path: %1 Ruta incorrecta: %1 Cannot set timezone. Non é posíbel estabelecer o fuso horario Link creation failed, target: %1; link name: %2 Fallou a creación da ligazón; destino: %1; nome da ligazón: %2 Cannot set timezone, Non é posíbel estabelecer o fuso horario, Cannot open /etc/timezone for writing Non é posíbel abrir /etc/timezone para escribir nel ShellProcessJob Shell Processes Job Traballo de procesos de consola SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. Esta é unha vista xeral do que vai acontecer cando inicie o procedemento de instalación. SummaryViewStep Summary Resumo TrackingInstallJob Installation feedback Opinións sobre a instalació Sending installation feedback. Enviar opinións sobre a instalación. Internal error in install-tracking. Produciuse un erro interno en install-tracking. HTTP request timed out. Esgotouse o tempo de espera de HTTP. TrackingMachineNeonJob Machine feedback Información fornecida pola máquina Configuring machine feedback. Configuración das informacións fornecidas pola máquina. Error in machine feedback configuration. Produciuse un erro na configuración das información fornecidas pola máquina. Could not configure machine feedback correctly, script error %1. Non foi posíbel configurar correctamente as informacións fornecidas pola máquina; erro de script %1. Could not configure machine feedback correctly, Calamares error %1. Non foi posíbel configurar correctamente as informacións fornecidas pola máquin; erro de Calamares %1. TrackingPage Form Formulario Placeholder Comodín <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>Ao seleccionar isto vostede <span style=" font-weight:600;">non envía ningunha información</span> sobre esta instalación.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Prema aquí para máis información sobre as opinións do usuario</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. O seguimento da instalación axuda a %1 a ver cantos usuarios ten, en que hardware instalan %1 (coas dúas últimas opcións de embaixo) e obter información continua sobre os aplicativos preferidos. Para ver o que se envía, prema na icona de axuda que hai a carón de cada zona. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. Ao seleccionar isto vostede envía información sobre a súa instalación e hardware. Esta información <b>só se envía unha vez</b>, logo de rematar a instalación. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. Ao seleccionar isto vostede envía información <b>periodicamente</b> sobre a súa instalación, hardware e aplicativos a %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. Ao seleccionar isto vostede envía información <b>regularmente</b> sobre a súa instalación, hardware, aplicativos e patrón de uso a %1. TrackingViewStep Feedback Opinións UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> Your username is too long. O nome de usuario é demasiado longo. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Only letters, numbers, underscore and hyphen are allowed. Your hostname is too short. O nome do computador é demasiado curto. Your hostname is too long. O nome do computador é demasiado longo. Your passwords do not match! Os contrasinais non coinciden! UsersViewStep Users Usuarios VariantModel Key Value VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Lista de volumes físicos Volume Group Name: Nome do grupo de volumes: Volume Group Type: Tipo do grupo de volumes: Physical Extent Size: Tamaño de extensión física: MiB MiB Total Size: Tamaño total: Used Size: Tamaño usado: Total Sectors: Sectores totais: Quantity of LVs: Cantidade de LV: WelcomePage Form Formulario Select application and system language Open donations website &Donate Open help and support website Open issues and bug-tracking website Open release notes website &Release notes &Notas de publicación &Known issues &Problemas coñecidos &Support &Axuda &About &Acerca de <h1>Welcome to the %1 installer.</h1> <h1>Benvido o instalador %1.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Reciba a benvida ao instalador Calamares para %1.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Welcome to %1 setup.</h1> About %1 setup About %1 installer Acerca do instalador %1 <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support %1 axuda WelcomeQmlViewStep Welcome Benvido WelcomeViewStep Welcome Benvido notesqml <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> About Support Known issues Release notes Donate calamares-3.2.20/lang/calamares_gu.ts000066400000000000000000004566421362604102500174620ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. BootLoaderModel Master Boot Record of %1 Boot Partition System Partition Do not install a boot loader %1 (%2) Calamares::BlankViewStep Blank Page Calamares::DebugWindow Form GlobalStorage JobQueue Modules Type: none Interface: Tools Reload Stylesheet Widget Tree Debug information Calamares::ExecutionViewStep Set up Install Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Calamares::PythonJob Running %1 operation. Bad working directory path Working directory %1 for python job %2 is not readable. Bad main script file Main script file %1 for python job %2 is not readable. Boost.Python error in job "%1". Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager &Back &Next &Cancel Cancel setup without changing the system. Cancel installation without changing the system. Setup Failed Would you like to paste the install log to the web? Install Log Paste URL The upload was unsuccessful. No web-paste was done. Calamares Initialization Failed %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. <br/>The following modules could not be loaded: Continue with installation? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Set up &Install Setup is complete. Close the setup program. Cancel setup? Cancel installation? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. &Yes &No &Close Continue with setup? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> &Install now Go &back &Done The installation is complete. Close the installer. Error Installation Failed CalamaresPython::Helper Unknown exception type unparseable Python error unparseable Python traceback Unfetchable Python error. CalamaresUtils Install log posted to: %1 CalamaresWindow %1 Setup Program %1 Installer Show debug information CheckerContainer Gathering system information... ChoicePage Form After: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Boot loader location: Select storage de&vice: Current: Reuse %1 as home partition for %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. <strong>Select a partition to install on</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. The EFI system partition at %1 will be used for starting %2. EFI system partition: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. No Swap Reuse Swap Swap (no Hibernate) Swap (with Hibernate) Swap to file <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. ClearMountsJob Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 ClearTempMountsJob Clear all temporary mounts. Clearing all temporary mounts. Cannot get list of temporary mounts. Cleared all temporary mounts. CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition MiB Partition &Type: &Primary E&xtended Fi&le System: LVM LV name Flags: &Mount Point: Si&ze: En&crypt Logical Primary GPT Mountpoint already in use. Please select another one. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. The installer failed to create partition on disk '%1'. CreatePartitionTableDialog Create Partition Table Creating a new partition table will delete all existing data on the disk. What kind of partition table do you want to create? Master Boot Record (MBR) GUID Partition Table (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Creating new %1 partition table on %2. The installer failed to create a partition table on %1. CreateUserJob Create user %1 Create user <strong>%1</strong>. Creating user %1. Sudoers dir is not writable. Cannot create sudoers file for writing. Cannot chmod sudoers file. Cannot open groups file for reading. CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. Delete partition <strong>%1</strong>. Deleting partition %1. The installer failed to delete partition %1. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. This device has a <strong>%1</strong> partition table. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - (%2) device[name] - (device-node[name]) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Failed to open %1 DummyCppJob Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Content: &Keep Format Warning: Formatting the partition will erase all existing data. &Mount Point: Si&ze: MiB Fi&le System: Flags: Mountpoint already in use. Please select another one. EncryptWidget Form En&crypt system Passphrase Confirm passphrase Please enter the same passphrase in both boxes. FillGlobalStorageJob Set partition information Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Install boot loader on <strong>%1</strong>. Setting up mount points. FinishedPage Form <Restart checkbox tooltip> &Restart now <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. FinishedViewStep Finish Setup Complete Installation Complete The setup of %1 is complete. The installation of %1 is complete. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatting partition %1 with file system %2. The installer failed to format partition %1 on disk '%2'. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source The system is not plugged in to a power source. is connected to the Internet The system is not connected to the Internet. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Please install KDE Konsole and try again! Executing script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script KeyboardPage Set keyboard model to %1.<br/> Set keyboard layout to %1/%2. KeyboardViewStep Keyboard LCLocaleDialog System locale setting The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. &Cancel &OK LicensePage Form <h1>License Agreement</h1> I accept the terms and conditions above. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> File: %1 Show the license text Open license agreement in browser. Hide license text LocalePage The system language will be set to %1. The numbers and dates locale will be set to %1. Region: Zone: &Change... Set timezone to %1/%2.<br/> LocaleViewStep Location LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Configuration Error No root mount point is set for MachineId. NetInstallPage Name Description Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Incorrect configuration) NetInstallViewStep Package selection Office software Office package Browser software Browser package Web browser Kernel Services Login Desktop Applications NotesQmlViewStep Notes OEMPage Ba&tch: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> OEMViewStep OEM Configuration Set the OEM Batch Identifier to <code>%1</code>. PWQ Password is too short Password is too long Password is too weak Memory allocation error when setting '%1' Memory allocation error The password is the same as the old one The password is a palindrome The password differs with case changes only The password is too similar to the old one The password contains the user name in some form The password contains words from the real name of the user in some form The password contains forbidden words in some form The password contains less than %1 digits The password contains too few digits The password contains less than %1 uppercase letters The password contains too few uppercase letters The password contains less than %1 lowercase letters The password contains too few lowercase letters The password contains less than %1 non-alphanumeric characters The password contains too few non-alphanumeric characters The password is shorter than %1 characters The password is too short The password is just rotated old one The password contains less than %1 character classes The password does not contain enough character classes The password contains more than %1 same characters consecutively The password contains too many same characters consecutively The password contains more than %1 characters of the same class consecutively The password contains too many characters of the same class consecutively The password contains monotonic sequence longer than %1 characters The password contains too long of a monotonic character sequence No password supplied Cannot obtain random numbers from the RNG device Password generation failed - required entropy too low for settings The password fails the dictionary check - %1 The password fails the dictionary check Unknown setting - %1 Unknown setting Bad integer value of setting - %1 Bad integer value Setting %1 is not of integer type Setting is not of integer type Setting %1 is not of string type Setting is not of string type Opening the configuration file failed The configuration file is malformed Fatal failure Unknown error Password is empty PackageChooserPage Form Product Name TextLabel Long Product Description Package Selection Please pick a product from the list. The selected product will be installed. PackageChooserViewStep Packages Page_Keyboard Form Keyboard Model: Type here to test your keyboard Page_UserSetup Form What is your name? What name do you want to use to log in? Choose a password to keep your account safe. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> What is the name of this computer? Your Full Name login <small>This name will be used if you make the computer visible to others on a network.</small> Computer Name Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Use the same password for the administrator account. Choose a password for the administrator account. <small>Enter the same password twice, so that it can be checked for typing errors.</small> PartitionLabelsView Root Home Boot EFI system Swap New partition for %1 New partition %1 %2 size[number] filesystem[name] PartitionModel Free Space New partition Name File System Mount Point Size PartitionPage Form Storage de&vice: &Revert All Changes New Partition &Table Cre&ate &Edit &Delete New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group I&nstall boot loader on: Are you sure you want to create a new partition table on %1? Can not create new partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. PartitionViewStep Gathering system information... Partitions Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <strong>Replace</strong> a partition with %1. <strong>Manual</strong> partitioning. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Current: After: No EFI system partition configured An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. EFI system partition flag not set An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: External command crashed. Command <i>%1</i> crashed. External command failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Bad parameters for process job call. External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Command <i>%1</i> finished with exit code %2. QObject Default Keyboard Model Default unknown extended unformatted swap Unpartitioned space or unknown partition table (no mount point) Requirements checking for module <i>%1</i> is complete. %1 (%2) language[name] (country[name]) No product No description provided. File not found Path <pre>%1</pre> must be an absolute path. Could not create new random file <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. The selected item does not appear to be a valid partition. %1 cannot be installed on empty space. Please select an existing partition. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 cannot be installed on this partition. Data partition (%1) Unknown system partition (%1) %1 system partition (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. The EFI system partition at %1 will be used for starting %2. EFI system partition: ResizeFSJob Resize Filesystem Job Invalid configuration The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. ResizeVolumeGroupDialog Resize Volume Group ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: System requirements ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. This program will ask you some questions and set up %2 on your computer. ScanningDialog Scanning storage devices... Partitioning SetHostNameJob Set hostname %1 Set hostname <strong>%1</strong>. Setting hostname %1. Internal Error Cannot write hostname to target system SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Failed to write keyboard configuration for the virtual console. Failed to write to %1 Failed to write keyboard configuration for X11. Failed to write keyboard configuration to existing /etc/default directory. SetPartFlagsJob Set flags on partition %1. Set flags on %1MiB %2 partition. Set flags on new partition. Clear flags on partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag new partition as <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. SetPasswordJob Set password for user %1 Setting password for user %1. Bad destination system path. rootMountPoint is %1 Cannot disable root account. passwd terminated with error code %1. Cannot set password for user %1. usermod terminated with error code %1. SetTimezoneJob Set timezone to %1/%2 Cannot access selected timezone path. Bad path: %1 Cannot set timezone. Link creation failed, target: %1; link name: %2 Cannot set timezone, Cannot open /etc/timezone for writing ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) SummaryPage This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. SummaryViewStep Summary TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingMachineNeonJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form Placeholder <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. TrackingViewStep Feedback UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> Your username is too long. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Only letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Your hostname is too long. Your passwords do not match! UsersViewStep Users VariantModel Key Value VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB Total Size: Used Size: Total Sectors: Quantity of LVs: WelcomePage Form Select application and system language Open donations website &Donate Open help and support website Open issues and bug-tracking website Open release notes website &Release notes &Known issues &Support &About <h1>Welcome to the %1 installer.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Welcome to %1 setup.</h1> About %1 setup About %1 installer <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support WelcomeQmlViewStep Welcome WelcomeViewStep Welcome notesqml <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> About Support Known issues Release notes Donate calamares-3.2.20/lang/calamares_he.ts000066400000000000000000005746701362604102500174450ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. <strong>סביבת ×”×תחול</strong> של מערכת זו. <br><br> מערכות x86 ישנות יותר תומכות ×ך ורק ב־<strong>BIOS</strong>.<br> מערכות חדשות משתמשות בדרך כלל ב־<strong>EFI</strong>, ×ך עשוית להופיע ×›Ö¾BIOS ×× ×”×Ÿ מופעלות במצב ת×ימות ל×חור. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. מערכת זו הופעלה בתצורת ×תחול <strong>EFI</strong>.<br><br> כדי להגדיר הפעלה מתצורת ×תחול EFI, על ×שף ההתקנה להתקין מנהל ×תחול מערכת, לדוגמה <strong>GRUB</strong> ×ו <strong>systemd-boot</strong> על <strong>מחיצת מערכת EFI</strong>. פעולה זו ×”×™× ×וטומטית, ××œ× ×× ×›×Ÿ העדפתך ×”×™× ×œ×”×’×“×™×¨ מחיצות ב×ופן ידני, במקרה ×–×” עליך לבחור ×–×ת ×ו להגדיר בעצמך. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. מערכת זו הופעלה בתצורת ×תחול <strong>BIOS</strong>.<br><br> כדי להגדיר הפעלה מתצורת ×תחול BIOS, על ×שף ההתקנה להתקין מנהל ×תחול מערכת, לדוגמה <strong>GRUB</strong>, בתחילת המחיצה ×ו על ×”Ö¾<strong>Master Boot Record</strong> בצמוד להתחלה של טבלת המחיצות (מועדף). פעולה זו ×”×™× ×וטומטית, ××œ× ×× ×›×Ÿ תבחר להגדיר מחיצות ב×ופן ידני, במקרה ×–×” עליך להגדיר ×–×ת בעצמך. BootLoaderModel Master Boot Record of %1 Master Boot Record של %1 Boot Partition מחיצת טעינת המערכת Boot System Partition מחיצת מערכת Do not install a boot loader ×œ× ×œ×”×ª×§×™×Ÿ מנהל ×תחול מערכת %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page עמוד ריק Calamares::DebugWindow Form Form GlobalStorage ×חסון גלובלי JobQueue JobQueue Modules ×ž×•×“×•×œ×™× Type: סוג: none ×œ×œ× Interface: מנשק: Tools ×›×œ×™× Reload Stylesheet טעינת גיליון הסגנון מחדש Widget Tree ×¢×¥ ×•×™×“×’×³×˜×™× Debug information מידע על ניפוי שגי×ות Calamares::ExecutionViewStep Set up הקמה Install התקנה Calamares::FailJob Job failed (%1) משימה נכשלה (%1) Programmed job failure was explicitly requested. הכשל במשימה המוגדרת התבקש במפורש. Calamares::JobThread Done ×”×¡×ª×™×™× Calamares::NamedJob Example job (%1) משימה לדוגמה (%1) Calamares::ProcessJob Run command '%1' in target system. להפעיל ×ת הפקודה ‚%1’ במערכת היעד. Run command '%1'. להפעיל ×ת הפקודה ‚%1’. Running command %1 %2 הפקודה %1 %2 רצה Calamares::PythonJob Running %1 operation. הפעולה %1 רצה. Bad working directory path נתיב תיקיית עבודה שגוי Working directory %1 for python job %2 is not readable. תיקיית העבודה %1 עבור משימת python†%2 ××™× ×” קרי××”. Bad main script file קובץ תסריט הרצה ר×שי ×œ× ×ª×§×™×Ÿ Main script file %1 for python job %2 is not readable. קובץ תסריט הרצה ר×שי %1 עבור משימת python %2 ×œ× ×§×¨×™×. Boost.Python error in job "%1". שגי×ת Boost.Python במשימה „%1â€. Calamares::QmlViewStep Loading ... בטעינה… QML Step <i>%1</i>. צעד QML†<i>%1</i>. Loading failed. הטעינה נכשלה… Calamares::RequirementsChecker Waiting for %n module(s). בהמתנה למודול ×חד. בהמתנה לשני מודולי×. בהמתנה ל־%n מודולי×. בהמתנה ל־%n מודולי×. (%n second(s)) ((שנייה ×חת) (שתי שניות) (%n שניות) (%n שניות) System-requirements checking is complete. בדיקת דרישות המערכת הושלמה. Calamares::ViewManager &Back ×”&×§×•×“× &Next הב&× &Cancel &ביטול Cancel setup without changing the system. ביטול ההתקנה ×œ×œ× ×©×™× ×•×™ המערכת. Cancel installation without changing the system. ביטול התקנה ×œ×œ× ×‘×™×¦×•×¢ שינוי במערכת. Setup Failed ההתקנה נכשלה Would you like to paste the install log to the web? להדביק ×ת יומן ההתקנה ל×ינטרנט? Install Log Paste URL כתובת הדבקת יומן התקנה The upload was unsuccessful. No web-paste was done. ההעל××” ×œ× ×”×¦×œ×™×—×”. ×œ× ×‘×•×¦×¢×” הדבקה ל×ינטרנט. Calamares Initialization Failed הפעלת Calamares נכשלה %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. ×ין ×פשרות להתקין ×ת %1. ל־Calamares ×ין ×פשרות לטעון ×ת ×”×ž×•×“×•×œ×™× ×”×ž×•×’×“×¨×™×. מדובר בתקלה ב×ופן בו ההפצה משתמשת ב־Calamares. <br/>The following modules could not be loaded: <br/>×œ× × ×™×ª×Ÿ לטעון ×ת ×”×ž×•×“×•×œ×™× ×”×‘××™×: Continue with installation? להמשיך בהתקנה? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> תכנית ההתקנה של %1 עומדת לבצע ×©×™× ×•×™×™× ×‘×›×•× ×Ÿ הקשיח שלך לטובת התקנת %2.<br/><strong>×œ× ×ª×”×™×” לך ×פשרות לבטל ×ת ×”×©×™× ×•×™×™× ×”×לה.</strong> &Set up now להת&קין כעת &Set up להת&קין &Install הת&×§× ×” Setup is complete. Close the setup program. ההתקנה הושלמה. × × ×œ×¡×’×•×¨ ×ת תכנית ההתקנה. Cancel setup? לבטל ×ת ההתקנה? Cancel installation? לבטל ×ת ההתקנה? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. לבטל ×ת תהליך ההתקנה הנוכחי? תכנית ההתקנה ×ª×¦× ×•×›×œ ×”×©×™× ×•×™×™× ×™×בדו. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. לבטל ×ת תהליך ההתקנה? ×שף ההתקנה ייסגר וכל ×”×©×™× ×•×™×™× ×™×בדו. &Yes &כן &No &×œ× &Close &סגירה Continue with setup? להמשיך בהתקנה? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> ×שף ההתקנה של %1 הולך לבצע ×©×™× ×•×™×™× ×‘×›×•× ×Ÿ שלך לטובת התקנת %2.<br/><strong>×œ× ×ª×•×›×œ לבטל ×ת ×”×©×™× ×•×™×™× ×”×œ×œ×•.</strong> &Install now להת&קין כעת Go &back ×—&זרה &Done &×¡×™×•× The installation is complete. Close the installer. תהליך ההתקנה הושל×. × × ×œ×¡×’×•×¨ ×ת ×שף ההתקנה. Error שגי××” Installation Failed ההתקנה נכשלה CalamaresPython::Helper Unknown exception type טיפוס חריגה ×ינו מוכר unparseable Python error שגי×ת Python ×œ× × ×™×ª× ×ª לניתוח unparseable Python traceback עקבה ל×חור של Python ×œ× × ×™×ª× ×ª לניתוח Unfetchable Python error. שגי×ת Python ×œ× × ×™×ª× ×ª ל×חזור. CalamaresUtils Install log posted to: %1 יומן ההתקנה ×¤×•×¨×¡× ×‘×›×ª×•×‘×ª: %1 CalamaresWindow %1 Setup Program תכנית התקנת %1 %1 Installer ×שף התקנה של %1 Show debug information הצגת מידע ניפוי שגי×ות CheckerContainer Gathering system information... × ×סף מידע על המערכת… ChoicePage Form Form After: ל×חר: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>הגדרת מחיצות ב×ופן ידני</strong><br/>ניתן ליצור ×ו לשנות ×ת גודל המחיצות בעצמך. Boot loader location: ×ž×™×§×•× ×ž× ×”×œ ×תחול המערכת: Select storage de&vice: בחירת התקן ×&חסון: Current: נוכחי: Reuse %1 as home partition for %2. להשתמש ב־%1 כמחיצת הבית (home) עבור %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>ר×שית יש לבחור מחיצה לכיווץ, ל×חר מכן לגרור ×ת הסרגל התחתון כדי לשנות ×ת גודלה</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 תכווץ לכדי %2MiB ותיווצר מחיצה חדשה בגודל %3MiB עבור %4. <strong>Select a partition to install on</strong> <strong>× × ×œ×‘×—×•×¨ מחיצה כדי להתקין עליה</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. במערכת זו ×œ× × ×ž×¦××” מחיצת מערכת EFI. × × ×œ×—×–×•×¨ ולהשתמש ביצירת מחיצות ב×ופן ידני כדי להגדיר ×ת %1. The EFI system partition at %1 will be used for starting %2. מחיצת מערכת ×”Ö¾EFI שב־%1 תשמש עבור טעינת %2. EFI system partition: מחיצת מערכת EFI: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. ×œ× × ×ž×¦××” מערכת הפעלה על התקן ×חסון ×–×”. מה ברצונך לעשות?<br/> ניתן לסקור ול×שר ×ת בחירתך לפני ×©×©×™× ×•×™×™× ×™×ª×‘×¦×¢×• על התקן ×”×חסון. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>מחיקת כונן</strong><br/> פעולה זו <font color="red">תמחק</font> ×ת כל המידע השמור על התקן ×”×חסון הנבחר. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. בהתקן ×חסון ×–×” נמצ××” %1. מה ברצונך לעשות?<br/> ניתן לסקור ול×שר ×ת בחירתך לפני ×©×©×™× ×•×™×™× ×™×ª×‘×¦×¢×• על התקן ×”×חסון. No Swap בלי החלפה Reuse Swap שימוש מחדש בהחלפה Swap (no Hibernate) החלפה (×œ×œ× ×ª×¨×“×ž×ª) Swap (with Hibernate) החלפה (×¢× ×ª×¨×“×ž×ª) Swap to file החלפה לקובץ <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>התקנה לצד</strong><br/> ×שף ההתקנה יכווץ מחיצה כדי לפנות ×ž×§×•× ×œ×˜×•×‘×ª %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>החלפת מחיצה</strong><br/> ביצוע החלפה של המחיצה ב־%1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. כבר קיימת מערכת הפעלה על התקן ×”×חסון ×”×–×”. כיצד להמשיך?<br/> ניתן לסקור ול×שר ×ת בחירתך לפני ×©×©×™× ×•×™×™× ×™×ª×‘×¦×¢×• על התקן ×”×חסון. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. ישנן מגוון מערכות הפעלה על התקן ×חסון ×–×”. ×יך להמשיך? <br/>ניתן לסקור ול×שר ×ת בחירתך לפני ×©×©×™× ×•×™×™× ×™×ª×‘×¦×¢×• על התקן ×”×חסון. ClearMountsJob Clear mounts for partitioning operations on %1 מחיקת נקודות עיגון עבור פעולות חלוקה למחיצות על %1. Clearing mounts for partitioning operations on %1. מתבצעת מחיקה של נקודות עיגון לטובת פעולות חלוקה למחיצות על %1. Cleared all mounts for %1 כל נקודות העיגון על %1 נמחקו. ClearTempMountsJob Clear all temporary mounts. מחיקת כל נקודות העיגון הזמניות. Clearing all temporary mounts. מבצע מחיקה של כל נקודות העיגון הזמניות. Cannot get list of temporary mounts. ×œ× × ×™×ª×Ÿ לשלוף רשימה של כל נקודות העיגון הזמניות. Cleared all temporary mounts. בוצעה מחיקה של כל נקודות העיגון הזמניות. CommandList Could not run command. ×œ× × ×™×ª×Ÿ להריץ ×ת הפקודה. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. הפקודה פועלת בסביבת המ×רח ועליה לדעת מה נתיב השורש, ×ך ×œ× ×¦×•×™×Ÿ rootMountPoint. The command needs to know the user's name, but no username is defined. הפקודה צריכה לדעת מה ×©× ×”×ž×©×ª×ž×©, ×ך ×œ× ×”×•×’×“×¨ ×©× ×ž×©×ª×ž×©. ContextualProcessJob Contextual Processes Job משימת תהליכי הקשר CreatePartitionDialog Create a Partition יצירת מחיצה MiB MiB Partition &Type: &סוג מחיצה: &Primary &ר×שי E&xtended מ&ורחב Fi&le System: מ&ערכת ×§×‘×¦×™× LVM LV name ×©× ×›×¨×š לוגי במנהל ×”×›×¨×›×™× ×”×œ×•×’×™×™× Flags: סימוני×: &Mount Point: נקודת &עיגון: Si&ze: גו&דל: En&crypt ×”&צפנה Logical לוגי Primary ר×שי GPT GPT Mountpoint already in use. Please select another one. נקודת העיגון בשימוש. × × ×œ×‘×—×•×¨ בנקודת עיגון ×חרת. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. יצירת מחיצה חדשה בגודל %2MiB על גבי %4 (%3) ×¢× ×ž×¢×¨×›×ª ×”×§×‘×¦×™× %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. יצירת מחיצה חדשה בגודל <strong>%2MiB</strong> על גבי <strong>%4</strong> (%3) ×¢× ×ž×¢×¨×›×ª ×”×§×‘×¦×™× <strong>%1</strong>. Creating new %1 partition on %2. מוגדרת מחיצת %1 חדשה על %2. The installer failed to create partition on disk '%1'. ×שף ההתקנה נכשל ביצירת מחיצה על הכונן ‚%1’. CreatePartitionTableDialog Create Partition Table יצירת טבלת מחיצות Creating a new partition table will delete all existing data on the disk. יצירת טבלת מחיצות חדשה תמחק ×ת כל המידע ×”×§×™×™× ×¢×œ הכונן. What kind of partition table do you want to create? ××™×–×” סוג של טבלת מחיצות ברצונך ליצור? Master Boot Record (MBR) Master Boot Record (MBR) GUID Partition Table (GPT) GUID Partition Table (GPT) CreatePartitionTableJob Create new %1 partition table on %2. יצירת טבלת מחיצות חדשה מסוג %1 על %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). יצירת טבלת מחיצות חדשה מסוג <strong>%1</strong> על <strong>%2</strong> (%3). Creating new %1 partition table on %2. נוצרת טבלת מחיצות חדשה מסוג %1 על %2. The installer failed to create a partition table on %1. ×שף ההתקנה נכשל בעת יצירת טבלת המחיצות על %1. CreateUserJob Create user %1 יצירת משתמש %1 Create user <strong>%1</strong>. יצירת משתמש <strong>%1</strong>. Creating user %1. נוצר משתמש %1. Sudoers dir is not writable. תיקיית מנהלי המערכת ×œ× × ×™×ª× ×ª לכתיבה. Cannot create sudoers file for writing. ×œ× × ×™×ª×Ÿ ליצור ×ת קובץ מנהלי המערכת לכתיבה. Cannot chmod sudoers file. ×œ× × ×™×ª×Ÿ לשנות ×ת מ×פייני קובץ מנהלי המערכת. Cannot open groups file for reading. ×œ× × ×™×ª×Ÿ לפתוח ×ת קובץ הקבוצות לקרי××”. CreateVolumeGroupDialog Create Volume Group יצירת קבוצת ×›×¨×›×™× CreateVolumeGroupJob Create new volume group named %1. יצירת קבוצת ×›×¨×›×™× ×—×“×©×” ×‘×©× %1. Create new volume group named <strong>%1</strong>. יצירת קבוצת ×›×¨×›×™× ×—×“×©×” ×‘×©× <strong>%1</strong>. Creating new volume group named %1. נוצרת קבוצת ×›×¨×›×™× ×—×“×©×” ×‘×©× %1. The installer failed to create a volume group named '%1'. ×שף ההתקנה נכשל ביצירת קבוצת ×›×¨×›×™× ×‘×©× â€š%1’. DeactivateVolumeGroupJob Deactivate volume group named %1. השבתת קבוצת ×›×¨×›×™× ×‘×©× %1. Deactivate volume group named <strong>%1</strong>. השבתת קבוצת ×›×¨×›×™× ×‘×©× <strong>%1</strong>. The installer failed to deactivate a volume group named %1. ×שף ההתקנה נכשל בהשבתת קבוצת ×›×¨×›×™× ×‘×©× %1. DeletePartitionJob Delete partition %1. מחיקת המחיצה %1. Delete partition <strong>%1</strong>. מחק ×ת מחיצה <strong>%1</strong>. Deleting partition %1. מבצע מחיקה של מחיצה %1. The installer failed to delete partition %1. ×שף ההתקנה נכשל בעת מחיקת מחיצה %1. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. סוג <strong>טבלת המחיצות</strong> על התקן ×”×חסון הנבחר.<br><br> הדרך היחידה לשנות ×ת סוג טבלת המחיצות ×”×™× ×œ×ž×—×•×§ וליצור מחדש ×ת טבלת המחיצות, ×שר דורסת ×ת כל המידע ×”×§×™×™× ×¢×œ התקן ×”×חסון.<br> ×שף ההתקנה ישמור ×ת טבלת המחיצות הקיימת ××œ× ×× ×›×Ÿ תבחר ×חרת במפורש.<br> במידה ו×ינך בטוח, במערכות מודרניות, GPT ×”×•× ×”×¡×•×’ המועדף. This device has a <strong>%1</strong> partition table. על התקן ×–×” קיימת טבלת מחיצות <strong>%1</strong>. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. זהו התקן מסוג <strong>loop</strong>.<br><br> זהו התקן מדמה ×œ×œ× ×˜×‘×œ×ª מחיצות ×שר מ×פשר גישה לקובץ כהתקן בלוק. תצורה מסוג ×–×” בדרך כלל תכיל מערכת ×§×‘×¦×™× ×™×—×™×“×”. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. ×שף ההתקנה <strong>×ינו יכול לזהות ×ת טבלת המחיצות</strong> על התקן ×”×חסון הנבחר.<br><br> ההתקן הנבחר ×œ× ×ž×›×™×œ טבלת מחיצות, ×ו שטבלת המחיצות הקיימת הושחתה ×ו שסוג הטבלה ×ינו מוכר.<br> ×שף התקנה ×–×” יכול ליצור טבלת מחיצות חדשה עבורך ×וטומטית ×ו בדף הגדרת מחיצות ב×ופן ידני. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br> זהו סוג טבלת מחיצות מועדף במערכות מודרניות, ×שר מ×ותחלות ממחיצת טעינת מערכת <strong>EFI</strong>. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. <br><br>סוג ×–×” של טבלת מחיצות מומלץ לשימוש על מערכות ישנות ×שר מ×ותחלות מסביבת טעינה <strong>BIOS</strong>. ברוב ×”×ž×§×¨×™× ×”×חרי×, GPT מומלץ לשימוש.<br><br><strong>×זהרה:</strong> תקן טבלת המחיצות של MBR מיושן מתקופת MS-DOS.<br> ניתן ליצור ×ך ורק 4 מחיצות <em>ר×שיות</em>, מתוכן, ×חת יכולה להיות מוגדרת כמחיצה <em>מורחבת</em>, ×שר יכולה להכיל מחיצות <em>לוגיות</em>. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1 - (%2) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 ×¨×©×•× ×”×’×“×¨×•×ª הצפנה LUKS עבור Dracut ×ל %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted דלג ×¨×™×©×•× ×”×’×“×¨×•×ª הצפנה LUKS עבור Dracut: מחיצת "/" ×œ× ×ª×•×¦×¤×Ÿ. Failed to open %1 הפתיחה של %1 נכשלה. DummyCppJob Dummy C++ Job משימת דמה של C++‎ EditExistingPartitionDialog Edit Existing Partition עריכת מחיצה קיימת Content: תוכן: &Keep לה&ש×יר Format ×תחול Warning: Formatting the partition will erase all existing data. ×זהרה: ×תחול המחיצה ימחק ×ת כל המידע ×”×§×™×™×. &Mount Point: &נקודת עיגון: Si&ze: גו&דל: MiB MiB Fi&le System: מ&ערכת קבצי×: Flags: סימוני×: Mountpoint already in use. Please select another one. נקודת העיגון בשימוש. × × ×œ×‘×—×•×¨ בנקודת עיגון ×חרת. EncryptWidget Form Form En&crypt system ×”&צפנת המערכת Passphrase מילת צופן Confirm passphrase ×ישור מילת צופן Please enter the same passphrase in both boxes. × × ×œ×”×§×œ×™×“ ×ת ×ותה מילת הצופן בשתי התיבות. FillGlobalStorageJob Set partition information הגדרת מידע עבור המחיצה Install %1 on <strong>new</strong> %2 system partition. התקנת %1 על מחיצת מערכת <strong>חדשה</strong> מסוג %2. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. הגדרת מחיצת מערכת <strong>חדשה</strong> מסוג %2 ×¢× × ×§×•×“×ª העיגון <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. התקנת %2 על מחיצת מערכת <strong>%1</strong> מסוג %3. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. התקן מחיצה מסוג %3 <strong>%1</strong> ×¢× × ×§×•×“×ª העיגון <strong>%2</strong>. Install boot loader on <strong>%1</strong>. התקנת מנהל ×תחול מערכת על <strong>%1</strong>. Setting up mount points. נקודות עיגון מוגדרות. FinishedPage Form Form <Restart checkbox tooltip> <חלונית העצה של סימון תיבת ההפעלה מחדש> &Restart now ×”&פעלה מחדש כעת <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>הכול הושל×.</h1><br/>ההתקנה של %1 למחשב שלך הושלמה.<br/>מעתה ית×פשר לך להשתמש במערכת החדשה שלך. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <html><head/><body><p>×× ×ª×™×‘×” זו מסומנת, המערכת שלך תופעל מחדש מיידית ×¢× ×”×œ×—×™×¦×” על <span style="font-style:italic;">סיו×</span> ×ו ×¢× ×¡×’×™×¨×ª תכנית ההתקנה.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>תהליך ההתקנה הסתיי×.</h1><br/>%1 הותקן על המחשב שלך.<br/> כעת ניתן ל×תחל ×ת המחשב ×ל תוך המערכת החדשה שהותקנה, ×ו להמשיך להשתמש בסביבה הנוכחית של %2. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <html><head/><body><p>×× ×ª×™×‘×” זו מסומנת, המערכת שלך תופעל מחדש מיידית ×¢× ×”×œ×—×™×¦×” על <span style="font-style:italic;">סיו×</span> ×ו ×¢× ×¡×’×™×¨×ª תכנית ההתקנה.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>ההתקנה נכשלה</h1><br/>ההתקנה של %1 במחשבך ×œ× ×”×•×©×œ×ž×”.<br/>הודעת השגי××” הייתה: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>ההתקנה נכשלה</h1><br/>%1 ×œ× ×”×•×ª×§×Ÿ על מחשבך.<br/> הודעת השגי××”: %2. FinishedViewStep Finish ×¡×™×•× Setup Complete ההתקנה הושלמה Installation Complete ההתקנה הושלמה The setup of %1 is complete. התקנת %1 הושלמה. The installation of %1 is complete. ההתקנה של %1 הושלמה. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. ל×תחל ×ת המחיצה %1 (מערכת קבצי×: %2, גודל: %3 MiB) על גבי %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. ×תחול מחיצה בגודל <strong>%3MiB</strong> בנתיב <strong>%1</strong> ×¢× ×ž×¢×¨×›×ª ×”×§×‘×¦×™× <strong>%2</strong>. Formatting partition %1 with file system %2. מ×תחל מחיצה %1 ×¢× ×ž×¢×¨×›×ª ×§×‘×¦×™× %2. The installer failed to format partition %1 on disk '%2'. ×שף ההתקנה נכשל בעת ×תחול המחיצה %1 על הכונן ‚%2’. GeneralRequirements has at least %1 GiB available drive space יש לפחות %1 GiB ×¤× ×•×™×™× ×‘×›×•× ×Ÿ There is not enough drive space. At least %1 GiB is required. נפח ×”×חסון ×œ× ×ž×¡×¤×™×§. × ×“×¨×©×™× %1 GiB לפחות. has at least %1 GiB working memory יש לפחות %1 GiB זיכרון לעבודה The system does not have enough working memory. At least %1 GiB is required. כמות הזיכרון הנדרשת לפעולה ××™× ×” מספיקה. × ×“×¨×©×™× %1 GiB לפחות. is plugged in to a power source מחובר לספק חשמל חיצוני The system is not plugged in to a power source. המערכת ×œ× ×ž×—×•×‘×¨×ª לספק חשמל חיצוני. is connected to the Internet מחובר ל×ינטרנט The system is not connected to the Internet. המערכת ×œ× ×ž×—×•×‘×¨×ª ל×ינטרנט. is running the installer as an administrator (root) ההתקנה מופעלת תחת חשבון מורשה ניהול (root) The setup program is not running with administrator rights. תכנית ההתקנה ××™× ×” פועלת ×¢× ×”×¨×©×ות ניהול. The installer is not running with administrator rights. ×שף ההתקנה ×œ× ×¨×¥ ×¢× ×”×¨×©×ות מנהל. has a screen large enough to show the whole installer יש מסך מספיק גדול כדי להציג ×ת כל תכנית ההתקנה The screen is too small to display the setup program. המסך קטן מכדי להציג ×ת תכנית ההתקנה. The screen is too small to display the installer. גודל המסך קטן מכדי להציג ×ת תכנית ההתקנה. HostInfoJob Collecting information about your machine. × ××¡×¤×™× × ×ª×•× ×™× ×¢×œ המכונה שלך. IDJob OEM Batch Identifier מזהה מחזור משווק Could not create directories <code>%1</code>. ×œ× × ×™×ª×Ÿ ליצור תיקיות <code>%1</code>. Could not open file <code>%1</code>. ×œ× × ×™×ª×Ÿ לפתוח קובץ <code>%1</code>. Could not write to file <code>%1</code>. ×œ× × ×™×ª×Ÿ לכתוב לקובץ <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. נוצר initramfs ×¢× mkinitcpio. InitramfsJob Creating initramfs. נוצר initramfs. InteractiveTerminalPage Konsole not installed Konsole ×œ× ×ž×•×ª×§×Ÿ Please install KDE Konsole and try again! × × ×œ×”×ª×§×™×Ÿ ×ת KDE Konsole ולנסות שוב! Executing script: &nbsp;<code>%1</code> הסקריפט מופעל: &nbsp; <code>%1</code> InteractiveTerminalViewStep Script סקריפט KeyboardPage Set keyboard model to %1.<br/> הגדרת ×“×’× ×”×ž×§×œ×“×ª בתור %1.<br/> Set keyboard layout to %1/%2. הגדרת פריסת לוח ×”×ž×§×©×™× ×‘×ª×•×¨ %1/%2. KeyboardViewStep Keyboard מקלדת LCLocaleDialog System locale setting הגדרות ×ž×™×§×•× ×”×ž×¢×¨×›×ª The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. הגדרת ×ž×™×§×•× ×”×ž×¢×¨×›×ª משפיעה על השפה וקידוד ×”×ª×•×•×™× ×©×œ חלק מרכיבי ממשקי שורת פקודה למשתמש. <br/> ההגדרה הנוכחית ×”×™× <strong>%1</strong>. &Cancel &ביטול &OK &×ישור LicensePage Form Form <h1>License Agreement</h1> <h1>×”×¡×›× ×¨×™×©×•×™</h1> I accept the terms and conditions above. התנ××™× ×•×”×”×’×‘×œ×•×ª שלמעלה ×ž×§×•×‘×œ×™× ×¢×œ×™. Please review the End User License Agreements (EULAs). × × ×œ×¡×§×•×¨ בקפידה ×ת הסכמי רישוי משתמש הקצה (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. תהליך התקנה ×–×” יתקין תכנה קניינית שכפופה לתנ××™ רישוי. If you do not agree with the terms, the setup procedure cannot continue. ×× ×”×ª× ××™× ×”×לה ××™× × ×ž×§×•×‘×œ×™× ×¢×œ×™×š, ××™ ×פשר להמשיך בתהליך ההתקנה. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. תהליך התקנה ×–×” יכול להתקין תכנה קניינית שכפופה לתנ××™ רישוי כדי לספק תכונות נוספות ולשפר ×ת חוויית המשתמש. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. ×× ×ª× ××™× ×לו ××™× × ×ž×§×•×‘×œ×™× ×¢×œ×™×š, ×œ× ×ª×•×ª×§×Ÿ תכנה קניינית וייעשה שימוש בחלופות בקוד פתוח במקו×. LicenseViewStep License רישיון LicenseWidget URL: %1 כתובת: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>התקן %1</strong><br/> מ×ת %2 <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>התקן תצוגה %1</strong><br/><font color="Grey"> מ×ת %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>תוסף לדפדפן %1</strong><br/><font color="Grey"> מ×ת %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>קידוד %1</strong><br/><font color="Grey"> מ×ת %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>חבילה %1</strong><br/><font color="Grey"> מ×ת %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">מ×ת %2</font> File: %1 קובץ: %1 Show the license text להציג ×ת טקסט הרישיון Open license agreement in browser. לפתוח ×ת ×”×¡×›× ×”×¨×™×©×•×™ בדפדפן. Hide license text הסתרת מלל הרישיון LocalePage The system language will be set to %1. שפת המערכת תוגדר להיות %1. The numbers and dates locale will be set to %1. תבנית של ×”×ž×¡×¤×¨×™× ×•×”×ª××¨×™×›×™× ×©×œ ×”×ž×™×§×•× ×™×•×’×“×¨×• להיות %1. Region: ×יזור: Zone: מיקו×: &Change... ×”&חלפה… Set timezone to %1/%2.<br/> הגדרת ×זור זמן בתור %1/%2.<br/> LocaleViewStep Location ×ž×™×§×•× LuksBootKeyFileJob Configuring LUKS key file. קובץ מפתח ×”Ö¾LUKS מוגדר. No partitions are defined. ×œ× ×”×•×’×“×¨×• מחיצות. Encrypted rootfs setup error שגי×ת התקנת מחיצת שורש מוצפנת Root partition %1 is LUKS but no passphrase has been set. מחיצת השורש %1 ×”×™× LUKS ×בל ×œ× ×”×•×’×“×¨×” מילת צופן. Could not create LUKS key file for root partition %1. ×œ× × ×™×ª×Ÿ ליצור קובץ מפתח LUKS למחיצת השורש %1. Could not configure LUKS key file on partition %1. ×œ× × ×™×ª×Ÿ להגדיר קובץ מפתח LUKS למחיצה %1. MachineIdJob Generate machine-id. לייצר מספר סידורי של המכונה. Configuration Error שגי×ת הגדרות No root mount point is set for MachineId. ×œ× ×”×•×’×“×¨×” נקודת עגינת שורש עבור מזהה מכונה (MachineId). NetInstallPage Name ×©× Description תי×ור Network Installation. (Disabled: Unable to fetch package lists, check your network connection) התקנה מהרשת. (מושבתת: ×œ× × ×™×ª×Ÿ לקבל רשימות של חבילות תכנה, × × ×œ×‘×“×•×§ ×ת החיבור לרשת) Network Installation. (Disabled: Received invalid groups data) התקנה מהרשת. (מושבתת: המידע שהתקבל על קבוצות שגוי) Network Installation. (Disabled: Incorrect configuration) התקנת רשת. (מושבתת: תצורה שגויה) NetInstallViewStep Package selection בחירת חבילות Office software תכנה של ×›×œ×™× ×ž×©×¨×“×™×™× Office package חבילת ×›×œ×™× ×ž×©×¨×“×™×™× Browser software תכנה של דפדפן Browser package חבילת דפדפן Web browser דפדפן Kernel ליבה Services ×©×™×¨×•×ª×™× Login כניסה Desktop שולחן עבודה Applications ×™×™×©×•×ž×™× NotesQmlViewStep Notes הערות OEMPage Ba&tch: מ&חזור: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>× × ×œ×”×§×œ×™×“ ×›×ן מזהה מחזור למשווק. ערך ×–×” ×™×וחסן במערכת היעד.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>הגדרות משווק</h1><p>Calamares ישתמש בהגדרות המשווק בעת הגדרת מערכת היעד.</p></body></html> OEMViewStep OEM Configuration הגדרות משווק Set the OEM Batch Identifier to <code>%1</code>. הגדרת מזהה מחזור למשווק לערך <code>%1</code>. PWQ Password is too short הססמה קצרה מדי Password is too long הססמה ×רוכה מדי Password is too weak הססמה חלשה מדי Memory allocation error when setting '%1' שגי×ת הקצ×ת זיכרון בעת הגדרת ‚%1’ Memory allocation error שגי×ת הקצ×ת זיכרון The password is the same as the old one הססמה ×–×”×” לישנה The password is a palindrome הססמה ×”×™× ×¤×œ×™× ×“×¨×•× The password differs with case changes only מורכבות הססמה טמונה בשינויי סוגי ×ותיות בלבד The password is too similar to the old one הססמה דומה מדי לישנה The password contains the user name in some form הססמה מכילה ×ת ×©× ×”×ž×©×ª×ž×© בצורה כלשהי The password contains words from the real name of the user in some form הססמה מכילה ×ž×™×œ×™× ×ž×”×©× ×”×מתי של המשתמש בצורה זו ×ו ×חרת The password contains forbidden words in some form הססמה מכילה ×ž×™×œ×™× ×סורות בצורה כלשהי The password contains less than %1 digits הססמה מכילה פחות מ־%1 ספרות The password contains too few digits הססמה ×œ× ×ž×›×™×œ×” מספיק ספרות The password contains less than %1 uppercase letters הססמה מכילה פחות מ־%1 ×ותיות גדולות The password contains too few uppercase letters הססמה מכילה מעט מדי ×ותיות גדולות The password contains less than %1 lowercase letters הססמה מכילה פחות מ־%1 ×ותיות קטנות The password contains too few lowercase letters הססמה ××™× ×” מכילה מספיק ×ותיות קטנות The password contains less than %1 non-alphanumeric characters הססמה מכילה פחות מ־%1 ×ª×•×•×™× ×©××™× × ×לפ×× ×•×ž×¨×™×™× The password contains too few non-alphanumeric characters הססמה מכילה מעט מדי ×ª×•×•×™× ×©××™× × ×לפ×× ×•×ž×¨×™×™× The password is shorter than %1 characters ×ורך הססמה קצר מ־%1 ×ª×•×•×™× The password is too short הססמה קצרה מדי The password is just rotated old one הססמה ×”×™× ×¤×©×•×˜ סיכול של ססמה קודמת The password contains less than %1 character classes הססמה מכילה פחות מ־%1 סוגי ×ª×•×•×™× The password does not contain enough character classes הססמה ×œ× ×ž×›×™×œ×” מספיק סוגי ×ª×•×•×™× The password contains more than %1 same characters consecutively הססמה מכילה יותר מ־%1 ×ª×•×•×™× ×–×”×™× ×‘×¨×¦×£ The password contains too many same characters consecutively הססמה מכילה יותר מדי ×ª×•×•×™× ×–×”×™× ×‘×¨×¦×£ The password contains more than %1 characters of the same class consecutively הססמה מכילה יותר מ־%1 ×ª×•×•×™× ×ž×ותו הסוג ברצף The password contains too many characters of the same class consecutively הססמה מכילה יותר מדי ×ª×•×•×™× ×ž×ותו הסוג ברצף The password contains monotonic sequence longer than %1 characters הססמה מכילה רצף ×ª×•×•×™× ×ž×•× ×•×˜×•× ×™ של יותר מ־%1 ×ª×•×•×™× The password contains too long of a monotonic character sequence הססמה מכילה רצף ×ª×•×•×™× ×ž×•× ×•×˜×•× ×™ ×רוך מדי No password supplied ×œ× ×¦×•×™× ×” ססמה Cannot obtain random numbers from the RNG device ×œ× × ×™×ª×Ÿ לקבל ×ž×¡×¤×¨×™× ×קר××™×™× ×ž×”×ª×§×Ÿ ×”Ö¾RNG Password generation failed - required entropy too low for settings יצירת הססמה נכשלה - רמת ×”×קר×יות הנדרשת נמוכה ביחס להגדרות The password fails the dictionary check - %1 הססמה נכשלה במבחן המילון - %1 The password fails the dictionary check הססמה נכשלה במבחן המילון Unknown setting - %1 הגדרה ×œ× ×ž×•×›×¨×ª - %1 Unknown setting הגדרה ×œ× ×ž×•×›×¨×ª Bad integer value of setting - %1 ערך מספרי שגוי להגדרה - %1 Bad integer value ערך מספרי שגוי Setting %1 is not of integer type ההגדרה %1 ××™× ×” מסוג מספר ×©×œ× Setting is not of integer type ההגדרה ××™× ×” מסוג מספר ×©×œ× Setting %1 is not of string type ההגדרה %1 ××™× ×” מסוג מחרוזת Setting is not of string type ההגדרה ××™× ×” מסוג מחרוזת Opening the configuration file failed פתיחת קובץ התצורה נכשלה The configuration file is malformed קובץ התצורה ×¤×’×•× Fatal failure כשל מכריע Unknown error שגי××” ×œ× ×™×“×•×¢×” Password is empty הססמה ריקה PackageChooserPage Form Form Product Name ×©× ×”×ž×•×¦×¨ TextLabel תווית טקסט Long Product Description תי×ור ×רוך של המוצר Package Selection בחירת חבילות Please pick a product from the list. The selected product will be installed. × × ×œ×‘×—×•×¨ במוצר מהרשימה. המוצר הנבחר יותקן. PackageChooserViewStep Packages חבילות Page_Keyboard Form Form Keyboard Model: ×“×’× ×ž×§×œ×“×ª: Type here to test your keyboard ניתן להקליד ×›×ן כדי לבדוק ×ת המקלדת שלך Page_UserSetup Form Form What is your name? מה שמך? What name do you want to use to log in? ××™×–×” ×©× ×‘×¨×¦×•× ×š שישמש ×ותך לכניסה? Choose a password to keep your account safe. × × ×œ×‘×—×•×¨ ססמה להגנה על חשבונך. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>יש להקליד ×ת ×ותה הססמה ×¤×¢×ž×™×™× ×›×“×™ שניתן ×™×”×™×” לבדוק שגי×ות הקלדה. ססמה טובה ×מורה להכיל שילוב של ×ותיות, ×ž×¡×¤×¨×™× ×•×¡×™×ž× ×™ פיסוק, להיות ב×ורך של שמונה ×ª×•×•×™× ×œ×¤×—×•×ª ויש להחליף ×ותה במרווחי זמן קבועי×.</small> What is the name of this computer? מהו ×”×©× ×©×œ המחשב ×”×–×”? Your Full Name ×©× ×”×ž×œ× login כניסה <small>This name will be used if you make the computer visible to others on a network.</small> <small>×‘×©× ×–×” ייעשה שימוש לטובת זיהוי מול ×ž×—×©×‘×™× ××—×¨×™× ×‘×¨×©×ª במידת הצורך.</small> Computer Name ×©× ×”×ž×—×©×‘ Password ססמה Repeat Password חזרה על הססמה When this box is checked, password-strength checking is done and you will not be able to use a weak password. כשתיבה זו מסומנת, בדיקת ×ורך ססמה מתבצעת ×•×œ× ×ª×”×™×” לך ×פשרות להשתמש בססמה חלשה. Require strong passwords. לדרוש ססמ×ות חזקות. Log in automatically without asking for the password. כניסה ×וטומטית מבלי לבקש ססמה. Use the same password for the administrator account. להשתמש ב×ותה הססמה עבור חשבון המנהל. Choose a password for the administrator account. בחירת ססמה עבור חשבון המנהל. <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>עליך להקליד ×ת ×ותה הססמה ×¤×¢×ž×™×™× ×›×“×™ ל×פשר זיהוי של שגי×ות הקלדה.</small> PartitionLabelsView Root מערכת הפעלה Root Home בית Home Boot טעינה Boot EFI system מערכת EFI Swap דפדוף Swap New partition for %1 מחיצה חדשה עבור %1 New partition מחיצה חדשה %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space זכרון פנוי New partition מחיצה חדשה Name ×©× File System מערכת ×§×‘×¦×™× Mount Point נקודת עיגון Size גודל PartitionPage Form Form Storage de&vice: ×”&תקן זיכרון: &Revert All Changes &ביטול כל ×”×©×™× ×•×™×™× New Partition &Table &טבלת מחיצות חדשה Cre&ate ×™&צירה &Edit &עריכה &Delete מ&×—×™×§×” New Volume Group קבוצת ×›×¨×›×™× ×—×“×©×” Resize Volume Group שינוי גודל קבוצת ×›×¨×›×™× Deactivate Volume Group השבתת קבוצת ×›×¨×›×™× Remove Volume Group הסרת קבוצת ×›×¨×›×™× I&nstall boot loader on: הת&קנת מנהל ×תחול על: Are you sure you want to create a new partition table on %1? ליצור טבלת מחיצות חדשה על %1? Can not create new partition ×œ× × ×™×ª×Ÿ ליצור מחיצה חדשה The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. לטבלת המחיצות על %1 כבר יש %2 מחיצות עיקריות ו××™ ×פשר להוסיף עוד ×›×לה. × × ×œ×”×¡×™×¨ מחיצה עיקרית ×חת ולהוסיף מחיצה מורחבת במקו×. PartitionViewStep Gathering system information... × ×סף מידע על המערכת… Partitions מחיצות Install %1 <strong>alongside</strong> another operating system. להתקין ×ת %1 <strong>לצד</strong> מערכת הפעלה ×חרת. <strong>Erase</strong> disk and install %1. <strong>למחוק</strong> ×ת הכונן ולהתקין ×ת %1. <strong>Replace</strong> a partition with %1. <strong>החלפת</strong> מחיצה ×¢× %1. <strong>Manual</strong> partitioning. להגדיר מחיצות ב×ופן <strong>ידני</strong>. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). להתקין ×ת %1 <strong>לצד</strong> מערכת הפעלה ×חרת על כונן <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>למחוק</strong> ×ת הכונן <strong>%2</strong> (%3) ולהתקין ×ת %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>החלפת</strong> מחיצה על כונן <strong>%2</strong> (%3) ב־%1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). חלוקה למחיצות ב×ופן <strong>ידני</strong> על כונן <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) כונן <strong>%1</strong> (%2) Current: נוכחי: After: ל×חר: No EFI system partition configured ×œ× ×”×•×’×“×¨×” מחיצת מערכת EFI An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. מחיצת מערכת EFI נדרשת כדי להפעיל ×ת %1.<br/><br/> כדי להגדיר מחיצת מערכת EFI, עליך לחזור ולבחור ×ו ליצור מערכת ×§×‘×¦×™× ×ž×¡×•×’ FAT32 ×¢× ×¡×™×ž×•×Ÿ <strong>esp</strong> פעיל ×•×¢× × ×§×•×“×ª עיגון <strong>%2</strong>.<br/><br/> ניתן להמשיך ×œ×œ× ×”×’×“×¨×ª מחיצת מערכת EFI ×ך טעינת המערכת עשויה להיכשל. EFI system partition flag not set ×œ× ×ž×•×’×“×¨ סימון מחיצת מערכת EFI An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. לצורך הפעלת %1 נדרשת מחיצת מערכת EFI.<br/><br/> הוגדרה מחיצה ×¢× × ×§×•×“×ª עיגון <strong>%2</strong> ×ך ×œ× ×”×•×’×“×¨ סימון <strong>esp</strong>.<br/> כדי לסמן ×ת המחיצה, עליך לחזור ולערוך ×ת המחיצה.<br/><br/> ניתן להמשיך ×œ×œ× ×”×•×¡×¤×ª הסימון ×ך טעינת המערכת עשויה להיכשל. Boot partition not encrypted מחיצת טעינת המערכת (Boot) ××™× ×” מוצפנת. A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. מחיצת טעינה, boot, נפרדת הוגדרה יחד ×¢× ×ž×—×™×¦×ª מערכת ההפעלה, root, מוצפנת, ×ך מחיצת הטעינה ×œ× ×”×•×¦×¤× ×”.<br/><br/> ישנן השלכות בטיחותיות ×¢× ×”×ª×¦×•×¨×” שהוגדרה, מכיוון שקבצי מערכת ×—×©×•×‘×™× × ×©×ž×¨×™× ×¢×œ מחיצה ×œ× ×ž×•×¦×¤× ×ª.<br/>תוכל להמשיך ×× ×ª×¨×¦×”, ×ך שחרור מערכת ×”×§×‘×¦×™× ×™×ª×¨×—×© מ×וחר יותר כחלק מטעינת המערכת.<br/>בכדי להצפין ×ת מחיצת הטעינה, חזור וצור ×ותה מחדש, על ידי בחירה ב <strong>הצפן</strong> בחלונית יצירת המחיצה. has at least one disk device available. יש לפחות התקן כונן ×חד זמין. There are no partitions to install on. ×ין מחיצות להתקין עליהן. PlasmaLnfJob Plasma Look-and-Feel Job משימת מר××” ותחושה של Plasma Could not select KDE Plasma Look-and-Feel package ×œ× × ×™×ª×Ÿ לבחור ×ת חבילת המר××” והתחושה של KDE Plasma. PlasmaLnfPage Form Form Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. × × ×œ×‘×—×•×¨ מר××” ותחושה לשולחן העבודה KDE Plasma. ניתן ×’× ×œ×“×œ×’ על השלב ×”×–×” ולהגדיר ×ת המר××” והתחושה ל×חר ×¡×™×•× ×”×ª×§× ×ª המערכת. לחיצה על בחירת מר××” ותחושה תעניק לך תצוגה מקדימה בזמן ×מת של המר××” והתחושה שנבחרו. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. × × ×œ×‘×—×•×¨ מר××” ותחושה עבור שולחן העבודה KDE Plasma. ניתן ×’× ×œ×“×œ×’ על השלב ×”×–×” ולהגדיר מר××” ותחושה ל×חר הקמת המערכת. בחירה בתצורת מר××” ותחושה תעניק לך תצוגה מקדימה ×—×™×” של ×ותה התצורה. PlasmaLnfViewStep Look-and-Feel מר××” ותחושה PreserveFiles Saving files for later ... ×”×§×‘×¦×™× × ×©×ž×¨×™× ×œ×”×ž×©×šâ€¦ No files configured to save for later. ×œ× ×”×•×’×“×¨×• ×§×‘×¦×™× ×œ×©×ž×™×¨×” בהמשך. Not all of the configured files could be preserved. ×œ× × ×™×ª×Ÿ לשמר ×ת כל ×”×§×‘×¦×™× ×©×”×•×’×“×¨×•. ProcessResult There was no output from the command. ×œ× ×”×™×” פלט מהפקודה. Output: פלט: External command crashed. הפקודה החיצונית נכשלה. Command <i>%1</i> crashed. הפקודה <i>%1</i> קרסה. External command failed to start. הפעלת הפעולה החיצונית נכשלה. Command <i>%1</i> failed to start. הפעלת הפקודה <i>%1</i> נכשלה. Internal error when starting command. שגי××” פנימית בעת הפעלת פקודה. Bad parameters for process job call. ×¤×¨×ž×˜×¨×™× ×œ× ×ª×§×™× ×™× ×¢×‘×•×¨ קרי×ת עיבוד פעולה. External command failed to finish. ×¡×™×•× ×”×¤×§×•×“×” החיצונית נכשל. Command <i>%1</i> failed to finish in %2 seconds. הפקודה <i>%1</i> ×œ× ×”×¡×ª×™×™×ž×” תוך %2 שניות. External command finished with errors. הפקודה החיצונית הסתיימה ×¢× ×©×’×™×ות. Command <i>%1</i> finished with exit code %2. הפקודה <i>%1</i> הסתיימה ×¢× ×§×•×“ היצי××” %2. QObject Default Keyboard Model ×“×’× ×ž×§×œ×“×ª כבררת מחדל Default בררת מחדל unknown ×œ× ×™×“×•×¢ extended מורחבת unformatted ×œ× ×ž×ותחלת swap דפדוף, swap Unpartitioned space or unknown partition table הזכרון ×œ× ×ž×—×•×œ×§ למחיצות ×ו שטבלת המחיצות ××™× ×” מוכרת (no mount point) (×ין נקודת ×¢×’×™× ×”) Requirements checking for module <i>%1</i> is complete. בדיקת הדרישות למודול <i>%1</i> הושלמה. %1 (%2) language[name] (country[name]) %1 (%2) No product ×ין מוצר No description provided. ×œ× ×¡×•×¤×§ תי×ור. File not found הקובץ ×œ× × ×ž×¦× Path <pre>%1</pre> must be an absolute path. הנתיב <pre>%1</pre> חייב להיות נתיב מל×. Could not create new random file <pre>%1</pre>. ×œ× × ×™×ª×Ÿ ליצור קובץ ×קר××™ חדש <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. הסרת קבוצת ×›×¨×›×™× ×‘×©× %1. Remove Volume Group named <strong>%1</strong>. הסרת קבוצת ×›×¨×›×™× ×‘×©× <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ×שף ההתקנה נכשל בהסרת קבוצת ×›×¨×›×™× ×‘×©× â€š%1’. ReplaceWidget Form Form Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. בחר ×ž×™×§×•× ×”×ª×§× ×ª %1.<br/><font color="red">×זהרה: </font> הפעולה תמחק ×ת כל ×”×§×‘×¦×™× ×‘×ž×—×™×¦×” שנבחרה. The selected item does not appear to be a valid partition. הפריט הנבחר ×יננו מחיצה תקינה. %1 cannot be installed on empty space. Please select an existing partition. ×œ× × ×™×ª×Ÿ להתקין ×ת %1 על זכרון ריק. ×× × ×‘×—×¨ מחיצה קיימת. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. ×œ× × ×™×ª×Ÿ להתקין ×ת %1 על מחיצה מורחבת. ×× × ×‘×—×¨ מחיצה ר×שית ×ו לוגית קיימת. %1 cannot be installed on this partition. ×œ× × ×™×ª×Ÿ להתקין ×ת %1 על מחיצה זו. Data partition (%1) מחיצת מידע (%1) Unknown system partition (%1) מחיצת מערכת (%1) ×œ× ×ž×•×›×¨×ª %1 system partition (%2) %1 מחיצת מערכת (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/> גודל המחיצה %1 קטן מדי עבור %2. ×× × ×‘×—×¨ מחיצה ×¢× ×§×™×‘×•×œ×ª בנפח %3 GiB לפחות. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/> מחיצת מערכת EFI ×œ× × ×ž×¦××” ב××£ ×ž×§×•× ×¢×œ המערכת. חזור בבקשה והשתמש ביצירת מחיצות ב×ופן ידני בכדי להגדיר ×ת %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>%1 יותקן על %2. <br/><font color="red">×זהרה: </font>כל המידע ×שר ×§×™×™× ×‘×ž×—×™×¦×” %2 ×™×בד. The EFI system partition at %1 will be used for starting %2. מחיצת מערכת EFI ב %1 תשמש עבור טעינת %2. EFI system partition: מחיצת מערכת EFI: ResizeFSJob Resize Filesystem Job משימת שינוי גודל מערכת ×§×‘×¦×™× Invalid configuration תצורה שגויה The file-system resize job has an invalid configuration and will not run. למשימת שינוי גודל מערכת ×”×§×‘×¦×™× ×™×© תצורה שגויה ×•×”×™× ×œ× ×ª×¤×¢×œ. KPMCore not Available KPMCore ×œ× ×–×ž×™×Ÿ Calamares cannot start KPMCore for the file-system resize job. ל־Calamares ×ין ×פשרות להתחיל ×ת KPMCore עבור משימת שינוי גודל מערכת הקבצי×. Resize Failed שינוי הגודל נכשל The filesystem %1 could not be found in this system, and cannot be resized. ×œ× ×”×™×™×ª×” ×פשרות ×œ×ž×¦×•× ×ת מערכת ×”×§×‘×¦×™× %1 במערכת הזו, לכן ×œ× × ×™×ª×Ÿ לשנות ×ת גודלה. The device %1 could not be found in this system, and cannot be resized. ×œ× ×”×™×™×ª×” ×פשרות ×œ×ž×¦×•× ×ת ההתקן %1 במערכת הזו, לכן ×œ× × ×™×ª×Ÿ לשנות ×ת גודלו. The filesystem %1 cannot be resized. ×œ× × ×™×ª×Ÿ לשנות ×ת גודל מערכת ×”×§×‘×¦×™× %1. The device %1 cannot be resized. ×œ× × ×™×ª×Ÿ לשנות ×ת גודל ההתקן %1. The filesystem %1 must be resized, but cannot. חובה לשנות ×ת גודל מערכת ×”×§×‘×¦×™× %1, ×ך ×œ× × ×™×ª×Ÿ. The device %1 must be resized, but cannot חובה לשנות ×ת גודל ההתקן %1, ×ך ×œ× × ×™×ª×Ÿ. ResizePartitionJob Resize partition %1. שינוי גודל המחיצה %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. שינוי גודל של מחיצה בגודל <strong>%2MiB</strong> בנתיב <strong>%1</strong> לכדי <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. משתנה הגודל של מחיצה %1 בגודל %2MiB לכדי %3MiB. The installer failed to resize partition %1 on disk '%2'. תהליך ההתקנה נכשל בשינוי גודל המחיצה %1 על כונן '%2'. ResizeVolumeGroupDialog Resize Volume Group שינוי גודל קבוצת ×›×¨×›×™× ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. שינוי גודל קבוצת ×›×¨×›×™× ×‘×©× %1 מ־%2 ל־%3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. שינוי גודל קבוצת ×›×¨×›×™× ×‘×©× <strong>%1</strong> מ־<strong>%2</strong> ל־<strong>%3</strong>. The installer failed to resize a volume group named '%1'. ×שף ההתקנה נכשל בשינוי גודל קבוצת ×”×›×¨×›×™× ×‘×©× â€š%1’. ResultsListDialog For best results, please ensure that this computer: לקבלת התוצ×ות הטובות ביותר, × × ×œ×•×•×“× ×›×™ מחשב ×–×”: System requirements דרישות מערכת ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> המחשב ×œ× ×¢×•×ž×“ ברף הדרישות המזערי להתקנת %1. <br/>להתקנה ×ין ×פשרות להמשיך. <a href="#details">פרטי×…</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> המחשב ×œ× ×¢×•×ž×“ ברף דרישות ×”×ž×™× ×™×ž×•× ×œ×”×ª×§× ×ª %1. <br/>ההתקנה ×œ× ×™×›×•×œ×” להמשיך. <a href="#details"> פרטי×...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. המחשב ×œ× ×¢×•×ž×“ בחלק מרף דרישות המזערי להתקנת %1.<br/> ההתקנה יכולה להמשיך, ×ך יתכן ×›×™ חלק מהתכונות יושבתו. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. המחשב ×œ× ×¢×•×ž×“ בחלק מרף דרישות ×”×ž×™× ×™×ž×•× ×œ×”×ª×§× ×ª %1.<br/> ההתקנה יכולה להמשיך, ×ך יתכן ×›×™ חלק מהתכונות יושבתו. This program will ask you some questions and set up %2 on your computer. תכנית זו תש×ל ×ותך מספר ש×לות ותתקין ×ת %2 על המחשב שלך. ScanningDialog Scanning storage devices... התקני ×חסון נסרקי×… Partitioning חלוקה למחיצות SetHostNameJob Set hostname %1 הגדרת ×©× ×ž×רח %1 Set hostname <strong>%1</strong>. הגדרת ×©× ×ž×רח <strong>%1</strong>. Setting hostname %1. ×©× ×”×¢×ž×“×” %1 מוגדר. Internal Error שגי××” פנימית Cannot write hostname to target system כתיבת ×©× ×”×¢×ž×“×” למערכת היעד נכשלה SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 הגדר ×“×’× ×ž×§×œ×“×ª ל %1, פריסת לוח ×ž×§×©×™× ×œ %2-%3 Failed to write keyboard configuration for the virtual console. נכשלה כתיבת הגדרת מקלדת למסוף הוירטו×לי. Failed to write to %1 נכשלה כתיבה ל %1 Failed to write keyboard configuration for X11. נכשלה כתיבת הגדרת מקלדת עבור X11. Failed to write keyboard configuration to existing /etc/default directory. נכשלה כתיבת הגדרת מקלדת לתיקיה קיימת /etc/default. SetPartFlagsJob Set flags on partition %1. הגדר ×¡×™×ž×•× ×™× ×¢×œ מחיצה %1. Set flags on %1MiB %2 partition. הגדרת ×“×’×œ×•× ×™× ×¢×œ מחיצה מסוג %2 בגודל %1MiB. Set flags on new partition. הגדרת ×¡×™×ž×•× ×™× ×¢×œ מחיצה חדשה. Clear flags on partition <strong>%1</strong>. מחיקת ×¡×™×ž×•× ×™× ×ž×”×ž×—×™×¦×” <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. לבטל ×“×’×œ×•× ×™× ×¢×œ מחיצת <strong>%2</strong> בגודל %1MiB. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. סימון מחיצת <strong>%2</strong> בגודל %1MiB בתור <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. לבטל ×“×’×œ×•× ×™× ×¢×œ מחיצת <strong>%2</strong> בגודל %1MiB. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. ×”×“×’×œ×•× ×™× <strong>%3</strong> על מחיצת <strong>%2</strong> בגודל %1MiB. Clear flags on new partition. מחק ×¡×™×ž×•× ×™× ×¢×œ המחיצה החדשה. Flag partition <strong>%1</strong> as <strong>%2</strong>. סמן מחיצה <strong>%1</strong> ×› <strong>%2</strong>. Flag new partition as <strong>%1</strong>. סמן מחיצה חדשה ×› <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. מוחק ×¡×™×ž×•× ×™× ×¢×œ מחיצה <strong>%1</strong>. Clearing flags on new partition. מוחק ×¡×™×ž×•× ×™× ×¢×œ מחיצה חדשה. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. מגדיר ×¡×™×ž×•× ×™× <strong>%2</strong> על מחיצה <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. מגדיר ×¡×™×ž×•× ×™× <strong>%1</strong> על מחיצה חדשה. The installer failed to set flags on partition %1. תהליך ההתקנה נכשל בעת הצבת ×¡×™×ž×•× ×™× ×‘×ž×—×™×¦×” %1. SetPasswordJob Set password for user %1 הגדר סיסמה עבור משתמש %1 Setting password for user %1. מגדיר סיסמה עבור משתמש %1. Bad destination system path. יעד נתיב המערכת ×œ× ×ª×§×™×Ÿ. rootMountPoint is %1 עיגון מחיצת מערכת ההפעלה, rootMountPoint, ×”×™× %1 Cannot disable root account. ×œ× × ×™×ª×Ÿ לנטרל ×ת חשבון המנהל root. passwd terminated with error code %1. passwd הסתיימה ×¢× ×©×’×™×ת קוד %1. Cannot set password for user %1. ×œ× × ×™×ª×Ÿ להגדיר סיסמה עבור משתמש %1. usermod terminated with error code %1. פקודת שינוי מ×פייני המשתמש, usermod, נכשלה ×¢× ×§×•×“ יצי××” %1. SetTimezoneJob Set timezone to %1/%2 הגדרת ×זור זמן ל %1/%2 Cannot access selected timezone path. ×œ× × ×™×ª×Ÿ לגשת לנתיב של ×זור הזמן הנבחר. Bad path: %1 נתיב ×œ× ×ª×§×™×Ÿ: %1 Cannot set timezone. ×œ× × ×™×ª×Ÿ להגדיר ×ת ×זור הזמן. Link creation failed, target: %1; link name: %2 נכשלה יצירת קיצור דרך, מיקו×: %1; ×©× ×§×™×¦×•×¨ הדרך: %2 Cannot set timezone, ×œ× × ×™×ª×Ÿ להגדיר ×ת ×זור הזמן, Cannot open /etc/timezone for writing ×œ× × ×™×ª×Ÿ לפתוח ×ת /etc/timezone לכתיבה ShellProcessJob Shell Processes Job משימת תהליכי מעטפת SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage This is an overview of what will happen once you start the setup procedure. זו סקירה של מה שיקרה ל×חר התחלת תהליך ההתקנה. This is an overview of what will happen once you start the install procedure. להלן סקירת המ×ורעות שיתרחשו ×¢× ×ª×—×™×œ×ª תהליך ההתקנה. SummaryViewStep Summary ×¡×™×›×•× TrackingInstallJob Installation feedback משוב ×‘× ×•×©× ×”×”×ª×§× ×” Sending installation feedback. שולח משוב ×‘× ×•×©× ×”×”×ª×§× ×”. Internal error in install-tracking. שגי××” פנימית בעת התקנת תכונת המעקב. HTTP request timed out. בקשת HTTP חרגה מזמן ההמתנה המקסימ×לי. TrackingMachineNeonJob Machine feedback משוב ×‘× ×•×©× ×¢×ž×“×ª המחשב Configuring machine feedback. מגדיר משוב ×‘× ×•×©× ×¢×ž×“×ª המחשב. Error in machine feedback configuration. שגי××” בעת הגדרת המשוב ×‘× ×•×©× ×¢×ž×“×ª המחשב. Could not configure machine feedback correctly, script error %1. ×œ× × ×™×ª×Ÿ להגדיר ×ת המשוב ×‘× ×•×©× ×¢×ž×“×ª המחשב ב×ופן תקין. שגי×ת הרצה %1. Could not configure machine feedback correctly, Calamares error %1. ×œ× × ×™×ª×Ÿ להגדיר ×ת המשוב ×‘× ×•×©× ×¢×ž×“×ª המחשב ב×ופן תקין. שגי×ת Calamares %1. TrackingPage Form Form Placeholder ×ž×ž×œ× ×ž×§×•× <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>בחירה ב×פשרות זו, תוביל לכך <span style=" font-weight:600;">×©×œ× ×™×™×©×œ×— מידע כלל</span> בנוגע ההתקנה שלך.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">לחץ ×›×ן למידע נוסף ×ודות משוב מצד המשתמש</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. מעקב ×חר ההתקנה מסייע ל־%1 לר×ות כמה ×ž×©×ª×ž×©×™× ×‘×ž×•×¦×¨ שלה×, על ×יזו חומרה מתבצעת ההתקנה של %1, בנוסף (לשתי ×”×פשרויות הקודמות), קבלת מידע מתחדש על ×™×™×©×•×ž×™× ×ž×•×¢×“×¤×™×. כדי לצפות ×‘× ×ª×•× ×™× ×©×™×™×©×œ×—×•, × × ×œ×©×œ×•×— על סמל העזרה שליד כל ×חד מהסעיפי×. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. בחירה ב×פשרות זו תוביל לשליחת מידע על ההתקנה והחומרה שלך. מידע ×–×” <b>יישלח ×¤×¢× ×חת בלבד</b> ל×חר ×¡×™×•× ×”×”×ª×§× ×”. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. בחירה ב×פשרות ×”×–×ת תוביל לשליחת מידע <b>מדי ×¤×¢× ×‘×¤×¢×</b> על ההתקנה, החומרה ×•×”×™×™×©×•×ž×™× ×©×œ×š ×ל %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. בחירה ב×פשרות זו תוביל לשליחת מידע <b>ב×ופן קבוע</b> על ההתקנה, החומרה, ×”×™×™×©×•×ž×™× ×•×“×¤×•×¡×™ שימוש ×ל %1. TrackingViewStep Feedback משוב UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>×× ×ž×—×©×‘ ×–×” מיועד לשימוש לטובת למעלה ממשתמש ×חד, ניתן ליצור מגוון חשבונות ל×חר ההתקנה.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>×× ×ž×—×©×‘ ×–×” מיועד לשימוש לטובת למעלה ממשתמש ×חד, ניתן ליצור מגוון חשבונות ל×חר ההתקנה.</small> Your username is too long. ×©× ×”×ž×©×ª×ž×© ×רוך מדי. Your username must start with a lowercase letter or underscore. ×©× ×”×ž×©×ª×ž×© שלך חייב להתחיל ב×ות קטנה ×ו בקו תחתי. Only lowercase letters, numbers, underscore and hyphen are allowed. מותר להשתמש רק ב×ותיות קטנות, ספרות, ×§×•×•×™× ×ª×—×ª×™×™× ×•×ž×™× ×•×¡×™×. Only letters, numbers, underscore and hyphen are allowed. מותר להשתמש רק ב×ותיות, ספרות, ×§×•×•×™× ×ª×—×ª×™×™× ×•×ž×™× ×•×¡×™×. Your hostname is too short. ×©× ×”×ž×—×©×‘ קצר מדי. Your hostname is too long. ×©× ×”×ž×—×©×‘ ×רוך מדי. Your passwords do not match! הססמ×ות ×œ× ×ª×•×מות! UsersViewStep Users ×ž×©×ª×ž×©×™× VariantModel Key מפתח Value ערך VolumeGroupBaseDialog Create Volume Group יצירת קבוצת ×›×¨×›×™× List of Physical Volumes רשימת ×›×¨×›×™× ×¤×™×–×™×™× Volume Group Name: ×©× ×§×‘×•×¦×ª כרכי×: Volume Group Type: סוג קבוצת כרכי×: Physical Extent Size: גודל משטח פיזי: MiB MiB Total Size: גודל כולל: Used Size: גודל מנוצל: Total Sectors: סך כל המקטעי×: Quantity of LVs: כמות ×”×›×¨×›×™× ×”×œ×•×’×™×™×: WelcomePage Form Form Select application and system language × × ×œ×‘×—×•×¨ ×™×™×©×•× ×•×ת שפת המערכת Open donations website פתיחת ×תר התרומות &Donate &תרומה Open help and support website פתיחת ×תר העזרה והתמיכה Open issues and bug-tracking website פתיחת ×תר התקלות והמעקב ×חר ב××’×™× Open release notes website פתיחת ×”×תר ×¢× ×”×¢×¨×•×ª המהדורה &Release notes ×”&ערות מהדורה &Known issues &בעיות נפוצות &Support &תמיכה &About על &×ודות <h1>Welcome to the %1 installer.</h1> <h1>ברוך בו×ך להתקנת %1.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>ברוך בו×ך להתקנת %1 ×¢× Calamares.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>ברוך בו×ך לתכנית ההתקנה Calamares עבור %1.</h1> <h1>Welcome to %1 setup.</h1> <h1>ברוך בו×ך להתקנת %1.</h1> About %1 setup על ×ודות התקנת %1 About %1 installer על ×ודות התקנת %1 <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. <h1>%1</h1><br/><strong>%2<br/>עבור %3</strong><br/><br/>כל הזכויות שמורות 2014â€-2017 ל־Teo Mrnjavac†&lt;teo@kde.org&gt;<br/>כל הזכויות שמורות 2017â€-2019 ל־Adriaan de Groot†&lt;groot@kde.org&gt;<br/>תודה גדולה נתונה <a href="https://calamares.io/team/">לצוות Calamares</a> ול<a href="https://www.transifex.com/calamares/calamares/">צווות ×”×ž×ª×¨×’×ž×™× ×©×œ Calamares</a>.<br/><br/><a href="https://calamares.io/">הפיתוח של Calamares</a> ממומן על ידי <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - דו××’×™× ×œ×—×™×¨×•×ª התכנה. %1 support תמיכה ב־%1 WelcomeQmlViewStep Welcome ברוך בו×ך WelcomeViewStep Welcome ברוך בו×ך notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>×לו הערות מהדורה לדוגמה.</p> welcomeq <h3>%1 <quote>%2</quote></h3> <h3>%1 <quote>%2</quote></h3> About על ×ודות Support תמיכה Known issues בעיות נפוצות Release notes הערות מהדורה Donate תרומה calamares-3.2.20/lang/calamares_hi.ts000066400000000000000000006503501362604102500174370ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. इस सिसà¥à¤Ÿà¤® का <strong>बूट वातावरण</strong>।<br><br>पà¥à¤°à¤¾à¤¨à¥‡ x86 सिसà¥à¤Ÿà¤® केवल <strong>BIOS</strong> का समरà¥à¤¥à¤¨ करते हैं। आधà¥à¤¨à¤¿à¤• सिसà¥à¤Ÿà¤® आमतौर पर <strong>EFI</strong> का उपयोग करते हैं, लेकिन संगतता मोड में शà¥à¤°à¥‚ होने पर BIOS के रूप में दिखाई दे सकते हैं । This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. यह सिसà¥à¤Ÿà¤® <strong>EFI</strong>बूट वातावरण के साथ शà¥à¤°à¥‚ किया गया।<br><br>EFI वातावरण से सà¥à¤Ÿà¤¾à¤°à¥à¤Ÿà¤…प विनà¥à¤¯à¤¸à¥à¤¤ करने के लिठइंसà¥à¤Ÿà¥‰à¤²à¤° को <strong>GRUB</strong> या <strong>systemd-boot</strong> जैसे बूट लोडर अनà¥à¤ªà¥à¤°à¤¯à¥‹à¤— <strong>EFI सिसà¥à¤Ÿà¤® विभाजन</strong>पर सà¥à¤¥à¤¾à¤ªà¤¿à¤¤ करने जरूरी हैं। यह सà¥à¤µà¤¤: होता है, परंतॠअगर आप मैनà¥à¤…ल विभाजन करना चà¥à¤¨à¤¤à¥‡ है; तो आपको या तो इसे चà¥à¤¨à¤¨à¤¾ होगा या फिर खà¥à¤¦ ही बनाना होगा। This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. यह सिसà¥à¤Ÿà¤® <strong>BIOS</strong>बूट वातावरण के साथ शà¥à¤°à¥‚ किया गया।<br><br>BIOS वातावरण से सà¥à¤Ÿà¤¾à¤°à¥à¤Ÿà¤…प विनà¥à¤¯à¤¸à¥à¤¤ करने के लिठइंसà¥à¤Ÿà¥‰à¤²à¤° को <strong>GRUB</strong> जैसे बूट लोडर को, या तो विभाजन की शà¥à¤°à¥à¤†à¤¤ में या फिर <strong>मासà¥à¤Ÿà¤° बूट रिकॉरà¥à¤¡</strong> पर विभाजन तालिका की शà¥à¤°à¥à¤†à¤¤ में इंसà¥à¤Ÿà¥‰à¤² (सà¥à¤à¤¾à¤¯à¤¾ जाता है) करना होगा। यह सà¥à¤µà¤¤: होता है, परंतॠअगर आप मैनà¥à¤…ल विभाजन करना चà¥à¤¨à¤¤à¥‡ है; तो आपको इसे खà¥à¤¦ ही बनाना होगा। BootLoaderModel Master Boot Record of %1 %1 का मासà¥à¤Ÿà¤° बूट रिकॉरà¥à¤¡ Boot Partition बूट विभाजन System Partition सिसà¥à¤Ÿà¤® विभाजन Do not install a boot loader बूट लोडर इंसà¥à¤Ÿà¥‰à¤² न करें %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page खाली पृषà¥à¤  Calamares::DebugWindow Form रूप GlobalStorage गà¥à¤²à¥‹à¤¬à¤² सà¥à¤Ÿà¥‹à¤°à¥‡à¤œ JobQueue कारà¥à¤¯ पंकà¥à¤¤à¤¿ Modules मॉडà¥à¤¯à¥‚ल Type: पà¥à¤°à¤•ार : none कà¥à¤› नहीं Interface: इंटरफ़ेस : Tools साधन Reload Stylesheet शैली पतà¥à¤°à¤• पà¥à¤¨à¤ƒ लोड करें Widget Tree विजेट टà¥à¤°à¥€ Debug information डीबग जानकारी Calamares::ExecutionViewStep Set up सेटअप Install इंसà¥à¤Ÿà¥‰à¤² करें Calamares::FailJob Job failed (%1) कारà¥à¤¯ विफल रहा (%1) Programmed job failure was explicitly requested. पà¥à¤°à¥‹à¤—à¥à¤°à¤¾à¤® किठगठकारà¥à¤¯ की विफलता सà¥à¤ªà¤·à¥à¤Ÿ रूप से अनà¥à¤°à¥‹à¤§ की गई थी। Calamares::JobThread Done पूरà¥à¤£ हà¥à¤† Calamares::NamedJob Example job (%1) उदाहरण कारà¥à¤¯ (%1) Calamares::ProcessJob Run command '%1' in target system. लकà¥à¤·à¤¿à¤¤ सिसà¥à¤Ÿà¤® में कमांड '%1' चलाà¤à¤à¥¤ Run command '%1'. कमांड '%1' चलाà¤à¤à¥¤ Running command %1 %2 कमांड %1%2 चल रही हैं Calamares::PythonJob Running %1 operation. %1 चल रहा है। Bad working directory path कारà¥à¤¯à¤°à¤¤ फोलà¥à¤¡à¤° का पथ गलत है Working directory %1 for python job %2 is not readable. पाइथन कारà¥à¤¯ %2 के लिठकारà¥à¤¯à¤°à¤¤ डायरेकà¥à¤Ÿà¤°à¥€ %1 रीड करने योगà¥à¤¯ नहीं है। Bad main script file ख़राब मà¥à¤–à¥à¤¯ सà¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿ फ़ाइल Main script file %1 for python job %2 is not readable. पाइथन कारà¥à¤¯ %2 हेतॠमà¥à¤–à¥à¤¯ सà¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿ फ़ाइल %1 रीड करने योगà¥à¤¯ नहीं है। Boost.Python error in job "%1". कारà¥à¤¯ "%1" में Boost.Python तà¥à¤°à¥à¤Ÿà¤¿à¥¤ Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Waiting for %n module(s). %n मॉडà¥à¤¯à¥‚ल की पà¥à¤°à¤¤à¥€à¤•à¥à¤·à¤¾ में। %n मॉडà¥à¤¯à¥‚ल की पà¥à¤°à¤¤à¥€à¤•à¥à¤·à¤¾ में। (%n second(s)) (%n सेकंड) (%n सेकंड) System-requirements checking is complete. सिसà¥à¤Ÿà¤® हेतॠआवशà¥à¤¯à¤•ताओं की जाà¤à¤š पूरà¥à¤£ हà¥à¤ˆà¥¤ Calamares::ViewManager &Back वापस (&B) &Next आगे (&N) &Cancel रदà¥à¤¦ करें (&C) Cancel setup without changing the system. सिसà¥à¤Ÿà¤® में बदलाव किये बिना सेटअप रदà¥à¤¦ करें। Cancel installation without changing the system. सिसà¥à¤Ÿà¤® में बदलाव किये बिना इंसà¥à¤Ÿà¥‰à¤² रदà¥à¤¦ करें। Setup Failed सेटअप विफल रहा Would you like to paste the install log to the web? Install Log Paste URL The upload was unsuccessful. No web-paste was done. अपलोड असफल रहा। कोई वेब-पेसà¥à¤Ÿ नही किया गया। Calamares Initialization Failed Calamares का आरंभीकरण विफल रहा %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. %1 को इनसà¥à¤Ÿà¥‰à¤² नहीं किया जा सका। Calamares सभी विनà¥à¤¯à¤¸à¥à¤¤ मापांकों को लोड करने में विफल रहा। यह आपके लिनकà¥à¤¸ वितरण दà¥à¤µà¤¾à¤°à¤¾ Calamares के उपयोग से संबंधित à¤à¤• समसà¥à¤¯à¤¾ है। <br/>The following modules could not be loaded: <br/>निमà¥à¤¨à¤²à¤¿à¤–ित मापांक लोड नहीं हो सकें : Continue with installation? इंसà¥à¤Ÿà¥‰à¤² पà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ जारी रखें? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> %2 सेटअप करने हेतॠ%1 सेटअप पà¥à¤°à¥‹à¤—à¥à¤°à¤¾à¤® आपकी डिसà¥à¤• में बदलाव करने वाला है।<br/><strong>आप इन बदलावों को पूरà¥à¤µà¤µà¤¤ नहीं कर पाà¤à¤‚गे।</strong> &Set up now अभी सेटअप करें (&S) &Set up सेटअप करें (&S) &Install इंसà¥à¤Ÿà¥‰à¤² करें (&I) Setup is complete. Close the setup program. सेटअप पूरà¥à¤£ हà¥à¤†à¥¤ सेटअप पà¥à¤°à¥‹à¤—à¥à¤°à¤¾à¤® बंद कर दें। Cancel setup? सेटअप रदà¥à¤¦ करें? Cancel installation? इंसà¥à¤Ÿà¥‰à¤² रदà¥à¤¦ करें? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. कà¥à¤¯à¤¾ आप वाकई वरà¥à¤¤à¤®à¤¾à¤¨ सेटअप पà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ रदà¥à¤¦ करना चाहते हैं? सेटअप पà¥à¤°à¥‹à¤—à¥à¤°à¤¾à¤® बंद हो जाà¤à¤—ा व सभी बदलाव नषà¥à¤Ÿà¥¤ Do you really want to cancel the current install process? The installer will quit and all changes will be lost. कà¥à¤¯à¤¾ आप वाकई वरà¥à¤¤à¤®à¤¾à¤¨ इंसà¥à¤Ÿà¥‰à¤² पà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ रदà¥à¤¦ करना चाहते हैं? इंसà¥à¤Ÿà¥‰à¤²à¤° बंद हो जाà¤à¤—ा व सभी बदलाव नषà¥à¤Ÿà¥¤ &Yes हाठ(&Y) &No नहीं (&N) &Close बंद करें (&C) Continue with setup? सेटअप करना जारी रखें? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> %2 इंसà¥à¤Ÿà¥‰à¤² करने हेतॠ%1 इंसà¥à¤Ÿà¥‰à¤²à¤° आपकी डिसà¥à¤• में बदलाव करने वाला है।<br/><strong>आप इन बदलावों को पूरà¥à¤µà¤µà¤¤ नहीं कर पाà¤à¤‚गे।</strong> &Install now अभी इंसà¥à¤Ÿà¥‰à¤² करें (&I) Go &back वापस जाà¤à¤ (&b) &Done हो गया (&D) The installation is complete. Close the installer. इंसà¥à¤Ÿà¥‰à¤² पूरà¥à¤£ हà¥à¤†à¥¤à¤…ब इंसà¥à¤Ÿà¥‰à¤²à¤° को बंद करें। Error तà¥à¤°à¥à¤Ÿà¤¿ Installation Failed इंसà¥à¤Ÿà¥‰à¤² विफल रहा CalamaresPython::Helper Unknown exception type अपवाद का पà¥à¤°à¤•ार अजà¥à¤žà¤¾à¤¤ unparseable Python error अपà¥à¤°à¤¾à¤ªà¥à¤¯ पाइथन तà¥à¤°à¥à¤Ÿà¤¿ unparseable Python traceback अपà¥à¤°à¤¾à¤ªà¥à¤¯ पाइथन टà¥à¤°à¥‡à¤¸à¤¬à¥ˆà¤• Unfetchable Python error. पहà¥à¤à¤š से बाहर पाइथन तà¥à¤°à¥à¤Ÿà¤¿à¥¤ CalamaresUtils Install log posted to: %1 CalamaresWindow %1 Setup Program %1 सेटअप पà¥à¤°à¥‹à¤—à¥à¤°à¤¾à¤® %1 Installer %1 इंसà¥à¤Ÿà¥‰à¤²à¤° Show debug information डीबग जानकारी दिखाà¤à¤ CheckerContainer Gathering system information... सिसà¥à¤Ÿà¤® की जानकारी पà¥à¤°à¤¾à¤ªà¥à¤¤ की जा रही है... ChoicePage Form रूप After: बाद में : <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>मैनà¥à¤…ल विभाजन</strong><br/> आप सà¥à¤µà¤¯à¤‚ भी विभाजन बना व उनका आकार बदल सकते है। Boot loader location: बूट लोडर का सà¥à¤¥à¤¾à¤¨ : Select storage de&vice: डिवाइस चà¥à¤¨à¥‡à¤‚ (&v): Current: मौजूदा : Reuse %1 as home partition for %2. %2 के होम विभाजन के लिठ%1 को पà¥à¤¨à¤ƒ उपयोग करें। <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>छोटा करने हेतॠविभाजन चà¥à¤¨à¥‡à¤‚, फिर नीचे bar से उसका आकर सेट करें</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 को छोटा करके %2MiB किया जाà¤à¤—ा व %4 हेतॠ%3MiB का à¤à¤• नया विभाजन बनेगा। <strong>Select a partition to install on</strong> <strong>इंसà¥à¤Ÿà¥‰à¤² हेतॠविभाजन चà¥à¤¨à¥‡à¤‚</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. इस सिसà¥à¤Ÿà¤® पर कहीं भी कोई EFI सिसà¥à¤Ÿà¤® विभाजन नहीं मिला। कृपया वापस जाà¤à¤ व %1 को सेट करने के लिठमैनà¥à¤…ल रूप से विभाजन करें। The EFI system partition at %1 will be used for starting %2. %1 वाले EFI सिसà¥à¤Ÿà¤® विभाजन का उपयोग %2 को शà¥à¤°à¥‚ करने के लिठकिया जाà¤à¤—ा। EFI system partition: EFI सिसà¥à¤Ÿà¤® विभाजन: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. इस डिवाइस पर लगता है कि कोई ऑपरेटिंग सिसà¥à¤Ÿà¤® नहीं है। आप कà¥à¤¯à¤¾ करना चाहेंगे?<br/>आप डिवाइस में किसी भी बदलाव से पहले उसकी समीकà¥à¤·à¤¾ व पà¥à¤·à¥à¤Ÿà¤¿ कर सकेंगे। <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>डिसà¥à¤• का सारा डाटा हटाà¤à¤</strong><br/>इससे चयनित डिवाइस पर मौजूद सारा डाटा <font color="red">हटा</font>हो जाà¤à¤—ा। This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. इस डिवाइस पर %1 है। आप कà¥à¤¯à¤¾ करना चाहेंगे?<br/>आप डिवाइस में किसी भी बदलाव से पहले उसकी समीकà¥à¤·à¤¾ व पà¥à¤·à¥à¤Ÿà¤¿ कर सकेंगे। No Swap कोई सà¥à¤µà¥ˆà¤ª नहीं Reuse Swap सà¥à¤µà¥ˆà¤ª पà¥à¤¨à¤ƒ उपयोग करें Swap (no Hibernate) सà¥à¤µà¥ˆà¤ª (हाइबरनेशन/सिसà¥à¤Ÿà¤® सà¥à¤ªà¥à¤¤ रहित) Swap (with Hibernate) सà¥à¤µà¥ˆà¤ª (हाइबरनेशन/सिसà¥à¤Ÿà¤® सà¥à¤ªà¥à¤¤ सहित) Swap to file सà¥à¤µà¥ˆà¤ª फाइल बनाà¤à¤‚ <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>साथ में इंसà¥à¤Ÿà¥‰à¤² करें</strong><br/>इंसà¥à¤Ÿà¥‰à¤²à¤° %1 के लिठसà¥à¤¥à¤¾à¤¨ बनाने हेतॠà¤à¤• विभाजन को छोटा कर देगा। <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>विभाजन को बदलें</strong><br/>à¤à¤• विभाजन को %1 से बदलें। This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. इस डिवाइस पर पहले से à¤à¤• ऑपरेटिंग सिसà¥à¤Ÿà¤® है। आप कà¥à¤¯à¤¾ करना चाहेंगे?<br/>आप डिवाइस में किसी भी बदलाव से पहले उसकी समीकà¥à¤·à¤¾ व पà¥à¤·à¥à¤Ÿà¤¿ कर सकेंगे। This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. इस डिवाइस पर à¤à¤• से अधिक ऑपरेटिंग सिसà¥à¤Ÿà¤® है। आप कà¥à¤¯à¤¾ करना चाहेंगे?<br/>आप डिवाइस में किसी भी बदलाव से पहले उसकी समीकà¥à¤·à¤¾ व पà¥à¤·à¥à¤Ÿà¤¿ कर सकेंगे। ClearMountsJob Clear mounts for partitioning operations on %1 %1 पर विभाजन कारà¥à¤¯ हेतॠमाउंट हटाà¤à¤ Clearing mounts for partitioning operations on %1. %1 पर विभाजन कारà¥à¤¯ हेतॠमाउंट हटाà¤à¤ जा रहे हैं। Cleared all mounts for %1 %1 हेतॠसभी माउंट हटा दिठगठClearTempMountsJob Clear all temporary mounts. सभी असà¥à¤¥à¤¾à¤¯à¥€ माउंट हटाà¤à¤à¥¤ Clearing all temporary mounts. सभी असà¥à¤¥à¤¾à¤¯à¥€ माउंट हटाà¤à¤ जा रहे हैं। Cannot get list of temporary mounts. असà¥à¤¥à¤¾à¤ˆ माउंट की सूची नहीं मिली। Cleared all temporary mounts. सभी असà¥à¤¥à¤¾à¤¯à¥€ माउंट हटा दिठगà¤à¥¤ CommandList Could not run command. कमांड चलाई नहीं जा सकी। The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. होसà¥à¤Ÿ वातावरण में कमांड हेतॠरà¥à¤Ÿ पथ जानना आवशà¥à¤¯à¤• है परनà¥à¤¤à¥ कोई रूट माउंट पॉइंट परिभाषित नहीं किया गया है। The command needs to know the user's name, but no username is defined. कमांड हेतॠउपयोकà¥à¤¤à¤¾ का नाम आवशà¥à¤¯à¤• है परनà¥à¤¤à¥ कोई नाम परिभाषित नहीं है। ContextualProcessJob Contextual Processes Job पà¥à¤°à¤¾à¤¸à¤‚गिक पà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ कारà¥à¤¯ CreatePartitionDialog Create a Partition à¤à¤• विभाजन बनाà¤à¤ MiB MiB Partition &Type: विभाजन का पà¥à¤°à¤•ार (&T): &Primary मà¥à¤–à¥à¤¯ (&P) E&xtended विसà¥à¤¤à¥ƒà¤¤ (&x) Fi&le System: फ़ाइल सिसà¥à¤Ÿà¤® (&l): LVM LV name LVM LV का नाम Flags: फà¥à¤²à¥ˆà¤— : &Mount Point: माउंट पॉइंट (&M): Si&ze: आकार (&z): En&crypt à¤à¤¨à¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿ (&c) Logical तारà¥à¤•िक Primary मà¥à¤–à¥à¤¯ GPT GPT Mountpoint already in use. Please select another one. माउंट पॉइंट पहले से उपयोग में है । कृपया दूसरा चà¥à¤¨à¥‡à¤‚। CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. फ़ाइल सिसà¥à¤Ÿà¤® %1 के साथ %4 (%3) पर नया %2MiB का विभाजन बनाà¤à¤à¥¤ Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. फ़ाइल सिसà¥à¤Ÿà¤® <strong>%1</strong> के साथ <strong>%4</strong> (%3) पर नया <strong>%2MiB</strong> का विभाजन बनाà¤à¤à¥¤ Creating new %1 partition on %2. %2 पर नया %1 विभाजन बनाया जा रहा है। The installer failed to create partition on disk '%1'. इंसà¥à¤Ÿà¥‰à¤²à¤° डिसà¥à¤• '%1' पर विभाजन बनाने में विफल रहा। CreatePartitionTableDialog Create Partition Table विभाजन तालिका बनाà¤à¤ Creating a new partition table will delete all existing data on the disk. नई विभाजन तालिका बनाने से डिसà¥à¤• पर मौजूद सारा डाटा हट जाà¤à¤—ा। What kind of partition table do you want to create? आप किस तरह की विभाजन तालिका बनाना चाहते हैं? Master Boot Record (MBR) मासà¥à¤Ÿà¤° बूट रिकॉरà¥à¤¡ (MBR) GUID Partition Table (GPT) GUID विभाजन तालिका (GPT) CreatePartitionTableJob Create new %1 partition table on %2. %2 पर नई %1 विभाजन तालिका बनाà¤à¤à¥¤ Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). <strong>%2</strong> (%3) पर नई <strong>%1</strong> विभाजन तालिका बनाà¤à¤à¥¤ Creating new %1 partition table on %2. %2 पर नई %1 विभाजन तालिका बनाई जा रही है। The installer failed to create a partition table on %1. इंसà¥à¤Ÿà¥‰à¤²à¤° डिसà¥à¤• '%1' पर विभाजन तालिका बनाने में विफल रहा। CreateUserJob Create user %1 %1 उपयोकà¥à¤¤à¤¾ बनाà¤à¤ Create user <strong>%1</strong>. <strong>%1</strong> उपयोकà¥à¤¤à¤¾ बनाà¤à¤à¥¤ Creating user %1. %1 उपयोकà¥à¤¤à¤¾ बनाया जा रहा है। Sudoers dir is not writable. Sudoers डायरेकà¥à¤Ÿà¤°à¥€ राइट करने योगà¥à¤¯ नहीं है। Cannot create sudoers file for writing. राइट हेतॠsudoers फ़ाइल नहीं बन सकती। Cannot chmod sudoers file. sudoers फ़ाइल chmod नहीं की जा सकती। Cannot open groups file for reading. रीड हेतॠgroups फ़ाइल खोली नहीं जा सकती। CreateVolumeGroupDialog Create Volume Group वॉलà¥à¤¯à¥‚म समूह बनाà¤à¤ CreateVolumeGroupJob Create new volume group named %1. %1 नामक नया वॉलà¥à¤¯à¥‚म समूह बनाà¤à¤‚। Create new volume group named <strong>%1</strong>. <strong>%1</strong> नामक नया वॉलà¥à¤¯à¥‚म समूह बनाà¤à¤‚। Creating new volume group named %1. %1 नामक नया वॉलà¥à¤¯à¥‚म समूह बनाया जा रहा है। The installer failed to create a volume group named '%1'. इंसà¥à¤Ÿà¤¾à¤²à¤° '%1' नामक वॉलà¥à¤¯à¥‚म समूह को बनाने में विफल रहा। DeactivateVolumeGroupJob Deactivate volume group named %1. %1 नामक वॉलà¥à¤¯à¥‚म समूह को निषà¥à¤•à¥à¤°à¤¿à¤¯ करें। Deactivate volume group named <strong>%1</strong>. <strong>%1</strong> नामक वॉलà¥à¤¯à¥‚म समूह को निषà¥à¤•à¥à¤°à¤¿à¤¯ करें। The installer failed to deactivate a volume group named %1. इंसà¥à¤Ÿà¥‰à¤²à¤° %1 नामक वॉलà¥à¤¯à¥‚म समूह को निषà¥à¤•à¥à¤°à¤¿à¤¯ करने में विफल रहा। DeletePartitionJob Delete partition %1. विभाजन %1 हटाà¤à¤à¥¤ Delete partition <strong>%1</strong>. विभाजन <strong>%1</strong> हटाà¤à¤à¥¤ Deleting partition %1. %1 विभाजन हटाया जा रहा है। The installer failed to delete partition %1. इंसà¥à¤Ÿà¥‰à¤²à¤° विभाजन %1 को हटाने में विफल रहा । DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. चयनित डिवाइस पर <strong>विभाजन तालिका</strong> का पà¥à¤°à¤•ार।<br><br>विभाजन तालिका का पà¥à¤°à¤•ार केवल विभाजन तालिका को हटा दà¥à¤¬à¤¾à¤°à¤¾ बनाकर ही किया जा सकता है, इससे डिसà¥à¤• पर मौजूद सभी डाटा नहीं नषà¥à¤Ÿ हो जाà¤à¤—ा।<br>अगर आप कà¥à¤› अलग नहीं चà¥à¤¨à¤¤à¥‡ तो यह इंसà¥à¤Ÿà¥‰à¤²à¤° वरà¥à¤¤à¤®à¤¾à¤¨ विभाजन तालिका उपयोग करेगा।<br>अगर सà¥à¤¨à¤¿à¤¶à¥à¤šà¤¿à¤¤ नहीं है तो नठव आधà¥à¤¨à¤¿à¤• सिसà¥à¤Ÿà¤® के लिठGPT चà¥à¤¨à¥‡à¤‚। This device has a <strong>%1</strong> partition table. इस डिवाइस में <strong>%1</strong> विभाजन तालिका है। This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. यह à¤à¤• <strong>लूप</strong> डिवाइस है।<br><br>इस छदà¥à¤®-डिवाइस में कोई विभाजन तालिका नहीं है जो फ़ाइल को बà¥à¤²à¥‰à¤• डिवाइस के रूप में उपयोग कर सकें। इस तरह के सेटअप में केवल à¤à¤• फ़ाइल सिसà¥à¤Ÿà¤® होता है। This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. इंसà¥à¤Ÿà¥‰à¤²à¤° को चयनित डिवाइस पर <strong>कोई विभाजन तालिका नहीं मिली</strong>।<br><br> डिवाइस पर विभाजन तालिका नहीं है या फिर जो है वो ख़राब है या उसका पà¥à¤°à¤•ार अजà¥à¤žà¤¾à¤¤ है। <br>इंसà¥à¤Ÿà¥‰à¤²à¤° à¤à¤• नई विभाजन तालिका, सà¥à¤µà¤¤à¤ƒ व मैनà¥à¤…ल दोनों तरह से बना सकता है। <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br><strong>EFI</strong>वातावरण से शà¥à¤°à¥‚ होने वाले आधà¥à¤¨à¤¿à¤• सिसà¥à¤Ÿà¤® के लिठयही विभाजन तालिका सà¥à¤à¤¾à¤ˆ जाती है। <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. <br><br>यह विभाजन तालिका केवल <strong>BIOS</strong>वातावरण से शà¥à¤°à¥‚ होने वाले पà¥à¤°à¤¾à¤¨à¥‡ सिसà¥à¤Ÿà¤® के लिठही सà¥à¤à¤¾à¤ˆ जाती है। बाकी सब के लिठGPT ही सबसे उपयà¥à¤•à¥à¤¤ है।<br><br><strong>चेतावनी:</strong> MBR विभाजन तालिका MS-DOS के समय की à¤à¤• पà¥à¤°à¤¾à¤¨à¥€ तकनीक है।<br> इसमें केवल 4 <em>मà¥à¤–à¥à¤¯</em> विभाजन बनाये जा सकते हैं, इनमें से à¤à¤• <em>विसà¥à¤¤à¥ƒà¤¤</em> हो सकता है व इसके अंदर भी कई <em>तारà¥à¤•िक</em> विभाजन हो सकते हैं। DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1 - (%2) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Dracut हेतॠLUKS विनà¥à¤¯à¤¾à¤¸ %1 पर राइट करना Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Dracut हेतॠLUKS विनà¥à¤¯à¤¾à¤¸ %1 पर राइट करना छोड़ें : "/" विभाजन à¤à¤¨à¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿà¥‡à¤¡ नहीं है Failed to open %1 %1 खोलने में विफल DummyCppJob Dummy C++ Job डमी सी++ कारà¥à¤¯ EditExistingPartitionDialog Edit Existing Partition मौजूदा विभाजन को संपादित करें Content: सामगà¥à¤°à¥€ : &Keep रखें (&K) Format फॉरà¥à¤®à¥‡à¤Ÿ करें Warning: Formatting the partition will erase all existing data. चेतावनी: विभाजन फॉरà¥à¤®à¥‡à¤Ÿ करने से सारा मौजूदा डाटा मिट जायेगा। &Mount Point: माउंट पॉइंट (&M): Si&ze: आकार (&z): MiB MiB Fi&le System: फ़ाइल सिसà¥à¤Ÿà¤® (&l): Flags: फà¥à¤²à¥ˆà¤— : Mountpoint already in use. Please select another one. माउंट पॉइंट पहले से उपयोग में है । कृपया दूसरा चà¥à¤¨à¥‡à¤‚। EncryptWidget Form रूप En&crypt system सिसà¥à¤Ÿà¤® à¤à¤¨à¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿ करें (&E) Passphrase कूटशबà¥à¤¦ Confirm passphrase कूटशबà¥à¤¦ की पà¥à¤·à¥à¤Ÿà¤¿ करें Please enter the same passphrase in both boxes. कृपया दोनों सà¥à¤¥à¤¾à¤¨à¥‹à¤‚ में समान कूटशबà¥à¤¦ दरà¥à¤œ करें। FillGlobalStorageJob Set partition information विभाजन संबंधी जानकारी सेट करें Install %1 on <strong>new</strong> %2 system partition. <strong>नà¤</strong> %2 सिसà¥à¤Ÿà¤® विभाजन पर %1 इंसà¥à¤Ÿà¥‰à¤² करें। Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. <strong>नया</strong> %2 विभाजन माउंट पॉइंट <strong>%1</strong> के साथ सेट करें। Install %2 on %3 system partition <strong>%1</strong>. %3 सिसà¥à¤Ÿà¤® विभाजन <strong>%1</strong> पर %2 इंसà¥à¤Ÿà¥‰à¤² करें। Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. %3 विभाजन <strong>%1</strong> माउंट पॉइंट <strong>%2</strong> के साथ सेट करें। Install boot loader on <strong>%1</strong>. बूट लोडर <strong>%1</strong> पर इंसà¥à¤Ÿà¥‰à¤² करें। Setting up mount points. माउंट पॉइंट सेट किठजा रहे हैं। FinishedPage Form रूप <Restart checkbox tooltip> <Restart checkbox tooltip> &Restart now अभी पà¥à¤¨à¤ƒ आरंभ करें (&R) <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>सब हो गया।</h1><br/>आपके कंपà¥à¤¯à¥‚टर पर %1 को सेटअप कर दिया गया है।<br/>अब आप अपने नठसिसà¥à¤Ÿà¤® का उपयोग कर सकते है। <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <html><head/><body><p>यह विकलà¥à¤ª चयनित होने पर आपका सिसà¥à¤Ÿà¤® तà¥à¤°à¤‚त पà¥à¤¨à¤ƒ आरंभ हो जाà¤à¤—ा जब आप <span style="font-style:italic;">हो गया</span>पर कà¥à¤²à¤¿à¤• करेंगे या सेटअप पà¥à¤°à¥‹à¤—à¥à¤°à¤¾à¤® को बंद करेंगे।</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>सब हो गया।</h1><br/>आपके कंपà¥à¤¯à¥‚टर पर %1 इंसà¥à¤Ÿà¥‰à¤² हो चà¥à¤•ा है।<br/>अब आप आपने नठसिसà¥à¤Ÿà¤® को पà¥à¤¨à¤ƒ आरंभ कर सकते है, या फिर %2 लाइव वातावरण उपयोग करना जारी रखें। <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <html><head/><body><p>यह विकलà¥à¤ª चयनित होने पर आपका सिसà¥à¤Ÿà¤® तà¥à¤°à¤‚त पà¥à¤¨à¤ƒ आरंभ हो जाà¤à¤—ा जब आप <span style="font-style:italic;">हो गया</span>पर कà¥à¤²à¤¿à¤• करेंगे या इंसà¥à¤Ÿà¥‰à¤²à¤° बंद करेंगे।</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>सेटअप विफल रहा</h1><br/>%1 आपके कंपà¥à¤¯à¥‚टर पर सेटअप नहीं हà¥à¤†à¥¤<br/>तà¥à¤°à¥à¤Ÿà¤¿ संदेश : %2। <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>इंसà¥à¤Ÿà¥‰à¤² विफल रहा</h1><br/>%1 आपके कंपà¥à¤¯à¥‚टर पर इंसà¥à¤Ÿà¥‰à¤² नहीं हà¥à¤†à¥¤<br/>तà¥à¤°à¥à¤Ÿà¤¿ संदेश : %2। FinishedViewStep Finish समापà¥à¤¤ करें Setup Complete सेटअप पूरà¥à¤£ हà¥à¤† Installation Complete इंसà¥à¤Ÿà¥‰à¤² पूरà¥à¤£ हà¥à¤† The setup of %1 is complete. %1 का सेटअप पूरà¥à¤£ हà¥à¤†à¥¤ The installation of %1 is complete. %1 का इंसà¥à¤Ÿà¥‰à¤² पूरà¥à¤£ हà¥à¤†à¥¤ FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. विभाजन %1 (फ़ाइल सिसà¥à¤Ÿà¤®: %2, आकार: %3 MiB) को %4 पर फॉरà¥à¤®à¥‡à¤Ÿ करें। Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. फ़ाइल सिसà¥à¤Ÿà¤® <strong>%2</strong> के साथ <strong>%3MiB</strong> के विभाजन <strong>%1</strong> को फॉरà¥à¤®à¥‡à¤Ÿ करें। Formatting partition %1 with file system %2. फ़ाइल सिसà¥à¤Ÿà¤® %2 के साथ विभाजन %1 को फॉरà¥à¤®à¥‡à¤Ÿ किया जा रहा है। The installer failed to format partition %1 on disk '%2'. इंसà¥à¤Ÿà¥‰à¤²à¤° डिसà¥à¤• '%2' पर विभाजन %1 को फॉरà¥à¤®à¥‡à¤Ÿ करने में विफल रहा। GeneralRequirements has at least %1 GiB available drive space कम-से-कम %1 GiB सà¥à¤ªà¥‡à¤¸ डà¥à¤°à¤¾à¤‡à¤µ पर उपलबà¥à¤§ हो There is not enough drive space. At least %1 GiB is required. डà¥à¤°à¤¾à¤‡à¤µ में परà¥à¤¯à¤¾à¤ªà¥à¤¤ सà¥à¤ªà¥‡à¤¸ नहीं है। कम-से-कम %1 GiB होना आवशà¥à¤¯à¤• है। has at least %1 GiB working memory कम-से-कम %1 GiB मेमोरी उपलबà¥à¤§ हो The system does not have enough working memory. At least %1 GiB is required. सिसà¥à¤Ÿà¤® में परà¥à¤¯à¤¾à¤ªà¥à¤¤ मेमोरी नहीं है। कम-से-कम %1 GiB होनी आवशà¥à¤¯à¤• है। is plugged in to a power source पॉवर के सà¥à¤°à¥‹à¤¤ से कनेकà¥à¤Ÿ है The system is not plugged in to a power source. सिसà¥à¤Ÿà¤® पॉवर के सà¥à¤°à¥‹à¤¤ से कनेकà¥à¤Ÿ नहीं है। is connected to the Internet इंटरनेट से कनेकà¥à¤Ÿ है The system is not connected to the Internet. सिसà¥à¤Ÿà¤® इंटरनेट से कनेकà¥à¤Ÿ नहीं है। is running the installer as an administrator (root) The setup program is not running with administrator rights. सेटअप पà¥à¤°à¥‹à¤—à¥à¤°à¤¾à¤® के पास पà¥à¤°à¤¬à¤‚धक अधिकार नहीं है। The installer is not running with administrator rights. इंसà¥à¤Ÿà¥‰à¤²à¤° के पास पà¥à¤°à¤¬à¤‚धक अधिकार नहीं है। has a screen large enough to show the whole installer The screen is too small to display the setup program. सेटअप पà¥à¤°à¥‹à¤—à¥à¤°à¤¾à¤® पà¥à¤°à¤¦à¤°à¥à¤¶à¤¿à¤¤ करने हेतॠसà¥à¤•à¥à¤°à¥€à¤¨ काफ़ी छोटी है। The screen is too small to display the installer. इंसà¥à¤Ÿà¥‰à¤²à¤° पà¥à¤°à¤¦à¤°à¥à¤¶à¤¿à¤¤ करने हेतॠसà¥à¤•à¥à¤°à¥€à¤¨ काफ़ी छोटी है। HostInfoJob Collecting information about your machine. मशीन की जानकारी à¤à¤•तà¥à¤°à¤¿à¤¤ की जा रही है। IDJob OEM Batch Identifier OEM (मूल उपकरण निरà¥à¤®à¤¾à¤¤à¤¾) बैच पहचानकरà¥à¤¤à¤¾ Could not create directories <code>%1</code>. <code>%1</code> डायरेकà¥à¤Ÿà¤°à¥€ बनाई नहीं जा सकीं। Could not open file <code>%1</code>. <code>%1</code> फाइल खोली नहीं जा सकीं। Could not write to file <code>%1</code>. <code>%1</code> फाइल पर राइट नहीं किया जा सका। InitcpioJob Creating initramfs with mkinitcpio. mkinitcpio के साथ initramfs बनाना। InitramfsJob Creating initramfs. initramfs बनाना। InteractiveTerminalPage Konsole not installed Konsole इंसà¥à¤Ÿà¥‰à¤² नहीं है Please install KDE Konsole and try again! कृपया केडीई Konsole इंसà¥à¤Ÿà¥‰à¤² कर, पà¥à¤¨à¤ƒ पà¥à¤°à¤¯à¤¾à¤¸ करें। Executing script: &nbsp;<code>%1</code> निषà¥à¤ªà¤¾à¤¦à¤¿à¤¤ सà¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿ : &nbsp;<code>%1</code> InteractiveTerminalViewStep Script सà¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿ KeyboardPage Set keyboard model to %1.<br/> कà¥à¤‚जीपटल का मॉडल %1 सेट करें।<br/> Set keyboard layout to %1/%2. कà¥à¤‚जीपटल का अभिनà¥à¤¯à¤¾à¤¸ %1/%2 सेट करें। KeyboardViewStep Keyboard कà¥à¤‚जीपटल LCLocaleDialog System locale setting सिसà¥à¤Ÿà¤® सà¥à¤¥à¤¾à¤¨à¤¿à¤•ी सेटिंगà¥à¤¸ The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. सिसà¥à¤Ÿà¤® सà¥à¤¥à¤¾à¤¨à¤¿à¤•ी सेटिंग कमांड लाइन के कà¥à¤› उपयोकà¥à¤¤à¤¾ अंतरफलक ततà¥à¤µà¥‹à¤‚ की भाषा व अकà¥à¤·à¤° सेट पर असर डालती है।<br/>मौजूदा सेटिंग है <strong>%1</strong>। &Cancel रदà¥à¤¦ करें (&C) &OK ठीक है (&O) LicensePage Form रूप <h1>License Agreement</h1> I accept the terms and conditions above. मैं उपरोकà¥à¤¤ नियम व शरà¥à¤¤à¥‡à¤‚ सà¥à¤µà¥€à¤•ार करता हूà¤à¥¤ Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License लाइसेंस LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 डà¥à¤°à¤¾à¤‡à¤µà¤°</strong><br/>%2 दà¥à¤µà¤¾à¤°à¤¾ <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 गà¥à¤°à¤¾à¥žà¤¿à¤•à¥à¤¸ डà¥à¤°à¤¾à¤‡à¤µà¤°</strong><br/><font color="Grey">%2 दà¥à¤µà¤¾à¤°à¤¾</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 बà¥à¤°à¤¾à¤‰à¥›à¤° पà¥à¤²à¤—िन</strong><br/><font color="Grey">%2 दà¥à¤µà¤¾à¤°à¤¾</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 कोडेक</strong><br/><font color="Grey">%2 दà¥à¤µà¤¾à¤°à¤¾</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 पैकेज</strong><br/><font color="Grey">%2 दà¥à¤µà¤¾à¤°à¤¾</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">%2 दà¥à¤µà¤¾à¤°à¤¾</font> File: %1 Show the license text Open license agreement in browser. Hide license text लाइसेंस लेख छिपाà¤à¤ LocalePage The system language will be set to %1. सिसà¥à¤Ÿà¤® भाषा %1 सेट की जाà¤à¤—ी। The numbers and dates locale will be set to %1. संखà¥à¤¯à¤¾ व दिनांक सà¥à¤¥à¤¾à¤¨à¤¿à¤•ी %1 सेट की जाà¤à¤—ी। Region: कà¥à¤·à¥‡à¤¤à¥à¤° : Zone: ज़ोन : &Change... बदलें (&C)... Set timezone to %1/%2.<br/> समय कà¥à¤·à¥‡à¤¤à¥à¤° %1%2 पर सेट करें।<br/> LocaleViewStep Location सà¥à¤¥à¤¾à¤¨ LuksBootKeyFileJob Configuring LUKS key file. LUKS कà¥à¤‚जी फाइल विनà¥à¤¯à¤¸à¥à¤¤ करना। No partitions are defined. कोई विभाजन परिभाषित नहीं हैं। Encrypted rootfs setup error à¤à¤¨à¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿà¥‡à¤¡ rootfs सेटअप में तà¥à¤°à¥à¤Ÿà¤¿ Root partition %1 is LUKS but no passphrase has been set. रूट विभाजन %1 LUKS है, लेकिन कोई कूटशबà¥à¤¦ सेट नहीं किया गया है। Could not create LUKS key file for root partition %1. रूट विभाजन %1 हेतॠLUKS कà¥à¤‚जी फाइल बनाने में विफल। Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. मशीन-आईडी उतà¥à¤ªà¤¨à¥à¤¨ करना। Configuration Error विनà¥à¤¯à¤¾à¤¸ तà¥à¤°à¥à¤Ÿà¤¿ No root mount point is set for MachineId. NetInstallPage Name नाम Description विवरण Network Installation. (Disabled: Unable to fetch package lists, check your network connection) नेटवरà¥à¤• इंसà¥à¤Ÿà¥‰à¤²à¥¤ (निषà¥à¤•à¥à¤°à¤¿à¤¯ है : पैकेज सूची पà¥à¤°à¤¾à¤ªà¥à¤¤ करने में असमरà¥à¤¥, अपना नेटवरà¥à¤• कनेकà¥à¤¶à¤¨ जाà¤à¤šà¥‡à¤‚) Network Installation. (Disabled: Received invalid groups data) नेटवरà¥à¤• इंसà¥à¤Ÿà¥‰à¤² (निषà¥à¤•à¥à¤°à¤¿à¤¯ है : पà¥à¤°à¤¾à¤ªà¥à¤¤ किया गया समूह डाटा अमानà¥à¤¯ है) Network Installation. (Disabled: Incorrect configuration) NetInstallViewStep Package selection पैकेज चयन Office software Office package Browser software Browser package Web browser Kernel Services Login Desktop Applications NotesQmlViewStep Notes OEMPage Ba&tch: बैच (&t) : <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>यहां à¤à¤• बैच-पहचानकरà¥à¤¤à¤¾ दरà¥à¤œ करें। इसे लकà¥à¤·à¤¿à¤¤ सिसà¥à¤Ÿà¤® में संचित किया जाà¤à¤—ा।</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>OEM (मूल उपकरण निरà¥à¤®à¤¾à¤¤à¤¾) विनà¥à¤¯à¤¾à¤¸ सेटिंगà¥à¤¸</h1><p>लकà¥à¤·à¤¿à¤¤ सिसà¥à¤Ÿà¤® को विनà¥à¤¯à¤¸à¥à¤¤ करते समय Calamares OEM (मूल उपकरण निरà¥à¤®à¤¾à¤¤à¤¾) सेटिंगà¥à¤¸ का उपयोग करेगा।</p></body></html> OEMViewStep OEM Configuration OEM (मूल उपकरण निरà¥à¤®à¤¾à¤¤à¤¾) विनà¥à¤¯à¤¾à¤¸ सेटिंगà¥à¤¸ Set the OEM Batch Identifier to <code>%1</code>. OEM (मूल उपकरण निरà¥à¤®à¤¾à¤¤à¤¾) बैच पहचानकरà¥à¤¤à¤¾ को <code>%1</code>पर सेट करें। PWQ Password is too short कूटशबà¥à¤¦ काफ़ी छोटा है Password is too long कूटशबà¥à¤¦ काफ़ी लंबा है Password is too weak कूटशबà¥à¤¦ काफ़ी कमज़ोर है Memory allocation error when setting '%1' '%1' सेट करते समय मेमोरी आवंटन तà¥à¤°à¥à¤Ÿà¤¿ Memory allocation error मेमोरी आवंटन तà¥à¤°à¥à¤Ÿà¤¿ The password is the same as the old one यह कूटशबà¥à¤¦ पà¥à¤°à¤¾à¤¨à¥‡ वाला ही है The password is a palindrome कूटशबà¥à¤¦ à¤à¤• विलोमपद है The password differs with case changes only इसमें और पिछले कूटशबà¥à¤¦ में केवल lower/upper case का फरà¥à¤• है The password is too similar to the old one यह कूटशबà¥à¤¦ पà¥à¤°à¤¾à¤¨à¥‡ वाले जैसा ही है The password contains the user name in some form इस कूटशबà¥à¤¦ में किसी रूप में उपयोकà¥à¤¤à¤¾ नाम है The password contains words from the real name of the user in some form इस कूटशबà¥à¤¦ में किसी रूप में उपयोकà¥à¤¤à¤¾ के असली नाम के शबà¥à¤¦ शामिल है The password contains forbidden words in some form इस कूटशबà¥à¤¦ में किसी रूप में वरà¥à¤œà¤¿à¤¤ शबà¥à¤¦ है The password contains less than %1 digits इस कूटशबà¥à¤¦ में %1 से कम अंक हैं The password contains too few digits इस कूटशबà¥à¤¦ में काफ़ी कम अंक हैं The password contains less than %1 uppercase letters इस कूटशबà¥à¤¦ में %1 से कम uppercase अकà¥à¤·à¤° हैं The password contains too few uppercase letters इस कूटशबà¥à¤¦ में काफ़ी कम uppercase अकà¥à¤·à¤° हैं The password contains less than %1 lowercase letters इस कूटशबà¥à¤¦ में %1 से कम lowercase अकà¥à¤·à¤° हैं The password contains too few lowercase letters इस कूटशबà¥à¤¦ में काफ़ी कम lowercase अकà¥à¤·à¤° हैं The password contains less than %1 non-alphanumeric characters इस कूटशबà¥à¤¦ में %1 से कम à¤à¤¸à¥‡ अकà¥à¤·à¤° हैं जो अकà¥à¤·à¤°à¤¾à¤‚क नहीं हैं The password contains too few non-alphanumeric characters इस कूटशबà¥à¤¦ में काफ़ी कम अकà¥à¤·à¤°à¤¾à¤‚क हैं The password is shorter than %1 characters कूटशबà¥à¤¦ %1 अकà¥à¤·à¤°à¥‹à¤‚ से छोटा है The password is too short कूटशबà¥à¤¦ काफ़ी छोटा है The password is just rotated old one यह कूटशबà¥à¤¦ पà¥à¤°à¤¾à¤¨à¥‡ वाला ही है, बस घà¥à¤®à¤¾ रखा है The password contains less than %1 character classes इस कूटशबà¥à¤¦ में %1 से कम अकà¥à¤·à¤° classes हैं The password does not contain enough character classes इस कूटशबà¥à¤¦ में नाकाफ़ी अकà¥à¤·à¤° classes हैं The password contains more than %1 same characters consecutively कूटशबà¥à¤¦ में %1 से अधिक समान अकà¥à¤·à¤° लगातार हैं The password contains too many same characters consecutively कूटशबà¥à¤¦ में काफ़ी जà¥à¤¯à¤¾à¤¦à¤¾ समान अकà¥à¤·à¤° लगातार हैं The password contains more than %1 characters of the same class consecutively कूटशबà¥à¤¦ में %1 से अधिक समान अकà¥à¤·à¤° classes लगातार हैं The password contains too many characters of the same class consecutively कूटशबà¥à¤¦ में काफ़ी जà¥à¤¯à¤¾à¤¦à¤¾ à¤à¤• ही class के अकà¥à¤·à¤° लगातार हैं The password contains monotonic sequence longer than %1 characters कूटशबà¥à¤¦ में %1 अकà¥à¤·à¤°à¥‹à¤‚ से लंबा monotonic अनà¥à¤•à¥à¤°à¤® है The password contains too long of a monotonic character sequence कूटशबà¥à¤¦ में काफ़ी बड़ा monotonic अनà¥à¤•à¥à¤°à¤® है No password supplied कोई कूटशबà¥à¤¦ नहीं दिया गया Cannot obtain random numbers from the RNG device RNG डिवाइस से यादृचà¥à¤›à¤¿à¤• अंक नहीं मिल सके Password generation failed - required entropy too low for settings कूटशबà¥à¤¦ बनाना विफल रहा - सेटिंगà¥à¤¸ के लिठआवशà¥à¤¯à¤• à¤à¤¨à¥à¤Ÿà¥à¤°à¤¾à¤ªà¥€ काफ़ी कम है The password fails the dictionary check - %1 कूटशबà¥à¤¦ शबà¥à¤¦à¤•ोश की जाà¤à¤š में विफल रहा - %1 The password fails the dictionary check कूटशबà¥à¤¦ शबà¥à¤¦à¤•ोश की जाà¤à¤š में विफल रहा Unknown setting - %1 अजà¥à¤žà¤¾à¤¤ सेटिंग- %1 Unknown setting अजà¥à¤žà¤¾à¤¤ सेटिंग Bad integer value of setting - %1 सेटिंग का गलत पूरà¥à¤£à¤¾à¤‚क मान - %1 Bad integer value गलत पूरà¥à¤£à¤¾à¤‚क मान Setting %1 is not of integer type सेटिंग %1 पूरà¥à¤£à¤¾à¤‚क नहीं है Setting is not of integer type सेटिंग पूरà¥à¤£à¤¾à¤‚क नहीं है Setting %1 is not of string type सेटिंग %1 सà¥à¤Ÿà¥à¤°à¤¿à¤‚ग नहीं है Setting is not of string type सेटिंग सà¥à¤Ÿà¥à¤°à¤¿à¤‚ग नहीं है Opening the configuration file failed विनà¥à¤¯à¤¾à¤¸ फ़ाइल खोलने में विफल The configuration file is malformed विनà¥à¤¯à¤¾à¤¸ फाइल ख़राब है Fatal failure गंभीर विफलता Unknown error अजà¥à¤žà¤¾à¤¤ तà¥à¤°à¥à¤Ÿà¤¿ Password is empty पासवरà¥à¤¡ खाली है PackageChooserPage Form रूप Product Name उतà¥à¤ªà¤¾à¤¦ का नाम​ TextLabel TextLabel Long Product Description लंबा उतà¥à¤ªà¤¾à¤¦ विवरण Package Selection पैकेज चयन Please pick a product from the list. The selected product will be installed. कृपà¥à¤¯à¤¾ सूची से उतà¥à¤ªà¤¾à¤¦ का चà¥à¤¨à¤¾à¤µ करें। चयनित उतà¥à¤ªà¤¾à¤¦ इंसà¥à¤Ÿà¥‰à¤² किया जायेगा। PackageChooserViewStep Packages पैकेज Page_Keyboard Form रूप Keyboard Model: कà¥à¤‚जीपटल का मॉडल Type here to test your keyboard अपना कà¥à¤‚जीपटल जाà¤à¤šà¤¨à¥‡ के लिठयहां टाइप करें Page_UserSetup Form रूप What is your name? आपका नाम कà¥à¤¯à¤¾ है? What name do you want to use to log in? लॉग इन के लिठआप किस नाम का उपयोग करना चाहते हैं? Choose a password to keep your account safe. अपना अकाउंट सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ रखने हेतॠकूटशबà¥à¤¦ चà¥à¤¨à¥‡à¤‚। <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>à¤à¤• ही कूटशबà¥à¤¦ दो बार दरà¥à¥› करें, ताकि उसे टाइप तà¥à¤°à¥à¤Ÿà¤¿ के लिठजांचा जा सके। à¤à¤• उचित कूटशबà¥à¤¦ में अकà¥à¤·à¤°, अंक व विराम चिनà¥à¤¹à¥‹à¤‚ का मेल होता है, उसमें कम-से-कम आठ अकà¥à¤·à¤° होने चाहिà¤, और उसे नियमित अंतराल पर बदलते रहना चाहिà¤à¥¤</small> What is the name of this computer? इस कंपà¥à¤¯à¥‚टर का नाम ? Your Full Name आपका पूरा नाम​ login लॉगिन <small>This name will be used if you make the computer visible to others on a network.</small> <small>यदि आपका कंपà¥à¤¯à¥‚टर किसी नेटवरà¥à¤• पर दृशà¥à¤¯à¤®à¤¾à¤¨ होता है, तो यह नाम उपयोग किया जाà¤à¤—ा।</small> Computer Name कंपà¥à¤¯à¥‚टर का नाम​ Password कूटशबà¥à¤¦ Repeat Password कूटशबà¥à¤¦ दोबारा दरà¥à¤œ करें When this box is checked, password-strength checking is done and you will not be able to use a weak password. डबà¥à¤¬à¥‡ को चिहà¥à¤¨à¤¿à¤¤ करने पर पासवरà¥à¤¡ की मज़बूती की जांच होगी ओर आप कमज़ोर पासवरà¥à¤¡ उपयोग नही कर पाà¤à¤à¤—े। Require strong passwords. मज़बूत पासवरà¥à¤¡à¤¸ की आवशà¥à¤¯à¤•ता। Log in automatically without asking for the password. कूटशबà¥à¤¦ पूछे बिना सà¥à¤µà¤¤à¤ƒ लॉग इन करें। Use the same password for the administrator account. पà¥à¤°à¤¬à¤‚धक अकाउंट के लिठभी यही कूटशबà¥à¤¦ उपयोग करें। Choose a password for the administrator account. पà¥à¤°à¤¬à¤‚धक अकाउंट हेतॠकूटशबà¥à¤¦ चà¥à¤¨à¥‡à¤‚। <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>समान कूटशबà¥à¤¦ दो बार दरà¥à¤œ करें, ताकि जाà¤à¤š की जा सके कि कहीं टाइपिंग तà¥à¤°à¥à¤Ÿà¤¿ तो नहीं है।</small> PartitionLabelsView Root रà¥à¤Ÿ Home होम Boot बूट EFI system EFI सिसà¥à¤Ÿà¤® Swap सà¥à¤µà¥ˆà¤ª New partition for %1 %1 के लिठनया विभाजन New partition नया विभाजन %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space रिकà¥à¤¤ सà¥à¤ªà¥‡à¤¸ New partition नया विभाजन Name नाम File System फ़ाइल सिसà¥à¤Ÿà¤® Mount Point माउंट पॉइंट Size आकार PartitionPage Form रूप Storage de&vice: सà¥à¤Ÿà¥‹à¤°à¥‡à¤œ डिवाइस (&v): &Revert All Changes सभी बदलाव उलट दें (&R) New Partition &Table नई विभाजन तालिका (&T) Cre&ate बनाà¤à¤ (&a) &Edit संपादित करें (&E) &Delete हटाà¤à¤ (D) New Volume Group नया वॉलà¥à¤¯à¥‚म समूह Resize Volume Group वॉलà¥à¤¯à¥‚म समूह का आकार बदलें Deactivate Volume Group वॉलà¥à¤¯à¥‚म समूह को निषà¥à¤•à¥à¤°à¤¿à¤¯ करें Remove Volume Group वॉलà¥à¤¯à¥‚म समूह को हटाà¤à¤ I&nstall boot loader on: बूट लोडर इंसà¥à¤Ÿà¥‰à¤² करें (&l) : Are you sure you want to create a new partition table on %1? कà¥à¤¯à¤¾ आप वाकई %1 पर à¤à¤• नई विभाजन तालिका बनाना चाहते हैं? Can not create new partition नया विभाजन बनाया नहीं जा सका The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. %1 पर विभाजन तालिका में पहले से ही %2 मà¥à¤–à¥à¤¯ विभाजन हैं व और अधिक नहीं जोड़ें जा सकते। कृपया à¤à¤• मà¥à¤–à¥à¤¯ विभाजन को हटाकर उसके सà¥à¤¥à¤¾à¤¨ पर à¤à¤• विसà¥à¤¤à¥ƒà¤¤ विभाजन जोड़ें। PartitionViewStep Gathering system information... सिसà¥à¤Ÿà¤® की जानकारी पà¥à¤°à¤¾à¤ªà¥à¤¤ की जा रही है... Partitions विभाजन Install %1 <strong>alongside</strong> another operating system. %1 को दूसरे ऑपरेटिंग सिसà¥à¤Ÿà¤® <strong>के साथ</strong> इंसà¥à¤Ÿà¥‰à¤² करें। <strong>Erase</strong> disk and install %1. डिसà¥à¤• का सारा डाटा<strong>हटाकर</strong> कर %1 इंसà¥à¤Ÿà¥‰à¤² करें। <strong>Replace</strong> a partition with %1. विभाजन को %1 से <strong>बदलें</strong>। <strong>Manual</strong> partitioning. <strong>मैनà¥à¤…ल</strong> विभाजन। Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). डिसà¥à¤• <strong>%2</strong> (%3) पर %1 को दूसरे ऑपरेटिंग सिसà¥à¤Ÿà¤® <strong>के साथ</strong> इंसà¥à¤Ÿà¥‰à¤² करें। <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. डिसà¥à¤• <strong>%2</strong> (%3) <strong>erase</strong> कर %1 इंसà¥à¤Ÿà¥‰à¤² करें। <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. डिसà¥à¤• <strong>%2</strong> (%3) के विभाजन को %1 से <strong>बदलें</strong>। <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). डिसà¥à¤• <strong>%1</strong> (%2) पर <strong>मैनà¥à¤…ल</strong> विभाजन। Disk <strong>%1</strong> (%2) डिसà¥à¤• <strong>%1</strong> (%2) Current: मौजूदा : After: बाद में : No EFI system partition configured कोई EFI सिसà¥à¤Ÿà¤® विभाजन विनà¥à¤¯à¤¸à¥à¤¤ नहीं है An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. %1 को शà¥à¤°à¥‚ करने हेतॠEFI सिसà¥à¤Ÿà¤® विभाजन ज़रूरी है।<br/><br/>EFI सिसà¥à¤Ÿà¤® विभाजन को विनà¥à¤¯à¤¸à¥à¤¤ करने के लिà¤, वापस जाà¤à¤ और चà¥à¤¨à¥‡à¤‚ या बनाà¤à¤ à¤à¤• FAT32 फ़ाइल सिसà¥à¤Ÿà¤® जिस पर <strong>esp</strong> flag चालू हो व माउंट पॉइंट <strong>%2</strong>हो।<br/><br/>आप बिना सेट भी आगे बॠसकते है पर सिसà¥à¤Ÿà¤® चालू नहीं होगा। EFI system partition flag not set EFI सिसà¥à¤Ÿà¤® विभाजन फà¥à¤²à¥ˆà¤— सेट नहीं है An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. %1 को शà¥à¤°à¥‚ करने हेतॠEFI सिसà¥à¤Ÿà¤® विभाजन ज़रूरी है।<br/><br/>विभाजन को माउंट पॉइंट <strong>%2</strong> के साथ विनà¥à¤¯à¤¸à¥à¤¤ किया गया परंतॠउसका <strong>esp</strong> फà¥à¤²à¥ˆà¤— सेट नहीं था।<br/> फà¥à¤²à¥ˆà¤— सेट करने के लिà¤, वापस जाà¤à¤ और विभाजन को edit करें।<br/><br/>आप बिना सेट भी आगे बॠसकते है पर सिसà¥à¤Ÿà¤® चालू नहीं होगा। Boot partition not encrypted बूट विभाजन à¤à¤¨à¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿà¥‡à¤¡ नहीं है A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. à¤à¤¨à¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿà¥‡à¤¡ रà¥à¤Ÿ विभाजन के साथ à¤à¤• अलग बूट विभाजन भी सेट किया गया था, पर बूट विभाजन à¤à¤¨à¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿà¥‡à¤¡ नहीं था।<br/><br/> इस तरह का सेटअप सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ नहीं होता कà¥à¤¯à¥‹à¤‚कि सिसà¥à¤Ÿà¤® फ़ाइल à¤à¤¨à¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿà¥‡à¤¡ विभाजन पर होती हैं।<br/>आप चाहे तो जारी रख सकते है, पर फिर फ़ाइल सिसà¥à¤Ÿà¤® बाद में सिसà¥à¤Ÿà¤® सà¥à¤Ÿà¤¾à¤°à¥à¤Ÿà¤…प के दौरान अनलॉक होगा।<br/> विभाजन को à¤à¤¨à¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿ करने के लिठवापस जाकर उसे दोबारा बनाà¤à¤ व विभाजन निरà¥à¤®à¤¾à¤£ विंडो में<strong>à¤à¤¨à¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿ</strong> चà¥à¤¨à¥‡à¤‚। has at least one disk device available. कम-से-कम à¤à¤• डिसà¥à¤• डिवाइस उपलबà¥à¤§ हो। There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job पà¥à¤²à¤¾à¥›à¥à¤®à¤¾ Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package KDE पà¥à¤²à¤¾à¥›à¥à¤®à¤¾ का Look-and-Feel पैकेज चà¥à¤¨à¤¾ नहीं जा सका PlasmaLnfPage Form रूप Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. कृपया केडीई पà¥à¤²à¤¾à¥›à¥à¤®à¤¾ डेसà¥à¤•टॉप के लिठà¤à¤• look-and-feel चà¥à¤¨à¥‡à¤‚। आप अभी इस चरण को छोड़ सकते हैं व सिसà¥à¤Ÿà¤® सेटअप होने के उपरांत इसे सेट कर सकते हैं। look-and-feel विकलà¥à¤ªà¥‹à¤‚ पर कà¥à¤²à¤¿à¤• कर आप चयनित look-and-feel का तà¥à¤°à¤‚त ही पूरà¥à¤µà¤¾à¤µà¤²à¥‹à¤•न कर सकते हैं। Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. कृपया KDE पà¥à¤²à¤¾à¥›à¥à¤®à¤¾ डेसà¥à¤•टॉप के लिठà¤à¤• look-and-feel चà¥à¤¨à¥‡à¤‚। आप अभी इस चरण को छोड़ सकते हैं व सिसà¥à¤Ÿà¤® इंसà¥à¤Ÿà¥‰à¤² हो जाने के बाद इसे सेट कर सकते हैं। look-and-feel विकलà¥à¤ªà¥‹à¤‚ पर कà¥à¤²à¤¿à¤• कर आप चयनित look-and-feel का तà¥à¤°à¤‚त ही पूरà¥à¤µà¤¾à¤µà¤²à¥‹à¤•न कर सकते हैं। PlasmaLnfViewStep Look-and-Feel Look-and-Feel PreserveFiles Saving files for later ... बाद के लिठफाइलों को संचित किया जा है... No files configured to save for later. बाद में संचित करने हेतॠकोई फाइल विनà¥à¤¯à¤¸à¥à¤¤ नहीं की गई है। Not all of the configured files could be preserved. विनà¥à¤¯à¤¸à¥à¤¤ की गई सभी फाइलें संचित नहीं की जा सकी। ProcessResult There was no output from the command. कमांड से कोई आउटपà¥à¤Ÿ नहीं मिला। Output: आउटपà¥à¤Ÿ : External command crashed. बाहà¥à¤¯ कमांड कà¥à¤°à¥ˆà¤¶ हो गई। Command <i>%1</i> crashed. कमांड <i>%1</i> कà¥à¤°à¥ˆà¤¶ हो गई। External command failed to start. बाहà¥à¤¯â€‹ कमांड शà¥à¤°à¥‚ होने में विफल। Command <i>%1</i> failed to start. कमांड <i>%1</i> शà¥à¤°à¥‚ होने में विफल। Internal error when starting command. कमांड शà¥à¤°à¥‚ करते समय आंतरिक तà¥à¤°à¥à¤Ÿà¤¿à¥¤ Bad parameters for process job call. पà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ कारà¥à¤¯ कॉल के लिठगलत मापदंड। External command failed to finish. बाहरी कमांड समापà¥à¤¤ करने में विफल। Command <i>%1</i> failed to finish in %2 seconds. कमांड <i>%1</i> %2 सेकंड में समापà¥à¤¤ होने में विफल। External command finished with errors. बाहरी कमांड तà¥à¤°à¥à¤Ÿà¤¿ के साथ समापà¥à¤¤à¥¤ Command <i>%1</i> finished with exit code %2. कमांड <i>%1</i> exit कोड %2 के साथ समापà¥à¤¤à¥¤ QObject Default Keyboard Model डिफ़ॉलà¥à¤Ÿ कà¥à¤‚जीपटल मॉडल Default डिफ़ॉलà¥à¤Ÿ unknown अजà¥à¤žà¤¾à¤¤ extended विसà¥à¤¤à¥ƒà¤¤ unformatted फॉरà¥à¤®à¥‡à¤Ÿ नहीं हो रखा है swap सà¥à¤µà¥ˆà¤ª Unpartitioned space or unknown partition table अविभाजित सà¥à¤ªà¥‡à¤¸ या अजà¥à¤žà¤¾à¤¤ विभाजन तालिका (no mount point) (कोई माउंट पॉइंट नहीं) Requirements checking for module <i>%1</i> is complete. मापांक <i>%1</i> हेतॠआवशà¥à¤¯à¤•ताओं की जाà¤à¤š पूरà¥à¤£ हà¥à¤ˆà¥¤ %1 (%2) language[name] (country[name]) %1 (%2) No product कोई उतà¥à¤ªà¤¾à¤¦ नहीं No description provided. कोई विवरण मौजूद नहीं File not found फाइल नहीं मिली Path <pre>%1</pre> must be an absolute path. Could not create new random file <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. %1 नामक वॉलà¥à¤¯à¥‚म समूह हटाà¤à¤à¥¤ Remove Volume Group named <strong>%1</strong>. <strong>%1</strong> नामक वॉलà¥à¤¯à¥‚म समूह हटाà¤à¤à¥¤ The installer failed to remove a volume group named '%1'. इंसà¥à¤Ÿà¤¾à¤²à¤° '%1' नामक वॉलà¥à¤¯à¥‚म समूह को हटाने में विफल रहा। ReplaceWidget Form रूप Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. चà¥à¤¨à¥‡à¤‚ कि %1 को कहाठइंसà¥à¤Ÿà¥‰à¤² करना है।<br/><font color="red">चेतावनी : </font> यह चयनित विभाजन पर मौजूद सभी फ़ाइलों को हटा देगा। The selected item does not appear to be a valid partition. चयनित आइटम à¤à¤• मानà¥à¤¯ विभाजन नहीं है। %1 cannot be installed on empty space. Please select an existing partition. %1 को खाली सà¥à¤ªà¥‡à¤¸ पर इंसà¥à¤Ÿà¥‰à¤² नहीं किया जा सकता। कृपया कोई मौजूदा विभाजन चà¥à¤¨à¥‡à¤‚। %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 को विसà¥à¤¤à¥ƒà¤¤ विभाजन पर इंसà¥à¤Ÿà¥‰à¤² नहीं किया जा सकता। कृपया कोई मौजूदा मà¥à¤–à¥à¤¯ या तारà¥à¤•िक विभाजन चà¥à¤¨à¥‡à¤‚। %1 cannot be installed on this partition. इस विभाजन पर %1 इंसà¥à¤Ÿà¥‰à¤² नहीं किया जा सकता। Data partition (%1) डाटा विभाजन (%1) Unknown system partition (%1) अजà¥à¤žà¤¾à¤¤ सिसà¥à¤Ÿà¤® विभाजन (%1) %1 system partition (%2) %1 सिसà¥à¤Ÿà¤® विभाजन (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>%2 के लिठविभाजन %1 काफ़ी छोटा है। कृपया कम-से-कम %3 GiB की कà¥à¤·à¤®à¤¤à¤¾ वाला कोई विभाजन चà¥à¤¨à¥‡à¤‚। <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/>इस सिसà¥à¤Ÿà¤® पर कहीं भी कोई EFI सिसà¥à¤Ÿà¤® विभाजन नहीं मिला। कृपया वापस जाà¤à¤ व %1 को सेट करने के लिठमैनà¥à¤…ल रूप से विभाजन करें। <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>%2 पर %1 इंसà¥à¤Ÿà¥‰à¤² किया जाà¤à¤—ा।<br/><font color="red">चेतावनी : </font>विभाजन %2 पर मौजूद सारा डाटा हटा दिया जाà¤à¤—ा। The EFI system partition at %1 will be used for starting %2. %1 वाले EFI सिसà¥à¤Ÿà¤® विभाजन का उपयोग %2 को शà¥à¤°à¥‚ करने के लिठकिया जाà¤à¤—ा। EFI system partition: EFI सिसà¥à¤Ÿà¤® विभाजन : ResizeFSJob Resize Filesystem Job फ़ाइल सिसà¥à¤Ÿà¤® कारà¥à¤¯ का आकार बदलें Invalid configuration अमानà¥à¤¯ विनà¥à¤¯à¤¾à¤¸ The file-system resize job has an invalid configuration and will not run. फाइल सिसà¥à¤Ÿà¤® का आकार बदलने हेतॠकारà¥à¤¯ का विनà¥à¤¯à¤¾à¤¸ अमानà¥à¤¯ है व यह नहीं चलेगा। KPMCore not Available KPMCore उपलबà¥à¤§ नहीं है Calamares cannot start KPMCore for the file-system resize job. Calamares फाइल सिसà¥à¤Ÿà¤® का आकार बदलने कारà¥à¤¯ हेतॠKPMCore को आरंभ नहीं कर सका। Resize Failed आकार बदलना विफल रहा The filesystem %1 could not be found in this system, and cannot be resized. इस सिसà¥à¤Ÿà¤® पर फाइल सिसà¥à¤Ÿà¤® %1 नहीं मिला, व उसका आकार बदला नहीं जा सकता। The device %1 could not be found in this system, and cannot be resized. इस सिसà¥à¤Ÿà¤® पर डिवाइस %1 नहीं मिला, व उसका आकार बदला नहीं जा सकता। The filesystem %1 cannot be resized. फाइल सिसà¥à¤Ÿà¤® %1 का आकार बदला नहीं जा सकता। The device %1 cannot be resized. डिवाइस %1 का आकार बदला नहीं जा सकता। The filesystem %1 must be resized, but cannot. फाइल सिसà¥à¤Ÿà¤® %1 का आकार बदला जाना चाहिठलेकिन बदला नहीं जा सकता। The device %1 must be resized, but cannot डिवाइस %1 का आकार बदला जाना चाहिठलेकिन बदला नहीं जा सकता ResizePartitionJob Resize partition %1. विभाजन %1 का आकार बदलें। Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. <strong>%2MiB</strong> के <strong>%1</strong> विभाजन का आकार बदलकर <strong>%3MiB</strong> करें। Resizing %2MiB partition %1 to %3MiB. %2MiB के %1 विभाजन का आकार बदलकर %3MiB किया जा रहा है। The installer failed to resize partition %1 on disk '%2'. इंसà¥à¤Ÿà¥‰à¤²à¤° डिसà¥à¤• '%2' पर विभाजन %1 का आकर बदलने में विफल रहा। ResizeVolumeGroupDialog Resize Volume Group वॉलà¥à¤¯à¥‚म समूह का आकार बदलें ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. %1 नामक वॉलà¥à¤¯à¥‚म समूह का आकार %2 से बदलकर %3 करें। Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. <strong>%1</strong> नामक वॉलà¥à¤¯à¥‚म समूह का आकार <strong>%2</strong> से बदलकर <strong>%3</strong> करें। The installer failed to resize a volume group named '%1'. इंसà¥à¤Ÿà¤¾à¤²à¤° '%1' नाम के वॉलà¥à¤¯à¥‚म समूह का आकार बदलने में विफल रहा। ResultsListDialog For best results, please ensure that this computer: उतà¥à¤¤à¤® परिणाम हेतà¥, कृपया सà¥à¤¨à¤¿à¤¶à¥à¤šà¤¿à¤¤ करें कि यह कंपà¥à¤¯à¥‚टर : System requirements सिसà¥à¤Ÿà¤® इंसà¥à¤Ÿà¥‰à¤² हेतॠआवशà¥à¤¯à¤•ताà¤à¤ ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> यह कंपà¥à¤¯à¥‚टर %1 को सेटअप करने की नà¥à¤¯à¥‚नतम आवशà¥à¤¯à¤•ताओं को पूरा नहीं करता।<br/>सेटअप जारी नहीं रखा जा सकता।<a href="#details">विवरण...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> यह कंपà¥à¤¯à¥‚टर %1 को इंसà¥à¤Ÿà¥‰à¤² करने की नà¥à¤¯à¥‚नतम आवशà¥à¤¯à¤•ताओं को पूरा नहीं करता।<br/>इंसà¥à¤Ÿà¥‰à¤² जारी नहीं रखा जा सकता।<a href="#details">विवरण...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. यह कंपà¥à¤¯à¥‚टर %1 को सेटअप करने हेतॠसà¥à¤à¤¾à¤ˆ गई आवशà¥à¤¯à¤•ताओं को पूरा नहीं करता।<br/>सेटअप जारी रखा जा सकता है, लेकिन कà¥à¤› विशेषताà¤à¤ को निषà¥à¤•à¥à¤°à¤¿à¤¯ किया जा सकता हैं। This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. यह कंपà¥à¤¯à¥‚टर %1 को इंसà¥à¤Ÿà¥‰à¤² करने हेतॠसà¥à¤à¤¾à¤ˆ गई आवशà¥à¤¯à¤•ताओं को पूरा नहीं करता।<br/>इंसà¥à¤Ÿà¥‰à¤² जारी रखा जा सकता है, लेकिन कà¥à¤› विशेषताà¤à¤ को निषà¥à¤•à¥à¤°à¤¿à¤¯ किया जा सकता हैं। This program will ask you some questions and set up %2 on your computer. यह पà¥à¤°à¥‹à¤—à¥à¤°à¤¾à¤® à¤à¤• पà¥à¤°à¤¶à¥à¤¨à¤¾à¤µà¤²à¥€ के आधार पर आपके कंपà¥à¤¯à¥‚टर पर %2 को सेट करेगा। ScanningDialog Scanning storage devices... डिवाइस सà¥à¤•ैन किठजा रहे हैं... Partitioning विभाजन SetHostNameJob Set hostname %1 होसà¥à¤Ÿ नाम %1 सेट करें। Set hostname <strong>%1</strong>. होसà¥à¤Ÿ नाम <strong>%1</strong> सेट करें। Setting hostname %1. होसà¥à¤Ÿ नाम %1 सेट हो रहा है। Internal Error आंतरिक तà¥à¤°à¥à¤Ÿà¤¿ Cannot write hostname to target system लकà¥à¤·à¤¿à¤¤ सिसà¥à¤Ÿà¤® पर होसà¥à¤Ÿ नाम लिखा नहीं जा सकता। SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 कà¥à¤‚जीपटल का मॉडल %1, अभिनà¥à¤¯à¤¾à¤¸ %2-%3 सेट करें। Failed to write keyboard configuration for the virtual console. वरà¥à¤šà¥à¤…ल कंसोल हेतॠकà¥à¤‚जीपटल की सेटिंगà¥à¤¸ राइट करने में विफल रहा। Failed to write to %1 %1 पर राइट करने में विफल Failed to write keyboard configuration for X11. X11 हेतॠकà¥à¤‚जीपटल की सेटिंगà¥à¤¸ राइट करने में विफल रहा। Failed to write keyboard configuration to existing /etc/default directory. मौजूदा /etc /default डायरेकà¥à¤Ÿà¤°à¥€ में कà¥à¤‚जीपटल की सेटिंगà¥à¤¸ राइट करने में विफल रहा। SetPartFlagsJob Set flags on partition %1. %1 विभाजन पर फà¥à¤²à¥ˆà¤— सेट करें। Set flags on %1MiB %2 partition. %1MiB के %2 विभाजन पर फà¥à¤²à¥ˆà¤— सेट करें। Set flags on new partition. नठविभाजन पर फà¥à¤²à¥ˆà¤— सेट करें। Clear flags on partition <strong>%1</strong>. <strong>%1</strong> विभाजन पर से फà¥à¤²à¥ˆà¤— हटाà¤à¤à¥¤ Clear flags on %1MiB <strong>%2</strong> partition. %1MiB के <strong>%2</strong> विभाजन पर से फà¥à¤²à¥ˆà¤— हटाà¤à¤à¥¤ Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. %1MiB के <strong>%2</strong> विभाजन पर <strong>%3</strong> का फà¥à¤²à¥ˆà¤— लगाà¤à¤à¥¤ Clearing flags on %1MiB <strong>%2</strong> partition. %1MiB के <strong>%2</strong> विभाजन पर से फà¥à¤²à¥ˆà¤— हटाà¤à¤ जा रहे हैं। Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. %1MiB के <strong>%2</strong> विभाजन पर फà¥à¤²à¥ˆà¤— <strong>%3</strong> सेट किठजा रहे हैं। Clear flags on new partition. नठविभाजन पर से फà¥à¤²à¥ˆà¤— हटाà¤à¤à¥¤ Flag partition <strong>%1</strong> as <strong>%2</strong>. <strong>%1</strong> विभाजन पर <strong>%2</strong> का फà¥à¤²à¥ˆà¤— लगाà¤à¤à¥¤ Flag new partition as <strong>%1</strong>. नठविभाजन पर<strong>%1</strong>का फà¥à¤²à¥ˆà¤— लगाà¤à¤à¥¤ Clearing flags on partition <strong>%1</strong>. <strong>%1</strong> विभाजन पर से फà¥à¤²à¥ˆà¤— हटाà¤à¤ जा रहे हैं। Clearing flags on new partition. नठविभाजन पर से फà¥à¤²à¥ˆà¤— हटाà¤à¤ जा रहे हैं। Setting flags <strong>%2</strong> on partition <strong>%1</strong>. <strong>%1</strong> विभाजन पर फà¥à¤²à¥ˆà¤— <strong>%2</strong> सेट किठजा रहे हैं। Setting flags <strong>%1</strong> on new partition. नठविभाजन पर फà¥à¤²à¥ˆà¤— <strong>%1</strong> सेट किठजा रहे हैं। The installer failed to set flags on partition %1. इंसà¥à¤Ÿà¥‰à¤²à¤° विभाजन %1 पर फà¥à¤²à¥ˆà¤— सेट करने में विफल रहा। SetPasswordJob Set password for user %1 उपयोकà¥à¤¤à¤¾ %1 के लिठपासवरà¥à¤¡ सेट करें। Setting password for user %1. उपयोकà¥à¤¤à¤¾ %1 के लिठपासवरà¥à¤¡ सेट किया जा रहा है। Bad destination system path. लकà¥à¤·à¥à¤¯ का सिसà¥à¤Ÿà¤® पथ गलत है। rootMountPoint is %1 रूट माउंट पॉइंट %1 है Cannot disable root account. रà¥à¤Ÿ अकाउंट निषà¥à¤•à¥à¤°à¤¿à¤¯ नहीं किया जा सकता । passwd terminated with error code %1. passwd तà¥à¤°à¥à¤Ÿà¤¿ कोड %1 के साथ समापà¥à¤¤à¥¤ Cannot set password for user %1. उपयोकà¥à¤¤à¤¾ %1 हेतॠपासवरà¥à¤¡ सेट नहीं किया जा सकता। usermod terminated with error code %1. usermod तà¥à¤°à¥à¤Ÿà¤¿ कोड %1 के साथ समापà¥à¤¤à¥¤ SetTimezoneJob Set timezone to %1/%2 समय कà¥à¤·à¥‡à¤¤à¥à¤° %1%2 पर सेट करें Cannot access selected timezone path. चयनित समय कà¥à¤·à¥‡à¤¤à¥à¤° पथ तक पहà¥à¤à¤šà¤¾ नहीं जा सका। Bad path: %1 गलत पथ: %1 Cannot set timezone. समय कà¥à¤·à¥‡à¤¤à¥à¤° सेट नहीं हो सका। Link creation failed, target: %1; link name: %2 लिंक बनाना विफल, लकà¥à¤·à¥à¤¯: %1; लिंक का नाम: %2 Cannot set timezone, समय कà¥à¤·à¥‡à¤¤à¥à¤° सेट नहीं हो सका, Cannot open /etc/timezone for writing राइट करने हेतॠ/etc /timezone खोला नहीं जा सका ShellProcessJob Shell Processes Job शेल पà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ कारà¥à¤¯ SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage This is an overview of what will happen once you start the setup procedure. यह à¤à¤• अवलोकन है कि सेटअप पà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ आरंभ होने के उपरांत कà¥à¤¯à¤¾ होगा। This is an overview of what will happen once you start the install procedure. यह अवलोकन है कि इंसà¥à¤Ÿà¥‰à¤² शà¥à¤°à¥‚ होने के बाद कà¥à¤¯à¤¾ होगा। SummaryViewStep Summary सारांश TrackingInstallJob Installation feedback इंसà¥à¤Ÿà¥‰à¤² संबंधी पà¥à¤°à¤¤à¤¿à¤•à¥à¤°à¤¿à¤¯à¤¾ Sending installation feedback. इंसà¥à¤Ÿà¥‰à¤² संबंधी पà¥à¤°à¤¤à¤¿à¤•à¥à¤°à¤¿à¤¯à¤¾ भेजना। Internal error in install-tracking. इंसà¥à¤Ÿà¥‰à¤²-टà¥à¤°à¥ˆà¤•िंग में आंतरिक तà¥à¤°à¥à¤Ÿà¤¿à¥¤ HTTP request timed out. à¤à¤šà¤Ÿà¥€à¤Ÿà¥€à¤ªà¥€ अनà¥à¤°à¥‹à¤§ हेतॠसमय समापà¥à¤¤à¥¤ TrackingMachineNeonJob Machine feedback मशीन संबंधी पà¥à¤°à¤¤à¤¿à¤•à¥à¤°à¤¿à¤¯à¤¾ Configuring machine feedback. मशीन संबंधी पà¥à¤°à¤¤à¤¿à¤•à¥à¤°à¤¿à¤¯à¤¾ विनà¥à¤¯à¤¸à¥à¤¤ करना। Error in machine feedback configuration. मशीन संबंधी पà¥à¤°à¤¤à¤¿à¤•à¥à¤°à¤¿à¤¯à¤¾ विनà¥à¤¯à¤¾à¤¸ में तà¥à¤°à¥à¤Ÿà¤¿à¥¤ Could not configure machine feedback correctly, script error %1. मशीन पà¥à¤°à¤¤à¤¿à¤•à¥à¤°à¤¿à¤¯à¤¾ को सही रूप से विनà¥à¤¯à¤¸à¥à¤¤ नहीं किया जा सका, सà¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿ तà¥à¤°à¥à¤Ÿà¤¿ %1। Could not configure machine feedback correctly, Calamares error %1. मशीन पà¥à¤°à¤¤à¤¿à¤•à¥à¤°à¤¿à¤¯à¤¾ को सही रूप से विनà¥à¤¯à¤¸à¥à¤¤ नहीं किया जा सका, Calamares तà¥à¤°à¥à¤Ÿà¤¿ %1। TrackingPage Form रूप Placeholder पà¥à¤²à¥‡à¤¸à¤¹à¥‹à¤²à¥à¤¡à¤° <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>इसे चयनित करने पर, आपके इंसà¥à¤Ÿà¥‰à¤² संबंधी <span style=" font-weight:600;">किसी पà¥à¤°à¤•ार की कोई जानकारी नहीं </span>भेजी जाà¤à¤à¤—ी।</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">उपयोकà¥à¤¤à¤¾ पà¥à¤°à¤¤à¤¿à¤•à¥à¤°à¤¿à¤¯à¤¾ के बारे में अधिक जानकारी हेतॠयहाठकà¥à¤²à¤¿à¤• करें</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. इंसà¥à¤Ÿà¥‰à¤² की टà¥à¤°à¥ˆà¤•िंग करने से %1 को यह जानने में सहायता मिलती है कि उनके कितने उपयोकà¥à¤¤à¤¾ हैं, वे किस हारà¥à¤¡à¤µà¥‡à¤¯à¤° पर %1 को इंसà¥à¤Ÿà¥‰à¤² करते हैं à¤à¤µà¤‚ (नीचे दिठअंतिम दो विकलà¥à¤ªà¥‹à¤‚ सहित), पसंदीदा अनà¥à¤ªà¥à¤°à¤¯à¥‹à¤—ों के बारे में निरंतर जानकारी पà¥à¤°à¤¾à¤ªà¥à¤¤ करते हैं। यह जानने हेतॠकि कà¥à¤¯à¤¾ भेजा जाà¤à¤—ा, कृपया पà¥à¤°à¤¤à¥à¤¯à¥‡à¤• कà¥à¤·à¥‡à¤¤à¥à¤° के साथ में दिठसहायता आइकन पर कà¥à¤²à¤¿à¤• करें। By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. इसे चयनित करने पर आपके इंसà¥à¤Ÿà¥‰à¤² व हारà¥à¤¡à¤µà¥‡à¤¯à¤° संबंधी जानकारी भेजी जाà¤à¤à¤—ी। यह जानकारी इंसà¥à¤Ÿà¥‰à¤² समापà¥à¤¤ हो जाने के उपरांत <b>केवल à¤à¤• बार ही</b> भेजी जाà¤à¤—ी। By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. इसे चयनित करने पर आपके इंसà¥à¤Ÿà¥‰à¤², हारà¥à¤¡à¤µà¥‡à¤¯à¤° व अनà¥à¤ªà¥à¤°à¤¯à¥‹à¤—ों संबंधी जानकारी <b>समय-समय पर</b>, %1 को भेजी जाà¤à¤à¤—ी। By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. इसे चयनित करने पर आपके इंसà¥à¤Ÿà¥‰à¤², हारà¥à¤¡à¤µà¥‡à¤¯à¤°, अनà¥à¤ªà¥à¤°à¤¯à¥‹à¤—ों व उपयोकà¥à¤¤à¤¾ पà¥à¤°à¤¤à¤¿à¤®à¤¾à¤¨à¥‹à¤‚ संबंधी जानकारी <b>समय-समय पर</b>, %1 को भेजी जाà¤à¤à¤—ी। TrackingViewStep Feedback पà¥à¤°à¤¤à¤¿à¤•à¥à¤°à¤¿à¤¯à¤¾ UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>यदि à¤à¤• से अधिक वà¥à¤¯à¤•à¥à¤¤à¤¿ इस कंपà¥à¤¯à¥‚टर का उपयोग करेंगे, तो आप सेटअप के उपरांत à¤à¤•ाधिक अकाउंट बना सकते हैं।</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>यदि à¤à¤• से अधिक वà¥à¤¯à¤•à¥à¤¤à¤¿ इस कंपà¥à¤¯à¥‚टर का उपयोग करेंगे, तो आप इंसà¥à¤Ÿà¥‰à¤² के उपरांत à¤à¤•ाधिक अकाउंट बना सकते हैं।</small> Your username is too long. आपका उपयोकà¥à¤¤à¤¾ नाम काफ़ी लंबा है। Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Only letters, numbers, underscore and hyphen are allowed. Your hostname is too short. आपका होसà¥à¤Ÿ नाम काफ़ी छोटा है। Your hostname is too long. आपका होसà¥à¤Ÿ नाम काफ़ी लंबा है। Your passwords do not match! आपके कूटशबà¥à¤¦ मेल नहीं खाते! UsersViewStep Users उपयोकà¥à¤¤à¤¾ VariantModel Key Value VolumeGroupBaseDialog Create Volume Group वॉलà¥à¤¯à¥‚म समूह बनाà¤à¤ List of Physical Volumes वॉलà¥à¤¯à¥‚म समूहों की सूची Volume Group Name: वॉलà¥à¤¯à¥‚म समूह का नाम : Volume Group Type: वॉलà¥à¤¯à¥‚म समूह का पà¥à¤°à¤•ार : Physical Extent Size: डिसà¥à¤• बà¥à¤²à¥‰à¤• की आकार सीमा : MiB MiB Total Size: कà¥à¤² आकार : Used Size: पà¥à¤°à¤¯à¥à¤•à¥à¤¤ आकार : Total Sectors: कà¥à¤² सेकà¥à¤Ÿà¤° : Quantity of LVs: तारà¥à¤•िक वॉलà¥à¤¯à¥‚म की मातà¥à¤°à¤¾ : WelcomePage Form रूप Select application and system language à¤à¤ªà¥à¤²à¤¿à¤•ेशन व सिसà¥à¤Ÿà¤® भाषा चà¥à¤¨à¥‡à¤‚ Open donations website दान करने की वेबसाइट खोलें &Donate &दान करें Open help and support website मदद व सहायता की वेबसाइट खोलें Open issues and bug-tracking website समसà¥à¤¯à¤¾ व तà¥à¤°à¥à¤¤à¤¿ निगरानी की वेबसाइट खोलें Open release notes website &Release notes रिलीज़ नोटà¥à¤¸ (&R) &Known issues जà¥à¤žà¤¾à¤¤ समसà¥à¤¯à¤¾à¤à¤ (&K) &Support सहायता (&S) &About बारे में (&A) <h1>Welcome to the %1 installer.</h1> <h1>%1 इंसà¥à¤Ÿà¥‰à¤²à¤° में आपका सà¥à¤µà¤¾à¤—त है।</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>%1 के लिठCalamares इंसà¥à¤Ÿà¥‰à¤²à¤° में आपका सà¥à¤µà¤¾à¤—त है।</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>%1 हेतॠCalamares सेटअप में आपका सà¥à¤µà¤¾à¤—त है।</h1> <h1>Welcome to %1 setup.</h1> <h1>%1 सेटअप में आपका सà¥à¤µà¤¾à¤—त है।</h1> About %1 setup %1 सेटअप के बारे में About %1 installer %1 इंसà¥à¤Ÿà¥‰à¤²à¤° के बारे में <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. <h1>%1</h1><br/><strong>%2<br/>के लिठ%3</strong><br/><br/>पà¥à¤°à¤¤à¤¿à¤²à¤¿à¤ªà¥à¤¯à¤¾à¤§à¤¿à¤•ार 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>पà¥à¤°à¤¤à¤¿à¤²à¤¿à¤ªà¥à¤¯à¤¾à¤§à¤¿à¤•ार 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/><a href="https://calamares.io/team/">Calamares टीम</a> व <a href="https://www.transifex.com/calamares/calamares/">Calamares अनà¥à¤µà¤¾à¤¦à¤• टीम</a> का धनà¥à¤¯à¤µà¤¾à¤¦à¥¤<br/><br/><a href="https://calamares.io/">Calamares</a> का विकास <br/><a href="http://www.blue-systems.com/">बà¥à¤²à¥‚ सिसà¥à¤Ÿà¤®à¥à¤¸</a> - लिबà¥à¤°à¥‡à¤Ÿà¤¿à¤‚ग सॉफà¥à¤Ÿà¤µà¥‡à¤¯à¤° दà¥à¤µà¤¾à¤°à¤¾ पà¥à¤°à¤¾à¤¯à¥‹à¤œà¤¿à¤¤ है। %1 support %1 सहायता WelcomeQmlViewStep Welcome सà¥à¤µà¤¾à¤—त है WelcomeViewStep Welcome सà¥à¤µà¤¾à¤—त है notesqml <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> About Support Known issues Release notes Donate calamares-3.2.20/lang/calamares_hr.ts000066400000000000000000005520071362604102500174500ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. <strong>Boot okruženje</strong> sustava.<br><br>Stariji x86 sustavi jedino podržavaju <strong>BIOS</strong>.<br>Noviji sustavi uglavnom koriste <strong>EFI</strong>, ali mogu podržavati i BIOS ako su pokrenuti u naÄinu kompatibilnosti. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. Ovaj sustav koristi <strong>EFI</strong> okruženje.<br><br>Za konfiguriranje pokretanja iz EFI okruženja, ovaj instalacijski program mora uvesti boot uÄitavaÄ, kao Å¡to je <strong>GRUB</strong> ili <strong>systemd-boot</strong> na <strong>EFI particiju</strong>. To se odvija automatski, osim ako ste odabrali ruÄno particioniranje. U tom sluÄaju to ćete morati odabrati ili stvoriti sami. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. Ovaj sustav koristi <strong>BIOS</strong> okruženje.<br><br>Za konfiguriranje pokretanja iz BIOS okruženja, ovaj instalacijski program mora uvesti boot uÄitavaÄ, kao Å¡to je <strong>GRUB</strong>, ili na poÄetku particije ili na <strong>Master Boot Record</strong> blizu poÄetka particijske tablice (preporuÄen naÄin). To se odvija automatski, osim ako ste odabrali ruÄno particioniranje. U tom sluÄaju to ćete morati napraviti sami. BootLoaderModel Master Boot Record of %1 Master Boot Record od %1 Boot Partition Boot particija System Partition Particija sustava Do not install a boot loader Nemoj instalirati boot uÄitavaÄ %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page Prazna stranica Calamares::DebugWindow Form Oblik GlobalStorage GlobalStorage JobQueue JobQueue Modules Moduli Type: Tip: none nijedan Interface: SuÄelje: Tools Alati Reload Stylesheet Ponovno uÄitaj stilsku tablicu Widget Tree Stablo widgeta Debug information Debug informacija Calamares::ExecutionViewStep Set up Postaviti Install Instaliraj Calamares::FailJob Job failed (%1) Posao nije uspio (%1) Programmed job failure was explicitly requested. Programski neuspjeh posla je izriÄito zatražen. Calamares::JobThread Done Gotovo Calamares::NamedJob Example job (%1) Primjer posla (%1) Calamares::ProcessJob Run command '%1' in target system. IzvrÅ¡i naredbu '%1' u ciljnom sustavu. Run command '%1'. IzvrÅ¡i naredbu '%1'. Running command %1 %2 IzvrÅ¡avam naredbu %1 %2 Calamares::PythonJob Running %1 operation. Izvodim %1 operaciju. Bad working directory path Krivi put do radnog direktorija Working directory %1 for python job %2 is not readable. Radni direktorij %1 za python zadatak %2 nije Äitljiv. Bad main script file Kriva glavna datoteka skripte Main script file %1 for python job %2 is not readable. Glavna skriptna datoteka %1 za python zadatak %2 nije Äitljiva. Boost.Python error in job "%1". Boost.Python greÅ¡ka u zadatku "%1". Calamares::QmlViewStep Loading ... UÄitavanje ... QML Step <i>%1</i>. QML korak <i>%1</i>. Loading failed. UÄitavanje nije uspjelo. Calamares::RequirementsChecker Waiting for %n module(s). ÄŒekam %1 modul(a). ÄŒekam %1 modul(a). ÄŒekam %1 modul(a). (%n second(s)) (%n sekunda(e)) (%n sekunda(e)) (%n sekunda(e)) System-requirements checking is complete. Provjera zahtjeva za instalaciju sustava je dovrÅ¡ena. Calamares::ViewManager &Back &Natrag &Next &Sljedeće &Cancel &Odustani Cancel setup without changing the system. Odustanite od instalacije bez promjena na sustavu. Cancel installation without changing the system. Odustanite od instalacije bez promjena na sustavu. Setup Failed Instalacija nije uspjela Would you like to paste the install log to the web? Želite li objaviti dnevnik instaliranja na web? Install Log Paste URL URL za objavu dnevnika instaliranja The upload was unsuccessful. No web-paste was done. Objava dnevnika instaliranja na web nije uspjela. Calamares Initialization Failed Inicijalizacija Calamares-a nije uspjela %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. %1 se ne može se instalirati. Calamares nije mogao uÄitati sve konfigurirane module. Ovo je problem s naÄinom na koji se Calamares koristi u distribuciji. <br/>The following modules could not be loaded: <br/>Sljedeći moduli se nisu mogli uÄitati: Continue with installation? Nastaviti sa instalacijom? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> Instalacijski program %1 će izvrÅ¡iti promjene na vaÅ¡em disku kako bi postavio %2. <br/><strong>Ne možete poniÅ¡titi te promjene.</strong> &Set up now &Postaviti odmah &Set up &Postaviti &Install &Instaliraj Setup is complete. Close the setup program. Instalacija je zavrÅ¡ena. Zatvorite instalacijski program. Cancel setup? Prekinuti instalaciju? Cancel installation? Prekinuti instalaciju? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Stvarno želite prekinuti instalacijski proces? Instalacijski program će izaći i sve promjene će biti izgubljene. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Stvarno želite prekinuti instalacijski proces? Instalacijski program će izaći i sve promjene će biti izgubljene. &Yes &Da &No &Ne &Close &Zatvori Continue with setup? Nastaviti s postavljanjem? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> %1 instalacijski program će napraviti promjene na disku kako bi instalirao %2.<br/><strong>Nećete moći vratiti te promjene.</strong> &Install now &Instaliraj sada Go &back Idi &natrag &Done &Gotovo The installation is complete. Close the installer. Instalacija je zavrÅ¡ena. Zatvorite instalacijski program. Error GreÅ¡ka Installation Failed Instalacija nije uspjela CalamaresPython::Helper Unknown exception type Nepoznati tip iznimke unparseable Python error unparseable Python greÅ¡ka unparseable Python traceback unparseable Python traceback Unfetchable Python error. Nedohvatljiva Python greÅ¡ka. CalamaresUtils Install log posted to: %1 Dnevnik instaliranja je objavljen na: %1 CalamaresWindow %1 Setup Program %1 instalacijski program %1 Installer %1 Instalacijski program Show debug information Prikaži debug informaciju CheckerContainer Gathering system information... Skupljanje informacija o sustavu... ChoicePage Form Oblik After: Poslije: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>RuÄno particioniranje</strong><br/>Možete sami stvoriti ili promijeniti veliÄine particija. Boot loader location: Lokacija boot uÄitavaÄa: Select storage de&vice: Odaberi ureÄ‘aj za spremanje: Current: Trenutni: Reuse %1 as home partition for %2. Koristi %1 kao home particiju za %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Odaberite particiju za smanjivanje, te povlaÄenjem donjeg pokazivaÄa odaberite promjenu veliÄine</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 će se smanjiti na %2MB i stvorit će se nova %3MB particija za %4. <strong>Select a partition to install on</strong> <strong>Odaberite particiju za instalaciju</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. EFI particija ne postoji na ovom sustavu. Vratite se natrag i koristite ruÄno particioniranje da bi ste postavili %1. The EFI system partition at %1 will be used for starting %2. EFI particija na %1 će se koristiti za pokretanje %2. EFI system partition: EFI particija: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Izgleda da na ovom disku nema operacijskog sustava. Å to želite uÄiniti?<br/>Moći ćete provjeriti i potvrditi vaÅ¡ odabir prije bilo kakvih promjena na disku. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>ObriÅ¡i disk</strong><br/>To će <font color="red">obrisati</font> sve podatke na odabranom disku. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Ovaj disk ima %1. Å to želite uÄiniti?<br/>Moći ćete provjeriti i potvrditi vaÅ¡ odabir prije bilo kakvih promjena na disku. No Swap Bez swap-a Reuse Swap Iskoristi postojeći swap Swap (no Hibernate) Swap (bez hibernacije) Swap (with Hibernate) Swap (sa hibernacijom) Swap to file Swap datoteka <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Instaliraj uz postojeće</strong><br/>Instalacijski program će smanjiti particiju da bi napravio mjesto za %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Zamijeni particiju</strong><br/>Zamijenjuje particiju sa %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Ovaj disk već ima operacijski sustav. Å to želite uÄiniti?<br/>Moći ćete provjeriti i potvrditi vaÅ¡ odabir prije bilo kakvih promjena na disku. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Ovaj disk ima viÅ¡e operacijskih sustava. Å to želite uÄiniti?<br/>Moći ćete provjeriti i potvrditi vaÅ¡ odabir prije bilo kakvih promjena na disku. ClearMountsJob Clear mounts for partitioning operations on %1 Ukloni montiranja za operacije s particijama na %1 Clearing mounts for partitioning operations on %1. Uklanjam montiranja za operacija s particijama na %1. Cleared all mounts for %1 Uklonjena sva montiranja za %1 ClearTempMountsJob Clear all temporary mounts. Ukloni sva privremena montiranja. Clearing all temporary mounts. Uklanjam sva privremena montiranja. Cannot get list of temporary mounts. Ne mogu dohvatiti popis privremenih montiranja. Cleared all temporary mounts. Uklonjena sva privremena montiranja. CommandList Could not run command. Ne mogu pokrenuti naredbu. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. Naredba se pokreće u okruženju domaćina i treba znati korijenski put, meÄ‘utim, rootMountPoint nije definiran. The command needs to know the user's name, but no username is defined. Naredba treba znati ime korisnika, ali nije definirano korisniÄko ime. ContextualProcessJob Contextual Processes Job Posao kontekstualnih procesa CreatePartitionDialog Create a Partition Stvori particiju MiB MiB Partition &Type: Tip &particije: &Primary &Primarno E&xtended P&roduženo Fi&le System: Da&toteÄni sustav: LVM LV name LVM LV ime Flags: Oznake: &Mount Point: &ToÄke montiranja: Si&ze: Ve&liÄina: En&crypt Å i&friraj Logical LogiÄno Primary Primarno GPT GPT Mountpoint already in use. Please select another one. ToÄka montiranja se već koristi. Odaberite drugu. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Stvori novu %2MB particiju na %4 (%3) s datoteÄnim sustavom %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Stvori novu <strong>%2MB</strong> particiju na <strong>%4</strong> (%3) s datoteÄnim sustavom <strong>%1</strong>. Creating new %1 partition on %2. Stvaram novu %1 particiju na %2. The installer failed to create partition on disk '%1'. Instalacijski program nije uspio stvoriti particiju na disku '%1'. CreatePartitionTableDialog Create Partition Table Stvori particijsku tablicu Creating a new partition table will delete all existing data on the disk. Stvaranje nove particijske tablice će izbrisati postojeće podatke na disku. What kind of partition table do you want to create? Koju vrstu particijske tablice želite stvoriti? Master Boot Record (MBR) Master Boot Record (MBR) GUID Partition Table (GPT) GUID Partition Table (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Stvori novu %1 particijsku tablicu na %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Stvori novu <strong>%1</strong> particijsku tablicu na <strong>%2</strong> (%3). Creating new %1 partition table on %2. Stvaram novu %1 particijsku tablicu na %2. The installer failed to create a partition table on %1. Instalacijski program nije uspio stvoriti particijsku tablicu na %1. CreateUserJob Create user %1 Stvori korisnika %1 Create user <strong>%1</strong>. Stvori korisnika <strong>%1</strong>. Creating user %1. Stvaram korisnika %1. Sudoers dir is not writable. Po sudoers direktoriju nije moguće spremati. Cannot create sudoers file for writing. Ne mogu stvoriti sudoers datoteku za pisanje. Cannot chmod sudoers file. Ne mogu chmod sudoers datoteku. Cannot open groups file for reading. Ne mogu otvoriti groups datoteku za Äitanje. CreateVolumeGroupDialog Create Volume Group Stvori volume grupu CreateVolumeGroupJob Create new volume group named %1. Stvori novu volume grupu pod nazivom %1. Create new volume group named <strong>%1</strong>. Stvori novu volume grupu pod nazivom <strong>%1</strong>. Creating new volume group named %1. Stvaram novu volume grupu pod nazivom %1. The installer failed to create a volume group named '%1'. Instalacijski program nije uspio stvoriti volume grupu pod nazivom '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deaktiviraj volume grupu pod nazivom %1. Deactivate volume group named <strong>%1</strong>. Deaktiviraj volume grupu pod nazivom <strong>%1</strong>. The installer failed to deactivate a volume group named %1. Instalacijski program nije uspio deaktivirati volume grupu pod nazivom %1. DeletePartitionJob Delete partition %1. ObriÅ¡i particiju %1. Delete partition <strong>%1</strong>. ObriÅ¡i particiju <strong>%1</strong>. Deleting partition %1. BriÅ¡em particiju %1. The installer failed to delete partition %1. Instalacijski program nije uspio izbrisati particiju %1. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. Tip <strong>particijske tablice</strong> na odabranom disku.<br><br>Jedini naÄin da bi ste promijenili tip particijske tablice je da obriÅ¡ete i iznova stvorite particijsku tablicu. To će uniÅ¡tiiti sve podatke na disku.<br>Instalacijski program će zadržati postojeću particijsku tablicu osim ako ne odaberete drugaÄije.<br>Ako niste sigurni, na novijim sustavima GPT je preporuÄena particijska tablica. This device has a <strong>%1</strong> partition table. Ovaj ureÄ‘aj ima <strong>%1</strong> particijsku tablicu. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. Ovo je <strong>loop</strong> ureÄ‘aj.<br><br>To je pseudo ureÄ‘aj koji nema particijsku tablicu koja omoguÄava pristup datotekama kao na block ureÄ‘ajima. Taj naÄin postave obiÄno sadrži samo jedan datoteÄni sustav. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. Instalacijski program <strong>ne može detektirati particijsku tablicu</strong> na odabranom disku.<br><br>UreÄ‘aj ili nema particijsku tablicu ili je particijska tablica oÅ¡teÄena ili nepoznatog tipa.<br>Instalacijski program može stvoriti novu particijsku tablicu, ili automatski, ili kroz ruÄno particioniranje. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>To je preporuÄeni tip particijske tablice za moderne sustave koji se koristi za <strong> EFI </strong> boot okruženje. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. <br><br>Ovaj oblik particijske tablice je preporuÄen samo za starije sustave poÄevÅ¡i od <strong>BIOS</strong> boot okruženja. GPT je preporuÄen u većini ostalih sluÄaja. <br><br><strong>Upozorenje:</strong> MBR particijska tablica je zastarjela iz doba MS-DOS standarda.<br>Samo 4 <em>primarne</em> particije se mogu kreirati i od tih 4, jedna može biti <em>proÅ¡irena</em> particija, koja može sadržavati mnogo <em>logiÄkih</em> particija. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1 - (%2) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Zapisujem LUKS konfiguraciju za Dracut na %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted PreskaÄem pisanje LUKS konfiguracije za Dracut: "/" particija nije kriptirana Failed to open %1 NeuspjeÅ¡no otvaranje %1 DummyCppJob Dummy C++ Job Lažni C++ posao EditExistingPartitionDialog Edit Existing Partition Uredi postojeću particiju Content: Sadržaj: &Keep &Zadrži Format Formatiraj Warning: Formatting the partition will erase all existing data. Upozorenje: Formatiranje particije će izbrisati sve postojeće podatke. &Mount Point: &ToÄka montiranja: Si&ze: Ve&liÄina: MiB MiB Fi&le System: Da&toteÄni sustav: Flags: Oznake: Mountpoint already in use. Please select another one. ToÄka montiranja se već koristi. Odaberite drugu. EncryptWidget Form Oblik En&crypt system Å i&friraj sustav Passphrase Lozinka Confirm passphrase Potvrdi lozinku Please enter the same passphrase in both boxes. Molimo unesite istu lozinku u oba polja. FillGlobalStorageJob Set partition information Postavi informacije o particiji Install %1 on <strong>new</strong> %2 system partition. Instaliraj %1 na <strong>novu</strong> %2 sistemsku particiju. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Postavi <strong>novu</strong> %2 particiju s toÄkom montiranja <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Instaliraj %2 na %3 sistemsku particiju <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Postavi %3 particiju <strong>%1</strong> s toÄkom montiranja <strong>%2</strong>. Install boot loader on <strong>%1</strong>. Instaliraj boot uÄitavaÄ na <strong>%1</strong>. Setting up mount points. Postavljam toÄke montiranja. FinishedPage Form Oblik <Restart checkbox tooltip> <Restart checkbox tooltip> &Restart now &Ponovno pokreni sada <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>Gotovo.</h1><br/>%1 je instaliran na vaÅ¡e raÄunalo.<br/>Sada možete koristiti vaÅ¡ novi sustav. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <html><head/><body><p>Kada je odabrana ova opcija, vaÅ¡ sustav će se ponovno pokrenuti kada kliknete na <span style="font-style:italic;">Gotovo</span> ili zatvorite instalacijski program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>Gotovo.</h1><br/>%1 je instaliran na vaÅ¡e raÄunalo.<br/>Sada možete ponovno pokrenuti raÄunalo ili nastaviti sa koriÅ¡tenjem %2 live okruženja. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <html><head/><body><p>Kada je odabrana ova opcija, vaÅ¡ sustav će se ponovno pokrenuti kada kliknete na <span style="font-style:italic;">Gotovo</span> ili zatvorite instalacijski program.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Instalacija nije uspijela</h1><br/>%1 nije instaliran na vaÅ¡e raÄunalo.<br/>GreÅ¡ka: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Instalacija nije uspijela</h1><br/>%1 nije instaliran na vaÅ¡e raÄunalo.<br/>GreÅ¡ka: %2. FinishedViewStep Finish ZavrÅ¡i Setup Complete Instalacija je zavrÅ¡ena Installation Complete Instalacija je zavrÅ¡ena The setup of %1 is complete. Instalacija %1 je zavrÅ¡ena. The installation of %1 is complete. Instalacija %1 je zavrÅ¡ena. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Formatiraj particiju %1 (datoteÄni sustav: %2, veliÄina: %3 MB) na %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatiraj <strong>%3MB</strong>particiju <strong>%1</strong> na datoteÄni sustav <strong>%2</strong>. Formatting partition %1 with file system %2. Formatiraj particiju %1 na datoteÄni sustav %2. The installer failed to format partition %1 on disk '%2'. Instalacijski program nije uspio formatirati particiju %1 na disku '%2'. GeneralRequirements has at least %1 GiB available drive space ima barem %1 GB dostupne slobodne memorije na disku There is not enough drive space. At least %1 GiB is required. Nema dovoljno prostora na disku. Potrebno je najmanje %1 GB. has at least %1 GiB working memory ima barem %1 GB radne memorije The system does not have enough working memory. At least %1 GiB is required. Ovaj sustav nema dovoljno radne memorije. Potrebno je najmanje %1 GB. is plugged in to a power source je spojeno na izvor struje The system is not plugged in to a power source. Ovaj sustav nije spojen na izvor struje. is connected to the Internet je spojeno na Internet The system is not connected to the Internet. Ovaj sustav nije spojen na internet. is running the installer as an administrator (root) pokreće instalacijski program kao administrator (root) The setup program is not running with administrator rights. Instalacijski program nije pokrenut sa administratorskim dozvolama. The installer is not running with administrator rights. Instalacijski program nije pokrenut sa administratorskim dozvolama. has a screen large enough to show the whole installer ima zaslon dovoljno velik da može prikazati cijeli instalacijski program The screen is too small to display the setup program. Zaslon je premalen za prikaz instalacijskog programa. The screen is too small to display the installer. Zaslon je premalen za prikaz instalacijskog programa. HostInfoJob Collecting information about your machine. Prikupljanje podataka o vaÅ¡em stroju. IDJob OEM Batch Identifier OEM serijski identifikator Could not create directories <code>%1</code>. Nije moguće stvoriti direktorije <code>%1</code>. Could not open file <code>%1</code>. Nije moguće otvoriti datoteku <code>%1</code>. Could not write to file <code>%1</code>. Nije moguće pisati u datoteku <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. Stvaranje initramfs s mkinitcpio. InitramfsJob Creating initramfs. Stvaranje initramfs. InteractiveTerminalPage Konsole not installed Terminal nije instaliran Please install KDE Konsole and try again! Molimo vas da instalirate KDE terminal i pokuÅ¡ajte ponovno! Executing script: &nbsp;<code>%1</code> IzvrÅ¡avam skriptu: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script Skripta KeyboardPage Set keyboard model to %1.<br/> Postavi model tipkovnice na %1.<br/> Set keyboard layout to %1/%2. Postavi raspored tipkovnice na %1%2. KeyboardViewStep Keyboard Tipkovnica LCLocaleDialog System locale setting Postavke jeziÄne sheme sustava The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. JeziÄna shema sustava ima efekt na jeziÄni i znakovni skup za neke komandno linijske elemente suÄelja.<br/>TrenutaÄna postavka je <strong>%1</strong>. &Cancel &Odustani &OK &OK LicensePage Form Oblik <h1>License Agreement</h1> <h1>Licencni ugovor</h1> I accept the terms and conditions above. Prihvaćam gore navedene uvjete i odredbe. Please review the End User License Agreements (EULAs). Pregledajte Ugovore o licenci za krajnjeg korisnika (EULA). This setup procedure will install proprietary software that is subject to licensing terms. U ovom postupku postavljanja instalirat će se vlasniÄki softver koji podliježe uvjetima licenciranja. If you do not agree with the terms, the setup procedure cannot continue. Ako se ne slažete sa uvjetima, postupak postavljanja ne može se nastaviti. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Ovaj postupak postavljanja može instalirati vlasniÄki softver koji podliježe uvjetima licenciranja kako bi se pružile dodatne znaÄajke i poboljÅ¡alo korisniÄko iskustvo. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Ako se ne slažete s uvjetima, vlasniÄki softver neće biti instaliran, a umjesto njega će se koristiti alternative otvorenog koda. LicenseViewStep License Licence LicenseWidget URL: %1 URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 upravljaÄki program</strong><br/>by %2 <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 grafiÄki upravljaÄki program</strong><br/><font color="Grey">od %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 dodatak preglednika</strong><br/><font color="Grey">od %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 kodek</strong><br/><font color="Grey">od %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 paket</strong><br/><font color="Grey">od %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">od %2</font> File: %1 Datoteka: %1 Show the license text Prikaži tekst licence Open license agreement in browser. Otvori licencni ugovor u pregledniku. Hide license text Sakrij tekst licence LocalePage The system language will be set to %1. Jezik sustava će se postaviti na %1. The numbers and dates locale will be set to %1. JeziÄna shema brojeva i datuma će se postaviti na %1. Region: Regija: Zone: Zona: &Change... &Promijeni... Set timezone to %1/%2.<br/> Postavi vremesku zonu na %1%2.<br/> LocaleViewStep Location Lokacija LuksBootKeyFileJob Configuring LUKS key file. Konfiguriranje LUKS kljuÄne datoteke. No partitions are defined. Nema definiranih particija. Encrypted rootfs setup error PogreÅ¡ka postavljanja Å¡ifriranog rootfs-a Root partition %1 is LUKS but no passphrase has been set. Root particija %1 je LUKS, ali nije postavljena zaporka. Could not create LUKS key file for root partition %1. Nije moguće kreirati LUKS kljuÄnu datoteku za root particiju %1. Could not configure LUKS key file on partition %1. Nije moguće konfigurirati datoteku LUKS kljuÄevima na particiji %1. MachineIdJob Generate machine-id. Generiraj ID raÄunala. Configuration Error GreÅ¡ka konfiguracije No root mount point is set for MachineId. Nijedna toÄka montiranja nije postavljena za MachineId. NetInstallPage Name Ime Description Opis Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Mrežna instalacija. (Onemogućeno: Ne mogu dohvatiti listu paketa, provjerite da li ste spojeni na mrežu) Network Installation. (Disabled: Received invalid groups data) Mrežna instalacija. (Onemogućeno: Primanje nevažećih podataka o grupama) Network Installation. (Disabled: Incorrect configuration) Mrežna instalacija. (Onemogućeno: Neispravna konfiguracija) NetInstallViewStep Package selection Odabir paketa Office software Uredski softver Office package Uredski paket Browser software Preglednici Browser package Paket preglednika Web browser Web preglednik Kernel Kernel Services Servisi Login Prijava Desktop Radna povrÅ¡ina Applications Aplikacije NotesQmlViewStep Notes BiljeÅ¡ke OEMPage Ba&tch: Se&rija: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>Ovdje unesite identifikator serije. To će biti pohranjeno u ciljnom sustavu.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>OEM konfiguracija</h1><p>Calamares će koristiti OEM postavke tijekom konfiguriranja ciljnog sustava.</p></body></html> OEMViewStep OEM Configuration OEM konfiguracija Set the OEM Batch Identifier to <code>%1</code>. Postavite OEM identifikator serije na <code>%1</code>. PWQ Password is too short Lozinka je prekratka Password is too long Lozinka je preduga Password is too weak Lozinka je preslaba Memory allocation error when setting '%1' PogreÅ¡ka u dodjeli memorije prilikom postavljanja '%1' Memory allocation error PogreÅ¡ka u dodjeli memorije The password is the same as the old one Lozinka je ista prethodnoj The password is a palindrome Lozinka je palindrom The password differs with case changes only Lozinka se razlikuje samo u promjenama velikog i malog slova The password is too similar to the old one Lozinka je sliÄna prethodnoj The password contains the user name in some form Lozinka u nekoj formi sadrži korisniÄko ime The password contains words from the real name of the user in some form Lozinka u nekoj formi sadrži stvarno ime korisnika The password contains forbidden words in some form Lozinka u nekoj formi sadrži zabranjene rijeći The password contains less than %1 digits Lozinka sadrži manje od %1 brojeva The password contains too few digits Lozinka sadrži premalo brojeva The password contains less than %1 uppercase letters Lozinka sadrži manje od %1 velikih slova The password contains too few uppercase letters Lozinka sadrži premalo velikih slova The password contains less than %1 lowercase letters Lozinka sadrži manje od %1 malih slova The password contains too few lowercase letters Lozinka sadrži premalo malih slova The password contains less than %1 non-alphanumeric characters Lozinka sadrži manje od %1 ne-alfanumeriÄkih znakova. The password contains too few non-alphanumeric characters Lozinka sadrži premalo ne-alfanumeriÄkih znakova The password is shorter than %1 characters Lozinka je kraća od %1 znakova The password is too short Lozinka je prekratka The password is just rotated old one Lozinka je jednaka rotiranoj prethodnoj The password contains less than %1 character classes Lozinka sadrži manje od %1 razreda znakova The password does not contain enough character classes Lozinka ne sadrži dovoljno razreda znakova The password contains more than %1 same characters consecutively Lozinka sadrži viÅ¡e od %1 uzastopnih znakova The password contains too many same characters consecutively Lozinka sadrži previÅ¡e uzastopnih znakova The password contains more than %1 characters of the same class consecutively Lozinka sadrži viÅ¡e od %1 uzastopnih znakova iz istog razreda The password contains too many characters of the same class consecutively Lozinka sadrži previÅ¡e uzastopnih znakova iz istog razreda The password contains monotonic sequence longer than %1 characters Lozinka sadrži monotonu sekvencu dužu od %1 znakova The password contains too long of a monotonic character sequence Lozinka sadrži previÅ¡e monotonu sekvencu znakova No password supplied Nema isporuÄene lozinke Cannot obtain random numbers from the RNG device Ne mogu dobiti sluÄajne brojeve od RNG ureÄ‘aja Password generation failed - required entropy too low for settings Generiranje lozinke nije uspjelo - potrebna entropija je premala za postavke The password fails the dictionary check - %1 Nije uspjela provjera rjeÄnika za lozinku - %1 The password fails the dictionary check Nije uspjela provjera rjeÄnika za lozinku Unknown setting - %1 Nepoznate postavke - %1 Unknown setting Nepoznate postavke Bad integer value of setting - %1 LoÅ¡a cjelobrojna vrijednost postavke - %1 Bad integer value LoÅ¡a cjelobrojna vrijednost Setting %1 is not of integer type Postavka %1 nije cjelobrojnog tipa Setting is not of integer type Postavka nije cjelobrojnog tipa Setting %1 is not of string type Postavka %1 nije tipa znakovnog niza Setting is not of string type Postavka nije tipa znakovnog niza Opening the configuration file failed Nije uspjelo otvaranje konfiguracijske datoteke The configuration file is malformed Konfiguracijska datoteka je oÅ¡tećena Fatal failure Fatalna pogreÅ¡ka Unknown error Nepoznata greÅ¡ka Password is empty Lozinka je prazna PackageChooserPage Form Oblik Product Name Ime proizvoda TextLabel OznakaTeksta Long Product Description Dugi opis proizvoda Package Selection Odabir paketa Please pick a product from the list. The selected product will be installed. Molimo odaberite proizvod s popisa. Izabrani proizvod će biti instaliran. PackageChooserViewStep Packages Paketi Page_Keyboard Form Oblik Keyboard Model: Tip tipkovnice: Type here to test your keyboard Ovdje testiraj tipkovnicu Page_UserSetup Form Oblik What is your name? Koje je tvoje ime? What name do you want to use to log in? Koje ime želite koristiti za prijavu? Choose a password to keep your account safe. Odaberite lozinku da bi raÄun bio siguran. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>Unesite istu lozinku dvaput, tako da bi se provjerile eventualne pogreÅ¡ke prilikom upisa. Dobra lozinka sadrži kombinaciju slova, brojki i interpunkcija, trebala bi biti dugaÄka najmanje osam znakova i trebala bi se mijenjati u redovitim intervalima.</small> What is the name of this computer? Koje je ime ovog raÄunala? Your Full Name VaÅ¡e puno ime login prijava <small>This name will be used if you make the computer visible to others on a network.</small> <small>Ovo ime će se koristiti ako odaberete da je raÄunalo vidljivo ostalim korisnicima na mreži.</small> Computer Name Ime raÄunala Password Lozinka Repeat Password Ponovite lozinku When this box is checked, password-strength checking is done and you will not be able to use a weak password. Kad je ovaj okvir potvrÄ‘en, bit će napravljena provjera jakosti lozinke te nećete moći koristiti slabu lozinku. Require strong passwords. Zahtijeva snažne lozinke. Log in automatically without asking for the password. Automatska prijava bez traženja lozinke. Use the same password for the administrator account. Koristi istu lozinku za administratorski raÄun. Choose a password for the administrator account. Odaberi lozinku za administratorski raÄun. <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Unesite istu lozinku dvaput, tako da bi se provjerile eventualne pogreÅ¡ke prilikom upisa.</small> PartitionLabelsView Root Root Home Home Boot Boot EFI system EFI sustav Swap Swap New partition for %1 Nova particija za %1 New partition Nova particija %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space Slobodni prostor New partition Nova particija Name Ime File System DatoteÄni sustav Mount Point ToÄka montiranja Size VeliÄina PartitionPage Form Oblik Storage de&vice: UreÄ‘aj za sp&remanje: &Revert All Changes &PoniÅ¡ti sve promjene New Partition &Table Nova particijska &tablica Cre&ate Kre&iraj &Edit &Uredi &Delete &IzbriÅ¡i New Volume Group Nova volume grupa Resize Volume Group Promijenite veliÄinu volume grupe Deactivate Volume Group Deaktiviraj volume grupu Remove Volume Group Ukloni volume grupu I&nstall boot loader on: I&nstaliraj boot uÄitavaÄ na: Are you sure you want to create a new partition table on %1? Jeste li sigurni da želite stvoriti novu particijsku tablicu na %1? Can not create new partition Ne mogu stvoriti novu particiju The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. Particijska tablica %1 već ima %2 primarne particije i nove se viÅ¡e ne mogu dodati. Molimo vas da uklonite jednu primarnu particiju i umjesto nje dodate proÅ¡irenu particiju. PartitionViewStep Gathering system information... Skupljanje informacija o sustavu... Partitions Particije Install %1 <strong>alongside</strong> another operating system. Instaliraj %1 <strong>uz postojeći</strong> operacijski sustav. <strong>Erase</strong> disk and install %1. <strong>ObriÅ¡i</strong> disk i instaliraj %1. <strong>Replace</strong> a partition with %1. <strong>Zamijeni</strong> particiju s %1. <strong>Manual</strong> partitioning. <strong>RuÄno</strong> particioniranje. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Instaliraj %1 <strong>uz postojeći</strong> operacijski sustav na disku <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>ObriÅ¡i</strong> disk <strong>%2</strong> (%3) i instaliraj %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Zamijeni</strong> particiju na disku <strong>%2</strong> (%3) s %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>RuÄno</strong> particioniram disk <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Disk <strong>%1</strong> (%2) Current: Trenutni: After: Poslije: No EFI system partition configured EFI particija nije konfigurirana An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. EFI particija je potrebna za pokretanje %1.<br/><br/>Da bi ste konfigurirali EFI particiju, idite natrag i odaberite ili stvorite FAT32 datoteÄni sustav s omogućenom <strong>esp</strong> oznakom i toÄkom montiranja <strong>%2</strong>.<br/><br/>Možete nastaviti bez postavljanja EFI particije, ali vaÅ¡ sustav se možda neće moći pokrenuti. EFI system partition flag not set Oznaka EFI particije nije postavljena An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI particija je potrebna za pokretanje %1.<br><br/>Particija je konfigurirana s toÄkom montiranja <strong>%2</strong> ali njezina <strong>esp</strong> oznaka nije postavljena.<br/>Za postavljanje oznake, vratite se i uredite postavke particije.<br/><br/>Možete nastaviti bez postavljanja oznake, ali vaÅ¡ sustav se možda neće moći pokrenuti. Boot partition not encrypted Boot particija nije kriptirana A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. Odvojena boot particija je postavljena zajedno s kriptiranom root particijom, ali boot particija nije kriptirana.<br/><br/>Zabrinuti smo za vaÅ¡u sigurnost jer su važne datoteke sustava na nekriptiranoj particiji.<br/>Možete nastaviti ako želite, ali datoteÄni sustav će se otkljuÄati kasnije tijekom pokretanja sustava.<br/>Da bi ste kriptirali boot particiju, vratite se natrag i napravite ju, odabirom opcije <strong>Kriptiraj</strong> u prozoru za stvaranje prarticije. has at least one disk device available. ima barem jedan disk dostupan. There are no partitions to install on. Ne postoje particije na koje bi se instalirao sustav. PlasmaLnfJob Plasma Look-and-Feel Job Posao plasma izgleda Could not select KDE Plasma Look-and-Feel package Ne mogu odabrati paket KDE Plasma izgled PlasmaLnfPage Form Oblik Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Odaberite izgled KDE Plasme. Možete takoÄ‘er preskoÄiti ovaj korak i konfigurirati izgled jednom kada sustav bude instaliran. Odabirom izgleda dobit ćete pregled uživo tog izgleda. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Odaberite izgled KDE Plasme. Možete takoÄ‘er preskoÄiti ovaj korak i konfigurirati izgled jednom kada sustav bude instaliran. Odabirom izgleda dobit ćete pregled uživo tog izgleda. PlasmaLnfViewStep Look-and-Feel Izgled PreserveFiles Saving files for later ... Spremanje datoteka za kasnije ... No files configured to save for later. Nema datoteka konfiguriranih za spremanje za kasnije. Not all of the configured files could be preserved. Nije moguće saÄuvati sve konfigurirane datoteke. ProcessResult There was no output from the command. Nema izlazne informacije od naredbe. Output: Izlaz: External command crashed. Vanjska naredba je prekinula s radom. Command <i>%1</i> crashed. Naredba <i>%1</i> je prekinula s radom. External command failed to start. Vanjska naredba nije uspjeÅ¡no pokrenuta. Command <i>%1</i> failed to start. Naredba <i>%1</i> nije uspjeÅ¡no pokrenuta. Internal error when starting command. UnutraÅ¡nja greÅ¡ka pri pokretanju naredbe. Bad parameters for process job call. Krivi parametri za proces poziva posla. External command failed to finish. Vanjska naredba se nije uspjela izvrÅ¡iti. Command <i>%1</i> failed to finish in %2 seconds. Naredba <i>%1</i> nije uspjela zavrÅ¡iti za %2 sekundi. External command finished with errors. Vanjska naredba je zavrÅ¡ila sa pogreÅ¡kama. Command <i>%1</i> finished with exit code %2. Naredba <i>%1</i> je zavrÅ¡ila sa izlaznim kodom %2. QObject Default Keyboard Model Zadani oblik tipkovnice Default Zadano unknown nepoznato extended proÅ¡ireno unformatted nije formatirano swap swap Unpartitioned space or unknown partition table Ne particionirani prostor ili nepoznata particijska tablica (no mount point) (nema toÄke montiranja) Requirements checking for module <i>%1</i> is complete. Provjera zahtjeva za modul <i>%1</i> je dovrÅ¡ena. %1 (%2) language[name] (country[name]) %1 (%2) No product Nema proizvoda No description provided. Nije naveden opis. File not found Datoteka nije pronaÄ‘ena Path <pre>%1</pre> must be an absolute path. Putanja <pre>%1</pre> mora biti apsolutna putanja. Could not create new random file <pre>%1</pre>. Ne mogu stvoriti sluÄajnu datoteku <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Ukloni volume grupu pod nazivom %1. Remove Volume Group named <strong>%1</strong>. Ukloni volume grupu pod nazivom <strong>%1</strong>. The installer failed to remove a volume group named '%1'. Instalacijski program nije uspio ukloniti volume grupu pod nazivom '%1'. ReplaceWidget Form Oblik Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Odaberite gdje želite instalirati %1.<br/><font color="red">Upozorenje: </font>to će obrisati sve datoteke na odabranoj particiji. The selected item does not appear to be a valid partition. Odabrana stavka se ne ćini kao ispravna particija. %1 cannot be installed on empty space. Please select an existing partition. %1 ne može biti instaliran na prazni prostor. Odaberite postojeću particiju. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 se ne može instalirati na proÅ¡irenu particiju. Odaberite postojeću primarnu ili logiÄku particiju. %1 cannot be installed on this partition. %1 se ne može instalirati na ovu particiju. Data partition (%1) Podatkovna particija (%1) Unknown system partition (%1) Nepoznata particija sustava (%1) %1 system partition (%2) %1 particija sustava (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>Particija %1 je premala za %2. Odaberite particiju kapaciteta od najmanje %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/>EFI particijane postoji na ovom sustavu. Vratite se natrag i koristite ruÄno particioniranje za postavljane %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>%1 će biti instaliran na %2.<br/><font color="red">Upozorenje: </font>svi podaci na particiji %2 će biti izgubljeni. The EFI system partition at %1 will be used for starting %2. EFI particija na %1 će se koristiti za pokretanje %2. EFI system partition: EFI particija: ResizeFSJob Resize Filesystem Job Promjena veliÄine datoteÄnog sustava Invalid configuration Nevažeća konfiguracija The file-system resize job has an invalid configuration and will not run. Promjena veliÄine datoteÄnog sustava ima nevažeću konfiguraciju i neće se pokrenuti. KPMCore not Available KPMCore nije dostupan Calamares cannot start KPMCore for the file-system resize job. Calamares ne može pokrenuti KPMCore za promjenu veliÄine datoteÄnog sustava. Resize Failed Promjena veliÄine nije uspjela The filesystem %1 could not be found in this system, and cannot be resized. DatoteÄni sustav % 1 nije moguće pronaći na ovom sustavu i ne može mu se promijeniti veliÄina. The device %1 could not be found in this system, and cannot be resized. UreÄ‘aj % 1 nije moguće pronaći na ovom sustavu i ne može mu se promijeniti veliÄina. The filesystem %1 cannot be resized. DatoteÄnom sustavu %1 se ne može promijeniti veliÄina. The device %1 cannot be resized. UreÄ‘aju %1 se ne može promijeniti veliÄina. The filesystem %1 must be resized, but cannot. DatoteÄnom sustavu %1 se ne može promijeniti veliÄina iako bi se trebala. The device %1 must be resized, but cannot UreÄ‘aju %1 se ne može promijeniti veliÄina iako bi se trebala. ResizePartitionJob Resize partition %1. Promijeni veliÄinu particije %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Promijeni veliÄinu od <strong>%2MB</strong> particije <strong>%1</strong> na <strong>%3MB</strong>. Resizing %2MiB partition %1 to %3MiB. Mijenjam veliÄinu od %2MB particije %1 na %3MB. The installer failed to resize partition %1 on disk '%2'. Instalacijski program nije uspio promijeniti veliÄinu particije %1 na disku '%2'. ResizeVolumeGroupDialog Resize Volume Group Promijenite veliÄinu volume grupe ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Promijeni veliÄinu volume grupi pod nazivom %1 sa %2 na %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. Promijeni veliÄinu volume grupi pod nazivom <strong>%1</strong> sa <strong>%2</strong> na <strong>%3</strong>. The installer failed to resize a volume group named '%1'. Instalacijski program nije uspio promijeniti veliÄinu volume grupi pod nazivom '%1'. ResultsListDialog For best results, please ensure that this computer: Za najbolje rezultate, pobrinite se da ovo raÄunalo: System requirements Zahtjevi sustava ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> Ovo raÄunalo ne zadovoljava minimalne zahtjeve za instalaciju %1.<br/>Instalacija se ne može nastaviti.<a href="#details">Detalji...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> Ovo raÄunalo ne zadovoljava minimalne uvijete za instalaciju %1.<br/>Instalacija se ne može nastaviti.<a href="#details">Detalji...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. RaÄunalo ne zadovoljava neke od preporuÄenih uvjeta za instalaciju %1.<br/>Instalacija se može nastaviti, ali neke znaÄajke možda neće biti dostupne. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. RaÄunalo ne zadovoljava neke od preporuÄenih uvjeta za instalaciju %1.<br/>Instalacija se može nastaviti, ali neke znaÄajke možda neće biti dostupne. This program will ask you some questions and set up %2 on your computer. Ovaj program će vam postaviti neka pitanja i instalirati %2 na vaÅ¡e raÄunalo. ScanningDialog Scanning storage devices... Tražim dostupne ureÄ‘aje za spremanje... Partitioning Particioniram SetHostNameJob Set hostname %1 Postavi ime raÄunala %1 Set hostname <strong>%1</strong>. Postavi ime raÄunala <strong>%1</strong>. Setting hostname %1. Postavljam ime raÄunala %1. Internal Error Unutarnja pogreÅ¡ka Cannot write hostname to target system Ne mogu zapisati ime raÄunala na ciljni sustav. SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Postavi model tpkovnice na %1, raspored na %2-%3 Failed to write keyboard configuration for the virtual console. NeuspjeÅ¡no pisanje konfiguracije tipkovnice za virtualnu konzolu. Failed to write to %1 NeuspjeÅ¡no pisanje na %1 Failed to write keyboard configuration for X11. NeuspjeÅ¡no pisanje konfiguracije tipkovnice za X11. Failed to write keyboard configuration to existing /etc/default directory. NeuspjeÅ¡no pisanje konfiguracije tipkovnice u postojeći /etc/default direktorij. SetPartFlagsJob Set flags on partition %1. Postavi oznake na particiji %1. Set flags on %1MiB %2 partition. Postavi oznake na %1MB %2 particiji. Set flags on new partition. Postavi oznake na novoj particiji. Clear flags on partition <strong>%1</strong>. ObriÅ¡i oznake na particiji <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. ObriÅ¡i oznake na %1MB <strong>%2</strong> particiji. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. OznaÄi %1MB <strong>%2</strong> particiju kao <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. BriÅ¡em oznake na %1MB <strong>%2</strong> particiji. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Postavljam oznake <strong>%3</strong> na %1MB <strong>%2</strong> particiji. Clear flags on new partition. ObriÅ¡i oznake na novoj particiji. Flag partition <strong>%1</strong> as <strong>%2</strong>. OznaÄi particiju <strong>%1</strong> kao <strong>%2</strong>. Flag new partition as <strong>%1</strong>. OznaÄi novu particiju kao <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. BriÅ¡em oznake na particiji <strong>%1</strong>. Clearing flags on new partition. BriÅ¡em oznake na novoj particiji. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Postavljam oznake <strong>%2</strong> na particiji <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. Postavljam oznake <strong>%1</strong> na novoj particiji. The installer failed to set flags on partition %1. Instalacijski program nije uspio postaviti oznake na particiji %1. SetPasswordJob Set password for user %1 Postavi lozinku za korisnika %1 Setting password for user %1. Postavljam lozinku za korisnika %1. Bad destination system path. LoÅ¡ odrediÅ¡ni put sustava. rootMountPoint is %1 Root toÄka montiranja je %1 Cannot disable root account. Ne mogu onemogućiti root raÄun. passwd terminated with error code %1. passwd je prekinut s greÅ¡kom %1. Cannot set password for user %1. Ne mogu postaviti lozinku za korisnika %1. usermod terminated with error code %1. usermod je prekinut s greÅ¡kom %1. SetTimezoneJob Set timezone to %1/%2 Postavi vremesku zonu na %1%2 Cannot access selected timezone path. Ne mogu pristupiti odabranom putu do vremenske zone. Bad path: %1 LoÅ¡ put: %1 Cannot set timezone. Ne mogu postaviti vremesku zonu. Link creation failed, target: %1; link name: %2 Kreiranje linka nije uspjelo, cilj: %1; ime linka: %2 Cannot set timezone, Ne mogu postaviti vremensku zonu, Cannot open /etc/timezone for writing Ne mogu otvoriti /etc/timezone za pisanje ShellProcessJob Shell Processes Job Posao shell procesa SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage This is an overview of what will happen once you start the setup procedure. Ovo je prikaz dogaÄ‘aja koji će uslijediti jednom kad poÄne instalacijska procedura. This is an overview of what will happen once you start the install procedure. Ovo je prikaz dogaÄ‘aja koji će uslijediti jednom kad poÄne instalacijska procedura. SummaryViewStep Summary Sažetak TrackingInstallJob Installation feedback Povratne informacije o instalaciji Sending installation feedback. Å aljem povratne informacije o instalaciji Internal error in install-tracking. Interna pogreÅ¡ka prilikom praćenja instalacije. HTTP request timed out. HTTP zahtjev je istekao TrackingMachineNeonJob Machine feedback Povratna informacija o ureÄ‘aju Configuring machine feedback. Konfiguriram povratnu informaciju o ureÄ‘aju. Error in machine feedback configuration. GreÅ¡ka prilikom konfiguriranja povratne informacije o ureÄ‘aju. Could not configure machine feedback correctly, script error %1. Ne mogu ispravno konfigurirati povratnu informaciju o ureÄ‘aju, greÅ¡ka skripte %1. Could not configure machine feedback correctly, Calamares error %1. Ne mogu ispravno konfigurirati povratnu informaciju o ureÄ‘aju, Calamares greÅ¡ka %1. TrackingPage Form Oblik Placeholder Rezervirano mjesto <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>Odabirom ove opcije <span style=" font-weight:600;">ne će se slati nikakve informacije</span>o vaÅ¡oj instalaciji.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Klikni ovdje za viÅ¡e informacija o korisniÄkoj povratnoj informaciji</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. Praćenje instalacije pomaže %1 da vidi koliko ima korisnika, na koji hardver instalira %1 i (s posljednjim opcijama ispod) da dobije kontinuirane informacije o preferiranim aplikacijama. Kako bi vidjeli Å¡to se Å¡alje molimo vas da kliknete na ikonu pomoći pokraj svake opcije. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. Odabirom ove opcije slat ćete informacije vezane za instalaciju i vaÅ¡ hardver. Informacija <b>će biti poslana samo jednom</b>nakon Å¡to zavrÅ¡i instalacija. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. Odabirom ove opcije slat će se <b>periodiÄna</b>informacija prema %1 o vaÅ¡oj instalaciji, hardveru i aplikacijama. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. Odabirom ove opcije slat će se <b>redovna</b>informacija prema %1 o vaÅ¡oj instalaciji, hardveru, aplikacijama i uzorci upotrebe. TrackingViewStep Feedback Povratna informacija UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Ako će viÅ¡e osoba koristiti ovo raÄunalo, možete postaviti viÅ¡e korisniÄkih raÄuna poslije instalacije.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Ako će viÅ¡e osoba koristiti ovo raÄunalo, možete postaviti viÅ¡e korisniÄkih raÄuna poslije instalacije.</small> Your username is too long. VaÅ¡e korisniÄko ime je predugaÄko. Your username must start with a lowercase letter or underscore. VaÅ¡e korisniÄko ime mora zapoÄeti malim slovom ili podvlakom. Only lowercase letters, numbers, underscore and hyphen are allowed. DopuÅ¡tena su samo mala slova, brojevi, podvlake i crtice. Only letters, numbers, underscore and hyphen are allowed. DopuÅ¡tena su samo slova, brojevi, podvlake i crtice. Your hostname is too short. Ime raÄunala je kratko. Your hostname is too long. Ime raÄunala je predugaÄko. Your passwords do not match! Lozinke se ne podudaraju! UsersViewStep Users Korisnici VariantModel Key KljuÄ Value Vrijednost VolumeGroupBaseDialog Create Volume Group Stvori volume grupu List of Physical Volumes List of Physical Volumes Volume Group Name: Ime volume grupe: Volume Group Type: Tip volume grupe: Physical Extent Size: Physical Extent Size: MiB MiB Total Size: Ukupna veliÄina: Used Size: IskoriÅ¡tena veliÄina Total Sectors: Ukupni broj sektora: Quantity of LVs: KoliÄina LVs-ova: WelcomePage Form Oblik Select application and system language Odaberite program i jezik sustava Open donations website Otvorite web mjesto za donacije &Donate &Doniraj Open help and support website Otvorite web mjesto za pomoć i podrÅ¡ku Open issues and bug-tracking website Otvorene web mjesto za praćenje bugova i poteÅ¡koća Open release notes website Otvorite web mjesto s biljeÅ¡kama izdanja &Release notes &Napomene o izdanju &Known issues &Poznati problemi &Support &PodrÅ¡ka &About &O programu <h1>Welcome to the %1 installer.</h1> <h1>DobrodoÅ¡li u %1 instalacijski program.</h1> <h1>Welcome to the Calamares installer for %1.</h1> DobrodoÅ¡li u Calamares instalacijski program za %1. <h1>Welcome to the Calamares setup program for %1.</h1> <h1>DobrodoÅ¡li u Calamares instalacijski program za %1.</h1> <h1>Welcome to %1 setup.</h1> <h1>DobrodoÅ¡li u %1 instalacijski program.</h1> About %1 setup O %1 instalacijskom programu About %1 installer O %1 instalacijskom programu <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. <h1>%1</h1><br/><strong>%2<br/>za %3</strong><br/><br/>Autorska prava 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Autorska prava 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/> Hvala <a href="https://calamares.io/team/">Calamares timu</a> i <a href="https://www.transifex.com/calamares/calamares/">Calamares timu za prevoÄ‘enje</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> sponzorira <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support %1 podrÅ¡ka WelcomeQmlViewStep Welcome DobrodoÅ¡li WelcomeViewStep Welcome DobrodoÅ¡li notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p> Ovo su primjeri biljeÅ¡ki izdanja.</p> welcomeq <h3>%1 <quote>%2</quote></h3> <h3>%1<quote>%2</quote></h3> About O programu Support PodrÅ¡ka Known issues Poznati problemi Release notes BiljeÅ¡ke o izdanju Donate Doniraj calamares-3.2.20/lang/calamares_hr_HR.ts000066400000000000000000003156521362604102500200440ustar00rootroot00000000000000 AlongsidePage Choose partition to shrink: Allocate drive space by dragging the divider below: With this operation, the partition <b>%1</b> which contains %4 will be shrunk to %2MB and a new %3MB partition will be created for %5. ApplyProgressDetailsWidgetBase Save Open in External Browser ApplyProgressDialogWidgetBase Operations and Jobs Time Elapsed Total Time: 00:00:00 Operation: %p% Status Total: %p% Base Installer <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600; color:#343434;">Welcome</span></p></body></html> Location License Approval <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600; color:#343434;">Installation</span></p></body></html> Install System <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600; color:#343434;">Configuration</span></p></body></html> Reboot Language User Info Summary Keyboard Disk Setup <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600; color:#343434;">Preparation</span></p></body></html> BootLoaderModel Master Boot Record of %1 Boot Partition System Partition Calamares::InstallationViewStep Install Calamares::JobThread Done Calamares::ProcessJob Run command %1 External command crashed Command %1 crashed. Output: %2 External command failed to start Command %1 failed to start. Internal error when starting command Bad parameters for process job call. External command failed to finish Command %1 failed to finish in %2s. Output: %3 External command finished with errors Command %1 finished with exit code %2. Output: %3 Calamares::PythonJob Run script %1 Bad working directory path Working directory %1 for python job %2 is not readable. Bad main script file Main script file %1 for python job %2 is not readable. Boost.Python error in job "%1". Calamares::ViewManager &Back &Next &Quit Error Installation Failed CalamaresPython::Helper Unknown exception type unparseable Python error unparseable Python traceback Unfetchable Python error. CalamaresWindow %1 Installer CheckFileSystemJob Checking file system on partition %1. The file system check on partition %1 failed. ChoicePage This computer currently does not seem to have an operating system on it. What would you like to do? <b>Erase disk and install %1</b><br/><font color="red">Warning: </font>This will delete all of your programs, documents, photos, music, and any other files. This computer currently has %1 on it. What would you like to do? <b>Install %2 alongside %1</b><br/>Documents, music and other personal files will be kept. You can choose which operating system you want each time the computer starts up. <b>Replace %1 with %2</b><br/><font color="red">Warning: </font>This will erase the whole disk and delete all of your %1 programs, documents, photos, music, and any other files. This computer already has an operating system on it. What would you like to do? <b>Install %1 alongside your current operating system</b><br/>Documents, music and other personal files will be kept. You can choose which operating system you want each time the computer starts up. <b>Erase disk and install %1</b><br/><font color="red">Warning: </font>This will delete all of your Windows 7 programs, documents, photos, music, and any other files. This computer currently has multiple operating systems on it. What would you like to do? <b>Install %1 alongside your current operating systems</b><br/>Documents, music and other personal files will be kept. You can choose which operating system you want each time the computer starts up. <b>Something else</b><br/>You can create or resize partitions yourself, or choose multiple partitions for %1. ConfigurePageAdvanced Permissions Allow applying operations without administrator privileges Backend Active backend: Units Preferred unit: Byte KiB MiB GiB TiB PiB EiB ConfigurePageFileSystemColors File Systems luks: ntfs: ext2: ext3: ext4: btrfs: linuxswap: fat16: fat32: zfs: reiserfs: reiser4: hpfs: jfs hfs: hfsplus: ufs: xfs: ocfs2: extended: unformatted: unknown: exfat: nilfs2: lvm2 pv: ConfigurePageGeneral Partition Alignment Use cylinder based alignment (Windows XP compatible) Sector alignment: sectors Align partitions per default Logging Hide messages below: Debug Information Warning Error File Systems Default file system: Shredding Overwrite with: Random data Zeros CreatePartitionDialog Create a Partition Partition &Type: &Primary E&xtended F&ile System: &Mount Point: / /boot /home /opt /usr /var Si&ze: MB Logical Primary GPT CreatePartitionJob Create partition (file system: %1, size: %2 MB) on %3. The installer failed to create partition on disk '%1'. Could not open device '%1'. Could not open partition table. The installer failed to create file system on partition %1. The installer failed to update partition table on disk '%1'. CreatePartitionTableDialog Create Partition Table Creating a new partition table will delete all existing data on the disk. What kind of partition table do you want to create? Master Boot Record (MBR) GUID Partition Table (GPT) CreatePartitionTableJob Create partition table The installer failed to create a partition table on %1. Could not open device %1. CreatePartitionTableWidgetBase Choose the type of partition table you want to create: GPT MS-Dos (icon) <b>Warning:</b> This will destroy all data on the device! CreateUserJob Create user %1 Sudoers dir is not writable. Cannot create sudoers file for writing. Cannot chmod sudoers file. Cannot open groups file for reading. Cannot create user %1. useradd terminated with error code %1. Cannot set full name for user %1. chfn terminated with error code %1. Cannot set home directory ownership for user %1. chown terminated with error code %1. DecryptLuksDialogWidgetBase &Name: &Passphrase: DeletePartitionJob Delete partition %1 The installer failed to delete partition %1. Partition (%1) and device (%2) do not match. Could not open device %1. Could not open partition table. DeviceModel %1 - %2 (%3) DevicePropsWidgetBase Partition table: Cylinder alignment Sector based alignment Capacity: Total sectors: Cylinders/Heads/Sectors: Logical sector size: Physical sector size: Cylinder size: Primaries/Max: SMART status: More... EditExistingPartitionDialog Edit Existing Partition Content: Keep Format Warning: Formatting the partition will erase all existing data. &Mount Point: / /boot /home /opt /usr /var Size: EditMountOptionsDialogWidgetBase Edit Mount Options Edit the mount options for this file system: EditMountPointDialogWidgetBase Path: Select... Type: Options: Read-only Users can mount and unmount No automatic mount No update of file access times Synchronous access No update of directory access times No binary execution Update access times relative to modification More... Dump Frequency: Pass Number: Device Node UUID Label Identify by: EraseDiskPage Select drive: Before: After: FileSystemSupportDialogWidgetBase This table shows which file systems are supported and which specific operations can be performed on them. Some file systems need external tools to be installed for them to be supported. But not all operations can be performed on all file systems, even if all required tools are installed. Please see the documentation for details. File System Create Grow Shrink Move Copy Check Read Label Write Label Read Usage Backup Restore Support Tools Rescan Support @action:button FillGlobalStorageJob Set partition information Failed to find path for boot loader FormatPartitionJob Format partition %1 (file system: %2, size: %3 MB) on %4. The installer failed to format partition %1 on disk '%2'. Could not open device '%1'. Could not open partition table. The installer failed to create file system on partition %1. The installer failed to update partition table on disk '%1'. GreetingPage <h1>Welcome to the %1 installer.</h1><br/>This program will ask you some questions and set up %2 on your computer. GreetingViewStep Welcome KeyboardPage Set keyboard model to %1.<br/> Set keyboard layout to %1/%2. KeyboardViewStep Keyboard LocalePage Region: Zone: Set timezone to %1/%2.<br/> LocaleViewStep Loading location data... Location MainWindowBase KDE Partition Manager @title:window Devices @title:window Pending Operations @title:window Information @title:window Log Output @title:window MoveFileSystemJob Move file system of partition %1. Could not open file system on partition %1 for moving. Could not create target for moving file system on partition %1. Moving of partition %1 failed, changes have been rolled back. Moving of partition %1 failed. Roll back of the changes have failed. Updating boot sector after the moving of partition %1 failed. The logical sector sizes in the source and target for copying are not the same. This is currently unsupported. Source and target for copying do not overlap: Rollback is not required. Could not open device %1 to rollback copying. Page_Keyboard Form Keyboard Model: Type here to test your keyboard Page_UserSetup Form What is your name? What name do you want to use to log in? font-weight: normal <small>If more than one person will use this computer, you can set up multiple accounts after installation.</small> Choose a password to keep your account safe. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> What is the name of this computer? <small>This name will be used if you make the computer visible to others on a network.</small> Choose a password for the administrator account. <small>Enter the same password twice, so that it can be checked for typing errors.</small> Log in automatically Require my password to log in PartPropsWidgetBase File system: @label:listbox Label: @label This file system does not support setting a label. @label Recreate existing file system @action:button Mount point: @label Partition type: @label Status: @label UUID: @label Size: @label Available: @label partition capacity available Used: @label partition capacity used First sector: @label Last sector: @label Number of sectors: @label Flags: @label PartitionManagerWidgetBase KDE Partition Manager @title:window Partition Type Mount Point Label UUID Size Used Available First Sector Last Sector Number of Sectors Flags PartitionModel Free Space New partition Name File System Mount Point Size PartitionPage Form &Disk: &Revert All Changes New Partition &Table &Create &Edit &Delete &Install boot loader on: Are you sure you want to create a new partition table on %1? PartitionViewStep Gathering system information... Partitions Before: After: PreparePage For best results, please ensure that this computer: This computer does not satisfy the minimum requirements for installing %1. Installation cannot continue. This computer does not satisfy some of the recommended requirements for installing %1. Installation can continue, but some features might be disabled. PrepareViewStep Gathering system information... has at least %1 GB available drive space has at least %1 GB working memory is plugged in to a power source is connected to the Internet Prepare ProgressTreeModel Prepare Finish QObject Default Keyboard Model Default ReleaseDialog KDE Release Builder Application Name: &Version: Repository and Revision &Checkout From: trunk branches tags Ta&g/Branch: &SVN Access: anonsvn https svn+ssh &User: Options Get &Documentation Get &Translations C&reate Tag S&kip translations below completion: % Create Tar&ball Apply &fixes ResizeFileSystemJob Resize file system on partition %1. Parted failed to resize filesystem. Failed to resize filesystem. ResizePartitionJob Resize partition %1. The installer failed to resize partition %1 on disk '%2'. Could not open device '%1'. SetHostNameJob Set hostname %1 Internal Error Cannot write hostname to target system SetPartGeometryJob Update geometry of partition %1. Failed to change the geometry of the partition. SetPasswordJob Set password for user %1 Bad destination system path. rootMountPoint is %1 Cannot set password for user %1. usermod terminated with error code %1. SetTimezoneJob Set timezone to %1/%2 Cannot access selected timezone path. Bad path: %1 Cannot set timezone. Link creation failed, target: %1; link name: %2 SizeDetailsWidgetBase First sector: @label:listbox Last sector: @label:listbox Align partition SizeDialogWidgetBase Partition type: @label:listbox Primary Extended Logical File system: @label:listbox Label: @label This file system does not support setting a label. @label Minimum size: @label Maximum size: @label Free space before: @label:listbox Size: @label:listbox Free space after: @label:listbox SmartDialogWidgetBase SMART status: Model: Serial number: Firmware revision: Temperature: Bad sectors: Powered on for: Power cycles: Id Attribute Failure Type Update Type Worst Current Threshold Raw Assessment Value Overall assessment: Self tests: SummaryViewStep Summary TreeLogBase Sev. @title:column Severity of a log entry / log level. Text must be very short. Severity Time @title:column a time stamp of a log entry Message @title:column the text message of a log entry UsersPage Your username contains an invalid character '%1' Your username contains invalid characters! Your hostname contains an invalid character '%1' Your hostname contains invalid characters! Your passwords do not match! UsersViewStep Users calamares-3.2.20/lang/calamares_hu.ts000066400000000000000000005512211362604102500174500ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. A rendszer <strong>indító környezete.</strong> <br><br>Régebbi x86 alapú rendszerek csak <strong>BIOS</strong><br>-t támogatják. A modern rendszerek gyakran <strong>EFI</strong>-t használnak, de lehet, hogy BIOS-ként látható ha kompatibilitási módban fut az indító környezet. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. A rendszer <strong>EFI</strong> indító környezettel lett indítva.<br><br>Annak érdekében, hogy az EFI környezetbÅ‘l indíthassunk a telepítÅ‘nek telepítenie kell a rendszerbetöltÅ‘ alkalmazást pl. <strong>GRUB</strong> vagy <strong>systemd-boot</strong> az <strong>EFI Rendszer Partíción.</strong> Ez automatikus kivéve ha kézi partícionálást választottál ahol neked kell kiválasztani vagy létrehozni. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. A rendszer <strong>BIOS</strong> környezetbÅ‘l lett indítva. <br><br>Azért, hogy el lehessen indítani a rendszert egy BIOS környezetbÅ‘l a telepítÅ‘nek telepítenie kell egy indító környezetet mint pl. <strong>GRUB</strong>. Ez telepíthetÅ‘ a partíció elejére vagy a <strong>Master Boot Record</strong>-ba. javasolt a partíciós tábla elejére (javasolt). Ez automatikus kivéve ha te kézi partícionálást választottál ahol neked kell telepíteni. BootLoaderModel Master Boot Record of %1 Mester Boot Record - %1 Boot Partition Indító partíció System Partition Rendszer Partíció Do not install a boot loader Ne telepítsen rendszerbetöltÅ‘t %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page Üres oldal Calamares::DebugWindow Form Adatlap GlobalStorage Tárolás JobQueue Feladatok Modules Modulok Type: Típus: none semelyik Interface: Interfész: Tools Eszközök Reload Stylesheet Stílusok újratöltése Widget Tree Modul- fa Debug information Hibakeresési információk Calamares::ExecutionViewStep Set up Összeállítás Install Telepít Calamares::FailJob Job failed (%1) Művelet nem sikerült (%1) Programmed job failure was explicitly requested. Kifejezetten kért programozott műveleti hiba. Calamares::JobThread Done Kész Calamares::NamedJob Example job (%1) Mintapélda (%1) Calamares::ProcessJob Run command '%1' in target system. '%1' parancs futtatása a cél rendszeren. Run command '%1'. '%1' parancs futtatása. Running command %1 %2 Parancs futtatása %1 %2 Calamares::PythonJob Running %1 operation. Futó %1 műveletek. Bad working directory path Rossz munkakönyvtár útvonal Working directory %1 for python job %2 is not readable. Munkakönyvtár %1 a python folyamathoz %2 nem olvasható. Bad main script file Rossz alap script fájl Main script file %1 for python job %2 is not readable. Alap script fájl %1 a python folyamathoz %2 nem olvasható. Boost.Python error in job "%1". Boost. Python hiba ebben a folyamatban "%1". Calamares::QmlViewStep Loading ... Betöltés ... QML Step <i>%1</i>. QML lépés <i>%1</i>. Loading failed. A betöltés sikertelen. Calamares::RequirementsChecker Waiting for %n module(s). Várakozás a %n modulokra. Várakozás %n modulokra. (%n second(s)) (%n másodperc) (%n másodperc) System-requirements checking is complete. Rendszerkövetelmények ellenÅ‘rzése kész. Calamares::ViewManager &Back &Vissza &Next &KövetkezÅ‘ &Cancel &Mégse Cancel setup without changing the system. Telepítés megszakítása a rendszer módosítása nélkül. Cancel installation without changing the system. Kilépés a telepítÅ‘bÅ‘l a rendszer megváltoztatása nélkül. Setup Failed Telepítési hiba Would you like to paste the install log to the web? Install Log Paste URL Telepítési napló beillesztési URL-je. The upload was unsuccessful. No web-paste was done. Calamares Initialization Failed A Calamares elÅ‘készítése meghiúsult %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. A(z) %1 nem telepíthetÅ‘. A Calamares nem tudta betölteni a konfigurált modulokat. Ez a probléma abból fakad, ahogy a disztribúció a Calamarest használja. <br/>The following modules could not be loaded: <br/>A következÅ‘ modulok nem tölthetÅ‘ek be: Continue with installation? Folytatja a telepítést? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> A %1 telepítÅ‘ változtatásokat fog végrehajtani a lemezen a %2 telepítéséhez. <br/><strong>Ezután már nem tudja visszavonni a változtatásokat.</strong> &Set up now &Telepítés most &Set up &Telepítés &Install &Telepítés Setup is complete. Close the setup program. Telepítés sikerült. Zárja be a telepítÅ‘t. Cancel setup? Megszakítja a telepítést? Cancel installation? Abbahagyod a telepítést? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Valóban megszakítod a telepítési eljárást? A telepítÅ‘ ki fog lépni és minden változtatás elveszik. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Biztos abba szeretnéd hagyni a telepítést? Minden változtatás elveszik, ha kilépsz a telepítÅ‘bÅ‘l. &Yes &Igen &No &Nem &Close &Bezár Continue with setup? Folytatod a telepítéssel? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> A %1 telepítÅ‘ változtatásokat fog elvégezni, hogy telepítse a következÅ‘t: %2.<br/><strong>A változtatások visszavonhatatlanok lesznek.</strong> &Install now &Telepítés most Go &back Menj &vissza &Done &Befejez The installation is complete. Close the installer. A telepítés befejezÅ‘dött, Bezárhatod a telepítÅ‘t. Error Hiba Installation Failed Telepítés nem sikerült CalamaresPython::Helper Unknown exception type Ismeretlen kivétel típus unparseable Python error nem egyeztethetÅ‘ Python hiba unparseable Python traceback nem egyeztethetÅ‘ Python visszakövetés Unfetchable Python error. Összehasonlíthatatlan Python hiba. CalamaresUtils Install log posted to: %1 CalamaresWindow %1 Setup Program %1 Program telepítése %1 Installer %1 TelepítÅ‘ Show debug information Hibakeresési információk mutatása CheckerContainer Gathering system information... Rendszerinformációk gyűjtése... ChoicePage Form Adatlap After: Utána: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Manuális partícionálás</strong><br/>Létrehozhat vagy átméretezhet partíciókat. Boot loader location: RendszerbetöltÅ‘ helye: Select storage de&vice: Válassz tároló eszközt: Current: Aktuális: Reuse %1 as home partition for %2. %1 partíció használata mint home partíció a %2 -n <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Válaszd ki a partíciót amit zsugorítani akarsz és egérrel méretezd át.</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 zsugorítva lesz %2MiB -re és új %3MiB partíció lesz létrehozva itt %4. <strong>Select a partition to install on</strong> <strong>Válaszd ki a telepítésre szánt partíciót </strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Nem található EFI partíció a rendszeren. Menj vissza a manuális partícionáláshoz és állíts be %1. The EFI system partition at %1 will be used for starting %2. A %1 EFI rendszer partíció lesz használva %2 indításához. EFI system partition: EFI rendszerpartíció: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Úgy tűnik ezen a tárolóeszközön nincs operációs rendszer. Mit szeretnél csinálni?<br/>LehetÅ‘séged lesz átnézni és megerÅ‘síteni a választásod mielÅ‘tt bármilyen változtatás történik a tárolóeszközön. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Lemez törlése</strong><br/>Ez <font color="red">törölni</font> fogja a lemezen levÅ‘ összes adatot. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Ezen a tárolóeszközön %1 található. Mit szeretnél tenni?<br/>LehetÅ‘séged lesz átnézni és megerÅ‘síteni a választásod mielÅ‘tt bármilyen változtatás történik a tárolóeszközön. No Swap Swap nélkül Reuse Swap Swap újrahasználata Swap (no Hibernate) Swap (nincs hibernálás) Swap (with Hibernate) Swap (hibernálással) Swap to file Swap fájlba <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>MeglévÅ‘ mellé telepíteni</strong><br/>A telepítÅ‘ zsugorítani fogja a partíciót, hogy elférjen a %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>A partíció lecserélése</strong> a következÅ‘vel: %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Ez a tárolóeszköz már tartalmaz egy operációs rendszert. Mit szeretnél tenni?<br/>LehetÅ‘séged lesz átnézni és megerÅ‘síteni a választásod mielÅ‘tt bármilyen változtatás történik a tárolóeszközön. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. A tárolóeszközön több operációs rendszer található. Mit szeretnél tenni?<br/>LehetÅ‘séged lesz átnézni és megerÅ‘síteni a választásod mielÅ‘tt bármilyen változtatás történik a tárolóeszközön. ClearMountsJob Clear mounts for partitioning operations on %1 %1 csatolás törlése partícionáláshoz Clearing mounts for partitioning operations on %1. %1 csatolás törlése partícionáláshoz Cleared all mounts for %1 %1 minden csatolása törölve ClearTempMountsJob Clear all temporary mounts. Minden ideiglenes csatolás törlése Clearing all temporary mounts. Minden ideiglenes csatolás törlése Cannot get list of temporary mounts. Nem lehet lekérni az ideiglenes csatolási listát Cleared all temporary mounts. Minden ideiglenes csatolás törölve CommandList Could not run command. A parancsot nem lehet futtatni. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. A parancs a gazdakörnyezetben fut, és ismernie kell a gyökér útvonalát, de nincs rootMountPoint megadva. The command needs to know the user's name, but no username is defined. A parancsnak tudnia kell a felhasználónevet, de az nincs megadva. ContextualProcessJob Contextual Processes Job KörnyezetfüggÅ‘ folyamatok feladat CreatePartitionDialog Create a Partition Partíció Létrehozása MiB MiB Partition &Type: Partíció &típus: &Primary &ElsÅ‘dleges E&xtended K&iterjesztett Fi&le System: Fájlrendszer: LVM LV name LVM LV név Flags: Zászlók: &Mount Point: &Csatolási pont: Si&ze: Mé&ret: En&crypt Titkosítás Logical Logikai Primary ElsÅ‘dleges GPT GPT Mountpoint already in use. Please select another one. A csatolási pont már használatban van. Kérlek, válassz másikat. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Új partíció létrehozása %2MiB partíción a %4 (%3) %1 fájlrendszerrel Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Új <strong>%2MiB </strong>partíció létrehozása itt <strong>%4</strong> (%3) fájlrendszer típusa <strong>%1</strong>. Creating new %1 partition on %2. Új %1 partíció létrehozása a következÅ‘n: %2. The installer failed to create partition on disk '%1'. A telepítÅ‘ nem tudta létrehozni a partíciót ezen a lemezen '%1'. CreatePartitionTableDialog Create Partition Table Partíciós tábla létrehozása Creating a new partition table will delete all existing data on the disk. Új partíciós tábla létrehozásával az összes létezÅ‘ adat törlÅ‘dni fog a lemezen. What kind of partition table do you want to create? Milyen típusú partíciós táblát szeretnél létrehozni? Master Boot Record (MBR) Master Boot Record (MBR) GUID Partition Table (GPT) GUID Partíciós Tábla (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Új %1 partíciós tábla létrehozása a következÅ‘n: %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Új <strong>%1 </strong> partíciós tábla létrehozása a következÅ‘n: <strong>%2</strong> (%3). Creating new %1 partition table on %2. Új %1 partíciós tábla létrehozása a következÅ‘n: %2. The installer failed to create a partition table on %1. A telepítÅ‘nek nem sikerült létrehoznia a partíciós táblát a lemezen %1. CreateUserJob Create user %1 %1 nevű felhasználó létrehozása Create user <strong>%1</strong>. <strong>%1</strong> nevű felhasználó létrehozása. Creating user %1. %1 nevű felhasználó létrehozása Sudoers dir is not writable. Sudoers mappa nem írható. Cannot create sudoers file for writing. Nem lehet sudoers fájlt létrehozni írásra. Cannot chmod sudoers file. Nem lehet a sudoers fájlt "chmod" -olni. Cannot open groups file for reading. Nem lehet a groups fájlt megnyitni olvasásra. CreateVolumeGroupDialog Create Volume Group Kötetcsoport létrehozása CreateVolumeGroupJob Create new volume group named %1. Új kötetcsoport létrehozása: %1. Create new volume group named <strong>%1</strong>. Új kötetcsoport létrehozása: <strong>%1</strong>. Creating new volume group named %1. Új kötetcsoport létrehozása: %1. The installer failed to create a volume group named '%1'. A telepítÅ‘ nem tudta létrehozni a kötetcsoportot: „%1â€. DeactivateVolumeGroupJob Deactivate volume group named %1. A kötetcsoport deaktiválása: %1. Deactivate volume group named <strong>%1</strong>. Kötetcsoport deaktiválása: <strong>%1</strong>. The installer failed to deactivate a volume group named %1. A telepítÅ‘nek nem sikerült deaktiválnia a kötetcsoportot: %1. DeletePartitionJob Delete partition %1. %1 partíció törlése Delete partition <strong>%1</strong>. A következÅ‘ partíció törlése: <strong>%1</strong>. Deleting partition %1. %1 partíció törlése The installer failed to delete partition %1. A telepítÅ‘ nem tudta törölni a %1 partíciót. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. A <strong>partíciós tábla</strong> típusa a kiválasztott tárolóeszközön.<br><br>Az egyetlen lehetÅ‘ség a partíciós tábla változtatására ha töröljük és újra létrehozzuk a partíciós táblát, ami megsemmisít minden adatot a tárolóeszközön.<br>A telepítÅ‘ megtartja az aktuális partíciós táblát ha csak másképp nem döntesz.<br>Ha nem vagy benne biztos a legtöbb modern rendszernél GPT az elterjedt. This device has a <strong>%1</strong> partition table. Az ezköz tartalmaz egy <strong>%1</strong> partíciós táblát. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. A választott tárolóeszköz egy <strong>loop</strong> eszköz.<br><br>Ez nem egy partíciós tábla, ez egy pszeudo eszköz ami lehetÅ‘vé teszi a hozzáférést egy fájlhoz, úgy mint egy blokk eszköz. Ez gyakran csak egy fájlrendszert tartalmaz. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. A telepítÅ‘ <strong>nem talált partíciós táblát</strong> a választott tárolóeszközön.<br><br> Az eszköz nem tartalmaz partíciós táblát vagy sérült vagy ismeretlen típusú.<br> A telepítÅ‘ létre tud hozni újat automatikusan vagy te magad kézi partícionálással. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Ez az ajánlott partíciós tábla típus modern rendszerekhez ami <strong>EFI</strong> indító környezettel indul. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. <br><br>Ez a partíciós tábla típus régebbi rendszerekhez javasolt amik <strong>BIOS</strong> indító környezetbÅ‘l indulnak. Legtöbb esetben azonban GPT használata javasolt. <br><strong>Figyelem:</strong> az MSDOS partíciós tábla egy régi sztenderd lényeges korlátozásokkal. <br>Maximum 4 <em>elsÅ‘dleges</em> partíció hozható létre és abból a 4-bÅ‘l egy lehet <em>kiterjesztett</em> partíció. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1 – (%2) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Dracut LUKS konfiguráció mentése ide %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Dracut LUKS konfiguráció mentésének kihagyása: "/" partíció nincs titkosítva. Failed to open %1 Hiba történt %1 megnyitásakor DummyCppJob Dummy C++ Job Teszt C++ job EditExistingPartitionDialog Edit Existing Partition MeglévÅ‘ partíció szerkesztése Content: Tartalom: &Keep &megtart Format Formázás Warning: Formatting the partition will erase all existing data. Figyelem: A partíció formázása az összes meglévÅ‘ adatot törölni fogja. &Mount Point: &Csatolási pont: Si&ze: &méret: MiB MiB Fi&le System: &fájlrendszer Flags: Zászlók: Mountpoint already in use. Please select another one. A csatolási pont már használatban van. Kérlek, válassz másikat. EncryptWidget Form Adatlap En&crypt system Rendszer titkosítása Passphrase Jelszó Confirm passphrase Jelszó megerÅ‘sítés Please enter the same passphrase in both boxes. Ãrd be ugyanazt a jelmondatot mindkét dobozban. FillGlobalStorageJob Set partition information Partíció információk beállítása Install %1 on <strong>new</strong> %2 system partition. %1 telepítése az <strong>új</strong> %2 partícióra. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. <strong>Új</strong> %2 partíció beállítása <strong>%1</strong> csatolási ponttal. Install %2 on %3 system partition <strong>%1</strong>. %2 telepítése %3 <strong>%1</strong> rendszer partícióra. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. %3 partíció beállítása <strong>%1</strong> <strong>%2</strong> csatolási ponttal. Install boot loader on <strong>%1</strong>. RendszerbetöltÅ‘ telepítése ide <strong>%1</strong>. Setting up mount points. Csatlakozási pontok létrehozása FinishedPage Form Adatlap <Restart checkbox tooltip> <Restart checkbox tooltip> &Restart now Új&raindítás most <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>Minden kész.</h1><br/>%1 telepítve lett a számítógépére. <br/>Most már használhatja az új rendszert. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <html><head/><body><p>Ezt bejelölve a rendszer újra fog indulni amikor a <span style="font-style:italic;">Kész</span> gombra kattint vagy bezárja a telepítÅ‘t.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>Sikeres művelet.</h1><br/>%1 telepítve lett a számítógépére.<br/>Újraindítás után folytathatod az %2 éles környezetben. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <html><head/><body><p>Ezt bejelölve a rendszer újra fog indulni amikor a <span style="font-style:italic;">Kész</span>gombra kattint vagy bezárja a telepítÅ‘t.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Telepítés nem sikerült</h1><br/>%1 nem lett telepítve a számítógépére. <br/>A hibaüzenet: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>A telepítés hibába ütközött.</h1><br/>%1 nem lett telepítve a számítógépre.<br/>A hibaüzenet: %2. FinishedViewStep Finish Befejezés Setup Complete Telepítés Sikerült Installation Complete A telepítés befejezÅ‘dött. The setup of %1 is complete. A telepítésbÅ‘l %1 van kész. The installation of %1 is complete. A %1 telepítése elkészült. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Partíció formázása %1 (fájlrendszer: %2, méret: %3 MiB) itt %4 Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. <strong>%3MiB</strong> <strong>%1</strong> partíció formázása <strong>%2</strong> fájlrendszerrel. Formatting partition %1 with file system %2. %1 partíció formázása %2 fájlrendszerrel. The installer failed to format partition %1 on disk '%2'. A telepítÅ‘ nem tudta formázni a %1 partíciót a %2 lemezen. GeneralRequirements has at least %1 GiB available drive space legalább %1 GiB lemezterület elérhetÅ‘ There is not enough drive space. At least %1 GiB is required. Nincs elég lemezterület. Legalább %1 GiB szükséges. has at least %1 GiB working memory legalább %1 GiB memória elérhetÅ‘ The system does not have enough working memory. At least %1 GiB is required. A rendszer nem tartalmaz elég memóriát. Legalább %1 GiB szükséges. is plugged in to a power source csatlakoztatva van külsÅ‘ áramforráshoz The system is not plugged in to a power source. A rendszer nincs csatlakoztatva külsÅ‘ áramforráshoz is connected to the Internet csatlakozik az internethez The system is not connected to the Internet. A rendszer nem csatlakozik az internethez. is running the installer as an administrator (root) The setup program is not running with administrator rights. A telepítÅ‘ program nem adminisztrátori joggal fut. The installer is not running with administrator rights. A telepítÅ‘ nem adminisztrátori jogokkal fut. has a screen large enough to show the whole installer The screen is too small to display the setup program. A képernyÅ‘ mérete túl kicsi a telepítÅ‘ program megjelenítéséhez. The screen is too small to display the installer. A képernyÅ‘méret túl kicsi a telepítÅ‘ megjelenítéséhez. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier OEM Batch azonosító Could not create directories <code>%1</code>. Nem sikerült létrehozni a könyvtárakat <code>%1</code>. Could not open file <code>%1</code>. Sikertelen fájl megnyitás <code>%1</code>. Could not write to file <code>%1</code>. Sikertelen fájl írás <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. initramfs létrehozása mkinitcpio utasítással. InitramfsJob Creating initramfs. initramfs létrehozása. InteractiveTerminalPage Konsole not installed Konsole nincs telepítve Please install KDE Konsole and try again! Kérlek telepítsd a KDE Konsole-t és próbáld újra! Executing script: &nbsp;<code>%1</code> Script végrehajása: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script Szkript KeyboardPage Set keyboard model to %1.<br/> Billentyűzet típus beállítása %1.<br/> Set keyboard layout to %1/%2. Billentyűzet kiosztás beállítása %1/%2. KeyboardViewStep Keyboard Billentyűzet LCLocaleDialog System locale setting Területi beállítások The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. A nyelvi beállítás kihat a nyelvi és karakter beállításokra a parancssori elemeknél.<br/>A jelenlegi beállítás <strong>%1</strong>. &Cancel &Mégse &OK &OK LicensePage Form Adatlap <h1>License Agreement</h1> I accept the terms and conditions above. Elfogadom a fentebbi felhasználási feltételeket. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License Licensz LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 driver</strong><br/> %2 -ból/ -bÅ‘l <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 grafikus driver</strong><br/><font color="Grey">%2 -ból/ -bÅ‘l</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 böngészÅ‘ plugin</strong><br/><font color="Grey">%2 -ból/ -bÅ‘l</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 kodek</strong><br/><font color="Grey">%2 -ból/ -bÅ‘l</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 csomag</strong><br/><font color="Grey" >%2 -ból/ -bÅ‘l</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">%2 -ból/ -bÅ‘l</font> File: %1 Show the license text Open license agreement in browser. Hide license text Licensz szöveg elrejtése LocalePage The system language will be set to %1. A rendszer területi beállítása %1. The numbers and dates locale will be set to %1. A számok és dátumok területi beállítása %1. Region: Régió: Zone: Zóna: &Change... &Változtat... Set timezone to %1/%2.<br/> IdÅ‘zóna beállítása %1/%2.<br/> LocaleViewStep Location Hely LuksBootKeyFileJob Configuring LUKS key file. LUKS kulcs fájl konfigurálása. No partitions are defined. Nincsenek partíciók definiálva. Encrypted rootfs setup error Titkosított rootfs telepítési hiba Root partition %1 is LUKS but no passphrase has been set. A %1 root partíció LUKS de beállítva nincs kulcs. Could not create LUKS key file for root partition %1. Nem sikerült létrehozni a LUKS kulcs fájlt a %1 root partícióhoz Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Gépazonosító előállítása. Configuration Error Konfigurációs hiba No root mount point is set for MachineId. NetInstallPage Name Név Description Leírás Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Hálózati telepítés. (Kikapcsolva: A csomagokat nem lehet letölteni, ellenÅ‘rizd a hálózati kapcsolatot) Network Installation. (Disabled: Received invalid groups data) Hálózati Telepítés. (Letiltva: Hibás adat csoportok fogadva) Network Installation. (Disabled: Incorrect configuration) NetInstallViewStep Package selection Csomag választása Office software Office package Browser software Browser package Web browser Kernel Services Login Desktop Applications NotesQmlViewStep Notes OEMPage Ba&tch: Ba&amp;tch: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>Gépelje ide a batch azonosítót. Ez a célrendszeren lesz tárolva.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>OEM konfiguráció</h1> <p>A Calamares az OEM beállításokat fogja használni a célrendszer konfigurációjához.</p></body></html> OEMViewStep OEM Configuration OEM konfiguráció Set the OEM Batch Identifier to <code>%1</code>. Ãllítsa az OEM Batch azonosítót erre: <code>%1</code>. PWQ Password is too short Túl rövid jelszó Password is too long Túl hosszú jelszó Password is too weak A jelszó túl gyenge Memory allocation error when setting '%1' Memóriafoglalási hiba a(z) „%1†beállításakor Memory allocation error Memóriafoglalási hiba The password is the same as the old one A jelszó ugyanaz, mint a régi The password is a palindrome A jelszó egy palindrom The password differs with case changes only A jelszó csak kis- és nagybetűben tér el The password is too similar to the old one A jelszó túlságosan hasonlít a régire The password contains the user name in some form A jelszó tartalmazza felhasználónevet valamilyen formában The password contains words from the real name of the user in some form A jelszó tartalmazza a felhasználó valódi nevét valamilyen formában The password contains forbidden words in some form A jelszó tiltott szavakat tartalmaz valamilyen formában The password contains less than %1 digits A jelszó kevesebb mint %1 számjegyet tartalmaz The password contains too few digits A jelszó túl kevés számjegyet tartalmaz The password contains less than %1 uppercase letters A jelszó kevesebb mint %1 nagybetűt tartalmaz The password contains too few uppercase letters A jelszó túl kevés nagybetűt tartalmaz The password contains less than %1 lowercase letters A jelszó kevesebb mint %1 kisbetűt tartalmaz The password contains too few lowercase letters A jelszó túl kevés kisbetűt tartalmaz The password contains less than %1 non-alphanumeric characters A jelszó kevesebb mint %1 nem alfanumerikus karaktert tartalmaz The password contains too few non-alphanumeric characters A jelszó túl kevés nem alfanumerikus karaktert tartalmaz The password is shorter than %1 characters A jelszó rövidebb mint %1 karakter The password is too short A jelszó túl rövid The password is just rotated old one A jelszó egy újra felhasznált régi jelszó The password contains less than %1 character classes A jelszó kevesebb mint %1 karaktert tartalmaz The password does not contain enough character classes A jelszó nem tartalmaz elég karakterosztályt The password contains more than %1 same characters consecutively A jelszó több mint %1 egyezÅ‘ karaktert tartalmaz egymás után The password contains too many same characters consecutively A jelszó túl sok egyezÅ‘ karaktert tartalmaz egymás után The password contains more than %1 characters of the same class consecutively A jelszó több mint %1 karaktert tartalmaz ugyanabból a karakterosztályból egymás után The password contains too many characters of the same class consecutively A jelszó túl sok karaktert tartalmaz ugyanabból a karakterosztályból egymás után The password contains monotonic sequence longer than %1 characters A jelszó %1 karakternél hosszabb monoton sorozatot tartalmaz The password contains too long of a monotonic character sequence A jelszó túl hosszú monoton karaktersorozatot tartalmaz No password supplied Nincs jelszó megadva Cannot obtain random numbers from the RNG device Nem nyerhetÅ‘ek ki véletlenszámok az RNG eszközbÅ‘l Password generation failed - required entropy too low for settings A jelszó előállítás meghiúsult – a szükséges entrópia túl alacsony a beállításokhoz The password fails the dictionary check - %1 A jelszó megbukott a szótárellenÅ‘rzésen – %1 The password fails the dictionary check A jelszó megbukott a szótárellenÅ‘rzésen Unknown setting - %1 Ismeretlen beállítás – %1 Unknown setting Ismeretlen beállítás Bad integer value of setting - %1 Hibás egész érték a beállításnál – %1 Bad integer value Hibás egész érték Setting %1 is not of integer type A(z) %1 beállítás nem egész típusú Setting is not of integer type A beállítás nem egész típusú Setting %1 is not of string type A(z) %1 beállítás nem karakterlánc típusú Setting is not of string type A beállítás nem karakterlánc típusú Opening the configuration file failed A konfigurációs fájl megnyitása meghiúsult The configuration file is malformed A konfigurációs fájl rosszul formázott Fatal failure Végzetes hiba Unknown error Ismeretlen hiba Password is empty PackageChooserPage Form Adatlap Product Name TextLabel Szöveges címke Long Product Description Package Selection Please pick a product from the list. The selected product will be installed. PackageChooserViewStep Packages Page_Keyboard Form Adatlap Keyboard Model: Billentyűzet modell: Type here to test your keyboard Gépelj itt a billentyűzet teszteléséhez Page_UserSetup Form Adatlap What is your name? Mi a neved? What name do you want to use to log in? Milyen felhasználónévvel szeretnél bejelentkezni? Choose a password to keep your account safe. Adj meg jelszót a felhasználói fiókod védelmére. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>Ãrd be a jelszót kétszer így ellenÅ‘rizve lesznek a gépelési hibák. A jó jelszó tartalmazzon kis és nagy betűket, számokat és legalább 8 karakter hosszúságú. Ajánlott megváltoztatni rendszeres idÅ‘közönként.</small> What is the name of this computer? Mi legyen a számítógép neve? Your Full Name login <small>This name will be used if you make the computer visible to others on a network.</small> <small>Ez a név lesz használva ha a számítógép látható a hálózaton.</small> Computer Name Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Jelszó megkérdezése nélküli automatikus bejelentkezés. Use the same password for the administrator account. Ugyanaz a jelszó használata az adminisztrátor felhasználóhoz. Choose a password for the administrator account. Adj meg jelszót az adminisztrátor felhasználói fiókhoz. <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Ãrd be a jelszót kétszer így ellenÅ‘rizve lesznek a gépelési hibák.</small> PartitionLabelsView Root Root Home Home Boot Boot EFI system EFI rendszer Swap Swap New partition for %1 Új partíció %1 -ra/ -re New partition Új partíció %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space Szabad terület New partition Új partíció Name Név File System Fájlrendszer Mount Point Csatolási pont Size Méret PartitionPage Form Adatlap Storage de&vice: Eszköz: &Revert All Changes &Módosítások visszavonása New Partition &Table Új partíciós &tábla Cre&ate &Létrehozás &Edit &Szerkeszt &Delete &Töröl New Volume Group Új kötetcsoport Resize Volume Group Kötetcsoport átméretezése Deactivate Volume Group Kötetcsoport deaktiválása Remove Volume Group Kötetcsoport eltávolítása I&nstall boot loader on: RendszerbetöltÅ‘ &telepítése ide: Are you sure you want to create a new partition table on %1? Biztos vagy benne, hogy létrehozol egy új partíciós táblát itt %1 ? Can not create new partition Nem hozható létre új partíció The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. A(z) %1 lemezen lévÅ‘ partíciós táblában már %2 elsÅ‘dleges partíció van, és több nem adható hozzá. Helyette távolítson el egy elsÅ‘dleges partíciót, és adjon hozzá egy kiterjesztett partíciót. PartitionViewStep Gathering system information... Rendszerinformációk gyűjtése... Partitions Partíciók Install %1 <strong>alongside</strong> another operating system. %1 telepítése más operációs rendszer <strong>mellé</strong> . <strong>Erase</strong> disk and install %1. <strong>Lemez törlés</strong>és %1 telepítés. <strong>Replace</strong> a partition with %1. <strong>A partíció lecserélése</strong> a következÅ‘vel: %1. <strong>Manual</strong> partitioning. <strong>Kézi</strong> partícionálás. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). %1 telepítése más operációs rendszer <strong>mellé</strong> a <strong>%2</strong> (%3) lemezen. <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>%2 lemez törlése</strong> (%3) és %1 telepítés. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>A partíció lecserélése</strong> a <strong>%2</strong> lemezen(%3) a következÅ‘vel: %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>Kézi</strong> telepítés a <strong>%1</strong> (%2) lemezen. Disk <strong>%1</strong> (%2) Lemez <strong>%1</strong> (%2) Current: Aktuális: After: Utána: No EFI system partition configured Nincs EFI rendszer partíció beállítva An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. EFI rendszerpartíciónak léteznie kell %1 indításához.<br/><br/> Az EFI rendszer beállításához lépj vissza és hozz létre FAT32 fájlrendszert <strong>esp</strong> zászlóval és <strong>%2</strong> csatolási ponttal beállítva.<br/><br/> Folytathatod a telepítést EFI rendszerpartíció létrehozása nélkül is, de lehet, hogy a rendszer nem indul majd. EFI system partition flag not set EFI partíciós zászló nincs beállítva An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI rendszerpartíciónak léteznie kell %1 indításához.<br/><br/> A csatolási pont <strong>%2</strong> beállítása sikerült a partíción de a zászló nincs beállítva. A beálíltásához lépj vissza szerkeszteni a partíciót..<br/><br/> Folytathatod a telepítést zászló beállítása nélkül is, de lehet, hogy a rendszer nem indul el majd. Boot partition not encrypted Indító partíció nincs titkosítva A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. Egy külön indító partíció lett beállítva egy titkosított root partícióval, de az indító partíció nincs titkosítva.br/><br/>Biztonsági aggályok merülnek fel ilyen beállítás mellet, mert fontos fájlok nem titkosított partíción vannak tárolva. <br/>Ha szeretnéd, folytathatod így, de a fájlrendszer zárolása meg fog történni az indítás után. <br/> Az indító partíció titkosításához lépj vissza és az újra létrehozáskor válaszd a <strong>Titkosít</strong> opciót. has at least one disk device available. legalább egy lemez eszköz elérhetÅ‘. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Plasma kinézet feladat Could not select KDE Plasma Look-and-Feel package A KDE Plasma kinézeti csomag nem válaszható ki PlasmaLnfPage Form Adatlap Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Kérem válasszon kinézetet a KDE Plasma felülethez, Kihagyhatja ezt a lépést és konfigurálhatja a kinézetet a rendszer telepítése után. A listában a kinézetet kiválasztva egy élÅ‘ elÅ‘nézetet fog látni az adott témáról. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Válasszon egy kinézetet a KDE Plasma asztali környezethez. Ki is hagyhatja ezt a lépést, és beállíthatja a kinézetet, ha a telepítés elkészült. A kinézetválasztóra kattintva élÅ‘ elÅ‘nézetet kaphat a kinézetrÅ‘l. PlasmaLnfViewStep Look-and-Feel Kinézet PreserveFiles Saving files for later ... Fájlok mentése késÅ‘bbre … No files configured to save for later. Nincsenek fájlok beállítva elmentésre késÅ‘bbre Not all of the configured files could be preserved. Nem az összes beállított fájl örízhetÅ‘ meg. ProcessResult There was no output from the command. A parancsnak nem volt kimenete. Output: Kimenet: External command crashed. KülsÅ‘ parancs összeomlott. Command <i>%1</i> crashed. Parancs <i>%1</i> összeomlott. External command failed to start. A külsÅ‘ parancsot nem sikerült elindítani. Command <i>%1</i> failed to start. A(z) <i>%1</i> parancsot nem sikerült elindítani. Internal error when starting command. BelsÅ‘ hiba a parancs végrehajtásakor. Bad parameters for process job call. Hibás paraméterek a folyamat hívásához. External command failed to finish. KülsÅ‘ parancs nem fejezÅ‘dött be. Command <i>%1</i> failed to finish in %2 seconds. A(z) <i>%1</i> parancsot nem sikerült befejezni %2 másodperc alatt. External command finished with errors. A külsÅ‘ parancs hibával fejezÅ‘dött be. Command <i>%1</i> finished with exit code %2. A(z) <i>%1</i> parancs hibakóddal lépett ki: %2. QObject Default Keyboard Model Alapértelmezett billentyűzet Default Alapértelmezett unknown ismeretlen extended kiterjesztett unformatted formázatlan swap Swap Unpartitioned space or unknown partition table Nem particionált, vagy ismeretlen partíció (no mount point) (nincs csatolási pont) Requirements checking for module <i>%1</i> is complete. Követelmények ellenÅ‘rzése a <i>%1</i>modulhoz kész. %1 (%2) language[name] (country[name]) %1 (%2) No product No description provided. File not found Path <pre>%1</pre> must be an absolute path. Could not create new random file <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. A kötetcsoport eltávolítása: %1. Remove Volume Group named <strong>%1</strong>. Kötetcsoport eltávolítása: <strong>%1</strong>. The installer failed to remove a volume group named '%1'. A telepítÅ‘ nem tudta eltávolítani a kötetcsoportot: „%1â€. ReplaceWidget Form Adatlap Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Válaszd ki az telepítés helyét %1.<br/><font color="red">Figyelmeztetés: </font>minden fájl törölve lesz a kiválasztott partíción. The selected item does not appear to be a valid partition. A kiválasztott elem nem tűnik érvényes partíciónak. %1 cannot be installed on empty space. Please select an existing partition. %1 nem telepíthetÅ‘, kérlek válassz egy létezÅ‘ partíciót. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 nem telepíthetÅ‘ a kiterjesztett partícióra. Kérlek, válassz egy létezÅ‘ elsÅ‘dleges vagy logikai partíciót. %1 cannot be installed on this partition. Nem lehet telepíteni a következÅ‘t %1 erre a partícióra. Data partition (%1) Adat partíció (%1) Unknown system partition (%1) Ismeretlen rendszer partíció (%1) %1 system partition (%2) %1 rendszer partíció (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>A partíció %1 túl kicsi a következÅ‘höz %2. Kérlek, válassz egy legalább %3 GB- os partíciót. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/>Az EFI rendszerpartíció nem található a rendszerben. Kérlek, lépj vissza és állítsd be manuális partícionálással %1- et. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>%1 installálva lesz a következÅ‘re: %2.<br/><font color="red">Figyelmeztetés: </font>a partíción %2 minden törölve lesz. The EFI system partition at %1 will be used for starting %2. A %2 indításához az EFI rendszer partíciót használja a következÅ‘n: %1 EFI system partition: EFI rendszer partíció: ResizeFSJob Resize Filesystem Job Fájlrendszer átméretezési feladat Invalid configuration Érvénytelen konfiguráció The file-system resize job has an invalid configuration and will not run. A fájlrendszer átméretezési feladat konfigurációja érvénytelen, és nem fog futni. KPMCore not Available A KPMCore nem érhetÅ‘ el Calamares cannot start KPMCore for the file-system resize job. A Calamares nem tudja elindítani a KPMCore-t a fájlrendszer átméretezési feladathoz. Resize Failed Az átméretezés meghiúsult The filesystem %1 could not be found in this system, and cannot be resized. A(z) %1 fájlrendszer nem található a rendszeren, és nem méretezhetÅ‘ át. The device %1 could not be found in this system, and cannot be resized. A(z) %1 eszköz nem található a rendszeren, és nem méretezhetÅ‘ át. The filesystem %1 cannot be resized. A(z) %1 fájlrendszer nem méretezhetÅ‘ át. The device %1 cannot be resized. A(z) %1 eszköz nem méretezhetÅ‘ át. The filesystem %1 must be resized, but cannot. A(z) %1 fájlrendszert át kell méretezni, de nem lehet. The device %1 must be resized, but cannot A(z) %1 eszközt át kell méretezni, de nem lehet ResizePartitionJob Resize partition %1. A %1 partíció átméretezése. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. <strong>%2MiB</strong><strong>%1</strong> partíció átméretezése erre <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. %1 partíción %2MiB átméretezése erre %3MiB. The installer failed to resize partition %1 on disk '%2'. A telepítÅ‘ nem tudta átméretezni a(z) %1 partíciót a(z) '%2' lemezen. ResizeVolumeGroupDialog Resize Volume Group Kötetcsoport átméretezése ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. A(z) %1 kötet átméretezése ekkoráról: %2, ekkorára: %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. A(z) <strong>%1</strong> kötet átméretezése ekkoráról: <strong>%2</strong>, ekkorára: <strong>%3</strong>. The installer failed to resize a volume group named '%1'. A telepítÅ‘ nem tudta átméretezni a kötetcsoportot: „%1â€. ResultsListDialog For best results, please ensure that this computer: A legjobb eredményért gyÅ‘zÅ‘djünk meg, hogy ez a számítógép: System requirements Rendszer követelmények ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> Ez a számítógép nem felel meg a minimum követelményeknek a %1 telepítéséhez. <br/>A telepítés nem folytatható. <a href="#details">Részletek...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> Ez a számítógép nem felel meg a minimum követelményeknek a %1 telepítéséhez.<br/> Telepítés nem folytatható. <a href="#details">Részletek...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. Ez a számítógép nem felel meg néhány követelménynek a %1 telepítéséhez. <br/>A telepítés folytatható de elÅ‘fordulhat néhány képesség nem lesz elérhetÅ‘. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. Ez a számítógép nem felel meg a minimum követelményeknek a %1 telepítéséhez.<br/>Telepítés folytatható de néhány tulajdonság valószínűleg nem lesz elérhetÅ‘. This program will ask you some questions and set up %2 on your computer. Ez a program fel fog tenni néhány kérdést és %2 -t telepíti a számítógépre. ScanningDialog Scanning storage devices... Eszközök keresése... Partitioning Partícionálás SetHostNameJob Set hostname %1 Hálózati név beállítása a %1 -en Set hostname <strong>%1</strong>. Hálózati név beállítása a következÅ‘höz: <strong>%1</strong>. Setting hostname %1. Hálózati név beállítása a %1 -hez Internal Error BelsÅ‘ hiba Cannot write hostname to target system Nem lehet a hálózati nevet írni a célrendszeren SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Billentyűzet beállítása %1, elrendezés %2-%3 Failed to write keyboard configuration for the virtual console. Hiba történt a billentyűzet virtuális konzolba való beállításakor Failed to write to %1 Hiba történt %1 -re történÅ‘ íráskor Failed to write keyboard configuration for X11. Hiba történt a billentyűzet X11- hez való beállításakor Failed to write keyboard configuration to existing /etc/default directory. Hiba történt a billentyűzet konfiguráció alapértelmezett /etc/default mappába valló elmentésekor. SetPartFlagsJob Set flags on partition %1. Zászlók beállítása a partíción %1. Set flags on %1MiB %2 partition. flags beállítása a %1MiB %2 partíción. Set flags on new partition. JelzÅ‘k beállítása az új partíción. Clear flags on partition <strong>%1</strong>. Zászlók törlése a partíción: <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. flags eltávolítása a %1MiB <strong>%2</strong> partíción. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Flag %1MiB <strong>%2</strong> partíción mint <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Flag-ek eltávolítása a %1MiB <strong>%2</strong> partíción. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Flag-ek beállítása <strong>%3</strong> a %1MiB <strong>%2</strong> partíción. Clear flags on new partition. JelzÅ‘k törlése az új partíción. Flag partition <strong>%1</strong> as <strong>%2</strong>. Zászlók beállítása <strong>%1</strong> ,mint <strong>%2</strong>. Flag new partition as <strong>%1</strong>. JelzÅ‘ beállítása mint <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Zászlók törlése a partíción: <strong>%1</strong>. Clearing flags on new partition. jelzÅ‘k törlése az új partíción. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Zászlók beállítása <strong>%2</strong> a <strong>%1</strong> partíción. Setting flags <strong>%1</strong> on new partition. JelzÅ‘k beállítása az új <strong>%1</strong> partíción. The installer failed to set flags on partition %1. A telepítÅ‘nek nem sikerült a zászlók beállítása a partíción %1. SetPasswordJob Set password for user %1 %1 felhasználó jelszó beállítása Setting password for user %1. %1 felhasználói jelszó beállítása Bad destination system path. Rossz célrendszer elérési út rootMountPoint is %1 rootMountPoint is %1 Cannot disable root account. A root account- ot nem lehet inaktiválni. passwd terminated with error code %1. passwd megszakítva %1 hibakóddal. Cannot set password for user %1. Nem lehet a %1 felhasználó jelszavát beállítani. usermod terminated with error code %1. usermod megszakítva %1 hibakóddal. SetTimezoneJob Set timezone to %1/%2 IdÅ‘zóna beállítása %1/%2 Cannot access selected timezone path. A választott idÅ‘zóna útvonal nem hozzáférhetÅ‘. Bad path: %1 Rossz elérési út: %1 Cannot set timezone. Nem lehet az idÅ‘zónát beállítani. Link creation failed, target: %1; link name: %2 Link létrehozása nem sikerült: %1, link év: %2 Cannot set timezone, Nem lehet beállítani az idÅ‘zónát . Cannot open /etc/timezone for writing Nem lehet megnyitni írásra: /etc/timezone ShellProcessJob Shell Processes Job Parancssori folyamatok feladat SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage This is an overview of what will happen once you start the setup procedure. Összefoglaló arról mi fog történni a telepítés során. This is an overview of what will happen once you start the install procedure. Ez áttekintése annak, hogy mi fog történni, ha megkezded a telepítést. SummaryViewStep Summary Összefoglalás TrackingInstallJob Installation feedback Visszajelzés a telepítésrÅ‘l Sending installation feedback. Telepítési visszajelzés küldése. Internal error in install-tracking. Hiba a telepítÅ‘ nyomkövetésben. HTTP request timed out. HTTP kérés ideje lejárt. TrackingMachineNeonJob Machine feedback Gépi visszajelzés Configuring machine feedback. Gépi visszajelzés konfigurálása. Error in machine feedback configuration. Hiba a gépi visszajelzés konfigurálásában. Could not configure machine feedback correctly, script error %1. Gépi visszajelzés konfigurálása nem megfelelÅ‘, script hiba %1. Could not configure machine feedback correctly, Calamares error %1. Gépi visszajelzés konfigurálása nem megfelelÅ‘,. Calamares hiba %1. TrackingPage Form Adatlap Placeholder Helytartó <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>Ezt kiválasztva te<span style=" font-weight:600;">nem tudsz küldeni információt</span>a telepítésrÅ‘l.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;"> Kattints ide bÅ‘vebb információért a felhasználói visszajelzésrÅ‘l </span></a></p></body><head/></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. A telepítés nyomkövetése %1 segít látni, hogy hány felhasználója van, milyen eszközre , %1 és (az alábbi utolsó két opcióval), folyamatosan kapunk információt az elÅ‘nyben részesített alkalmazásokról. Hogy lásd mi lesz elküldve kérlek kattints a súgó ikonra a mezÅ‘ mellett. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. Ezt kiválasztva információt fogsz küldeni a telepítésrÅ‘l és a számítógéprÅ‘l. Ez az információ <b>csak egyszer lesz </b>elküldve telepítés után. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. Ezt kiválasztva információt fogsz küldeni <b>idÅ‘közönként</b> a telepítésrÅ‘l, számítógéprÅ‘l, alkalmazásokról ide %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. Ezt kiválasztva<b> rendszeresen</b> fogsz információt küldeni a telepítésrÅ‘l, számítógéprÅ‘l, alkalmazásokról és használatukról ide %1. TrackingViewStep Feedback Visszacsatolás UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Ha egynél több személy használja a számítógépet akkor létrehozhat több felhasználói fiókot telepítés után.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Ha egynél több személy használja a számítógépet akkor létrehozhat több felhasználói fiókot telepítés után.</small> Your username is too long. A felhasználónév túl hosszú. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Only letters, numbers, underscore and hyphen are allowed. Your hostname is too short. A hálózati név túl rövid. Your hostname is too long. A hálózati név túl hosszú. Your passwords do not match! A két jelszó nem egyezik! UsersViewStep Users Felhasználók VariantModel Key Value Érték VolumeGroupBaseDialog Create Volume Group Kötetcsoport létrehozása List of Physical Volumes Fizikai kötetek listája Volume Group Name: Kötetcsoport neve: Volume Group Type: Kötetcsoport típusa: Physical Extent Size: Fizikai kiterjedés mérete: MiB MiB Total Size: Teljes méret: Used Size: Használt méret: Total Sectors: Szektorok összesen: Quantity of LVs: Logkai kötetek száma: WelcomePage Form Adatlap Select application and system language Open donations website &Donate Open help and support website Open issues and bug-tracking website Open release notes website &Release notes &Kiadási megjegyzések &Known issues &Ismert hibák &Support &Támogatás &About &Névjegy <h1>Welcome to the %1 installer.</h1> <h1>Üdvözlet a %1 telepítÅ‘ben.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Üdvözlet a Calamares %1 telepítÅ‘jében.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Üdvözli önt a Calamares telepítÅ‘ itt %1!</h1> <h1>Welcome to %1 setup.</h1> <h1>Köszöntjük a %1 telepítÅ‘ben!</h1> About %1 setup A %1 telepítÅ‘rÅ‘l. About %1 installer A %1 telepítÅ‘rÅ‘l <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. <h1>%1</h1><br/><strong>%2<br/>a %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Köszönet<a href="https://calamares.io/team/"> a Calamares csapatnak</a> és a <a href="https://www.transifex.com/calamares/calamares/"> Calamares fordítói csapatának</a>. <br/><br/><a href="https://calamares.io/">A Calamares</a> fejlesztését a <br/><a href="http://www.blue-systems.com/">Blue Systems</a> -Liberating Software támogatja. %1 support %1 támogatás WelcomeQmlViewStep Welcome Üdvözlet WelcomeViewStep Welcome Üdvözlet notesqml <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> About Support Known issues Release notes Donate calamares-3.2.20/lang/calamares_id.ts000066400000000000000000005327051362604102500174360ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. <strong>Lingkungan boot</strong> pada sistem ini.<br><br>Sistem x86 kuno hanya mendukung <strong>BIOS</strong>.<br>Sistem moderen biasanya menggunakan <strong>EFI</strong>, tapi mungkin juga tampak sebagai BIOS jika dimulai dalam mode kompatibilitas. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. Sistem ini telah dimulai dengan lingkungan boot <strong>EFI</strong>.<br><br>Untuk mengkonfigurasi startup dari lingkungan EFI, installer ini seharusnya memaparkan sebuah aplikasi boot loader, seperti <strong>GRUB</strong> atau <strong>systemd-boot</strong> pada sebuah <strong>EFI System Partition</strong>. Ini adalah otomatis, kecuali kalau kamu memilih pemartisian manual, dalam beberapa kasus kamu harus memilihnya atau menciptakannya pada milikmu. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. Sistem ini dimulai dengan sebuah lingkungan boot <strong>BIOS</strong>.<br><br>Untuk mengkonfigurasi startup dari sebuah lingkungan BIOS, installer ini seharusnya memasang sebuah boot loader, seperti <strong>GRUB</strong>, baik di awal partisi atau pada <strong>Master Boot Record</strong> di dekat awalan tabel partisi (yang disukai). Ini adalah otomatis, kecuali kalau kamu memilih pemartisian manual, dalam beberapa kasus kamu harus menyetelnya pada milikmu. BootLoaderModel Master Boot Record of %1 Master Boot Record %1 Boot Partition Partisi Boot System Partition Partisi Sistem Do not install a boot loader Jangan instal boot loader %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page Halaman Kosong Calamares::DebugWindow Form Isian GlobalStorage PenyimpananGlobal JobQueue AntrianTugas Modules Modul Type: Tipe: none tidak ada Interface: Antarmuka: Tools Alat Reload Stylesheet Widget Tree Debug information Informasi debug Calamares::ExecutionViewStep Set up Install Instal Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Selesai Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Menjalankan perintah %1 %2 Calamares::PythonJob Running %1 operation. Menjalankan %1 operasi. Bad working directory path Jalur lokasi direktori tidak berjalan baik Working directory %1 for python job %2 is not readable. Direktori kerja %1 untuk penugasan python %2 tidak dapat dibaca. Bad main script file Berkas skrip utama buruk Main script file %1 for python job %2 is not readable. Berkas skrip utama %1 untuk penugasan python %2 tidak dapat dibaca. Boost.Python error in job "%1". Boost.Python mogok dalam penugasan "%1". Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager &Back &Kembali &Next &Berikutnya &Cancel &Batal Cancel setup without changing the system. Cancel installation without changing the system. Batalkan instalasi tanpa mengubah sistem yang ada. Setup Failed Would you like to paste the install log to the web? Install Log Paste URL The upload was unsuccessful. No web-paste was done. Calamares Initialization Failed Inisialisasi Calamares Gagal %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. %1 tidak dapat terinstal. Calamares tidak dapat memuat seluruh modul konfigurasi. Terdapat masalah dengan Calamares karena sedang digunakan oleh distribusi. <br/>The following modules could not be loaded: <br/>Modul berikut tidak dapat dimuat. Continue with installation? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Set up &Install &Instal Setup is complete. Close the setup program. Cancel setup? Cancel installation? Batalkan instalasi? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Apakah Anda benar-benar ingin membatalkan proses instalasi ini? Instalasi akan ditutup dan semua perubahan akan hilang. &Yes &Ya &No &Tidak &Close &Tutup Continue with setup? Lanjutkan dengan setelan ini? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> Installer %1 akan membuat perubahan ke disk Anda untuk memasang %2.<br/><strong>Anda tidak dapat membatalkan perubahan tersebut.</strong> &Install now &Instal sekarang Go &back &Kembali &Done &Kelar The installation is complete. Close the installer. Instalasi sudah lengkap. Tutup installer. Error Kesalahan Installation Failed Instalasi Gagal CalamaresPython::Helper Unknown exception type Tipe pengecualian tidak dikenal unparseable Python error tidak dapat mengurai pesan kesalahan Python unparseable Python traceback tidak dapat mengurai penelusuran balik Python Unfetchable Python error. Tidak dapat mengambil pesan kesalahan Python. CalamaresUtils Install log posted to: %1 CalamaresWindow %1 Setup Program %1 Installer Installer %1 Show debug information Tampilkan informasi debug CheckerContainer Gathering system information... Mengumpulkan informasi sistem... ChoicePage Form Isian After: Setelah: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Pemartisian manual</strong><br/>Anda bisa membuat atau mengubah ukuran partisi. Boot loader location: Lokasi Boot loader: Select storage de&vice: Pilih perangkat penyimpanan: Current: Saat ini: Reuse %1 as home partition for %2. Gunakan kembali %1 sebagai partisi home untuk %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Pilih sebuah partisi untuk diiris, kemudian seret bilah di bawah untuk mengubah ukuran</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. <strong>Select a partition to install on</strong> <strong>Pilih sebuah partisi untuk memasang</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Sebuah partisi sistem EFI tidak ditemukan pada sistem ini. Silakan kembali dan gunakan pemartisian manual untuk mengeset %1. The EFI system partition at %1 will be used for starting %2. Partisi sistem EFI di %1 akan digunakan untuk memulai %2. EFI system partition: Partisi sistem EFI: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Tampaknya media penyimpanan ini tidak mengandung sistem operasi. Apa yang hendak Anda lakukan?<br/>Anda dapat menelaah dan mengkonfirmasi pilihan Anda sebelum dilakukan perubahan pada media penyimpanan. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Hapus disk</strong><br/>Aksi ini akan <font color="red">menghapus</font> semua berkas yang ada pada media penyimpanan terpilih. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Media penyimpanan ini mengandung %1. Apa yang hendak Anda lakukan?<br/>Anda dapat menelaah dan mengkonfirmasi pilihan Anda sebelum dilakukan perubahan pada media penyimpanan. No Swap Reuse Swap Swap (no Hibernate) Swap (with Hibernate) Swap to file <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Instal berdampingan dengan</strong><br/>Installer akan mengiris sebuah partisi untuk memberi ruang bagi %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Ganti sebuah partisi</strong><br/> Ganti partisi dengan %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Media penyimpanan ini telah mengandung sistem operasi. Apa yang hendak Anda lakukan?<br/>Anda dapat menelaah dan mengkonfirmasi pilihan Anda sebelum dilakukan perubahan pada media penyimpanan. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Media penyimpanan ini telah mengandung beberapa sistem operasi. Apa yang hendak Anda lakukan?<br/>Anda dapat menelaah dan mengkonfirmasi pilihan Anda sebelum dilakukan perubahan pada media penyimpanan. ClearMountsJob Clear mounts for partitioning operations on %1 Lepaskan semua kaitan untuk operasi pemartisian pada %1 Clearing mounts for partitioning operations on %1. Melepas semua kaitan untuk operasi pemartisian pada %1 Cleared all mounts for %1 Semua kaitan dilepas untuk %1 ClearTempMountsJob Clear all temporary mounts. Lepaskan semua kaitan sementara. Clearing all temporary mounts. Melepaskan semua kaitan sementara. Cannot get list of temporary mounts. Tidak bisa mendapatkan daftar kaitan sementara. Cleared all temporary mounts. Semua kaitan sementara dilepas. CommandList Could not run command. Tidak dapat menjalankan perintah The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. Perintah berjalan di lingkungan host dan perlu diketahui alur root-nya, tetapi bukan rootMountPoint yang ditentukan. The command needs to know the user's name, but no username is defined. Perintah perlu diketahui nama si pengguna, tetapi bukan nama pengguna yang ditentukan. ContextualProcessJob Contextual Processes Job Memproses tugas kontekstual CreatePartitionDialog Create a Partition Buat Partisi MiB MiB Partition &Type: Partisi & Tipe: &Primary &Utama E&xtended E&xtended Fi&le System: Sistem Berkas: LVM LV name Nama LV LVM Flags: Tanda: &Mount Point: &Titik Kait: Si&ze: Uku&ran: En&crypt Enkripsi Logical Logikal Primary Utama GPT GPT Mountpoint already in use. Please select another one. Titik-kait sudah digunakan. Silakan pilih yang lainnya. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. Membuat partisi %1 baru di %2. The installer failed to create partition on disk '%1'. Installer gagal untuk membuat partisi di disk '%1'. CreatePartitionTableDialog Create Partition Table Buat Tabel Partisi Creating a new partition table will delete all existing data on the disk. Membuat tabel partisi baru akan menghapus data pada disk yang ada. What kind of partition table do you want to create? Apa jenis tabel partisi yang ingin Anda buat? Master Boot Record (MBR) Master Boot Record (MBR) GUID Partition Table (GPT) GUID Partition Table (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Membuat tabel partisi %1 baru di %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Membuat tabel partisi <strong>%1</strong> baru di <strong>%2</strong> (%3). Creating new %1 partition table on %2. Membuat tabel partisi %1 baru di %2. The installer failed to create a partition table on %1. Installer gagal membuat tabel partisi pada %1. CreateUserJob Create user %1 Buat pengguna %1 Create user <strong>%1</strong>. Buat pengguna <strong>%1</strong>. Creating user %1. Membuat pengguna %1. Sudoers dir is not writable. Direktori sudoers tidak dapat ditulis. Cannot create sudoers file for writing. Tidak dapat membuat berkas sudoers untuk ditulis. Cannot chmod sudoers file. Tidak dapat chmod berkas sudoers. Cannot open groups file for reading. Tidak dapat membuka berkas groups untuk dibaca. CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Ciptakan grup volume baru bernama %1. Create new volume group named <strong>%1</strong>. Ciptakan grup volume baru bernama <strong>%1</strong>. Creating new volume group named %1. Menciptakan grup volume baru bernama %1. The installer failed to create a volume group named '%1'. Installer gagal menciptakan sebuah grup volume bernama '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Nonaktifkan grup volume bernama %1. Deactivate volume group named <strong>%1</strong>. Nonaktifkan grup volume bernama <strong>%1</strong>. The installer failed to deactivate a volume group named %1. Installer gagal menonaktifkan sebuah grup volume bernama %1. DeletePartitionJob Delete partition %1. Hapus partisi %1. Delete partition <strong>%1</strong>. Hapus partisi <strong>%1</strong> Deleting partition %1. Menghapus partisi %1. The installer failed to delete partition %1. Installer gagal untuk menghapus partisi %1. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. Tipe dari <strong>tabel partisi</strong> pada perangkat penyimpanan terpilih.<br><br>Satu-satunya cara untuk mengubah tabel partisi adalah dengan menyetip dan menciptakan ulang tabel partisi dari awal, yang melenyapkan semua data pada perangkat penyimpanan.<br>Installer ini akan menjaga tabel partisi saat ini kecuali kamu secara gamblang memilih sebaliknya.<br>Jika tidak yakin, pada sistem GPT modern lebih disukai. This device has a <strong>%1</strong> partition table. Perangkai in memiliki sebuah tabel partisi <strong>%1</strong>. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. Ini adalah sebuah perangkat <strong>loop</strong>.<br><br>Itu adalah sebuah pseudo-device dengan tiada tabel partisi yang membuat sebuah file dapat diakses sebagai perangkat blok. Ini jenis set yang biasanya hanya berisi filesystem tunggal. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. Installer <strong>tidak bisa mendeteksi tabel partisi apapun</strong> pada media penyimpanan terpilih.<br><br>Mungkin media ini tidak memiliki tabel partisi, atau tabel partisi yang ada telah korup atau tipenya tidak dikenal.<br>Installer dapat membuatkan partisi baru untuk Anda, baik secara otomatis atau melalui laman pemartisian manual. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Ini adalah tipe tabel partisi yang dianjurkan untuk sistem modern yang dimulai dengan <strong>EFI</strong> boot environment. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. <br><br>Tipe tabel partisi ini adalah hanya baik pada sistem kuno yang mulai dari sebuah lingkungan boot <strong>BIOS</strong>. GPT adalah yang dianjurkan dalam beberapa kasus lainnya.<br><br><strong>Peringatan:</strong> tabel partisi MBR adalah sebuah standar era MS-DOS usang.<br>Hanya 4 partisi <em>primary</em> yang mungkin dapat diciptakan, dan yang 4, salah satu yang bisa dijadikan sebuah partisi <em>extended</em>, yang mana terdapat berisi beberapa partisi <em>logical</em>. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1 - (%2) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Tulis konfigurasi LUKS untuk Dracut ke %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Lewati penulisan konfigurasi LUKS untuk Dracut: partisi "/" tidak dienkripsi Failed to open %1 Gagal membuka %1 DummyCppJob Dummy C++ Job Tugas C++ Kosong EditExistingPartitionDialog Edit Existing Partition Sunting Partisi yang Ada Content: Isi: &Keep &Pertahankan Format Format Warning: Formatting the partition will erase all existing data. Peringatan: Memformat partisi akan menghapus semua data yang ada. &Mount Point: Lokasi Mount: Si&ze: Uku&ran: MiB MiB Fi&le System: Sis&tem Berkas: Flags: Bendera: Mountpoint already in use. Please select another one. Titik-kait sudah digunakan. Silakan pilih yang lainnya. EncryptWidget Form Formulir En&crypt system &Sistem enkripsi Passphrase Kata Sandi Confirm passphrase Konfirmasi kata sandi Please enter the same passphrase in both boxes. Silakan masukkan kata sandi yang sama di kedua kotak. FillGlobalStorageJob Set partition information Tetapkan informasi partisi Install %1 on <strong>new</strong> %2 system partition. Instal %1 pada partisi sistem %2 <strong>baru</strong> Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Setel partisi %2 <strong>baru</strong> dengan tempat kait <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Instal %2 pada sistem partisi %3 <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Setel partisi %3 <strong>%1</strong> dengan tempat kait <strong>%2</strong>. Install boot loader on <strong>%1</strong>. Instal boot loader di <strong>%1</strong>. Setting up mount points. Menyetel tempat kait. FinishedPage Form Formulir <Restart checkbox tooltip> &Restart now Mulai ulang seka&rang <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>Selesai.</h1><br>%1 sudah terinstal di komputer Anda.<br/>Anda dapat memulai ulang ke sistem baru atau lanjut menggunakan lingkungan Live %2. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Instalasi Gagal</h1><br/>%1 tidak bisa diinstal pada komputermu.<br/>Pesan galatnya adalah: %2. FinishedViewStep Finish Selesai Setup Complete Installation Complete Instalasi Lengkap The setup of %1 is complete. The installation of %1 is complete. Instalasi %1 telah lengkap. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatting partition %1 with file system %2. Memformat partisi %1 dengan sistem berkas %2. The installer failed to format partition %1 on disk '%2'. Installer gagal memformat partisi %1 pada disk '%2'.'%2'. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source terhubung dengan sumber listrik The system is not plugged in to a power source. Sistem tidak terhubung dengan sumber listrik. is connected to the Internet terkoneksi dengan internet The system is not connected to the Internet. Sistem tidak terkoneksi dengan internet. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. Installer tidak dijalankan dengan kewenangan administrator. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. Layar terlalu kecil untuk menampilkan installer. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Konsole tidak terinstal Please install KDE Konsole and try again! Silahkan instal KDE Konsole dan ulangi lagi! Executing script: &nbsp;<code>%1</code> Mengeksekusi skrip: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script Skrip KeyboardPage Set keyboard model to %1.<br/> Setel model papan ketik ke %1.<br/> Set keyboard layout to %1/%2. Setel tata letak papan ketik ke %1/%2. KeyboardViewStep Keyboard Papan Ketik LCLocaleDialog System locale setting Setelan lokal sistem The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. Pengaturan system locale berpengaruh pada bahasa dan karakter pada beberapa elemen antarmuka Command Line. <br/>Pengaturan saat ini adalah <strong>%1</strong>. &Cancel &Batal &OK &OK LicensePage Form Isian <h1>License Agreement</h1> I accept the terms and conditions above. Saya menyetujui segala persyaratan di atas. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License Lisensi LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 driver</strong><br/>by %2 <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 driver grafis</strong><br/><font color="Grey">by %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 plugin peramban</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 paket</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> File: %1 Show the license text Open license agreement in browser. Hide license text LocalePage The system language will be set to %1. Bahasa sistem akan disetel ke %1. The numbers and dates locale will be set to %1. Nomor dan tanggal lokal akan disetel ke %1. Region: Wilayah: Zone: Zona: &Change... &Ubah... Set timezone to %1/%2.<br/> Setel zona waktu ke %1/%2.<br/> LocaleViewStep Location Lokasi LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Menghasilkan machine-id. Configuration Error No root mount point is set for MachineId. NetInstallPage Name Nama Description Deskripsi Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Instalasi Jaringan. (Dinonfungsikan: Tak mampu menarik daftar paket, periksa sambungan jaringanmu) Network Installation. (Disabled: Received invalid groups data) Instalasi jaringan. (Menonaktifkan: Penerimaan kelompok data yang tidak sah) Network Installation. (Disabled: Incorrect configuration) NetInstallViewStep Package selection Pemilihan paket Office software Office package Browser software Browser package Web browser Kernel Services Login Desktop Applications NotesQmlViewStep Notes OEMPage Ba&tch: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> OEMViewStep OEM Configuration Set the OEM Batch Identifier to <code>%1</code>. PWQ Password is too short Kata sandi terlalu pendek Password is too long Kata sandi terlalu panjang Password is too weak kata sandi terlalu lemah Memory allocation error when setting '%1' Kesalahan alokasi memori saat menyetel '%1' Memory allocation error Kesalahan alokasi memori The password is the same as the old one Kata sandi sama dengan yang lama The password is a palindrome Kata sandi palindrom The password differs with case changes only Kata sandi berbeda hanya dengan perubahan huruf saja The password is too similar to the old one Kata sandi terlalu mirip dengan yang lama The password contains the user name in some form Kata sandi berisi nama pengguna dalam beberapa form The password contains words from the real name of the user in some form Kata sandi berisi kata-kata dari nama asli pengguna dalam beberapa form The password contains forbidden words in some form Password mengandung kata yang dilarang pada beberapa bagian form The password contains less than %1 digits Password setidaknya berisi 1 digit karakter The password contains too few digits Kata sandi terkandung terlalu sedikit digit The password contains less than %1 uppercase letters Kata sandi terkandung kurang dari %1 huruf besar The password contains too few uppercase letters Kata sandi terkandung terlalu sedikit huruf besar The password contains less than %1 lowercase letters Kata sandi terkandung kurang dari %1 huruf kecil The password contains too few lowercase letters Kata sandi terkandung terlalu sedikit huruf kecil The password contains less than %1 non-alphanumeric characters Kata sandi terkandung kurang dari %1 karakter non-alfanumerik The password contains too few non-alphanumeric characters Kata sandi terkandung terlalu sedikit non-alfanumerik The password is shorter than %1 characters Kata sandi terlalu pendek dari %1 karakter The password is too short Password terlalu pendek The password is just rotated old one Kata sandi hanya terotasi satu kali The password contains less than %1 character classes Kata sandi terkandung kurang dari %1 kelas karakter The password does not contain enough character classes Kata sandi tidak terkandung kelas karakter yang cukup The password contains more than %1 same characters consecutively Kata sandi terkandung lebih dari %1 karakter berurutan yang sama The password contains too many same characters consecutively Kata sandi terkandung terlalu banyak karakter berurutan yang sama The password contains more than %1 characters of the same class consecutively Kata sandi terkandung lebih dari %1 karakter dari kelas berurutan yang sama The password contains too many characters of the same class consecutively Kata sandi terkandung terlalu banyak karakter dari kelas berurutan yang sama The password contains monotonic sequence longer than %1 characters Kata sandi terkandung rangkaian monoton yang lebih panjang dari %1 karakter The password contains too long of a monotonic character sequence Kata sandi terkandung rangkaian karakter monoton yang panjang No password supplied Tidak ada kata sandi yang dipasok Cannot obtain random numbers from the RNG device Tidak dapat memperoleh angka acak dari piranti RNG Password generation failed - required entropy too low for settings Penghasilan kata sandi gagal - entropi yang diperlukan terlalu rendah untuk pengaturan The password fails the dictionary check - %1 Kata sandi gagal memeriksa kamus - %1 The password fails the dictionary check Kata sandi gagal memeriksa kamus Unknown setting - %1 Pengaturan tidak diketahui - %1 Unknown setting pengaturan tidak diketahui Bad integer value of setting - %1 Nilai bilangan bulat buruk dari pengaturan - %1 Bad integer value Nilai integer jelek Setting %1 is not of integer type Pengaturan %1 tidak termasuk tipe integer Setting is not of integer type Pengaturan tidak termasuk tipe integer Setting %1 is not of string type Pengaturan %1 tidak termasuk tipe string Setting is not of string type Pengaturan tidak termasuk tipe string Opening the configuration file failed Ada kesalahan saat membuka berkas konfigurasi The configuration file is malformed Kesalahan format pada berkas konfigurasi Fatal failure Kegagalan fatal Unknown error Ada kesalahan yang tidak diketahui Password is empty PackageChooserPage Form Formulir Product Name TextLabel Label teks Long Product Description Package Selection Please pick a product from the list. The selected product will be installed. PackageChooserViewStep Packages Page_Keyboard Form Isian Keyboard Model: Model Papan Ketik: Type here to test your keyboard Ketik di sini untuk mencoba papan ketik Anda Page_UserSetup Form Isian What is your name? Siapa nama Anda? What name do you want to use to log in? Nama apa yang ingin Anda gunakan untuk log in? Choose a password to keep your account safe. Pilih sebuah kata sandi untuk menjaga keamanan akun Anda. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>Ketik kata sandi yang sama dua kali, supaya kesalahan pengetikan dapat diketahui. Sebuah kata sandi yang bagus berisi campuran dari kata, nomor dan tanda bada, sebaiknya memiliki panjang paling sedikit delapan karakter, dan sebaiknya diganti dalam interval yang teratur.</small> What is the name of this computer? Apakah nama dari komputer ini? Your Full Name login <small>This name will be used if you make the computer visible to others on a network.</small> <small>Nama ini akan digunakan jika anda membuat komputer ini terlihat oleh orang lain dalam sebuah jaringan.</small> Computer Name Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Log in otomatis tanpa menanyakan sandi. Use the same password for the administrator account. Gunakan sandi yang sama untuk akun administrator. Choose a password for the administrator account. Pilih sebuah kata sandi untuk akun administrator. <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Ketik kata sandi yang sama dua kali, supaya kesalahan pengetikan dapat diketahui.</small> PartitionLabelsView Root Root Home Beranda Boot Boot EFI system Sistem EFI Swap Swap New partition for %1 Partisi baru untuk %1 New partition Partisi baru %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space Ruang Kosong New partition Partisi baru Name Nama File System Berkas Sistem Mount Point Lokasi Mount Size Ukuran PartitionPage Form Isian Storage de&vice: Media penyim&panan: &Revert All Changes &Pulihkan Semua Perubahan New Partition &Table Partisi Baru & Tabel Cre&ate Mem&buat &Edit &Sunting &Delete &Hapus New Volume Group Grup Volume Baru Resize Volume Group Ubah-ukuran Grup Volume Deactivate Volume Group Nonaktifkan Grup Volume Remove Volume Group Hapus Grup Volume I&nstall boot loader on: I&nstal boot loader di: Are you sure you want to create a new partition table on %1? Apakah Anda yakin ingin membuat tabel partisi baru pada %1? Can not create new partition Tidak bisa menciptakan partisi baru. The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. Partisi tabel pada %1 sudah memiliki %2 partisi primer, dan tidak ada lagi yang bisa ditambahkan. Silakan hapus salah satu partisi primer dan tambahkan sebuah partisi extended, sebagai gantinya. PartitionViewStep Gathering system information... Mengumpulkan informasi sistem... Partitions Paritsi Install %1 <strong>alongside</strong> another operating system. Instal %1 <strong>berdampingan</strong> dengan sistem operasi lain. <strong>Erase</strong> disk and install %1. <strong>Hapus</strong> diska dan instal %1. <strong>Replace</strong> a partition with %1. <strong>Ganti</strong> partisi dengan %1. <strong>Manual</strong> partitioning. Partisi <strong>manual</strong>. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Instal %1 <strong>berdampingan</strong> dengan sistem operasi lain di disk <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Hapus</strong> diska <strong>%2</strong> (%3) dan instal %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Ganti</strong> partisi pada diska <strong>%2</strong> (%3) dengan %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>Partisi Manual</strong> pada diska <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Disk <strong>%1</strong> (%2) Current: Saat ini: After: Sesudah: No EFI system partition configured Tiada partisi sistem EFI terkonfigurasi An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. Sebuah partisi sistem EFI perlu memulai %1.<br/><br/>Untuk mengkonfigurasi sebuah partisi sistem EFI, pergi mundur dan pilih atau ciptakan sebuah filesystem FAT32 dengan bendera <strong>esp</strong> yang difungsikan dan titik kait <strong>%2</strong>.<br/><br/>Kamu bisa melanjutkan tanpa menyetel sebuah partisi sistem EFI tapi sistemmu mungkin gagal memulai. EFI system partition flag not set Bendera partisi sistem EFI tidak disetel An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Sebuah partisi sistem EFI perlu memulai %1.<br/><br/>Sebuah partisi telah dikonfigurasi dengan titik kait <strong>%2</strong> tapi bendera <strong>esp</strong> tersebut tidak disetel.<br/>Untuk mengeset bendera, pergi mundur dan editlah partisi.<br/><br/>Kamu bisa melanjutkan tanpa menyetel bendera tapi sistemmu mungkin gagal memulai. Boot partition not encrypted Partisi boot tidak dienkripsi A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. Sebuah partisi tersendiri telah terset bersama dengan sebuah partisi root terenkripsi, tapi partisi boot tidak terenkripsi.<br/><br/>Ada kekhawatiran keamanan dengan jenis setup ini, karena file sistem penting tetap pada partisi tak terenkripsi.<br/>Kamu bisa melanjutkan jika kamu menghendaki, tapi filesystem unlocking akan terjadi nanti selama memulai sistem.<br/>Untuk mengenkripsi partisi boot, pergi mundur dan menciptakannya ulang, memilih <strong>Encrypt</strong> di jendela penciptaan partisi. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package Tidak bisa memilih KDE Plasma Look-and-Feel package PlasmaLnfPage Form Formulir Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Silakan pilih sebuah look-and-feel untuk KDE Plasma Desktop. Anda juga dapat melewati langkah ini dan konfigurasi look-and-feel setelah sistem terinstal. Mengeklik pilihan look-and-feel akan memberi Anda pratinjau langsung pada look-and-feel tersebut. PlasmaLnfViewStep Look-and-Feel Lihat-dan-Rasakan PreserveFiles Saving files for later ... Menyimpan file untuk kemudian... No files configured to save for later. Tiada file yang dikonfigurasi untuk penyimpanan nanti. Not all of the configured files could be preserved. Tidak semua file yang dikonfigurasi dapat dipertahankan. ProcessResult There was no output from the command. Tidak ada keluaran dari perintah. Output: Keluaran: External command crashed. Perintah eksternal rusak. Command <i>%1</i> crashed. Perintah <i>%1</i> mogok. External command failed to start. Perintah eksternal gagal dimulai Command <i>%1</i> failed to start. Perintah <i>%1</i> gagal dimulai. Internal error when starting command. Terjadi kesalahan internal saat menjalankan perintah. Bad parameters for process job call. Parameter buruk untuk memproses panggilan tugas, External command failed to finish. Perintah eksternal gagal diselesaikan . Command <i>%1</i> failed to finish in %2 seconds. Perintah <i>%1</i> gagal untuk diselesaikan dalam %2 detik. External command finished with errors. Perintah eksternal diselesaikan dengan kesalahan . Command <i>%1</i> finished with exit code %2. Perintah <i>%1</i> diselesaikan dengan kode keluar %2. QObject Default Keyboard Model Model Papan Ketik Standar Default Standar unknown tidak diketahui: extended extended unformatted tidak terformat: swap swap Unpartitioned space or unknown partition table Ruang tidak terpartisi atau tidak diketahui tabel partisinya (no mount point) Requirements checking for module <i>%1</i> is complete. %1 (%2) language[name] (country[name]) %1 (%2) No product No description provided. File not found Path <pre>%1</pre> must be an absolute path. Could not create new random file <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Hapus Grup Volume bernama %1. Remove Volume Group named <strong>%1</strong>. Hapus Grup Volume bernama <strong>%1</strong>. The installer failed to remove a volume group named '%1'. Installer gagal menghapus sebuah grup volume bernama '%1'. ReplaceWidget Form Isian Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Pilih tempat instalasi %1.<br/><font color="red">Peringatan: </font>hal ini akan menghapus semua berkas di partisi terpilih. The selected item does not appear to be a valid partition. Item yang dipilih tidak tampak seperti partisi yang valid. %1 cannot be installed on empty space. Please select an existing partition. %1 tidak dapat diinstal di ruang kosong. Mohon pilih partisi yang tersedia. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 tidak bisa diinstal pada Partisi Extended. Mohon pilih Partisi Primary atau Logical yang tersedia. %1 cannot be installed on this partition. %1 tidak dapat diinstal di partisi ini. Data partition (%1) Partisi data (%1) Unknown system partition (%1) Partisi sistem tidak dikenal (%1) %1 system partition (%2) Partisi sistem %1 (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>Partisi %1 teralu kecil untuk %2. Mohon pilih partisi dengan kapasitas minimal %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/>Tidak ditemui adanya Partisi EFI pada sistem ini. Mohon kembali dan gunakan Pemartisi Manual untuk set up %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>%1 akan diinstal pada %2.<br/><font color="red">Peringatan: </font>seluruh data %2 akan hilang. The EFI system partition at %1 will be used for starting %2. Partisi EFI pada %1 akan digunakan untuk memulai %2. EFI system partition: Partisi sistem EFI: ResizeFSJob Resize Filesystem Job Tugas Ubah-ukuran Filesystem Invalid configuration Konfigurasi taksah The file-system resize job has an invalid configuration and will not run. Tugas pengubahan ukuran filesystem mempunyai sebuah konfigurasi yang taksah dan tidak akan berjalan. KPMCore not Available KPMCore tidak Tersedia Calamares cannot start KPMCore for the file-system resize job. Calamares gak bisa menjalankan KPMCore untuk tugas pengubahan ukuran filesystem. Resize Failed Pengubahan Ukuran, Gagal The filesystem %1 could not be found in this system, and cannot be resized. Filesystem %1 enggak ditemukan dalam sistem ini, dan gak bisa diubahukurannya. The device %1 could not be found in this system, and cannot be resized. Perangkat %1 enggak ditemukan dalam sistem ini, dan gak bisa diubahukurannya. The filesystem %1 cannot be resized. Filesystem %1 gak bisa diubahukurannya. The device %1 cannot be resized. Perangkat %1 gak bisa diubahukurannya. The filesystem %1 must be resized, but cannot. Filesystem %1 mestinya bisa diubahukurannya, namun gak bisa. The device %1 must be resized, but cannot Perangkat %1 mestinya bisa diubahukurannya, namun gak bisa. ResizePartitionJob Resize partition %1. Ubah ukuran partisi %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. Installer gagal untuk merubah ukuran partisi %1 pada disk '%2'. ResizeVolumeGroupDialog Resize Volume Group Ubah-ukuran Grup Volume ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Ubah ukuran grup volume bernama %1 dari %2 ke %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. Ubah ukuran grup volume bernama <strong>%1</strong> dari <strong>%2</strong> ke %3<strong>. The installer failed to resize a volume group named '%1'. Installer gagal mengubah ukuran sebuah grup volume bernama '%1'. ResultsListDialog For best results, please ensure that this computer: Untuk hasil terbaik, mohon pastikan bahwa komputer ini: System requirements Kebutuhan sistem ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> Komputer ini tidak memenuhi syarat minimum untuk memasang %1. Installer tidak dapat dilanjutkan. <a href=" This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. Komputer ini tidak memenuhi beberapa syarat yang dianjurkan untuk memasang %1. Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. This program will ask you some questions and set up %2 on your computer. Program ini akan mengajukan beberapa pertanyaan dan menyetel %2 pada komputer Anda. ScanningDialog Scanning storage devices... Memeriksa media penyimpanan... Partitioning Mempartisi SetHostNameJob Set hostname %1 Pengaturan hostname %1 Set hostname <strong>%1</strong>. Atur hostname <strong>%1</strong>. Setting hostname %1. Mengatur hostname %1. Internal Error Kesalahan Internal Cannot write hostname to target system Tidak dapat menulis nama host untuk sistem target SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Model papan ketik ditetapkan ke %1, tata letak ke %2-%3 Failed to write keyboard configuration for the virtual console. Gagal menulis konfigurasi keyboard untuk virtual console. Failed to write to %1 Gagal menulis ke %1. Failed to write keyboard configuration for X11. Gagal menulis konfigurasi keyboard untuk X11. Failed to write keyboard configuration to existing /etc/default directory. Gagal menulis konfigurasi keyboard ke direktori /etc/default yang ada. SetPartFlagsJob Set flags on partition %1. Setel bendera pada partisi %1. Set flags on %1MiB %2 partition. Set flags on new partition. Setel bendera pada partisi baru. Clear flags on partition <strong>%1</strong>. Bersihkan bendera pada partisi <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Bersihkan bendera pada partisi baru. Flag partition <strong>%1</strong> as <strong>%2</strong>. Benderakan partisi <strong>%1</strong> sebagai <strong>%2</strong>. Flag new partition as <strong>%1</strong>. Benderakan partisi baru sebagai <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Membersihkan bendera pada partisi <strong>%1</strong>. Clearing flags on new partition. Membersihkan bendera pada partisi baru. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Menyetel bendera <strong>%2</strong> pada partisi <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. Menyetel bendera <strong>%1</strong> pada partisi baru. The installer failed to set flags on partition %1. Installer gagal menetapkan bendera pada partisi %1. SetPasswordJob Set password for user %1 Setel sandi untuk pengguna %1 Setting password for user %1. Mengatur sandi untuk pengguna %1. Bad destination system path. Jalur lokasi sistem tujuan buruk. rootMountPoint is %1 rootMountPoint adalah %1 Cannot disable root account. Tak bisa menonfungsikan akun root. passwd terminated with error code %1. passwd terhenti dengan kode galat %1. Cannot set password for user %1. Tidak dapat menyetel sandi untuk pengguna %1. usermod terminated with error code %1. usermod dihentikan dengan kode kesalahan %1. SetTimezoneJob Set timezone to %1/%2 Setel zona waktu ke %1/%2 Cannot access selected timezone path. Tidak dapat mengakses jalur lokasi zona waktu yang dipilih. Bad path: %1 Jalur lokasi buruk: %1 Cannot set timezone. Tidak dapat menyetel zona waktu. Link creation failed, target: %1; link name: %2 Pembuatan tautan gagal, target: %1; nama tautan: %2 Cannot set timezone, Tidak bisa menetapkan zona waktu. Cannot open /etc/timezone for writing Tidak bisa membuka /etc/timezone untuk penulisan ShellProcessJob Shell Processes Job Pekerjaan yang diselesaikan oleh shell SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. Berikut adalah tinjauan mengenai yang akan terjadi setelah Anda memulai prosedur instalasi. SummaryViewStep Summary Ikhtisar TrackingInstallJob Installation feedback Umpan balik instalasi. Sending installation feedback. Mengirim umpan balik installasi. Internal error in install-tracking. Galat intern di pelacakan-instalasi. HTTP request timed out. Permintaan waktu HTTP habis. TrackingMachineNeonJob Machine feedback Mesin umpan balik Configuring machine feedback. Mengkonfigurasi mesin umpan balik. Error in machine feedback configuration. Galat di konfigurasi mesin umpan balik. Could not configure machine feedback correctly, script error %1. Tidak dapat mengkonfigurasi mesin umpan balik dengan benar, naskah galat %1 Could not configure machine feedback correctly, Calamares error %1. Tidak dapat mengkonfigurasi mesin umpan balik dengan benar, Calamares galat %1. TrackingPage Form Formulir Placeholder Placeholder <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>Dengan memilih ini, Anda akan mengirim <span style=" font-weight:600;">tidak ada informasi di </span> tentang instalasi Anda. </p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Klik disini untuk informasi lebih lanjut tentang umpan balik pengguna </span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. Instal bantuan pelacakan %1 untuk melihat berapa banyak pengguna memiliki, piranti keras apa yang mereka instal %1 dan (dengan dua pilihan terakhir), dapatkan informasi berkelanjutan tentang aplikasi yang disukai. Untuk melihat apa yang akan dikirim, silakan klik ikon bantuan ke beberapa area selanjtunya. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. Dengan memilih ini Anda akan mengirim informasi tentang instalasi dan piranti keras Anda. Informasi ini hanya akan <b>dikirim sekali</b> setelah instalasi selesai. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. Dengan memilih ini anda akan <b> secara berkala</b> mengirim informasi tentang instalasi, piranti keras dan aplikasi Anda, ke %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. Dengan memilih ini anda akan<b>secara teratur</b> mengirim informasi tentang instalasi, piranti keras, aplikasi dan pola pemakaian Anda, ke %1. TrackingViewStep Feedback Umpan balik UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> Your username is too long. Nama pengguna Anda terlalu panjang. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Only letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Hostname Anda terlalu pendek. Your hostname is too long. Hostname Anda terlalu panjang. Your passwords do not match! Sandi Anda tidak sama! UsersViewStep Users Pengguna VariantModel Key Value Nilai VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Daftar dari Volume Fisik Volume Group Name: Nama Grup Volume: Volume Group Type: Tipe Grup Volume: Physical Extent Size: Ukuran Luas Fisik: MiB MiB Total Size: Total Ukuran: Used Size: Ukuran Terpakai: Total Sectors: Total Sektor: Quantity of LVs: Kuantitas LV: WelcomePage Form Isian Select application and system language Open donations website &Donate Open help and support website Open issues and bug-tracking website Open release notes website &Release notes &Catatan rilis &Known issues &Isu-isu yang diketahui &Support &Dukungan &About &Tentang <h1>Welcome to the %1 installer.</h1> <h1>Selamat datang di installer %1.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Selamat datang di Calamares installer untuk %1.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Welcome to %1 setup.</h1> About %1 setup About %1 installer Tentang installer %1 <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support Dukungan %1 WelcomeQmlViewStep Welcome Selamat Datang WelcomeViewStep Welcome Selamat Datang notesqml <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> About Support Known issues Release notes Donate calamares-3.2.20/lang/calamares_is.ts000066400000000000000000005044471362604102500174570ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. BootLoaderModel Master Boot Record of %1 Aðalræsifærsla (MBR) %1 Boot Partition Ræsidisksneið System Partition Kerfisdisksneið Do not install a boot loader Ekki setja upp ræsistjóra %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page Auð síða Calamares::DebugWindow Form Eyðublað GlobalStorage VíðværGeymsla JobQueue Vinnuröð Modules Forritseiningar Type: Tegund: none ekkert Interface: Viðmót: Tools Verkfæri Reload Stylesheet Endurhlaða stílblað Widget Tree Greinar viðmótshluta Debug information Villuleitarupplýsingar Calamares::ExecutionViewStep Set up Setja upp Install Setja upp Calamares::FailJob Job failed (%1) Verk mistókst (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Búið Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Keyri skipun %1 %2 Calamares::PythonJob Running %1 operation. Keyri %1 aðgerð. Bad working directory path Röng slóð á vinnumöppu Working directory %1 for python job %2 is not readable. Vinnslumappa %1 fyrir python-verkið %2 er ekki lesanleg. Bad main script file Röng aðal-skriftuskrá Main script file %1 for python job %2 is not readable. Aðal-skriftuskrá %1 fyrir python-verkið %2 er ekki lesanleg. Boost.Python error in job "%1". Boost.Python villa í verkinu "%1". Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager &Back &Til baka &Next &Næst &Cancel &Hætta við Cancel setup without changing the system. Cancel installation without changing the system. Hætta við uppsetningu ánþess að breyta kerfinu. Setup Failed Uppsetning mistókst Would you like to paste the install log to the web? Install Log Paste URL The upload was unsuccessful. No web-paste was done. Calamares Initialization Failed Calamares uppsetning mistókst %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. <br/>The following modules could not be loaded: Continue with installation? Halda áfram með uppsetningu? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Setja upp núna &Set up &Setja upp &Install &Setja upp Setup is complete. Close the setup program. Cancel setup? Hætta við uppsetningu? Cancel installation? Hætta við uppsetningu? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Viltu virkilega að hætta við núverandi uppsetningarferli? Uppsetningarforritið mun hætta og allar breytingar tapast. &Yes &Já &No &Nei &Close &Loka Continue with setup? Halda áfram með uppsetningu? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> %1 uppsetningarforritið er um það bil að gera breytingar á diskinum til að setja upp %2.<br/><strong>Þú munt ekki geta afturkallað þessar breytingar.</strong> &Install now Setja &inn núna Go &back Fara til &baka &Done &Búið The installation is complete. Close the installer. Uppsetning er lokið. Lokaðu uppsetningarforritinu. Error Villa Installation Failed Uppsetning mistókst CalamaresPython::Helper Unknown exception type Óþekkt tegund fráviks unparseable Python error óþáttanleg Python villa unparseable Python traceback óþáttanleg Python reki Unfetchable Python error. Ósækjanleg Python villa. CalamaresUtils Install log posted to: %1 CalamaresWindow %1 Setup Program %1 Installer %1 uppsetningarforrit Show debug information Birta villuleitarupplýsingar CheckerContainer Gathering system information... Söfnun kerfis upplýsingar... ChoicePage Form Eyðublað After: Eftir: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Handvirk disksneiðing</strong><br/>Þú getur búið til eða breytt stærð disksneiða sjálft. Boot loader location: Staðsetning ræsistjóra Select storage de&vice: Veldu geymslu tæ&ki: Current: Núverandi: Reuse %1 as home partition for %2. Endurnota %1 sem heimasvæðis disksneið fyrir %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Veldu disksneið til að minnka, dragðu síðan botnstikuna til að breyta stærðinni</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. <strong>Select a partition to install on</strong> <strong>Veldu disksneið til að setja upp á </strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. EFI kerfisdisksneið er hvergi að finna á þessu kerfi. Farðu til baka og notaðu handvirka skiptingu til að setja upp %1. The EFI system partition at %1 will be used for starting %2. EFI kerfisdisksneið á %1 mun verða notuð til að ræsa %2. EFI system partition: EFI kerfisdisksneið: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Þetta geymslu tæki hefur mörg stýrikerfi á sér. Hvað viltu gera?<br/>Þú verður að vera fær um að yfirfara og staðfesta val þitt áður en breytingar eru gerðar til geymslu tæki. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Eyða disk</strong><br/>Þetta mun <font color="red">eyða</font> öllum gögnum á þessu valdna geymslu tæki. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Þetta geymslu tæki hefur %1 á sér. Hvað viltu gera?<br/>Þú verður að vera fær um að yfirfara og staðfesta val þitt áður en breytingar eru gerðar til geymslu tæki. No Swap Reuse Swap Swap (no Hibernate) Swap (with Hibernate) Swap to file <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Setja upp samhliða</strong><br/>Uppsetningarforritið mun minnka disksneið til að búa til pláss fyrir %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Skipta út disksneið</strong><br/>Skiptir disksneið út með %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Þetta geymslu tæki hefur stýrikerfi á sér. Hvað viltu gera?<br/>Þú verður að vera fær um að yfirfara og staðfesta val þitt áður en breytingar eru gerðar til geymslu tæki. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Þetta geymslu tæki hefur mörg stýrikerfi á sér. Hvað viltu gera?<br/>Þú verður að vera fær um að yfirfara og staðfesta val þitt áður en breytingar eru gerðar til geymslu tæki. ClearMountsJob Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 Hreinsaði alla tengipunkta fyrir %1 ClearTempMountsJob Clear all temporary mounts. Hreinsa alla bráðabirgðatengipunkta. Clearing all temporary mounts. Hreinsa alla bráðabirgðatengipunkta. Cannot get list of temporary mounts. Cleared all temporary mounts. Hreinsaði alla bráðabirgðatengipunkta. CommandList Could not run command. Gat ekki keyrt skipun. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Búa til disksneið MiB MiB Partition &Type: &Tegund disksneiðar: &Primary &Aðal E&xtended Útví&kkuð Fi&le System: Skráa&kerfi: LVM LV name LVM LV nafn Flags: Flögg: &Mount Point: Tengi&punktur: Si&ze: St&ærð: En&crypt &Dulrita Logical Rökleg Primary Aðal GPT GPT Mountpoint already in use. Please select another one. Tengipunktur er þegar í notkun. Veldu einhvern annan. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. Búa til nýja %1 disksneiðatöflu á %2. The installer failed to create partition on disk '%1'. Uppsetningarforritinu mistókst að búa til disksneið á diski '%1'. CreatePartitionTableDialog Create Partition Table Búa til disksneiðatöflu Creating a new partition table will delete all existing data on the disk. Gerð nýrrar disksneiðatöflu mun eyða öllum gögnum á diskinum. What kind of partition table do you want to create? Hverning disksneiðstöflu langar þig til að búa til? Master Boot Record (MBR) Aðalræsifærsla (MBR) GUID Partition Table (GPT) GUID disksneiðatafla (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Búa til nýja %1 disksneiðatöflu á %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Búa til nýja <strong>%1</strong> disksneiðatöflu á <strong>%2</strong> (%3). Creating new %1 partition table on %2. Búa til nýja %1 disksneiðatöflu á %2. The installer failed to create a partition table on %1. Uppsetningarforritinu mistókst að búa til disksneiðatöflu á diski '%1'. CreateUserJob Create user %1 Búa til notanda %1 Create user <strong>%1</strong>. Búa til notanda <strong>%1</strong>. Creating user %1. Bý til notanda %1. Sudoers dir is not writable. Sudoers dir er ekki skrifanleg. Cannot create sudoers file for writing. Get ekki búið til sudoers skrá til að lesa. Cannot chmod sudoers file. Get ekki chmod sudoers skrá. Cannot open groups file for reading. Get ekki opnað hópa skrá til að lesa. CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. Eyða disksneið %1. Delete partition <strong>%1</strong>. Eyða disksneið <strong>%1</strong>. Deleting partition %1. Eyði disksneið %1. The installer failed to delete partition %1. Uppsetningarforritinu mistókst að eyða disksneið %1. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. This device has a <strong>%1</strong> partition table. Þetta tæki hefur <strong>%1</strong> sniðtöflu. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1 - (%2) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Skrifa LUKS stillingar fyrir Dracut til %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Failed to open %1 Tókst ekki að opna %1 DummyCppJob Dummy C++ Job Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Breyta fyrirliggjandi disksneið Content: Innihald: &Keep &Halda Format Forsníða Warning: Formatting the partition will erase all existing data. Aðvörun: Ef disksneiðin er forsniðin munu öll gögn eyðast. &Mount Point: Tengi&punktur: Si&ze: St&ærð: MiB MiB Fi&le System: Skráaker&fi: Flags: Flögg: Mountpoint already in use. Please select another one. Tengipunktur er þegar í notkun. Veldu einhvern annan. EncryptWidget Form Eyðublað En&crypt system &Dulrita kerfi Passphrase Lykilorð Confirm passphrase Staðfesta lykilorð Please enter the same passphrase in both boxes. Vinsamlegast sláðu inn sama lykilorðið í báða kassana. FillGlobalStorageJob Set partition information Setja upplýsingar um disksneið Install %1 on <strong>new</strong> %2 system partition. Setja upp %1 á <strong>nýja</strong> %2 disk sneiðingu. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Setja upp <strong>nýtt</strong> %2 snið með tengipunkti <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Setja upp %2 á %3 disk sneiðingu <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Setja upp %3 snið <strong>%1</strong> með tengipunkti <strong>%2</strong>. Install boot loader on <strong>%1</strong>. Setja ræsistjórann upp á <strong>%1</strong>. Setting up mount points. Set upp tengipunkta. FinishedPage Form Eyðublað <Restart checkbox tooltip> &Restart now &Endurræsa núna <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>Allt klárt.</h1><br/>%1 hefur verið sett upp á tölvunni þinni.<br/>Þú getur nú endurræst í nýja kerfið, eða halda áfram að nota %2 Lifandi umhverfi. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. FinishedViewStep Finish Ljúka Setup Complete Uppsetningu lokið Installation Complete Uppsetningu lokið The setup of %1 is complete. Uppsetningu á %1 er lokið. The installation of %1 is complete. Uppsetningu á %1 er lokið. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatting partition %1 with file system %2. Forsníða disksneið %1 með %2 skráakerfinu. The installer failed to format partition %1 on disk '%2'. Uppsetningarforritinu mistókst að forsníða disksneið %1 á diski '%2'. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source er í sambandi við aflgjafa The system is not plugged in to a power source. Kerfið er ekki í sambandi við aflgjafa. is connected to the Internet er tengd við Internetið The system is not connected to the Internet. Kerfið er ekki tengd við internetið. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. Uppsetningarforritið er ekki keyrandi með kerfisstjóraheimildum. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. Skjárinn er of lítill til að birta uppsetningarforritið. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Konsole ekki uppsett Please install KDE Konsole and try again! Executing script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script Skrifta KeyboardPage Set keyboard model to %1.<br/> Set keyboard layout to %1/%2. KeyboardViewStep Keyboard Lyklaborð LCLocaleDialog System locale setting Staðfærsla kerfisins stilling The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. &Cancel &Hætta við &OK &à lagi LicensePage Form Eyðublað <h1>License Agreement</h1> I accept the terms and conditions above. Ég samþykki skilyrði leyfissamningsins hér að ofan. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License Notkunarleyfi LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 rekill</strong><br/>hjá %2 <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 pakki</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">frá %2</font> File: %1 Show the license text Open license agreement in browser. Hide license text LocalePage The system language will be set to %1. Tungumál kerfisins verður sett sem %1. The numbers and dates locale will be set to %1. Region: Hérað: Zone: Svæði: &Change... &Breyta... Set timezone to %1/%2.<br/> Setja tímabelti sem %1/%2.<br/> LocaleViewStep Location Staðsetning LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Configuration Error No root mount point is set for MachineId. NetInstallPage Name Heiti Description Lýsing Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Incorrect configuration) NetInstallViewStep Package selection Valdir pakkar Office software Office package Browser software Browser package Web browser Kernel Services Login Desktop Applications NotesQmlViewStep Notes OEMPage Ba&tch: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> OEMViewStep OEM Configuration Set the OEM Batch Identifier to <code>%1</code>. PWQ Password is too short Lykilorðið þitt er of stutt Password is too long Lykilorðið þitt er of langt Password is too weak Lykilorðið þitt er of veikt Memory allocation error when setting '%1' Memory allocation error The password is the same as the old one The password is a palindrome The password differs with case changes only The password is too similar to the old one The password contains the user name in some form The password contains words from the real name of the user in some form The password contains forbidden words in some form The password contains less than %1 digits The password contains too few digits The password contains less than %1 uppercase letters The password contains too few uppercase letters The password contains less than %1 lowercase letters The password contains too few lowercase letters The password contains less than %1 non-alphanumeric characters The password contains too few non-alphanumeric characters The password is shorter than %1 characters The password is too short Lykilorðið er of stutt The password is just rotated old one The password contains less than %1 character classes The password does not contain enough character classes The password contains more than %1 same characters consecutively The password contains too many same characters consecutively The password contains more than %1 characters of the same class consecutively The password contains too many characters of the same class consecutively The password contains monotonic sequence longer than %1 characters The password contains too long of a monotonic character sequence No password supplied Cannot obtain random numbers from the RNG device Password generation failed - required entropy too low for settings The password fails the dictionary check - %1 The password fails the dictionary check Unknown setting - %1 Unknown setting Bad integer value of setting - %1 Bad integer value Setting %1 is not of integer type Setting is not of integer type Setting %1 is not of string type Setting is not of string type Opening the configuration file failed The configuration file is malformed Fatal failure Unknown error Óþekkt villa Password is empty PackageChooserPage Form Eyðublað Product Name TextLabel Long Product Description Package Selection Valdir pakkar Please pick a product from the list. The selected product will be installed. PackageChooserViewStep Packages Pakkar Page_Keyboard Form Eyðublað Keyboard Model: Lyklaborðs tegund: Type here to test your keyboard Skrifaðu hér til að prófa lyklaborðið Page_UserSetup Form Eyðublað What is your name? Hvað heitir þú? What name do you want to use to log in? Hvaða nafn vilt þú vilt nota til að skrá þig inn? Choose a password to keep your account safe. Veldu lykilorð til að halda reikningnum þínum öruggum. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>Sláðu inn sama lykilorðið tvisvar, þannig að það geta verið athugað fyrir innsláttarvillur. Góð lykilorð mun innihalda blöndu af stöfum, númerum og greinarmerki, ætti að vera að minnsta kosti átta stafir að lengd, og ætti að vera breytt með reglulegu millibili.</small> What is the name of this computer? Hvað er nafnið á þessari tölvu? Your Full Name login <small>This name will be used if you make the computer visible to others on a network.</small> <small>Þetta nafn verður notað ef þú gerir tölvuna sýnilega öðrum á neti.</small> Computer Name Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Skrá inn sjálfkrafa án þess að biðja um lykilorð. Use the same password for the administrator account. Nota sama lykilorð fyrir kerfisstjóra reikning. Choose a password for the administrator account. Veldu lykilorð fyrir kerfisstjóra reikning. <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Sláðu sama lykilorð tvisvar, þannig að það er hægt að yfirfara innsláttarvillur.</small> PartitionLabelsView Root Rót Home Heimasvæði Boot Ræsisvæði EFI system EFI-kerfi Swap Swap diskminni New partition for %1 Ný disksneið fyrir %1 New partition Ný disksneið %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space Laust pláss New partition Ný disksneið Name Heiti File System Skráakerfi Mount Point Tengipunktur Size Stærð PartitionPage Form Eyðublað Storage de&vice: Geymslu tæ&ki: &Revert All Changes &Afturkalla allar breytingar New Partition &Table Ný disksneiðatafla Cre&ate Útbú&a &Edit &Breyta &Delete &Eyða New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group I&nstall boot loader on: Are you sure you want to create a new partition table on %1? Ertu viss um að þú viljir búa til nýja disksneið á %1? Can not create new partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. PartitionViewStep Gathering system information... Söfnun kerfis upplýsingar... Partitions Disksneiðar Install %1 <strong>alongside</strong> another operating system. Setja upp %1 <strong>ásamt</strong> ásamt öðru stýrikerfi. <strong>Erase</strong> disk and install %1. <strong>Eyða</strong> disk og setja upp %1. <strong>Replace</strong> a partition with %1. <strong>Skipta út</strong> disksneið með %1. <strong>Manual</strong> partitioning. <strong>Handvirk</strong> disksneiðaskipting. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Uppsetning %1 <strong>með</strong> öðru stýrikerfi á disk <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Eyða</strong> disk <strong>%2</strong> (%3) og setja upp %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Skipta út</strong> disksneið á diski <strong>%2</strong> (%3) með %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>Handvirk</strong> disksneiðaskipting á diski <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Diskur <strong>%1</strong> (%2) Current: Núverandi: After: Eftir: No EFI system partition configured Ekkert EFI kerfisdisksneið stillt An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. EFI system partition flag not set An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form Eyðublað Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel Útlit og hegðun PreserveFiles Saving files for later ... Vista skrár fyrir seinna ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: External command crashed. Command <i>%1</i> crashed. External command failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Bad parameters for process job call. External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Command <i>%1</i> finished with exit code %2. QObject Default Keyboard Model Sjálfgefin tegund lyklaborðs Default Sjálfgefið unknown óþekkt extended útvíkkuð unformatted ekki forsniðin swap swap diskminni Unpartitioned space or unknown partition table (no mount point) (enginn tengipunktur) Requirements checking for module <i>%1</i> is complete. %1 (%2) language[name] (country[name]) %1 (%2) No product No description provided. File not found Path <pre>%1</pre> must be an absolute path. Could not create new random file <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form Eyðublað Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Veldu hvar á að setja upp %1.<br/><font color="red">Aðvörun: </font>þetta mun eyða öllum skrám á valinni disksneið. The selected item does not appear to be a valid partition. Valið atriði virðist ekki vera gild disksneið. %1 cannot be installed on empty space. Please select an existing partition. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 cannot be installed on this partition. %1 er hægt að setja upp á þessari disksneið. Data partition (%1) Gagnadisksneið (%1) Unknown system partition (%1) Óþekkt kerfisdisksneið (%1) %1 system partition (%2) %1 kerfisdisksneið (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>Disksneið %1 er of lítil fyrir %2. Vinsamlegast veldu disksneið með að lámark %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/>EFI kerfisdisksneið er hvergi að finna á þessu kerfi. Vinsamlegast farðu til baka og notaðu handvirka skiptingu til að setja upp %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>%1 mun vera sett upp á %2.<br/><font color="red">Aðvörun: </font>öll gögn á disksneið %2 mun verða eytt. The EFI system partition at %1 will be used for starting %2. EFI kerfis stýring á %1 mun vera notuð til að byrja %2. EFI system partition: EFI kerfisdisksneið: ResizeFSJob Resize Filesystem Job Invalid configuration The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. Breyti stærð disksneiðar %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. Uppsetningarforritinu mistókst að breyta stærð disksneiðar %1 á diski '%2'. ResizeVolumeGroupDialog Resize Volume Group ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: Fyrir bestu niðurstöður, skaltu tryggja að þessi tölva: System requirements Kerfiskröfur ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> Þessi tölva uppfyllir ekki lágmarkskröfur um uppsetningu %1.<br/>Uppsetningin getur ekki haldið áfram. <a href="#details">Upplýsingar...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. Þessi tölva uppfyllir ekki lágmarkskröfur um uppsetningu %1.<br/>Uppsetningin getur haldið áfram, en sumir eiginleikar gætu verið óvirk. This program will ask you some questions and set up %2 on your computer. Þetta forrit mun spyrja þig nokkurra spurninga og setja upp %2 á tölvunni þinni. ScanningDialog Scanning storage devices... Skönnun geymslu tæki... Partitioning Partasneiðing SetHostNameJob Set hostname %1 Setja vélarheiti %1 Set hostname <strong>%1</strong>. Setja vélarheiti <strong>%1</strong>. Setting hostname %1. Stilla vélarheiti %1. Internal Error Innri Villa Cannot write hostname to target system SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Failed to write keyboard configuration for the virtual console. Failed to write to %1 Tókst ekki að skrifa %1 Failed to write keyboard configuration for X11. Failed to write keyboard configuration to existing /etc/default directory. SetPartFlagsJob Set flags on partition %1. Set flags on %1MiB %2 partition. Set flags on new partition. Clear flags on partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag new partition as <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. Uppsetningarforritinu mistókst að setja flögg á disksneið %1. SetPasswordJob Set password for user %1 Gerðu lykilorð fyrir notanda %1 Setting password for user %1. Geri lykilorð fyrir notanda %1. Bad destination system path. rootMountPoint is %1 Cannot disable root account. Ekki er hægt að aftengja kerfisstjóra reikning. passwd terminated with error code %1. Cannot set password for user %1. Get ekki sett lykilorð fyrir notanda %1. usermod terminated with error code %1. usermod endaði með villu kóðann %1. SetTimezoneJob Set timezone to %1/%2 Setja tímabelti til %1/%2 Cannot access selected timezone path. Bad path: %1 Cannot set timezone. Get ekki sett tímasvæði. Link creation failed, target: %1; link name: %2 Cannot set timezone, Get ekki sett tímasvæði, Cannot open /etc/timezone for writing Get ekki opnað /etc/timezone til að skrifa. ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. Þetta er yfirlit yfir það sem mun gerast þegar þú byrjar að setja upp aðferð. SummaryViewStep Summary Yfirlit TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingMachineNeonJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form Eyðublað Placeholder Frátökueining <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. TrackingViewStep Feedback UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> Your username is too long. Notandanafnið þitt er of langt. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Only letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Notandanafnið þitt er of stutt. Your hostname is too long. Notandanafnið þitt er of langt. Your passwords do not match! Lykilorð passa ekki! UsersViewStep Users Notendur VariantModel Key Value VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB MiB Total Size: Heildar stærð: Used Size: Notuð stærð: Total Sectors: Quantity of LVs: WelcomePage Form Eyðublað Select application and system language Veldu tungumál forrits og kerfis Open donations website &Donate Styr&kja Open help and support website Open issues and bug-tracking website Open release notes website Opna vefsvæði með upplýsingum um útgáfuna &Release notes &Um útgáfu &Known issues &Þekktir gallar &Support &Stuðningur &About &Um <h1>Welcome to the %1 installer.</h1> <h1>Velkomin í %1 uppsetningarforritið.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Velkomin til Calamares uppsetningar fyrir %1</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Velkomin til Calamares uppsetningarforritið fyrir %1</h1> <h1>Welcome to %1 setup.</h1> <h1>Velkomin í %1 uppsetninguna.</h1> About %1 setup Um %1 uppsetninguna About %1 installer Um %1 uppsetningarforrrit <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. <h1>%1</h1><br/><strong>%2<br/>fyrir %3</strong><br/><br/>Höfundarréttur 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Höfundarréttur 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Þakkir til <a href="https://calamares.io/team/">Calamares teymisinsm</a> og <a href="https://www.transifex.com/calamares/calamares/">allra þýðenda Calamares</a>.<br/><br/>Þróun <a href="https://calamares.io/">Calamares</a> er studd af <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support %1 stuðningur WelcomeQmlViewStep Welcome Velkomin(n) WelcomeViewStep Welcome Velkomin(n) notesqml <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> About Support Known issues Release notes Donate calamares-3.2.20/lang/calamares_it_IT.ts000066400000000000000000005602551362604102500200530ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. L'<strong>ambiente di avvio</strong> di questo sistema. <br><br>I vecchi sistemi x86 supportano solo <strong>BIOS</strong>. <bt>I sistemi moderni normalmente usano <strong>EFI</strong> ma possono anche apparire come sistemi BIOS se avviati in modalità compatibile. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. Il sistema è stato avviato con un ambiente di boot <strong>EFI</strong>.<br><br>Per configurare l'avvio da un ambiente EFI, il programma d'installazione deve inserire un boot loader come <strong>GRUB</strong> o <strong>systemd-boot</strong> su una <strong>EFI System Partition</strong>. Ciò avviene automaticamente, a meno che non si scelga il partizionamento manuale che permette di scegliere un proprio boot loader personale. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. ll sistema è stato avviato con un ambiente di boot <strong>BIOS</strong>.<br><br>Per configurare l'avvio da un ambiente BIOS, il programma d'installazione deve installare un boot loader come <strong>GRUB</strong> all'inizio di una partizione o nel <strong>Master Boot Record</strong> vicino all'origine della tabella delle partizioni (preferito). Ciò avviene automaticamente, a meno che non si scelga il partizionamento manuale che permette di fare una configurazione personale. BootLoaderModel Master Boot Record of %1 Master Boot Record di %1 Boot Partition Partizione di avvio System Partition Partizione di sistema Do not install a boot loader Non installare un boot loader %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page Pagina Vuota Calamares::DebugWindow Form Modulo GlobalStorage GlobalStorage JobQueue JobQueue Modules Moduli Type: Tipo: none nessuna Interface: Interfaccia: Tools Strumenti Reload Stylesheet Ricarica il foglio di stile Widget Tree Albero dei Widget Debug information Informazioni di debug Calamares::ExecutionViewStep Set up Installazione Install Installa Calamares::FailJob Job failed (%1) Operazione fallita (%1) Programmed job failure was explicitly requested. Il fallimento dell'operazione programmata è stato richiesto esplicitamente. Calamares::JobThread Done Fatto Calamares::NamedJob Example job (%1) Operazione d'esempio (%1) Calamares::ProcessJob Run command '%1' in target system. Esegui il comando '%1' sul sistema di destinazione Run command '%1'. Esegui il comando '1%' Running command %1 %2 Comando in esecuzione %1 %2 Calamares::PythonJob Running %1 operation. Operazione %1 in esecuzione. Bad working directory path Il percorso della cartella corrente non è corretto Working directory %1 for python job %2 is not readable. La cartella corrente %1 per l'attività di Python %2 non è accessibile. Bad main script file File dello script principale non valido Main script file %1 for python job %2 is not readable. Il file principale dello script %1 per l'attività di python %2 non è accessibile. Boost.Python error in job "%1". Errore da Boost.Python nell'operazione "%1". Calamares::QmlViewStep Loading ... Caricamento ... QML Step <i>%1</i>. QML Progresso <i>%1</i>. Loading failed. Caricamento fallito. Calamares::RequirementsChecker Waiting for %n module(s). In attesa del(i) modulo(i) %n. In attesa del(i) modulo(i) %n. (%n second(s)) (%n secondo) (%n secondi) System-requirements checking is complete. Il controllo dei requisiti di sistema è completo. Calamares::ViewManager &Back &Indietro &Next &Avanti &Cancel &Annulla Cancel setup without changing the system. Annulla l'installazione senza modificare il computer Cancel installation without changing the system. Annullare l'installazione senza modificare il sistema. Setup Failed Installazione fallita Would you like to paste the install log to the web? Vuoi incollare il log di installazione nel web? Install Log Paste URL Incolla URL Log di Installazione The upload was unsuccessful. No web-paste was done. Il caricamento è fallito. Non è stato eseguito web-paste. Calamares Initialization Failed Inizializzazione di Calamares Fallita %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. %1 non può essere installato. Calamares non è stato in grado di caricare tutti i moduli configurati. Questo è un problema del modo in cui Calamares viene utilizzato dalla distribuzione. <br/>The following modules could not be loaded: <br/>Non è stato possibile caricare il seguente modulo: Continue with installation? Continuare l'installazione? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> Il %1 programma di installazione sta per fare dei cambiamenti sul tuo disco per installare %2. Non sarà possibile annullare questi cambiamenti. &Set up now &Installa adesso &Set up &Installazione &Install &Installa Setup is complete. Close the setup program. Installazione completata. Chiudere il programma di installazione. Cancel setup? Annullare l'installazione? Cancel installation? Annullare l'installazione? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Vuoi davvero annullare il processo di installazione? Il programma di installazione verrrà terminato e tutti i cambiamenti verranno persi. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Si vuole davvero annullare l'installazione in corso? Il programma d'installazione sarà terminato e tutte le modifiche andranno perse. &Yes &Si &No &No &Close &Chiudi Continue with setup? Procedere con la configurazione? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> Il programma d'nstallazione %1 sta per eseguire delle modifiche al tuo disco per poter installare %2.<br/><strong> Non sarà possibile annullare tali modifiche.</strong> &Install now &Installa adesso Go &back &Indietro &Done &Fatto The installation is complete. Close the installer. L'installazione è terminata. Chiudere il programma d'installazione. Error Errore Installation Failed Installazione non riuscita CalamaresPython::Helper Unknown exception type Tipo di eccezione sconosciuto unparseable Python error Errore Python non definibile unparseable Python traceback Traceback Python non definibile Unfetchable Python error. Errore di Python non definibile. CalamaresUtils Install log posted to: %1 Log di installazione caricato: %1 CalamaresWindow %1 Setup Program %1 Programma di installazione %1 Installer %1 Programma di installazione Show debug information Mostra le informazioni di debug CheckerContainer Gathering system information... Raccolta delle informazioni di sistema... ChoicePage Form Modulo After: Dopo: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Partizionamento manuale</strong><br/>Si possono creare o ridimensionare le partizioni manualmente. Boot loader location: Posizionamento del boot loader: Select storage de&vice: Selezionare un dispositivo di me&moria: Current: Corrente: Reuse %1 as home partition for %2. Riutilizzare %1 come partizione home per &2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Selezionare una partizione da ridurre, trascina la barra inferiore per ridimensionare</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 sarà ridotta a %2MiB ed una nuova partizione di %3MiB sarà creata per %4 <strong>Select a partition to install on</strong> <strong>Selezionare la partizione sulla quale si vuole installare</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Impossibile trovare una partizione EFI di sistema. Si prega di tornare indietro ed effettuare un partizionamento manuale per configurare %1. The EFI system partition at %1 will be used for starting %2. La partizione EFI di sistema su %1 sarà usata per avviare %2. EFI system partition: Partizione EFI di sistema: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Questo dispositivo di memoria non sembra contenere alcun sistema operativo. Come si vuole procedere?<br/>Si potranno comunque rivedere e confermare le scelte prima di apportare i cambiamenti al dispositivo. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Cancellare disco</strong><br/>Questo <font color="red">cancellerà</font> tutti i dati attualmente presenti sul dispositivo di memoria. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Questo dispositivo di memoria ha %1. Come si vuole procedere?<br/>Si potranno comunque rivedere e confermare le scelte prima di apportare i cambiamenti al dispositivo. No Swap No Swap Reuse Swap Riutilizza Swap Swap (no Hibernate) Swap (senza ibernazione) Swap (with Hibernate) Swap (con ibernazione) Swap to file Swap su file <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Installare a fianco</strong><br/>Il programma di installazione ridurrà una partizione per dare spazio a %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Sostituire una partizione</strong><br/>Sostituisce una partizione con %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Questo dispositivo di memoria contenere già un sistema operativo. Come si vuole procedere?<br/>Si potranno comunque rivedere e confermare le scelte prima di apportare i cambiamenti al dispositivo. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Questo dispositivo di memoria contenere diversi sistemi operativi. Come si vuole procedere?<br/>Comunque si potranno rivedere e confermare le scelte prima di apportare i cambiamenti al dispositivo. ClearMountsJob Clear mounts for partitioning operations on %1 Rimuovere i punti di mount per operazioni di partizionamento su %1 Clearing mounts for partitioning operations on %1. Rimozione dei punti di mount per le operazioni di partizionamento su %1. Cleared all mounts for %1 Rimossi tutti i punti di mount per %1 ClearTempMountsJob Clear all temporary mounts. Rimuovere tutti i punti di mount temporanei. Clearing all temporary mounts. Rimozione di tutti i punti di mount temporanei. Cannot get list of temporary mounts. Non è possibile ottenere la lista dei punti di mount temporanei. Cleared all temporary mounts. Rimossi tutti i punti di mount temporanei. CommandList Could not run command. Impossibile eseguire il comando. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. Il comando viene eseguito nell'ambiente host e richiede il percorso di root ma nessun rootMountPoint (punto di montaggio di root) è definito. The command needs to know the user's name, but no username is defined. Il comando richiede il nome utente, nessun nome utente definito. ContextualProcessJob Contextual Processes Job Job dei processi contestuali CreatePartitionDialog Create a Partition Creare una partizione MiB MiB Partition &Type: &Tipo di partizione: &Primary &Primaria E&xtended E&stesa Fi&le System: Fi&le System: LVM LV name Nome LV di LVM Flags: Flag: &Mount Point: Punto di &mount: Si&ze: &Dimensione: En&crypt Cr&iptare Logical Logica Primary Primaria GPT GPT Mountpoint already in use. Please select another one. Il punto di mount è già in uso. Sceglierne un altro. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Crea una nuova partizione da %2MiB su %4 (%3) con file system %1 Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creare nuova partizione di <strong>%2MiB</strong> su <strong>%4</strong> (%3) con file system <strong>%1</strong>. Creating new %1 partition on %2. Creazione della nuova partizione %1 su %2. The installer failed to create partition on disk '%1'. Il programma di installazione non è riuscito a creare la partizione sul disco '%1'. CreatePartitionTableDialog Create Partition Table Creare la tabella delle partizioni Creating a new partition table will delete all existing data on the disk. La creazione di una nuova tabella delle partizioni cancellerà tutti i dati esistenti sul disco. What kind of partition table do you want to create? Che tipo di tabella delle partizioni vuoi creare? Master Boot Record (MBR) Master Boot Record (MBR) GUID Partition Table (GPT) Tavola delle Partizioni GUID (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Creare una nuova tabella delle partizioni %1 su %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Creare una nuova tabella delle partizioni <strong>%1</strong> su <strong>%2</strong> (%3). Creating new %1 partition table on %2. Creazione della nuova tabella delle partizioni %1 su %2. The installer failed to create a partition table on %1. Il programma di installazione non è riuscito a creare una tabella delle partizioni su %1. CreateUserJob Create user %1 Creare l'utente %1 Create user <strong>%1</strong>. Creare l'utente <strong>%1</strong> Creating user %1. Creazione utente %1. Sudoers dir is not writable. La cartella sudoers non è scrivibile. Cannot create sudoers file for writing. Impossibile creare il file sudoers in scrittura. Cannot chmod sudoers file. Impossibile eseguire chmod sul file sudoers. Cannot open groups file for reading. Impossibile aprire il file groups in lettura. CreateVolumeGroupDialog Create Volume Group Crea Gruppo di Volumi CreateVolumeGroupJob Create new volume group named %1. Crea un nuovo gruppo di volumi denominato %1. Create new volume group named <strong>%1</strong>. Crea un nuovo gruppo di volumi denominato <strong>%1</strong>. Creating new volume group named %1. Creazione del nuovo gruppo di volumi denominato %1. The installer failed to create a volume group named '%1'. Il programma di installazione non è riuscito a creare un gruppo di volumi denominato '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Disattiva gruppo di volumi denominato %1. Deactivate volume group named <strong>%1</strong>. Disattiva gruppo di volumi denominato <strong>%1</strong>. The installer failed to deactivate a volume group named %1. Il programma di installazione non è riuscito a disattivare il gruppo di volumi denominato %1. DeletePartitionJob Delete partition %1. Cancellare la partizione %1. Delete partition <strong>%1</strong>. Cancellare la partizione <strong>%1</strong>. Deleting partition %1. Cancellazione partizione %1. The installer failed to delete partition %1. Il programma di installazione non è riuscito a cancellare la partizione %1. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. Il tipo di <strong>tabella delle partizioni</strong> attualmente presente sul dispositivo di memoria selezionato.<br><br>L'unico modo per cambiare il tipo di tabella delle partizioni è quello di cancellarla e ricrearla da capo, distruggendo tutti i dati sul dispositivo.<br>Il programma di installazione conserverà l'attuale tabella a meno che no si scelga diversamente.<br>Se non si è sicuri, sui sistemi moderni si preferisce GPT. This device has a <strong>%1</strong> partition table. Questo dispositivo ha una tabella delle partizioni <strong>%1</strong>. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. Questo è un dispositivo <strong>loop</strong>.<br><br>E' uno pseudo-dispositivo senza tabella delle partizioni che rende un file accessibile come block device. Questo tipo di configurazione contiene normalmente solo un singolo filesystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. Il programma d'installazione <strong>non riesce a rilevare una tabella delle partizioni</strong> sul dispositivo di memoria selezionato.<br><br>Il dispositivo o non ha una tabella delle partizioni o questa è corrotta, oppure è di tipo sconosciuto.<br>Il programma può creare una nuova tabella delle partizioni, automaticamente o attraverso la sezione del partizionamento manuale. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Questo è il tipo raccomandato di tabella delle partizioni per i sistemi moderni che si avviano da un ambiente di boot <strong>EFI</strong>. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. <br><br>Questo tipo di tabella delle partizioni è consigliabile solo su sistemi più vecchi che si avviano da un ambiente di boot <strong>BIOS</strong>. GPT è raccomandato nella maggior parte degli altri casi.<br><br><strong>Attenzione:</strong> la tabella delle partizioni MBR è uno standar obsoleto dell'era MS-DOS.<br>Solo 4 partizioni <em>primarie</em> possono essere create e di queste 4 una può essere una partizione <em>estesa</em>, che può a sua volta contenere molte partizioni <em>logiche</em>. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1 - (%2) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Scrittura della configurazione LUKS per Dracut su %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Salto scrittura della configurazione LUKS per Dracut: la partizione "/" non è criptata Failed to open %1 Impossibile aprire %1 DummyCppJob Dummy C++ Job Processo Dummy C++ EditExistingPartitionDialog Edit Existing Partition Modifica la partizione esistente Content: Contenuto: &Keep &Mantenere Format Formattare Warning: Formatting the partition will erase all existing data. Attenzione: la formattazione della partizione cancellerà tutti i dati! &Mount Point: Punto di &Mount: Si&ze: Di&mensione: MiB MiB Fi&le System: Fi&le System: Flags: Flag: Mountpoint already in use. Please select another one. Il punto di mount è già in uso. Sceglierne un altro. EncryptWidget Form Modulo En&crypt system Cr&iptare il sistema Passphrase Frase di accesso Confirm passphrase Confermare frase di accesso Please enter the same passphrase in both boxes. Si prega di immettere la stessa frase di accesso in entrambi i riquadri. FillGlobalStorageJob Set partition information Impostare informazioni partizione Install %1 on <strong>new</strong> %2 system partition. Installare %1 sulla <strong>nuova</strong> partizione di sistema %2. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Impostare la <strong>nuova</strong> %2 partizione con punto di mount <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Installare %2 sulla partizione di sistema %3 <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Impostare la partizione %3 <strong>%1</strong> con punto di montaggio <strong>%2</strong>. Install boot loader on <strong>%1</strong>. Installare il boot loader su <strong>%1</strong>. Setting up mount points. Impostazione dei punti di mount. FinishedPage Form Modulo <Restart checkbox tooltip> <Restart checkbox tooltip> &Restart now &Riavviare ora <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>Tutto eseguito.</h1><br/>%1 è stato configurato sul tuo computer.<br/>Adesso puoi iniziare a utilizzare il tuo nuovo sistema. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <html><head/><body><p>Quando questa casella è selezionata, il tuo computer verrà riavviato immediatamente quando clicchi su <span style="font-style:italic;">Finito</span> oppure chiudi il programma di setup.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>Tutto fatto.</ h1><br/>%1 è stato installato sul computer.<br/>Ora è possibile riavviare il sistema, o continuare a utilizzare l'ambiente Live di %2 . <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <html><head/><body><p>Quando questa casella è selezionata, il tuo sistema si riavvierà immediatamente quando clicchi su <span style="font-style:italic;">Fatto</span> o chiudi il programma di installazione.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installazione fallita</h1><br/>%1 non è stato installato sul tuo computer.<br/>Il messaggio di errore è: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Installazione Fallita</h1><br/>%1 non è stato installato sul tuo computer.<br/>Il messaggio di errore è: %2 FinishedViewStep Finish Termina Setup Complete Installazione completata Installation Complete Installazione completata The setup of %1 is complete. L'installazione di %1 è completa The installation of %1 is complete. L'installazione di %1 è completata. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Formatta la partitione %1 (file system: %2, dimensione: %3 MiB) su %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatta la partizione <strong>%1</strong> di dimensione <strong>%3MiB </strong> con il file system <strong>%2</strong>. Formatting partition %1 with file system %2. Formattazione della partizione %1 con file system %2. The installer failed to format partition %1 on disk '%2'. Il programma di installazione non è riuscito a formattare la partizione %1 sul disco '%2'. GeneralRequirements has at least %1 GiB available drive space ha almeno %1 GiB di spazio disponibile There is not enough drive space. At least %1 GiB is required. Non c'è abbastanza spazio sul disco. E' richiesto almeno %1 GiB has at least %1 GiB working memory ha almeno %1 GiB di memoria The system does not have enough working memory. At least %1 GiB is required. Il sistema non ha abbastanza memoria. E' richiesto almeno %1 GiB is plugged in to a power source è collegato a una presa di alimentazione The system is not plugged in to a power source. Il sistema non è collegato a una presa di alimentazione. is connected to the Internet è connesso a Internet The system is not connected to the Internet. Il sistema non è connesso a internet. is running the installer as an administrator (root) sta eseguendo il programma di installazione come amministratore (root) The setup program is not running with administrator rights. Il programma di installazione non è stato lanciato con i permessi di amministratore. The installer is not running with administrator rights. Il programma di installazione non è stato avviato con i diritti di amministrazione. has a screen large enough to show the whole installer ha uno schermo abbastanza grande da mostrare l'intero programma di installazione The screen is too small to display the setup program. Lo schermo è troppo piccolo per mostrare il programma di installazione The screen is too small to display the installer. Schermo troppo piccolo per mostrare il programma d'installazione. HostInfoJob Collecting information about your machine. Raccogliendo informazioni sulla tua macchina. IDJob OEM Batch Identifier Codice Batch OEM Could not create directories <code>%1</code>. Impossibile creare le cartelle <code>%1</code>. Could not open file <code>%1</code>. Impossibile aprire il file <code>%1</code>. Could not write to file <code>%1</code>. Impossibile scrivere sul file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. Sto creando initramfs con mkinitcpio. InitramfsJob Creating initramfs. Sto creando initramfs. InteractiveTerminalPage Konsole not installed Konsole non installata Please install KDE Konsole and try again! Si prega di installare KDE Konsole e riprovare! Executing script: &nbsp;<code>%1</code> Esecuzione script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script Script KeyboardPage Set keyboard model to %1.<br/> Impostare il modello di tastiera a %1.<br/> Set keyboard layout to %1/%2. Impostare il layout della tastiera a %1%2. KeyboardViewStep Keyboard Tastiera LCLocaleDialog System locale setting Impostazioni di localizzazione del sistema The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. Le impostazioni di localizzazione del sistema influenzano la lingua e il set di caratteri per alcuni elementi di interfaccia da linea di comando. <br/>L'impostazione attuale è <strong>%1</strong>. &Cancel &Annulla &OK &OK LicensePage Form Modulo <h1>License Agreement</h1> <h1>Accordo di Licenza</h1> I accept the terms and conditions above. Accetto i termini e le condizioni sopra indicati. Please review the End User License Agreements (EULAs). Si prega di leggere l'Accordo di Licenza per l'Utente Finale (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. Questa procedura di configurazione installerà software proprietario che è soggetto ai termini di licenza. If you do not agree with the terms, the setup procedure cannot continue. Se non accetti i termini, la procedura di configurazione non può continuare. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Questa procedura di configurazione installerà software proprietario sottoposto a termini di licenza, per fornire caratteristiche aggiuntive e migliorare l'esperienza utente. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Se non se ne accettano i termini, il software proprietario non verrà installato e al suo posto saranno utilizzate alternative open source. LicenseViewStep License Licenza LicenseWidget URL: %1 URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 driver</strong><br/>da %2 <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 driver video</strong><br/><font color="Grey">da %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 plugin del browser</strong><br/><font color="Grey">da %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">da %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 pacchetto</strong><br/><font color="Grey">da %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">da %2</font> File: %1 File: %1 Show the license text Mostra il testo della licenza Open license agreement in browser. Apri l'accordo di licenza nel browser. Hide license text Nascondi il testo della licenza LocalePage The system language will be set to %1. La lingua di sistema sarà impostata a %1. The numbers and dates locale will be set to %1. I numeri e le date locali saranno impostati a %1. Region: Area: Zone: Zona: &Change... &Cambia... Set timezone to %1/%2.<br/> Imposta il fuso orario a %1%2.<br/> LocaleViewStep Location Posizione LuksBootKeyFileJob Configuring LUKS key file. Configurazione in corso del file chiave LUKS. No partitions are defined. Non è stata specificata alcuna partizione. Encrypted rootfs setup error Errore nella configurazione del rootfs crittato Root partition %1 is LUKS but no passphrase has been set. La partizione root %1 è LUKS ma non sono state configurate passphrase. Could not create LUKS key file for root partition %1. Impossibile creare il file chiave LUKS per la partizione root %1. Could not configure LUKS key file on partition %1. Impossibile configurare il file chiave LUKS per la partizione %1. MachineIdJob Generate machine-id. Genera machine-id. Configuration Error Errore di Configurazione No root mount point is set for MachineId. Non è impostato alcun punto di montaggio root per MachineId NetInstallPage Name Nome Description Descrizione Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Installazione di rete. (Disabilitata: impossibile recuperare le liste dei pacchetti, controllare la connessione di rete) Network Installation. (Disabled: Received invalid groups data) Installazione di rete. (Disabilitata: Ricevuti dati non validi dei gruppi) Network Installation. (Disabled: Incorrect configuration) Installazione di rete. (Disabilitato: Configurazione scorretta) NetInstallViewStep Package selection Selezione del pacchetto Office software Software per ufficio Office package Pacchetto per ufficio Browser software Software navigazione web Browser package Pacchetto navigazione web Web browser Browser web Kernel Kernel Services Servizi Login Accesso Desktop Ambiente desktop Applications Applicazioni NotesQmlViewStep Notes Note OEMPage Ba&tch: Lo&amp;tto <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>Inserire un identificatore per il lotto. Questo verrà salvato nel sistema di destinazione.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>Configurazione OEM</h1><p>Calamares userà le impostazioni OEM nella configurazione del sistema di destinazione.</p></body></html> OEMViewStep OEM Configuration Configurazione OEM Set the OEM Batch Identifier to <code>%1</code>. Impostare l'Identificatore del Lotto OEM a <code>%1</code>. PWQ Password is too short Password troppo corta Password is too long Password troppo lunga Password is too weak Password troppo debole Memory allocation error when setting '%1' Errore di allocazione della memoria quando si imposta '%1' Memory allocation error Errore di allocazione di memoria The password is the same as the old one La password coincide con la precedente The password is a palindrome La password è un palindromo The password differs with case changes only La password differisce solo per lettere minuscole e maiuscole The password is too similar to the old one La password è troppo simile a quella precedente The password contains the user name in some form La password contiene il nome utente in qualche campo The password contains words from the real name of the user in some form La password contiene parti del nome utente reale in qualche campo The password contains forbidden words in some form La password contiene parole vietate in alcuni campi The password contains less than %1 digits La password contiene meno di %1 cifre The password contains too few digits La password contiene poche cifre The password contains less than %1 uppercase letters La password contiene meno di %1 lettere maiuscole The password contains too few uppercase letters La password contiene poche lettere maiuscole The password contains less than %1 lowercase letters La password contiene meno di %1 lettere minuscole The password contains too few lowercase letters La password contiene poche lettere minuscole The password contains less than %1 non-alphanumeric characters La password contiene meno di %1 caratteri non alfanumerici The password contains too few non-alphanumeric characters La password contiene pochi caratteri non alfanumerici The password is shorter than %1 characters La password ha meno di %1 caratteri The password is too short La password è troppo corta The password is just rotated old one La password è solo una rotazione della precedente The password contains less than %1 character classes La password contiene meno di %1 classi di caratteri The password does not contain enough character classes La password non contiene classi di caratteri sufficienti The password contains more than %1 same characters consecutively La password contiene più di %1 caratteri uguali consecutivi The password contains too many same characters consecutively La password contiene troppi caratteri uguali consecutivi The password contains more than %1 characters of the same class consecutively La password contiene più di %1 caratteri consecutivi della stessa classe The password contains too many characters of the same class consecutively La password contiene molti caratteri consecutivi della stessa classe The password contains monotonic sequence longer than %1 characters La password contiene una sequenza monotona più lunga di %1 caratteri The password contains too long of a monotonic character sequence La password contiene una sequenza di caratteri monotona troppo lunga No password supplied Nessuna password fornita Cannot obtain random numbers from the RNG device Impossibile ottenere numeri casuali dal dispositivo RNG Password generation failed - required entropy too low for settings Generazione della password fallita - entropia richiesta troppo bassa per le impostazioni The password fails the dictionary check - %1 La password non supera il controllo del dizionario - %1 The password fails the dictionary check La password non supera il controllo del dizionario Unknown setting - %1 Impostazioni sconosciute - %1 Unknown setting Impostazione sconosciuta Bad integer value of setting - %1 Valore intero non valido per l'impostazione - %1 Bad integer value Valore intero non valido Setting %1 is not of integer type Impostazione %1 non è di tipo intero Setting is not of integer type Impostazione non è di tipo intero Setting %1 is not of string type Impostazione %1 non è di tipo stringa Setting is not of string type Impostazione non è di tipo stringa Opening the configuration file failed Apertura del file di configurazione fallita The configuration file is malformed Il file di configurazione non è corretto Fatal failure Errore fatale Unknown error Errore sconosciuto Password is empty Password vuota PackageChooserPage Form Modulo Product Name Nome Prodotto TextLabel TextLabel Long Product Description Descrizione Estesa del Prodotto Package Selection Selezione del Pacchetto Please pick a product from the list. The selected product will be installed. Si prega di scegliere un prodotto dalla lista. Il prodotto selezionato verrà installato. PackageChooserViewStep Packages Pacchetti Page_Keyboard Form Modulo Keyboard Model: Modello della tastiera: Type here to test your keyboard Digitare qui per provare la tastiera Page_UserSetup Form Modulo What is your name? Qual è il tuo nome? What name do you want to use to log in? Quale nome usare per l'autenticazione? Choose a password to keep your account safe. Scegliere una password per rendere sicuro il tuo account. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>Inserire la password due volte per controllare eventuali errori di battitura. Una buona password contiene lettere, numeri e segni di punteggiatura. Deve essere lunga almeno otto caratteri e dovrebbe essere cambiata a intervalli regolari.</small> What is the name of this computer? Qual è il nome di questo computer? Your Full Name Nome Completo login accesso <small>This name will be used if you make the computer visible to others on a network.</small> <small>Questo nome sarà usato se rendi visibile il computer ad altre persone in una rete.</small> Computer Name Nome Computer Password Password Repeat Password Ripetere Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Quando questa casella è selezionata, la robustezza della password viene verificata e non sarà possibile utilizzare password deboli. Require strong passwords. È richiesta una password robusta. Log in automatically without asking for the password. Accedere automaticamente senza chiedere la password. Use the same password for the administrator account. Usare la stessa password per l'account amministratore. Choose a password for the administrator account. Scegliere una password per l'account dell'amministratore. <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Inserire la password due volte per controllare eventuali errori di battitura.</small> PartitionLabelsView Root Root Home Home Boot Boot EFI system Sistema EFI Swap Swap New partition for %1 Nuova partizione per %1 New partition Nuova partizione %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space Spazio disponibile New partition Nuova partizione Name Nome File System File System Mount Point Punto di mount Size Dimensione PartitionPage Form Modulo Storage de&vice: Dispositivo di me&moria: &Revert All Changes &Annulla tutte le modifiche New Partition &Table Nuova &Tabella delle partizioni Cre&ate Crea &Edit &Modificare &Delete &Cancellare New Volume Group Nuovo Gruppo di Volumi Resize Volume Group RIdimensiona Gruppo di Volumi Deactivate Volume Group Disattiva Gruppo di Volumi Remove Volume Group Rimuovi Gruppo di Volumi I&nstall boot loader on: I&nstalla boot loader su: Are you sure you want to create a new partition table on %1? Si è sicuri di voler creare una nuova tabella delle partizioni su %1? Can not create new partition Impossibile creare nuova partizione The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. La tabella delle partizioni su %1 contiene già %2 partizioni primarie, non se ne possono aggiungere altre. Rimuovere una partizione primaria e aggiungere una partizione estesa invece. PartitionViewStep Gathering system information... Raccolta delle informazioni di sistema... Partitions Partizioni Install %1 <strong>alongside</strong> another operating system. Installare %1 <strong>a fianco</strong> di un altro sistema operativo. <strong>Erase</strong> disk and install %1. <strong>Cancellare</strong> il disco e installare %1. <strong>Replace</strong> a partition with %1. <strong>Sostituire</strong> una partizione con %1. <strong>Manual</strong> partitioning. Partizionamento <strong>manuale</strong>. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Installare %1 <strong>a fianco</strong> di un altro sistema operativo sul disco<strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Cancellare</strong> il disco <strong>%2</strong> (%3) e installa %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Sostituire</strong> una partizione sul disco <strong>%2</strong> (%3) con %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Partizionamento <strong>manuale</strong> sul disco <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Disco <strong>%1</strong> (%2) Current: Corrente: After: Dopo: No EFI system partition configured Nessuna partizione EFI di sistema è configurata An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. Una partizione EFI di sistema è necessaria per avviare %1.<br/><br/>Per configurare una partizione EFI di sistema, tornare indietro e selezionare o creare un filesystem FAT32 con il flag <strong>esp</strong> abilitato e un punto di mount <strong>%2</strong>.<br/><br/>Si può continuare senza configurare una partizione EFI ma il sistema rischia di non avviarsi. EFI system partition flag not set Il flag della partizione EFI di sistema non è impostato. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Una partizione EFI di sistema è necessaria per avviare %1.<br/><br/>Una partizione è stata configurata con punto di mount <strong>%2</strong> ma il relativo flag <strong>esp</strong> non è impostato.<br/>Per impostare il flag, tornare indietro e modificare la partizione.<br/><br/>Si può continuare senza impostare il flag ma il sistema rischia di non avviarsi. Boot partition not encrypted Partizione di avvio non criptata A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. E' stata configurata una partizione di avvio non criptata assieme ad una partizione root criptata. <br/><br/>Ci sono problemi di sicurezza con questo tipo di configurazione perchè dei file di sistema importanti sono tenuti su una partizione non criptata.<br/>Si può continuare se lo si desidera ma dopo ci sarà lo sblocco del file system, durante l'avvio del sistema.<br/>Per criptare la partizione di avvio, tornare indietro e ricrearla, selezionando <strong>Criptare</strong> nella finestra di creazione della partizione. has at least one disk device available. ha almeno un'unità disco disponibile. There are no partitions to install on. Non ci sono partizioni su cui installare. PlasmaLnfJob Plasma Look-and-Feel Job Job di Plasma Look-and-Feel Could not select KDE Plasma Look-and-Feel package Impossibile selezionare il pacchetto di KDE Plasma Look-and-Feel PlasmaLnfPage Form Modulo Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Scegliere il tema per l'ambiente desktop KDE Plasma. Si può anche saltare questa scelta e configurare il tema dopo aver installato il sistema. Cliccando su selezione del tema, ne sarà mostrata un'anteprima. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Scegliere il tema per il desktop KDE Plasma. Si può anche saltare questa scelta e configurare il tema dopo aver installato il sistema. Cliccando su selezione del tema, ne sarà mostrata un'anteprima dal vivo. PlasmaLnfViewStep Look-and-Feel Look-and-Feel PreserveFiles Saving files for later ... Salvataggio dei file per dopo ... No files configured to save for later. Nessun file configurato per dopo. Not all of the configured files could be preserved. Non tutti i file configurati possono essere preservati. ProcessResult There was no output from the command. Non c'era output dal comando. Output: Output: External command crashed. Il comando esterno si è arrestato. Command <i>%1</i> crashed. Il comando <i>%1</i> si è arrestato. External command failed to start. Il comando esterno non si è avviato. Command <i>%1</i> failed to start. Il comando %1 non si è avviato. Internal error when starting command. Errore interno all'avvio del comando. Bad parameters for process job call. Parametri errati per elaborare la chiamata al job. External command failed to finish. Il comando esterno non è stato portato a termine. Command <i>%1</i> failed to finish in %2 seconds. Il comando <i>%1</i> non è stato portato a termine in %2 secondi. External command finished with errors. Il comando esterno è terminato con errori. Command <i>%1</i> finished with exit code %2. Il comando <i>%1</i> è terminato con codice di uscita %2. QObject Default Keyboard Model Modello tastiera di default Default Default unknown sconosciuto extended estesa unformatted non formattata swap swap Unpartitioned space or unknown partition table Spazio non partizionato o tabella delle partizioni sconosciuta (no mount point) (nessun mount point) Requirements checking for module <i>%1</i> is complete. Il controllo dei requisiti per il modulo <i>%1</i> è completo. %1 (%2) language[name] (country[name]) %1 (%2) No product Nessun prodotto No description provided. Non è stata fornita alcuna descrizione. File not found File non trovato Path <pre>%1</pre> must be an absolute path. Il percorso <pre>%1</pre> deve essere un percorso assoluto. Could not create new random file <pre>%1</pre>. Impossibile creare un nuovo file random <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Rimuovi Gruppo di Volumi denominato %1. Remove Volume Group named <strong>%1</strong>. Rimuovi gruppo di volumi denominato <strong>%1</strong>. The installer failed to remove a volume group named '%1'. Il programma di installazione non è riuscito a rimuovere il gruppo di volumi denominato '%1'. ReplaceWidget Form Modulo Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Selezionare dove installare %1.<br/><font color="red">Attenzione: </font>questo eliminerà tutti i file dalla partizione selezionata. The selected item does not appear to be a valid partition. L'elemento selezionato non sembra essere una partizione valida. %1 cannot be installed on empty space. Please select an existing partition. %1 non può essere installato su spazio non partizionato. Si prega di selezionare una partizione esistente. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 non può essere installato su una partizione estesa. Si prega di selezionare una partizione primaria o logica esistente. %1 cannot be installed on this partition. %1 non può essere installato su questa partizione. Data partition (%1) Partizione dati (%1) Unknown system partition (%1) Partizione di sistema sconosciuta (%1) %1 system partition (%2) %1 partizione di sistema (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>La partizione %1 è troppo piccola per %2. Si prega di selezionare una partizione con capacità di almeno %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/>Nessuna partizione EFI di sistema rilevata. Si prega di tornare indietro e usare il partizionamento manuale per configurare %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>%1 sarà installato su %2.<br/><font color="red">Attenzione: </font>tutti i dati sulla partizione %2 saranno persi. The EFI system partition at %1 will be used for starting %2. La partizione EFI di sistema a %1 sarà usata per avviare %2. EFI system partition: Partizione EFI di sistema: ResizeFSJob Resize Filesystem Job Operazione di ridimensionamento del Filesystem Invalid configuration Configurazione non valida The file-system resize job has an invalid configuration and will not run. L'operazione di ridimensionamento del file-system ha una configurazione non valida e non verrà effettuata. KPMCore not Available KPMCore non Disponibile Calamares cannot start KPMCore for the file-system resize job. Calamares non riesce ad avviare KPMCore per ridimensionare il file-system. Resize Failed Ridimensionamento fallito. The filesystem %1 could not be found in this system, and cannot be resized. Il filesystem %1 non è stato trovato su questo sistema, e non può essere ridimensionato. The device %1 could not be found in this system, and cannot be resized. Il dispositivo %1 non è stato trovato su questo sistema, e non può essere ridimensionato. The filesystem %1 cannot be resized. Il filesystem %1 non può essere ridimensionato. The device %1 cannot be resized. Il dispositivo %1 non può essere ridimensionato. The filesystem %1 must be resized, but cannot. Il filesystem %1 deve essere ridimensionato, ma non è possibile farlo. The device %1 must be resized, but cannot Il dispositivo %1 deve essere ridimensionato, non è possibile farlo ResizePartitionJob Resize partition %1. Ridimensionare la partizione %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Ridimensionare la partizione <strong>%1</strong> da <strong>%2MiB</strong> a <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. Sto ridimensionando la partizione %1 di dimensione %2MiB a %3MiB. The installer failed to resize partition %1 on disk '%2'. Il programma di installazione non è riuscito a ridimensionare la partizione %1 sul disco '%2'. ResizeVolumeGroupDialog Resize Volume Group RIdimensiona Gruppo di Volumi ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Ridimensiona il gruppo di volumi con nome %1 da %2 a %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. Ridimensiona il gruppo di volumi con nome <strong>%1</strong> da <strong>%2</strong> a <strong>%3</strong>. The installer failed to resize a volume group named '%1'. Il programma di installazione non è riuscito a ridimensionare un volume di gruppo di nome '%1' ResultsListDialog For best results, please ensure that this computer: Per ottenere prestazioni ottimali, assicurarsi che questo computer: System requirements Requisiti di sistema ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> Questo computer non soddisfa i requisiti minimi per l'installazione di %1.<br/>L'installazione non può continuare. <a href="#details">Dettagli...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> Questo computer non soddisfa i requisiti minimi per installare %1. <br/>L'installazione non può proseguire. <a href="#details">Dettagli...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. Questo computer non soddisfa alcuni requisiti raccomandati per l'installazione di %1.<br/>L'installazione può continuare, ma alcune funzionalità potrebbero essere disabilitate. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. Questo computer non soddisfa alcuni requisiti consigliati per l'installazione di %1. <br/>L'installazione può proseguire ma alcune funzionalità potrebbero non essere disponibili. This program will ask you some questions and set up %2 on your computer. Questo programma chiederà alcune informazioni e configurerà %2 sul computer. ScanningDialog Scanning storage devices... Rilevamento dei dispositivi di memoria... Partitioning Partizionamento SetHostNameJob Set hostname %1 Impostare hostname %1 Set hostname <strong>%1</strong>. Impostare hostname <strong>%1</strong>. Setting hostname %1. Impostare hostname %1. Internal Error Errore interno Cannot write hostname to target system Impossibile scrivere l'hostname nel sistema di destinazione SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Imposta il modello di tastiera a %1, con layout %2-%3 Failed to write keyboard configuration for the virtual console. Impossibile scrivere la configurazione della tastiera per la console virtuale. Failed to write to %1 Impossibile scrivere su %1 Failed to write keyboard configuration for X11. Impossibile scrivere la configurazione della tastiera per X11. Failed to write keyboard configuration to existing /etc/default directory. Impossibile scrivere la configurazione della tastiera nella cartella /etc/default. SetPartFlagsJob Set flags on partition %1. Impostare i flag sulla partizione: %1. Set flags on %1MiB %2 partition. Impostare le flag sulla partizione %2 da %1MiB. Set flags on new partition. Impostare i flag sulla nuova partizione. Clear flags on partition <strong>%1</strong>. Rimuovere i flag sulla partizione <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Rimuovere le flag dalla partizione <strong>%2</strong> da %1MiB. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Flag della partizione <strong>%2</strong> da %1MiB impostate come <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Rimozione delle flag sulla partizione <strong>%2</strong> da %1MiB in corso. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Impostazione delle flag <strong>%3</strong> sulla partizione <strong>%2</strong> da %1MiB in corso. Clear flags on new partition. Rimuovere i flag dalla nuova partizione. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag di partizione <strong>%1</strong> come <strong>%2</strong>. Flag new partition as <strong>%1</strong>. Flag della nuova partizione come <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Rimozione dei flag sulla partizione <strong>%1</strong>. Clearing flags on new partition. Rimozione dei flag dalla nuova partizione. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Impostazione dei flag <strong>%2</strong> sulla partizione <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. Impostazione dei flag <strong>%1</strong> sulla nuova partizione. The installer failed to set flags on partition %1. Impossibile impostare i flag sulla partizione %1. SetPasswordJob Set password for user %1 Impostare la password per l'utente %1 Setting password for user %1. Impostare la password per l'utente %1. Bad destination system path. Percorso di destinazione del sistema errato. rootMountPoint is %1 punto di mount per root è %1 Cannot disable root account. Impossibile disabilitare l'account di root. passwd terminated with error code %1. passwd è terminato con codice di errore %1. Cannot set password for user %1. Impossibile impostare la password per l'utente %1. usermod terminated with error code %1. usermod si è chiuso con codice di errore %1. SetTimezoneJob Set timezone to %1/%2 Impostare il fuso orario su %1%2 Cannot access selected timezone path. Impossibile accedere al percorso della timezone selezionata. Bad path: %1 Percorso errato: %1 Cannot set timezone. Impossibile impostare il fuso orario. Link creation failed, target: %1; link name: %2 Impossibile creare il link, destinazione: %1; nome del link: %2 Cannot set timezone, Impossibile impostare il fuso orario, Cannot open /etc/timezone for writing Impossibile aprire il file /etc/timezone in scrittura ShellProcessJob Shell Processes Job Job dei processi della shell SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage This is an overview of what will happen once you start the setup procedure. Questa è una panoramica di quello che succederà una volta avviata la procedura di configurazione. This is an overview of what will happen once you start the install procedure. Una panoramica delle modifiche che saranno effettuate una volta avviata la procedura di installazione. SummaryViewStep Summary Riepilogo TrackingInstallJob Installation feedback Valutazione dell'installazione Sending installation feedback. Invio della valutazione dell'installazione. Internal error in install-tracking. Errore interno in install-tracking. HTTP request timed out. La richiesta HTTP è scaduta. TrackingMachineNeonJob Machine feedback Valutazione automatica Configuring machine feedback. Configurazione in corso della valutazione automatica. Error in machine feedback configuration. Errore nella configurazione della valutazione automatica. Could not configure machine feedback correctly, script error %1. Non è stato possibile configurare correttamente la valutazione automatica, errore dello script %1. Could not configure machine feedback correctly, Calamares error %1. Non è stato possibile configurare correttamente la valutazione automatica, errore di Calamares %1. TrackingPage Form Modulo Placeholder Segnaposto <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>Selezionando questo, non verrà inviata <span style=" font-weight:600;">alcuna informazione</span> relativa alla propria installazione.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Cliccare qui per maggiori informazioni sulla valutazione degli utenti</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. Il tracciamento dell'installazione aiuta %1 a capire quanti utenti vengono serviti, su quale hardware si installa %1 e (con le ultime due opzioni sotto), a ricevere continue informazioni sulle applicazioni preferite. Per vedere cosa verrà inviato, cliccare sull'icona di aiuto accanto ad ogni area. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. Selezionando questa opzione saranno inviate informazioni relative all'installazione e all'hardware. I dati saranno <b>inviati solo una volta</b> al termine dell'installazione. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. Selezionando questa opzione saranno inviate <b>periodicamente</b> informazioni sull'installazione, l'hardware e le applicazioni, a %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. Selezionando questa opzione verranno inviate <b>regolarmente</b> informazioni sull'installazione, l'hardware, le applicazioni e i modi di utilizzo, a %1. TrackingViewStep Feedback Valutazione UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Se più di una persona utilizzerà questo computer, puoi creare ulteriori account dopo la configurazione.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Se più di una persona utilizzerà questo computer, puoi creare ulteriori account dopo l'installazione.</small> Your username is too long. Il nome utente è troppo lungo. Your username must start with a lowercase letter or underscore. Il tuo username deve iniziare con una lettera minuscola o un trattino basso. Only lowercase letters, numbers, underscore and hyphen are allowed. Solo lettere minuscole, numeri, trattini e trattini bassi sono permessi. Only letters, numbers, underscore and hyphen are allowed. Solo lettere, numeri, trattini e trattini bassi sono permessi. Your hostname is too short. Hostname è troppo corto. Your hostname is too long. Hostname è troppo lungo. Your passwords do not match! Le password non corrispondono! UsersViewStep Users Utenti VariantModel Key Value Valore VolumeGroupBaseDialog Create Volume Group Crea Gruppo di Volumi List of Physical Volumes Lista dei volumi fisici Volume Group Name: Nome Volume Group: Volume Group Type: Tipo Volume Group: Physical Extent Size: Dimensione fisica dell'estensione: MiB MiB Total Size: Dimensione totale: Used Size: Dimensione utilizzata: Total Sectors: Totale Settori: Quantity of LVs: Numero di LV: WelcomePage Form Modulo Select application and system language Selezionare lingua per l'applicazione e il sistema Open donations website Apri il sito web per le donazioni &Donate &Donazioni Open help and support website Apri il sito web per l'aiuto ed il supporto Open issues and bug-tracking website Apri il sito per la gestione di problemi e bug Open release notes website Apri il sito web delle note di rilascio &Release notes &Note di rilascio &Known issues &Problemi conosciuti &Support &Supporto &About &Informazioni su <h1>Welcome to the %1 installer.</h1> <h1>Benvenuto nel programma d'installazione di %1.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Benvenuti nel programma di installazione Calamares per %1.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Benvenuto nel programma di installazione Calamares di %1.</h1> <h1>Welcome to %1 setup.</h1> <h1>Benvenuto nell'installazione di %1.</h1> About %1 setup Informazioni sul sistema di configurazione %1 About %1 installer Informazioni sul programma di installazione %1 <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Grazie al <a href="https://calamares.io/team/">team di Calamares</a> ed al <a href="https://www.transifex.com/calamares/calamares/">team dei traduttori di Calamares</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support supporto %1 WelcomeQmlViewStep Welcome Benvenuti WelcomeViewStep Welcome Benvenuti notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>Questo è un esempio di note di rilascio.</p> welcomeq <h3>%1 <quote>%2</quote></h3> <h3>%1 <quote>%2</quote></h3> About Informazioni su Support Supporto Known issues Problemi conosciuti Release notes Note di rilascio Donate Donazioni calamares-3.2.20/lang/calamares_ja.ts000066400000000000000000006022551362604102500174320ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. ã“ã®ã‚·ã‚¹ãƒ†ãƒ ã® <strong>ブート環境。</strong><br><br>å¤ã„x86システムã¯<strong>BIOS</strong>ã®ã¿ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚<br>最近ã®ã‚·ã‚¹ãƒ†ãƒ ã¯é€šå¸¸<strong>EFI</strong>を使用ã—ã¾ã™ãŒã€äº’æ›ãƒ¢ãƒ¼ãƒ‰ãŒèµ·å‹•ã§ãã‚‹å ´åˆã¯BIOSãŒç¾ã‚Œã‚‹å ´åˆã‚‚ã‚りã¾ã™ã€‚ This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. ã“ã®ã‚·ã‚¹ãƒ†ãƒ ã¯<strong>EFI</strong> ブート環境ã§èµ·å‹•ã—ã¾ã—ãŸã€‚<br><br>EFI環境ã‹ã‚‰ã®èµ·å‹•ã«ã¤ã„ã¦è¨­å®šã™ã‚‹ãŸã‚ã«ã¯ã€<strong>EFI システムパーティション</strong>ã« <strong>GRUB</strong> ã‚ã‚‹ã„㯠<strong>systemd-boot</strong> ã¨ã„ã£ãŸãƒ–ートローダーアプリケーションをé…ç½®ã—ãªã‘れã°ãªã‚Šã¾ã›ã‚“。手動ã«ã‚ˆã‚‹ãƒ‘ãƒ¼ãƒ†ã‚£ã‚·ãƒ§ãƒ‹ãƒ³ã‚°ã‚’é¸æŠžã™ã‚‹å ´åˆã€EFI ã‚·ã‚¹ãƒ†ãƒ ãƒ‘ãƒ¼ãƒ†ã‚£ã‚·ãƒ§ãƒ³ã‚’é¸æŠžã‚ã‚‹ã„ã¯ä½œæˆã—ãªã‘れã°ãªã‚Šã¾ã›ã‚“。ãã†ã§ãªã„å ´åˆã¯ã€ã“ã®æ“作ã¯è‡ªå‹•çš„ã«è¡Œã‚れã¾ã™ã€‚ This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. ã“ã®ã‚·ã‚¹ãƒ†ãƒ ã¯ <strong>BIOS</strong> ブート環境ã§èµ·å‹•ã—ã¾ã—ãŸã€‚<br><br> BIOS環境ã‹ã‚‰ã®èµ·å‹•ã«ã¤ã„ã¦è¨­å®šã™ã‚‹ãŸã‚ã«ã¯ã€ãƒ‘ーティションã®é–‹å§‹ä½ç½®ã‚ã‚‹ã„ã¯ãƒ‘ーティションテーブルã®é–‹å§‹ä½ç½®ã®è¿‘ã (推奨) ã«ã‚ã‚‹<strong>マスターブートレコード</strong>ã« <strong>GRUB</strong> ã®ã‚ˆã†ãªãƒ–ートローダーをインストールã—ãªã‘れã°ãªã‚Šã¾ã›ã‚“。手動ã«ã‚ˆã‚‹ãƒ‘ãƒ¼ãƒ†ã‚£ã‚·ãƒ§ãƒ‹ãƒ³ã‚°ã‚’é¸æŠžã™ã‚‹å ´åˆã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼è‡ªèº«ã§è¨­å®šã—ãªã‘れã°ãªã‚Šã¾ã›ã‚“。ãã†ã§ãªã„å ´åˆã¯ã€ã“ã®æ“作ã¯è‡ªå‹•çš„ã«è¡Œã‚れã¾ã™ã€‚ BootLoaderModel Master Boot Record of %1 %1 ã®ãƒžã‚¹ã‚¿ãƒ¼ãƒ–ートレコード Boot Partition ブートパーティション System Partition システムパーティション Do not install a boot loader ブートローダーをインストールã—ã¾ã›ã‚“ %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page 空白ã®ãƒšãƒ¼ã‚¸ Calamares::DebugWindow Form Form GlobalStorage グローãƒãƒ«ã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸ JobQueue ジョブキュー Modules モジュール Type: Type: none ãªã— Interface: インターフェース: Tools ツール Reload Stylesheet スタイルシートをå†èª­ã¿è¾¼ã‚€ Widget Tree ウィジェットツリー Debug information デãƒãƒƒã‚°æƒ…å ± Calamares::ExecutionViewStep Set up セットアップ Install インストール Calamares::FailJob Job failed (%1) ジョブã«å¤±æ•— (%1) Programmed job failure was explicitly requested. è¦æ±‚ã•れãŸã‚¸ãƒ§ãƒ–ã¯å¤±æ•—ã—ã¾ã—ãŸã€‚ Calamares::JobThread Done 完了 Calamares::NamedJob Example job (%1) ジョブã®ä¾‹ (%1) Calamares::ProcessJob Run command '%1' in target system. ターゲットシステムã§ã‚³ãƒžãƒ³ãƒ‰ '%1' を実行。 Run command '%1'. コマンド '%1' を実行。 Running command %1 %2 コマンド %1 %2 を実行ã—ã¦ã„ã¾ã™ Calamares::PythonJob Running %1 operation. %1 æ“作を実行ã—ã¦ã„ã¾ã™ã€‚ Bad working directory path 䏿­£ãªãƒ¯ãƒ¼ã‚­ãƒ³ã‚°ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ‘ス Working directory %1 for python job %2 is not readable. python ジョブ %2 ã«ãŠã„ã¦ä½œæ¥­ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒª %1 ãŒèª­ã¿è¾¼ã‚ã¾ã›ã‚“。 Bad main script file 䏿­£ãªãƒ¡ã‚¤ãƒ³ã‚¹ã‚¯ãƒªãƒ—トファイル Main script file %1 for python job %2 is not readable. python ジョブ %2 ã«ãŠã‘るメインスクリプトファイル %1 ãŒèª­ã¿è¾¼ã‚ã¾ã›ã‚“。 Boost.Python error in job "%1". ジョブ "%1" ã§ã® Boost.Python エラー。 Calamares::QmlViewStep Loading ... ロードã—ã¦ã„ã¾ã™... QML Step <i>%1</i>. QML ステップ <i>%1</i>。 Loading failed. ロードãŒå¤±æ•—ã—ã¾ã—ãŸã€‚ Calamares::RequirementsChecker Waiting for %n module(s). %n 個ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’待機ã—ã¦ã„ã¾ã™ã€‚ (%n second(s)) (%n ç§’(s)) System-requirements checking is complete. è¦æ±‚ã•れるシステムã®ç¢ºèªã‚’終了ã—ã¾ã—ãŸã€‚ Calamares::ViewManager &Back 戻る (&B) &Next 次㸠(&N) &Cancel 中止 (&C) Cancel setup without changing the system. システムを変更ã™ã‚‹ã“ã¨ãªãセットアップを中断ã—ã¾ã™ã€‚ Cancel installation without changing the system. システムを変更ã—ãªã„ã§ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‚’中止ã—ã¾ã™ã€‚ Setup Failed セットアップã«å¤±æ•—ã—ã¾ã—ãŸã€‚ Would you like to paste the install log to the web? インストールログをWebã«è²¼ã‚Šä»˜ã‘ã¾ã™ã‹ï¼Ÿ Install Log Paste URL インストールログを貼り付ã‘ã‚‹URL The upload was unsuccessful. No web-paste was done. アップロードã¯å¤±æ•—ã—ã¾ã—ãŸã€‚ ウェブã¸ã®è²¼ã‚Šä»˜ã‘ã¯è¡Œã‚れã¾ã›ã‚“ã§ã—ãŸã€‚ Calamares Initialization Failed Calamares ã«ã‚ˆã‚‹ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã«å¤±æ•—ã—ã¾ã—ãŸã€‚ %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. %1 をインストールã§ãã¾ã›ã‚“。Calamares ã¯ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’ロードã™ã‚‹ã“ã¨ã‚’ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ã“れã¯ã€Calamares ã®ã“ã®ãƒ‡ã‚£ã‚¹ãƒˆãƒªãƒ“ューションã§ã®ä½¿ç”¨æ³•ã«ã‚ˆã‚‹å•題ã§ã™ã€‚ <br/>The following modules could not be loaded: <br/>以下ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒãƒ­ãƒ¼ãƒ‰ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚: Continue with installation? インストールを続行ã—ã¾ã™ã‹ï¼Ÿ The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> %1 ã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—プログラム㯠%2 ã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—ã®ãŸã‚ディスクã®å†…容を変更ã—ã¾ã™ã€‚<br/><strong>ã“れらã®å¤‰æ›´ã¯å–り消ã—ã§ãã¾ã›ã‚“。</strong> &Set up now セットアップã—ã¦ã„ã¾ã™ (&S) &Set up セットアップ (&S) &Install インストール (&I) Setup is complete. Close the setup program. セットアップãŒå®Œäº†ã—ã¾ã—ãŸã€‚プログラムを閉ã˜ã¾ã™ã€‚ Cancel setup? セットアップを中止ã—ã¾ã™ã‹ï¼Ÿ Cancel installation? インストールを中止ã—ã¾ã™ã‹ï¼Ÿ Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. 本当ã«ç¾åœ¨ã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—ã®ãƒ—ロセスを中止ã—ã¾ã™ã‹ï¼Ÿ ã™ã¹ã¦ã®å¤‰æ›´ãŒå–り消ã•れã¾ã™ã€‚ Do you really want to cancel the current install process? The installer will quit and all changes will be lost. 本当ã«ç¾åœ¨ã®ä½œæ¥­ã‚’中止ã—ã¾ã™ã‹ï¼Ÿ ã™ã¹ã¦ã®å¤‰æ›´ãŒå–り消ã•れã¾ã™ã€‚ &Yes ã¯ã„ (&Y) &No ã„ã„㈠(&N) &Close é–‰ã˜ã‚‹ (&C) Continue with setup? セットアップを続行ã—ã¾ã™ã‹ï¼Ÿ The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> %1 インストーラー㯠%2 をインストールã™ã‚‹ãŸã‚ディスクã®å†…容を変更ã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚<br/><strong>ã“れらã®å¤‰æ›´ã¯å–り消ã›ã¾ã›ã‚“。</strong> &Install now 今ã™ãインストール (&I) Go &back 戻る (&B) &Done 実行 (&D) The installation is complete. Close the installer. インストールãŒå®Œäº†ã—ã¾ã—ãŸã€‚インストーラーを閉ã˜ã¾ã™ã€‚ Error エラー Installation Failed インストールã«å¤±æ•— CalamaresPython::Helper Unknown exception type 䏿˜Žãªä¾‹å¤–åž‹ unparseable Python error è§£æžä¸èƒ½ãªPythonエラー unparseable Python traceback è§£æžä¸èƒ½ãª Python トレースãƒãƒƒã‚¯ Unfetchable Python error. å–å¾—ä¸èƒ½ãªPythonエラー。 CalamaresUtils Install log posted to: %1 ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ãƒ­ã‚°ã®æŠ•ç¨¿å…ˆ: %1 CalamaresWindow %1 Setup Program %1 セットアッププログラム %1 Installer %1 インストーラー Show debug information デãƒãƒƒã‚°æƒ…報を表示 CheckerContainer Gathering system information... システム情報をå–å¾—ã—ã¦ã„ã¾ã™... ChoicePage Form フォーム After: 後: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>手動パーティション</strong><br/>パーティションã®ä½œæˆã€ã‚ã‚‹ã„ã¯ã‚µã‚¤ã‚ºå¤‰æ›´ã‚’行ã†ã“ã¨ãŒã§ãã¾ã™ã€‚ Boot loader location: ブートローダーã®å ´æ‰€: Select storage de&vice: ストレージデãƒã‚¤ã‚¹ã‚’é¸æŠž (&V): Current: ç¾åœ¨: Reuse %1 as home partition for %2. %1 ã‚’ %2 ã®ãƒ›ãƒ¼ãƒ ãƒ‘ーティションã¨ã—ã¦å†åˆ©ç”¨ã™ã‚‹ <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>縮å°ã™ã‚‹ãƒ‘ãƒ¼ãƒ†ã‚£ã‚·ãƒ§ãƒ³ã‚’é¸æŠžã—ã€ä¸‹ã®ãƒãƒ¼ã‚’ドラッグã—ã¦ã‚µã‚¤ã‚ºã‚’変更ã—ã¦ä¸‹ã•ã„</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 㯠%2MiB ã«ç¸®å°ã•れ新ãŸã« %4 ã« %3MiB ã®ãƒ‘ーティションãŒä½œæˆã•れã¾ã™ã€‚ <strong>Select a partition to install on</strong> <strong>インストールã™ã‚‹ãƒ‘ーティションã®é¸æŠž</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. システムã«EFIシステムパーティションãŒå­˜åœ¨ã—ã¾ã›ã‚“。%1 ã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—ã®ãŸã‚ã€å…ƒã«æˆ»ã‚Šã€æ‰‹å‹•パーティショニングを使用ã—ã¦ãã ã•ã„。 The EFI system partition at %1 will be used for starting %2. %1 上ã®EFIシステムパーテイション㯠%2 ã®ã‚¹ã‚¿ãƒ¼ãƒˆã«ä½¿ç”¨ã•れã¾ã™ã€‚ EFI system partition: EFI システムパーティション: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. ã“ã®ã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸ãƒ‡ãƒã‚¤ã‚¹ã«ã¯ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ãŒå­˜åœ¨ã—ãªã„よã†ã§ã™ã€‚何を行ã„ã¾ã™ã‹ï¼Ÿ<br/>ストレージデãƒã‚¤ã‚¹ã«å¯¾ã™ã‚‹å¤‰æ›´ã‚’行ã†å‰ã«ã€å¤‰æ›´ç‚¹ã‚’レビューã—ã€ç¢ºèªã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>ãƒ‡ã‚£ã‚¹ã‚¯ã®æ¶ˆåŽ»</strong><br/>é¸æŠžã—ãŸã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸ãƒ‡ãƒã‚¤ã‚¹ä¸Šã®ãƒ‡ãƒ¼ã‚¿ãŒã™ã¹ã¦ <font color="red">削除</font>ã•れã¾ã™ã€‚ This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. ã“ã®ã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸ãƒ‡ãƒã‚¤ã‚¹ã«ã¯ %1 ãŒå­˜åœ¨ã—ã¾ã™ã€‚何を行ã„ã¾ã™ã‹ï¼Ÿ<br/>ストレージデãƒã‚¤ã‚¹ã«å¯¾ã™ã‚‹å¤‰æ›´ã‚’行ã†å‰ã«ã€å¤‰æ›´ç‚¹ã‚’レビューã—ã€ç¢ºèªã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ No Swap スワップを使用ã—ãªã„ Reuse Swap スワップをå†åˆ©ç”¨ Swap (no Hibernate) スワップ(ãƒã‚¤ãƒãƒ¼ãƒãƒ¼ãƒˆãªã—) Swap (with Hibernate) スワップ(ãƒã‚¤ãƒãƒ¼ãƒãƒ¼ãƒˆ) Swap to file ファイルã«ã‚¹ãƒ¯ãƒƒãƒ— <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>共存ã—ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«</strong><br/>インストーラ㯠%1 用ã®ç©ºãスペースを確ä¿ã™ã‚‹ãŸã‚ã€ãƒ‘ーティションを縮å°ã—ã¾ã™ã€‚ <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>パーティションã®ç½®æ›</strong><br/>パーティションを %1 ã«ç½®ãæ›ãˆã¾ã™ã€‚ This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. ã“ã®ã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸ãƒ‡ãƒã‚¤ã‚¹ã«ã¯ã™ã§ã«ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ãŒå­˜åœ¨ã—ã¾ã™ã€‚何を行ã„ã¾ã™ã‹ï¼Ÿ<br/>ストレージデãƒã‚¤ã‚¹ã«å¯¾ã™ã‚‹å¤‰æ›´ã‚’行ã†å‰ã«ã€å¤‰æ›´ç‚¹ã‚’レビューã—ã€ç¢ºèªã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. ã“ã®ã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸ãƒ‡ãƒã‚¤ã‚¹ã«ã¯è¤‡æ•°ã®ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ãŒå­˜åœ¨ã—ã¾ã™ã€‚何を行ã„ã¾ã™ã‹ï¼Ÿ<br />ストレージデãƒã‚¤ã‚¹ã«å¯¾ã™ã‚‹å¤‰æ›´ã‚’行ã†å‰ã«ã€å¤‰æ›´ç‚¹ã‚’レビューã—ã€ç¢ºèªã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ ClearMountsJob Clear mounts for partitioning operations on %1 %1 ã®ãƒ‘ーティションæ“作ã®ãŸã‚ã€ãƒžã‚¦ãƒ³ãƒˆã‚’解除 Clearing mounts for partitioning operations on %1. %1 ã®ãƒ‘ーティションæ“作ã®ãŸã‚ã€ãƒžã‚¦ãƒ³ãƒˆã‚’解除ã—ã¦ã„ã¾ã™ã€‚ Cleared all mounts for %1 %1 ã®ã™ã¹ã¦ã®ãƒžã‚¦ãƒ³ãƒˆã‚’解除 ClearTempMountsJob Clear all temporary mounts. ã™ã¹ã¦ã®ä¸€æ™‚çš„ãªãƒžã‚¦ãƒ³ãƒˆã‚’クリア Clearing all temporary mounts. ã™ã¹ã¦ã®ä¸€æ™‚çš„ãªãƒžã‚¦ãƒ³ãƒˆã‚’クリアã—ã¦ã„ã¾ã™ã€‚ Cannot get list of temporary mounts. 一時的ãªãƒžã‚¦ãƒ³ãƒˆã®ãƒªã‚¹ãƒˆã‚’å–å¾—ã§ãã¾ã›ã‚“。 Cleared all temporary mounts. ã™ã¹ã¦ã®ä¸€æ™‚çš„ãªãƒžã‚¦ãƒ³ãƒˆã‚’解除ã—ã¾ã—ãŸã€‚ CommandList Could not run command. コマンドを実行ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. コマンドãŒãƒ›ã‚¹ãƒˆç’°å¢ƒã§å®Ÿè¡Œã•れる際ã€rootã®ãƒ‘ã‚¹ã®æƒ…å ±ãŒå¿…è¦ã«ãªã‚Šã¾ã™ãŒã€root ã®ãƒžã‚¦ãƒ³ãƒˆãƒã‚¤ãƒ³ãƒˆãŒå®šç¾©ã•れã¦ã„ã¾ã›ã‚“。 The command needs to know the user's name, but no username is defined. ユーザーåãŒå¿…è¦ã§ã™ãŒã€å®šç¾©ã•れã¦ã„ã¾ã›ã‚“。 ContextualProcessJob Contextual Processes Job コンテキストプロセスジョブ CreatePartitionDialog Create a Partition パーティションã®ç”Ÿæˆ MiB MiB Partition &Type: パーティションã®ç¨®é¡ž (&T): &Primary プライマリ (&P) E&xtended æ‹¡å¼µ (&X) Fi&le System: ファイルシステム (&L): LVM LV name LVMã®LVå Flags: フラグ: &Mount Point: マウントãƒã‚¤ãƒ³ãƒˆ (&M) Si&ze: サイズ (&Z) En&crypt æš—å·åŒ– (&C) Logical è«–ç† Primary プライマリ GPT GPT Mountpoint already in use. Please select another one. マウントãƒã‚¤ãƒ³ãƒˆã¯æ—¢ã«ä½¿ç”¨ã•れã¦ã„ã¾ã™ã€‚ä»–ã‚’é¸æŠžã—ã¦ãã ã•ã„。 CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. %4 (%3) ã«æ–°ãŸã«ãƒ•ァイルシステム %1 ã® %2MiB ã®ãƒ‘ーティションãŒä½œæˆã•れã¾ã™ã€‚ Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Create new <strong>%4</strong> (%3) ã«æ–°ãŸã«ãƒ•ァイルシステム<strong>%1</strong>ã® <strong>%2MiB</strong> ã®ãƒ‘ーティションãŒä½œæˆã•れã¾ã™ã€‚ Creating new %1 partition on %2. %2 ã«æ–°ã—ã %1 パーティションを作æˆã—ã¦ã„ã¾ã™ã€‚ The installer failed to create partition on disk '%1'. インストーラーã¯ãƒ‡ã‚£ã‚¹ã‚¯ '%1' ã«ãƒ‘ーティションを作æˆã™ã‚‹ã“ã¨ã«å¤±æ•—ã—ã¾ã—ãŸã€‚ CreatePartitionTableDialog Create Partition Table パーティションテーブルã®ä½œæˆ Creating a new partition table will delete all existing data on the disk. パーティションテーブルを作æˆã™ã‚‹ã“ã¨ã«ã‚ˆã£ã¦ã€ãƒ‡ã‚£ã‚¹ã‚¯ä¸Šã®ãƒ‡ãƒ¼ã‚¿ãŒã™ã¹ã¦å‰Šé™¤ã•れã¾ã™ã€‚ What kind of partition table do you want to create? ã©ã®ç¨®é¡žã®ãƒ‘ーティションテーブルを作æˆã—ã¾ã™ã‹ï¼Ÿ Master Boot Record (MBR) マスターブートレコード (MBR) GUID Partition Table (GPT) GUID パーティションテーブル (GPT) CreatePartitionTableJob Create new %1 partition table on %2. %2 ã«æ–°ã—ã %1 ãƒ‘ãƒ¼ãƒ†ã‚£ã‚·ãƒ§ãƒ³ãƒ†ãƒ¼ãƒ–ãƒ«ã‚’ä½œæˆ Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). <strong>%2</strong> (%3) ã«æ–°ã—ã <strong>%1</strong> ãƒ‘ãƒ¼ãƒ†ã‚£ã‚·ãƒ§ãƒ³ãƒ†ãƒ¼ãƒ–ãƒ«ã‚’ä½œæˆ Creating new %1 partition table on %2. %2 ã«æ–°ã—ã %1 パーティションテーブルを作æˆã—ã¦ã„ã¾ã™ã€‚ The installer failed to create a partition table on %1. インストーラーã¯%1 ã¸ã®ãƒ‘ーティションテーブルã®ä½œæˆã«å¤±æ•—ã—ã¾ã—ãŸã€‚ CreateUserJob Create user %1 ユーザー %1 ã‚’ä½œæˆ Create user <strong>%1</strong>. ユーザー <strong>%1</strong> を作æˆã€‚ Creating user %1. ユーザー %1 を作æˆã—ã¦ã„ã¾ã™ã€‚ Sudoers dir is not writable. sudoers ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã¯æ›¸ãè¾¼ã¿å¯èƒ½ã§ã¯ã‚りã¾ã›ã‚“。 Cannot create sudoers file for writing. sudoersファイルを作æˆã§ãã¾ã›ã‚“。 Cannot chmod sudoers file. sudoersãƒ•ã‚¡ã‚¤ãƒ«ã®æ¨©é™ã‚’変更ã§ãã¾ã›ã‚“。 Cannot open groups file for reading. groups ファイルを読ã¿è¾¼ã‚ã¾ã›ã‚“。 CreateVolumeGroupDialog Create Volume Group ボリュームグループã®ä½œæˆ CreateVolumeGroupJob Create new volume group named %1. æ–°ã—ã„ボリュームグループ %1 を作æˆã€‚ Create new volume group named <strong>%1</strong>. æ–°ã—ã„ボリュームグループ <strong>%1</strong> を作æˆã€‚ Creating new volume group named %1. æ–°ã—ã„ボリュームグループ %1 を作æˆã€‚ The installer failed to create a volume group named '%1'. ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ©ãƒ¼ã¯æ–°ã—ã„ボリュームグループ '%1' ã®ä½œæˆã«å¤±æ•—ã—ã¾ã—ãŸã€‚ DeactivateVolumeGroupJob Deactivate volume group named %1. ボリュームグループ %1 を無効化 Deactivate volume group named <strong>%1</strong>. ボリュームグループ <strong>%1</strong> を無効化。 The installer failed to deactivate a volume group named %1. インストーラーã¯ãƒœãƒªãƒ¥ãƒ¼ãƒ ã‚°ãƒ«ãƒ¼ãƒ— %1 ã®ç„¡åŠ¹åŒ–ã«å¤±æ•—ã—ã¾ã—ãŸã€‚ DeletePartitionJob Delete partition %1. パーティション %1 ã®å‰Šé™¤ Delete partition <strong>%1</strong>. パーティション <strong>%1</strong> ã®å‰Šé™¤ Deleting partition %1. パーティション %1 を削除ã—ã¦ã„ã¾ã™ã€‚ The installer failed to delete partition %1. インストーラーã¯ãƒ‘ーティション %1 ã®å‰Šé™¤ã«å¤±æ•—ã—ã¾ã—ãŸã€‚ DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. é¸æŠžã—ãŸã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸ãƒ‡ãƒã‚¤ã‚¹ã«ãŠã‘ã‚‹<strong> パーティションテーブル </strong> ã®ç¨®é¡žã€‚ <br><br> パーティションテーブルã®ç¨®é¡žã‚’変更ã™ã‚‹å”¯ä¸€ã®æ–¹æ³•ã¯ã€ãƒ‘ーティションテーブルを消去ã—ã€æœ€åˆã‹ã‚‰å†ä½œæˆã‚’行ã†ã“ã¨ã§ã™ãŒã€ã“ã®æ“作ã¯ã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸ä¸Šã®ã™ã¹ã¦ã®ãƒ‡ãƒ¼ã‚¿ã‚’破壊ã—ã¾ã™ã€‚ <br> ã“ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ©ãƒ¼ã¯ã€ä»–ã®ç¨®é¡žã¸æ˜Žç¤ºçš„ã«å¤‰æ›´ã—ã—ãªã„é™ã‚Šã€ç¾åœ¨ã®ãƒ‘ーティションテーブルãŒä¿æŒã•れã¾ã™ã€‚よãã‚ã‹ã‚‰ãªã„å ´åˆã€æœ€è¿‘ã®ã‚·ã‚¹ãƒ†ãƒ ã§ã¯GPTãŒæŽ¨å¥¨ã•れã¾ã™ã€‚ This device has a <strong>%1</strong> partition table. ã“ã®ãƒ‡ãƒã‚¤ã‚¹ã®ãƒ‘ーティションテーブル㯠<strong>%1</strong> ã§ã™ã€‚ This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. ã“ã®ãƒ‡ãƒã‚¤ã‚¹ã¯<strong>ループ</strong> デãƒã‚¤ã‚¹ã§ã™ã€‚<br><br> ブロックデãƒã‚¤ã‚¹ã¨ã—ã¦ãµã‚‹ã¾ã†ãƒ•ァイルを作æˆã™ã‚‹ã€ãƒ‘ーティションテーブルをæŒãŸãªã„仮想デãƒã‚¤ã‚¹ã§ã™ã€‚ã“ã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—ã®ç¨®é¡žã¯é€šå¸¸å˜ä¸€ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚·ã‚¹ãƒ†ãƒ ã§æ§‹æˆã•れã¾ã™ã€‚ This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. インストーラãŒã€é¸æŠžã—ãŸã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸ãƒ‡ãƒã‚¤ã‚¹ä¸Šã®<strong>パーティションテーブルを検出ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。</strong><br><br>デãƒã‚¤ã‚¹ã«ã¯ãƒ‘ーティションテーブルãŒå­˜åœ¨ã—ãªã„ã‹ã€ãƒ‘ãƒ¼ãƒ†ã‚£ã‚·ãƒ§ãƒ³ãƒ†ãƒ¼ãƒ–ãƒ«ãŒæœªçŸ¥ã®ã‚¿ã‚¤ãƒ—ã¾ãŸã¯ç ´æã—ã¦ã„ã¾ã™ã€‚<br>ã“ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ©ãƒ¼ã§ã¯ã€è‡ªå‹•ã§ã‚ã‚‹ã„ã¯ã€ãƒ‘ーティションページã«ã‚ˆã£ã¦æ‰‹å‹•ã§ã€æ–°ã—ã„パーティションテーブルを作æˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>ã“れ㯠<strong>EFI</strong> ブート環境ã‹ã‚‰èµ·å‹•ã™ã‚‹ç¾åœ¨ã®ã‚·ã‚¹ãƒ†ãƒ ã§æŽ¨å¥¨ã•れるパーティションテーブルã®ç¨®é¡žã§ã™ã€‚ <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. <br><br>ã“ã®ãƒ‘ーティションテーブルã®ç¨®é¡žã¯<strong>BIOS</strong> ブート環境ã‹ã‚‰èµ·å‹•ã™ã‚‹å¤ã„システムã«ãŠã„ã¦ã®ã¿æŽ¨å¥¨ã•れã¾ã™ã€‚ä»–ã®ã»ã¨ã‚“ã©ã®å ´åˆã§ã¯GPTãŒæŽ¨å¥¨ã•れã¾ã™ã€‚<br><br><strong>警告:</strong> MBR ãƒ‘ãƒ¼ãƒ†ã‚£ã‚·ãƒ§ãƒ³ãƒ†ãƒ¼ãƒ–ãƒ«ã¯æ™‚代é…れã®MS-DOSæ™‚ä»£ã®æ¨™æº–ã§ã™ã€‚<br>作æˆã§ãã‚‹<em>プライマリ</em>パーティションã¯4ã¤ã ã‘ã§ã™ã€‚ãã®ã†ã¡1ã¤ã¯<em>æ‹¡å¼µ</em>パーティションã«ãªã‚‹ã“ã¨ãŒã§ãã€ãã“ã«ã¯å¤šãã®<em>è«–ç†</em>パーティションをå«ã‚€ã“ã¨ãŒã§ãã¾ã™ã€‚ DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1 - (%2) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Dracut ã®ãŸã‚ã®LUKS設定を %1 ã«æ›¸ã込む Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Dracut ã®ãŸã‚ã®LUKSè¨­å®šã®æ›¸ãè¾¼ã¿ã‚’スキップ: "/" ãƒ‘ãƒ¼ãƒ†ã‚£ã‚·ãƒ§ãƒ³ã¯æš—å·åŒ–ã•れã¾ã›ã‚“。 Failed to open %1 %1 ã‚’é–‹ãã®ã«å¤±æ•—ã—ã¾ã—㟠DummyCppJob Dummy C++ Job Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition パーティションã®ç·¨é›† Content: 内容: &Keep ä¿æŒ (&K) Format フォーマット Warning: Formatting the partition will erase all existing data. 警告: パーティションã®ãƒ•ォーマットã¯ã™ã¹ã¦ã®ãƒ‡ãƒ¼ã‚¿ã‚’消去ã—ã¾ã™ã€‚ &Mount Point: マウントãƒã‚¤ãƒ³ãƒˆ (&M) Si&ze: サイズ (&Z): MiB MiB Fi&le System: ファイルシステム (&L) Flags: フラグ: Mountpoint already in use. Please select another one. マウントãƒã‚¤ãƒ³ãƒˆã¯æ—¢ã«ä½¿ç”¨ã•れã¦ã„ã¾ã™ã€‚ä»–ã‚’é¸æŠžã—ã¦ãã ã•ã„。 EncryptWidget Form フォーム En&crypt system システムを暗å·åŒ– (&C) Passphrase パスフレーズ Confirm passphrase パスフレーズã®ç¢ºèª Please enter the same passphrase in both boxes. 両方ã®ãƒœãƒƒã‚¯ã‚¹ã«åŒã˜ãƒ‘スフレーズを入力ã—ã¦ãã ã•ã„。 FillGlobalStorageJob Set partition information パーティション情報ã®è¨­å®š Install %1 on <strong>new</strong> %2 system partition. <strong>æ–°ã—ã„</strong> %2 システムパーティション㫠%1 をインストール。 Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. マウントãƒã‚¤ãƒ³ãƒˆ <strong>%1</strong> ã«<strong>æ–°ã—ã</strong> %2 パーティションをセットアップã™ã‚‹ã€‚ Install %2 on %3 system partition <strong>%1</strong>. %3 システムパーティション <strong>%1</strong> ã«%2 をインストール。 Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. パーティション <strong>%1</strong> マウントãƒã‚¤ãƒ³ãƒˆ <strong>%2</strong> ã« %3 をセットアップã™ã‚‹ã€‚ Install boot loader on <strong>%1</strong>. <strong>%1</strong> ã«ãƒ–ートローダーをインストール Setting up mount points. マウントãƒã‚¤ãƒ³ãƒˆã‚’設定ã™ã‚‹ã€‚ FinishedPage Form フォーム <Restart checkbox tooltip> <Restart checkbox tooltip> &Restart now 今ã™ãå†èµ·å‹• (&R) <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>ã™ã¹ã¦å®Œäº†ã—ã¾ã—ãŸã€‚</h1><br/>%1 ã¯ã‚³ãƒ³ãƒ”ュータã«ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—ã•れã¾ã—ãŸã€‚<br/>今ã‹ã‚‰æ–°ã—ã„システムを開始ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <html><head/><body><p>ã“ã®ãƒœãƒƒã‚¯ã‚¹ã‚’ãƒã‚§ãƒƒã‚¯ã™ã‚‹ã¨ã€ <span style="font-style:italic;">実行</span>をクリックã™ã‚‹ã‹ãƒ—ログラムを閉ã˜ã‚‹ã¨ç›´ã¡ã«ã‚·ã‚¹ãƒ†ãƒ ãŒå†èµ·å‹•ã—ã¾ã™ã€‚</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>ã™ã¹ã¦å®Œäº†ã—ã¾ã—ãŸã€‚</h1><br/>%1 ãŒã‚³ãƒ³ãƒ”ューターã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¾ã—ãŸã€‚<br/>å†èµ·å‹•ã—ã¦æ–°ã—ã„システムを使用ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã—ã€%2 ライブ環境ã®ä½¿ç”¨ã‚’ç¶šã‘ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <html><head/><body><p>ã“ã®ãƒœãƒƒã‚¯ã‚¹ã‚’ãƒã‚§ãƒƒã‚¯ã™ã‚‹ã¨ã€ <span style="font-style:italic;">実行</span>をクリックã™ã‚‹ã‹ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ©ãƒ¼ã‚’é–‰ã˜ã‚‹ã¨ç›´ã¡ã«ã‚·ã‚¹ãƒ†ãƒ ãŒå†èµ·å‹•ã—ã¾ã™ã€‚</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>セットアップã«å¤±æ•—ã—ã¾ã—ãŸã€‚</h1><br/>%1 ã¯ã‚³ãƒ³ãƒ”ュータã«ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—ã•れã¦ã„ã¾ã›ã‚“。<br/>エラーメッセージ: %2 <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>インストールã«å¤±æ•—ã—ã¾ã—ãŸ</h1><br/>%1 ã¯ã‚³ãƒ³ãƒ”ュータã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¾ã›ã‚“ã§ã—ãŸã€‚<br/>エラーメッセージ: %2. FinishedViewStep Finish 終了 Setup Complete セットアップãŒå®Œäº†ã—ã¾ã—㟠Installation Complete インストールãŒå®Œäº† The setup of %1 is complete. %1 ã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—ãŒå®Œäº†ã—ã¾ã—ãŸã€‚ The installation of %1 is complete. %1 ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã¯å®Œäº†ã§ã™ã€‚ FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. %4 ã®ãƒ‘ーティション %1 (ファイルシステム: %2ã€ã‚µã‚¤ã‚º: %3 MiB) をフォーマットã™ã‚‹ã€‚ Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. <strong>%3MiB</strong> ã®ãƒ‘ーティション <strong>%1</strong> をファイルシステム <strong>%2</strong> ã§ãƒ•ォーマットã™ã‚‹ã€‚ Formatting partition %1 with file system %2. ファイルシステム %2 ã§ãƒ‘ーティション %1 をフォーマットã—ã¦ã„ã¾ã™ã€‚ The installer failed to format partition %1 on disk '%2'. インストーラーã¯ãƒ‡ã‚£ã‚¹ã‚¯ '%2' 上ã®ãƒ‘ーティション %1 ã®ãƒ•ォーマットã«å¤±æ•—ã—ã¾ã—ãŸã€‚ GeneralRequirements has at least %1 GiB available drive space 利用å¯èƒ½ãªå®¹é‡ãŒå°‘ãªãã¨ã‚‚ %1 GiB There is not enough drive space. At least %1 GiB is required. 空ã容é‡ãŒå分ã§ã¯ã‚りã¾ã›ã‚“。少ãªãã¨ã‚‚ %1 GiB å¿…è¦ã§ã™ã€‚ has at least %1 GiB working memory %1 GiB以é™ã®ãƒ¡ãƒ¢ãƒªãƒ¼ãŒã‚りã¾ã™ The system does not have enough working memory. At least %1 GiB is required. å分ãªãƒ¡ãƒ¢ãƒªãŒã‚りã¾ã›ã‚“。少ãªãã¨ã‚‚ %1 GiB å¿…è¦ã§ã™ã€‚ is plugged in to a power source é›»æºãŒæŽ¥ç¶šã•れã¦ã„ã‚‹ã“㨠The system is not plugged in to a power source. システムã«é›»æºãŒæŽ¥ç¶šã•れã¦ã„ã¾ã›ã‚“。 is connected to the Internet インターãƒãƒƒãƒˆã«æŽ¥ç¶šã•れã¦ã„ã‚‹ã“㨠The system is not connected to the Internet. システムã¯ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆã«æŽ¥ç¶šã•れã¦ã„ã¾ã›ã‚“。 is running the installer as an administrator (root) ã¯ç®¡ç†è€…(root)ã¨ã—ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ©ãƒ¼ã‚’実行ã—ã¦ã„ã¾ã™ The setup program is not running with administrator rights. セットアッププログラムã¯ç®¡ç†è€…権é™ã§å®Ÿè¡Œã•れã¦ã„ã¾ã›ã‚“。 The installer is not running with administrator rights. インストーラーã¯ç®¡ç†è€…権é™ã§å®Ÿè¡Œã•れã¦ã„ã¾ã›ã‚“。 has a screen large enough to show the whole installer ã«ã¯ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ©ãƒ¼å…¨ä½“を表示ã§ãる大ãã•ã®ç”»é¢ãŒã‚りã¾ã™ The screen is too small to display the setup program. セットアップを表示ã®ã¯ç”»é¢ãŒå°ã•ã™ãŽã¾ã™ã€‚ The screen is too small to display the installer. インストーラーを表示ã™ã‚‹ãŸã‚ã«ã¯ã€ç”»é¢ãŒå°ã•ã™ãŽã¾ã™ã€‚ HostInfoJob Collecting information about your machine. ãƒžã‚·ãƒ³ã®æƒ…報をåŽé›†ã—ã¦ã„ã¾ã™ã€‚ IDJob OEM Batch Identifier OEMã®ãƒãƒƒãƒID Could not create directories <code>%1</code>. <code>%1</code>ã®ãƒ•ォルダを作æˆã•れã¾ã›ã‚“ã§ã—ãŸã€‚ Could not open file <code>%1</code>. <code>%1</code>ã®ãƒ•ァイルを開ãられã¾ã›ã‚“ã§ã—ãŸã€‚ Could not write to file <code>%1</code>. ファイル <code>%1</code>ã«æ›¸ãè¾¼ã‚ã¾ã›ã‚“。 InitcpioJob Creating initramfs with mkinitcpio. mkinitcpioã¨initramfsを作æˆã—ã¦ã„ã¾ã™ã€‚ InitramfsJob Creating initramfs. initramfsを作æˆã—ã¦ã„ã¾ã™ã€‚ InteractiveTerminalPage Konsole not installed KonsoleãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã¾ã›ã‚“ Please install KDE Konsole and try again! KDE Konsole をインストールã—ã¦å†åº¦è©¦ã—ã¦ãã ã•ã„ï¼ Executing script: &nbsp;<code>%1</code> スクリプトã®å®Ÿè¡Œ: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script スクリプト KeyboardPage Set keyboard model to %1.<br/> キーボードã®ãƒ¢ãƒ‡ãƒ«ã‚’ %1 ã«è¨­å®šã™ã‚‹ã€‚<br/> Set keyboard layout to %1/%2. キーボードã®ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã‚’ %1/%2 ã«è¨­å®šã™ã‚‹ã€‚ KeyboardViewStep Keyboard キーボード LCLocaleDialog System locale setting システムã®ãƒ­ã‚±ãƒ¼ãƒ«ã®è¨­å®š The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. システムロケールã®è¨­å®šã¯ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã‚„インターフェースã§ã®è¨€èªžã‚„文字ã®è¡¨ç¤ºã«å½±éŸ¿ã‚’ãŠã‚ˆã¼ã—ã¾ã™ã€‚<br/>ç¾åœ¨ã®è¨­å®š <strong>%1</strong>. &Cancel 中止 (&C) &OK 了解 (&O) LicensePage Form フォーム <h1>License Agreement</h1> <h1>ライセンス契約</h1> I accept the terms and conditions above. 上記ã®é …ç›®åŠã³æ¡ä»¶ã«åŒæ„ã—ã¾ã™ã€‚ Please review the End User License Agreements (EULAs). エンドユーザーライセンス契約(EULA)を確èªã—ã¦ãã ã•ã„。 This setup procedure will install proprietary software that is subject to licensing terms. ã“ã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—手順ã§ã¯ã€ãƒ©ã‚¤ã‚»ãƒ³ã‚¹æ¡é …ã®å¯¾è±¡ã¨ãªã‚‹ãƒ—ロプライエタリソフトウェアをインストールã—ã¾ã™ã€‚ If you do not agree with the terms, the setup procedure cannot continue. æ¡ä»¶ã«åŒæ„ã—ãªã„å ´åˆã¯ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—手順を続行ã§ãã¾ã›ã‚“。 This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. ã“ã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—手順ã§ã¯ã€è¿½åŠ æ©Ÿèƒ½ã‚’æä¾›ã—ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚¨ã‚¯ã‚¹ãƒšãƒªã‚¨ãƒ³ã‚¹ã‚’å‘上ã•ã›ã‚‹ãŸã‚ã«ã€ãƒ©ã‚¤ã‚»ãƒ³ã‚¹æ¡é …ã®å¯¾è±¡ã¨ãªã‚‹ãƒ—ロプライエタリソフトウェアをインストールã§ãã¾ã™ã€‚ If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. æ¡ä»¶ã«åŒæ„ã—ãªã„å ´åˆã¯ãƒ—ロプライエタリソフトウェアãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れãšã€ä»£ã‚りã«ã‚ªãƒ¼ãƒ—ンソースã®ä»£æ›¿ã‚½ãƒ•トウェアãŒä½¿ç”¨ã•れã¾ã™ã€‚ LicenseViewStep License ライセンス LicenseWidget URL: %1 URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 ドライãƒãƒ¼</strong><br/>by %2 <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 グラフィックドライãƒãƒ¼</strong><br/><font color="Grey">by %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 ブラウザプラグイン</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 パッケージ</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> File: %1 ファイル: %1 Show the license text ライセンステキストを表示 Open license agreement in browser. ブラウザã§ãƒ©ã‚¤ã‚»ãƒ³ã‚¹å¥‘ç´„ã‚’é–‹ã。 Hide license text ライセンステキストをéžè¡¨ç¤º LocalePage The system language will be set to %1. システムã®è¨€èªžã‚’ %1 ã«è¨­å®šã—ã¾ã™ã€‚ The numbers and dates locale will be set to %1. æ•°å­—ã¨æ—¥ä»˜ã®ãƒ­ã‚±ãƒ¼ãƒ«ã‚’ %1 ã«è¨­å®šã—ã¾ã™ã€‚ Region: 地域: Zone: ゾーン: &Change... 変更 (&C)... Set timezone to %1/%2.<br/> タイムゾーンを %1/%2 ã«è¨­å®šã™ã‚‹ã€‚<br/> LocaleViewStep Location ロケーション LuksBootKeyFileJob Configuring LUKS key file. LUKSキーファイルを設定ã—ã¦ã„ã¾ã™ã€‚ No partitions are defined. パーティションãŒå®šç¾©ã•れã¦ã„ã¾ã›ã‚“。 Encrypted rootfs setup error æš—å·åŒ–ã—ãŸrootfsセットアップエラー Root partition %1 is LUKS but no passphrase has been set. ルートパーティション %1 ã¯LUKSã§ã™ãŒã€ãƒ‘スワードãŒè¨­å®šã•れã¦ã„ã¾ã›ã‚“。 Could not create LUKS key file for root partition %1. ルートパーティション %1 ã®LUKSキーファイルを作æˆã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ Could not configure LUKS key file on partition %1. パーティション %1 ã§LUKSキーファイルを設定ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ MachineIdJob Generate machine-id. machine-id ã®ç”Ÿæˆ Configuration Error コンフィグレーションエラー No root mount point is set for MachineId. マシンIDã«ãƒ«ãƒ¼ãƒˆãƒžã‚¦ãƒ³ãƒˆãƒã‚¤ãƒ³ãƒˆãŒè¨­å®šã•れã¦ã„ã¾ã›ã‚“。 NetInstallPage Name åå‰ Description 説明 Network Installation. (Disabled: Unable to fetch package lists, check your network connection) ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã€‚(無効: パッケージリストをå–å¾—ã§ãã¾ã›ã‚“。ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯æŽ¥ç¶šã‚’確èªã—ã¦ãã ã•ã„。) Network Installation. (Disabled: Received invalid groups data) ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ« (ä¸å¯: 無効ãªã‚°ãƒ«ãƒ¼ãƒ—データをå—ã‘å–りã¾ã—ãŸ) Network Installation. (Disabled: Incorrect configuration) ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã€‚(無効: 䏿­£ãªè¨­å®š) NetInstallViewStep Package selection パッケージã®é¸æŠž Office software オフィスソフトウェア Office package オフィスパッケージ Browser software ブラウザソフトウェア Browser package ブラウザパッケージ Web browser ウェブブラウザ Kernel カーãƒãƒ« Services サービス Login ログイン Desktop デスクトップ Applications アプリケーション NotesQmlViewStep Notes ノート OEMPage Ba&tch: ãƒãƒƒãƒ (&) <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>ã“ã“ã«ãƒãƒƒãƒIDを入力ã—ã¦ãã ã•ã„。ã“れã¯ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚·ã‚¹ãƒ†ãƒ ã«ä¿å­˜ã•れã¾ã™ã€‚</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>OEMã®è¨­å®š</h1><p>Calamaresã¯ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚·ã‚¹ãƒ†ãƒ ã®è¨­å®šä¸­ã«OEMã®è¨­å®šã‚’使用ã—ã¾ã™ã€‚</p></body></html> OEMViewStep OEM Configuration OEMã®è¨­å®š Set the OEM Batch Identifier to <code>%1</code>. OEMã®ãƒãƒƒãƒIDã‚’ <code>%1</code> ã«è¨­å®šã—ã¦ãã ã•ã„。 PWQ Password is too short パスワードãŒçŸ­ã™ãŽã¾ã™ Password is too long パスワードãŒé•·ã™ãŽã¾ã™ Password is too weak パスワードãŒå¼±ã™ãŽã¾ã™ Memory allocation error when setting '%1' '%1' ã®è¨­å®šã®éš›ã«ãƒ¡ãƒ¢ãƒªãƒ¼ã‚¢ãƒ­ã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—㟠Memory allocation error メモリーアロケーションエラー The password is the same as the old one パスワードãŒä»¥å‰ã®ã‚‚ã®ã¨åŒã˜ã§ã™ã€‚ The password is a palindrome パスワードãŒå›žæ–‡ã§ã™ The password differs with case changes only パスワードã®å¤‰æ›´ãŒå¤§æ–‡å­—ã€å°æ–‡å­—ã®å¤‰æ›´ã®ã¿ã§ã™ The password is too similar to the old one パスワードãŒä»¥å‰ã®ã‚‚ã®ã¨é…·ä¼¼ã—ã¦ã„ã¾ã™ The password contains the user name in some form パスワードã«ãƒ¦ãƒ¼ã‚¶ãƒ¼åãŒå«ã¾ã‚Œã¦ã„ã¾ã™ The password contains words from the real name of the user in some form パスワードã«ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®å®ŸåãŒå«ã¾ã‚Œã¦ã„ã¾ã™ The password contains forbidden words in some form パスワードã«ç¦å¥ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ The password contains less than %1 digits パスワードã«å«ã¾ã‚Œã¦ã„る数字㌠%1 字以下ã§ã™ The password contains too few digits パスワードã«å«ã¾ã‚Œã‚‹æ•°å­—ã®æ•°ãŒå°‘ãªã™ãŽã¾ã™ The password contains less than %1 uppercase letters パスワードã«å«ã¾ã‚Œã¦ã„る大文字㌠%1 字以下ã§ã™ The password contains too few uppercase letters パスワードã«å«ã¾ã‚Œã‚‹å¤§æ–‡å­—ã®æ•°ãŒå°‘ãªã™ãŽã¾ã™ The password contains less than %1 lowercase letters パスワードã«å«ã¾ã‚Œã¦ã„ã‚‹å°æ–‡å­—㌠%1 字以下ã§ã™ The password contains too few lowercase letters パスワードã«å«ã¾ã‚Œã‚‹å°æ–‡å­—ã®æ•°ãŒå°‘ãªã™ãŽã¾ã™ The password contains less than %1 non-alphanumeric characters パスワードã«å«ã¾ã‚Œã‚‹éžã‚¢ãƒ«ãƒ•ァベット文字㌠%1 字以下ã§ã™ The password contains too few non-alphanumeric characters パスワードã«å«ã¾ã‚Œã‚‹éžã‚¢ãƒ«ãƒ•ã‚¡ãƒ™ãƒƒãƒˆæ–‡å­—ã®æ•°ãŒå°‘ãªã™ãŽã¾ã™ The password is shorter than %1 characters パスワードã®é•·ã•㌠%1 字より短ã„ã§ã™ The password is too short パスワードãŒçŸ­ã™ãŽã¾ã™ The password is just rotated old one パスワードãŒå¤ã„ã‚‚ã®ã®ä½¿ã„ã¾ã‚ã—ã§ã™ The password contains less than %1 character classes パスワードã«å«ã¾ã‚Œã¦ã„る文字クラス㯠%1 以下ã§ã™ã€‚ The password does not contain enough character classes パスワードã«ã¯ååˆ†ãªæ–‡å­—クラスãŒå«ã¾ã‚Œã¦ã„ã¾ã›ã‚“ The password contains more than %1 same characters consecutively パスワードã§åŒã˜æ–‡å­—㌠%1 字以上連続ã—ã¦ã„ã¾ã™ã€‚ The password contains too many same characters consecutively パスワードã§åŒã˜æ–‡å­—ã‚’ç¶šã‘ã™ãŽã¦ã„ã¾ã™ The password contains more than %1 characters of the same class consecutively パスワードã§åŒã˜æ–‡å­—クラス㌠%1 以上連続ã—ã¦ã„ã¾ã™ã€‚ The password contains too many characters of the same class consecutively パスワードã§åŒã˜æ–‡å­—ã‚¯ãƒ©ã‚¹ã®æ–‡å­—ã‚’ç¶šã‘ã™ãŽã¦ã„ã¾ã™ The password contains monotonic sequence longer than %1 characters パスワード㫠%1 文字以上ã®å˜èª¿ãªæ–‡å­—列ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ The password contains too long of a monotonic character sequence パスワードã«é™åº¦ã‚’è¶…ãˆãŸå˜èª¿ãªæ–‡å­—列ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ No password supplied パスワードãŒã‚りã¾ã›ã‚“ Cannot obtain random numbers from the RNG device RNGデãƒã‚¤ã‚¹ã‹ã‚‰ä¹±æ•°ã‚’å–å¾—ã§ãã¾ã›ã‚“ Password generation failed - required entropy too low for settings パスワード生æˆã«å¤±æ•— - 設定ã®ãŸã‚ã®ã‚¨ãƒ³ãƒˆãƒ­ãƒ”ーãŒä½Žã™ãŽã¾ã™ The password fails the dictionary check - %1 パスワードã®è¾žæ›¸ãƒã‚§ãƒƒã‚¯ã«å¤±æ•—ã—ã¾ã—㟠- %1 The password fails the dictionary check パスワードã®è¾žæ›¸ãƒã‚§ãƒƒã‚¯ã«å¤±æ•—ã—ã¾ã—㟠Unknown setting - %1 未設定- %1 Unknown setting 未設定 Bad integer value of setting - %1 ä¸é©åˆ‡ãªè¨­å®šå€¤ - %1 Bad integer value ä¸é©åˆ‡ãªè¨­å®šå€¤ Setting %1 is not of integer type 設定値 %1 ã¯æ•´æ•°ã§ã¯ã‚りã¾ã›ã‚“ Setting is not of integer type è¨­å®šå€¤ã¯æ•´æ•°ã§ã¯ã‚りã¾ã›ã‚“ Setting %1 is not of string type 設定値 %1 ã¯æ–‡å­—列ã§ã¯ã‚りã¾ã›ã‚“ Setting is not of string type è¨­å®šå€¤ã¯æ–‡å­—列ã§ã¯ã‚りã¾ã›ã‚“ Opening the configuration file failed 設定ファイルãŒé–‹ã‘ã¾ã›ã‚“ã§ã—㟠The configuration file is malformed 設定ファイルãŒä¸æ­£ãªå½¢å¼ã§ã™ Fatal failure 致命的ãªå¤±æ•— Unknown error 未知ã®ã‚¨ãƒ©ãƒ¼ Password is empty パスワードãŒç©ºã§ã™ PackageChooserPage Form フォーム Product Name 製å“å TextLabel テキストラベル Long Product Description 製å“ã®è©³ã—ã„説明 Package Selection パッケージã®é¸æŠž Please pick a product from the list. The selected product will be installed. リストã‹ã‚‰è£½å“ã‚’é¸ã‚“ã§ãã ã•ã„ã€‚é¸æŠžã—ãŸè£½å“ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¾ã™ã€‚ PackageChooserViewStep Packages パッケージ Page_Keyboard Form フォーム Keyboard Model: キーボードモデル: Type here to test your keyboard ã“ã“ã§ã‚¿ã‚¤ãƒ—ã—ã¦ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‚’テストã—ã¦ãã ã•ã„ Page_UserSetup Form フォーム What is your name? ã‚ãªãŸã®åå‰ã¯ä½•ã§ã™ã‹ï¼Ÿ What name do you want to use to log in? ログイン時ã«ä½¿ç”¨ã™ã‚‹åå‰ã¯ä½•ã§ã™ã‹ï¼Ÿ Choose a password to keep your account safe. アカウントを安全ã«ä½¿ã†ãŸã‚ã€ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ã‚’é¸æŠžã—ã¦ãã ã•ã„ <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>確èªã®ãŸã‚ã€åŒã˜ãƒ‘スワードを2回入力ã—ã¦ä¸‹ã•ã„。8文字以上ã§ã€ã‚¢ãƒ«ãƒ•ァベット・数字・å¥èª­ç‚¹ã‚’æ··ãœãŸã‚‚ã®ã«ã™ã‚Œã°å¼·ã„パスワードã«ãªã‚Šã¾ã™ã€‚パスワードã¯å®šæœŸçš„ã«å¤‰æ›´ã—ã¦ãã ã•ã„。</small> What is the name of this computer? ã“ã®ã‚³ãƒ³ãƒ”ュータã®åå‰ã¯ä½•ã§ã™ã‹ï¼Ÿ Your Full Name ã‚ãªãŸã®ãƒ•ルãƒãƒ¼ãƒ  login ログイン <small>This name will be used if you make the computer visible to others on a network.</small> <small>ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ä¸Šã‹ã‚‰ã‚³ãƒ³ãƒ”ュータãŒè¦‹ãˆã‚‹ã‚ˆã†ã«ã™ã‚‹å ´åˆã€ã“ã®åå‰ãŒä½¿ç”¨ã•れã¾ã™ã€‚</small> Computer Name コンピュータã®åå‰ Password パスワード Repeat Password パスワードをå†åº¦å…¥åŠ› When this box is checked, password-strength checking is done and you will not be able to use a weak password. ã“ã®ãƒœãƒƒã‚¯ã‚¹ã‚’オンã«ã™ã‚‹ã¨ãƒ‘スワードã®å¼·åº¦ãƒã‚§ãƒƒã‚¯ãŒè¡Œã‚れã€å¼±ã„パスワードを使用ã§ããªããªã‚Šã¾ã™ã€‚ Require strong passwords. å¼·ã„ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ã‚’è¦æ±‚ã™ã‚‹ã€‚ Log in automatically without asking for the password. パスワードを尋ã­ãšã«è‡ªå‹•çš„ã«ãƒ­ã‚°ã‚¤ãƒ³ã™ã‚‹ã€‚ Use the same password for the administrator account. 管ç†è€…アカウントã¨åŒã˜ãƒ‘スワードを使用ã™ã‚‹ã€‚ Choose a password for the administrator account. 管ç†è€…アカウントã®ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ã‚’é¸æŠžã™ã‚‹ã€‚ <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>入力ミスを確èªã™ã‚‹ã“ã¨ãŒã§ãるよã†ã«ã€åŒã˜ãƒ‘スワードを 2 回入力ã—ã¾ã™ã€‚</small> PartitionLabelsView Root Root Home Home Boot Boot EFI system EFI システム Swap スワップ New partition for %1 æ–°ã—ã„パーティション %1 New partition æ–°ã—ã„パーティション %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space 空ã領域 New partition æ–°ã—ã„パーティション Name åå‰ File System ファイルシステム Mount Point マウントãƒã‚¤ãƒ³ãƒˆ Size サイズ PartitionPage Form フォーム Storage de&vice: ストレージデãƒã‚¤ã‚¹ (&V): &Revert All Changes ã™ã¹ã¦ã®å¤‰æ›´ã‚’å…ƒã«æˆ»ã™ (&R) New Partition &Table æ–°ã—ã„パーティションテーブル (&T) Cre&ate ä½œæˆ (&A) &Edit 編集 (&E) &Delete 削除 (&D) New Volume Group æ–°ã—ã„ボリュームグループ Resize Volume Group ボリュームグループã®ã‚µã‚¤ã‚ºå¤‰æ›´ Deactivate Volume Group ボリュームグループã®ç„¡åŠ¹åŒ– Remove Volume Group ãƒœãƒªãƒ¥ãƒ¼ãƒ ã‚°ãƒ«ãƒ¼ãƒ—ã®æ¶ˆåŽ» I&nstall boot loader on: ブートローダーインストール先: Are you sure you want to create a new partition table on %1? %1 ã«æ–°ã—ã„パーティションテーブルを作æˆã—ã¾ã™ã€‚よã‚ã—ã„ã§ã™ã‹ï¼Ÿ Can not create new partition æ–°ã—ã„パーティションを作æˆã§ãã¾ã›ã‚“ The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. %1 上ã®ãƒ‘ーティションテーブルã«ã¯æ—¢ã«ãƒ—ライマリパーティション %2 ãŒé…ç½®ã•れã¦ãŠã‚Šã€è¿½åŠ ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。プライマリパーティションを消去ã—ã¦ä»£ã‚ã‚Šã«æ‹¡å¼µãƒ‘ーティションを追加ã—ã¦ãã ã•ã„。 PartitionViewStep Gathering system information... システム情報をå–å¾—ã—ã¦ã„ã¾ã™... Partitions パーティション Install %1 <strong>alongside</strong> another operating system. ä»–ã®ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã«<strong>共存ã—ã¦</strong> %1 をインストール。 <strong>Erase</strong> disk and install %1. ディスクを<strong>消去</strong>ã— %1 をインストール。 <strong>Replace</strong> a partition with %1. パーティションを %1 ã«<strong>ç½®ãæ›ãˆã‚‹ã€‚</strong> <strong>Manual</strong> partitioning. <strong>手動</strong>ã§ãƒ‘ーティションを設定ã™ã‚‹ã€‚ Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). ディスク <strong>%2</strong> (%3) 上ã®ã®ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã¨<strong>共存</strong>ã—㦠%1 をインストール。 <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. ディスク <strong>%2</strong> (%3) ã‚’<strong>消去ã—ã¦</strong> %1 をインストール。 <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. ディスク <strong>%2</strong> (%3) 上ã®ãƒ‘ーティションを %1 ã«<strong>ç½®ãæ›ãˆã‚‹ã€‚</strong> <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). ディスク <strong>%1</strong> (%2) ã« <strong>手動ã§</strong>パーティショニングã™ã‚‹ã€‚ Disk <strong>%1</strong> (%2) ディスク <strong>%1</strong> (%2) Current: ç¾åœ¨: After: 変更後: No EFI system partition configured EFI システムパーティションãŒè¨­å®šã•れã¦ã„ã¾ã›ã‚“ An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. %1 ã‚’èµ·å‹•ã™ã‚‹ãŸã‚ã«ã¯EFI システムパ ーティションãŒå¿…è¦ã§ã™ã€‚<br/><br/> EFI システムパーティションを設定ã™ã‚‹ãŸã‚ã«ã¯ã€å…ƒã«æˆ»ã£ã¦ã€ãƒžã‚¦ãƒ³ãƒˆãƒã‚¤ãƒ³ãƒˆ<strong>%2</strong>ã§<strong>esp</strong>フラグを設定ã—ãŸFAT32ãƒ•ã‚¡ã‚¤ãƒ«ã‚·ã‚¹ãƒ†ãƒ ã‚’é¸æŠžã™ã‚‹ã‹ä½œæˆã—ã¾ã™ã€‚<br/><br/>EFI システムパ ーティションã®è¨­å®šã‚’ã›ãšã«ç¶šè¡Œã™ã‚‹ã“ã¨ã¯ã§ãã¾ã™ãŒã€ãã®å ´åˆã¯ã‚·ã‚¹ãƒ†ãƒ ã®èµ·å‹•ã«å¤±æ•—ã™ã‚‹ã“ã¨ã«ãªã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。 EFI system partition flag not set EFI システムパーティションã®ãƒ•ラグãŒè¨­å®šã•れã¦ã„ã¾ã›ã‚“ An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. %1 ã‚’èµ·å‹•ã™ã‚‹ãŸã‚ã«ã¯EFI システムパ ーティションãŒå¿…è¦ã§ã™ã€‚<br/><br/>パーティションã¯ãƒžã‚¦ãƒ³ãƒˆãƒã‚¤ãƒ³ãƒˆ<strong>%2</strong>ã«è¨­å®šã•れã¦ã„ã¾ã™ãŒã€<strong>esp</strong> フラグãŒè¨­å®šã•れã¦ã„ã¾ã›ã‚“。<br/>フラグを設定ã™ã‚‹ã«ã¯ã€å…ƒã«æˆ»ã£ã¦ãƒ‘ーティションを編集ã—ã¦ãã ã•ã„。<br/><br/>フラグã®è¨­å®šã‚’ã›ãšã«ç¶šã‘ã‚‹ã“ã¨ã¯ã§ãã¾ã™ãŒã€ãã®å ´åˆã€ã‚·ã‚¹ãƒ†ãƒ ã®èµ·å‹•ã«å¤±æ•—ã™ã‚‹ã“ã¨ã«ãªã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。 Boot partition not encrypted ãƒ–ãƒ¼ãƒˆãƒ‘ãƒ¼ãƒ†ã‚£ã‚·ãƒ§ãƒ³ãŒæš—å·åŒ–ã•れã¦ã„ã¾ã›ã‚“ A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. ãƒ–ãƒ¼ãƒˆãƒ‘ãƒ¼ãƒ†ã‚£ã‚·ãƒ§ãƒ³ã¯æš—å·åŒ–ã•れãŸãƒ«ãƒ¼ãƒˆãƒ‘ーティションã¨ã¨ã‚‚ã«ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—ã•れã¾ã—ãŸãŒã€ãƒ–ãƒ¼ãƒˆãƒ‘ãƒ¼ãƒ†ã‚£ã‚·ãƒ§ãƒ³ã¯æš—å·åŒ–ã•れã¦ã„ã¾ã›ã‚“。<br/><br/>é‡è¦ãªã‚·ã‚¹ãƒ†ãƒ ãƒ•ã‚¡ã‚¤ãƒ«ãŒæš—å·åŒ–ã•れã¦ã„ãªã„ãƒ‘ãƒ¼ãƒ†ã‚£ã‚·ãƒ§ãƒ³ã«æ®‹ã•れã¦ã„ã‚‹ãŸã‚ã€ã“ã®ã‚ˆã†ãªã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—ã¯å®‰å…¨ä¸Šã®æ‡¸å¿µãŒã‚りã¾ã™ã€‚<br/>セットアップを続行ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã™ãŒã€å¾Œã§ã‚·ã‚¹ãƒ†ãƒ ã®èµ·å‹•中ã«ãƒ•ァイルシステムãŒè§£é™¤ã•れるãŠãれãŒã‚りã¾ã™ã€‚<br/>ブートパーティションを暗å·åŒ–ã•ã›ã‚‹ã«ã¯ã€å‰ã®ç”»é¢ã«æˆ»ã£ã¦ã€å†åº¦ãƒ‘ーティションを作æˆã—ã€ãƒ‘ーティション作æˆã‚¦ã‚£ãƒ³ãƒ‰ã‚¦å†…ã§<strong>Encrypt</strong> (æš—å·åŒ–) ã‚’é¸æŠžã—ã¦ãã ã•ã„。 has at least one disk device available. å°‘ãªãã¨ã‚‚1æžšã®ãƒ‡ã‚£ã‚¹ã‚¯ã¯ä½¿ç”¨å¯èƒ½ã€‚ There are no partitions to install on. インストールã™ã‚‹ãƒ‘ーティションãŒã‚りã¾ã›ã‚“。 PlasmaLnfJob Plasma Look-and-Feel Job Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package KDE Plasma ã® Look-and-Feel ãƒ‘ãƒƒã‚±ãƒ¼ã‚¸ã‚’é¸æŠžã§ãã¾ã›ã‚“ã§ã—㟠PlasmaLnfPage Form フォーム Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. KDE Plasma デスクトップã®å¤–観をé¸ã‚“ã§ãã ã•ã„。ã“ã®ä½œæ¥­ã¯ã‚¹ã‚­ãƒƒãƒ—ã§ãã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«å¾Œã«å¤–観を設定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚å¤–è¦³ã‚’é¸æŠžã—ã€ã‚¯ãƒªãƒƒã‚¯ã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šå¤–観ã®ãƒ—レビューãŒè¡¨ç¤ºã•れã¾ã™ã€‚ Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. KDE Plasma デスクトップã®å¤–観をé¸ã‚“ã§ãã ã•ã„。ã“ã®ä½œæ¥­ã¯ã‚¹ã‚­ãƒƒãƒ—ã§ãã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«å¾Œã«å¤–観を設定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚å¤–è¦³ã‚’é¸æŠžã—ã€ã‚¯ãƒªãƒƒã‚¯ã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šå¤–観ã®ãƒ—レビューãŒè¡¨ç¤ºã•れã¾ã™ã€‚ PlasmaLnfViewStep Look-and-Feel Look-and-Feel PreserveFiles Saving files for later ... 後ã§ãƒ•ァイルをä¿å­˜ã™ã‚‹... No files configured to save for later. ä¿å­˜ã™ã‚‹ãŸã‚ã®è¨­å®šãƒ•ァイルãŒã‚りã¾ã›ã‚“。 Not all of the configured files could be preserved. 設定ファイルã¯ã™ã¹ã¦ä¿è­·ã•れるã‚ã‘ã§ã¯ã‚りã¾ã›ã‚“。 ProcessResult There was no output from the command. コマンドã‹ã‚‰å‡ºåŠ›ã™ã‚‹ã‚‚ã®ãŒã‚りã¾ã›ã‚“ã§ã—ãŸã€‚ Output: 出力: External command crashed. 外部コマンドãŒã‚¯ãƒ©ãƒƒã‚·ãƒ¥ã—ã¾ã—ãŸã€‚ Command <i>%1</i> crashed. コマンド <i>%1</i> ãŒã‚¯ãƒ©ãƒƒã‚·ãƒ¥ã—ã¾ã—ãŸã€‚ External command failed to start. 外部コマンドã®èµ·å‹•ã«å¤±æ•—ã—ã¾ã—ãŸã€‚ Command <i>%1</i> failed to start. コマンド <i>%1</i> ã®èµ·å‹•ã«å¤±æ•—ã—ã¾ã—ãŸã€‚ Internal error when starting command. コマンドãŒèµ·å‹•ã™ã‚‹éš›ã«å†…部エラーãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚ Bad parameters for process job call. ジョブ呼ã³å‡ºã—ã«ãŠã‘ã‚‹ä¸æ­£ãªãƒ‘ラメータ External command failed to finish. 外部コマンドã®çµ‚了ã«å¤±æ•—ã—ã¾ã—ãŸã€‚ Command <i>%1</i> failed to finish in %2 seconds. コマンド<i>%1</i> %2 秒以内ã«çµ‚了ã™ã‚‹ã“ã¨ã«å¤±æ•—ã—ã¾ã—ãŸã€‚ External command finished with errors. 外部ã®ã‚³ãƒžãƒ³ãƒ‰ãŒã‚¨ãƒ©ãƒ¼ã§åœæ­¢ã—ã¾ã—ãŸã€‚ Command <i>%1</i> finished with exit code %2. コマンド <i>%1</i> ãŒçµ‚了コード %2 ã§çµ‚了ã—ã¾ã—ãŸã€‚. QObject Default Keyboard Model デフォルトã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ãƒ¢ãƒ‡ãƒ« Default デフォルト unknown 䏿˜Ž extended æ‹¡å¼µ unformatted 未フォーマット swap スワップ Unpartitioned space or unknown partition table パーティションã•れã¦ã„ãªã„領域ã¾ãŸã¯æœªçŸ¥ã®ãƒ‘ーティションテーブル (no mount point) (マウントãƒã‚¤ãƒ³ãƒˆãªã—) Requirements checking for module <i>%1</i> is complete. モジュール <i>%1</i> ã«å¿…è¦ãªãƒ‘ッケージã®ç¢ºèªãŒå®Œäº†ã—ã¾ã—ãŸã€‚ %1 (%2) language[name] (country[name]) %1 (%2) No product 製å“ãŒã‚りã¾ã›ã‚“。 No description provided. 説明ã¯ã‚りã¾ã›ã‚“。 File not found ファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ Path <pre>%1</pre> must be an absolute path. パス <pre>%1</pre> ã¯çµ¶å¯¾ãƒ‘スã«ã—ã¦ãã ã•ã„。 Could not create new random file <pre>%1</pre>. æ–°ã—ã„ランダムファイル <pre>%1</pre> を作æˆã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ RemoveVolumeGroupJob Remove Volume Group named %1. ボリュームグループ %1 ã®æ¶ˆåŽ»ã€‚ Remove Volume Group named <strong>%1</strong>. ボリュームグループ <strong>%1</strong> ã®æ¶ˆåŽ»ã€‚ The installer failed to remove a volume group named '%1'. ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ©ãƒ¼ã¯æ–°ã—ã„ボリュームグループ '%1' ã®æ¶ˆåŽ»ã«å¤±æ•—ã—ã¾ã—ãŸã€‚ ReplaceWidget Form フォーム Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. %1 をインストールã™ã‚‹å ´æ‰€ã‚’é¸æŠžã—ã¾ã™ã€‚<br/><font color="red">警告: </font>é¸æŠžã—ãŸãƒ‘ーティション内ã®ã™ã¹ã¦ã®ãƒ•ァイルãŒå‰Šé™¤ã•れã¾ã™ã€‚ The selected item does not appear to be a valid partition. é¸æŠžã—ãŸé …ç›®ã¯æœ‰åйãªãƒ‘ーティションã§ã¯ãªã„よã†ã§ã™ã€‚ %1 cannot be installed on empty space. Please select an existing partition. %1 ã¯ç©ºã領域ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。既存ã®ãƒ‘ãƒ¼ãƒ†ã‚£ã‚·ãƒ§ãƒ³ã‚’é¸æŠžã—ã¦ãã ã•ã„。 %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 ã¯æ‹¡å¼µãƒ‘ーティションã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ãã¾ã›ã‚“。既存ã®ãƒ—ライマリã¾ãŸã¯è«–ç†ãƒ‘ãƒ¼ãƒ†ã‚£ã‚·ãƒ§ãƒ³ã‚’é¸æŠžã—ã¦ãã ã•ã„。 %1 cannot be installed on this partition. %1 ã¯ã“ã®ãƒ‘ーティションã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ãã¾ã›ã‚“。 Data partition (%1) データパーティション (%1) Unknown system partition (%1) 䏿˜Žãªã‚·ã‚¹ãƒ†ãƒ ãƒ‘ーティション (%1) %1 system partition (%2) %1 システムパーティション (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>パーティション %1 ã¯ã€%2 ã«ã¯å°ã•ã™ãŽã¾ã™ã€‚å°‘ãªãã¨ã‚‚ %3 GB 以上ã®ãƒ‘ãƒ¼ãƒ†ã‚£ã‚·ãƒ§ãƒ³ã‚’é¸æŠžã—ã¦ãã ã•ã„。 <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/>EFI システムパーティションãŒã‚·ã‚¹ãƒ†ãƒ ã«è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。%1 を設定ã™ã‚‹ãŸã‚ã«ä¸€æ—¦æˆ»ã£ã¦æ‰‹å‹•パーティショニングを使用ã—ã¦ãã ã•ã„。 <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>%1 㯠%2 ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¾ã™ã€‚<br/><font color="red">警告: </font>パーティション %2 ã®ã™ã¹ã¦ã®ãƒ‡ãƒ¼ã‚¿ã¯å¤±ã‚れã¾ã™ã€‚ The EFI system partition at %1 will be used for starting %2. %1 上㮠EFI システムパーティション㯠%2 開始時ã«ä½¿ç”¨ã•れã¾ã™ã€‚ EFI system partition: EFI システムパーティション: ResizeFSJob Resize Filesystem Job ファイルシステム ジョブã®ã‚µã‚¤ã‚ºå¤‰æ›´ Invalid configuration ä¸å½“ãªè¨­å®š The file-system resize job has an invalid configuration and will not run. ファイルシステムã®ã‚µã‚¤ã‚ºå¤‰æ›´ã‚¸ãƒ§ãƒ–ãŒä¸å½“ãªè¨­å®šã§ã‚ã‚‹ãŸã‚ã€ä½œå‹•ã—ã¾ã›ã‚“。 KPMCore not Available KPMCore ã¯åˆ©ç”¨ã§ãã¾ã›ã‚“ Calamares cannot start KPMCore for the file-system resize job. Calamares ã¯ãƒ•ァイエウシステムã®ã‚µã‚¤ã‚ºå¤‰æ›´ã‚¸ãƒ§ãƒ–ã®ãŸã‚ KPMCore ã‚’é–‹å§‹ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。 Resize Failed サイズ変更ã«å¤±æ•—ã—ã¾ã—㟠The filesystem %1 could not be found in this system, and cannot be resized. ファイルシステム %1 ãŒã‚·ã‚¹ãƒ†ãƒ å†…ã«è¦‹ã¤ã‘られãªã‹ã£ãŸãŸã‚ã€ã‚µã‚¤ã‚ºå¤‰æ›´ãŒã§ãã¾ã›ã‚“。 The device %1 could not be found in this system, and cannot be resized. デãƒã‚¤ã‚¹ %1 ãŒã‚·ã‚¹ãƒ†ãƒ å†…ã«è¦‹ã¤ã‘られãªã‹ã£ãŸãŸã‚ã€ã‚µã‚¤ã‚ºå¤‰æ›´ãŒã§ãã¾ã›ã‚“。 The filesystem %1 cannot be resized. ファイルシステム %1 ã®ã‚µã‚¤ã‚ºå¤‰æ›´ãŒã§ãã¾ã›ã‚“。 The device %1 cannot be resized. デãƒã‚¤ã‚¹ %1 ã®ã‚µã‚¤ã‚ºå¤‰æ›´ãŒã§ãã¾ã›ã‚“。 The filesystem %1 must be resized, but cannot. ファイルシステム %1 ã¯ã‚µã‚¤ã‚ºå¤‰æ›´ãŒå¿…è¦ã§ã™ãŒã€ã§ãã¾ã›ã‚“。 The device %1 must be resized, but cannot デãƒã‚¤ã‚¹ %1 ã¯ã‚µã‚¤ã‚ºå¤‰æ›´ãŒå¿…è¦ã§ã™ãŒã€ã§ãã¾ã›ã‚“。 ResizePartitionJob Resize partition %1. パーティション %1 ã®ã‚µã‚¤ã‚ºã‚’変更ã™ã‚‹ã€‚ Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. <strong>%2MiB</strong> ã®ãƒ‘ーティション <strong>%1</strong> ã‚’ <strong>%3MiB</strong>ã«ã‚µã‚¤ã‚ºå¤‰æ›´ã€‚ Resizing %2MiB partition %1 to %3MiB. %2MiB ã®ãƒ‘ーティション %1 ã‚’ %3MiB ã«ã‚µã‚¤ã‚ºå¤‰æ›´ã—ã¦ã„ã¾ã™ã€‚ The installer failed to resize partition %1 on disk '%2'. インストーラãŒã€ãƒ‡ã‚£ã‚¹ã‚¯ '%2' ã§ã®ãƒ‘ーティション %1 ã®ãƒªã‚µã‚¤ã‚ºã«å¤±æ•—ã—ã¾ã—ãŸã€‚ ResizeVolumeGroupDialog Resize Volume Group ボリュームグループã®ã‚µã‚¤ã‚ºå¤‰æ›´ ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. ボリュームグループ %1 ã‚’ %2 ã‹ã‚‰ %3 ã«ã‚µã‚¤ã‚ºå¤‰æ›´ã€‚ Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. ボリュームグループ <strong>%1</strong> ã‚’ <strong>%2</strong> ã‹ã‚‰ <strong>%3</strong> ã«ã‚µã‚¤ã‚ºå¤‰æ›´ã€‚ The installer failed to resize a volume group named '%1'. インストーラーã¯ãƒœãƒªãƒ¥ãƒ¼ãƒ ã‚°ãƒ«ãƒ¼ãƒ— '%1' ã®ã‚µã‚¤ã‚ºå¤‰æ›´ã«å¤±æ•—ã—ã¾ã—ãŸã€‚ ResultsListDialog For best results, please ensure that this computer: 良好ãªçµæžœã‚’å¾—ã‚‹ãŸã‚ã«ã€ã“ã®ã‚³ãƒ³ãƒ”ュータã«ã¤ã„ã¦ä»¥ä¸‹ã®é …目を確èªã—ã¦ãã ã•ã„: System requirements システムè¦ä»¶ ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> ã“ã®ã‚³ãƒ³ãƒ”ュータ㯠%1 をセットアップã™ã‚‹ãŸã‚ã®æœ€ä½Žè¦ä»¶ã‚’満ãŸã—ã¦ã„ã¾ã›ã‚“。<br/>セットアップã¯ç¶šè¡Œã§ãã¾ã›ã‚“。 <a href="#details">詳細...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> ã“ã®ã‚³ãƒ³ãƒ”ュータ㯠%1 をインストールã™ã‚‹ãŸã‚ã®æœ€ä½Žè¦ä»¶ã‚’満ãŸã—ã¦ã„ã¾ã›ã‚“。<br/>インストールã¯ç¶šè¡Œã§ãã¾ã›ã‚“。<a href="#details">詳細...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. ã“ã®ã‚³ãƒ³ãƒ”ュータã¯ã€ %1 をセットアップã™ã‚‹ãŸã‚ã®æŽ¨å¥¨æ¡ä»¶ã‚’ã„ãã¤ã‹æº€ãŸã—ã¦ã„ã¾ã›ã‚“。<br/>インストールã¯ç¶šè¡Œã—ã¾ã™ãŒã€ä¸€éƒ¨ã®æ©Ÿèƒ½ãŒç„¡åйã«ãªã‚‹å ´åˆãŒã‚りã¾ã™ã€‚ This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. ã“ã®ã‚³ãƒ³ãƒ”ュータã¯ã€ %1 をインストールã™ã‚‹ãŸã‚ã®æŽ¨å¥¨æ¡ä»¶ã‚’ã„ãã¤ã‹æº€ãŸã—ã¦ã„ã¾ã›ã‚“。<br/>インストールã¯ç¶šè¡Œã—ã¾ã™ãŒã€ä¸€éƒ¨ã®æ©Ÿèƒ½ãŒç„¡åйã«ãªã‚‹å ´åˆãŒã‚りã¾ã™ã€‚ This program will ask you some questions and set up %2 on your computer. ã“ã®ãƒ—ログラムã¯ã‚ãªãŸã«ã„ãã¤ã‹è³ªå•ã‚’ã—ã¦ã€ã‚³ãƒ³ãƒ”ュータ㫠%2 を設定ã—ã¾ã™ã€‚ ScanningDialog Scanning storage devices... ストレージデãƒã‚¤ã‚¹ã‚’スキャンã—ã¦ã„ã¾ã™... Partitioning パーティショニング SetHostNameJob Set hostname %1 ホストå %1 ã®è¨­å®š Set hostname <strong>%1</strong>. ホストå <strong>%1</strong> を設定ã™ã‚‹ã€‚ Setting hostname %1. ホストå %1 を設定ã—ã¦ã„ã¾ã™ã€‚ Internal Error 内部エラー Cannot write hostname to target system ターゲットã¨ã™ã‚‹ã‚·ã‚¹ãƒ†ãƒ ã«ãƒ›ã‚¹ãƒˆåを書ãè¾¼ã‚ã¾ã›ã‚“ SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 キーボードã®ãƒ¢ãƒ‡ãƒ«ã‚’ %1 ã«ã€ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã‚’ %2-%3ã«è¨­å®š Failed to write keyboard configuration for the virtual console. 仮想コンソールã§ã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰è¨­å®šã®æ›¸ãè¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸã€‚ Failed to write to %1 %1 ã¸ã®æ›¸ãè¾¼ã¿ã«å¤±æ•—ã—ã¾ã—㟠Failed to write keyboard configuration for X11. X11 ã®ãŸã‚ã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰è¨­å®šã®æ›¸ãè¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸã€‚ Failed to write keyboard configuration to existing /etc/default directory. ç¾å­˜ã™ã‚‹ /etc/default ディレクトリã¸ã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰è¨­å®šã®æ›¸ãè¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸã€‚ SetPartFlagsJob Set flags on partition %1. パーティション %1 ã«ãƒ•ラグを設定ã™ã‚‹ã€‚ Set flags on %1MiB %2 partition. %1MiB %2 パーティションã«ãƒ•ラグを設定ã™ã‚‹ã€‚ Set flags on new partition. æ–°ã—ã„パーティションã«ãƒ•ラグを設定ã™ã‚‹ã€‚ Clear flags on partition <strong>%1</strong>. パーティション <strong>%1</strong> 上ã®ãƒ•ラグを消去。 Clear flags on %1MiB <strong>%2</strong> partition. %1MiB <strong>%2</strong> パーティション上ã®ãƒ•ラグを消去。 Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. %1MiB <strong>%2</strong> パーティション㫠<strong>%3</strong> フラグを設定ã™ã‚‹ã€‚ Clearing flags on %1MiB <strong>%2</strong> partition. %1MiB <strong>%2</strong> パーティション上ã®ãƒ•ラグを消去ã—ã¦ã„ã¾ã™ã€‚ Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. %1MiB <strong>%2</strong> パーティション㫠<strong>%3</strong> フラグを設定ã—ã¦ã„ã¾ã™ã€‚ Clear flags on new partition. æ–°ã—ã„パーティション上ã®ãƒ•ラグを消去。 Flag partition <strong>%1</strong> as <strong>%2</strong>. パーティション <strong>%1</strong> ã« <strong>%2</strong>フラグを設定ã™ã‚‹ã€‚ Flag new partition as <strong>%1</strong>. æ–°ã—ã„パーティション㫠<strong>%1</strong> フラグを設定ã™ã‚‹ã€‚ Clearing flags on partition <strong>%1</strong>. パーティション <strong>%1</strong> ã®ãƒ•ラグを消去ã—ã¦ã„ã¾ã™ã€‚ Clearing flags on new partition. æ–°ã—ã„パーティション上ã®ãƒ•ラグを消去ã—ã¦ã„ã¾ã™ã€‚ Setting flags <strong>%2</strong> on partition <strong>%1</strong>. パーティション <strong>%1</strong> ã« <strong>%2</strong> フラグを設定ã™ã‚‹ã€‚ Setting flags <strong>%1</strong> on new partition. æ–°ã—ã„パーティション㫠<strong>%1</strong> フラグを設定ã—ã¦ã„ã¾ã™ã€‚ The installer failed to set flags on partition %1. インストーラーã¯ãƒ‘ーティション %1 上ã®ãƒ•ラグã®è¨­å®šã«å¤±æ•—ã—ã¾ã—ãŸã€‚ SetPasswordJob Set password for user %1 ユーザ %1 ã®ãƒ‘スワード設定 Setting password for user %1. ユーザ %1 ã®ãƒ‘スワードを設定ã—ã¦ã„ã¾ã™ã€‚ Bad destination system path. 䏿­£ãªã‚·ã‚¹ãƒ†ãƒ ãƒ‘ス。 rootMountPoint is %1 root ã®ãƒžã‚¦ãƒ³ãƒˆãƒã‚¤ãƒ³ãƒˆã¯ %1 。 Cannot disable root account. rootアカウントを使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。 passwd terminated with error code %1. passwd ãŒã‚¨ãƒ©ãƒ¼ã‚³ãƒ¼ãƒ‰ %1 ã®ãŸã‚終了ã—ã¾ã—ãŸã€‚ Cannot set password for user %1. ユーザ %1 ã®ãƒ‘スワードã¯è¨­å®šã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ usermod terminated with error code %1. エラーコード %1 ã«ã‚ˆã‚ŠusermodãŒåœæ­¢ã—ã¾ã—ãŸã€‚ SetTimezoneJob Set timezone to %1/%2 タイムゾーンを %1/%2 ã«è¨­å®š Cannot access selected timezone path. é¸æŠžã—ãŸã‚¿ã‚¤ãƒ ã‚¾ãƒ¼ãƒ³ã®ãƒ‘スã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã›ã‚“。 Bad path: %1 䏿­£ãªãƒ‘ス: %1 Cannot set timezone. タイムゾーンを設定ã§ãã¾ã›ã‚“。 Link creation failed, target: %1; link name: %2 リンクã®ä½œæˆã«å¤±æ•—ã—ã¾ã—ãŸã€ã‚¿ãƒ¼ã‚²ãƒƒãƒˆ: %1 ; リンクå: %2 Cannot set timezone, タイムゾーンを設定ã§ãã¾ã›ã‚“, Cannot open /etc/timezone for writing /etc/timezone ã‚’é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“ ShellProcessJob Shell Processes Job シェルプロセスジョブ SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage This is an overview of what will happen once you start the setup procedure. ã“れã¯ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—ã‚’é–‹å§‹ã—ãŸæ™‚ã«èµ·ã“ã‚‹ã“ã¨ã®æ¦‚è¦ã§ã™ã€‚ This is an overview of what will happen once you start the install procedure. ã“れã¯ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‚’é–‹å§‹ã—ãŸæ™‚ã«èµ·ã“ã‚‹ã“ã¨ã®æ¦‚è¦ã§ã™ã€‚ SummaryViewStep Summary è¦ç´„ TrackingInstallJob Installation feedback インストールã®ãƒ•ィードãƒãƒƒã‚¯ Sending installation feedback. インストールã®ãƒ•ィードãƒãƒƒã‚¯ã‚’é€ä¿¡ Internal error in install-tracking. インストールトラッキング中ã®å†…部エラー HTTP request timed out. HTTPリクエストãŒã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã—ã¾ã—ãŸã€‚ TrackingMachineNeonJob Machine feedback マシンフィードãƒãƒƒã‚¯ Configuring machine feedback. マシンフィードãƒãƒƒã‚¯ã®è¨­å®š Error in machine feedback configuration. マシンフィードãƒãƒƒã‚¯ã®è¨­å®šä¸­ã®ã‚¨ãƒ©ãƒ¼ Could not configure machine feedback correctly, script error %1. マシンフィードãƒãƒƒã‚¯ã®è¨­å®šãŒæ­£ç¢ºã«ã§ãã¾ã›ã‚“ã§ã—ãŸã€ã‚¹ã‚¯ãƒªãƒ—トエラー %1。 Could not configure machine feedback correctly, Calamares error %1. マシンフィードãƒãƒƒã‚¯ã®è¨­å®šãŒæ­£ç¢ºã«ã§ãã¾ã›ã‚“ã§ã—ãŸã€Calamares エラー %1。 TrackingPage Form フォーム Placeholder プレースホルダー <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>ã“ã‚Œã‚’é¸æŠžã™ã‚‹ã¨ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ™‚ã®æƒ…報を <span style=" font-weight:600;">å…¨ãé€ä¿¡ã—ãªã</span> ãªã‚Šã¾ã™ã€‚</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">ユーザーフィードãƒãƒƒã‚¯ã«ã¤ã„ã¦ã®è©³ã—ã„æƒ…å ±ã«ã¤ã„ã¦ã¯ã€ã“ã“をクリックã—ã¦ãã ã•ã„</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. インストールトラッキング㯠%1 ã«ã¨ã£ã¦ã€ã©ã‚Œã ã‘ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒ ã©ã®ãƒãƒ¼ãƒ‰ã« %1 をインストールã™ã‚‹ã®ã‹ (下記ã®2ã¤ã®ã‚ªãƒ—ション)ã€ã©ã®ã‚ˆã†ãªã‚¢ãƒ—リケーションãŒå¥½ã¾ã‚Œã¦ã„ã‚‹ã®ã‹ã«ã¤ã„ã¦ã®æƒ…報を把æ¡ã™ã‚‹ã“ã¨ã®è£œåŠ©ã‚’è¡Œã£ã¦ã„ã¾ã™ã€‚ ã©ã®ã‚ˆã†ãªæƒ…å ±ãŒé€ä¿¡ã•れã¦ã„ã‚‹ã®ã‹ç¢ºèªã—ãŸã„å ´åˆã¯ã€ä»¥ä¸‹ã®å„エリアã®ãƒ˜ãƒ«ãƒ—ã®ã‚¢ã‚¤ã‚³ãƒ³ã‚’クリックã—ã¦ä¸‹ã•ã„。 By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. インストールやãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã®æƒ…報をé€ä¿¡ã—ã¾ã™ã€‚ã“ã®æƒ…å ±ã¯ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«çµ‚了後 <b> 1回ã ã‘é€ä¿¡ã•れã¾ã™</b> 。 By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. ã“ã‚Œã‚’é¸æŠžã™ã‚‹ã¨ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã€ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã€ãŠã‚ˆã³ã‚¢ãƒ—リケーションã«é–¢ã™ã‚‹æƒ…報を<b>定期的ã«</b> %1 ã«é€ä¿¡ã—ã¾ã™ã€‚ By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. ã“ã‚Œã‚’é¸æŠžã™ã‚‹ã¨ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã€ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã€ã‚¢ãƒ—リケーションã€ãŠã‚ˆã³ä½¿ç”¨ãƒ‘ターンã«é–¢ã™ã‚‹æƒ…報を<b>毎回</b> %1 ã«é€ä¿¡ã—ã¾ã™ã€‚ TrackingViewStep Feedback フィードãƒãƒƒã‚¯ UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>ã‚‚ã—複数ã®äººé–“ãŒã“ã®ã‚³ãƒ³ãƒ”ュータを使用ã™ã‚‹å ´åˆã€ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—ã®å¾Œã§è¤‡æ•°ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’作æˆã§ãã¾ã™ã€‚</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>ã‚‚ã—複数ã®äººé–“ãŒã“ã®ã‚³ãƒ³ãƒ”ュータを使用ã™ã‚‹å ´åˆã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã®å¾Œã§è¤‡æ•°ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’作æˆã§ãã¾ã™ã€‚</small> Your username is too long. ユーザーåãŒé•·ã™ãŽã¾ã™ã€‚ Your username must start with a lowercase letter or underscore. ユーザーåã¯ã‚¢ãƒ«ãƒ•ァベットã®å°æ–‡å­—ã¾ãŸã¯ _ ã§å§‹ã‚ã¦ãã ã•ã„。 Only lowercase letters, numbers, underscore and hyphen are allowed. 使用ã§ãã‚‹ã®ã¯ã‚¢ãƒ«ãƒ•ァベットã®å°æ–‡å­—ã¨æ•°å­—㨠_ 㨠- ã ã‘ã§ã™ã€‚ Only letters, numbers, underscore and hyphen are allowed. 使用ã§ãã‚‹ã®ã¯ã‚¢ãƒ«ãƒ•ã‚¡ãƒ™ãƒƒãƒˆã¨æ•°å­—㨠_ 㨠- ã ã‘ã§ã™ã€‚ Your hostname is too short. ホストåãŒçŸ­ã™ãŽã¾ã™ã€‚ Your hostname is too long. ホストåãŒé•·éŽãŽã¾ã™ã€‚ Your passwords do not match! パスワードãŒä¸€è‡´ã—ã¦ã„ã¾ã›ã‚“ï¼ UsersViewStep Users ユーザー情報 VariantModel Key キー Value 値 VolumeGroupBaseDialog Create Volume Group ボリュームグループã®ä½œæˆ List of Physical Volumes 物ç†ãƒœãƒªãƒ¥ãƒ¼ãƒ ã®ãƒªã‚¹ãƒˆ Volume Group Name: ボリュームグループã®åç§°: Volume Group Type: ボリュームグループã®ã‚¿ã‚¤ãƒ—: Physical Extent Size: ç‰©ç†æ‹¡å¼µã‚µã‚¤ã‚º: MiB MiB Total Size: ã™ã¹ã¦ã®ã‚µã‚¤ã‚º: Used Size: 使用済ã¿ã®ã‚µã‚¤ã‚º: Total Sectors: ã™ã¹ã¦ã®ã‚»ã‚¯ã‚¿ãƒ¼: Quantity of LVs: LVs ã®å®¹é‡: WelcomePage Form フォーム Select application and system language アプリケーションåŠã³è¨€èªžã®é¸æŠž Open donations website 寄付サイトを開ã &Donate 寄付ã™ã‚‹(&D) Open help and support website サãƒãƒ¼ãƒˆã‚µã‚¤ãƒˆã‚’é–‹ã Open issues and bug-tracking website issue åŠã³ bug-track ã®ã‚µã‚¤ãƒˆã‚’é–‹ã Open release notes website リリースノートã®ã‚¦ã‚§ãƒ–サイトを開ã &Release notes リリースノート (&R) &Known issues 既知ã®å•題 (&K) &Support サãƒãƒ¼ãƒˆ (&S) &About 説明 (&A) <h1>Welcome to the %1 installer.</h1> <h1>%1 インストーラーã¸ã‚ˆã†ã“ã。</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>%1 Calamares インストーラーã«ã‚ˆã†ã“ã</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>%1 Calamares セットアッププログラムã«ã‚ˆã†ã“ã</h1> <h1>Welcome to %1 setup.</h1> <h1>%1 セットアップã¸ã‚ˆã†ã“ã</h1> About %1 setup %1 セットアップã«ã¤ã„㦠About %1 installer %1 インストーラーã«ã¤ã„㦠<h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support %1 サãƒãƒ¼ãƒˆ WelcomeQmlViewStep Welcome よã†ã“ã WelcomeViewStep Welcome よã†ã“ã notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>ã“れらã¯ãƒªãƒªãƒ¼ã‚¹ãƒŽãƒ¼ãƒˆã®ä¾‹ã§ã™ã€‚</p> welcomeq <h3>%1 <quote>%2</quote></h3> <h3>%1 <quote>%2</quote></h3> About About Support サãƒãƒ¼ãƒˆ Known issues 既知ã®å•題点 Release notes リリースノート Donate 寄付 calamares-3.2.20/lang/calamares_kk.ts000066400000000000000000004572701362604102500174520ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. BootLoaderModel Master Boot Record of %1 Boot Partition System Partition Do not install a boot loader %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page Calamares::DebugWindow Form GlobalStorage JobQueue Modules Type: none Interface: Tools Саймандар Reload Stylesheet Widget Tree Debug information Жөндеу ақпараты Calamares::ExecutionViewStep Set up Install Орнату Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Дайын Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Calamares::PythonJob Running %1 operation. Bad working directory path Working directory %1 for python job %2 is not readable. Bad main script file Main script file %1 for python job %2 is not readable. Boost.Python error in job "%1". Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager &Back Ð&ртқа &Next &Ðлға &Cancel Ба&Ñ Ñ‚Ð°Ñ€Ñ‚Ñƒ Cancel setup without changing the system. Cancel installation without changing the system. Setup Failed Would you like to paste the install log to the web? Install Log Paste URL The upload was unsuccessful. No web-paste was done. Calamares Initialization Failed %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. <br/>The following modules could not be loaded: Continue with installation? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Set up &Install Setup is complete. Close the setup program. Cancel setup? Cancel installation? Орнатудан Ð±Ð°Ñ Ñ‚Ð°Ñ€Ñ‚Ñƒ керек пе? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. &Yes &No &Close Continue with setup? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> &Install now Go &back &Done The installation is complete. Close the installer. Error Installation Failed CalamaresPython::Helper Unknown exception type unparseable Python error unparseable Python traceback Unfetchable Python error. CalamaresUtils Install log posted to: %1 CalamaresWindow %1 Setup Program %1 Installer Show debug information CheckerContainer Gathering system information... ChoicePage Form After: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Boot loader location: Select storage de&vice: Current: Reuse %1 as home partition for %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. <strong>Select a partition to install on</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. The EFI system partition at %1 will be used for starting %2. EFI system partition: EFI жүйелік бөлімі: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. No Swap Reuse Swap Swap (no Hibernate) Swap (with Hibernate) Swap to file <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. ClearMountsJob Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 ClearTempMountsJob Clear all temporary mounts. Clearing all temporary mounts. Cannot get list of temporary mounts. Cleared all temporary mounts. CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition MiB Partition &Type: &Primary E&xtended Fi&le System: LVM LV name Flags: &Mount Point: Si&ze: En&crypt Logical Primary GPT Mountpoint already in use. Please select another one. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. The installer failed to create partition on disk '%1'. CreatePartitionTableDialog Create Partition Table Creating a new partition table will delete all existing data on the disk. What kind of partition table do you want to create? Master Boot Record (MBR) GUID Partition Table (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Creating new %1 partition table on %2. The installer failed to create a partition table on %1. CreateUserJob Create user %1 Create user <strong>%1</strong>. Creating user %1. Sudoers dir is not writable. Cannot create sudoers file for writing. Cannot chmod sudoers file. Cannot open groups file for reading. CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. Delete partition <strong>%1</strong>. Deleting partition %1. The installer failed to delete partition %1. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. This device has a <strong>%1</strong> partition table. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - (%2) device[name] - (device-node[name]) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Failed to open %1 DummyCppJob Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Content: &Keep Format Warning: Formatting the partition will erase all existing data. &Mount Point: Si&ze: MiB Fi&le System: Flags: Mountpoint already in use. Please select another one. EncryptWidget Form En&crypt system Passphrase Confirm passphrase Please enter the same passphrase in both boxes. FillGlobalStorageJob Set partition information Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Install boot loader on <strong>%1</strong>. Setting up mount points. FinishedPage Form <Restart checkbox tooltip> &Restart now <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. FinishedViewStep Finish Setup Complete Installation Complete The setup of %1 is complete. The installation of %1 is complete. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatting partition %1 with file system %2. The installer failed to format partition %1 on disk '%2'. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source The system is not plugged in to a power source. is connected to the Internet The system is not connected to the Internet. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Please install KDE Konsole and try again! Executing script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script KeyboardPage Set keyboard model to %1.<br/> Set keyboard layout to %1/%2. KeyboardViewStep Keyboard LCLocaleDialog System locale setting The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. &Cancel Ба&Ñ Ñ‚Ð°Ñ€Ñ‚Ñƒ &OK LicensePage Form <h1>License Agreement</h1> I accept the terms and conditions above. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> File: %1 Show the license text Open license agreement in browser. Hide license text LocalePage The system language will be set to %1. The numbers and dates locale will be set to %1. Region: Zone: &Change... Set timezone to %1/%2.<br/> LocaleViewStep Location LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Configuration Error No root mount point is set for MachineId. NetInstallPage Name Description Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Incorrect configuration) NetInstallViewStep Package selection Office software Office package Browser software Browser package Web browser Kernel Services Login Desktop Applications NotesQmlViewStep Notes OEMPage Ba&tch: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> OEMViewStep OEM Configuration Set the OEM Batch Identifier to <code>%1</code>. PWQ Password is too short Password is too long Password is too weak Memory allocation error when setting '%1' Memory allocation error The password is the same as the old one The password is a palindrome The password differs with case changes only The password is too similar to the old one The password contains the user name in some form The password contains words from the real name of the user in some form The password contains forbidden words in some form The password contains less than %1 digits The password contains too few digits The password contains less than %1 uppercase letters The password contains too few uppercase letters The password contains less than %1 lowercase letters The password contains too few lowercase letters The password contains less than %1 non-alphanumeric characters The password contains too few non-alphanumeric characters The password is shorter than %1 characters The password is too short The password is just rotated old one The password contains less than %1 character classes The password does not contain enough character classes The password contains more than %1 same characters consecutively The password contains too many same characters consecutively The password contains more than %1 characters of the same class consecutively The password contains too many characters of the same class consecutively The password contains monotonic sequence longer than %1 characters The password contains too long of a monotonic character sequence No password supplied Cannot obtain random numbers from the RNG device Password generation failed - required entropy too low for settings The password fails the dictionary check - %1 The password fails the dictionary check Unknown setting - %1 Unknown setting Bad integer value of setting - %1 Bad integer value Setting %1 is not of integer type Setting is not of integer type Setting %1 is not of string type Setting is not of string type Opening the configuration file failed The configuration file is malformed Fatal failure Unknown error Password is empty PackageChooserPage Form Product Name TextLabel Long Product Description Package Selection Please pick a product from the list. The selected product will be installed. PackageChooserViewStep Packages Page_Keyboard Form Keyboard Model: Type here to test your keyboard Page_UserSetup Form What is your name? What name do you want to use to log in? Choose a password to keep your account safe. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> What is the name of this computer? Your Full Name login <small>This name will be used if you make the computer visible to others on a network.</small> Computer Name Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Use the same password for the administrator account. Choose a password for the administrator account. <small>Enter the same password twice, so that it can be checked for typing errors.</small> PartitionLabelsView Root Home Boot EFI system Swap New partition for %1 New partition %1 %2 size[number] filesystem[name] PartitionModel Free Space New partition Name File System Mount Point Size PartitionPage Form Storage de&vice: &Revert All Changes New Partition &Table Cre&ate &Edit &Delete New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group I&nstall boot loader on: Are you sure you want to create a new partition table on %1? Can not create new partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. PartitionViewStep Gathering system information... Partitions Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <strong>Replace</strong> a partition with %1. <strong>Manual</strong> partitioning. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Current: After: No EFI system partition configured An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. EFI system partition flag not set An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: External command crashed. Command <i>%1</i> crashed. External command failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Bad parameters for process job call. External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Command <i>%1</i> finished with exit code %2. QObject Default Keyboard Model Default unknown extended unformatted swap Unpartitioned space or unknown partition table (no mount point) Requirements checking for module <i>%1</i> is complete. %1 (%2) language[name] (country[name]) %1 (%2) No product No description provided. File not found Path <pre>%1</pre> must be an absolute path. Could not create new random file <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. The selected item does not appear to be a valid partition. %1 cannot be installed on empty space. Please select an existing partition. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 cannot be installed on this partition. Data partition (%1) Unknown system partition (%1) %1 system partition (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. The EFI system partition at %1 will be used for starting %2. EFI system partition: EFI жүйелік бөлімі: ResizeFSJob Resize Filesystem Job Invalid configuration The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. ResizeVolumeGroupDialog Resize Volume Group ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: System requirements ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. This program will ask you some questions and set up %2 on your computer. ScanningDialog Scanning storage devices... Partitioning SetHostNameJob Set hostname %1 Set hostname <strong>%1</strong>. Setting hostname %1. Internal Error Cannot write hostname to target system SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Failed to write keyboard configuration for the virtual console. Failed to write to %1 Failed to write keyboard configuration for X11. Failed to write keyboard configuration to existing /etc/default directory. SetPartFlagsJob Set flags on partition %1. Set flags on %1MiB %2 partition. Set flags on new partition. Clear flags on partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag new partition as <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. SetPasswordJob Set password for user %1 Setting password for user %1. Bad destination system path. rootMountPoint is %1 Cannot disable root account. passwd terminated with error code %1. Cannot set password for user %1. usermod terminated with error code %1. SetTimezoneJob Set timezone to %1/%2 Cannot access selected timezone path. Bad path: %1 Cannot set timezone. Link creation failed, target: %1; link name: %2 Cannot set timezone, Cannot open /etc/timezone for writing ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) SummaryPage This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. SummaryViewStep Summary TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingMachineNeonJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form Placeholder <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. TrackingViewStep Feedback UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> Your username is too long. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Only letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Your hostname is too long. Your passwords do not match! UsersViewStep Users Пайдаланушылар VariantModel Key Value VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB Total Size: Used Size: Total Sectors: Quantity of LVs: WelcomePage Form Select application and system language Open donations website &Donate Open help and support website Open issues and bug-tracking website Open release notes website &Release notes &Known issues &Support &About <h1>Welcome to the %1 installer.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Welcome to %1 setup.</h1> About %1 setup About %1 installer <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support %1 қолдауы WelcomeQmlViewStep Welcome Қош келдіңіз WelcomeViewStep Welcome Қош келдіңіз notesqml <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> About Support Known issues Release notes Donate calamares-3.2.20/lang/calamares_kn.ts000066400000000000000000004573751362604102500174630ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. BootLoaderModel Master Boot Record of %1 Boot Partition System Partition Do not install a boot loader %1 (%2) Calamares::BlankViewStep Blank Page Calamares::DebugWindow Form GlobalStorage JobQueue Modules Type: none Interface: Tools ಉಪಕರಣಗಳೠReload Stylesheet Widget Tree Debug information Calamares::ExecutionViewStep Set up Install ಸà³à²¥à²¾à²ªà²¿à²¸à³ Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Calamares::PythonJob Running %1 operation. Bad working directory path Working directory %1 for python job %2 is not readable. Bad main script file Main script file %1 for python job %2 is not readable. Boost.Python error in job "%1". Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager &Back ಹಿಂದಿನ &Next ಮà³à²‚ದಿನ &Cancel ರದà³à²¦à³à²—ೊಳಿಸೠCancel setup without changing the system. Cancel installation without changing the system. Setup Failed Would you like to paste the install log to the web? Install Log Paste URL The upload was unsuccessful. No web-paste was done. Calamares Initialization Failed %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. <br/>The following modules could not be loaded: Continue with installation? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Set up &Install Setup is complete. Close the setup program. Cancel setup? Cancel installation? ಅನà³à²¸à³à²¥à²¾à²ªà²¨à³†à²¯à²¨à³à²¨à³ ರದà³à²¦à³à²®à²¾à²¡à³à²µà³à²¦à³‡? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. &Yes ಹೌದೠ&No ಇಲà³à²² &Close ಮà³à²šà³à²šà²¿à²°à²¿ Continue with setup? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> &Install now Go &back &Done The installation is complete. Close the installer. Error ದೋಷ Installation Failed ಅನà³à²¸à³à²¥à²¾à²ªà²¨à³† ವಿಫಲವಾಗಿದೆ CalamaresPython::Helper Unknown exception type unparseable Python error unparseable Python traceback Unfetchable Python error. CalamaresUtils Install log posted to: %1 CalamaresWindow %1 Setup Program %1 Installer Show debug information CheckerContainer Gathering system information... ChoicePage Form After: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Boot loader location: Select storage de&vice: Current: ಪà³à²°à²¸à²•à³à²¤: Reuse %1 as home partition for %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. <strong>Select a partition to install on</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. The EFI system partition at %1 will be used for starting %2. EFI system partition: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. No Swap Reuse Swap Swap (no Hibernate) Swap (with Hibernate) Swap to file <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. ClearMountsJob Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 ClearTempMountsJob Clear all temporary mounts. Clearing all temporary mounts. Cannot get list of temporary mounts. Cleared all temporary mounts. CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition MiB Partition &Type: &Primary ಪà³à²°à²¾à²¥à²®à²¿à²• E&xtended Fi&le System: LVM LV name Flags: &Mount Point: Si&ze: En&crypt Logical Primary GPT Mountpoint already in use. Please select another one. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. The installer failed to create partition on disk '%1'. CreatePartitionTableDialog Create Partition Table Creating a new partition table will delete all existing data on the disk. What kind of partition table do you want to create? Master Boot Record (MBR) GUID Partition Table (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Creating new %1 partition table on %2. The installer failed to create a partition table on %1. CreateUserJob Create user %1 Create user <strong>%1</strong>. Creating user %1. Sudoers dir is not writable. Cannot create sudoers file for writing. Cannot chmod sudoers file. Cannot open groups file for reading. CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. Delete partition <strong>%1</strong>. Deleting partition %1. The installer failed to delete partition %1. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. This device has a <strong>%1</strong> partition table. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - (%2) device[name] - (device-node[name]) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Failed to open %1 DummyCppJob Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Content: &Keep Format Warning: Formatting the partition will erase all existing data. &Mount Point: Si&ze: MiB Fi&le System: Flags: Mountpoint already in use. Please select another one. EncryptWidget Form En&crypt system Passphrase Confirm passphrase Please enter the same passphrase in both boxes. FillGlobalStorageJob Set partition information Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Install boot loader on <strong>%1</strong>. Setting up mount points. FinishedPage Form <Restart checkbox tooltip> &Restart now <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. FinishedViewStep Finish Setup Complete Installation Complete The setup of %1 is complete. The installation of %1 is complete. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatting partition %1 with file system %2. The installer failed to format partition %1 on disk '%2'. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source The system is not plugged in to a power source. is connected to the Internet The system is not connected to the Internet. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Please install KDE Konsole and try again! Executing script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script KeyboardPage Set keyboard model to %1.<br/> Set keyboard layout to %1/%2. KeyboardViewStep Keyboard LCLocaleDialog System locale setting The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. &Cancel ರದà³à²¦à³à²—ೊಳಿಸೠ&OK LicensePage Form <h1>License Agreement</h1> I accept the terms and conditions above. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> File: %1 Show the license text Open license agreement in browser. Hide license text LocalePage The system language will be set to %1. The numbers and dates locale will be set to %1. Region: Zone: &Change... Set timezone to %1/%2.<br/> LocaleViewStep Location LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Configuration Error No root mount point is set for MachineId. NetInstallPage Name Description Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Incorrect configuration) NetInstallViewStep Package selection Office software Office package Browser software Browser package Web browser Kernel Services Login Desktop Applications NotesQmlViewStep Notes OEMPage Ba&tch: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> OEMViewStep OEM Configuration Set the OEM Batch Identifier to <code>%1</code>. PWQ Password is too short Password is too long Password is too weak Memory allocation error when setting '%1' Memory allocation error The password is the same as the old one The password is a palindrome The password differs with case changes only The password is too similar to the old one The password contains the user name in some form The password contains words from the real name of the user in some form The password contains forbidden words in some form The password contains less than %1 digits The password contains too few digits The password contains less than %1 uppercase letters The password contains too few uppercase letters The password contains less than %1 lowercase letters The password contains too few lowercase letters The password contains less than %1 non-alphanumeric characters The password contains too few non-alphanumeric characters The password is shorter than %1 characters The password is too short The password is just rotated old one The password contains less than %1 character classes The password does not contain enough character classes The password contains more than %1 same characters consecutively The password contains too many same characters consecutively The password contains more than %1 characters of the same class consecutively The password contains too many characters of the same class consecutively The password contains monotonic sequence longer than %1 characters The password contains too long of a monotonic character sequence No password supplied Cannot obtain random numbers from the RNG device Password generation failed - required entropy too low for settings The password fails the dictionary check - %1 The password fails the dictionary check Unknown setting - %1 Unknown setting Bad integer value of setting - %1 Bad integer value Setting %1 is not of integer type Setting is not of integer type Setting %1 is not of string type Setting is not of string type Opening the configuration file failed The configuration file is malformed Fatal failure Unknown error Password is empty PackageChooserPage Form Product Name TextLabel Long Product Description Package Selection Please pick a product from the list. The selected product will be installed. PackageChooserViewStep Packages Page_Keyboard Form Keyboard Model: Type here to test your keyboard Page_UserSetup Form What is your name? What name do you want to use to log in? Choose a password to keep your account safe. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> What is the name of this computer? Your Full Name login <small>This name will be used if you make the computer visible to others on a network.</small> Computer Name Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Use the same password for the administrator account. Choose a password for the administrator account. <small>Enter the same password twice, so that it can be checked for typing errors.</small> PartitionLabelsView Root Home Boot EFI system Swap New partition for %1 New partition %1 %2 size[number] filesystem[name] PartitionModel Free Space New partition Name File System Mount Point Size PartitionPage Form Storage de&vice: &Revert All Changes New Partition &Table Cre&ate &Edit &Delete New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group I&nstall boot loader on: Are you sure you want to create a new partition table on %1? Can not create new partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. PartitionViewStep Gathering system information... Partitions Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <strong>Replace</strong> a partition with %1. <strong>Manual</strong> partitioning. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Current: ಪà³à²°à²¸à²•à³à²¤: After: No EFI system partition configured An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. EFI system partition flag not set An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: External command crashed. Command <i>%1</i> crashed. External command failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Bad parameters for process job call. External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Command <i>%1</i> finished with exit code %2. QObject Default Keyboard Model Default unknown extended unformatted swap Unpartitioned space or unknown partition table (no mount point) Requirements checking for module <i>%1</i> is complete. %1 (%2) language[name] (country[name]) No product No description provided. File not found Path <pre>%1</pre> must be an absolute path. Could not create new random file <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. The selected item does not appear to be a valid partition. %1 cannot be installed on empty space. Please select an existing partition. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 cannot be installed on this partition. Data partition (%1) Unknown system partition (%1) %1 system partition (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. The EFI system partition at %1 will be used for starting %2. EFI system partition: ResizeFSJob Resize Filesystem Job Invalid configuration The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. ResizeVolumeGroupDialog Resize Volume Group ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: System requirements ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. This program will ask you some questions and set up %2 on your computer. ScanningDialog Scanning storage devices... Partitioning SetHostNameJob Set hostname %1 Set hostname <strong>%1</strong>. Setting hostname %1. Internal Error Cannot write hostname to target system SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Failed to write keyboard configuration for the virtual console. Failed to write to %1 Failed to write keyboard configuration for X11. Failed to write keyboard configuration to existing /etc/default directory. SetPartFlagsJob Set flags on partition %1. Set flags on %1MiB %2 partition. Set flags on new partition. Clear flags on partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag new partition as <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. SetPasswordJob Set password for user %1 Setting password for user %1. Bad destination system path. rootMountPoint is %1 Cannot disable root account. passwd terminated with error code %1. Cannot set password for user %1. usermod terminated with error code %1. SetTimezoneJob Set timezone to %1/%2 Cannot access selected timezone path. Bad path: %1 Cannot set timezone. Link creation failed, target: %1; link name: %2 Cannot set timezone, Cannot open /etc/timezone for writing ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) SummaryPage This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. SummaryViewStep Summary TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingMachineNeonJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form Placeholder <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. TrackingViewStep Feedback UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> Your username is too long. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Only letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Your hostname is too long. Your passwords do not match! UsersViewStep Users VariantModel Key Value VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB Total Size: Used Size: Total Sectors: Quantity of LVs: WelcomePage Form Select application and system language Open donations website &Donate Open help and support website Open issues and bug-tracking website Open release notes website &Release notes &Known issues &Support &About <h1>Welcome to the %1 installer.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Welcome to %1 setup.</h1> About %1 setup About %1 installer <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support WelcomeQmlViewStep Welcome WelcomeViewStep Welcome notesqml <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> About Support Known issues Release notes Donate calamares-3.2.20/lang/calamares_ko.ts000066400000000000000000005646611362604102500174610ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. ì´ ì‹œìŠ¤í…œì˜ <strong>부트 환경</strong>입니다. <br> <br> ì˜¤ëž˜ëœ x86 ì‹œìŠ¤í…œì€ <strong>BIOS</strong>ë§Œì„ ì§€ì›í•©ë‹ˆë‹¤. <br> 최근 ì‹œìŠ¤í…œì€ ì£¼ë¡œ <strong>EFI</strong>를 사용하지만, 호환 모드로 시작한 경우 BIOS로 나타날 ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. ì´ ì‹œìŠ¤í…œì€ <strong>EFI</strong> 부트 환경ì—서 시ë™ë˜ì—ˆìŠµë‹ˆë‹¤. <br> <br> EFI 환경ì—ì„œì˜ ì‹œë™ì— 대해 설정하려면, <strong>EFI 시스템 파티션</strong>ì— <strong>GRUB</strong>나 <strong>systemd-boot</strong>와 ê°™ì€ ë¶€íŠ¸ ë¡œë” ì• í”Œë¦¬ì¼€ì´ì…˜ì„ 배치해야 합니다. ì´ ê³¼ì •ì€ ìžë™ìœ¼ë¡œ ì§„í–‰ë©ë‹ˆë‹¤. 단, ìˆ˜ë™ íŒŒí‹°ì…”ë‹ì„ ì„ íƒí•  경우, EFI 시스템 íŒŒí‹°ì…˜ì„ ì§ì ‘ ì„ íƒ ë˜ëŠ” 작성해야 합니다. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. ì´ ì‹œìŠ¤í…œì€ <strong>BIOS 부트 환경</strong>ì—서 시ë™ë˜ì—ˆìŠµë‹ˆë‹¤. <br> <br> BIOS 환경ì—ì„œì˜ ì‹œë™ì— 대해 설정하려면, íŒŒí‹°ì…˜ì˜ ì‹œìž‘ 위치 ë˜ëŠ” 파티션 í…Œì´ë¸”ì˜ ì‹œìž‘ 위치 근처(권장)ì— ìžˆëŠ” <strong>마스터 부트 레코드</strong>ì— <strong>GRUB</strong>ê³¼ ê°™ì€ ë¶€íŠ¸ 로ë”를 설치해야 합니다. ì´ ê³¼ì •ì€ ìžë™ìœ¼ë¡œ ì§„í–‰ë©ë‹ˆë‹¤. 단, ìˆ˜ë™ íŒŒí‹°ì…”ë‹ì„ ì„ íƒí•  경우, 사용ìžê°€ ì§ì ‘ ì„¤ì •ì„ í•´ì•¼ 합니다. BootLoaderModel Master Boot Record of %1 %1ì˜ ë§ˆìŠ¤í„° 부트 레코드 Boot Partition 부트 파티션 System Partition 시스템 파티션 Do not install a boot loader 부트로ë”를 설치하지 않습니다 %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page 빈 페ì´ì§€ Calamares::DebugWindow Form í˜•ì‹ GlobalStorage ì „ì—­ 스토리지 JobQueue 작업 대기열 Modules 모듈 Type: 유형: none ì—†ìŒ Interface: ì¸í„°íŽ˜ì´ìФ: Tools ë„구 Reload Stylesheet 스타ì¼ì‹œíЏ 새로고침 Widget Tree 위젯 트리 Debug information 디버그 ì •ë³´ Calamares::ExecutionViewStep Set up 설정 Install 설치 Calamares::FailJob Job failed (%1) (%1) 작업 실패 Programmed job failure was explicitly requested. 프로그래ë°ëœ 작업 실패가 명시ì ìœ¼ë¡œ 요청ë˜ì—ˆìŠµë‹ˆë‹¤. Calamares::JobThread Done 완료 Calamares::NamedJob Example job (%1) 작업 예제 (%1) Calamares::ProcessJob Run command '%1' in target system. ëŒ€ìƒ ì‹œìŠ¤í…œì—서 '%1' ëª…ë ¹ì„ ì‹¤í–‰í•©ë‹ˆë‹¤. Run command '%1'. '%1' ëª…ë ¹ì„ ì‹¤í–‰í•©ë‹ˆë‹¤. Running command %1 %2 명령 %1 %2 실행중 Calamares::PythonJob Running %1 operation. %1 ëª…ë ¹ì„ ì‹¤í–‰ì¤‘ Bad working directory path ìž˜ëª»ëœ ìž‘ì—… 디렉터리 경로 Working directory %1 for python job %2 is not readable. 파ì´ì¬ 작업 %2ì— ëŒ€í•œ 작업 디렉터리 %1ì„ ì½ì„ 수 없습니다. Bad main script file ìž˜ëª»ëœ ì£¼ 스í¬ë¦½íЏ íŒŒì¼ Main script file %1 for python job %2 is not readable. 파ì´ì¬ 작업 %2ì— ëŒ€í•œ 주 스í¬ë¦½íЏ íŒŒì¼ %1ì„ ì½ì„ 수 없습니다. Boost.Python error in job "%1". 작업 "%1"ì—서 Boost.Python 오류 Calamares::QmlViewStep Loading ... 로딩 중 ... QML Step <i>%1</i>. QML 단계 <i>%1</i>. Loading failed. 로딩하지 못했습니다. Calamares::RequirementsChecker Waiting for %n module(s). %n 모듈(들)ì„ ê¸°ë‹¤ë¦¬ëŠ” 중. (%n second(s)) (%n ì´ˆ) System-requirements checking is complete. 시스템 요구사항 검사가 완료 ë˜ì—ˆìŠµë‹ˆë‹¤. Calamares::ViewManager &Back 뒤로 (&B) &Next ë‹¤ìŒ (&N) &Cancel 취소 (&C) Cancel setup without changing the system. ì‹œìŠ¤í…œì„ ë³€ê²½ 하지 않고 설치를 취소합니다. Cancel installation without changing the system. 시스템 변경 ì—†ì´ ì„¤ì¹˜ë¥¼ 취소합니다. Setup Failed 설치 실패 Would you like to paste the install log to the web? 설치 로그를 ì›¹ì— ë¶™ì—¬ë„£ìœ¼ì‹œê² ìŠµë‹ˆê¹Œ? Install Log Paste URL 로그 붙여넣기 URL 설치 The upload was unsuccessful. No web-paste was done. ì—…ë¡œë“œì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤. 웹 붙여넣기가 수행ë˜ì§€ 않았습니다. Calamares Initialization Failed Calamares 초기화 실패 %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. %1 ê°€ ì„¤ì¹˜ë  ìˆ˜ 없습니다. Calamaresê°€ 모든 êµ¬ì„±ëœ ëª¨ë“ˆì„ ë¶ˆëŸ¬ì˜¬ 수 없었습니다. ì´ê²ƒì€ Calamaresê°€ ë¶„í¬ì— ì˜í•´ 사용ë˜ëŠ” ë°©ì‹ì—서 ë¹„ë¡¯ëœ ë¬¸ì œìž…ë‹ˆë‹¤. <br/>The following modules could not be loaded: ë‹¤ìŒ ëª¨ë“ˆ 불러오기 실패: Continue with installation? 설치를 계ì†í•˜ì‹œê² ìŠµë‹ˆê¹Œ? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> %1 설치 í”„ë¡œê·¸ëž¨ì´ %2ì„(를) 설정하기 위해 디스í¬ë¥¼ 변경하려고 하는 중입니다.<br/><strong>ì´ëŸ¬í•œ ë³€ê²½ì€ ì·¨ì†Œí•  수 없습니다.</strong> &Set up now 지금 설치 (&S) &Set up 설치 (&S) &Install 설치(&I) Setup is complete. Close the setup program. 설치가 완료 ë˜ì—ˆìŠµë‹ˆë‹¤. 설치 í”„ë¡œê·¸ëž¨ì„ ë‹«ìŠµë‹ˆë‹¤. Cancel setup? 설치를 취소 하시겠습니까? Cancel installation? 설치를 취소하시겠습니까? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. 현재 설정 프로세스를 취소하시겠습니까? 설치 í”„ë¡œê·¸ëž¨ì´ ì¢…ë£Œë˜ê³  모든 변경 ë‚´ìš©ì´ ì†ì‹¤ë©ë‹ˆë‹¤. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. ì •ë§ë¡œ 현재 설치 프로세스를 취소하시겠습니까? 설치 관리ìžê°€ 종료ë˜ë©° 모든 ë³€ê²½ì€ ë°˜ì˜ë˜ì§€ 않습니다. &Yes 예(&Y) &No 아니오(&N) &Close 닫기(&C) Continue with setup? 설치를 계ì†í•˜ì‹œê² ìŠµë‹ˆê¹Œ? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> %1 ì¸ìŠ¤í†¨ëŸ¬ê°€ %2를 설치하기 위해 사용ìžì˜ 디스í¬ì˜ ë‚´ìš©ì„ ë³€ê²½í•˜ë ¤ê³  합니다. <br/> <strong>ì´ ë³€ê²½ ìž‘ì—…ì€ ë˜ëŒë¦´ 수 없습니다.</strong> &Install now 지금 설치 (&I) Go &back 뒤로 ì´ë™ (&b) &Done 완료 (&D) The installation is complete. Close the installer. 설치가 완료ë˜ì—ˆìŠµë‹ˆë‹¤. 설치 관리ìžë¥¼ 닫습니다. Error 오류 Installation Failed 설치 실패 CalamaresPython::Helper Unknown exception type 알 수 없는 예외 유형 unparseable Python error 구문 ë¶„ì„í•  수 없는 파ì´ì¬ 오류 unparseable Python traceback 구문 ë¶„ì„í•  수 없는 파ì´ì¬ ì—­ì¶”ì  ì •ë³´ Unfetchable Python error. 가져올 수 없는 파ì´ì¬ 오류 CalamaresUtils Install log posted to: %1 설치 로그 게시 위치: %1 CalamaresWindow %1 Setup Program %1 설치 프로그램 %1 Installer %1 설치 ê´€ë¦¬ìž Show debug information 디버그 ì •ë³´ 보기 CheckerContainer Gathering system information... 시스템 ì •ë³´ 수집 중... ChoicePage Form í˜•ì‹ After: ì´í›„: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>ìˆ˜ë™ íŒŒí‹°ì…˜ 작업</strong><br/>ì§ì ‘ íŒŒí‹°ì…˜ì„ ë§Œë“¤ê±°ë‚˜ í¬ê¸°ë¥¼ ì¡°ì •í•  수 있습니다. Boot loader location: 부트 ë¡œë” ìœ„ì¹˜ : Select storage de&vice: 저장 장치 ì„ íƒ (&v) Current: 현재: Reuse %1 as home partition for %2. %2ì˜ í™ˆ 파티션으로 %1ì„ ìž¬ì‚¬ìš©í•©ë‹ˆë‹¤. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>축소할 íŒŒí‹°ì…˜ì„ ì„ íƒí•œ ë‹¤ìŒ í•˜ë‹¨ 막대를 ëŒì–´ í¬ê¸°ë¥¼ 조정합니다.</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1ì´ %2MiB로 축소ë˜ê³  %4ì— ëŒ€í•´ 새 %3MiB íŒŒí‹°ì…˜ì´ ìƒì„±ë©ë‹ˆë‹¤. <strong>Select a partition to install on</strong> <strong>설치할 íŒŒí‹°ì…˜ì„ ì„ íƒí•©ë‹ˆë‹¤.</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. ì´ ì‹œìŠ¤í…œì—서는 EFI 시스템 íŒŒí‹°ì…˜ì„ ì°¾ì„ ìˆ˜ 없습니다. ëŒì•„가서 ìˆ˜ë™ íŒŒí‹°ì…˜ ìž‘ì—…ì„ ì‚¬ìš©í•˜ì—¬ %1ì„ ì„¤ì •í•˜ì„¸ìš”. The EFI system partition at %1 will be used for starting %2. %1ì˜ EFI 시스템 íŒŒí‹°ì…˜ì€ %2ì˜ ì‹œìž‘ìœ¼ë¡œ ì‚¬ìš©ë  ê²ƒìž…ë‹ˆë‹¤. EFI system partition: EFI 시스템 파티션: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. ì´ ì €ìž¥ 장치ì—는 ìš´ì˜ ì²´ì œê°€ì—†ëŠ” 것 같습니다. 무엇ì„하고 싶으십니까?<br/>저장 장치를 변경하기 ì „ì— ì„ íƒ ì‚¬í•­ì„ ê²€í† í•˜ê³  확ì¸í•  수 있습니다. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>ë””ìŠ¤í¬ ì§€ìš°ê¸°</strong><br/>그러면 ì„ íƒí•œ 저장 ìž¥ì¹˜ì— í˜„ìž¬ 있는 모든 ë°ì´í„°ê°€ <font color="red">ì‚­ì œ</font>ë©ë‹ˆë‹¤. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. ì´ ì €ìž¥ ìž¥ì¹˜ì— %1ì´ ìžˆìŠµë‹ˆë‹¤. 무엇ì„하고 싶으십니까?<br/>저장 장치를 변경하기 ì „ì— ì„ íƒ ì‚¬í•­ì„ ê²€í† í•˜ê³  확ì¸í•  수 있습니다. No Swap 스왑 ì—†ìŒ Reuse Swap 스왑 재사용 Swap (no Hibernate) 스왑 (최대 절전모드 아님) Swap (with Hibernate) 스왑 (최대 절전모드 사용) Swap to file 파ì¼ë¡œ 스왑 <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>함께 설치</strong><br/>설치 관리ìžê°€ íŒŒí‹°ì…˜ì„ ì¶•ì†Œí•˜ì—¬ %1 ê³µê°„ì„ í™•ë³´í•©ë‹ˆë‹¤. <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>파티션 바꾸기</strong><br/>íŒŒí‹°ì…˜ì„ %1로 바꿉니다. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. ì´ ì €ìž¥ 장치ì—는 ì´ë¯¸ ìš´ì˜ ì²´ì œê°€ 있습니다. 무엇ì„하고 싶으십니까?<br/>저장 장치를 변경하기 ì „ì— ì„ íƒ ì‚¬í•­ì„ ê²€í† í•˜ê³  확ì¸í•  수 있습니다. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. ì´ ì €ìž¥ 장치ì—는 여러 ê°œì˜ ìš´ì˜ ì²´ì œê°€ 있습니다. 무엇ì„하고 싶으십니까?<br/>저장 장치를 변경하기 ì „ì— ì„ íƒ ì‚¬í•­ì„ ê²€í† í•˜ê³  확ì¸í•  수 있습니다. ClearMountsJob Clear mounts for partitioning operations on %1 íŒŒí‹°ì…”ë‹ ìž‘ì—…ì„ ìœ„í•´ %1ì˜ ë§ˆìš´íŠ¸ë¥¼ ëª¨ë‘ í•´ì œí•©ë‹ˆë‹¤ Clearing mounts for partitioning operations on %1. íŒŒí‹°ì…”ë‹ ìž‘ì—…ì„ ìœ„í•´ %1ì˜ ë§ˆìš´íŠ¸ë¥¼ ëª¨ë‘ í•´ì œí•˜ëŠ” 중입니다. Cleared all mounts for %1 %1ì˜ ëª¨ë“  마운트가 í•´ì œë˜ì—ˆìŠµë‹ˆë‹¤. ClearTempMountsJob Clear all temporary mounts. 모든 임시 ë§ˆìš´íŠ¸ë“¤ì„ í•´ì œí•©ë‹ˆë‹¤ Clearing all temporary mounts. 모든 임시 ë§ˆìš´íŠ¸ë“¤ì´ í•´ì œí•˜ëŠ” 중입니다. Cannot get list of temporary mounts. 임시 ë§ˆìš´íŠ¸ë“¤ì˜ ëª©ë¡ì„ 가져올 수 없습니다. Cleared all temporary mounts. 모든 임시 ë§ˆìš´íŠ¸ë“¤ì´ í•´ì œë˜ì—ˆìŠµë‹ˆë‹¤. CommandList Could not run command. ëª…ë ¹ì„ ì‹¤í–‰í•  수 없습니다. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. ì´ ëª…ë ¹ì€ í˜¸ìŠ¤íŠ¸ 환경ì—서 실행ë˜ë©° 루트 경로를 알아야하지만, rootMountPointê°€ ì •ì˜ë˜ì§€ 않았습니다. The command needs to know the user's name, but no username is defined. ì´ ëª…ë ¹ì€ ì‚¬ìš©ìž ì´ë¦„ì„ ì•Œì•„ì•¼ 하지만, usernameì´ ì •ì˜ë˜ì§€ 않았습니다. ContextualProcessJob Contextual Processes Job 컨í…스트 프로세스 작업 CreatePartitionDialog Create a Partition 파티션 ìƒì„± MiB MiB Partition &Type: 파티션 유형 (&T): &Primary 주 파티션 (&P) E&xtended 확장 파티션 (&E) Fi&le System: íŒŒì¼ ì‹œìŠ¤í…œ (&l): LVM LV name LVM 논리 볼륨 ì´ë¦„ Flags: 플래그: &Mount Point: 마운트 위치 (&M): Si&ze: í¬ê¸°(&z): En&crypt 암호화 (&c) Logical 논리 파티션 Primary 파티션 GPT GPT Mountpoint already in use. Please select another one. 마운트 위치가 ì´ë¯¸ 사용 중입니다. 다른 위치를 ì„ íƒí•´ì£¼ì„¸ìš”. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. %1 íŒŒì¼ ì‹œìŠ¤í…œìœ¼ë¡œ %4(%3)ì— ìƒˆ %2MiB íŒŒí‹°ì…˜ì„ ë§Œë“­ë‹ˆë‹¤. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. <strong>%1</strong> íŒŒì¼ ì‹œìŠ¤í…œìœ¼ë¡œ <strong>%4</strong> (%3)ì— ìƒˆ <strong>%2MiB</strong> íŒŒí‹°ì…˜ì„ ë§Œë“­ë‹ˆë‹¤. Creating new %1 partition on %2. %2ì— ìƒˆë¡œìš´ %1 파티션 í…Œì´ë¸”ì„ ë§Œë“œëŠ” 중입니다. The installer failed to create partition on disk '%1'. ë””ìŠ¤í¬ '%1'ì— íŒŒí‹°ì…˜ì„ ìƒì„±í•˜ì§€ 못했습니다. CreatePartitionTableDialog Create Partition Table 파티션 í…Œì´ë¸”ì„ ë§Œë“­ë‹ˆë‹¤ Creating a new partition table will delete all existing data on the disk. 새로운 파티션 í…Œì´ë¸”ì˜ ìƒì„±ì€ 디스í¬ì— 있는 모든 ë°ì´í„°ë¥¼ 지울 것입니다. What kind of partition table do you want to create? ë§Œë“¤ê³ ìž í•˜ëŠ” 파티션 í…Œì´ë¸”ì˜ ì¢…ë¥˜ëŠ” 무엇ì¸ê°€ìš”? Master Boot Record (MBR) 마스터 부트 레코드 (MBR) GUID Partition Table (GPT) GUID 파티션 í…Œì´ë¸” (GPT) CreatePartitionTableJob Create new %1 partition table on %2. %2ì— %1 파티션 í…Œì´ë¸”ì„ ë§Œë“­ë‹ˆë‹¤. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). <strong>%2</strong>ì— ìƒˆë¡œìš´ <strong>%1</strong> 파티션 í…Œì´ë¸”ì„ ë§Œë“­ë‹ˆë‹¤ (%3). Creating new %1 partition table on %2. %2ì— ìƒˆë¡œìš´ %1 파티션 í…Œì´ë¸”ì„ ë§Œë“œëŠ” 중입니다. The installer failed to create a partition table on %1. 설치 관리ìžê°€ %1ì— íŒŒí‹°ì…˜ í…Œì´ë¸”ì„ ë§Œë“¤ì§€ 못했습니다. CreateUserJob Create user %1 %1 사용ìžë¥¼ 만듭니다 Create user <strong>%1</strong>. <strong>%1</strong>사용ìžë¥¼ 만듭니다 . Creating user %1. %1 사용ìžë¥¼ 만드는 중입니다. Sudoers dir is not writable. Sudoers 디렉터리가 쓰기 금지ë˜ì–´ 있습니다. Cannot create sudoers file for writing. sudoers 파ì¼ì„ 만들 수가 없습니다. Cannot chmod sudoers file. sudoers 파ì¼ì˜ ê¶Œí•œì„ ë³€ê²½í•  수 없습니다. Cannot open groups file for reading. groups 파ì¼ì„ ì½ì„ 수가 없습니다. CreateVolumeGroupDialog Create Volume Group 볼륨 그룹 ìƒì„± CreateVolumeGroupJob Create new volume group named %1. %1로 ì´ë¦„ ì§€ì •ëœ ìƒˆ 볼륨 ê·¸ë£¹ì„ ìƒì„±í•©ë‹ˆë‹¤. Create new volume group named <strong>%1</strong>. <strong>%1</strong>로 ì´ë¦„ ì§€ì •ëœ ìƒˆ 볼륨 ê·¸ë£¹ì„ ìƒì„±ì¤‘입니다. Creating new volume group named %1. %1로 ì´ë¦„ ì§€ì •ëœ ìƒˆ 볼륨 ê·¸ë£¹ì„ ìƒì„±ì¤‘입니다. The installer failed to create a volume group named '%1'. 설치 관리ìžê°€ '%1'로 ì´ë¦„ ì§€ì •ëœ ë³¼ë¥¨ ê·¸ë£¹ì„ ìƒì„±í•˜ì§€ 못했습니다. DeactivateVolumeGroupJob Deactivate volume group named %1. %1로 ì´ë¦„ ì§€ì •ëœ ë³¼ë¥¨ ê·¸ë£¹ì„ ë¹„í™œì„±í™”í•©ë‹ˆë‹¤. Deactivate volume group named <strong>%1</strong>. <strong>%1</strong>로 ì´ë¦„ ì§€ì •ëœ ë³¼ë¥¨ ê·¸ë£¹ì„ ë¹„í™œì„±í™”í•©ë‹ˆë‹¤. The installer failed to deactivate a volume group named %1. %1로 ì´ë¦„ ì§€ì •ëœ ë³¼ë¥¨ ê·¸ë£¹ì„ ë¹„í™œì„±í™”í•˜ì§€ 못했습니다. DeletePartitionJob Delete partition %1. %1 íŒŒí‹°ì…˜ì„ ì§€ì›ë‹ˆë‹¤. Delete partition <strong>%1</strong>. <strong>%1</strong> íŒŒí‹°ì…˜ì„ ì§€ì›ë‹ˆë‹¤. Deleting partition %1. %1 íŒŒí‹°ì…˜ì„ ì§€ìš°ëŠ” 중입니다. The installer failed to delete partition %1. 설치 관리ìžê°€ %1 íŒŒí‹°ì…˜ì„ ì§€ìš°ì§€ 못했습니다. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. ì„ íƒí•œ 저장 ìž¥ì¹˜ì˜ <strong>파티션 í…Œì´ë¸”</strong> 유형입니다.<br><br>파티션 í…Œì´ë¸” ìœ í˜•ì„ ë³€ê²½í•˜ëŠ” 유ì¼í•œ ë°©ë²•ì€ íŒŒí‹°ì…˜ í…Œì´ë¸”ì„ ì²˜ìŒë¶€í„° 지우고 재ìƒì„±í•˜ëŠ” 것입니다. ì´ë ‡ê²Œ 하면 스토리지 디바ì´ìŠ¤ì˜ ëª¨ë“  ë°ì´í„°ê°€ ì‚­ì œë©ë‹ˆë‹¤.<br>달리 ì„ íƒí•˜ì§€ 않으면 ì´ ì„¤ì¹˜ 관리ìžëŠ” 현재 파티션 í…Œì´ë¸”ì„ ìœ ì§€í•©ë‹ˆë‹¤.<br>확실하지 ì•Šì€ ê²½ìš° 최신 시스템ì—서는 GPTê°€ 선호ë©ë‹ˆë‹¤. This device has a <strong>%1</strong> partition table. ì´ ìž¥ì¹˜ëŠ” <strong>%1</strong> 파티션 í…Œì´ë¸”ì„ ê°–ê³  있습니다. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. ì´ê²ƒì€ <strong>루프</strong> 장치입니다.<br><br>파티션 í…Œì´ë¸”ì´ ì—†ëŠ” 사ì´ë¹„ 장치ì´ë¯€ë¡œ 파ì¼ì„ ë¸”ë¡ ìž¥ì¹˜ë¡œ 액세스할 수 있습니다. ì´ëŸ¬í•œ ì¢…ë¥˜ì˜ ì„¤ì •ì€ ì¼ë°˜ì ìœ¼ë¡œ ë‹¨ì¼ íŒŒì¼ ì‹œìŠ¤í…œë§Œ í¬í•¨í•©ë‹ˆë‹¤. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. ì´ ì„¤ì¹˜ 관리ìžëŠ” ì„ íƒí•œ 저장 장치ì—서 <strong>파티션 í…Œì´ë¸”ì„ ê²€ìƒ‰í•  수 없습니다.</strong><br><br>ìž¥ì¹˜ì— íŒŒí‹°ì…˜ í…Œì´ë¸”ì´ ì—†ê±°ë‚˜ 파티션 í…Œì´ë¸”ì´ ì†ìƒë˜ì—ˆê±°ë‚˜ 알 수 없는 유형입니다.<br>ì´ ì„¤ì¹˜ 관리ìžëŠ” ìžë™ìœ¼ë¡œ ë˜ëŠ” ìˆ˜ë™ íŒŒí‹°ì…˜ 페ì´ì§€ë¥¼ 통해 새 파티션 í…Œì´ë¸”ì„ ìƒì„±í•  수 있습니다. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br><strong>EFI</strong> 부팅 환경ì—서 시작하는 최신 ì‹œìŠ¤í…œì— ê¶Œìž¥ë˜ëŠ” 파티션 í…Œì´ë¸” 유형입니다. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. <br><br>ì´ íŒŒí‹°ì…˜ í…Œì´ë¸” ìœ í˜•ì€ <strong>BIOS</strong> 부팅 환경ì—서 시작하는 ì´ì „ 시스템ì—ë§Œ 권장ë©ë‹ˆë‹¤. GPT는 ëŒ€ë¶€ë¶„ì˜ ë‹¤ë¥¸ ê²½ìš°ì— ê¶Œìž¥ë©ë‹ˆë‹¤.<br><br><strong>경고 : </strong>MBR 파티션 í…Œì´ë¸”ì€ êµ¬ì‹ MS-DOS 표준입니다.<br><em>기본</em> íŒŒí‹°ì…˜ì€ 4개만 ìƒì„±í•  수 있으며, ì´ 4ê°œ 중 1개는 <em>확장</em> íŒŒí‹°ì…˜ì¼ ìˆ˜ 있으며, ì´ íŒŒí‹°ì…˜ì—는 여러 ê°œì˜ <em>논리</em> íŒŒí‹°ì…˜ì´ í¬í•¨ë  수 있습니다. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1 - (%2) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Dracutì— ëŒ€í•œ LUKS ì„¤ì •ì„ %1ì— ì“°ê¸° Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Dracutì— ëŒ€í•œ LUKS 설정 쓰기 건너뛰기 : "/" íŒŒí‹°ì…˜ì´ ì•”í˜¸í™”ë˜ì§€ ì•ŠìŒ Failed to open %1 %1ì„ ì—´ì§€ 못했습니다 DummyCppJob Dummy C++ Job C++ ë”미 작업 EditExistingPartitionDialog Edit Existing Partition 기존 íŒŒí‹°ì…˜ì„ ìˆ˜ì •í•©ë‹ˆë‹¤ Content: ë‚´ìš© : &Keep 유지 (&K) Format í¬ë§· Warning: Formatting the partition will erase all existing data. 경고: íŒŒí‹°ì…˜ì„ í¬ë§·í•˜ëŠ” ê²ƒì€ ëª¨ë“  ë°ì´í„°ë¥¼ 지울 것입니다. &Mount Point: 마운트 위치 (&M): Si&ze: í¬ê¸° (&z): MiB MiB Fi&le System: íŒŒì¼ ì‹œìŠ¤í…œ (&l): Flags: 플래그: Mountpoint already in use. Please select another one. 마운트 위치가 ì´ë¯¸ 사용 중입니다. 다른 위치를 ì„ íƒí•´ì£¼ì„¸ìš”. EncryptWidget Form í˜•ì‹ En&crypt system 암호화 시스템 (&c) Passphrase 암호 Confirm passphrase 암호 í™•ì¸ Please enter the same passphrase in both boxes. 암호와 암호 í™•ì¸ ìƒìžì— ë™ì¼í•œ ê°’ì„ ìž…ë ¥í•´ì£¼ì„¸ìš”. FillGlobalStorageJob Set partition information 파티션 ì •ë³´ 설정 Install %1 on <strong>new</strong> %2 system partition. <strong>새</strong> %2 시스템 íŒŒí‹°ì…˜ì— %1를설치합니다. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. 마운트 위치 <strong>%1</strong>ì„ ì‚¬ìš©í•˜ì—¬ <strong>새</strong> 파티션 %2를 설정합니다. Install %2 on %3 system partition <strong>%1</strong>. 시스템 파티션 <strong>%1</strong>ì˜ %3ì— %2를 설치합니다. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. <strong>%2</strong> 마운트 위치를 사용하여 파티션 <strong>%1</strong>ì˜ %3 ì„ ì„¤ì •í•©ë‹ˆë‹¤. Install boot loader on <strong>%1</strong>. <strong>%1</strong>ì— ë¶€íŠ¸ 로ë”를 설치합니다. Setting up mount points. 마운트 위치를 설정 중입니다. FinishedPage Form í˜•ì‹ <Restart checkbox tooltip> <Restart checkbox tooltip> &Restart now 지금 재시작 (&R) <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>ëª¨ë‘ ì™„ë£Œ.</h1><br/>%1ì´ ì»´í“¨í„°ì— ì„¤ì •ë˜ì—ˆìŠµë‹ˆë‹¤.<br/>ì´ì œ 새 ì‹œìŠ¤í…œì„ ì‚¬ìš©í•  수 있습니다. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <html><head/><body><p>ì´ í™•ì¸ëž€ì„ ì„ íƒí•˜ë©´ <span style="font-style:italic;">완료</span>를 í´ë¦­í•˜ê±°ë‚˜ 설치 í”„ë¡œê·¸ëž¨ì„ ë‹«ìœ¼ë©´ ì‹œìŠ¤í…œì´ ì¦‰ì‹œ 다시 시작ë©ë‹ˆë‹¤.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>ëª¨ë‘ ì™„ë£Œë˜ì—ˆìŠµë‹ˆë‹¤.</h1><br/>%1ì´ ì»´í“¨í„°ì— ì„¤ì¹˜ë˜ì—ˆìŠµë‹ˆë‹¤.<br/>ì´ì œ 새 시스템으로 다시 시작하거나 %2 ë¼ì´ë¸Œ í™˜ê²½ì„ ê³„ì† ì‚¬ìš©í•  수 있습니다. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <html><head/><body><p>ì´ í™•ì¸ëž€ì„ ì„ íƒí•˜ë©´ <span style="font-style:italic;">완료</span>를 í´ë¦­í•˜ê±°ë‚˜ 설치 관리ìžë¥¼ 닫으면 ì‹œìŠ¤í…œì´ ì¦‰ì‹œ 다시 시작ë©ë‹ˆë‹¤.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>설치 실패</h1><br/>%1ì´ ì»´í“¨í„°ì— ì„¤ì •ë˜ì§€ 않았습니다.<br/>오류 메시지 : %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>ì„¤ì¹˜ì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤.</h1><br/>%1ì´ ì»´í“¨í„°ì— ì„¤ì¹˜ë˜ì§€ 않았습니다.<br/>오류 메시지는 %2입니다. FinishedViewStep Finish 완료 Setup Complete 설치 완료 Installation Complete 설치 완료 The setup of %1 is complete. %1 설치가 완료ë˜ì—ˆìŠµë‹ˆë‹¤. The installation of %1 is complete. %1ì˜ ì„¤ì¹˜ê°€ 완료ë˜ì—ˆìŠµë‹ˆë‹¤. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. %4ì˜ %1 í¬ë§· 파티션(íŒŒì¼ ì‹œìŠ¤í…œ: %2, í¬ê¸°: %3 MiB) Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. <strong>%3MiB</strong> 파티션 <strong>%1</strong>ì„ íŒŒì¼ ì‹œìŠ¤í…œ <strong>%2</strong>로 í¬ë§·í•©ë‹ˆë‹¤. Formatting partition %1 with file system %2. %1 íŒŒí‹°ì…˜ì„ %2 íŒŒì¼ ì‹œìŠ¤í…œìœ¼ë¡œ í¬ë§·í•˜ëŠ” 중입니다. The installer failed to format partition %1 on disk '%2'. 설치 관리ìžê°€ '%2' 디스í¬ì— 있는 %1 íŒŒí‹°ì…˜ì„ í¬ë§·í•˜ì§€ 못했습니다. GeneralRequirements has at least %1 GiB available drive space %1 GiB ì´ìƒì˜ 사용 가능한 드ë¼ì´ë¸Œ ê³µê°„ì´ ìžˆìŒ There is not enough drive space. At least %1 GiB is required. 드ë¼ì´ë¸Œ ê³µê°„ì´ ë¶€ì¡±í•©ë‹ˆë‹¤. %1 GiB ì´ìƒì´ 필요합니다. has at least %1 GiB working memory %1 GiB ì´ìƒì˜ ìž‘ë™ ë©”ëª¨ë¦¬ê°€ 있습니다. The system does not have enough working memory. At least %1 GiB is required. ì‹œìŠ¤í…œì— ì¶©ë¶„í•œ ìž‘ë™ ë©”ëª¨ë¦¬ê°€ 없습니다. %1 GiB ì´ìƒì´ 필요합니다. is plugged in to a power source ì „ì› ê³µê¸‰ì´ ì—°ê²°ë˜ì–´ 있습니다 The system is not plugged in to a power source. ì´ ì‹œìŠ¤í…œì€ ì „ì› ê³µê¸‰ì´ ì—°ê²°ë˜ì–´ 있지 않습니다 is connected to the Internet ì¸í„°ë„·ì— ì—°ê²°ë˜ì–´ 있습니다 The system is not connected to the Internet. ì´ ì‹œìŠ¤í…œì€ ì¸í„°ë„·ì— ì—°ê²°ë˜ì–´ 있지 않습니다. is running the installer as an administrator (root) 설치 í”„ë¡œê·¸ëž¨ì„ ê´€ë¦¬ìž(루트)로 실행 중입니다 The setup program is not running with administrator rights. 설치 í”„ë¡œê·¸ëž¨ì´ ê´€ë¦¬ìž ê¶Œí•œìœ¼ë¡œ 실행ë˜ê³  있지 않습니다. The installer is not running with administrator rights. 설치 관리ìžê°€ ê´€ë¦¬ìž ê¶Œí•œìœ¼ë¡œ ë™ìž‘하고 있지 않습니다. has a screen large enough to show the whole installer ì „ì²´ 설치 í”„ë¡œê·¸ëž¨ì„ í‘œì‹œí•  수 ìžˆì„ ë§Œí¼ í° í™”ë©´ì´ ìžˆìŠµë‹ˆë‹¤ The screen is too small to display the setup program. í™”ë©´ì´ ë„ˆë¬´ 작아서 설정 í”„ë¡œê·¸ëž¨ì„ í‘œì‹œí•  수 없습니다. The screen is too small to display the installer. 설치 관리ìžë¥¼ í‘œì‹œí•˜ê¸°ì— í™”ë©´ì´ ë„ˆë¬´ 작습니다. HostInfoJob Collecting information about your machine. ì»´í“¨í„°ì— ëŒ€í•œ 정보를 수집하는 중입니다. IDJob OEM Batch Identifier OEM 배치 ì‹ë³„ìž Could not create directories <code>%1</code>. <code>%1</code> 디렉토리를 ìƒì„±í•  수 없습니다. Could not open file <code>%1</code>. <code>%1</code> 파ì¼ì„ ì—´ 수 없습니다. Could not write to file <code>%1</code>. <code>%1</code> 파ì¼ì— 쓸 수 없습니다. InitcpioJob Creating initramfs with mkinitcpio. mkinitcpio를 사용하여 initramfs 만드는 중. InitramfsJob Creating initramfs. initramfs를 만드는 중. InteractiveTerminalPage Konsole not installed Konsoleì´ ì„¤ì¹˜ë˜ì§€ ì•Šì•˜ìŒ Please install KDE Konsole and try again! KDE Konsoleì„ ì„¤ì¹˜í•œ í›„ì— ë‹¤ì‹œ 시ë„해주세요! Executing script: &nbsp;<code>%1</code> 스í¬ë¦½íЏ 실행: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script 스í¬ë¦½íЏ KeyboardPage Set keyboard model to %1.<br/> 키보드 모ë¸ì„ %1로 설정합니다.<br/> Set keyboard layout to %1/%2. 키보드 ë ˆì´ì•„ì›ƒì„ %1/%2로 설정합니다. KeyboardViewStep Keyboard 키보드 LCLocaleDialog System locale setting 시스템 ë¡œì¼€ì¼ ì„¤ì • The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. 시스템 ë¡œì¼€ì¼ ì„¤ì •ì€ ì¼ë¶€ 명령줄 ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìФ ìš”ì†Œì˜ ì–¸ì–´ ë° ë¬¸ìž ì§‘í•©ì— ì˜í–¥ì„ ì¤ë‹ˆë‹¤.<br/>현재 ì„¤ì •ì€ <strong>%1</strong>입니다. &Cancel 취소 (&C) &OK í™•ì¸ (&O) LicensePage Form í˜•ì‹ <h1>License Agreement</h1> <h1>ë¼ì´ì„¼ìФ 계약</h1> I accept the terms and conditions above. ìƒê¸° 계약 ì¡°ê±´ì„ ëª¨ë‘ ë™ì˜í•©ë‹ˆë‹¤. Please review the End User License Agreements (EULAs). 최종 ì‚¬ìš©ìž ì‚¬ìš©ê¶Œ 계약(EULA)ì„ ê²€í† í•˜ì‹­ì‹œì˜¤. This setup procedure will install proprietary software that is subject to licensing terms. ì´ ì„¤ì • 절차ì—서는 ë¼ì´ì„¼ìФ ì¡°ê±´ì— í•´ë‹¹í•˜ëŠ” ë…ì  ì†Œí”„íŠ¸ì›¨ì–´ë¥¼ 설치합니다. If you do not agree with the terms, the setup procedure cannot continue. ì•½ê´€ì— ë™ì˜í•˜ì§€ 않으면 설치 절차를 계ì†í•  수 없습니다. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. ì´ ì„¤ì¹˜ 절차는 추가 ê¸°ëŠ¥ì„ ì œê³µí•˜ê³  ì‚¬ìš©ìž í™˜ê²½ì„ í–¥ìƒì‹œí‚¤ê¸° 위해 ë¼ì´ì„ ìФ ì¡°ê±´ì— ë”°ë¼ ë…ì  ì†Œí”„íŠ¸ì›¨ì–´ë¥¼ 설치할 수 있습니다. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. ì¡°ê±´ì— ë™ì˜í•˜ì§€ 않으면 ë…ì  ì†Œí”„íŠ¸ì›¨ì–´ê°€ 설치ë˜ì§€ 않으며 대신 오픈 소스 대체 소프트웨어가 사용ë©ë‹ˆë‹¤. LicenseViewStep License ë¼ì´ì„¼ìФ LicenseWidget URL: %1 URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 드ë¼ì´ë²„</strong><br/>by %2 <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 그래픽 드ë¼ì´ë²„</strong><br/><font color="Grey">by %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 브ë¼ìš°ì € 플러그ì¸</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 ì½”ë±</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 패키지</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> File: %1 파ì¼: %1 Show the license text ë¼ì´ì„¼ìФ í…스트 표시 Open license agreement in browser. 브ë¼ìš°ì €ì—서 ë¼ì´ì„¼ìФ 계약 열기 Hide license text ë¼ì´ì„¼ìФ í…스트 숨기기 LocalePage The system language will be set to %1. 시스템 언어가 %1로 설정ë©ë‹ˆë‹¤. The numbers and dates locale will be set to %1. 숫ìžì™€ ë‚ ì§œ 로케ì¼ì´ %1로 설정ë©ë‹ˆë‹¤. Region: 지역 : Zone: 표준시간대 : &Change... 변경 (&C)... Set timezone to %1/%2.<br/> 표준시간대를 %1/%2로 설정합니다.<br/> LocaleViewStep Location 위치 LuksBootKeyFileJob Configuring LUKS key file. LUKS 키 íŒŒì¼ êµ¬ì„± 중. No partitions are defined. íŒŒí‹°ì…˜ì´ ì •ì˜ë˜ì§€ 않았습니다. Encrypted rootfs setup error ì•”í˜¸í™”ëœ rootfs 설정 오류 Root partition %1 is LUKS but no passphrase has been set. 루트 파티션 %1ì´(ê°€) LUKSì´ì§€ë§Œ 암호가 설정ë˜ì§€ 않았습니다. Could not create LUKS key file for root partition %1. 루트 파티션 %1ì— ëŒ€í•œ LUKS 키 파ì¼ì„ ìƒì„±í•  수 없습니다. Could not configure LUKS key file on partition %1. 파티션 %1ì— LUKS 키 파ì¼ì„ 설정할 수 없습니다. MachineIdJob Generate machine-id. machine-id를 ìƒì„±í•©ë‹ˆë‹¤. Configuration Error 구성 오류 No root mount point is set for MachineId. MachineIdì— ëŒ€í•´ ì„¤ì •ëœ ë£¨íŠ¸ 마운트 ì§€ì ì´ 없습니다. NetInstallPage Name ì´ë¦„ Description 설명 Network Installation. (Disabled: Unable to fetch package lists, check your network connection) ë„¤íŠ¸ì›Œí¬ ì„¤ì¹˜. (불가: 패키지 목ë¡ì„ 가져올 수 없습니다. ë„¤íŠ¸ì›Œí¬ ì—°ê²°ì„ í™•ì¸í•´ì£¼ì„¸ìš”) Network Installation. (Disabled: Received invalid groups data) ë„¤íŠ¸ì›Œí¬ ì„¤ì¹˜. (불가: 유효하지 ì•Šì€ ê·¸ë£¹ ë°ì´í„°ë¥¼ 수신했습니다) Network Installation. (Disabled: Incorrect configuration) ë„¤íŠ¸ì›Œí¬ ì„¤ì¹˜. (사용안함: ìž˜ëª»ëœ í™˜ê²½ì„¤ì •) NetInstallViewStep Package selection 패키지 ì„ íƒ Office software 오피스 소프트웨어 Office package 오피스 패키지 Browser software 브ë¼ìš°ì € 소프트웨어 Browser package 브ë¼ìš°ì € 패키지 Web browser 웹 브ë¼ìš°ì € Kernel ì»¤ë„ Services 서비스 Login ë¡œê·¸ì¸ Desktop ë°ìФí¬íƒ‘ Applications 애플리케ì´ì…˜ NotesQmlViewStep Notes 노트 OEMPage Ba&tch: 배치(&T): <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>ì—¬ê¸°ì— ë°°ì¹˜ ì‹ë³„ìžë¥¼ 입력합니다. ëŒ€ìƒ ì‹œìŠ¤í…œì— ì €ìž¥ë©ë‹ˆë‹¤.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>OEM 구성</h1> <p>Calamares는 ëŒ€ìƒ ì‹œìŠ¤í…œì„ êµ¬ì„±í•˜ëŠ” ë™ì•ˆ OEM ì„¤ì •ì„ ì‚¬ìš©í•©ë‹ˆë‹¤.</p></body></html> OEMViewStep OEM Configuration OEM 구성 Set the OEM Batch Identifier to <code>%1</code>. OEM 배치 ì‹ë³„ìžë¥¼ <code>%1</code>로 설정합니다. PWQ Password is too short 암호가 너무 짧습니다 Password is too long 암호가 너무 ê¹ë‹ˆë‹¤ Password is too weak 암호가 너무 취약합니다 Memory allocation error when setting '%1' '%1'ì„ ì„¤ì •í•˜ëŠ” 중 메모리 할당 오류 Memory allocation error 메모리 할당 오류 The password is the same as the old one 암호가 ì´ì „ê³¼ 같습니다 The password is a palindrome 암호가 앞뒤로 ë™ì¼í•´ ë³´ì´ëŠ” 단어입니다 The password differs with case changes only 암호가 대소문ìžë§Œ 다릅니다 The password is too similar to the old one 암호가 ì´ì „ 암호와 너무 유사합니다 The password contains the user name in some form 암호가 ì‚¬ìš©ìž ì´ë¦„ì˜ ì¼ë¶€ë¥¼ í¬í•¨í•˜ê³  있습니다. The password contains words from the real name of the user in some form 암호가 ì‚¬ìš©ìž ì‹¤ëª…ì˜ ì¼ë¶€ë¥¼ í¬í•¨í•˜ê³  있습니다 The password contains forbidden words in some form 암호가 ê¸ˆì§€ëœ ë‹¨ì–´ë¥¼ í¬í•¨í•˜ê³  있습니다 The password contains less than %1 digits 암호가 %1ê°œ ë¯¸ë§Œì˜ ìˆ«ìžë¥¼ í¬í•¨í•˜ê³  있습니다 The password contains too few digits 암호가 너무 ì ì€ ê°œìˆ˜ì˜ ìˆ«ìžë“¤ì„ í¬í•¨í•˜ê³  있습니다 The password contains less than %1 uppercase letters 암호가 %1ê°œ ë¯¸ë§Œì˜ ëŒ€ë¬¸ìžë¥¼ í¬í•¨í•˜ê³  있습니다 The password contains too few uppercase letters 암호가 너무 ì ì€ ê°œìˆ˜ì˜ ëŒ€ë¬¸ìžë¥¼ í¬í•¨í•˜ê³  있습니다 The password contains less than %1 lowercase letters 암호가 %1ê°œ ë¯¸ë§Œì˜ ì†Œë¬¸ìžë¥¼ í¬í•¨í•˜ê³  있습니다 The password contains too few lowercase letters 암호가 너무 ì ì€ ê°œìˆ˜ì˜ ì†Œë¬¸ìžë¥¼ í¬í•¨í•˜ê³  있습니다 The password contains less than %1 non-alphanumeric characters 암호가 %1ê°œ ë¯¸ë§Œì˜ ì˜ìˆ«ìžê°€ 아닌 문ìžë¥¼ í¬í•¨í•˜ê³  있습니다 The password contains too few non-alphanumeric characters 암호가 너무 ì ì€ ê°œìˆ˜ì˜ ì˜ìˆ«ìžê°€ 아닌 문ìžë¥¼ í¬í•¨í•˜ê³  있습니다 The password is shorter than %1 characters 암호가 %1 문ìžë³´ë‹¤ 짧습니다 The password is too short 암호가 너무 짧습니다 The password is just rotated old one 암호가 ì´ì „ 암호로 바뀌었습니다 The password contains less than %1 character classes ì•”í˜¸ì— í¬í•¨ëœ ë¬¸ìž í´ëž˜ìŠ¤ê°€ %1ê°œ 미만입니다 The password does not contain enough character classes ì•”í˜¸ì— ë¬¸ìž í´ëž˜ìŠ¤ê°€ 충분하지 않습니다 The password contains more than %1 same characters consecutively ì•”í˜¸ì— ë™ì¼ 문ìžê°€ %1ê°œ ì´ìƒ ì—°ì†í•´ 있습니다 The password contains too many same characters consecutively ì•”í˜¸ì— ë„ˆë¬´ ë§Žì€ ë™ì¼ 문ìžê°€ ì—°ì†í•´ 있습니다 The password contains more than %1 characters of the same class consecutively ì•”í˜¸ì— ë™ì¼ ë¬¸ìž í´ëž˜ìŠ¤ê°€ %1ê°œ ì´ìƒ ì—°ì†í•´ 있습니다. The password contains too many characters of the same class consecutively ì•”í˜¸ì— ë™ì¼ ë¬¸ìž í´ëž˜ìŠ¤ê°€ 너무 ë§Žì´ ì—°ì†í•´ 있습니다. The password contains monotonic sequence longer than %1 characters ì•”í˜¸ì— %1ê°œ ì´ìƒì˜ 단순 문ìžì—´ì´ í¬í•¨ë˜ì–´ 있습니다 The password contains too long of a monotonic character sequence ì•”í˜¸ì— ë„ˆë¬´ 길게 단순 문ìžì—´ì´ í¬í•¨ë˜ì–´ 있습니다 No password supplied 암호가 제공 ë˜ì§€ ì•ŠìŒ Cannot obtain random numbers from the RNG device RNG 장치ì—서 ìž„ì˜ì˜ 번호를 가져올 수 없습니다. Password generation failed - required entropy too low for settings 암호 ìƒì„± 실패 - ì„¤ì •ì— í•„ìš”í•œ 엔트로피가 너무 ìž‘ìŒ The password fails the dictionary check - %1 암호가 사전 ê²€ì‚¬ì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤ - %1 The password fails the dictionary check 암호가 사전 ê²€ì‚¬ì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤. Unknown setting - %1 설정ë˜ì§€ ì•ŠìŒ - %1 Unknown setting 설정ë˜ì§€ ì•ŠìŒ Bad integer value of setting - %1 ì„¤ì •ì˜ ìž˜ëª»ëœ ì •ìˆ˜ ê°’ - %1 Bad integer value ìž˜ëª»ëœ ì •ìˆ˜ ê°’ Setting %1 is not of integer type 설정값 %1ì€ ì •ìˆ˜ ìœ í˜•ì´ ì•„ë‹™ë‹ˆë‹¤. Setting is not of integer type ì„¤ì •ê°’ì´ ì •ìˆ˜ 형ì‹ì´ 아닙니다 Setting %1 is not of string type 설정값 %1ì€ ë¬¸ìžì—´ ìœ í˜•ì´ ì•„ë‹™ë‹ˆë‹¤. Setting is not of string type ì„¤ì •ê°’ì´ ë¬¸ìžì—´ ìœ í˜•ì´ ì•„ë‹™ë‹ˆë‹¤. Opening the configuration file failed 구성 파ì¼ì„ ì—´ì§€ 못했습니다. The configuration file is malformed 구성 파ì¼ì˜ 형ì‹ì´ 잘못ë˜ì—ˆìŠµë‹ˆë‹¤. Fatal failure 치명ì ì¸ 실패 Unknown error 알 수 없는 오류 Password is empty 비밀번호가 비어 있습니다 PackageChooserPage Form í˜•ì‹ Product Name 제품 ì´ë¦„ TextLabel TextLabel Long Product Description 긴 제품 설명 Package Selection 패키지 ì„ íƒ Please pick a product from the list. The selected product will be installed. 목ë¡ì—서 ì œí’ˆì„ ì„ íƒí•˜ì‹­ì‹œì˜¤. ì„ íƒí•œ ì œí’ˆì´ ì„¤ì¹˜ë©ë‹ˆë‹¤. PackageChooserViewStep Packages 패키지 Page_Keyboard Form í˜•ì‹ Keyboard Model: 키보드 모ë¸: Type here to test your keyboard 키보드를 테스트하기 위해 ì—¬ê¸°ì— ìž…ë ¥í•˜ì„¸ìš” Page_UserSetup Form í˜•ì‹ What is your name? ì´ë¦„ì´ ë¬´ì—‡ì¸ê°€ìš”? What name do you want to use to log in? 로그ì¸í•  때 사용할 ì´ë¦„ì€ ë¬´ì—‡ì¸ê°€ìš”? Choose a password to keep your account safe. ì‚¬ìš©ìž ê³„ì •ì˜ ë³´ì•ˆì„ ìœ ì§€í•˜ê¸° 위한 암호를 ì„ íƒí•˜ì„¸ìš”. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>확ì¸ì„ 위해 암호를 ë‘번 입력해 주세요. 올바른 암호ì—는 문ìž, ìˆ«ìž ë° êµ¬ë‘ì ì´ 혼합ë˜ì–´ 있으며 최소 8ìž ì´ìƒì´ì–´ì•¼ 하며 정기ì ìœ¼ë¡œ 변경해야 합니다.</small> What is the name of this computer? ì´ ì»´í“¨í„°ì˜ ì´ë¦„ì€ ë¬´ì—‡ì¸ê°€ìš”? Your Full Name ì „ì²´ ì´ë¦„ login ë¡œê·¸ì¸ <small>This name will be used if you make the computer visible to others on a network.</small> <small>ì´ ì´ë¦„ì€ ì»´í“¨í„°ê°€ 네트워í¬ì˜ 다른 사용ìžì—게 표시ë˜ë„ë¡ í•  때 사용ë©ë‹ˆë‹¤.</small> Computer Name 컴퓨터 ì´ë¦„ Password 비밀번호 Repeat Password 비밀번호 반복 When this box is checked, password-strength checking is done and you will not be able to use a weak password. ì´ í™•ì¸ëž€ì„ ì„ íƒí•˜ë©´ 비밀번호 ê°•ë„ ê²€ì‚¬ê°€ 수행ë˜ë©° 불충분한 비밀번호를 사용할 수 없습니다. Require strong passwords. 강력한 비밀번호가 필요합니다. Log in automatically without asking for the password. 암호를 묻지 않고 ìžë™ìœ¼ë¡œ 로그ì¸í•©ë‹ˆë‹¤. Use the same password for the administrator account. ê´€ë¦¬ìž ê³„ì •ì— ëŒ€í•´ ê°™ì€ ì•”í˜¸ë¥¼ 사용합니다. Choose a password for the administrator account. ê´€ë¦¬ìž ê³„ì •ì„ ìœ„í•œ 암호를 ì„ íƒí•˜ì„¸ìš”. <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>ìž…ë ¥ 오류를 검사하기 위해 암호를 ë˜‘ê°™ì´ ë‘번 입력하세요.</small> PartitionLabelsView Root 루트 Home 홈 Boot 부트 EFI system EFI 시스템 Swap 스왑 New partition for %1 %1ì— ëŒ€í•œ 새로운 파티션 New partition 새로운 파티션 %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space 여유 공간 New partition 새로운 파티션 Name ì´ë¦„ File System íŒŒì¼ ì‹œìŠ¤í…œ Mount Point 마운트 위치 Size í¬ê¸° PartitionPage Form í˜•ì‹ Storage de&vice: 저장 장치 (&v): &Revert All Changes 모든 변경 ë˜ëŒë¦¬ê¸° (&R) New Partition &Table 새 파티션 í…Œì´ë¸” (&T) Cre&ate ìƒì„± (&a) &Edit 수정 (&E) &Delete ì‚­ì œ (&D) New Volume Group 새 볼륨 그룹 Resize Volume Group 볼륨 그룹 í¬ê¸°ë³€ê²½ Deactivate Volume Group 볼륨 그룹 비활성화 Remove Volume Group 볼륨 그룹 제거 I&nstall boot loader on: ë¶€íŠ¸ë¡œë” ì„¤ì¹˜ 위치 (&l) : Are you sure you want to create a new partition table on %1? %1ì— ìƒˆ 파티션 í…Œì´ë¸”ì„ ìƒì„±í•˜ì‹œê² ìŠµë‹ˆê¹Œ? Can not create new partition 새로운 íŒŒí‹°ì…˜ì„ ë§Œë“¤ 수 없습니다 The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. %1ì˜ íŒŒí‹°ì…˜ í…Œì´ë¸”ì—는 ì´ë¯¸ %2 기본 íŒŒí‹°ì…˜ì´ ìžˆìœ¼ë¯€ë¡œ ë” ì´ìƒ 추가할 수 없습니다. 대신 기본 파티션 하나를 제거하고 확장 íŒŒí‹°ì…˜ì„ ì¶”ê°€í•˜ì„¸ìš”. PartitionViewStep Gathering system information... 시스템 ì •ë³´ 수집 중... Partitions 파티션 Install %1 <strong>alongside</strong> another operating system. %1ì„ ë‹¤ë¥¸ ìš´ì˜ ì²´ì œì™€ <strong>함께</strong> 설치합니다. <strong>Erase</strong> disk and install %1. 디스í¬ë¥¼ <strong>지우고</strong> %1ì„ ì„¤ì¹˜í•©ë‹ˆë‹¤. <strong>Replace</strong> a partition with %1. íŒŒí‹°ì…˜ì„ %1로 <strong>바꿉니다</strong>. <strong>Manual</strong> partitioning. <strong>수ë™</strong> 파티션 작업 Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). ë””ìŠ¤í¬ <strong>%2</strong> (%3)ì— ë‹¤ë¥¸ ìš´ì˜ ì²´ì œì™€ <strong>함께</strong> %1ì„ ì„¤ì¹˜í•©ë‹ˆë‹¤. <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. ë””ìŠ¤í¬ <strong>%2</strong> (%3)를 <strong>지우고</strong> %1ì„ ì„¤ì¹˜í•©ë‹ˆë‹¤. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. ë””ìŠ¤í¬ <strong>%2</strong> (%3)ì˜ íŒŒí‹°ì…˜ì„ %1로 <strong>바꿉니다</strong>. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). ë””ìŠ¤í¬ <strong>%1</strong> (%2) ì˜ <strong>수ë™</strong> 파티션 작업입니다. Disk <strong>%1</strong> (%2) ë””ìŠ¤í¬ <strong>%1</strong> (%2) Current: 현재: After: ì´í›„: No EFI system partition configured EFI 시스템 íŒŒí‹°ì…˜ì´ ì„¤ì •ë˜ì§€ 않았습니다 An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. %1를 시작하려면 EFI 시스템 íŒŒí‹°ì…˜ì´ í•„ìš”í•©ë‹ˆë‹¤.<br/><br/>EFI 시스템 íŒŒí‹°ì…˜ì„ êµ¬ì„±í•˜ë ¤ë©´ ëŒì•„가서 <strong>esp</strong> 플래그를 사용하ë„ë¡ ì„¤ì •í•œ FAT32 íŒŒì¼ ì‹œìŠ¤í…œì„ ì„ íƒí•˜ê±°ë‚˜ ìƒì„±í•˜ì—¬ <strong>%2</strong> 위치를 마운트합니다.<br/><br/>EFI 시스템 íŒŒí‹°ì…˜ì„ ì„¤ì •í•˜ì§€ 않고 계ì†í•  수 있지만 ì‹œìŠ¤í…œì´ ì‹œìž‘ë˜ì§€ ì•Šì„ ìˆ˜ 있습니다. EFI system partition flag not set EFI 시스템 파티션 플래그가 설정ë˜ì§€ 않았습니다 An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. %1를 시작하려면 EFI 시스템 íŒŒí‹°ì…˜ì´ í•„ìš”í•©ë‹ˆë‹¤.<br/><br/><strong>%2</strong> 마운트 위치로 íŒŒí‹°ì…˜ì´ êµ¬ì„±ë˜ì—ˆì§€ë§Œ 해당 <strong>esp</strong> 플래그가 설정ë˜ì§€ 않았습니다.<br/>플래그를 설정하려면 ëŒì•„가서 íŒŒí‹°ì…˜ì„ íŽ¸ì§‘í•©ë‹ˆë‹¤.<br/><br/>플래그를 설정하지 않고 계ì†í•  수 있지만 ì‹œìŠ¤í…œì´ ì‹œìž‘ë˜ì§€ ì•Šì„ ìˆ˜ 있습니다. Boot partition not encrypted 부트 íŒŒí‹°ì…˜ì´ ì•”í˜¸í™”ë˜ì§€ 않았습니다 A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. ì•”í˜¸í™”ëœ ë£¨íŠ¸ 파티션과 함께 별ë„ì˜ ë¶€íŒ… íŒŒí‹°ì…˜ì´ ì„¤ì •ë˜ì—ˆì§€ë§Œ 부팅 íŒŒí‹°ì…˜ì€ ì•”í˜¸í™”ë˜ì§€ 않았습니다.<br/><br/>중요한 시스템 파ì¼ì€ 암호화ë˜ì§€ ì•Šì€ íŒŒí‹°ì…˜ì— ë³´ê´€ë˜ê¸° ë•Œë¬¸ì— ì´ëŸ¬í•œ 설정과 관련하여 보안 문제가 있습니다.<br/>ì›í•˜ëŠ” 경우 계ì†í•  수 있지만 ë‚˜ì¤‘ì— ì‹œìŠ¤í…œì„ ì‹œìž‘í•˜ëŠ” ë™ì•ˆ íŒŒì¼ ì‹œìŠ¤í…œ ìž ê¸ˆì´ í•´ì œë©ë‹ˆë‹¤.<br/>부팅 íŒŒí‹°ì…˜ì„ ì•”í˜¸í™”í•˜ë ¤ë©´ ëŒì•„가서 다시 ìƒì„±í•˜ì—¬ 파티션 ìƒì„± ì°½ì—서 <strong>암호화</strong>를 ì„ íƒí•©ë‹ˆë‹¤. has at least one disk device available. 하나 ì´ìƒì˜ ë””ìŠ¤í¬ ìž¥ì¹˜ë¥¼ 사용할 수 있습니다. There are no partitions to install on. 설치를 위한 íŒŒí‹°ì…˜ì´ ì—†ìŠµë‹ˆë‹¤. PlasmaLnfJob Plasma Look-and-Feel Job 플ë¼ì¦ˆë§ˆ 모양과 ëŠë‚Œ 작업 Could not select KDE Plasma Look-and-Feel package KDE 플ë¼ì¦ˆë§ˆ 모양과 ëŠë‚Œ 패키지를 ì„ íƒí•  수 없습니다 PlasmaLnfPage Form í˜•ì‹ Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. KDE Plasma Desktopì˜ ëª¨ì–‘ê³¼ ëŠë‚Œì„ ì„ íƒí•˜ì„¸ìš”. ì‹œìŠ¤í…œì„ ì„¤ì •í•œ 후 ì´ ë‹¨ê³„ë¥¼ 건너뛰고 모양과 ëŠë‚Œì„ 구성할 ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. 모양과 ëŠë‚Œ ì„ íƒì„ í´ë¦­í•˜ë©´ 해당 ëª¨ì–‘ì„ ë¯¸ë¦¬ ë³¼ 수 있습니다. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. KDE Plasma Desktopì˜ ëª¨ì–‘ê³¼ ëŠë‚Œì„ ì„ íƒí•˜ì„¸ìš”. ë˜í•œ ì‹œìŠ¤í…œì´ ì„¤ì¹˜ë˜ë©´ ì´ ë‹¨ê³„ë¥¼ 건너뛰고 모양과 ëŠë‚Œì„ 구성할 ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. 모양과 ëŠë‚Œ ì„ íƒì„ í´ë¦­í•˜ë©´ 해당 ëª¨ì–‘ì„ ë¯¸ë¦¬ ë³¼ 수 있습니다. PlasmaLnfViewStep Look-and-Feel Look-and-Feel PreserveFiles Saving files for later ... ë‚˜ì¤‘ì„ ìœ„í•´ 파ì¼ë“¤ì„ 저장하는 중... No files configured to save for later. ë‚˜ì¤‘ì„ ìœ„í•´ ì €ìž¥ë  ì„¤ì •ëœ íŒŒì¼ë“¤ì´ 없습니다. Not all of the configured files could be preserved. 모든 ì„¤ì •ëœ íŒŒì¼ë“¤ì´ ë³´ì¡´ë˜ëŠ” ê²ƒì€ ì•„ë‹™ë‹ˆë‹¤. ProcessResult There was no output from the command. 명령으로부터 아무런 ì¶œë ¥ì´ ì—†ìŠµë‹ˆë‹¤. Output: 출력: External command crashed. 외부 ëª…ë ¹ì´ ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤. Command <i>%1</i> crashed. <i>%1</i> ëª…ë ¹ì´ ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤. External command failed to start. 외부 ëª…ë ¹ì„ ì‹œìž‘í•˜ì§€ 못했습니다. Command <i>%1</i> failed to start. <i>%1</i> ëª…ë ¹ì„ ì‹œìž‘í•˜ì§€ 못했습니다. Internal error when starting command. ëª…ë ¹ì„ ì‹œìž‘í•˜ëŠ” ì¤‘ì— ë‚´ë¶€ 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤. Bad parameters for process job call. 프로세스 작업 í˜¸ì¶œì— ëŒ€í•œ ìž˜ëª»ëœ ë§¤ê°œ 변수입니다. External command failed to finish. 외부 ëª…ë ¹ì„ ì™„ë£Œí•˜ì§€ 못했습니다. Command <i>%1</i> failed to finish in %2 seconds. <i>%1</i> ëª…ë ¹ì„ %2ì´ˆ ì•ˆì— ì™„ë£Œí•˜ì§€ 못했습니다. External command finished with errors. 외부 ëª…ë ¹ì´ ì˜¤ë¥˜ì™€ 함께 완료ë˜ì—ˆìŠµë‹ˆë‹¤. Command <i>%1</i> finished with exit code %2. <i>%1</i> ëª…ë ¹ì´ ì¢…ë£Œ 코드 %2와 함께 완료ë˜ì—ˆìŠµë‹ˆë‹¤. QObject Default Keyboard Model 기본 키보드 ëª¨ë¸ Default 기본 unknown 알 수 ì—†ìŒ extended í™•ìž¥ë¨ unformatted í¬ë§·ë˜ì§€ ì•ŠìŒ swap 스왑 Unpartitioned space or unknown partition table ë¶„í• ë˜ì§€ ì•Šì€ ê³µê°„ ë˜ëŠ” 알 수 없는 파티션 í…Œì´ë¸”입니다. (no mount point) (마운트 위치 ì—†ìŒ) Requirements checking for module <i>%1</i> is complete. <i>%1</i> ëª¨ë“ˆì— ëŒ€í•œ 요구사항 검사가 완료ë˜ì—ˆìŠµë‹ˆë‹¤. %1 (%2) language[name] (country[name]) %1 (%2) No product 제품 ì—†ìŒ No description provided. ì„¤ëª…ì´ ì œê³µë˜ì§€ 않았습니다. File not found 파ì¼ì„ ì°¾ì„ ìˆ˜ ì—†ìŒ Path <pre>%1</pre> must be an absolute path. <pre>%1</pre> 경로는 절대 경로여야 합니다. Could not create new random file <pre>%1</pre>. 새 ìž„ì˜ íŒŒì¼ <pre>%1</pre>ì„(를) 만들 수 없습니다. RemoveVolumeGroupJob Remove Volume Group named %1. %1로 ì´ë¦„ ì§€ì •ëœ ë³¼ë¥¨ ê·¸ë£¹ì„ ì œê±°í•©ë‹ˆë‹¤. Remove Volume Group named <strong>%1</strong>. <strong>%1</strong>로 ì´ë¦„ ì§€ì •ëœ ë³¼ë¥¨ ê·¸ë£¹ì„ ì œê±°í•©ë‹ˆë‹¤. The installer failed to remove a volume group named '%1'. 설치 관리ìžê°€ '%1'ì´ë¼ëŠ” 볼륨 ê·¸ë£¹ì„ ì œê±°í•˜ì§€ 못했습니다. ReplaceWidget Form í˜•ì‹ Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. %1ì„ ì„¤ì¹˜í•  위치를 ì„ íƒí•©ë‹ˆë‹¤.<br/><font color="red">경고: </font>ì„ íƒí•œ íŒŒí‹°ì…˜ì˜ ëª¨ë“  파ì¼ì´ ì‚­ì œë©ë‹ˆë‹¤. The selected item does not appear to be a valid partition. ì„ íƒëœ í•­ëª©ì€ ìœ íš¨í•œ 파티션으로 표시ë˜ì§€ 않습니다. %1 cannot be installed on empty space. Please select an existing partition. %1ì€ ë¹ˆ ê³µê°„ì— ì„¤ì¹˜ë  ìˆ˜ 없습니다. 존재하는 íŒŒí‹°ì…˜ì„ ì„ íƒí•´ì£¼ì„¸ìš”. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1ì€ í™•ìž¥ íŒŒí‹°ì…˜ì— ì„¤ì¹˜ë  ìˆ˜ 없습니다. 주 파티션 í˜¹ì€ ë…¼ë¦¬ íŒŒí‹°ì…˜ì„ ì„ íƒí•´ì£¼ì„¸ìš”. %1 cannot be installed on this partition. %1ì€ ì´ íŒŒí‹°ì…˜ì— ì„¤ì¹˜ë  ìˆ˜ 없습니다. Data partition (%1) ë°ì´í„° 파티션 (%1) Unknown system partition (%1) 알 수 없는 시스템 파티션 (%1) %1 system partition (%2) %1 시스템 파티션 (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>%1 íŒŒí‹°ì…˜ì´ %2ì— ë¹„í•´ 너무 작습니다. ìš©ëŸ‰ì´ %3 GiB ì´ìƒì¸ íŒŒí‹°ì…˜ì„ ì„ íƒí•˜ì‹­ì‹œì˜¤. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/>ì´ ì‹œìŠ¤í…œì—서는 EFI 시스템 íŒŒí‹°ì…˜ì„ ì°¾ì„ ìˆ˜ 없습니다. ëŒì•„가서 ìˆ˜ë™ íŒŒí‹°ì…˜ ìž‘ì—…ì„ ì‚¬ìš©í•˜ì—¬ %1ì„ ì„¤ì •í•˜ì„¸ìš”. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>%1ì´ %2ì— ì„¤ì¹˜ë©ë‹ˆë‹¤.<br/><font color="red">경고: </font>%2 íŒŒí‹°ì…˜ì˜ ëª¨ë“  ë°ì´í„°ê°€ ì†ì‹¤ë©ë‹ˆë‹¤. The EFI system partition at %1 will be used for starting %2. %1ì˜ EFI 시스템 íŒŒí‹°ì…˜ì€ %2ì˜ ì‹œìž‘ìœ¼ë¡œ ì‚¬ìš©ë  ê²ƒìž…ë‹ˆë‹¤. EFI system partition: EFI 시스템 파티션: ResizeFSJob Resize Filesystem Job 파ì¼ì‹œìŠ¤í…œ 작업 í¬ê¸°ì¡°ì • Invalid configuration ìž˜ëª»ëœ ì„¤ì • The file-system resize job has an invalid configuration and will not run. íŒŒì¼ ì‹œìŠ¤í…œ í¬ê¸° ì¡°ì • ìž‘ì—…ì— ìž˜ëª»ëœ ì„¤ì •ì´ ìžˆìœ¼ë©° 실행ë˜ì§€ 않습니다. KPMCore not Available KPMCore 사용할 수 ì—†ìŒ Calamares cannot start KPMCore for the file-system resize job. Calamares는 íŒŒì¼ ì‹œìŠ¤í…œ í¬ê¸° ì¡°ì • ìž‘ì—…ì„ ìœ„í•´ KPMCore를 시작할 수 없습니다. Resize Failed í¬ê¸°ì¡°ì • 실패 The filesystem %1 could not be found in this system, and cannot be resized. ì´ ì‹œìŠ¤í…œì—서 íŒŒì¼ ì‹œìŠ¤í…œ %1를 ì°¾ì„ ìˆ˜ 없으므로 í¬ê¸°ë¥¼ ì¡°ì •í•  수 없습니다. The device %1 could not be found in this system, and cannot be resized. %1 장치를 ì´ ì‹œìŠ¤í…œì—서 ì°¾ì„ ìˆ˜ 없으며 í¬ê¸°ë¥¼ ì¡°ì •í•  수 없습니다. The filesystem %1 cannot be resized. íŒŒì¼ ì‹œìŠ¤í…œ %1ì˜ í¬ê¸°ë¥¼ ì¡°ì •í•  수 없습니다. The device %1 cannot be resized. %1 ìž¥ì¹˜ì˜ í¬ê¸°ë¥¼ ì¡°ì •í•  수 없습니다. The filesystem %1 must be resized, but cannot. íŒŒì¼ ì‹œìŠ¤í…œ %1ì˜ í¬ê¸°ë¥¼ 조정해야 하지만 ì¡°ì •í•  수 없습니다. The device %1 must be resized, but cannot %1 ìž¥ì¹˜ì˜ í¬ê¸°ë¥¼ 조정해야 하지만 ì¡°ì •í•  수 없습니다. ResizePartitionJob Resize partition %1. %1 파티션 í¬ê¸°ì¡°ì • Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. <strong>%2MiB</strong> 파티션 <strong>%1</strong>ì˜ í¬ê¸°ë¥¼ <strong>%3MiB</strong>로 조정합니다. Resizing %2MiB partition %1 to %3MiB. %2MiB 파티션 %1ì˜ í¬ê¸°ë¥¼ %3MiB로 조정합니다. The installer failed to resize partition %1 on disk '%2'. 섪치 í”„ë¡œê·¸ëž¨ì´ ë””ìŠ¤í¬ '%2'ì—서 파티션 %1ì˜ í¬ê¸°ë¥¼ 조정하지 못했습니다. ResizeVolumeGroupDialog Resize Volume Group 볼륨 그룹 í¬ê¸°ì¡°ì • ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. %1 볼륨 ê·¸ë£¹ì˜ í¬ê¸°ë¥¼ %2ì—서 %3으로 조정합니다 Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. <strong>%1</strong>로 ì´ë¦„ ì§€ì •ëœ ë³¼ë¥¨ ê·¸ë£¹ì˜ í¬ê¸°ë¥¼ <strong>%2</strong>ì—서 <strong>%3</strong>로 조정합니다. The installer failed to resize a volume group named '%1'. 설치 í”„ë¡œê·¸ëž¨ì´ '%1'로 ì´ë¦„ ì§€ì •ëœ ë³¼ë¥¨ ê·¸ë£¹ì˜ í¬ê¸°ë¥¼ 조정하지 못했습니다. ResultsListDialog For best results, please ensure that this computer: 최ìƒì˜ 결과를 얻으려면 ì´ ì»´í“¨í„°ê°€ ë‹¤ìŒ ì‚¬í•­ì„ ì¶©ì¡±í•´ì•¼ 합니다. System requirements 시스템 요구 사항 ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> ì´ ì»´í“¨í„°ëŠ” %1 설치를 위한 최소 요구 ì‚¬í•­ì„ ì¶©ì¡±í•˜ì§€ 않습니다.<br/>설치를 계ì†í•  수 없습니다.<a href="#details">세부 ì •ë³´...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> ì´ ì»´í“¨í„°ëŠ” %1 설치를 위한 최소 요구 ì‚¬í•­ì„ ì¶©ì¡±í•˜ì§€ 않습니다.<br/>설치를 계ì†í•  수 없습니다. <a href="#details">세부 사항입니다...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. ì´ ì»´í“¨í„°ëŠ” %1 설치를 위한 권장 요구 사항 중 ì¼ë¶€ë¥¼ 충족하지 않습니다.<br/>설치를 계ì†í•  수는 있지만 ì¼ë¶€ ê¸°ëŠ¥ì„ ì‚¬ìš©í•˜ì§€ 않ë„ë¡ ì„¤ì •í•  ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. ì´ ì»´í“¨í„°ëŠ” %1 설치를 위한 권장 요구 사항 중 ì¼ë¶€ë¥¼ 충족하지 않습니다.<br/>설치를 계ì†í•  수 있지만 ì¼ë¶€ ê¸°ëŠ¥ì„ ì‚¬ìš©í•˜ì§€ 않ë„ë¡ ì„¤ì •í•  수 있습니다. This program will ask you some questions and set up %2 on your computer. ì´ í”„ë¡œê·¸ëž¨ì€ ëª‡ 가지 ì§ˆë¬¸ì„ í•˜ê³  ì»´í“¨í„°ì— %2ì„ ì„¤ì •í•©ë‹ˆë‹¤. ScanningDialog Scanning storage devices... 저장 장치 검색 중... Partitioning 파티션 작업 SetHostNameJob Set hostname %1 호스트 ì´ë¦„ì„ %1로 설정합니다 Set hostname <strong>%1</strong>. 호스트 ì´ë¦„ì„ <strong>%1</strong>로 설정합니다. Setting hostname %1. 호스트 ì´ë¦„ì„ %1로 설정하는 중입니다. Internal Error ë‚´ë¶€ 오류 Cannot write hostname to target system ì‹œìŠ¤í…œì˜ í˜¸ìŠ¤íŠ¸ ì´ë¦„ì„ ì €ìž¥í•  수 없습니다 SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 키보드 모ë¸ì„ %1로 설정하고, ë ˆì´ì•„ì›ƒì„ %2-%3으로 설정합니다 Failed to write keyboard configuration for the virtual console. ê°€ìƒ ì½˜ì†”ì„ ìœ„í•œ 키보드 ì„¤ì •ì„ ì €ìž¥í•  수 없습니다. Failed to write to %1 %1ì— ì“°ê¸°ë¥¼ 실패했습니다 Failed to write keyboard configuration for X11. X11ì— ëŒ€í•œ 키보드 ì„¤ì •ì„ ì €ìž¥í•˜ì§€ 못했습니다. Failed to write keyboard configuration to existing /etc/default directory. /etc/default ë””ë ‰í„°ë¦¬ì— í‚¤ë³´ë“œ ì„¤ì •ì„ ì €ìž¥í•˜ì§€ 못했습니다. SetPartFlagsJob Set flags on partition %1. 파티션 %1ì— í”Œëž˜ê·¸ë¥¼ 설정합니다. Set flags on %1MiB %2 partition. %1MiB %2 íŒŒí‹°ì…˜ì— í”Œëž˜ê·¸ 설정. Set flags on new partition. 새 íŒŒí‹°ì…˜ì— í”Œëž˜ê·¸ë¥¼ 설정합니다. Clear flags on partition <strong>%1</strong>. 파티션 <strong>%1</strong>ì—서 플래그를 ì§€ì›ë‹ˆë‹¤. Clear flags on %1MiB <strong>%2</strong> partition. %1MiB <strong>%2</strong> 파티션ì—서 플래그를 ì§€ì›ë‹ˆë‹¤. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. %1MiB <strong>%2</strong> íŒŒí‹°ì…˜ì„ <strong>%3</strong>으로 플래그합니다. Clearing flags on %1MiB <strong>%2</strong> partition. %1MiB <strong>%2</strong> 파티션ì—서 플래그를 지우는 중입니다. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. %1MiB <strong>%2</strong> 파티션ì—서 플래그 <strong>%3</strong>ì„ ì„¤ì •í•©ë‹ˆë‹¤. Clear flags on new partition. 새 파티션ì—서 플래그를 ì§€ì›ë‹ˆë‹¤. Flag partition <strong>%1</strong> as <strong>%2</strong>. 파티션 <strong>%1</strong>ì„ <strong>%2</strong>로 플래그 지정합니다. Flag new partition as <strong>%1</strong>. íŒŒí‹°ì…˜ì„ <strong>%1</strong>로 플래그 지정합니다 Clearing flags on partition <strong>%1</strong>. 파티션 <strong>%1</strong>ì—서 플래그를 지우는 중입니다. Clearing flags on new partition. 새 파티션ì—서 플래그를 지우는 중입니다. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. 파티션 <strong>%1</strong>ì— í”Œëž˜ê·¸ë¥¼ .<strong>%2</strong>로 설정합니다. Setting flags <strong>%1</strong> on new partition. 새 파티션ì—서 플래그를 <strong>%1</strong>으로 설정합니다. The installer failed to set flags on partition %1. 설치 í”„ë¡œê·¸ëž¨ì´ íŒŒí‹°ì…˜ %1ì—서 플래그를 설정하지 못했습니다.. SetPasswordJob Set password for user %1 %1 사용ìžì— 대한 암호를 설정합니다 Setting password for user %1. %1 사용ìžì˜ 암호를 설정하는 중입니다 Bad destination system path. ìž˜ëª»ëœ ëŒ€ìƒ ì‹œìŠ¤í…œ 경로입니다. rootMountPoint is %1 루트마운트위치는 %1입니다. Cannot disable root account. root ê³„ì •ì„ ë¹„í™œì„±í™” í•  수 없습니다. passwd terminated with error code %1. passwdê°€ %1 오류 코드로 종료ë˜ì—ˆìŠµë‹ˆë‹¤. Cannot set password for user %1. %1 사용ìžì— 대한 암호를 설정할 수 없습니다. usermod terminated with error code %1. usermodê°€ %1 오류 코드로 종료ë˜ì—ˆìŠµë‹ˆë‹¤ SetTimezoneJob Set timezone to %1/%2 표준시간대를 %1/%2로 설정합니다 Cannot access selected timezone path. ì„ íƒëœ 표준시간대 ê²½ë¡œì— ì ‘ê·¼í•  수 없습니다. Bad path: %1 ìž˜ëª»ëœ ê²½ë¡œ: %1 Cannot set timezone. 표준 시간대를 설정할 수 없습니다. Link creation failed, target: %1; link name: %2 ë§í¬ ìƒì„± 실패, 대ìƒ: %1; ë§í¬ ì´ë¦„: %2 Cannot set timezone, 표준시간대를 설정할 수 없습니다, Cannot open /etc/timezone for writing /etc/timezoneì„ ì“°ê¸°ë¥¼ 위해 ì—´ 수 없습니다. ShellProcessJob Shell Processes Job ì…¸ 처리 작업 SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage This is an overview of what will happen once you start the setup procedure. 설치 절차를 시작하면 어떻게 ë˜ëŠ”ì§€ 간략히 설명합니다. This is an overview of what will happen once you start the install procedure. 설치 절차를 시작하면 어떻게 ë˜ëŠ”ì§€ 간략히 설명합니다. SummaryViewStep Summary 요약 TrackingInstallJob Installation feedback 설치 피드백 Sending installation feedback. 설치 í”¼ë“œë°±ì„ ë³´ë‚´ëŠ” 중입니다. Internal error in install-tracking. 설치 ì¶”ì ì¤‘ ë‚´ë¶€ 오류 HTTP request timed out. HTTP 요청 ì‹œê°„ì´ ë§Œë£Œë˜ì—ˆìŠµë‹ˆë‹¤. TrackingMachineNeonJob Machine feedback 시스템 피드백 Configuring machine feedback. 시스템 í”¼ë“œë°±ì„ ì„¤ì •í•˜ëŠ” 중입니다. Error in machine feedback configuration. 시스템 피드백 설정 ì¤‘ì— ì˜¤ë¥˜ê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤. Could not configure machine feedback correctly, script error %1. 시스템 í”¼ë“œë°±ì„ ì •í™•í•˜ê²Œ 설정할 수 없습니다, %1 스í¬ë¦½íЏ 오류. Could not configure machine feedback correctly, Calamares error %1. 시스템 í”¼ë“œë°±ì„ ì •í™•í•˜ê²Œ 설정할 수 없습니다, %1 ê¹”ë¼ë§ˆë ˆìФ 오류. TrackingPage Form í˜•ì‹ Placeholder ìžë¦¬ í‘œì‹œìž <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>ì´ ì˜µì…˜ì„ ì„ íƒí•˜ë©´ <span style=" font-weight:600;">ì„¤ì¹˜ì— ëŒ€í•œ ì •ë³´ê°€</span> 전혀 전송ë˜ì§€ 않습니다.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">ì‚¬ìš©ìž í”¼ë“œë°±ì— ëŒ€í•œ ìžì„¸í•œ 정보를 보려면 여기를 í´ë¦­í•˜ì„¸ìš”.</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. 설치 ì¶”ì  ê¸°ëŠ¥ì„ ì‚¬ìš©í•˜ë©´ %1ì˜ ì‚¬ìš©ìž ìˆ˜, %1ì— ì„¤ì¹˜í•˜ëŠ” 하드웨어 (아래 마지막 ë‘ ì˜µì…˜), 기본 ì‘ìš© í”„ë¡œê·¸ëž¨ì— ëŒ€í•œ ì§€ì†ì ì¸ 정보를 ì–»ì„ ìˆ˜ 있습니다. 전송할 ë‚´ìš©ì„ ë³´ë ¤ë©´ ê° ì˜ì—­ 옆ì—있는 ë„ì›€ë§ ì•„ì´ì½˜ì„ í´ë¦­í•˜ì‹­ì‹œì˜¤. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. ì´ ì˜µì…˜ì„ ì„ íƒí•˜ë©´ 설치 ë° í•˜ë“œì›¨ì–´ì— ëŒ€í•œ ì •ë³´ê°€ 전송ë©ë‹ˆë‹¤. ì´ ì •ë³´ëŠ” 설치가 ì™„ë£Œëœ í›„ <b>한 번만 전송</b>ë©ë‹ˆë‹¤ By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. ì´ ì˜µì…˜ì„ ì„ íƒí•˜ë©´ <b>주기ì ìœ¼ë¡œ</b> 설치, 하드웨어 ë° ì‘ìš© í”„ë¡œê·¸ëž¨ì— ëŒ€í•œ 정보를 %1로 전송합니다. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. ì´ ì˜µì…˜ì„ ì„ íƒí•˜ë©´ <b>정기ì ìœ¼ë¡œ</b> 설치, 하드웨어, ì‘ìš© 프로그램 ë° ì‚¬ìš© íŒ¨í„´ì— ëŒ€í•œ 정보를 %1로 전송합니다. TrackingViewStep Feedback 피드백 UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>둘 ì´ìƒì˜ 사용ìžê°€ ì´ ì»´í“¨í„°ë¥¼ 사용할 경우, 설정 후 ê³„ì •ì„ ì—¬ëŸ¬ ê°œ 만들 수 있습니다.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>둘 ì´ìƒì˜ 사용ìžê°€ ì´ ì»´í“¨í„°ë¥¼ 사용할 경우 설치 후 ê³„ì •ì„ ì—¬ëŸ¬ ê°œ 만들 수 있습니다.</small> Your username is too long. ì‚¬ìš©ìž ì´ë¦„ì´ ë„ˆë¬´ ê¹ë‹ˆë‹¤. Your username must start with a lowercase letter or underscore. ì‚¬ìš©ìž ì´ë¦„ì€ ì†Œë¬¸ìž ë˜ëŠ” 밑줄로 시작해야 합니다. Only lowercase letters, numbers, underscore and hyphen are allowed. 소문ìž, 숫ìž, 밑줄 ë° í•˜ì´í”ˆë§Œ 허용ë©ë‹ˆë‹¤. Only letters, numbers, underscore and hyphen are allowed. 문ìž, 숫ìž, 밑줄 ë° í•˜ì´í”ˆë§Œ 허용ë©ë‹ˆë‹¤. Your hostname is too short. 호스트 ì´ë¦„ì´ ë„ˆë¬´ 짧습니다. Your hostname is too long. 호스트 ì´ë¦„ì´ ë„ˆë¬´ ê¹ë‹ˆë‹¤. Your passwords do not match! 암호가 ì¼ì¹˜í•˜ì§€ 않습니다! UsersViewStep Users ì‚¬ìš©ìž VariantModel Key 키 Value ê°’ VolumeGroupBaseDialog Create Volume Group 볼륨 그룹 ìƒì„± List of Physical Volumes 물리 볼륨 ëª©ë¡ Volume Group Name: 볼륨 그룹 ì´ë¦„ : Volume Group Type: 볼륨 그룹 유형 : Physical Extent Size: 물리 확장 í¬ê¸° : MiB MiB Total Size: ì „ì²´ í¬ê¸° : Used Size: ì‚¬ìš©ëœ í¬ê¸° : Total Sectors: ì „ì²´ 섹터 : Quantity of LVs: LVsì˜ ìš©ëŸ‰ WelcomePage Form í˜•ì‹ Select application and system language ì‘ìš© 프로그램 ë° ì‹œìŠ¤í…œ 언어 ì„ íƒ Open donations website 기부 웹 사ì´íŠ¸ì—´ê¸° &Donate 기부(&D) Open help and support website ë„ì›€ë§ ë° ì§€ì› ì›¹ 사ì´íЏ 열기 Open issues and bug-tracking website 문제 ë° ë²„ê·¸ ì¶”ì  ì›¹ 사ì´íЏ 열기 Open release notes website 릴리스 노트 웹 사ì´íЏ 열기 &Release notes 출시 ì •ë³´ (&R) &Known issues 알려진 ë¬¸ì œì  (&K) &Support ì§€ì› (&S) &About ì •ë³´ (&A) <h1>Welcome to the %1 installer.</h1> <h1>%1 설치 관리ìžì— 오신 ê²ƒì„ í™˜ì˜í•©ë‹ˆë‹¤.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>%1ì„ ìœ„í•œ Calamares 설치 관리ìžì— 오신 ê²ƒì„ í™˜ì˜í•©ë‹ˆë‹¤.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>%1ì— ëŒ€í•œ Calamares 설정 í”„ë¡œê·¸ëž¨ì— ì˜¤ì‹  ê²ƒì„ í™˜ì˜í•©ë‹ˆë‹¤.</h1> <h1>Welcome to %1 setup.</h1> <h1>%1 ì„¤ì¹˜ì— ì˜¤ì‹  ê²ƒì„ í™˜ì˜í•©ë‹ˆë‹¤.</h1> About %1 setup %1 설치 ì •ë³´ About %1 installer %1 설치 관리ìžì— 대하여 <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/><a href="https://calamares.io/team/">Calamares</a> 팀과 <a href="https://www.transifex.com/calamares/calamares/">Calamares 번역 팀</a>ì—게 ê°ì‚¬ë“œë¦½ë‹ˆë‹¤.<br/><br/><a href="https://calamares.io/">Calamares</a> 개발 í›„ì› : <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support %1 ì§€ì› WelcomeQmlViewStep Welcome 환ì˜í•©ë‹ˆë‹¤ WelcomeViewStep Welcome 환ì˜í•©ë‹ˆë‹¤ notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>릴리즈 ë…¸íŠ¸ì˜ ì˜ˆì œìž…ë‹ˆë‹¤.</p> welcomeq <h3>%1 <quote>%2</quote></h3> <h3>%1 <quote>%2</quote></h3> About Calamaresì— ëŒ€í•˜ì—¬ Support ì§€ì› Known issues 알려진 ì´ìŠˆë“¤ Release notes 릴리즈 노트 Donate 기부 calamares-3.2.20/lang/calamares_lo.ts000066400000000000000000004565641362604102500174640ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. BootLoaderModel Master Boot Record of %1 Boot Partition System Partition Do not install a boot loader %1 (%2) Calamares::BlankViewStep Blank Page Calamares::DebugWindow Form GlobalStorage JobQueue Modules Type: none Interface: Tools Reload Stylesheet Widget Tree Debug information Calamares::ExecutionViewStep Set up Install Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Calamares::PythonJob Running %1 operation. Bad working directory path Working directory %1 for python job %2 is not readable. Bad main script file Main script file %1 for python job %2 is not readable. Boost.Python error in job "%1". Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager &Back &Next &Cancel Cancel setup without changing the system. Cancel installation without changing the system. Setup Failed Would you like to paste the install log to the web? Install Log Paste URL The upload was unsuccessful. No web-paste was done. Calamares Initialization Failed %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. <br/>The following modules could not be loaded: Continue with installation? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Set up &Install Setup is complete. Close the setup program. Cancel setup? Cancel installation? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. &Yes &No &Close Continue with setup? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> &Install now Go &back &Done The installation is complete. Close the installer. Error Installation Failed CalamaresPython::Helper Unknown exception type unparseable Python error unparseable Python traceback Unfetchable Python error. CalamaresUtils Install log posted to: %1 CalamaresWindow %1 Setup Program %1 Installer Show debug information CheckerContainer Gathering system information... ChoicePage Form After: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Boot loader location: Select storage de&vice: Current: Reuse %1 as home partition for %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. <strong>Select a partition to install on</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. The EFI system partition at %1 will be used for starting %2. EFI system partition: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. No Swap Reuse Swap Swap (no Hibernate) Swap (with Hibernate) Swap to file <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. ClearMountsJob Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 ClearTempMountsJob Clear all temporary mounts. Clearing all temporary mounts. Cannot get list of temporary mounts. Cleared all temporary mounts. CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition MiB Partition &Type: &Primary E&xtended Fi&le System: LVM LV name Flags: &Mount Point: Si&ze: En&crypt Logical Primary GPT Mountpoint already in use. Please select another one. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. The installer failed to create partition on disk '%1'. CreatePartitionTableDialog Create Partition Table Creating a new partition table will delete all existing data on the disk. What kind of partition table do you want to create? Master Boot Record (MBR) GUID Partition Table (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Creating new %1 partition table on %2. The installer failed to create a partition table on %1. CreateUserJob Create user %1 Create user <strong>%1</strong>. Creating user %1. Sudoers dir is not writable. Cannot create sudoers file for writing. Cannot chmod sudoers file. Cannot open groups file for reading. CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. Delete partition <strong>%1</strong>. Deleting partition %1. The installer failed to delete partition %1. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. This device has a <strong>%1</strong> partition table. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - (%2) device[name] - (device-node[name]) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Failed to open %1 DummyCppJob Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Content: &Keep Format Warning: Formatting the partition will erase all existing data. &Mount Point: Si&ze: MiB Fi&le System: Flags: Mountpoint already in use. Please select another one. EncryptWidget Form En&crypt system Passphrase Confirm passphrase Please enter the same passphrase in both boxes. FillGlobalStorageJob Set partition information Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Install boot loader on <strong>%1</strong>. Setting up mount points. FinishedPage Form <Restart checkbox tooltip> &Restart now <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. FinishedViewStep Finish Setup Complete Installation Complete The setup of %1 is complete. The installation of %1 is complete. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatting partition %1 with file system %2. The installer failed to format partition %1 on disk '%2'. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source The system is not plugged in to a power source. is connected to the Internet The system is not connected to the Internet. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Please install KDE Konsole and try again! Executing script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script KeyboardPage Set keyboard model to %1.<br/> Set keyboard layout to %1/%2. KeyboardViewStep Keyboard LCLocaleDialog System locale setting The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. &Cancel &OK LicensePage Form <h1>License Agreement</h1> I accept the terms and conditions above. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> File: %1 Show the license text Open license agreement in browser. Hide license text LocalePage The system language will be set to %1. The numbers and dates locale will be set to %1. Region: Zone: &Change... Set timezone to %1/%2.<br/> LocaleViewStep Location LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Configuration Error No root mount point is set for MachineId. NetInstallPage Name Description Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Incorrect configuration) NetInstallViewStep Package selection Office software Office package Browser software Browser package Web browser Kernel Services Login Desktop Applications NotesQmlViewStep Notes OEMPage Ba&tch: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> OEMViewStep OEM Configuration Set the OEM Batch Identifier to <code>%1</code>. PWQ Password is too short Password is too long Password is too weak Memory allocation error when setting '%1' Memory allocation error The password is the same as the old one The password is a palindrome The password differs with case changes only The password is too similar to the old one The password contains the user name in some form The password contains words from the real name of the user in some form The password contains forbidden words in some form The password contains less than %1 digits The password contains too few digits The password contains less than %1 uppercase letters The password contains too few uppercase letters The password contains less than %1 lowercase letters The password contains too few lowercase letters The password contains less than %1 non-alphanumeric characters The password contains too few non-alphanumeric characters The password is shorter than %1 characters The password is too short The password is just rotated old one The password contains less than %1 character classes The password does not contain enough character classes The password contains more than %1 same characters consecutively The password contains too many same characters consecutively The password contains more than %1 characters of the same class consecutively The password contains too many characters of the same class consecutively The password contains monotonic sequence longer than %1 characters The password contains too long of a monotonic character sequence No password supplied Cannot obtain random numbers from the RNG device Password generation failed - required entropy too low for settings The password fails the dictionary check - %1 The password fails the dictionary check Unknown setting - %1 Unknown setting Bad integer value of setting - %1 Bad integer value Setting %1 is not of integer type Setting is not of integer type Setting %1 is not of string type Setting is not of string type Opening the configuration file failed The configuration file is malformed Fatal failure Unknown error Password is empty PackageChooserPage Form Product Name TextLabel Long Product Description Package Selection Please pick a product from the list. The selected product will be installed. PackageChooserViewStep Packages Page_Keyboard Form Keyboard Model: Type here to test your keyboard Page_UserSetup Form What is your name? What name do you want to use to log in? Choose a password to keep your account safe. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> What is the name of this computer? Your Full Name login <small>This name will be used if you make the computer visible to others on a network.</small> Computer Name Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Use the same password for the administrator account. Choose a password for the administrator account. <small>Enter the same password twice, so that it can be checked for typing errors.</small> PartitionLabelsView Root Home Boot EFI system Swap New partition for %1 New partition %1 %2 size[number] filesystem[name] PartitionModel Free Space New partition Name File System Mount Point Size PartitionPage Form Storage de&vice: &Revert All Changes New Partition &Table Cre&ate &Edit &Delete New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group I&nstall boot loader on: Are you sure you want to create a new partition table on %1? Can not create new partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. PartitionViewStep Gathering system information... Partitions Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <strong>Replace</strong> a partition with %1. <strong>Manual</strong> partitioning. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Current: After: No EFI system partition configured An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. EFI system partition flag not set An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: External command crashed. Command <i>%1</i> crashed. External command failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Bad parameters for process job call. External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Command <i>%1</i> finished with exit code %2. QObject Default Keyboard Model Default unknown extended unformatted swap Unpartitioned space or unknown partition table (no mount point) Requirements checking for module <i>%1</i> is complete. %1 (%2) language[name] (country[name]) No product No description provided. File not found Path <pre>%1</pre> must be an absolute path. Could not create new random file <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. The selected item does not appear to be a valid partition. %1 cannot be installed on empty space. Please select an existing partition. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 cannot be installed on this partition. Data partition (%1) Unknown system partition (%1) %1 system partition (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. The EFI system partition at %1 will be used for starting %2. EFI system partition: ResizeFSJob Resize Filesystem Job Invalid configuration The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. ResizeVolumeGroupDialog Resize Volume Group ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: System requirements ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. This program will ask you some questions and set up %2 on your computer. ScanningDialog Scanning storage devices... Partitioning SetHostNameJob Set hostname %1 Set hostname <strong>%1</strong>. Setting hostname %1. Internal Error Cannot write hostname to target system SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Failed to write keyboard configuration for the virtual console. Failed to write to %1 Failed to write keyboard configuration for X11. Failed to write keyboard configuration to existing /etc/default directory. SetPartFlagsJob Set flags on partition %1. Set flags on %1MiB %2 partition. Set flags on new partition. Clear flags on partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag new partition as <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. SetPasswordJob Set password for user %1 Setting password for user %1. Bad destination system path. rootMountPoint is %1 Cannot disable root account. passwd terminated with error code %1. Cannot set password for user %1. usermod terminated with error code %1. SetTimezoneJob Set timezone to %1/%2 Cannot access selected timezone path. Bad path: %1 Cannot set timezone. Link creation failed, target: %1; link name: %2 Cannot set timezone, Cannot open /etc/timezone for writing ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) SummaryPage This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. SummaryViewStep Summary TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingMachineNeonJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form Placeholder <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. TrackingViewStep Feedback UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> Your username is too long. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Only letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Your hostname is too long. Your passwords do not match! UsersViewStep Users VariantModel Key Value VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB Total Size: Used Size: Total Sectors: Quantity of LVs: WelcomePage Form Select application and system language Open donations website &Donate Open help and support website Open issues and bug-tracking website Open release notes website &Release notes &Known issues &Support &About <h1>Welcome to the %1 installer.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Welcome to %1 setup.</h1> About %1 setup About %1 installer <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support WelcomeQmlViewStep Welcome WelcomeViewStep Welcome notesqml <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> About Support Known issues Release notes Donate calamares-3.2.20/lang/calamares_lt.ts000066400000000000000000005575261362604102500174710ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. Å ios sistemos <strong>paleidimo aplinka</strong>.<br><br>SenesnÄ—s x86 sistemos palaiko tik <strong>BIOS</strong>.<br>Å iuolaikinÄ—s sistemos, dažniausiai, naudoja <strong>EFI</strong>, taÄiau, jeigu jos yra paleistos suderinamumo veiksenoje, taip pat gali bÅ«ti rodomos kaip BIOS. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. Å i sistema buvo paleista su <strong>EFI</strong> paleidimo aplinka.<br><br>Tam, kad sukonfigÅ«ruotų paleidimÄ… iÅ¡ EFI aplinkos, Å¡i diegimo programa, <strong>EFI sistemos skaidinyje</strong>, privalo iÅ¡skleisti paleidyklÄ—s programÄ…, kaip, pavyzdžiui, <strong>GRUB</strong> ar <strong>systemd-boot</strong>. Tai vyks automatiÅ¡kai, nebent pasirinksite rankinį skaidymÄ… ir tokiu atveju patys turÄ—site pasirinkti arba sukurti skaidinį. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. Å i sistema buvo paleista su <strong>BIOS</strong> paleidimo aplinka.<br><br>Tam, kad sukonfigÅ«ruotų paleidimÄ… iÅ¡ BIOS aplinkos, Å¡i diegimo programa, arba skaidinio pradžioje, arba <strong>Paleidimo įraÅ¡e (MBR)</strong>, Å¡alia skaidinių lentelÄ—s pradžios (pageidautina), privalo įdiegti paleidyklÄ™, kaip, pavyzdžiui, <strong>GRUB</strong>. Tai vyks automatiÅ¡kai, nebent pasirinksite rankinį skaidymÄ… ir tokiu atveju, viskÄ… turÄ—site nusistatyti patys. BootLoaderModel Master Boot Record of %1 %1 paleidimo įraÅ¡as (MBR) Boot Partition Paleidimo skaidinys System Partition Sistemos skaidinys Do not install a boot loader Nediegti paleidyklÄ—s %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page TuÅ¡Äias puslapis Calamares::DebugWindow Form Forma GlobalStorage VisuotinisKaupiklis JobQueue UžduotiesEilÄ— Modules Moduliai Type: Tipas: none nÄ—ra Interface: SÄ…saja: Tools Ä®rankiai Reload Stylesheet IÅ¡ naujo įkelti stilių aprašą Widget Tree Valdiklių medis Debug information Derinimo informacija Calamares::ExecutionViewStep Set up SÄ…ranka Install Diegimas Calamares::FailJob Job failed (%1) Užduotis patyrÄ— nesÄ—kmÄ™ (%1) Programmed job failure was explicitly requested. Užprogramuota užduoties nesÄ—kmÄ— buvo aiÅ¡kiai užklausta. Calamares::JobThread Done Atlikta Calamares::NamedJob Example job (%1) PavyzdinÄ— užduotis (%1) Calamares::ProcessJob Run command '%1' in target system. Paleisti paskirties sistemoje komandÄ… „%1“. Run command '%1'. Paleisti komandÄ… „%1“. Running command %1 %2 Vykdoma komanda %1 %2 Calamares::PythonJob Running %1 operation. Vykdoma %1 operacija. Bad working directory path Netinkama darbinio katalogo vieta Working directory %1 for python job %2 is not readable. Darbinis %1 python katalogas dÄ—l %2 užduoties yra neskaitomas Bad main script file Prastas pagrindinio skripto failas Main script file %1 for python job %2 is not readable. Pagrindinis scenarijus %1 dÄ—l python %2 užduoties yra neskaitomas Boost.Python error in job "%1". Boost.Python klaida užduotyje "%1". Calamares::QmlViewStep Loading ... Ä®keliama... QML Step <i>%1</i>. QML <i>%1</i> žingsnis. Loading failed. Ä®kÄ—limas nepavyko. Calamares::RequirementsChecker Waiting for %n module(s). Laukiama %n modulio. Laukiama %n modulių. Laukiama %n modulių. Laukiama %n modulio. (%n second(s)) (%n sekundÄ—) (%n sekundÄ—s) (%n sekundžių) (%n sekundÄ—) System-requirements checking is complete. Sistemos reikalavimų tikrinimas yra užbaigtas. Calamares::ViewManager &Back &Atgal &Next &Toliau &Cancel A&tsisakyti Cancel setup without changing the system. Atsisakyti sÄ…rankos, nieko sistemoje nekeiÄiant. Cancel installation without changing the system. Atsisakyti diegimo, nieko sistemoje nekeiÄiant. Setup Failed SÄ…ranka patyrÄ— nesÄ—kmÄ™ Would you like to paste the install log to the web? Ar norÄ—tumÄ—te įdÄ—ti diegimo žurnalÄ… į saitynÄ…? Install Log Paste URL Diegimo žurnalo įdÄ—jimo URL The upload was unsuccessful. No web-paste was done. Ä®kÄ—limas buvo nesÄ—kmingas. Nebuvo atlikta jokio įdÄ—jimo į saitynÄ…. Calamares Initialization Failed Calamares inicijavimas nepavyko %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. Nepavyksta įdiegti %1. Calamares nepavyko įkelti visų sukonfigÅ«ruotų modulių. Tai yra problema, susijusi su tuo, kaip distribucija naudoja diegimo programÄ… Calamares. <br/>The following modules could not be loaded: <br/>Nepavyko įkelti Å¡ių modulių: Continue with installation? TÄ™sti diegimÄ…? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> %1 sÄ…rankos programa, siekdama nustatyti %2, ketina atlikti pakeitimus diske.<br/><strong>Å ių pakeitimų nebegalÄ—site atÅ¡aukti.</strong> &Set up now Nu&statyti dabar &Set up Nu&statyti &Install Ä®&diegti Setup is complete. Close the setup program. SÄ…ranka užbaigta. Užverkite sÄ…rankos programÄ…. Cancel setup? Atsisakyti sÄ…rankos? Cancel installation? Atsisakyti diegimo? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Ar tikrai norite atsisakyti dabartinio sÄ…rankos proceso? SÄ…rankos programa užbaigs darbÄ… ir visi pakeitimai bus prarasti. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Ar tikrai norite atsisakyti dabartinio diegimo proceso? Diegimo programa užbaigs darbÄ… ir visi pakeitimai bus prarasti. &Yes &Taip &No &Ne &Close &Užverti Continue with setup? TÄ™sti sÄ…rankÄ…? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> %1 diegimo programa, siekdama įdiegti %2, ketina atlikti pakeitimus diske.<br/><strong>Å ių pakeitimų nebegalÄ—site atÅ¡aukti.</strong> &Install now Ä®&diegti dabar Go &back &Grįžti &Done A&tlikta The installation is complete. Close the installer. Diegimas užbaigtas. Užverkite diegimo programÄ…. Error Klaida Installation Failed Diegimas nepavyko CalamaresPython::Helper Unknown exception type Nežinomas iÅ¡imties tipas unparseable Python error Nepalyginama Python klaida unparseable Python traceback Nepalyginamas Python atsekimas Unfetchable Python error. Neatgaunama Python klaida. CalamaresUtils Install log posted to: %1 Diegimo žurnalas paskelbtas į: %1 CalamaresWindow %1 Setup Program %1 sÄ…rankos programa %1 Installer %1 diegimo programa Show debug information Rodyti derinimo informacijÄ… CheckerContainer Gathering system information... Renkama sistemos informacija... ChoicePage Form Forma After: Po: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Rankinis skaidymas</strong><br/>Galite patys kurti ar keisti skaidinių dydžius. Boot loader location: PaleidyklÄ—s vieta: Select storage de&vice: Pasirinkite atminties įr&enginį: Current: Dabartinis: Reuse %1 as home partition for %2. Pakartotinai naudoti %1 kaip namų skaidinį, skirtÄ… %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Pasirinkite, kurį skaidinį sumažinti, o tuomet vilkite juostÄ…, kad pakeistumÄ—te skaidinio dydį</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 bus sumažintas iki %2MiB ir naujas %3MiB skaidinys bus sukurtas sistemai %4. <strong>Select a partition to install on</strong> <strong>Pasirinkite kuriame skaidinyje įdiegti</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Å ioje sistemoje niekur nepavyko rasti EFI skaidinio. PraÅ¡ome grįžti ir naudoti rankinį skaidymÄ…, kad nustatytumÄ—te %1. The EFI system partition at %1 will be used for starting %2. %2 paleidimui bus naudojamas EFI sistemos skaidinys, esantis ties %1. EFI system partition: EFI sistemos skaidinys: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Atrodo, kad Å¡iame įrenginyje nÄ—ra operacinÄ—s sistemos. KÄ… norÄ—tumÄ—te daryti?<br/>PrieÅ¡ atliekant bet kokius pakeitimus atminties įrenginyje, jÅ«s galÄ—site apžvelgti ir patvirtinti savo pasirinkimus. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>IÅ¡trinti diskÄ…</strong><br/>Tai <font color="red">iÅ¡trins</font> visus, pasirinktame atminties įrenginyje, esanÄius duomenis. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Å iame atminties įrenginyje jau yra %1. KÄ… norÄ—tumÄ—te daryti?<br/>PrieÅ¡ atliekant bet kokius pakeitimus atminties įrenginyje, jÅ«s galÄ—site apžvelgti ir patvirtinti savo pasirinkimus. No Swap Be sukeitimų skaidinio Reuse Swap IÅ¡ naujo naudoti sukeitimų skaidinį Swap (no Hibernate) Sukeitimų skaidinys (be užmigdymo) Swap (with Hibernate) Sukeitimų skaidinys (su užmigdymu) Swap to file Sukeitimų failas <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Ä®diegti Å¡alia</strong><br/>Diegimo programa sumažins skaidinį, kad atlaisvintų vietÄ… sistemai %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Pakeisti skaidinį</strong><br/>PakeiÄia skaidinį ir įraÅ¡o %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Å iame atminties įrenginyje jau yra operacinÄ— sistema. KÄ… norÄ—tumÄ—te daryti?<br/>PrieÅ¡ atliekant bet kokius pakeitimus atminties įrenginyje, jÅ«s galÄ—site apžvelgti ir patvirtinti savo pasirinkimus. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Å iame atminties įrenginyje jau yra kelios operacinÄ—s sistemos. KÄ… norÄ—tumÄ—te daryti?<br/>PrieÅ¡ atliekant bet kokius pakeitimus atminties įrenginyje, jÅ«s galÄ—site apžvelgti ir patvirtinti savo pasirinkimus. ClearMountsJob Clear mounts for partitioning operations on %1 IÅ¡valyti prijungimus, siekiant atlikti skaidymo operacijas skaidiniuose %1 Clearing mounts for partitioning operations on %1. IÅ¡valomi prijungimai, siekiant atlikti skaidymo operacijas skaidiniuose %1. Cleared all mounts for %1 Visi %1 prijungimai iÅ¡valyti ClearTempMountsJob Clear all temporary mounts. IÅ¡valyti visus laikinuosius prijungimus. Clearing all temporary mounts. IÅ¡valomi visi laikinieji prijungimai. Cannot get list of temporary mounts. Nepavyksta gauti laikinųjų prijungimų sÄ…raÅ¡o. Cleared all temporary mounts. Visi laikinieji prijungimai iÅ¡valyti. CommandList Could not run command. Nepavyko paleisti komandos. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. Komanda yra vykdoma serverio aplinkoje ir turi žinoti Å¡aknies keliÄ…, taÄiau nÄ—ra apibrėžtas joks rootMountPoint. The command needs to know the user's name, but no username is defined. Komanda turi žinoti naudotojo vardÄ…, taÄiau nebuvo apibrėžtas joks naudotojo vardas. ContextualProcessJob Contextual Processes Job Konteksto procesų užduotis CreatePartitionDialog Create a Partition Sukurti skaidinį MiB MiB Partition &Type: Skaidinio tipas: &Primary &Pirminis E&xtended IÅ¡&plÄ—stinÄ— Fi&le System: Fai&lų sistema: LVM LV name LVM LV pavadinimas Flags: VÄ—liavÄ—lÄ—s: &Mount Point: &Prijungimo vieta: Si&ze: D&ydis: En&crypt Užši&fruoti Logical Loginis Primary Pirminis GPT GPT Mountpoint already in use. Please select another one. Prijungimo taÅ¡kas jau yra naudojamas. PraÅ¡ome pasirinkti kitÄ…. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Sukurti naujÄ… %2MiB skaidinį diske %4 (%3) su %1 failų sistema. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Sukurti naujÄ… <strong>%2MiB</strong> skaidinį diske <strong>%4</strong> (%3) su <strong>%1</strong> failų sistema. Creating new %1 partition on %2. Kuriamas naujas %1 skaidinys ties %2. The installer failed to create partition on disk '%1'. Diegimo programai nepavyko sukurti skaidinio diske '%1'. CreatePartitionTableDialog Create Partition Table Sukurti skaidinių lentelÄ™ Creating a new partition table will delete all existing data on the disk. Naujos skaidinių lentelÄ—s kÅ«rimas iÅ¡trins visus, diske esanÄius, duomenis. What kind of partition table do you want to create? Kokio tipo skaidinių lentelÄ™ norite sukurti? Master Boot Record (MBR) Paleidimo Ä®raÅ¡as (MBR) GUID Partition Table (GPT) GUID Skaidinių lentelÄ— (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Sukurti naujÄ… %1 skaidinių lentelÄ™ ties %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Sukurti naujÄ… <strong>%1</strong> skaidinių lentelÄ™ diske <strong>%2</strong> (%3). Creating new %1 partition table on %2. Kuriama nauja %1 skaidinių lentelÄ— ties %2. The installer failed to create a partition table on %1. Diegimo programai nepavyko %1 sukurti skaidinių lentelÄ—s. CreateUserJob Create user %1 Sukurti naudotojÄ… %1 Create user <strong>%1</strong>. Sukurti naudotojÄ… <strong>%1</strong>. Creating user %1. Kuriamas naudotojas %1. Sudoers dir is not writable. Nepavyko įraÅ¡ymui sukurti katalogo sudoers. Cannot create sudoers file for writing. Nepavyko įraÅ¡ymui sukurti failo sudoers. Cannot chmod sudoers file. Nepavyko pritaikyti chmod failui sudoers. Cannot open groups file for reading. Nepavyko skaitymui atverti grupių failo. CreateVolumeGroupDialog Create Volume Group Sukurti tomų grupÄ™ CreateVolumeGroupJob Create new volume group named %1. Sukurti naujÄ… tomų grupÄ™, pavadinimu %1. Create new volume group named <strong>%1</strong>. Sukurti naujÄ… tomų grupÄ™, pavadinimu <strong>%1</strong>. Creating new volume group named %1. Kuriama nauja tomų grupÄ—, pavadinimu %1. The installer failed to create a volume group named '%1'. Diegimo programai nepavyko sukurti tomų grupÄ—s pavadinimu „%1“. DeactivateVolumeGroupJob Deactivate volume group named %1. Pasyvinti tomų grupÄ™, pavadinimu %1. Deactivate volume group named <strong>%1</strong>. Pasyvinti tomų grupÄ™, pavadinimu <strong>%1</strong>. The installer failed to deactivate a volume group named %1. Diegimo programai nepavyko pasyvinti tomų grupÄ—s, pavadinimu "%1". DeletePartitionJob Delete partition %1. IÅ¡trinti skaidinį %1. Delete partition <strong>%1</strong>. IÅ¡trinti skaidinį <strong>%1</strong>. Deleting partition %1. IÅ¡trinamas skaidinys %1. The installer failed to delete partition %1. Diegimo programai nepavyko iÅ¡trinti skaidinio %1. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. Pasirinktame atminties įrenginyje esanÄios, <strong>skaidinių lentelÄ—s</strong> tipas.<br><br>Vienintelis bÅ«das kaip galima pakeisti skaidinių lentelÄ—s tipÄ… yra iÅ¡trinti ir iÅ¡ naujo sukurti skaidinių lentelÄ™, kas savo ruožtu iÅ¡trina visus atminties įrenginyje esanÄius duomenis.<br>Å i diegimo programa paliks esamÄ… skaidinių lentelÄ™, nebent aiÅ¡kiai pasirinksite kitaip.<br>Jeigu nesate tikri, Å¡iuolaikinÄ—se sistemose pirmenybÄ— yra teikiama GPT tipui. This device has a <strong>%1</strong> partition table. Å iame įrenginyje yra <strong>%1</strong> skaidinių lentelÄ—. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. Tai yra <strong>ciklo</strong> įrenginys.<br><br>Tai pseudo-įrenginys be skaidinių lentelÄ—s, kuris failÄ… padaro prieinamÄ… kaip bloko įrenginį. Tokio tipo sÄ…rankoje, dažniausiai, yra tik viena failų sistema. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. Å iai diegimo programai, pasirinktame atminties įrenginyje, <strong>nepavyko aptikti skaidinių lentelÄ—s</strong>.<br><br>Arba įrenginyje nÄ—ra skaidinių lentelÄ—s, arba ji yra pažeista, arba nežinomo tipo.<br>Å i diegimo programa gali jums sukurti skaidinių lentelÄ™ automatiÅ¡kai arba per rankinio skaidymo puslapį. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Tai yra rekomenduojamas skaidinių lentelÄ—s tipas, skirtas Å¡iuolaikinÄ—ms sistemoms, kurios yra paleidžiamos iÅ¡ <strong>EFI</strong> paleidimo aplinkos. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. <br><br>Šį skaidinių lentelÄ—s tipÄ… yra patartina naudoti tik senesnÄ—se sistemose, kurios yra paleidžiamos iÅ¡ <strong>BIOS</strong> paleidimo aplinkos. Visais kitais atvejais yra rekomenduojamas GPT tipas.<br><strong>Ä®spÄ—jimas:</strong> MBR skaidinių lentelÄ— yra pasenusio MS-DOS eros standarto.<br>Gali bÅ«ti kuriami tik 4 <em>pirminiai</em> skaidiniai, o iÅ¡ tų 4, vienas gali bÅ«ti <em>iÅ¡plÄ—stas</em> skaidinys, kuriame savo ruožtu gali bÅ«ti daug <em>loginių</em> skaidinių. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1 - (%2) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Dracut skirtÄ…jÄ… LUKS konfigÅ«racijÄ… įraÅ¡yti į %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Praleisti LUKS konfigÅ«racijos, kuri yra skirta Dracut, įraÅ¡ymÄ…: "/" skaidinys nÄ—ra užšifruotas Failed to open %1 Nepavyko atverti %1 DummyCppJob Dummy C++ Job Fiktyvi C++ užduotis EditExistingPartitionDialog Edit Existing Partition Keisti jau esamÄ… skaidinį Content: Turinys: &Keep IÅ¡sa&ugoti Format Formatuoti Warning: Formatting the partition will erase all existing data. Ä®spÄ—jimas: Formatuojant skaidinį, sunaikinami visi jame esantys duomenys. &Mount Point: &Prijungimo vieta: Si&ze: Dy&dis: MiB MiB Fi&le System: Fai&lų sistema: Flags: VÄ—liavÄ—lÄ—s: Mountpoint already in use. Please select another one. Prijungimo taÅ¡kas jau yra naudojamas. PraÅ¡ome pasirinkti kitÄ…. EncryptWidget Form Forma En&crypt system Užš&ifruoti sistemÄ… Passphrase SlaptafrazÄ— Confirm passphrase Patvirtinkite slaptafrazÄ™ Please enter the same passphrase in both boxes. PraÅ¡ome abiejuose langeliuose įraÅ¡yti tÄ… paÄiÄ… slaptafrazÄ™. FillGlobalStorageJob Set partition information Nustatyti skaidinio informacijÄ… Install %1 on <strong>new</strong> %2 system partition. Ä®diegti %1 <strong>naujame</strong> %2 sistemos skaidinyje. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Nustatyti <strong>naujÄ…</strong> %2 skaidinį su prijungimo taÅ¡ku <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Diegti %2 sistemÄ…, %3 sistemos skaidinyje <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Nustatyti %3 skaidinį <strong>%1</strong> su prijungimo taÅ¡ku <strong>%2</strong>. Install boot loader on <strong>%1</strong>. Diegti paleidyklÄ™ skaidinyje <strong>%1</strong>. Setting up mount points. Nustatomi prijungimo taÅ¡kai. FinishedPage Form Forma <Restart checkbox tooltip> <Restart checkbox tooltip> &Restart now &Paleisti iÅ¡ naujo dabar <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>Viskas atlikta.</h1><br/>%1 sistema jÅ«sų kompiuteryje jau nustatyta.<br/>Dabar galite pradÄ—ti naudotis savo naujÄ…ja sistema. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <html><head/><body><p>PažymÄ—jus šį langelį, jÅ«sų sistema nedelsiant pasileis iÅ¡ naujo, kai spustelÄ—site <span style="font-style:italic;">Atlikta</span> ar užversite sÄ…rankos programÄ….</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>Viskas atlikta.</h1><br/>%1 sistema jau įdiegta.<br/>Galite iÅ¡ naujo paleisti kompiuterį dabar ir naudotis savo naujÄ…ja sistema; arba galite tÄ™sti naudojimÄ…si %2 sistema demonstracinÄ—je aplinkoje. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <html><head/><body><p>PažymÄ—jus šį langelį, jÅ«sų sistema nedelsiant pasileis iÅ¡ naujo, kai spustelÄ—site <span style="font-style:italic;">Atlikta</span> ar užversite diegimo programÄ….</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>SÄ…ranka nepavyko</h1><br/>%1 nebuvo nustatyta jÅ«sų kompiuteryje.<br/>Klaidos praneÅ¡imas buvo: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Diegimas nepavyko</h1><br/>%1 nebuvo įdiegta jÅ«sų kompiuteryje.<br/>Klaidos praneÅ¡imas buvo: %2. FinishedViewStep Finish Pabaiga Setup Complete SÄ…ranka užbaigta Installation Complete Diegimas užbaigtas The setup of %1 is complete. %1 sÄ…ranka yra užbaigta. The installation of %1 is complete. %1 diegimas yra užbaigtas. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Formatuoti skaidinį %1 (failų sistema: %2, dydis: %3 MiB) diske %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatuoti <strong>%3MiB</strong> skaidinį <strong>%1</strong> su <strong>%2</strong> failų sistema. Formatting partition %1 with file system %2. Formatuojamas skaidinys %1 su %2 failų sistema. The installer failed to format partition %1 on disk '%2'. Diegimo programai nepavyko formatuoti „%2“ disko skaidinio %1. GeneralRequirements has at least %1 GiB available drive space turi bent %1 GiB laisvos vietos diske There is not enough drive space. At least %1 GiB is required. Neužtenka vietos diske. Reikia bent %1 GiB. has at least %1 GiB working memory turi bent %1 GiB darbinÄ—s atminties The system does not have enough working memory. At least %1 GiB is required. Sistemai neužtenka darbinÄ—s atminties. Reikia bent %1 GiB. is plugged in to a power source prijungta prie maitinimo Å¡altinio The system is not plugged in to a power source. Sistema nÄ—ra prijungta prie maitinimo Å¡altinio. is connected to the Internet prijungta prie Interneto The system is not connected to the Internet. Sistema nÄ—ra prijungta prie Interneto. is running the installer as an administrator (root) vykdo diegimo programa administratoriaus (root) teisÄ—mis The setup program is not running with administrator rights. SÄ…rankos programa yra vykdoma be administratoriaus teisių. The installer is not running with administrator rights. Diegimo programa yra vykdoma be administratoriaus teisių. has a screen large enough to show the whole installer turi ekranÄ…, pakankamai didelį, kad rodytų visÄ… diegimo programÄ… The screen is too small to display the setup program. Ekranas yra per mažas, kad bÅ«tų parodyta sÄ…rankos programa. The screen is too small to display the installer. Ekranas yra per mažas, kad bÅ«tų parodyta diegimo programa. HostInfoJob Collecting information about your machine. Renkama informacija apie jÅ«sų kompiuterį. IDJob OEM Batch Identifier OEM partijos identifikatorius Could not create directories <code>%1</code>. Nepavyko sukurti katalogų <code>%1</code>. Could not open file <code>%1</code>. Nepavyko atverti failo <code>%1</code>. Could not write to file <code>%1</code>. Nepavyko raÅ¡yti į failÄ… <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. Sukuriama initramfs naudojant mkinitcpio. InitramfsJob Creating initramfs. Sukuriama initramfs. InteractiveTerminalPage Konsole not installed Konsole neįdiegta Please install KDE Konsole and try again! Ä®diekite KDE Konsole ir bandykite dar kartÄ…! Executing script: &nbsp;<code>%1</code> Vykdomas scenarijus: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script Scenarijus KeyboardPage Set keyboard model to %1.<br/> Nustatyti klaviatÅ«ros modelį kaip %1.<br/> Set keyboard layout to %1/%2. Nustatyti klaviatÅ«ros iÅ¡dÄ—stymÄ… kaip %1/%2. KeyboardViewStep Keyboard KlaviatÅ«ra LCLocaleDialog System locale setting Sistemos lokalÄ—s nustatymas The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. Sistemos lokalÄ—s nustatymas įtakoja, kai kurių komandų eilutÄ—s naudotojo sÄ…sajos elementų, kalbos ir simbolių rinkinį.<br/>Dabar yra nustatyta <strong>%1</strong>. &Cancel &Atsisakyti &OK &Gerai LicensePage Form Forma <h1>License Agreement</h1> <h1>Licencijos sutartis</h1> I accept the terms and conditions above. Sutinku su aukÅ¡Äiau iÅ¡dÄ—stytomis nuostatomis ir sÄ…lygomis. Please review the End User License Agreements (EULAs). PeržiÅ«rÄ—kite galutinio naudotojo licencijos sutartis (EULA). This setup procedure will install proprietary software that is subject to licensing terms. Å i sÄ…ranka įdiegs nuosavybinÄ™ programinÄ™ įrangÄ…, kuriai yra taikomos licencijavimo nuostatos. If you do not agree with the terms, the setup procedure cannot continue. Jeigu nesutinkate su nuostatomis, sÄ…rankos procedÅ«ra negali bÅ«ti tÄ™siama. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Tam, kad pateiktų papildomas ypatybes ir pagerintų naudotojo patirtį, Å¡i sÄ…rankos procedÅ«ra gali įdiegti nuosavybinÄ™ programinÄ™ įrangÄ…, kuriai yra taikomos licencijavimo nuostatos. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Jeigu nesutiksite su nuostatomis, nuosavybinÄ— programinÄ— įranga nebus įdiegta, o vietoj jos, bus naudojamos atvirojo kodo alternatyvos. LicenseViewStep License Licencija LicenseWidget URL: %1 URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 tvarkyklÄ—</strong><br/>iÅ¡ %2 <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 grafikos tvarkyklÄ—</strong><br/><font color="Grey">iÅ¡ %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 narÅ¡yklÄ—s papildinys</strong><br/><font color="Grey">iÅ¡ %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 kodekas</strong><br/><font color="Grey">iÅ¡ %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 paketas</strong><br/><font color="Grey">iÅ¡ %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">iÅ¡ %2</font> File: %1 Failas: %1 Show the license text Rodyti licencijos tekstÄ… Open license agreement in browser. Atverti licencijos sutartį narÅ¡yklÄ—je. Hide license text SlÄ—pti licencijos tekstÄ… LocalePage The system language will be set to %1. Sistemos kalba bus nustatyta į %1. The numbers and dates locale will be set to %1. SkaiÄių ir datų lokalÄ— bus nustatyta į %1. Region: Regionas: Zone: Zona: &Change... K&eisti... Set timezone to %1/%2.<br/> Nustatyti laiko juostÄ… kaip %1/%2.<br/> LocaleViewStep Location Vieta LuksBootKeyFileJob Configuring LUKS key file. KonfigÅ«ruojamas LUKS raktų failas. No partitions are defined. NÄ—ra jokių apibrėžtų skaidinių. Encrypted rootfs setup error Å ifruoto rootfs sÄ…rankos klaida Root partition %1 is LUKS but no passphrase has been set. Å aknies skaidinys %1 yra LUKS, taÄiau nebuvo nustatyta jokia slaptafrazÄ—. Could not create LUKS key file for root partition %1. Nepavyko Å¡akniniam skaidiniui %1 sukurti LUKS rakto failo. Could not configure LUKS key file on partition %1. Nepavyko konfigÅ«ruoti LUKS rakto failo skaidinyje %1. MachineIdJob Generate machine-id. Generuoti machine-id. Configuration Error KonfigÅ«racijos klaida No root mount point is set for MachineId. Nenustatytas joks Å¡aknies prijungimo taÅ¡kas, skirtas MachineId. NetInstallPage Name Pavadinimas Description ApraÅ¡as Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Tinklo diegimas. (IÅ¡jungta: Nepavyksta gauti paketų sÄ…raÅ¡us, patikrinkite savo tinklo ryšį) Network Installation. (Disabled: Received invalid groups data) Tinklo diegimas. (IÅ¡jungtas: Gauti neteisingi grupių duomenys) Network Installation. (Disabled: Incorrect configuration) Tinklo diegimas. (IÅ¡jungtas: Neteisinga konfigÅ«racija) NetInstallViewStep Package selection Paketų pasirinkimas Office software RaÅ¡tinÄ—s programinÄ— įranga Office package RaÅ¡tinÄ—s paketas Browser software NarÅ¡yklÄ—s programinÄ— įranga Browser package NarÅ¡yklÄ—s paketas Web browser Saityno narÅ¡yklÄ— Kernel Branduolys Services Tarnybos Login Prisijungimas Desktop Darbalaukis Applications Programos NotesQmlViewStep Notes Pastabos OEMPage Ba&tch: Par&tija: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>ÄŒia įveskite partijos identifikatorių. Jis bus saugomas paskirties sistemoje.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>OEM konfigÅ«racija</h1><p>KonfigÅ«ruojant paskirties sistemÄ…, Calamares naudos OEM nustatymus.</p></body></html> OEMViewStep OEM Configuration OEM konfigÅ«racija Set the OEM Batch Identifier to <code>%1</code>. Nustatyti OEM partijos identifikatorių į <code>%1</code>. PWQ Password is too short Slaptažodis yra per trumpas Password is too long Slaptažodis yra per ilgas Password is too weak Slaptažodis yra per silpnas Memory allocation error when setting '%1' Atminties paskirstymo klaida, nustatant "%1" Memory allocation error Atminties paskirstymo klaida The password is the same as the old one Slaptažodis yra toks pats kaip ir senas The password is a palindrome Slaptažodis yra palindromas The password differs with case changes only Slaptažodyje skiriasi tik raidžių dydis The password is too similar to the old one Slaptažodis pernelyg panaÅ¡us į senÄ…jį The password contains the user name in some form Slaptažodyje tam tikru pavidalu yra naudotojo vardas The password contains words from the real name of the user in some form Slaptažodyje tam tikra forma yra žodžiai iÅ¡ tikrojo naudotojo vardo The password contains forbidden words in some form Slaptažodyje tam tikra forma yra uždrausti žodžiai The password contains less than %1 digits Slaptažodyje yra mažiau nei %1 skaitmenys The password contains too few digits Slaptažodyje yra per mažai skaitmenų The password contains less than %1 uppercase letters Slaptažodyje yra mažiau nei %1 didžiosios raidÄ—s The password contains too few uppercase letters Slaptažodyje yra per mažai didžiųjų raidžių The password contains less than %1 lowercase letters Slaptažodyje yra mažiau nei %1 mažosios raidÄ—s The password contains too few lowercase letters Slaptažodyje yra per mažai mažųjų raidžių The password contains less than %1 non-alphanumeric characters Slaptažodyje yra mažiau nei %1 neraidiniai ir neskaitiniai simboliai The password contains too few non-alphanumeric characters Slaptažodyje yra per mažai neraidinių ir neskaitinių simbolių The password is shorter than %1 characters Slaptažodyje yra mažiau nei %1 simboliai The password is too short Slaptažodis yra per trumpas The password is just rotated old one Slaptažodis yra toks pats kaip ir senas, tik apverstas The password contains less than %1 character classes Slaptažodyje yra mažiau nei %1 simbolių klasÄ—s The password does not contain enough character classes Slaptažodyje nÄ—ra pakankamai simbolių klasių The password contains more than %1 same characters consecutively Slaptažodyje yra daugiau nei %1 tokie patys simboliai iÅ¡ eilÄ—s The password contains too many same characters consecutively Slaptažodyje yra per daug tokių paÄių simbolių iÅ¡ eilÄ—s The password contains more than %1 characters of the same class consecutively Slaptažodyje yra daugiau nei %1 tos paÄios klasÄ—s simboliai iÅ¡ eilÄ—s The password contains too many characters of the same class consecutively Slaptažodyje yra per daug tos paÄios klasÄ—s simbolių iÅ¡ eilÄ—s The password contains monotonic sequence longer than %1 characters Slaptažodyje yra ilgesnÄ— nei %1 simbolių monotoninÄ— seka The password contains too long of a monotonic character sequence Slaptažodyje yra per ilga monotoninių simbolių seka No password supplied Nepateiktas joks slaptažodis Cannot obtain random numbers from the RNG device Nepavyksta gauti atsitiktinių skaiÄių iÅ¡ RNG įrenginio Password generation failed - required entropy too low for settings Slaptažodžio generavimas nepavyko - reikalinga entropija nustatymams yra per maža The password fails the dictionary check - %1 Slaptažodis nepraeina žodyno patikros - %1 The password fails the dictionary check Slaptažodis nepraeina žodyno patikros Unknown setting - %1 Nežinomas nustatymas - %1 Unknown setting Nežinomas nustatymas Bad integer value of setting - %1 Bloga nustatymo sveikojo skaiÄiaus reikÅ¡mÄ— - %1 Bad integer value Bloga sveikojo skaiÄiaus reikÅ¡mÄ— Setting %1 is not of integer type Nustatymas %1 nÄ—ra sveikojo skaiÄiaus tipo Setting is not of integer type Nustatymas nÄ—ra sveikojo skaiÄiaus tipo Setting %1 is not of string type Nustatymas %1 nÄ—ra eilutÄ—s tipo Setting is not of string type Nustatymas nÄ—ra eilutÄ—s tipo Opening the configuration file failed KonfigÅ«racijos failo atvÄ—rimas nepavyko The configuration file is malformed KonfigÅ«racijos failas yra netaisyklingas Fatal failure Lemtingoji klaida Unknown error Nežinoma klaida Password is empty Slaptažodis yra tuÅ¡Äias PackageChooserPage Form Forma Product Name Produkto pavadinimas TextLabel Teksto etiketÄ— Long Product Description Ilgas produkto apraÅ¡as Package Selection Paketų pasirinkimas Please pick a product from the list. The selected product will be installed. Pasirinkite iÅ¡ sÄ…raÅ¡o produktÄ…. Pasirinktas produktas bus įdiegtas. PackageChooserViewStep Packages Paketai Page_Keyboard Form Forma Keyboard Model: KlaviatÅ«ros modelis: Type here to test your keyboard RaÅ¡ykite Äia ir iÅ¡bandykite savo klaviatÅ«rÄ… Page_UserSetup Form Forma What is your name? Koks jÅ«sų vardas? What name do you want to use to log in? Kokį vardÄ… norite naudoti prisijungimui? Choose a password to keep your account safe. Apsaugokite savo paskyrÄ… slaptažodžiu <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>Norint įsitikinti, kad raÅ¡ydami slaptažodį nesuklydote, įraÅ¡ykite tÄ… patį slaptažodį du kartus. Stiprus slaptažodis yra raidžių, skaiÄių ir punktuacijos ženklų miÅ¡inys, jis turi bÅ«ti mažiausiai aÅ¡tuonių simbolių, be to, turÄ—tų bÅ«ti reguliariai keiÄiamas.</small> What is the name of this computer? Koks Å¡io kompiuterio vardas? Your Full Name JÅ«sų visas vardas login prisijungimas <small>This name will be used if you make the computer visible to others on a network.</small> <small>Å is vardas bus naudojamas, jeigu padarysite savo kompiuterį matomÄ… kitiems naudotojams tinkle.</small> Computer Name Kompiuterio vardas Password Slaptažodis Repeat Password Pakartokite slaptažodį When this box is checked, password-strength checking is done and you will not be able to use a weak password. PažymÄ—jus šį langelį, bus atliekamas slaptažodžio stiprumo tikrinimas ir negalÄ—site naudoti silpnÄ… slaptažodį. Require strong passwords. Reikalauti stiprių slaptažodžių. Log in automatically without asking for the password. Prisijungti automatiÅ¡kai, neklausiant slaptažodžio. Use the same password for the administrator account. Naudoti tokį patį slaptažodį administratoriaus paskyrai. Choose a password for the administrator account. Pasirinkite slaptažodį administratoriaus paskyrai. <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Norint įsitikinti, kad raÅ¡ydami slaptažodį nesuklydote, įraÅ¡ykite tÄ… patį slaptažodį du kartus.</small> PartitionLabelsView Root Å aknies Home Namų Boot Paleidimo EFI system EFI sistema Swap Sukeitimų (swap) New partition for %1 Naujas skaidinys, skirtas %1 New partition Naujas skaidinys %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space Laisva vieta New partition Naujas skaidinys Name Pavadinimas File System Failų sistema Mount Point Prijungimo vieta Size Dydis PartitionPage Form Forma Storage de&vice: Atminties įre&nginys: &Revert All Changes &Sugrąžinti visus pakeitimus New Partition &Table Nauja skaidinių &lentelÄ— Cre&ate Su&kurti &Edit &Keisti &Delete IÅ¡&trinti New Volume Group Nauja tomų grupÄ— Resize Volume Group Keisti tomų grupÄ—s dydį Deactivate Volume Group Pasyvinti tomų grupÄ™ Remove Volume Group Å alinti tomų grupÄ™ I&nstall boot loader on: Ä®&diegti paleidyklÄ™ skaidinyje: Are you sure you want to create a new partition table on %1? Ar tikrai %1 norite sukurti naujÄ… skaidinių lentelÄ™? Can not create new partition Nepavyksta sukurti naujÄ… skaidinį The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. Skaidinių lentelÄ—je ties %1 jau yra %2 pirminiai skaidiniai ir daugiau nebegali bÅ«ti pridÄ—ta. PaÅ¡alinkite vienÄ… pirminį skaidinį ir vietoj jo, pridÄ—kite iÅ¡plÄ—stÄ… skaidinį. PartitionViewStep Gathering system information... Renkama sistemos informacija... Partitions Skaidiniai Install %1 <strong>alongside</strong> another operating system. Diegti %1 <strong>Å¡alia</strong> kitos operacinÄ—s sistemos. <strong>Erase</strong> disk and install %1. <strong>IÅ¡trinti</strong> diskÄ… ir diegti %1. <strong>Replace</strong> a partition with %1. <strong>Pakeisti</strong> skaidinį, įraÅ¡ant %1. <strong>Manual</strong> partitioning. <strong>Rankinis</strong> skaidymas. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Ä®diegti %1 <strong>Å¡alia</strong> kitos operacinÄ—s sistemos diske <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>IÅ¡trinti</strong> diskÄ… <strong>%2</strong> (%3) ir diegti %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Pakeisti</strong> skaidinį diske <strong>%2</strong> (%3), įraÅ¡ant %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>Rankinis</strong> skaidymas diske <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Diskas <strong>%1</strong> (%2) Current: Dabartinis: After: Po: No EFI system partition configured NÄ—ra sukonfigÅ«ruoto EFI sistemos skaidinio An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. EFI sistemos skaidinys yra bÅ«tinas, norint paleisti %1.<br/><br/>Tam, kad sukonfigÅ«ruotumÄ—te EFI sistemos skaidinį, grįžkite atgal ir pasirinkite arba sukurkite FAT32 failų sistemÄ… su įjungta <strong>esp</strong> vÄ—liavÄ—le ir <strong>%2</strong> prijungimo taÅ¡ku.<br/><br/>JÅ«s galite tÄ™sti ir nenustatÄ™ EFI sistemos skaidinio, taÄiau tokiu atveju, gali nepavykti paleisti jÅ«sų sistemos. EFI system partition flag not set Nenustatyta EFI sistemos skaidinio vÄ—liavÄ—lÄ— An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI sistemos skaidinys yra bÅ«tinas, norint paleisti %1.<br/><br/>Skaidinys buvo sukonfigÅ«ruotas su prijungimo taÅ¡ku <strong>%2</strong>, taÄiau jo <strong>esp</strong> vÄ—liavÄ—lÄ— yra nenustatyta.<br/>Tam, kad nustatytumÄ—te vÄ—liavÄ—lÄ™, grįžkite atgal ir redaguokite skaidinį.<br/><br/>JÅ«s galite tÄ™sti ir nenustatÄ™ vÄ—liavÄ—lÄ—s, taÄiau tokiu atveju, gali nepavykti paleisti jÅ«sų sistemos. Boot partition not encrypted Paleidimo skaidinys nÄ—ra užšifruotas A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. Kartu su užšifruotu Å¡aknies skaidiniu, buvo nustatytas atskiras paleidimo skaidinys, taÄiau paleidimo skaidinys nÄ—ra užšifruotas.<br/><br/>DÄ—l tokios sÄ…rankos iÅ¡kyla tam tikrų saugumo klausimų, kadangi svarbÅ«s sisteminiai failai yra laikomi neužšifruotame skaidinyje.<br/>Jeigu norite, galite tÄ™sti, taÄiau failų sistemos atrakinimas įvyks vÄ—liau, sistemos paleidimo metu.<br/>NorÄ—dami užšifruoti paleidimo skaidinį, grįžkite atgal ir sukurkite jį iÅ¡ naujo bei skaidinių kÅ«rimo lange pažymÄ—kite parinktį <strong>Užšifruoti</strong>. has at least one disk device available. turi bent vienÄ… prieinamÄ… disko įrenginį. There are no partitions to install on. NÄ—ra skaidinių į kuriuos diegti. PlasmaLnfJob Plasma Look-and-Feel Job Plasma iÅ¡vaizdos ir turinio užduotis Could not select KDE Plasma Look-and-Feel package Nepavyko pasirinkti KDE Plasma iÅ¡vaizdos ir turinio paketo PlasmaLnfPage Form Forma Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Pasirinkite KDE Plasma darbalaukio iÅ¡vaizdÄ… ir turinį. Taip pat galite praleisti šį žingsnį ir konfigÅ«ruoti iÅ¡vaizdÄ… ir turinį, kai sistema bus nustatyta. SpustelÄ—jus ant tam tikro iÅ¡vaizdos ir turinio pasirinkimo, jums bus parodyta tiesioginÄ— peržiÅ«rÄ…. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Pasirinkite KDE Plasma darbalaukio iÅ¡vaizdÄ… ir turinį. Taip pat galite praleisti šį žingsnį ir konfigÅ«ruoti iÅ¡vaizdÄ… ir turinį, kai sistema bus įdiegta. SpustelÄ—jus ant tam tikro iÅ¡vaizdos ir turinio pasirinkimo, jums bus parodyta tiesioginÄ— peržiÅ«rÄ…. PlasmaLnfViewStep Look-and-Feel IÅ¡vaizda ir turinys PreserveFiles Saving files for later ... Ä®raÅ¡omi failai vÄ—lesniam naudojimui ... No files configured to save for later. NÄ—ra sukonfigÅ«ruota įraÅ¡yti jokius failus vÄ—lesniam naudojimui. Not all of the configured files could be preserved. Ne visus iÅ¡ sukonfigÅ«ruotų failų pavyko iÅ¡saugoti. ProcessResult There was no output from the command. Nebuvo jokios iÅ¡vesties iÅ¡ komandos. Output: IÅ¡vestis: External command crashed. IÅ¡orinÄ— komanda užstrigo. Command <i>%1</i> crashed. Komanda <i>%1</i> užstrigo. External command failed to start. Nepavyko paleisti iÅ¡orinÄ—s komandos. Command <i>%1</i> failed to start. Nepavyko paleisti komandos <i>%1</i>. Internal error when starting command. Paleidžiant komandÄ…, įvyko vidinÄ— klaida. Bad parameters for process job call. Blogi parametrai proceso užduoties iÅ¡kvietai. External command failed to finish. Nepavyko pabaigti iÅ¡orinÄ—s komandos. Command <i>%1</i> failed to finish in %2 seconds. Nepavyko per %2 sek. pabaigti komandos <i>%1</i>. External command finished with errors. IÅ¡orinÄ— komanda pabaigta su klaidomis. Command <i>%1</i> finished with exit code %2. Komanda <i>%1</i> pabaigta su išėjimo kodu %2. QObject Default Keyboard Model Numatytasis klaviatÅ«ros modelis Default Numatytasis unknown nežinoma extended iÅ¡plÄ—sta unformatted nesutvarkyta swap sukeitimų (swap) Unpartitioned space or unknown partition table Nesuskaidyta vieta arba nežinoma skaidinių lentelÄ— (no mount point) (nÄ—ra prijungimo taÅ¡ko) Requirements checking for module <i>%1</i> is complete. Reikalavimų tikrinimas <i>%1</i> moduliui yra užbaigtas. %1 (%2) language[name] (country[name]) %1 (%2) No product NÄ—ra produkto No description provided. Nepateikta jokio apraÅ¡o. File not found Failas nerastas Path <pre>%1</pre> must be an absolute path. Kelias <pre>%1</pre> privalo bÅ«ti absoliutus kelias. Could not create new random file <pre>%1</pre>. Nepavyko sukurti naujo atsitiktinio failo <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Å alinti tomų grupÄ™, pavadinimu %1. Remove Volume Group named <strong>%1</strong>. Å alinti tomų grupÄ™, pavadinimu <strong>%1</strong>. The installer failed to remove a volume group named '%1'. Diegimo programai nepavyko paÅ¡alinti tomų grupÄ—s, pavadinimu "%1". ReplaceWidget Form Forma Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Pasirinkite, kur norÄ—tumÄ—te įdiegti %1.<br/><font color="red">Ä®spÄ—jimas: </font>tai iÅ¡trins visus, pasirinktame skaidinyje esanÄius, failus. The selected item does not appear to be a valid partition. Pasirinktas elementas neatrodo kaip teisingas skaidinys. %1 cannot be installed on empty space. Please select an existing partition. %1 negali bÅ«ti įdiegta laisvoje vietoje. PraÅ¡ome pasirinkti esamÄ… skaidinį. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 negali bÅ«ti įdiegta iÅ¡plÄ—stame skaidinyje. PraÅ¡ome pasirinkti esamÄ… pirminį ar loginį skaidinį. %1 cannot be installed on this partition. %1 negali bÅ«ti įdiegta Å¡iame skaidinyje. Data partition (%1) Duomenų skaidinys (%1) Unknown system partition (%1) Nežinomas sistemos skaidinys (%1) %1 system partition (%2) %1 sistemos skaidinys (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>Skaidinys %1 yra pernelyg mažas sistemai %2. PraÅ¡ome pasirinkti skaidinį, kurio dydis siektų bent %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/>Å ioje sistemoje niekur nepavyko rasti EFI skaidinio. PraÅ¡ome grįžti ir naudoti rankinį skaidymÄ…, kad nustatytumÄ—te %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>%1 sistema bus įdiegta skaidinyje %2.<br/><font color="red">Ä®spÄ—jimas: </font>visi duomenys skaidinyje %2 bus prarasti. The EFI system partition at %1 will be used for starting %2. %2 paleidimui bus naudojamas EFI sistemos skaidinys, esantis %1. EFI system partition: EFI sistemos skaidinys: ResizeFSJob Resize Filesystem Job Failų sistemos dydžio keitimo užduotis Invalid configuration Neteisinga konfigÅ«racija The file-system resize job has an invalid configuration and will not run. Failų sistemos dydžio keitimo užduotyje yra neteisinga konfigÅ«racija ir užduotis nebus paleista. KPMCore not Available KPMCore neprieinama Calamares cannot start KPMCore for the file-system resize job. Diegimo programai Calamares nepavyksta paleisti KPMCore, kuri skirta failų sistemos dydžio keitimo užduoÄiai. Resize Failed Dydžio pakeisti nepavyko The filesystem %1 could not be found in this system, and cannot be resized. Å ioje sistemoje nepavyko rasti %1 failų sistemos ir nepavyko pakeisti jos dydį. The device %1 could not be found in this system, and cannot be resized. Å ioje sistemoje nepavyko rasti %1 įrenginio ir nepavyko pakeisti jo dydį. The filesystem %1 cannot be resized. %1 failų sistemos dydis negali bÅ«ti pakeistas. The device %1 cannot be resized. %1 įrenginio dydis negali bÅ«ti pakeistas. The filesystem %1 must be resized, but cannot. %1 failų sistemos dydis privalo bÅ«ti pakeistas, taÄiau tai negali bÅ«ti atlikta. The device %1 must be resized, but cannot %1 įrenginio dydis privalo bÅ«ti pakeistas, taÄiau tai negali bÅ«ti atlikta ResizePartitionJob Resize partition %1. Keisti skaidinio %1 dydį. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Pakeisti <strong>%2MiB</strong> skaidinio <strong>%1</strong> dydį iki <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. KeiÄiamas %2MiB skaidinio %1 dydis iki %3MiB. The installer failed to resize partition %1 on disk '%2'. Diegimo programai nepavyko pakeisti skaidinio %1 dydį diske '%2'. ResizeVolumeGroupDialog Resize Volume Group Keisti tomų grupÄ—s dydį ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Keisti tomų grupÄ—s, pavadinimu %1, dydį iÅ¡ %2 į %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. Keisti tomų grupÄ—s, pavadinimu <strong>%1</strong>, dydį iÅ¡ <strong>%2</strong> į <strong>%3</strong>. The installer failed to resize a volume group named '%1'. Diegimo programai nepavyko pakeisti tomų grupÄ—s, kurios pavadinimas „%1“, dydžio. ResultsListDialog For best results, please ensure that this computer: NorÄ—dami pasiekti geriausių rezultatų, įsitikinkite kad Å¡is kompiuteris: System requirements Sistemos reikalavimai ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> Å is kompiuteris netenkina minimalių %1 nustatymo reikalavimų.<br/>SÄ…ranka negali bÅ«ti tÄ™siama. <a href="#details">IÅ¡samiau...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> Å is kompiuteris netenkina minimalių %1 diegimo reikalavimų.<br/>Diegimas negali bÅ«ti tÄ™siamas. <a href="#details">IÅ¡samiau...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. Å is kompiuteris netenkina kai kurių %1 nustatymui rekomenduojamų reikalavimų.<br/>SÄ…rankÄ… galima tÄ™sti, taÄiau kai kurios funkcijos gali bÅ«ti iÅ¡jungtos. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. Å is kompiuteris netenkina kai kurių %1 diegimui rekomenduojamų reikalavimų.<br/>DiegimÄ… galima tÄ™sti, taÄiau kai kurios funkcijos gali bÅ«ti iÅ¡jungtos. This program will ask you some questions and set up %2 on your computer. Programa užduos kelis klausimus ir padÄ—s įsidiegti %2. ScanningDialog Scanning storage devices... PeržiÅ«rimi atminties įrenginiai... Partitioning Skaidymas SetHostNameJob Set hostname %1 Nustatyti kompiuterio vardÄ… %1 Set hostname <strong>%1</strong>. Nustatyti kompiuterio vardÄ… <strong>%1</strong>. Setting hostname %1. Nustatomas kompiuterio vardas %1. Internal Error VidinÄ— klaida Cannot write hostname to target system Nepavyko įraÅ¡yti kompiuterio vardo į paskirties sistemÄ… SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Nustatyti klaviatÅ«ros modelį kaip %1, o iÅ¡dÄ—stymÄ… kaip %2-%3 Failed to write keyboard configuration for the virtual console. Nepavyko įraÅ¡yti klaviatÅ«ros sÄ…rankos virtualiam pultui. Failed to write to %1 Nepavyko įraÅ¡yti į %1 Failed to write keyboard configuration for X11. Nepavyko įraÅ¡yti klaviatÅ«ros sÄ…rankos X11 aplinkai. Failed to write keyboard configuration to existing /etc/default directory. Nepavyko įraÅ¡yti klaviatÅ«ros konfigÅ«racijos į esamÄ… /etc/default katalogÄ…. SetPartFlagsJob Set flags on partition %1. Nustatyti vÄ—liavÄ—les skaidinyje %1. Set flags on %1MiB %2 partition. Nustatyti vÄ—liavÄ—les %1MiB skaidinyje %2. Set flags on new partition. Nustatyti vÄ—liavÄ—les naujame skaidinyje. Clear flags on partition <strong>%1</strong>. IÅ¡valyti vÄ—liavÄ—les skaidinyje <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. IÅ¡valyti vÄ—liavÄ—les %1MiB skaidinyje <strong>%2</strong>. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. PažymÄ—ti vÄ—liavÄ—le %1MiB skaidinį <strong>%2</strong> kaip <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. IÅ¡valomos vÄ—liavÄ—lÄ—s %1MiB skaidinyje<strong>%2</strong>. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Nustatomos vÄ—liavÄ—lÄ—s <strong>%3</strong>, %1MiB skaidinyje <strong>%2</strong>. Clear flags on new partition. IÅ¡valyti vÄ—liavÄ—les naujame skaidinyje. Flag partition <strong>%1</strong> as <strong>%2</strong>. PažymÄ—ti vÄ—liavÄ—le skaidinį <strong>%1</strong> kaip <strong>%2</strong>. Flag new partition as <strong>%1</strong>. PažymÄ—ti vÄ—liavÄ—le naujÄ… skaidinį kaip <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. IÅ¡valomos vÄ—liavÄ—lÄ—s skaidinyje <strong>%1</strong>. Clearing flags on new partition. IÅ¡valomos vÄ—liavÄ—lÄ—s naujame skaidinyje. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Nustatomos <strong>%2</strong> vÄ—liavÄ—lÄ—s skaidinyje <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. Nustatomos vÄ—liavÄ—lÄ—s <strong>%1</strong> naujame skaidinyje. The installer failed to set flags on partition %1. Diegimo programai nepavyko nustatyti vÄ—liavÄ—lių skaidinyje %1. SetPasswordJob Set password for user %1 Nustatyti naudotojo %1 slaptažodį Setting password for user %1. Nustatomas slaptažodis naudotojui %1. Bad destination system path. Neteisingas paskirties sistemos kelias. rootMountPoint is %1 rootMountPoint yra %1 Cannot disable root account. Nepavyksta iÅ¡jungti administratoriaus (root) paskyros. passwd terminated with error code %1. komanda passwd nutraukÄ— darbÄ… dÄ—l klaidos kodo %1. Cannot set password for user %1. Nepavyko nustatyti slaptažodžio naudotojui %1. usermod terminated with error code %1. komanda usermod nutraukÄ— darbÄ… dÄ—l klaidos kodo %1. SetTimezoneJob Set timezone to %1/%2 Nustatyti laiko juostÄ… kaip %1/%2 Cannot access selected timezone path. Nepavyko pasiekti pasirinktos laiko zonos Bad path: %1 Neteisingas kelias: %1 Cannot set timezone. Negalima nustatyti laiko juostas. Link creation failed, target: %1; link name: %2 Nuorodos sukÅ«rimas nepavyko, paskirtis: %1; nuorodos pavadinimas: %2 Cannot set timezone, Nepavyksta nustatyti laiko juostos, Cannot open /etc/timezone for writing Nepavyksta įraÅ¡ymui atidaryti failo /etc/timezone ShellProcessJob Shell Processes Job Apvalkalo procesų užduotis SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage This is an overview of what will happen once you start the setup procedure. Tai yra apžvalga to, kas įvyks, prasidÄ—jus sÄ…rankos procedÅ«rai. This is an overview of what will happen once you start the install procedure. Tai yra apžvalga to, kas įvyks, prasidÄ—jus diegimo procedÅ«rai. SummaryViewStep Summary SuvestinÄ— TrackingInstallJob Installation feedback Grįžtamasis ryÅ¡ys apie diegimÄ… Sending installation feedback. SiunÄiamas grįžtamasis ryÅ¡ys apie diegimÄ…. Internal error in install-tracking. VidinÄ— klaida diegimo sekime. HTTP request timed out. BaigÄ—si HTTP užklausos laikas. TrackingMachineNeonJob Machine feedback Grįžtamasis ryÅ¡ys apie kompiuterį Configuring machine feedback. KonfigÅ«ruojamas grįžtamasis ryÅ¡ys apie kompiuterį. Error in machine feedback configuration. Klaida grįžtamojo ryÅ¡io apie kompiuterį konfigÅ«ravime. Could not configure machine feedback correctly, script error %1. Nepavyko teisingai sukonfigÅ«ruoti grįžtamojo ryÅ¡io apie kompiuterį, scenarijaus klaida %1. Could not configure machine feedback correctly, Calamares error %1. Nepavyko teisingai sukonfigÅ«ruoti grįžtamojo ryÅ¡io apie kompiuterį, Calamares klaida %1. TrackingPage Form Forma Placeholder Vietaženklis <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>Tai pažymÄ—dami, nesiųsite <span style=" font-weight:600;">visiÅ¡kai jokios informacijos</span> apie savo diegimÄ….</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">IÅ¡samesnei informacijai apie naudotojų grįžtamÄ…jį ryšį, spustelÄ—kite Äia</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. Diegimo sekimas padeda %1 matyti kiek jie turi naudotojų, į kokiÄ… aparatinÄ™ įrangÄ… naudotojai diegia %1 ir (su paskutiniais dviejais parametrais žemiau), gauti tÄ™stinÄ™ informacijÄ… apie pageidaujamas programas. NorÄ—dami matyti kas bus siunÄiama, Å¡alia kiekvienos srities spustelÄ—kite žinyno piktogramÄ…. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. Tai pažymÄ—dami, iÅ¡siųsite informacijÄ… apie savo diegimÄ… ir aparatinÄ™ įrangÄ…. Å i informacija bus <b>iÅ¡siųsta tik vienÄ… kartÄ…</b>, užbaigus diegimÄ…. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. Tai pažymÄ—dami, <b>periodiÅ¡kai</b> siųsite informacijÄ… apie savo diegimÄ…, aparatinÄ™ įrangÄ… ir programas į %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. Tai pažymÄ—dami, <b>reguliariai</b> siųsite informacijÄ… apie savo diegimÄ…, aparatinÄ™ įrangÄ…, programas ir naudojimo bÅ«dus į %1. TrackingViewStep Feedback Grįžtamasis ryÅ¡ys UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Jei Å¡iuo kompiuteriu naudosis keli žmonÄ—s, po sÄ…rankos galite sukurti papildomas paskyras.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Jei Å¡iuo kompiuteriu naudosis keli žmonÄ—s, po diegimo galite sukurti papildomas paskyras.</small> Your username is too long. JÅ«sų naudotojo vardas yra pernelyg ilgas. Your username must start with a lowercase letter or underscore. JÅ«sų naudotojo vardas privalo prasidÄ—ti mažąja raide arba pabraukimo brÅ«kÅ¡niu. Only lowercase letters, numbers, underscore and hyphen are allowed. Yra leidžiamos tik mažosios raidÄ—s, skaitmenys, pabraukimo brÅ«kÅ¡niai ir brÅ«kÅ¡neliai. Only letters, numbers, underscore and hyphen are allowed. Yra leidžiamos tik raidÄ—s, skaitmenys, pabraukimo brÅ«kÅ¡niai ir brÅ«kÅ¡neliai. Your hostname is too short. JÅ«sų kompiuterio vardas yra pernelyg trumpas. Your hostname is too long. JÅ«sų kompiuterio vardas yra pernelyg ilgas. Your passwords do not match! JÅ«sų slaptažodžiai nesutampa! UsersViewStep Users Naudotojai VariantModel Key Raktas Value ReikÅ¡mÄ— VolumeGroupBaseDialog Create Volume Group Sukurti tomų grupÄ™ List of Physical Volumes Fizinių tomų sÄ…raÅ¡as Volume Group Name: Tomų grupÄ—s pavadinimas: Volume Group Type: Tomų grupÄ—s tipas: Physical Extent Size: Fizinio masto dydis: MiB MiB Total Size: Bendras dydis: Used Size: Panaudota: Total Sectors: IÅ¡ viso sektorių: Quantity of LVs: Loginių tomų skaiÄius: WelcomePage Form Forma Select application and system language Pasirinkite programų ir sistemos kalbÄ… Open donations website Atverti paaukojimų internetinÄ™ svetainÄ™ &Donate &Paaukoti Open help and support website Atverti pagalbos ir palaikymo internetinÄ™ svetainÄ™ Open issues and bug-tracking website Atverti strigÄių ir klaidų sekimo internetinÄ™ svetainÄ™ Open release notes website Atverti laidos informacijos internetinÄ™ svetainÄ™ &Release notes Lai&dos informacija &Known issues Ž&inomos problemos &Support &Palaikymas &About &Apie <h1>Welcome to the %1 installer.</h1> <h1>Jus sveikina %1 diegimo programa.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Jus sveikina Calamares diegimo programa, skirta %1 sistemai.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Jus sveikina Calamares sÄ…rankos programa, skirta %1 sistemai.</h1> <h1>Welcome to %1 setup.</h1> <h1>Jus sveikina %1 sÄ…ranka.</h1> About %1 setup Apie %1 sÄ…rankÄ… About %1 installer Apie %1 diegimo programÄ… <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. <h1>%1</h1><br/><strong>%2<br/>skirta %3</strong><br/><br/>Autorių teisÄ—s 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Autorių teisÄ—s 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>DÄ—kojame <a href="https://calamares.io/team/">Calamares komandai</a> bei <a href="https://www.transifex.com/calamares/calamares/">Calamares vertÄ—jų komandai</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> plÄ—tojimÄ… remia <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - IÅ¡laisvinanti programinÄ— įrangÄ…. %1 support %1 palaikymas WelcomeQmlViewStep Welcome Pasisveikinimas WelcomeViewStep Welcome Pasisveikinimas notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>Tai yra pavyzdinÄ— laidos informacija.</p> welcomeq <h3>%1 <quote>%2</quote></h3> <h3>%1 <quote>%2</quote></h3> About Apie Support Palaikymas Known issues Žinomos problemos Release notes Laidos informacija Donate Paaukoti calamares-3.2.20/lang/calamares_mk.ts000066400000000000000000004570561362604102500174560ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. BootLoaderModel Master Boot Record of %1 Boot Partition System Partition Do not install a boot loader %1 (%2) Calamares::BlankViewStep Blank Page Празна Страна Calamares::DebugWindow Form GlobalStorage JobQueue Modules Type: none Interface: Tools Ðлатки Reload Stylesheet Widget Tree Debug information Calamares::ExecutionViewStep Set up Install ИнÑталирај Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Готово Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Calamares::PythonJob Running %1 operation. Bad working directory path Working directory %1 for python job %2 is not readable. Bad main script file Main script file %1 for python job %2 is not readable. Boost.Python error in job "%1". Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager &Back &Next &Cancel Cancel setup without changing the system. Cancel installation without changing the system. Setup Failed Would you like to paste the install log to the web? Install Log Paste URL The upload was unsuccessful. No web-paste was done. Calamares Initialization Failed %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. <br/>The following modules could not be loaded: Continue with installation? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Set up &Install Setup is complete. Close the setup program. Cancel setup? Cancel installation? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. &Yes &No &Close Continue with setup? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> &Install now Go &back &Done The installation is complete. Close the installer. ИнÑталацијата е готова. ИÑклучете го инÑталерот. Error Грешка Installation Failed CalamaresPython::Helper Unknown exception type unparseable Python error unparseable Python traceback Unfetchable Python error. CalamaresUtils Install log posted to: %1 CalamaresWindow %1 Setup Program %1 Installer Show debug information CheckerContainer Gathering system information... ChoicePage Form After: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Boot loader location: Select storage de&vice: Current: Reuse %1 as home partition for %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. <strong>Select a partition to install on</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. The EFI system partition at %1 will be used for starting %2. EFI system partition: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. No Swap Reuse Swap Swap (no Hibernate) Swap (with Hibernate) Swap to file <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. ClearMountsJob Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 ClearTempMountsJob Clear all temporary mounts. Clearing all temporary mounts. Cannot get list of temporary mounts. Cleared all temporary mounts. CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition MiB Partition &Type: &Primary E&xtended Fi&le System: LVM LV name Flags: &Mount Point: Si&ze: En&crypt Logical Primary GPT Mountpoint already in use. Please select another one. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. The installer failed to create partition on disk '%1'. CreatePartitionTableDialog Create Partition Table Creating a new partition table will delete all existing data on the disk. What kind of partition table do you want to create? Master Boot Record (MBR) GUID Partition Table (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Creating new %1 partition table on %2. The installer failed to create a partition table on %1. CreateUserJob Create user %1 Create user <strong>%1</strong>. Creating user %1. Sudoers dir is not writable. Cannot create sudoers file for writing. Cannot chmod sudoers file. Cannot open groups file for reading. CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. Delete partition <strong>%1</strong>. Deleting partition %1. The installer failed to delete partition %1. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. This device has a <strong>%1</strong> partition table. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - (%2) device[name] - (device-node[name]) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Failed to open %1 DummyCppJob Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Content: &Keep Format Warning: Formatting the partition will erase all existing data. &Mount Point: Si&ze: MiB Fi&le System: Flags: Mountpoint already in use. Please select another one. EncryptWidget Form En&crypt system Passphrase Confirm passphrase Please enter the same passphrase in both boxes. FillGlobalStorageJob Set partition information Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Install boot loader on <strong>%1</strong>. Setting up mount points. FinishedPage Form <Restart checkbox tooltip> &Restart now <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. FinishedViewStep Finish Setup Complete Installation Complete The setup of %1 is complete. The installation of %1 is complete. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatting partition %1 with file system %2. The installer failed to format partition %1 on disk '%2'. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source The system is not plugged in to a power source. is connected to the Internet The system is not connected to the Internet. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Please install KDE Konsole and try again! Executing script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script KeyboardPage Set keyboard model to %1.<br/> Set keyboard layout to %1/%2. KeyboardViewStep Keyboard LCLocaleDialog System locale setting The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. &Cancel &OK LicensePage Form <h1>License Agreement</h1> I accept the terms and conditions above. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> File: %1 Show the license text Open license agreement in browser. Hide license text LocalePage The system language will be set to %1. The numbers and dates locale will be set to %1. Region: Zone: &Change... Set timezone to %1/%2.<br/> LocaleViewStep Location LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Configuration Error No root mount point is set for MachineId. NetInstallPage Name Description Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Incorrect configuration) NetInstallViewStep Package selection Office software Office package Browser software Browser package Web browser Kernel Services Login Desktop Applications NotesQmlViewStep Notes OEMPage Ba&tch: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> OEMViewStep OEM Configuration Set the OEM Batch Identifier to <code>%1</code>. PWQ Password is too short Password is too long Password is too weak Memory allocation error when setting '%1' Memory allocation error The password is the same as the old one The password is a palindrome The password differs with case changes only The password is too similar to the old one The password contains the user name in some form The password contains words from the real name of the user in some form The password contains forbidden words in some form The password contains less than %1 digits The password contains too few digits The password contains less than %1 uppercase letters The password contains too few uppercase letters The password contains less than %1 lowercase letters The password contains too few lowercase letters The password contains less than %1 non-alphanumeric characters The password contains too few non-alphanumeric characters The password is shorter than %1 characters The password is too short The password is just rotated old one The password contains less than %1 character classes The password does not contain enough character classes The password contains more than %1 same characters consecutively The password contains too many same characters consecutively The password contains more than %1 characters of the same class consecutively The password contains too many characters of the same class consecutively The password contains monotonic sequence longer than %1 characters The password contains too long of a monotonic character sequence No password supplied Cannot obtain random numbers from the RNG device Password generation failed - required entropy too low for settings The password fails the dictionary check - %1 The password fails the dictionary check Unknown setting - %1 Unknown setting Bad integer value of setting - %1 Bad integer value Setting %1 is not of integer type Setting is not of integer type Setting %1 is not of string type Setting is not of string type Opening the configuration file failed The configuration file is malformed Fatal failure Unknown error Password is empty PackageChooserPage Form Product Name TextLabel Long Product Description Package Selection Please pick a product from the list. The selected product will be installed. PackageChooserViewStep Packages Page_Keyboard Form Keyboard Model: Type here to test your keyboard Page_UserSetup Form What is your name? What name do you want to use to log in? Choose a password to keep your account safe. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> What is the name of this computer? Your Full Name login <small>This name will be used if you make the computer visible to others on a network.</small> Computer Name Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Use the same password for the administrator account. Choose a password for the administrator account. <small>Enter the same password twice, so that it can be checked for typing errors.</small> PartitionLabelsView Root Home Boot EFI system Swap New partition for %1 New partition %1 %2 size[number] filesystem[name] PartitionModel Free Space New partition Name File System Mount Point Size PartitionPage Form Storage de&vice: &Revert All Changes New Partition &Table Cre&ate &Edit &Delete New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group I&nstall boot loader on: Are you sure you want to create a new partition table on %1? Can not create new partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. PartitionViewStep Gathering system information... Partitions Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <strong>Replace</strong> a partition with %1. <strong>Manual</strong> partitioning. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Current: After: No EFI system partition configured An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. EFI system partition flag not set An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: External command crashed. Command <i>%1</i> crashed. External command failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Bad parameters for process job call. External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Command <i>%1</i> finished with exit code %2. QObject Default Keyboard Model Default unknown extended unformatted swap Unpartitioned space or unknown partition table (no mount point) Requirements checking for module <i>%1</i> is complete. %1 (%2) language[name] (country[name]) No product No description provided. File not found Path <pre>%1</pre> must be an absolute path. Could not create new random file <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. The selected item does not appear to be a valid partition. %1 cannot be installed on empty space. Please select an existing partition. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 cannot be installed on this partition. Data partition (%1) Unknown system partition (%1) %1 system partition (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. The EFI system partition at %1 will be used for starting %2. EFI system partition: ResizeFSJob Resize Filesystem Job Invalid configuration The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. ResizeVolumeGroupDialog Resize Volume Group ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: System requirements ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. This program will ask you some questions and set up %2 on your computer. ScanningDialog Scanning storage devices... Partitioning SetHostNameJob Set hostname %1 Set hostname <strong>%1</strong>. Setting hostname %1. Internal Error Cannot write hostname to target system SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Failed to write keyboard configuration for the virtual console. Failed to write to %1 Failed to write keyboard configuration for X11. Failed to write keyboard configuration to existing /etc/default directory. SetPartFlagsJob Set flags on partition %1. Set flags on %1MiB %2 partition. Set flags on new partition. Clear flags on partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag new partition as <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. SetPasswordJob Set password for user %1 Setting password for user %1. Bad destination system path. rootMountPoint is %1 Cannot disable root account. passwd terminated with error code %1. Cannot set password for user %1. usermod terminated with error code %1. SetTimezoneJob Set timezone to %1/%2 Cannot access selected timezone path. Bad path: %1 Cannot set timezone. Link creation failed, target: %1; link name: %2 Cannot set timezone, Cannot open /etc/timezone for writing ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) SummaryPage This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. SummaryViewStep Summary TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingMachineNeonJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form Placeholder <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. TrackingViewStep Feedback UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> Your username is too long. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Only letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Your hostname is too long. Your passwords do not match! UsersViewStep Users VariantModel Key Value VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB Total Size: Used Size: Total Sectors: Quantity of LVs: WelcomePage Form Select application and system language Open donations website &Donate Open help and support website Open issues and bug-tracking website Open release notes website &Release notes &Known issues &Support &About <h1>Welcome to the %1 installer.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Welcome to %1 setup.</h1> About %1 setup About %1 installer <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support WelcomeQmlViewStep Welcome WelcomeViewStep Welcome notesqml <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> About Support Known issues Release notes Donate calamares-3.2.20/lang/calamares_ml.ts000066400000000000000000007263121362604102500174510ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. à´ˆ സിസàµà´±àµà´±à´¤àµà´¤à´¿à´¨àµà´±àµ† <strong>ബൂടàµà´Ÿàµ എൻവയണàµà´®àµ†à´¨àµà´±àµ</strong>.<br><br>പഴയ x86 സിസàµà´±àµà´±à´™àµà´™àµ¾ <strong>ബയോസàµ</strong> മാതàµà´°à´®àµ‡ പിനàµà´¤àµà´£à´¯àµà´•àµà´•ൂ.<br>നൂതന സിസàµà´±àµà´±à´™àµà´™àµ¾ പൊതàµà´µàµ‡ <strong>ഇഎഫàµà´</strong>ആണൠഉപയോഗികàµà´•àµà´¨àµà´¨à´¤àµ à´Žà´¨àµà´¨à´¿à´°àµà´¨àµà´¨à´¾à´²àµà´‚ യോജിപàµà´ªàµà´³àµà´³ രീതിയിൽ ആരംഭികàµà´•àµà´•യാണെങàµà´•ിൽ ബയോസൠആയി à´ªàµà´°à´¦àµ¼à´¶à´¿à´ªàµà´ªà´¿à´•àµà´•à´ªàµà´ªàµ†à´Ÿàµà´Ÿàµ‡à´•àµà´•ാം. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. à´ˆ സിസàµà´±àµà´±à´‚ ഒരൠ<strong>à´‡.à´Žà´«àµ.à´</strong> ബൂടàµà´Ÿàµ എൻ‌വയോൺ‌മെനàµà´±àµ ഉപയോഗിചàµà´šà´¾à´£àµ ആരംഭിചàµà´šà´¤àµ.<br>ഒരൠഇ.à´Žà´«àµ.ഠഎൻ‌വയോൺ‌മെൻറിൽ‌ നിനàµà´¨àµà´‚ à´¸àµà´±àµà´±à´¾àµ¼â€Œà´Ÿàµà´Ÿà´ªàµà´ªàµ à´•àµà´°à´®àµ€à´•à´°à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµ, ഒരൠഇ.à´Žà´«àµ.ഠസിസàµà´±àµà´±à´‚ പാർടàµà´Ÿàµ€à´·à´¨à´¿àµ½ à´ˆ ഇൻസàµà´±àµà´±à´¾à´³àµ¼ <strong>à´—àµà´°à´¬àµ</strong> à´…à´²àµà´²àµ†à´™àµà´•ിൽ <strong>systemd-boot</strong> പോലെയàµà´³àµà´³ ഒരൠബൂടàµà´Ÿàµ ലോഡർ ആപàµà´²à´¿à´•àµà´•േഷൻ വിനàµà´¯à´¸à´¿à´•àµà´•ണം.നിങàµà´™àµ¾ മാനàµà´µàµ½ പാർടàµà´Ÿàµ€à´·à´¨à´¿à´‚ഗൠതിരഞàµà´žàµ†à´Ÿàµà´¤àµà´¤à´¿à´Ÿàµà´Ÿà´¿à´²àµà´²àµ†à´™àµà´•ിൽ ഇതൠയാനàµà´¤àµà´°à´¿à´•മായി നടകàµà´•േണàµà´Ÿà´¤à´¾à´£àµ,à´…à´¤àµà´¤à´°à´‚ സനàµà´¦àµ¼à´­à´™àµà´™à´³à´¿àµ½ നിങàµà´™àµ¾ അതൠതിരഞàµà´žàµ†à´Ÿàµà´•àµà´•ണം à´…à´²àµà´²àµ†à´™àµà´•ിൽ à´¸àµà´µà´¨àµà´¤à´®à´¾à´¯à´¿ സൃഷàµà´Ÿà´¿à´•àµà´•ണം.<br> This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. à´ˆ സിസàµà´±àµà´±à´‚ ഒരൠ<strong>ബയോസàµ</strong> ബൂടàµà´Ÿàµ എൻ‌വയോൺ‌മെനàµà´±àµ ഉപയോഗിചàµà´šà´¾à´£àµ ആരംഭിചàµà´šà´¤àµ.<br><br>ഒരൠബയോസൠഎൻ‌വയോൺ‌മെൻറിൽ‌ നിനàµà´¨àµà´‚ à´¸àµà´±àµà´±à´¾àµ¼â€Œà´Ÿàµà´Ÿà´ªàµà´ªàµ à´•àµà´°à´®àµ€à´•à´°à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµ, പാർടàµà´Ÿàµ€à´·àµ»à´¨àµà´±àµ† à´¤àµà´Ÿà´•àµà´•à´¤àµà´¤à´¿àµ½ à´…à´²àµà´²àµ†à´™àµà´•ിൽ പാർടàµà´Ÿàµ€à´·àµ» ടേബിളിനàµà´±àµ† à´¤àµà´Ÿà´•àµà´•à´¤àµà´¤à´¿à´¨à´Ÿàµà´¤àµà´¤àµà´³àµà´³ മാസàµà´±àµà´±àµ¼ ബൂടàµà´Ÿàµ റെകàµà´•ോർഡൠൽ (à´®àµàµ»à´—ണന) à´ˆ ഇൻസàµà´±àµà´±à´¾à´³àµ¼ <strong>à´—àµà´°à´¬àµ</strong> പോലെയàµà´³àµà´³ ഒരൠബൂടàµà´Ÿàµ ലോഡർ ആപàµà´²à´¿à´•àµà´•േഷൻ ഇൻസàµà´±àµà´±à´¾àµ¾ ചെയàµà´¯à´£à´‚. നിങàµà´™àµ¾ മാനàµà´µàµ½ പാർടàµà´Ÿàµ€à´·à´¨à´¿à´‚ഗൠതിരഞàµà´žàµ†à´Ÿàµà´¤àµà´¤à´¿à´Ÿàµà´Ÿà´¿à´²àµà´²àµ†à´™àµà´•ിൽ ഇതൠയാനàµà´¤àµà´°à´¿à´•മായി നടകàµà´•േണàµà´Ÿà´¤à´¾à´£àµ, à´…à´¤àµà´¤à´°à´‚ സനàµà´¦àµ¼à´­à´™àµà´™à´³à´¿àµ½ നിങàµà´™àµ¾ ഇതൠസàµà´µà´¨àµà´¤à´®à´¾à´¯à´¿ സജàµà´œàµ€à´•à´°à´¿à´•àµà´•ണം. BootLoaderModel Master Boot Record of %1 %1 à´¨àµà´±àµ† മാസàµà´±àµà´±àµ¼ ബൂടàµà´Ÿàµ റെകàµà´•ോർഡൠBoot Partition ബൂടàµà´Ÿàµ പാർടàµà´Ÿàµ€à´·àµ» System Partition സിസàµà´±àµà´±à´‚ പാർടàµà´Ÿàµ€à´·àµ» Do not install a boot loader ബൂടàµà´Ÿàµ ലോഡർ ഇൻസàµà´±àµà´±à´¾àµ¾ ചെയàµà´¯à´°àµà´¤àµ %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page ശൂനàµà´¯à´®à´¾à´¯ പേജൠCalamares::DebugWindow Form ഫോം GlobalStorage GlobalStorage JobQueue JobQueue Modules മൊഡàµà´¯àµ‚à´³àµà´•ൾ Type: തരം: none à´’à´¨àµà´¨àµà´®à´¿à´²àµà´² Interface: സമàµà´ªàµ¼à´•àµà´•à´®àµà´–à´‚: Tools ഉപകരണങàµà´™àµ¾ Reload Stylesheet ശൈലീപàµà´¸àµà´¤à´•à´‚ à´ªàµà´¤àµà´•àµà´•àµà´• Widget Tree വിഡàµà´œà´±àµà´±àµ à´Ÿàµà´°àµ€ Debug information ഡീബഗൠവിവരങàµà´™àµ¾ Calamares::ExecutionViewStep Set up സജàµà´œà´®à´¾à´•àµà´•àµà´• Install ഇൻസàµà´±àµà´±à´¾àµ¾ ചെയàµà´¯àµà´• Calamares::FailJob Job failed (%1) ജോലി പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ (%1) Programmed job failure was explicitly requested. à´ªàµà´°àµ‹à´—àµà´°à´¾à´‚ ചെയàµà´¯à´ªàµà´ªàµ†à´Ÿàµà´Ÿ ജോലിയàµà´Ÿàµ† പരാജയം à´ªàµà´°à´¤àµà´¯àµ‡à´•മായി ആവശàµà´¯à´ªàµà´ªàµ†à´Ÿàµà´Ÿà´¿à´°àµà´¨àµà´¨àµ. Calamares::JobThread Done പൂർതàµà´¤à´¿à´¯à´¾à´¯à´¿ Calamares::NamedJob Example job (%1) ഉദാഹരണം ജോലി (%1) Calamares::ProcessJob Run command '%1' in target system. ടാർഗറàµà´±àµ സിസàµà´±àµà´±à´¤àµà´¤à´¿àµ½ '%1' ആജàµà´ž à´ªàµà´°à´µàµ¼à´¤àµà´¤à´¿à´ªàµà´ªà´¿à´•àµà´•àµà´•. Run command '%1'. '%1' à´Žà´¨àµà´¨ ആജàµà´ž നടപàµà´ªà´¿à´²à´¾à´•àµà´•àµà´•. Running command %1 %2 %1 %2 ആജàµà´ž നടപàµà´ªà´¿à´²à´¾à´•àµà´•àµà´¨àµà´¨àµ Calamares::PythonJob Running %1 operation. %1 à´•àµà´°à´¿à´¯ നടപàµà´ªà´¿à´²à´¾à´•àµà´•àµà´¨àµà´¨àµ. Bad working directory path à´ªàµà´°à´µàµ¼à´¤àµà´¥à´¨à´°à´¹à´¿à´¤à´®à´¾à´¯ ഡയറകàµà´Ÿà´±à´¿ പാത Working directory %1 for python job %2 is not readable. പൈതൺ ജോബൠ%2 à´¯àµà´Ÿàµ† à´ªàµà´°à´µàµ¼à´¤àµà´¤à´¨ പാതയായ %1 വായികàµà´•àµà´µà´¾àµ» à´•à´´à´¿à´¯àµà´¨àµà´¨à´¿à´²àµà´² Bad main script file മോശമായ à´ªàµà´°à´§à´¾à´¨ à´¸àµà´•àµà´°à´¿à´ªàµà´±àµà´±àµ ഫയൽ Main script file %1 for python job %2 is not readable. പൈതàµà´¤àµº ജോബൠ%2 നായàµà´³àµà´³ à´ªàµà´°à´§à´¾à´¨ à´¸àµà´•àµà´°à´¿à´ªàµà´±àµà´±àµ ഫയൽ %1 വായികàµà´•ാൻ à´•à´´à´¿à´¯àµà´¨àµà´¨à´¿à´²àµà´². Boost.Python error in job "%1". "%1" à´Žà´¨àµà´¨ à´ªàµà´°à´µàµƒà´¤àµà´¤à´¿à´¯à´¿à´²àµâ€ ബൂസàµà´±àµà´±àµ.പൈതണàµâ€ പിശകൠCalamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Waiting for %n module(s). %n മൊഡàµà´¯àµ‚ളിനായി കാതàµà´¤à´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ. %n മൊഡàµà´¯àµ‚à´³àµà´•ൾകàµà´•ായി കാതàµà´¤à´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ. (%n second(s)) (%1 സെകàµà´•ൻഡàµ) (%1 സെകàµà´•ൻഡàµà´•ൾ) System-requirements checking is complete. സിസàµà´±àµà´±à´‚-ആവശàµà´¯à´•തകളàµà´Ÿàµ† പരിശോധന പൂർതàµà´¤à´¿à´¯à´¾à´¯à´¿. Calamares::ViewManager &Back à´ªàµà´±à´•ോടàµà´Ÿàµ (&B) &Next à´…à´Ÿàµà´¤àµà´¤à´¤àµ (&N) &Cancel റദàµà´¦à´¾à´•àµà´•àµà´• (&C) Cancel setup without changing the system. സിസàµà´±àµà´±à´¤àµà´¤à´¿à´¨àµ മാറàµà´±à´®àµŠà´¨àµà´¨àµà´‚ വരàµà´¤àµà´¤à´¾à´¤àµ† സജàµà´œàµ€à´•രണപàµà´°à´•àµà´°à´¿à´¯ റദàµà´¦à´¾à´•àµà´•àµà´•. Cancel installation without changing the system. സിസàµà´±àµà´±à´¤àµà´¤à´¿à´¨àµ മാറàµà´±à´®àµŠà´¨àµà´¨àµà´‚ വരàµà´¤àµà´¤à´¾à´¤àµ† ഇൻസàµà´±àµà´±à´³àµ‡à´·àµ» റദàµà´¦à´¾à´•àµà´•àµà´•. Setup Failed സജàµà´œàµ€à´•രണപàµà´°à´•àµà´°à´¿à´¯ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ Would you like to paste the install log to the web? ഇൻസàµà´±àµà´±à´¾àµ¾ ലോഗൠവെബിലേകàµà´•ൠപകർതàµà´¤à´£àµ‹? Install Log Paste URL ഇൻസàµà´±àµà´±à´¾àµ¾ ലോഗൠപകർപàµà´ªà´¿à´¨àµà´±àµ† വിലാസം The upload was unsuccessful. No web-paste was done. à´…à´ªàµâ€Œà´²àµ‹à´¡àµ പരാജയമായിരàµà´¨àµà´¨àµ. വെബിലേകàµà´•ൠപകർതàµà´¤à´¿à´¯à´¿à´²àµà´². Calamares Initialization Failed കലാമാരേസൠസമാരംഭികàµà´•ൽ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. %1 ഇൻസàµà´±àµà´±à´¾àµ¾ ചെയàµà´¯à´¾àµ» കഴിയിലàµà´². à´•àµà´°à´®àµ€à´•à´°à´¿à´šàµà´š à´Žà´²àµà´²à´¾ മൊഡàµà´¯àµ‚à´³àµà´•à´³àµà´‚ ലോഡàµà´šàµ†à´¯àµà´¯à´¾àµ» കാലാമറെസിനൠകഴിഞàµà´žà´¿à´²àµà´². വിതരണതàµà´¤à´¿àµ½ കാലാമറെസൠഉപയോഗികàµà´•àµà´¨àµà´¨ രീതിയിലàµà´³àµà´³ ഒരൠപàµà´°à´¶àµà´¨à´®à´¾à´£à´¿à´¤àµ. <br/>The following modules could not be loaded: <br/>താഴെ പറയàµà´¨àµà´¨ മൊഡàµà´¯àµ‚à´³àµà´•ൾ ലഭàµà´¯à´®à´¾à´•àµà´•ാനായിലàµà´²: Continue with installation? ഇൻസàµà´±àµà´±à´³àµ‡à´·àµ» à´¤àµà´Ÿà´°à´£àµ‹? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> %2 സജàµà´œàµ€à´•à´°à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµ %1 സജàµà´œàµ€à´•à´°à´£ à´ªàµà´°àµ‹à´—àµà´°à´¾à´‚ നിങàµà´™à´³àµà´Ÿàµ† à´¡à´¿à´¸àµà´•ിൽ മാറàµà´±à´™àµà´™àµ¾ വരàµà´¤àµà´¤à´¾àµ» പോകàµà´¨àµà´¨àµ.<br/><strong>നിങàµà´™àµ¾à´•àµà´•ൠഈ മാറàµà´±à´™àµà´™àµ¾ പഴയപടിയാകàµà´•ാൻ കഴിയിലàµà´²</strong> &Set up now ഉടൻ സജàµà´œàµ€à´•à´°à´¿à´•àµà´•àµà´• (&S) &Set up സജàµà´œàµ€à´•à´°à´¿à´•àµà´•àµà´• (&S) &Install ഇൻസàµà´±àµà´±à´¾àµ¾ (&I) Setup is complete. Close the setup program. സജàµà´œàµ€à´•രണം പൂർതàµà´¤à´¿à´¯à´¾à´¯à´¿. à´ªàµà´°à´¯àµ‹à´—à´‚ à´…à´Ÿà´¯àµà´•àµà´•àµà´•. Cancel setup? സജàµà´œàµ€à´•രണം റദàµà´¦à´¾à´•àµà´•ണോ? Cancel installation? ഇൻസàµà´±àµà´±à´³àµ‡à´·àµ» റദàµà´¦à´¾à´•àµà´•ണോ? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. നിലവിലàµà´³àµà´³ സജàµà´œàµ€à´•രണപàµà´°à´•àµà´°à´¿à´¯ റദàµà´¦à´¾à´•àµà´•ണോ? സജàµà´œàµ€à´•രണപàµà´°à´¯àµ‹à´—à´‚ നിൽകàµà´•àµà´•à´¯àµà´‚ à´Žà´²àµà´²à´¾ മാറàµà´±à´™àµà´™à´³àµà´‚ നഷàµà´Ÿà´ªàµà´ªàµ†à´Ÿàµà´•à´¯àµà´‚ ചെയàµà´¯àµà´‚. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. നിലവിലàµà´³àµà´³ ഇൻസàµà´±àµà´±à´¾àµ¾ à´ªàµà´°à´•àµà´°à´¿à´¯ റദàµà´¦à´¾à´•àµà´•ണോ? ഇൻസàµà´±àµà´±à´¾à´³àµ¼ നിൽകàµà´•àµà´•à´¯àµà´‚ à´Žà´²àµà´²à´¾ മാറàµà´±à´™àµà´™à´³àµà´‚ നഷàµà´Ÿà´ªàµà´ªàµ†à´Ÿàµà´•à´¯àµà´‚ ചെയàµà´¯àµà´‚. &Yes വേണം (&Y) &No വേണàµà´Ÿ (&N) &Close à´…à´Ÿà´¯àµà´•àµà´•àµà´• (&C) Continue with setup? സജàµà´œàµ€à´•രണപàµà´°à´•àµà´°à´¿à´¯ à´¤àµà´Ÿà´°à´£àµ‹? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> %2 ഇൻസàµà´±àµà´±à´¾à´³àµà´šàµ†à´¯àµà´¯àµà´¨àµà´¨à´¤à´¿à´¨àµ %1 ഇൻസàµà´±àµà´±à´¾à´³àµ¼ നിങàµà´™à´³àµà´Ÿàµ† à´¡à´¿à´¸àµà´•ിൽ മാറàµà´±à´™àµà´™àµ¾ വരàµà´¤àµà´¤à´¾àµ» പോകàµà´¨àµà´¨àµ.<br/><strong>നിങàµà´™àµ¾à´•àµà´•ൠഈ മാറàµà´±à´™àµà´™àµ¾ പഴയപടിയാകàµà´•ാൻ കഴിയിലàµà´².</strong> &Install now ഉടൻ ഇൻസàµà´±àµà´±à´¾àµ¾ ചെയàµà´¯àµà´• (&I) Go &back à´ªàµà´±à´•ോടàµà´Ÿàµ പോകàµà´• &Done ചെയàµâ€Œà´¤àµ The installation is complete. Close the installer. ഇൻസàµà´±àµà´±à´³àµ‡à´·àµ» പൂർതàµà´¤à´¿à´¯à´¾à´¯à´¿. ഇൻസàµà´±àµà´±à´¾à´³àµ¼ à´…à´Ÿà´¯àµà´•àµà´•àµà´• Error പിശകൠInstallation Failed ഇൻസàµà´±àµà´±à´³àµ‡à´·àµ» പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ CalamaresPython::Helper Unknown exception type à´…à´œàµà´žà´¾à´¤à´®à´¾à´¯ പിശകൠunparseable Python error മനസàµà´¸à´¿à´²à´¾à´•àµà´•ാനാവാതàµà´¤ പൈതàµà´¤àµº പിഴവൠunparseable Python traceback മനസàµà´¸à´¿à´²à´¾à´•àµà´•ാനാവാതàµà´¤ പൈതàµà´¤àµº à´Ÿàµà´°àµ‡à´¸àµà´¬à´¾à´•àµà´•ൠUnfetchable Python error. ലഭàµà´¯à´®à´¾à´•àµà´•ാനാവാതàµà´¤ പൈതàµà´¤àµº പിഴവàµ. CalamaresUtils Install log posted to: %1 ഇൻസàµà´±àµà´±à´¾àµ¾ ലോഗൠഇങàµà´™àµ‹à´Ÿàµà´Ÿàµ à´¸àµà´¥à´¾à´ªà´¿à´šàµà´šà´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ %1 CalamaresWindow %1 Setup Program %1 സജàµà´œàµ€à´•രണപàµà´°à´¯àµ‹à´—à´‚ %1 Installer %1 ഇൻസàµà´±àµà´±à´¾à´³àµ¼ Show debug information ഡീബഗൠവിവരങàµà´™àµ¾ കാണികàµà´•àµà´• CheckerContainer Gathering system information... സിസàµà´±àµà´±à´¤àµà´¤àµ†à´•àµà´•àµà´±à´¿à´šàµà´šàµà´³àµà´³ വിവരങàµà´™àµ¾ ശേഖരികàµà´•àµà´¨àµà´¨àµ... ChoicePage Form ഫോം After: ശേഷം: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>à´¸àµà´µà´®àµ‡à´§à´¯à´¾ ഉളàµà´³ പാർടàµà´Ÿàµ€à´·à´¨à´¿à´™àµ</strong><br/>നിങàµà´™àµ¾à´•àµà´•ൠസàµà´µà´¯à´‚ പാർടàµà´Ÿàµ€à´·à´¨àµà´•ൾ സൃഷàµà´Ÿà´¿à´•àµà´•ാനോ വലàµà´ªàµà´ªà´‚ മാറàµà´±à´¾à´¨àµ‹ à´•à´´à´¿à´¯àµà´‚. Boot loader location: ബൂടàµà´Ÿàµ ലോഡറിനàµà´±àµ† à´¸àµà´¥à´¾à´¨à´‚: Select storage de&vice: സംഭരണിയàµà´•àµà´•àµà´³àµà´³ ഉപകരണം തിരഞàµà´žàµ†à´Ÿàµà´•àµà´•ൂ: Current: നിലവിലàµà´³àµà´³à´¤àµ: Reuse %1 as home partition for %2. %2 à´¨àµà´³àµà´³ ഹോം പാർടàµà´Ÿàµ€à´·à´¨à´¾à´¯à´¿ %1 വീണàµà´Ÿàµà´‚ ഉപയോഗികàµà´•ൂ. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>à´šàµà´°àµà´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµ ഒരൠപാർടàµà´Ÿàµ€à´·àµ» തിരഞàµà´žàµ†à´Ÿàµà´•àµà´•àµà´•, à´Žà´¨àµà´¨à´¿à´Ÿàµà´Ÿàµ വലàµà´ªàµà´ªà´‚ മാറàµà´±à´¾àµ» à´šàµà´µà´Ÿàµ†à´¯àµà´³àµà´³ ബാർ വലികàµà´•àµà´•. %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 %2MiB ആയി à´šàµà´°àµà´™àµà´™àµà´•à´¯àµà´‚ %4 നൠഒരൠപàµà´¤à´¿à´¯ %3MiB പാർടàµà´Ÿàµ€à´·àµ» സൃഷàµà´Ÿà´¿à´•àµà´•àµà´•à´¯àµà´‚ ചെയàµà´¯àµà´‚. <strong>Select a partition to install on</strong> <strong>ഇൻസàµà´±àµà´±à´¾àµ¾ ചെയàµà´¯à´¾à´¨à´¾à´¯à´¿ ഒരൠപാർടàµà´Ÿàµ€à´·àµ» തിരഞàµà´žàµ†à´Ÿàµà´•àµà´•àµà´•</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. à´ˆ സിസàµà´±àµà´±à´¤àµà´¤à´¿àµ½ എവിടെയàµà´‚ ഒരൠഇ.à´Žà´«àµ.ഠസിസàµà´±àµà´±à´‚ പാർടàµà´Ÿàµ€à´·àµ» à´•à´£àµà´Ÿàµ†à´¤àµà´¤à´¾à´¨à´¾à´¯à´¿à´²àµà´². %1 സജàµà´œàµ€à´•à´°à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµ ദയവായി തിരികെ പോയി മാനàµà´µàµ½ പാർടàµà´Ÿàµ€à´·à´¨à´¿à´‚ഗൠഉപയോഗികàµà´•àµà´•. The EFI system partition at %1 will be used for starting %2. %1 ലെ ഇഎഫàµà´ സിസàµà´±àµà´±à´‚ പാർടàµà´Ÿàµ€à´·àµ» %2 ആരംഭികàµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµ ഉപയോഗികàµà´•àµà´‚. EFI system partition: ഇഎഫàµà´ സിസàµà´±àµà´±à´‚ പാർടàµà´Ÿàµ€à´·àµ» This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. à´ˆ à´¡à´±àµà´±àµ‹à´±àµ‡à´œàµâ€Œ ഉപകരണതàµà´¤à´¿àµ½ ഒരൠഓപàµà´ªà´±àµ‡à´±àµà´±à´¿à´‚ഗൠസിസàµà´±àµà´±à´‚ ഉണàµà´Ÿàµ†à´¨àµà´¨àµ തോനàµà´¨àµà´¨àµà´¨à´¿à´²àµà´². നിങàµà´™àµ¾ à´Žà´¨àµà´¤à´¾à´£àµ ചെയàµà´¯à´¾àµ» ആഗàµà´°à´¹à´¿à´•àµà´•àµà´¨àµà´¨à´¤àµ?<br/>à´¸àµà´±àµà´±àµ‹à´±àµ‡à´œàµ ഉപകരണതàµà´¤à´¿àµ½ à´Žà´¨àµà´¤àµ†à´™àµà´•à´¿à´²àµà´‚ മാറàµà´±à´‚ വരàµà´¤àµà´¤àµà´¨àµà´¨à´¤à´¿à´¨àµà´®àµà´®àµà´ªàµ നിങàµà´™àµ¾à´•àµà´•ൠനിങàµà´™à´³àµà´Ÿàµ† ചോയàµâ€Œà´¸àµà´•ൾ അവലോകനം ചെയàµà´¯à´¾à´¨àµà´‚ à´¸àµà´¥à´¿à´°àµ€à´•à´°à´¿à´•àµà´•ാനàµà´‚ à´•à´´à´¿à´¯àµà´‚.  <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>à´¡à´¿à´¸àµà´•ൠമായàµà´•àµà´•ൂ</strong><br/>à´ˆ à´ªàµà´°à´µàµƒà´¤àµà´¤à´¿ തെരെഞàµà´žàµ†à´Ÿàµà´¤àµà´¤ à´¸àµà´±àµà´±àµ‹à´±àµ‡à´œàµ ഉപകരണതàµà´¤à´¿à´²àµ† à´Žà´²àµà´²à´¾ ഡാറàµà´±à´¯àµà´‚ <font color="red">മായàµâ€Œà´šàµà´šàµà´•ളയàµà´‚</font>. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. à´ˆ à´¸àµà´±àµà´±àµ‹à´±àµ‡à´œàµ ഉപകരണതàµà´¤à´¿àµ½ %1 ഉണàµà´Ÿàµ.നിങàµà´™àµ¾ à´Žà´¨àµà´¤à´¾à´£àµ ചെയàµà´¯à´¾àµ» ആഗàµà´°à´¹à´¿à´•àµà´•àµà´¨àµà´¨à´¤àµ?<br/>à´¸àµà´±àµà´±àµ‹à´±àµ‡à´œàµ ഉപകരണതàµà´¤à´¿àµ½ à´Žà´¨àµà´¤àµ†à´™àµà´•à´¿à´²àµà´‚ മാറàµà´±à´‚ വരàµà´¤àµà´¤àµà´¨àµà´¨à´¤à´¿à´¨àµà´®àµà´®àµà´ªàµ നിങàµà´™à´³àµà´Ÿàµ† ചോയàµâ€Œà´¸àµà´•ൾ അവലോകനം ചെയàµà´¯à´¾à´¨àµà´‚ à´¸àµà´¥à´¿à´°àµ€à´•à´°à´¿à´•àµà´•ാനàµà´‚ നിങàµà´™àµ¾à´•àµà´•ൠകഴിയàµà´‚. No Swap à´¸àµà´µà´¾à´ªàµà´ªàµ വേണàµà´Ÿ Reuse Swap à´¸àµà´µà´¾à´ªàµà´ªàµ വീണàµà´Ÿàµà´‚ ഉപയോഗികàµà´•ൂ Swap (no Hibernate) à´¸àµà´µà´¾à´ªàµà´ªàµ (ഹൈബർനേഷൻ ഇലàµà´²) Swap (with Hibernate) à´¸àµà´µà´¾à´ªàµà´ªàµ (ഹൈബർനേഷനോടൠകൂടി) Swap to file ഫയലിലേകàµà´•ൠസàµà´µà´¾à´ªàµà´ªàµ ചെയàµà´¯àµà´• <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>ഇതിനൊപàµà´ªà´‚ ഇൻസàµà´±àµà´±à´¾àµ¾ ചെയàµà´¯àµà´•</strong><br/>%1 നൠഇടം നൽകàµà´¨àµà´¨à´¤à´¿à´¨àµ ഇൻസàµà´±àµà´±à´¾à´³àµ¼ ഒരൠപാർടàµà´Ÿàµ€à´·àµ» à´šàµà´°àµà´•àµà´•àµà´‚. <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>ഒരൠപാർടàµà´Ÿàµ€à´·àµ» à´ªàµà´¨à´ƒà´¸àµà´¥à´¾à´ªà´¿à´•àµà´•àµà´•</strong><br/>ഒരൠപാർടàµà´Ÿàµ€à´·à´¨àµ %1 ഉപയോഗിചàµà´šàµ à´ªàµà´¨à´ƒà´¸àµà´¥à´¾à´ªà´¿à´•àµà´•àµà´¨àµà´¨àµ. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. à´ˆ à´¸àµà´±àµà´±àµ‹à´±àµ‡à´œàµ ഉപകരണതàµà´¤à´¿àµ½ ഇതിനകം ഒരൠഓപàµà´ªà´±àµ‡à´±àµà´±à´¿à´‚ഗൠസിസàµà´±àµà´±à´‚ ഉണàµà´Ÿàµ. നിങàµà´™àµ¾ à´Žà´¨àµà´¤à´¾à´£àµ ചെയàµà´¯à´¾àµ» ആഗàµà´°à´¹à´¿à´•àµà´•àµà´¨àµà´¨à´¤àµ?<br/>à´¸àµà´±àµà´±àµ‹à´±àµ‡à´œàµ ഉപകരണതàµà´¤à´¿àµ½ à´Žà´¨àµà´¤àµ†à´™àµà´•à´¿à´²àµà´‚ മാറàµà´±à´‚ വരàµà´¤àµà´¤àµà´¨àµà´¨à´¤à´¿à´¨àµà´®àµà´®àµà´ªàµ നിങàµà´™àµ¾à´•àµà´•ൠനിങàµà´™à´³àµà´Ÿàµ† ചോയàµâ€Œà´¸àµà´•ൾ അവലോകനം ചെയàµà´¯à´¾à´¨àµà´‚ à´¸àµà´¥à´¿à´°àµ€à´•à´°à´¿à´•àµà´•ാനàµà´‚ à´•à´´à´¿à´¯àµà´‚.  This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. à´ˆ à´¸àµà´±àµà´±àµ‹à´±àµ‡à´œàµ ഉപകരണതàµà´¤à´¿àµ½ à´’à´¨àµà´¨à´¿à´²à´§à´¿à´•à´‚ à´“à´ªàµà´ªà´±àµ‡à´±àµà´±à´¿à´‚ഗൠസിസàµà´±àµà´±à´™àµà´™à´³àµà´£àµà´Ÿàµ. നിങàµà´™àµ¾ à´Žà´¨àµà´¤à´¾à´£àµ ചെയàµà´¯à´¾àµ» ആഗàµà´°à´¹à´¿à´•àµà´•àµà´¨àµà´¨à´¤àµ?<br/>à´¸àµà´±àµà´±àµ‹à´±àµ‡à´œàµ ഉപകരണതàµà´¤à´¿àµ½ à´Žà´¨àµà´¤àµ†à´™àµà´•à´¿à´²àµà´‚ മാറàµà´±à´‚ വരàµà´¤àµà´¤àµà´¨àµà´¨à´¤à´¿à´¨àµà´®àµà´®àµà´ªàµ നിങàµà´™àµ¾à´•àµà´•ൠനിങàµà´™à´³àµà´Ÿàµ† ചോയàµâ€Œà´¸àµà´•ൾ അവലോകനം ചെയàµà´¯à´¾à´¨àµà´‚ à´¸àµà´¥à´¿à´°àµ€à´•à´°à´¿à´•àµà´•ാനàµà´‚ à´•à´´à´¿à´¯àµà´‚.  ClearMountsJob Clear mounts for partitioning operations on %1 %1 ൽ പാർടàµà´Ÿàµ€à´·à´¨à´¿à´™àµà´™àµ à´ªàµà´°à´•àµà´°à´¿à´¯à´•ൾകàµà´•ായി മൗണàµà´Ÿàµà´•ൾ നീകàµà´•à´‚ ചെയàµà´¯àµà´• Clearing mounts for partitioning operations on %1. %1 ൽ പാർടàµà´Ÿàµ€à´·à´¨à´¿à´™àµà´™àµ à´ªàµà´°à´•àµà´°à´¿à´¯à´•ൾകàµà´•ായി മൗണàµà´Ÿàµà´•ൾ നീകàµà´•à´‚ ചെയàµà´¯àµà´¨àµà´¨àµ. Cleared all mounts for %1 %1 നായàµà´³àµà´³ à´Žà´²àµà´²à´¾ മൗണàµà´Ÿàµà´•à´³àµà´‚ നീകàµà´•à´‚ ചെയàµà´¤àµ ClearTempMountsJob Clear all temporary mounts. à´Žà´²àµà´²à´¾ താൽകàµà´•ാലിക മൗണàµà´Ÿàµà´•à´³àµà´‚ നീകàµà´•à´‚ ചെയàµà´¯àµà´• Clearing all temporary mounts. à´Žà´²àµà´²à´¾ താൽകàµà´•ാലിക മൗണàµà´Ÿàµà´•à´³àµà´‚ നീകàµà´•à´‚ ചെയàµà´¯àµà´¨àµà´¨àµ. Cannot get list of temporary mounts. താൽകàµà´•ാലിക മൗണàµà´Ÿàµà´•à´³àµà´Ÿàµ† പടàµà´Ÿà´¿à´• ലഭàµà´¯à´®à´¾à´¯à´¿à´²àµà´². Cleared all temporary mounts. à´Žà´²àµà´²à´¾ താൽകàµà´•ാലിക മൗണàµà´Ÿàµà´•à´³àµà´‚ നീകàµà´•à´‚ ചെയàµà´¤àµ. CommandList Could not run command. ആജàµà´ž à´ªàµà´°à´µàµ¼à´¤àµà´¤à´¿à´ªàµà´ªà´¿à´•àµà´•ാനായിലàµà´². The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. കമാൻഡൠഹോസàµà´±àµà´±àµ എൻവയോൺമെനàµà´±à´¿àµ½ à´ªàµà´°à´µàµ¼à´¤àµà´¤à´¿à´•àµà´•àµà´¨àµà´¨àµ, റൂടàµà´Ÿàµ പാതàµà´¤àµ അറിയേണàµà´Ÿà´¤àµà´£àµà´Ÿàµ, പകàµà´·àµ‡ rootMountPoint നിർവചിചàµà´šà´¿à´Ÿàµà´Ÿà´¿à´²àµà´². The command needs to know the user's name, but no username is defined. കമാൻഡിനൠഉപയോകàµà´¤à´¾à´µà´¿à´¨àµà´±àµ† പേരൠഅറിയേണàµà´Ÿà´¤àµà´£àµà´Ÿàµ,à´Žà´¨àµà´¨à´¾àµ½ ഉപയോകàµà´¤àµƒà´¨à´¾à´®à´®àµŠà´¨àµà´¨àµà´‚ നിർവചിചàµà´šà´¿à´Ÿàµà´Ÿà´¿à´²àµà´². ContextualProcessJob Contextual Processes Job സാനàµà´¦àµ¼à´­à´¿à´• à´ªàµà´°à´•àµà´°à´¿à´¯à´•ൾ ജോലി CreatePartitionDialog Create a Partition ഒരൠപാർടàµà´Ÿàµ€à´·àµ» സൃഷàµà´Ÿà´¿à´•àµà´•àµà´• MiB MiB Partition &Type: പാർടàµà´Ÿàµ€à´·àµ» തരം (&T): &Primary à´ªàµà´°à´¾à´¥à´®à´¿à´•à´‚ (&P) E&xtended à´Žà´•àµà´¸àµà´±àµà´±àµ»à´¡à´¡àµ (&x) Fi&le System: ഫയൽ സിസàµà´±àµà´±à´‚ (&l): LVM LV name എൽവി‌എം എൽവി പേരൠFlags: à´«àµà´²à´¾à´—àµà´•ൾ: &Mount Point: മൗണàµà´Ÿàµ പോയിനàµà´±àµ (&M): Si&ze: വലàµà´ªàµà´ªà´‚ (&z): En&crypt എൻകàµà´°à´¿à´ªàµà´±àµà´±àµ (&c) Logical ലോജികàµà´•ൽ Primary à´ªàµà´°à´¾à´¥à´®à´¿à´•à´‚ GPT ജിപിറàµà´±à´¿ Mountpoint already in use. Please select another one. മൗണàµà´Ÿàµà´ªàµ‹à´¯à´¿à´¨àµà´±àµ നിലവിൽ ഉപയോഗികàµà´•à´ªàµà´ªàµ†à´Ÿàµà´Ÿà´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ. ദയവായി മറàµà´±àµŠà´°àµ†à´£àµà´£à´‚ തിരഞàµà´žàµ†à´Ÿàµà´•àµà´•ൂ. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. ഫയൽ സിസàµà´±àµà´±à´‚ %1 ഉപയോഗിചàµà´šàµ %4 (%3) ൽ à´ªàµà´¤à´¿à´¯ %2MiB പാർടàµà´Ÿàµ€à´·àµ» സൃഷàµà´Ÿà´¿à´•àµà´•àµà´•. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. ഫയൽ സിസàµà´±àµà´±à´‚ <strong>%1</strong> ഉപയോഗിചàµà´šàµ <strong>%4</strong> (%3) ൽ à´ªàµà´¤à´¿à´¯ <strong>%2MiB</strong> പാർടàµà´Ÿàµ€à´·àµ» സൃഷàµà´Ÿà´¿à´•àµà´•àµà´•. Creating new %1 partition on %2. %2 ൽ à´ªàµà´¤à´¿à´¯ %1 പാർടàµà´Ÿàµ€à´·àµ» സൃഷàµà´Ÿà´¿à´•àµà´•àµà´¨àµà´¨àµ. The installer failed to create partition on disk '%1'. '%1' à´¡à´¿à´¸àµà´•ിൽ പാർടàµà´Ÿàµ€à´·àµ» സൃഷàµà´Ÿà´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿àµ½ ഇൻസàµà´±àµà´±à´¾à´³àµ¼ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ. CreatePartitionTableDialog Create Partition Table പാർടàµà´Ÿàµ€à´·àµ» ടേബിൾ നിർമàµà´®à´¿à´•àµà´•àµà´• Creating a new partition table will delete all existing data on the disk. ഒരൠപàµà´¤à´¿à´¯ പാർടàµà´Ÿàµ€à´·àµ» ടേബിൾ നിർമികàµà´•àµà´¨àµà´¨à´¤àµ à´¡à´¿à´¸àµà´•ിൽ നിലവിലàµà´³àµà´³ à´Žà´²àµà´²à´¾ ഡാറàµà´±à´¯àµà´‚ ഇലàµà´²à´¾à´¤à´¾à´•àµà´•àµà´‚. What kind of partition table do you want to create? à´à´¤àµ തരം പാർടàµà´Ÿàµ€à´·àµ» ടേബിളാണൠനിങàµà´™àµ¾ സൃഷàµà´Ÿà´¿à´•àµà´•ാൻ ആഗàµà´°à´¹à´¿à´•àµà´•àµà´¨àµà´¨à´¤àµ? Master Boot Record (MBR) മാസàµà´±àµà´±àµ¼ ബൂടàµà´Ÿàµ റെകàµà´•ോർഡൠ(എംബിആർ) GUID Partition Table (GPT) GUID പാർടàµà´Ÿàµ€à´·àµ» ടേബിൾ (ജിപിറàµà´±à´¿) CreatePartitionTableJob Create new %1 partition table on %2. %2 à´Žà´¨àµà´¨à´¤à´¿à´²àµâ€ %1 à´Žà´¨àµà´¨ à´ªàµà´¤à´¿à´¯ പാരàµâ€à´Ÿàµà´Ÿàµ€à´·à´¨àµâ€ ടേബിളàµâ€ സൃഷàµà´Ÿà´¿à´•àµà´•àµà´•. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). <strong>%2</strong> (%3) -ൽ à´ªàµà´¤à´¿à´¯ <strong>%1</strong> പാർടàµà´Ÿàµ€à´·àµ» ടേബിൾ ഉണàµà´Ÿà´¾à´•àµà´•àµà´•. Creating new %1 partition table on %2. %2 à´Žà´¨àµà´¨à´¤à´¿à´²àµâ€ %1 à´Žà´¨àµà´¨ à´ªàµà´¤à´¿à´¯ പാരàµâ€à´Ÿàµà´Ÿàµ€à´·à´¨àµâ€ ടേബിളàµâ€ സൃഷàµà´Ÿà´¿à´•àµà´•àµà´¨àµà´¨àµ. The installer failed to create a partition table on %1. %1 ൽ പാർടàµà´Ÿàµ€à´·àµ» പടàµà´Ÿà´¿à´• സൃഷàµà´Ÿà´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿àµ½ ഇൻസàµà´±àµà´±à´¾à´³àµ¼ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ. CreateUserJob Create user %1 %1 à´Žà´¨àµà´¨ ഉപയോകàµà´¤à´¾à´µà´¿à´¨àµ† സൃഷàµà´Ÿà´¿à´•àµà´•àµà´•. Create user <strong>%1</strong>. <strong>%1</strong> à´Žà´¨àµà´¨ ഉപയോകàµà´¤à´¾à´µà´¿à´¨àµ† സൃഷàµà´Ÿà´¿à´•àµà´•àµà´•. Creating user %1. ഉപയോകàµà´¤à´¾à´µàµ %1-നെ ഉണàµà´Ÿà´¾à´•àµà´•àµà´¨àµà´¨àµ. Sudoers dir is not writable. à´¸àµà´¡àµ‹à´µàµ‡à´´àµà´¸àµ ഡയറകàµà´Ÿà´±à´¿à´¯à´¿à´²àµ‡à´•àµà´•ൠഎഴàµà´¤à´¾àµ» സാധികàµà´•à´¿à´²àµà´². Cannot create sudoers file for writing. à´Žà´´àµà´¤àµà´¨àµà´¨à´¤à´¿à´¨à´¾à´¯à´¿ à´¸àµà´¡àµ‹à´µàµ‡à´´àµà´¸àµ ഫയൽ നിർമàµà´®à´¿à´•àµà´•ാനായിലàµà´². Cannot chmod sudoers file. à´¸àµà´¡àµ‹à´µàµ‡à´´àµà´¸àµ ഫയൽ chmod ചെയàµà´¯à´¾àµ» സാധിചàµà´šà´¿à´²àµà´². Cannot open groups file for reading. à´—àµà´°àµ‚à´ªàµà´¸àµ ഫയൽ വായികàµà´•ാനായി à´¤àµà´±à´•àµà´•ാൻ സാധിചàµà´šà´¿à´²àµà´². CreateVolumeGroupDialog Create Volume Group വോളàµà´¯à´‚ à´—àµà´°àµ‚à´ªàµà´ªàµ നിർമàµà´®à´¿à´•àµà´•àµà´• CreateVolumeGroupJob Create new volume group named %1. %1 à´Žà´¨àµà´¨àµ പേരàµà´³àµà´³ വോളàµà´¯à´‚ à´—àµà´°àµ‚à´ªàµà´ªàµ നിർമàµà´®à´¿à´•àµà´•àµà´•. Create new volume group named <strong>%1</strong>. <strong>%1</strong> à´Žà´¨àµà´¨àµ പേരàµà´³àµà´³ വോളàµà´¯à´‚ à´—àµà´°àµ‚à´ªàµà´ªàµ നിർമàµà´®à´¿à´•àµà´•àµà´•. Creating new volume group named %1. %1 à´Žà´¨àµà´¨àµ പേരàµà´³àµà´³ വോളàµà´¯à´‚ à´—àµà´°àµ‚à´ªàµà´ªàµ നിർമàµà´®à´¿à´•àµà´•àµà´¨àµà´¨àµ. The installer failed to create a volume group named '%1'. %1 à´Žà´¨àµà´¨àµ പേരàµà´³àµà´³ വോളàµà´¯à´‚ à´—àµà´°àµ‚à´ªàµà´ªàµ നിർമàµà´®à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿àµ½ ഇൻസàµà´±àµà´±à´¾à´³àµ¼ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ. DeactivateVolumeGroupJob Deactivate volume group named %1. %1 à´Žà´¨àµà´¨àµ പേരàµà´³àµà´³ വോളàµà´¯à´‚ à´—àµà´°àµ‚à´ªàµà´ªàµ നിഷàµà´•àµà´°à´¿à´¯à´®à´¾à´•àµà´•àµà´•. Deactivate volume group named <strong>%1</strong>. <strong>%1</strong> à´Žà´¨àµà´¨àµ പേരàµà´³àµà´³ വോളàµà´¯à´‚ à´—àµà´°àµ‚à´ªàµà´ªàµ നിഷàµà´•àµà´°à´¿à´¯à´®à´¾à´•àµà´•àµà´•. The installer failed to deactivate a volume group named %1. %1 à´Žà´¨àµà´¨àµ പേരàµà´³àµà´³ വോളàµà´¯à´‚ à´—àµà´°àµ‚à´ªàµà´ªàµ നിഷàµà´•àµà´°à´¿à´¯à´®à´¾à´•àµà´•àµà´¨àµà´¨à´¤à´¿àµ½ ഇൻസàµà´±àµà´±à´¾à´³àµ¼ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ. DeletePartitionJob Delete partition %1. പാർടàµà´Ÿàµ€à´·àµ» %1 ഇലàµà´²à´¾à´¤à´¾à´•àµà´•àµà´•. Delete partition <strong>%1</strong>. <strong>%1</strong> à´Žà´¨àµà´¨ പാരàµâ€à´Ÿàµà´Ÿàµ€à´·à´¨àµâ€ മായàµà´•àµà´•àµà´•. Deleting partition %1. പാർടàµà´Ÿàµ€à´·àµ» %1 ഇലàµà´²à´¾à´¤à´¾à´•àµà´•àµà´¨àµà´¨àµ. The installer failed to delete partition %1. പാർടàµà´Ÿàµ€à´·àµ» %1 ഇലàµà´²à´¾à´¤à´¾à´•àµà´•àµà´¨àµà´¨à´¤à´¿àµ½ ഇൻസàµà´±àµà´±à´¾à´³àµ¼ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. തിരഞàµà´žàµ†à´Ÿàµà´¤àµà´¤ à´¸àµà´±àµà´±àµ‹à´±àµ‡à´œàµ ഉപകരണതàµà´¤à´¿à´²àµ† <strong>പാർടàµà´Ÿàµ€à´·àµ» ടേബിളിനàµà´±àµ†</strong>തരം.<br><br>പാർടàµà´Ÿàµ€à´·àµ» ടേബിൾ തരം മാറàµà´±à´¾à´¨àµà´³àµà´³ ഒരേയൊരൠമാർഗàµà´—à´‚ പാർടàµà´Ÿàµ€à´·àµ» ടേബിൾ ആദàµà´¯à´‚ à´®àµà´¤àµ½ മായàµà´šàµà´šàµà´•ളയàµà´• à´Žà´¨àµà´¨à´¤à´¾à´£àµ,ഇതൠസംഭരണ ഉപകരണതàµà´¤à´¿à´²àµ† à´Žà´²àµà´²à´¾ ഡാറàµà´±à´¯àµà´‚ നശിപàµà´ªà´¿à´•àµà´•àµà´¨àµà´¨àµ.<br>നിങàµà´™àµ¾ à´µàµà´¯à´•àµà´¤à´®à´¾à´¯à´¿ തിരഞàµà´žàµ†à´Ÿàµà´¤àµà´¤à´¿à´Ÿàµà´Ÿà´¿à´²àµà´²àµ†à´™àµà´•ിൽ à´ˆ ഇൻസàµà´±àµà´±à´¾à´³àµ¼ നിലവിലെ പാർടàµà´Ÿàµ€à´·àµ» ടേബിൾ സൂകàµà´·à´¿à´•àµà´•àµà´‚.<br>ഉറപàµà´ªà´¿à´²àµà´²àµ†à´™àµà´•ിൽ, ആധàµà´¨à´¿à´• സിസàµà´±àµà´±à´™àµà´™à´³à´¿àµ½ ജിപിടിയാണൠശàµà´ªà´¾àµ¼à´¶ ചെയàµà´¯àµà´¨àµà´¨à´¤àµ. This device has a <strong>%1</strong> partition table. à´ˆ ഉപകരണതàµà´¤à´¿à´²àµâ€ ഒരൠ<strong>%1</strong> പാരàµâ€à´Ÿàµà´Ÿàµ€à´·à´¨àµâ€ ടേബിളàµà´£àµà´Ÿàµ. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. ഇതൊരൠ<strong>ലൂപàµà´ªàµ</strong> ഉപകരണമാണàµ.<br><br>ഒരൠഫയലിനàµà´±àµ† ഒരൠബàµà´²àµ‹à´•àµà´•ൠഉപകരണമാകàµà´•à´¿ ലഭàµà´¯à´®à´¾à´•àµà´•àµà´¨àµà´¨ പാർടàµà´Ÿàµ€à´·àµ» ടേബിളിലàµà´²à´¾à´¤àµà´¤ ഒരൠകൃതàµà´°à´¿à´®-ഉപകരണമാണിതàµ. ഇതàµà´¤à´°à´¤àµà´¤à´¿à´²àµà´³àµà´³ à´•àµà´°à´®àµ€à´•രണതàµà´¤à´¿àµ½ സാധാരണ ഒരൊറàµà´± ഫയൽ സിസàµà´±àµà´±à´‚ മാതàµà´°à´®àµ‡ കാണൂ. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. തിരഞàµà´žàµ†à´Ÿàµà´¤àµà´¤ à´¸àµà´±àµà´±àµ‹à´±àµ‡à´œàµ ഉപകരണതàµà´¤à´¿àµ½ ഒരൠ<strong>പാർടàµà´Ÿàµ€à´·àµ» ടേബിൾ</strong> à´ˆ ഇൻസàµà´±àµà´±à´¾à´³à´±à´¿à´¨àµ à´•à´£àµà´Ÿàµ†à´¤àµà´¤à´¾àµ» കഴിയിലàµà´².<br><br>à´’à´¨àµà´¨àµ†à´™àµà´•ിൽ ഉപകരണതàµà´¤à´¿à´¨àµ പാർടàµà´Ÿàµ€à´·àµ» ടേബിൾ ഇലàµà´², à´…à´²àµà´²àµ†à´™àµà´•ിൽ പാർടàµà´Ÿàµ€à´·àµ» ടേബിൾ കേടായി à´…à´²àµà´²àµ†à´™àµà´•ിൽ അറിയപàµà´ªàµ†à´Ÿà´¾à´¤àµà´¤ തരതàµà´¤à´¿à´²àµà´³àµà´³à´¤à´¾à´£àµ.<br>à´ˆ ഇൻസàµà´±àµà´±à´¾à´³à´±à´¿à´¨àµ നിങàµà´™àµ¾à´•àµà´•ായി യനàµà´¤àµà´°à´¿à´•മായോ à´…à´²àµà´²àµ†à´™àµà´•ിൽ à´¸àµà´µà´®àµ‡à´§à´¯à´¾ പാർടàµà´Ÿàµ€à´·à´¨à´¿à´‚ഗൠപേജൠവഴിയോ ഒരൠപàµà´¤à´¿à´¯ പാർടàµà´Ÿàµ€à´·àµ» ടേബിൾ സൃഷàµà´Ÿà´¿à´•àµà´•ാൻ à´•à´´à´¿à´¯àµà´‚. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br><strong>ഇ‌എഫàµâ€Œà´</strong> ബൂടàµà´Ÿàµ എൻ‌വയോൺ‌മെൻറിൽ‌ നിനàµà´¨àµà´‚ ആരംഭികàµà´•àµà´¨àµà´¨ ആധàµà´¨à´¿à´• സിസàµà´±àµà´±à´™àµà´™àµ¾â€Œà´•àµà´•ായàµà´³àµà´³ à´¶àµà´ªà´¾àµ¼à´¶à´šàµ†à´¯àµâ€Œà´¤ പാർടàµà´Ÿàµ€à´·àµ» ടേബിൾ തരമാണിതàµ. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. <br><br><strong>ബയോസàµ</strong> ബൂടàµà´Ÿàµ എൻ‌വയോൺ‌മെൻറിൽ‌ നിനàµà´¨àµà´‚ ആരംഭികàµà´•àµà´¨àµà´¨ പഴയ സിസàµà´±àµà´±à´™àµà´™à´³à´¿àµ½â€Œ മാതàµà´°à´®àµ‡ à´ˆ പാർടàµà´Ÿàµ€à´·àµ» ടേബിൾ തരം ഉചിതമാകൂ.മറàµà´±àµ സാഹചരàµà´¯à´™àµà´™à´³à´¿àµ½ പൊതàµà´µàµ† ജിപിടി യാണൠശàµà´ªà´¾àµ¼à´¶ ചെയàµà´¯àµà´¨àµà´¨à´¤àµ.<br><br><strong>à´®àµà´¨àµà´¨à´±à´¿à´¯à´¿à´ªàµà´ªàµ:</strong> കാലഹരണപàµà´ªàµ†à´Ÿàµà´Ÿ MS-DOS കാലഘടàµà´Ÿ à´¸àµà´±àµà´±à´¾àµ»à´¡àµ‡àµ¼à´¡à´¾à´£àµ MBR പാർടàµà´Ÿàµ€à´·àµ» ടേബിൾ.<br>പാർടàµà´Ÿàµ€à´·àµ» ടേബിൾ 4 à´ªàµà´°à´¾à´¥à´®à´¿à´• പാർടàµà´Ÿàµ€à´·à´¨àµà´•ൾ മാതàµà´°à´®àµ‡ സൃഷàµà´Ÿà´¿à´•àµà´•ാൻ കഴിയൂ, അവയിൽ 4 ൽ à´’à´¨àµà´¨àµ <em>à´Žà´•àµà´¸àµà´Ÿàµ†àµ»à´¡à´¡àµâ€Œ</em> പാർടàµà´Ÿàµ€à´·àµ» ആകാം, അതിൽ നിരവധി <em>ലോജികàµà´•ൽ</em> പാർടàµà´Ÿàµ€à´·à´¨àµà´•ൾ à´…à´Ÿà´™àµà´™à´¿à´¯à´¿à´°à´¿à´•àµà´•ാം. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1 - (%2) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 à´¡àµà´°à´¾à´•àµà´•à´Ÿàµà´Ÿà´¿à´¨à´¾à´¯à´¿ LUKS കോൺഫിഗറേഷൻ %1 ലേകàµà´•ൠഎഴàµà´¤àµà´• Skip writing LUKS configuration for Dracut: "/" partition is not encrypted à´¡àµà´°à´¾à´•àµà´•à´Ÿàµà´Ÿà´¿à´¨à´¾à´¯à´¿ LUKS കോൺഫിഗറേഷൻ à´Žà´´àµà´¤àµà´¨àµà´¨à´¤àµ ഒഴിവാകàµà´•àµà´•: "/" പാർടàµà´Ÿàµ€à´·àµ» എൻ‌കàµà´°à´¿à´ªàµà´±àµà´±àµ ചെയàµà´¤à´¿à´Ÿàµà´Ÿà´¿à´²àµà´² Failed to open %1 %1 à´¤àµà´±à´•àµà´•àµà´¨àµà´¨à´¤à´¿àµ½ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ DummyCppJob Dummy C++ Job à´¡à´®àµà´®à´¿ C++ ജോലി EditExistingPartitionDialog Edit Existing Partition നിലവിലàµà´³àµà´³ പാർടàµà´Ÿàµ€à´·àµ» തിരàµà´¤àµà´¤àµà´• Content: ഉളàµà´³à´Ÿà´•àµà´•à´‚: &Keep നിലനിർതàµà´¤àµà´• (&K) Format ഫോർമാറàµà´±àµ Warning: Formatting the partition will erase all existing data. à´®àµà´¨àµà´¨à´±à´¿à´¯à´¿à´ªàµà´ªàµ: പാർടàµà´Ÿàµ€à´·àµ» ഫോർമാറàµà´±àµ ചെയàµà´¯àµà´¨àµà´¨à´¤àµ നിലവിലàµà´³àµà´³ à´Žà´²àµà´²à´¾ ഡാറàµà´±à´¯àµà´‚ ഇലàµà´²à´¾à´¤à´¾à´•àµà´•àµà´‚. &Mount Point: മൗണàµà´Ÿàµ പോയിനàµà´±àµ (&M): Si&ze: വലàµà´ªàµà´ªà´‚ (&z): MiB MiB Fi&le System: ഫയൽ സിസàµà´±àµà´±à´‚ (&l): Flags: à´«àµà´²à´¾à´—àµà´•ൾ: Mountpoint already in use. Please select another one. മൗണàµà´Ÿàµà´ªàµ‹à´¯à´¿à´¨àµà´±àµ നിലവിൽ ഉപയോഗികàµà´•à´ªàµà´ªàµ†à´Ÿàµà´Ÿà´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ. ദയവായി മറàµà´±àµŠà´°àµ†à´£àµà´£à´‚ തിരഞàµà´žàµ†à´Ÿàµà´•àµà´•ൂ. EncryptWidget Form ഫോം En&crypt system സിസàµà´±àµà´±à´‚ എൻകàµà´°à´¿à´ªàµà´±àµà´±àµ ചെയàµà´¯àµà´• (&c) Passphrase രഹസàµà´¯à´µà´¾à´šà´•à´‚ Confirm passphrase രഹസàµà´¯à´µà´¾à´šà´•à´‚ à´¸àµà´¥à´¿à´°àµ€à´•à´°à´¿à´•àµà´•àµà´• Please enter the same passphrase in both boxes. à´°à´£àµà´Ÿàµ പെടàµà´Ÿà´¿à´•ളിലàµà´‚ ഒരേ രഹസàµà´¯à´µà´¾à´šà´•à´‚ നലàµâ€à´•àµà´•, FillGlobalStorageJob Set partition information പാർടàµà´Ÿàµ€à´·àµ» വിവരങàµà´™àµ¾ à´•àµà´°à´®àµ€à´•à´°à´¿à´•àµà´•àµà´• Install %1 on <strong>new</strong> %2 system partition. <strong>à´ªàµà´¤à´¿à´¯</strong> %2 സിസàµà´±àµà´±à´‚ പാർടàµà´Ÿàµ€à´·à´¨à´¿àµ½ %1 ഇൻസàµà´±àµà´±à´¾àµ¾ ചെയàµà´¯àµà´•. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. <strong>%1</strong> മൗണàµà´Ÿàµ പോയിനàµà´±àµ‹à´Ÿàµ കൂടി <strong>à´ªàµà´¤à´¿à´¯</strong> %2 പാർടàµà´Ÿàµ€à´·àµ» സജàµà´œàµ€à´•à´°à´¿à´•àµà´•àµà´•. Install %2 on %3 system partition <strong>%1</strong>. %3 സിസàµà´±àµà´±à´‚ പാർടàµà´Ÿàµ€à´·àµ» <strong>%1-ൽ</strong> %2 ഇൻസàµà´±àµà´±à´¾àµ¾ ചെയàµà´¯àµà´•. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. <strong>%2</strong> മൗണàµà´Ÿàµ പോയിനàµà´±àµ‹à´Ÿàµ കൂടി %3 പാർടàµà´Ÿàµ€à´·àµ» %1 സജàµà´œàµ€à´•à´°à´¿à´•àµà´•àµà´•. Install boot loader on <strong>%1</strong>. <strong>%1-ൽ</strong> ബൂടàµà´Ÿàµ ലോഡർ ഇൻസàµà´±àµà´±à´¾àµ¾ ചെയàµà´¯àµà´•. Setting up mount points. മൗണàµà´Ÿàµ പോയിനàµà´±àµà´•ൾ സജàµà´œàµ€à´•à´°à´¿à´•àµà´•àµà´•. FinishedPage Form ഫോം <Restart checkbox tooltip> <Restart checkbox tooltip> &Restart now ഇപàµà´ªàµ‹àµ¾ റീസàµà´±àµà´±à´¾àµ¼à´Ÿàµà´Ÿàµ ചെയàµà´¯àµà´• (&R) <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>à´Žà´²àµà´²à´¾à´‚ പൂർതàµà´¤à´¿à´¯à´¾à´¯à´¿.</h1><br/>%1 താങàµà´•à´³àµà´Ÿàµ† à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿà´±à´¿àµ½ സജàµà´œà´®à´¾à´•àµà´•à´ªàµà´ªàµ†à´Ÿàµà´Ÿà´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ. <br/>താങàµà´•ൾകàµà´•ൠതാങàµà´•à´³àµà´Ÿàµ† à´ªàµà´¤à´¿à´¯ സിസàµà´±àµà´±à´‚ ഉപയോഗിചàµà´šàµ à´¤àµà´Ÿà´™àµà´™à´¾à´‚. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <html><head/><body><p>à´ˆ ബോകàµà´¸à´¿àµ½ ശെരിയിടàµà´Ÿà´¾àµ½,നിങàµà´™à´³àµà´Ÿàµ† സിസàµà´±àµà´±à´‚ <span style="font-style:italic;">പൂർതàµà´¤à´¿à´¯à´¾à´¯à´¿ </span>അമർതàµà´¤àµà´®àµà´ªàµ‹à´´àµ‹ സജàµà´œàµ€à´•à´°à´£ à´ªàµà´°àµ‹à´—àµà´°à´¾à´‚ à´…à´Ÿà´¯àµà´•àµà´•àµà´®àµà´ªàµ‹à´´àµ‹ ഉടൻ à´ªàµà´¨à´°à´¾à´°à´‚à´­à´¿à´•àµà´•àµà´‚. <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>à´Žà´²àµà´²à´¾à´‚ പൂർതàµà´¤à´¿à´¯à´¾à´¯à´¿.</h1><br/> %1 നിങàµà´™à´³àµà´Ÿàµ† à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿà´±à´¿àµ½ ഇൻസàµà´±àµà´±à´¾àµ¾ ചെയàµà´¤àµ. <br/>നിങàµà´™àµ¾à´•àµà´•ൠഇപàµà´ªàµ‹àµ¾ നിങàµà´™à´³àµà´Ÿàµ† à´ªàµà´¤à´¿à´¯ സിസàµà´±àµà´±à´¤àµà´¤à´¿à´²àµ‡à´•àµà´•ൠപàµà´¨à´°à´¾à´°à´‚à´­à´¿à´•àµà´•ാം à´…à´²àµà´²àµ†à´™àµà´•ിൽ %2 ലൈവൠഎൻവയോൺമെൻറൠഉപയോഗികàµà´•àµà´¨àµà´¨à´¤àµ à´¤àµà´Ÿà´°à´¾à´‚. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <html><head/><body><p>à´ˆ ബോകàµà´¸à´¿àµ½ ശെരിയിടàµà´Ÿà´¾àµ½,നിങàµà´™à´³àµà´Ÿàµ† സിസàµà´±àµà´±à´‚ <span style="font-style:italic;">പൂർതàµà´¤à´¿à´¯à´¾à´¯à´¿ </span>അമർതàµà´¤àµà´®àµà´ªàµ‹à´´àµ‹ സജàµà´œàµ€à´•à´°à´£ à´ªàµà´°àµ‹à´—àµà´°à´¾à´‚ à´…à´Ÿà´¯àµà´•àµà´•àµà´®àµà´ªàµ‹à´´àµ‹ ഉടൻ à´ªàµà´¨à´°à´¾à´°à´‚à´­à´¿à´•àµà´•àµà´‚. <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>സജàµà´œàµ€à´•രണം പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ</h1><br/>നിങàµà´™à´³àµà´Ÿàµ† à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿà´±à´¿àµ½ %1 സജàµà´œà´®à´¾à´•àµà´•ിയിടàµà´Ÿà´¿à´²àµà´².<br/>പിശകൠസനàµà´¦àµ‡à´¶à´‚ ഇതായിരàµà´¨àµà´¨àµ: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>ഇൻസàµà´±àµà´±à´¾à´³àµ‡à´·àµ» പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ</h1><br/> നിങàµà´™à´³àµà´Ÿàµ† à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿà´±à´¿àµ½ %1 സജàµà´œà´®à´¾à´•àµà´•ിയിടàµà´Ÿà´¿à´²àµà´².<br/>പിശകൠസനàµà´¦àµ‡à´¶à´‚ ഇതായിരàµà´¨àµà´¨àµ: %2. FinishedViewStep Finish പൂർതàµà´¤à´¿à´¯à´¾à´•àµà´•àµà´• Setup Complete സജàµà´œàµ€à´•രണം പൂർതàµà´¤à´¿à´¯à´¾à´¯à´¿ Installation Complete ഇൻസàµà´±àµà´±à´¾à´³àµ‡à´·àµ» പൂർതàµà´¤à´¿à´¯à´¾à´¯à´¿ The setup of %1 is complete. %1 à´¨àµà´±àµ† സജàµà´œàµ€à´•രണം പൂർതàµà´¤à´¿à´¯à´¾à´¯à´¿. The installation of %1 is complete. %1 à´¨àµà´±àµ† ഇൻസàµà´±àµà´±à´¾à´³àµ‡à´·àµ» പൂർതàµà´¤à´¿à´¯à´¾à´¯à´¿. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. %4 -à´²àµà´³àµà´³ പാർടàµà´Ÿàµ€à´·àµ» %1 (ഫയൽ സിസàµà´±àµà´±à´‚: %2, വലàµà´ªàµà´ªà´‚:‌%3 MiB) ഫോർമാറàµà´±àµ ചെയàµà´¯àµà´•. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. ഫയൽ സിസàµà´±àµà´±à´‚ <strong>%2</strong> ഉപയോഗിചàµà´šàµ %3 MiB പാർടàµà´Ÿàµ€à´·àµ» <strong>%1</strong> ഫോർമാറàµà´±àµ ചെയàµà´¯àµà´•. Formatting partition %1 with file system %2. ഫയൽ സിസàµà´±àµà´±à´‚ %2 ഉപയോഗിചàµà´šàµ പാർടàµà´Ÿàµ€à´·àµ»â€Œ%1 ഫോർമാറàµà´±àµ ചെയàµà´¯àµà´¨àµà´¨àµ. The installer failed to format partition %1 on disk '%2'. à´¡à´¿à´¸àµà´•ൠ'%2'ൽ ഉളàµà´³ പാർടàµà´Ÿàµ€à´·àµ»â€Œ %1 ഫോർമാറàµà´±àµ ചെയàµà´¯àµà´¨àµà´¨à´¤à´¿àµ½ ഇൻസàµà´±àµà´±à´¾à´³àµ¼ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ. GeneralRequirements has at least %1 GiB available drive space %1 GiB à´¡à´¿à´¸àµà´•àµà´¸àµà´ªàµ†à´¯àµà´¸àµ à´Žà´™àµà´•à´¿à´²àµà´‚ ലഭàµà´¯à´®à´¾à´¯à´¿à´°à´¿à´•àµà´•ണം. There is not enough drive space. At least %1 GiB is required. ആവശàµà´¯à´¤àµà´¤à´¿à´¨àµ à´¡à´¿à´¸àµà´•àµà´¸àµà´ªàµ†à´¯àµà´¸àµ ലഭàµà´¯à´®à´²àµà´². %1 GiB à´Žà´™àµà´•à´¿à´²àµà´‚ വേണം. has at least %1 GiB working memory %1 GiB RAM à´Žà´™àµà´•à´¿à´²àµà´‚ ലഭàµà´¯à´®à´¾à´¯à´¿à´°à´¿à´•àµà´•ണം. The system does not have enough working memory. At least %1 GiB is required. സിസàµà´±àµà´±à´¤àµà´¤à´¿àµ½ ആവശàµà´¯à´¤àµà´¤à´¿à´¨àµ RAM ലഭàµà´¯à´®à´²àµà´². %1 GiB à´Žà´™àµà´•à´¿à´²àµà´‚ വേണം. is plugged in to a power source ഒരൠഊർജàµà´œà´¸àµà´°àµ‹à´¤à´¸àµà´¸àµà´®à´¾à´¯à´¿ ബനàµà´§à´¿à´ªàµà´ªà´¿à´šàµà´šà´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ The system is not plugged in to a power source. സിസàµà´±àµà´±à´‚ ഒരൠഊർജàµà´œà´¸àµà´°àµ‹à´¤à´¸àµà´¸à´¿à´²àµ‡à´•àµà´•ൠബനàµà´§à´¿à´ªàµà´ªà´¿à´šàµà´šà´¿à´Ÿàµà´Ÿà´¿à´²àµà´². is connected to the Internet ഇനàµà´±àµ¼à´¨àµ†à´±àµà´±à´¿à´²àµ‡à´•àµà´•ൠബനàµà´§à´¿à´ªàµà´ªà´¿à´šàµà´šà´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ The system is not connected to the Internet. സിസàµà´±àµà´±à´‚ ഇനàµà´±àµ¼à´¨àµ†à´±àµà´±àµà´®à´¾à´¯à´¿ ബനàµà´§à´¿à´ªàµà´ªà´¿à´šàµà´šà´¿à´Ÿàµà´Ÿà´¿à´²àµà´². is running the installer as an administrator (root) ഇൻസàµà´±àµà´±à´¾à´³àµ¼ കാരàµà´¯à´¨à´¿àµ¼à´µà´¾à´¹à´•രിൽ ഒരാളായിടàµà´Ÿà´¾à´£àµ (root) à´ªàµà´°à´µàµ¼à´¤àµà´¤à´¿à´ªàµà´ªà´¿à´•àµà´•àµà´¨àµà´¨à´¤àµ The setup program is not running with administrator rights. സെറàµà´±à´ªàµà´ªàµ à´ªàµà´°àµ‹à´—àµà´°à´¾à´‚ à´…à´¡àµà´®à´¿à´¨à´¿à´¸àµà´Ÿàµà´°àµ‡à´±àµà´±àµ¼ അവകാശങàµà´™àµ¾ ഇലàµà´²à´¾à´¤àµ†à´¯à´¾à´£àµ à´ªàµà´°à´µàµ¼à´¤àµà´¤à´¿à´•àµà´•àµà´¨àµà´¨à´¤àµ. The installer is not running with administrator rights. ഇൻസàµà´±àµà´±à´¾à´³àµ¼ à´…à´¡àµà´®à´¿à´¨à´¿à´¸àµà´Ÿàµà´°àµ‡à´±àµà´±àµ¼ അവകാശങàµà´™àµ¾ ഇലàµà´²à´¾à´¤àµ†à´¯à´¾à´£àµ à´ªàµà´°à´µàµ¼à´¤àµà´¤à´¿à´•àµà´•àµà´¨àµà´¨à´¤àµ has a screen large enough to show the whole installer à´®àµà´´àµà´µàµ» ഇൻസàµà´±àµà´±à´¾à´³à´±àµà´‚ കാണികàµà´•ാൻ തകàµà´• വലിപàµà´ªà´®àµà´³àµà´³ ഒരൠസàµà´•àµà´°àµ€à´¨àµà´£àµà´Ÿàµ The screen is too small to display the setup program. സജàµà´œàµ€à´•à´°à´£ à´ªàµà´°à´¯àµ‹à´—à´‚ കാണികàµà´•ാൻ തകàµà´• വലàµà´ªàµà´ªà´‚ à´¸àµà´•àµà´°àµ€à´¨à´¿à´¨à´¿à´²àµà´². The screen is too small to display the installer. ഇൻസàµà´±àµà´±à´¾à´³àµ¼ കാണികàµà´•ാൻ തകàµà´• വലàµà´ªàµà´ªà´‚ à´¸àµà´•àµà´°àµ€à´¨à´¿à´¨à´¿à´²àµà´². HostInfoJob Collecting information about your machine. താങàµà´•à´³àµà´Ÿàµ† മെഷീനെ പറàµà´±à´¿à´¯àµà´³àµà´³ വിവരങàµà´™àµ¾ ശേഖരികàµà´•àµà´¨àµà´¨àµ. IDJob OEM Batch Identifier ഒഇഎം ബാചàµà´šàµ à´à´¡à´¨àµà´±à´¿à´«à´¯àµ¼ Could not create directories <code>%1</code>. <code>%1</code> ഫോളàµâ€à´¡àµ¼ à´¶àµà´°à´·àµà´Ÿà´¿à´•àµà´•ാനായിലàµà´². Could not open file <code>%1</code>. ഫയൽ <code>%1</code> à´¤àµà´±à´•àµà´•ാനായിലàµà´². Could not write to file <code>%1</code>. ഫയൽ <code>%1 -ലേകàµà´•àµ</code>à´Žà´´àµà´¤à´¾à´¨à´¾à´¯à´¿à´²àµà´². InitcpioJob Creating initramfs with mkinitcpio. mkinitcpio ഉപയോഗിചàµà´šàµ initramfs നിർമàµà´®à´¿à´•àµà´•àµà´¨àµà´¨àµ. InitramfsJob Creating initramfs. initramfs നിർമàµà´®à´¿à´•àµà´•àµà´¨àµà´¨àµ. InteractiveTerminalPage Konsole not installed കോണàµâ€à´¸àµ‹à´³àµâ€ ഇനàµâ€à´¸àµà´±àµà´±à´¾à´³àµâ€ ചെയàµà´¤à´¿à´Ÿàµà´Ÿà´¿à´²àµà´² Please install KDE Konsole and try again! കെഡിഇ കൺസോൾ ഇൻസàµà´±àµà´±à´¾àµ¾ ചെയàµà´¤àµ വീണàµà´Ÿàµà´‚ à´¶àµà´°à´®à´¿à´•àµà´•àµà´•! Executing script: &nbsp;<code>%1</code> à´¸àµà´•àµà´°à´¿à´ªàµà´±àµà´±àµ നിർവàµà´µà´¹à´¿à´•àµà´•àµà´¨àµà´¨àµ:&nbsp;<code>%1</code> InteractiveTerminalViewStep Script à´¸àµà´•àµà´°à´¿à´ªàµà´±àµà´±àµ KeyboardPage Set keyboard model to %1.<br/> കീബോർഡൠമോഡൽ %1 à´Žà´¨àµà´¨à´¤à´¾à´¯à´¿ à´•àµà´°à´®àµ€à´•à´°à´¿à´•àµà´•àµà´•.<br/> Set keyboard layout to %1/%2. കീബോർഡൠവിനàµà´¯à´¾à´¸à´‚ %1%2 à´Žà´¨àµà´¨à´¤à´¾à´¯à´¿ à´•àµà´°à´®àµ€à´•à´°à´¿à´•àµà´•àµà´•. KeyboardViewStep Keyboard കീബോരàµâ€à´¡àµâ€Œ LCLocaleDialog System locale setting സിസàµà´±àµà´±à´‚ ഭാഷാ à´•àµà´°à´®àµ€à´•രണം The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. സിസàµà´±àµà´±à´‚ ലൊകàµà´•േൽ ഭാഷയàµà´‚, കമാൻഡൠലൈൻ സമàµà´ªàµ¼à´•àµà´•à´®àµà´–ഘടകങàµà´™à´³àµà´Ÿàµ† à´…à´•àµà´·à´°à´•àµà´•ൂടàµà´Ÿà´™àµà´™à´³àµ‡à´¯àµà´‚ à´¸àµà´µà´¾à´§àµ€à´¨à´¿à´•àµà´•àµà´‚. <br/>നിലവിലàµà´³àµà´³ à´•àµà´°à´®àµ€à´•രണം <strong>%1</strong> ആണàµ. &Cancel റദàµà´¦à´¾à´•àµà´•àµà´• (&C) &OK à´¶à´°à´¿ (&O) LicensePage Form ഫോം <h1>License Agreement</h1> <h1>à´…à´¨àµà´®à´¤à´¿à´ªà´¤àµà´° നിബനàµà´§à´¨à´•ൾ</h1> I accept the terms and conditions above. à´®àµà´•ളിലàµà´³àµà´³ നിബനàµà´§à´¨à´•à´³àµà´‚ à´µàµà´¯à´µà´¸àµà´¥à´•à´³àµà´‚ ഞാൻ അംഗീകരികàµà´•àµà´¨àµà´¨àµ. Please review the End User License Agreements (EULAs). എൻഡൠയൂസർ ലൈസൻസൠഎഗàµà´°à´¿à´®àµ†à´¨àµà´±àµà´•ൾ (EULAs) ദയവായി പരിശോധികàµà´•ൂ. This setup procedure will install proprietary software that is subject to licensing terms. à´ˆ സജàµà´œàµ€à´•രണപàµà´°à´•àµà´°à´¿à´¯ à´…à´¨àµà´®à´¤à´¿à´ªà´¤àµà´°à´¨à´¿à´¬à´¨àµà´§à´¨à´•ൾകàµà´•ൠകീഴിലàµà´³àµà´³ à´•àµà´¤àµà´¤à´• സോഫàµà´±àµà´±àµâ€Œâ€Œà´µàµ†à´¯à´±àµà´•ൾ ഇൻസàµà´±àµà´±à´¾àµ¾ ചെയàµà´¯àµà´‚. If you do not agree with the terms, the setup procedure cannot continue. താങàµà´•ൾ à´ˆ നിബനàµà´§à´¨à´•ളോടൠയോജികàµà´•àµà´¨àµà´¨à´¿à´²àµà´²àµ†à´™àµà´•ിൽ, സജàµà´œàµ€à´•രണപàµà´°à´•àµà´°à´¿à´¯à´¯àµà´•àµà´•ൠതàµà´Ÿà´°à´¾à´¨à´¾à´•à´¿à´²àµà´². This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. കൂടàµà´¤àµ½ സവിശേഷതകൾ നൽകàµà´¨àµà´¨à´¤à´¿à´¨àµà´‚ ഉപയോകàµà´¤à´¾à´µà´¿à´¨àµà´±àµ† à´…à´¨àµà´­à´µà´‚ കൂടàµà´¤àµ½ മികവàµà´±àµà´±à´¤à´¾à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµà´‚ à´ˆ സജàµà´œàµ€à´•രണപàµà´°à´•àµà´°à´¿à´¯à´¯àµà´•àµà´•ൠഅനàµà´®à´¤à´¿à´ªà´¤àµà´°à´¨à´¿à´¬à´¨àµà´§à´¨à´•ൾകàµà´•ൠകീഴിലàµà´³àµà´³ à´•àµà´¤àµà´¤à´• സോഫàµà´±àµà´±àµâ€Œâ€Œà´µàµ†à´¯à´±àµà´•ൾ ഇൻസàµà´±àµà´±à´¾àµ¾ ചെയàµà´¯à´¾à´‚. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. താങàµà´•ൾ à´ˆ നിബനàµà´§à´¨à´•ളോടൠയോജികàµà´•àµà´¨àµà´¨à´¿à´²àµà´²àµ†à´™àµà´•ിൽ, à´•àµà´¤àµà´¤à´• സോഫàµà´±àµà´±àµâ€Œâ€Œà´µàµ†à´¯à´±àµà´•ൾ ഇൻസàµà´±àµà´±à´¾àµ¾ ചെയàµà´¯à´ªàµà´ªàµ†à´Ÿà´¿à´²àµà´², പകരം à´¸àµà´µà´¤à´¨àµà´¤àµà´° ബദലàµà´•ൾ ഉപയോഗികàµà´•àµà´‚. LicenseViewStep License à´…à´¨àµà´®à´¤à´¿à´ªà´¤àµà´°à´‚ LicenseWidget URL: %1 URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 à´¡àµà´°àµˆà´µàµ¼</strong><br/>%2 വക <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 à´—àµà´°à´¾à´«à´¿à´•àµà´¸àµ à´¡àµà´°àµˆà´µàµ¼</strong><br/><font color="Grey">by %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 à´¬àµà´°àµŒà´¸àµ¼ à´ªàµà´²à´—ിൻ</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 കോഡെകൠ</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 പാകàµà´•േജൠ</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> File: %1 ഫയലàµ: %1 Show the license text à´…à´¨àµà´®à´¤à´¿à´ªà´¤àµà´°à´‚ കാണികàµà´•àµà´• Open license agreement in browser. à´…à´¨àµà´®à´¤à´¿à´ªà´¤àµà´°à´¨à´¿à´¬à´¨àµà´§à´¨à´•ൾ à´¬àµà´°àµ—സറിൽ à´¤àµà´±à´•àµà´•àµà´•. Hide license text à´…à´¨àµà´®à´¤à´¿ പതàµà´°à´‚ മറചàµà´šàµ വെകàµà´•àµà´• LocalePage The system language will be set to %1. സിസàµà´±àµà´±à´‚ ഭാഷ %1 ആയി സജàµà´œà´®à´¾à´•àµà´•àµà´‚. The numbers and dates locale will be set to %1. സംഖàµà´¯ & തീയതി രീതി %1 ആയി à´•àµà´°à´®àµ€à´•à´°à´¿à´•àµà´•àµà´‚. Region: à´ªàµà´°à´¦àµ‡à´¶à´‚: Zone: മേഖല: &Change... മാറàµà´±àµà´• (&C)... Set timezone to %1/%2.<br/> സമയപദàµà´§à´¤à´¿ %1/%2 ആയി à´•àµà´°à´®àµ€à´•à´°à´¿à´•àµà´•àµà´•.<br/> LocaleViewStep Location à´¸àµà´¥à´¾à´¨à´‚ LuksBootKeyFileJob Configuring LUKS key file. LUKS കീ ഫയൽ à´•àµà´°à´®àµ€à´•à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ. No partitions are defined. പാരàµâ€à´Ÿàµà´Ÿàµ€à´·àµà´¯à´¨àµà´•à´³àµâ€ നിരàµâ€à´µàµà´µà´šà´¿à´šàµà´šà´¿à´Ÿàµà´Ÿà´¿à´²àµà´² Encrypted rootfs setup error à´Žà´¨àµâ€à´•àµà´°à´¿à´ªàµà´±àµà´±àµà´šàµ†à´¯àµà´¤ റൂടàµà´Ÿàµ à´Žà´«àµà´Žà´¸àµ സജàµà´œàµ€à´•രണതàµà´¤à´¿à´²àµâ€ à´ªàµà´°à´¶àµà´¨à´®àµà´£àµà´Ÿàµàµ Root partition %1 is LUKS but no passphrase has been set. റൂടàµà´Ÿàµ പാർടàµà´Ÿàµ€à´·àµ» %1 LUKS ആണൠപകàµà´·àµ‡ രഹസàµà´¯à´µà´¾à´•àµà´•ൊനàµà´¨àµà´‚ à´•àµà´°à´®àµ€à´•à´°à´¿à´šàµà´šà´¿à´Ÿàµà´Ÿà´¿à´²àµà´². Could not create LUKS key file for root partition %1. റൂടàµà´Ÿàµ പാർടàµà´Ÿàµ€à´·àµ» %1നൠവേണàµà´Ÿà´¿ LUKS കീ ഫയൽ നിർമàµà´®à´¿à´•àµà´•ാനായിലàµà´². Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. മെഷീൻ-à´à´¡àµ നിർമàµà´®à´¿à´•àµà´•àµà´• Configuration Error à´•àµà´°à´®àµ€à´•രണതàµà´¤à´¿àµ½ പിഴവൠNo root mount point is set for MachineId. മെഷീൻ à´à´¡à´¿à´¯àµà´•àµà´•ൠറൂടàµà´Ÿàµ മൗണàµà´Ÿàµ പോയിനàµà´±àµŠà´¨àµà´¨àµà´‚ à´•àµà´°à´®àµ€à´•à´°à´¿à´šàµà´šà´¿à´Ÿàµà´Ÿà´¿à´²àµà´² NetInstallPage Name പേരൠDescription വിവരണം Network Installation. (Disabled: Unable to fetch package lists, check your network connection) നെറàµà´±àµâ€Œà´µàµ¼à´•àµà´•ൠഇൻസàµà´±àµà´±à´¾à´³àµ‡à´·àµ». (à´…à´ªàµà´°à´¾à´ªàµâ€Œà´¤à´®à´¾à´•àµà´•à´¿: പാകàµà´•േജൠലിസàµà´±àµà´±àµà´•ൾ നേടാനായിലàµà´², നിങàµà´™à´³àµà´Ÿàµ† നെറàµà´±àµâ€Œà´µàµ¼à´•àµà´•ൠകണകàµà´·àµ» പരിശോധികàµà´•àµà´•) Network Installation. (Disabled: Received invalid groups data) നെറàµà´±àµâ€Œà´µàµ¼à´•àµà´•ൠഇൻസàµà´±àµà´±à´¾à´³àµ‡à´·àµ». (à´…à´ªàµà´°à´¾à´ªàµâ€Œà´¤à´®à´¾à´•àµà´•à´¿: അസാധàµà´µà´¾à´¯ à´—àµà´°àµ‚à´ªàµà´ªàµà´•à´³àµà´Ÿàµ† ഡാറàµà´± ലഭിചàµà´šàµ) Network Installation. (Disabled: Incorrect configuration) നെറàµà´±àµâ€Œà´µàµ¼à´•àµà´•ൠഇൻസàµà´±àµà´±à´¾à´³àµ‡à´·àµ». (à´ªàµà´°à´µàµ¼à´¤àµà´¤à´¨à´°à´¹à´¿à´¤à´®à´¾à´•àµà´•à´¿: തെറàµà´±à´¾à´¯ à´•àµà´°à´®àµ€à´•രണം) NetInstallViewStep Package selection പാകàµà´•േജàµàµ തിരഞàµà´žàµ†à´Ÿàµà´•àµà´•à´²àµâ€ Office software Office package Browser software Browser package Web browser Kernel Services Login Desktop Applications NotesQmlViewStep Notes OEMPage Ba&tch: കൂടàµà´Ÿà´‚ (&t): <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>ഒരൠബാചàµà´šàµ à´à´¡à´¨àµà´±à´¿à´«à´¯àµ¼ ഇവിടെ നൽകàµà´•. ഇതൠടാർഗെറàµà´±àµ സിസàµà´±àµà´±à´¤àµà´¤à´¿àµ½ സംഭരികàµà´•àµà´‚</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>OEM à´•àµà´°à´®àµ€à´•രണം</h1><p>കലാമരേസൠലകàµà´·àµà´¯ സിസàµà´±àµà´±à´‚ à´•àµà´°à´®àµ€à´•à´°à´¿à´•àµà´•àµà´®àµà´ªàµ‹àµ¾ OEM à´•àµà´°à´®àµ€à´•രണങàµà´™àµ¾ ഉപയോഗികàµà´•àµà´‚.</p></body></html> OEMViewStep OEM Configuration ഓഇഎം à´•àµà´°à´®àµ€à´•രണം Set the OEM Batch Identifier to <code>%1</code>. OEM ബാചàµà´šàµ à´à´¡à´¨àµà´±à´¿à´«à´¯àµ¼ <code>%1</code> ആയി à´•àµà´°à´®àµ€à´•à´°à´¿à´•àµà´•àµà´•. PWQ Password is too short രഹസàµà´¯à´µà´¾à´•àµà´•ൠവളരെ ചെറàµà´¤à´¾à´£àµ Password is too long രഹസàµà´¯à´µà´¾à´•àµà´•ൠവളരെ വലàµà´¤à´¾à´£àµ Password is too weak രഹസàµà´¯à´µà´¾à´•àµà´•ൠവളരെ à´¦àµàµ¼à´¬à´²à´®à´¾à´£àµ Memory allocation error when setting '%1' '%1' à´•àµà´°à´®àµ€à´•àµà´•à´°à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿àµ½ മെമàµà´®à´±à´¿ പങàµà´•àµà´µà´¯àµà´•àµà´•ൽ പിഴവൠMemory allocation error മെമàµà´®à´±à´¿ വിനàµà´¯à´¸à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿àµ½ പിഴവൠThe password is the same as the old one രഹസàµà´¯à´µà´¾à´•àµà´•ൠപഴയയതàµà´¤à´¨àµà´¨àµ† ആണൠThe password is a palindrome രഹസàµà´¯à´µà´¾à´•àµà´•ൠഒരൠഅനàµà´²àµ‡à´¾à´®à´µà´¿à´²àµ‡à´¾à´®à´ªà´¦à´®à´¾à´£àµ The password differs with case changes only പാസàµâ€Œà´µàµ‡à´¡àµ à´…à´•àµà´·à´°à´™àµà´™à´³àµà´Ÿàµ† കേസൠമാറàµà´±à´™àµà´™à´³à´¿àµ½ മാതàµà´°à´‚ à´µàµà´¯à´¤àµà´¯à´¾à´¸à´ªàµà´ªàµ†à´Ÿàµà´Ÿà´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ The password is too similar to the old one രഹസàµà´¯à´µà´¾à´•àµà´•ൠപഴയതിനോടൠവളരെ സമാനമാണൠThe password contains the user name in some form രഹസàµà´¯à´µà´¾à´•àµà´•ൠà´à´¤àµ†à´™àµà´•à´¿à´²àµà´‚ രൂപതàµà´¤à´¿àµ½ ഉപയോകàµà´¤àµƒà´¨à´¾à´®à´‚ à´…à´Ÿà´™àµà´™à´¿à´¯à´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ The password contains words from the real name of the user in some form രഹസàµà´¯à´µà´¾à´•àµà´•ിൽà´à´¤àµ†à´™àµà´•à´¿à´²àµà´‚ രൂപതàµà´¤à´¿àµ½ ഉപയോകàµà´¤à´¾à´µà´¿à´¨àµà´±àµ† യഥാർതàµà´¥ പേരിൽ നിനàµà´¨àµà´³àµà´³ വാകàµà´•àµà´•ൾ à´…à´Ÿà´™àµà´™à´¿à´¯à´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ The password contains forbidden words in some form രഹസàµà´¯à´µà´¾à´•àµà´•ിൽ à´à´¤àµ†à´™àµà´•à´¿à´²àµà´‚ രൂപതàµà´¤à´¿àµ½ വിലകàµà´•à´ªàµà´ªàµ†à´Ÿàµà´Ÿ വാകàµà´•àµà´•ൾ à´…à´Ÿà´™àµà´™à´¿à´¯à´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ The password contains less than %1 digits രഹസàµà´¯à´µà´¾à´•àµà´•ൠ%1 à´…à´•àµà´•à´¤àµà´¤à´¿àµ½ à´•àµà´±à´µà´¾à´£àµ The password contains too few digits രഹസàµà´¯à´µà´¾à´•àµà´•ിൽ വളരെ à´•àµà´±à´šàµà´šàµ à´…à´•àµà´•à´™àµà´™àµ¾ à´…à´Ÿà´™àµà´™à´¿à´¯à´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ The password contains less than %1 uppercase letters രഹസàµà´¯à´µà´¾à´•àµà´•ിൽ %1 വലിയകàµà´·à´°à´™àµà´™àµ¾ à´…à´Ÿà´™àµà´™à´¿à´¯à´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ The password contains too few uppercase letters രഹസàµà´¯à´µà´¾à´•àµà´•ിൽ വളരെ à´•àµà´±à´šàµà´šàµ വലിയകàµà´·à´°à´™àµà´™àµ¾ മാതàµà´°à´®àµ‡ à´…à´Ÿà´™àµà´™à´¿à´¯à´¿à´Ÿàµà´Ÿàµà´³àµà´³àµ The password contains less than %1 lowercase letters രഹസàµà´¯à´µà´¾à´•àµà´•ിൽ %1 -ൽ താഴെ ചെറിയ à´…à´•àµà´·à´°à´™àµà´™àµ¾ à´…à´Ÿà´™àµà´™à´¿à´¯à´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ The password contains too few lowercase letters രഹസàµà´¯à´µà´¾à´•àµà´•ിൽ വളരെ à´•àµà´±à´šàµà´šàµ ചെറിയകàµà´·à´°à´™àµà´™àµ¾ മാതàµà´°à´®àµ‡ à´…à´Ÿà´™àµà´™à´¿à´¯à´¿à´Ÿàµà´Ÿàµà´³àµà´³àµ The password contains less than %1 non-alphanumeric characters രഹസàµà´¯à´µà´¾à´•àµà´•ിൽ ആൽഫാനàµà´¯àµ‚മെറികൠഇതര à´ªàµà´°à´¤àµ€à´•à´™àµà´™àµ¾ %1 -ൽ à´•àµà´±à´µà´¾à´£àµ The password contains too few non-alphanumeric characters രഹസàµà´¯à´µà´¾à´•àµà´•ിൽ ആൽഫാനàµà´¯àµ‚മെറികൠഇതര à´ªàµà´°à´¤àµ€à´•à´™àµà´™àµ¾ വളരെ à´•àµà´±à´µà´¾à´£àµ The password is shorter than %1 characters പാസàµâ€Œà´µàµ‡à´¡àµ %1 à´ªàµà´°à´¤àµ€à´•à´™àµà´™à´³àµ‡à´•àµà´•ാൾ ചെറàµà´¤à´¾à´£àµ The password is too short രഹസàµà´¯à´µà´¾à´•àµà´•ൠവളരെ ചെറàµà´¤à´¾à´£àµ The password is just rotated old one രഹസàµà´¯à´µà´¾à´•àµà´•ൠപഴയതàµà´¤à´¨àµà´¨àµ† തിരിചàµà´šà´¿à´Ÿàµà´Ÿà´¤à´¾à´£àµ The password contains less than %1 character classes പാസàµâ€Œà´µàµ‡à´¡à´¿àµ½ à´ªàµà´°à´¤àµ€à´• à´•àµà´²à´¾à´¸àµà´•ൾ %1 ൽ à´•àµà´±à´µà´¾à´£àµ The password does not contain enough character classes രഹസàµà´¯à´µà´¾à´•àµà´•ിൽ ആവശàµà´¯à´¤àµà´¤à´¿à´¨àµ à´…à´•àµà´·à´°à´™àµà´™àµ¾ ഇലàµà´² The password contains more than %1 same characters consecutively രഹസàµà´¸àµà´¯à´µà´¾à´•àµà´•ിൽ à´…à´Ÿàµà´¤àµà´¤à´Ÿàµà´¤àµà´¤à´¾à´¯à´¿ ഒരേ à´ªàµà´°à´¤àµ€à´•à´‚ %1 കൂടàµà´¤àµ½ തവണ à´…à´Ÿà´™àµà´™à´¿à´¯à´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ The password contains too many same characters consecutively രഹസàµà´¸àµà´¯à´µà´¾à´•àµà´•ിൽ à´…à´Ÿàµà´¤àµà´¤à´Ÿàµà´¤àµà´¤à´¾à´¯à´¿ ഒരേ à´ªàµà´°à´¤àµ€à´•à´‚ à´’à´°àµà´ªà´¾à´Ÿàµ തവണ à´…à´Ÿà´™àµà´™à´¿à´¯à´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ. The password contains more than %1 characters of the same class consecutively രഹസàµà´¯à´µà´¾à´•àµà´•ിൽ %1 തവണ ഒരേ തരം à´…à´•àµà´·à´°à´‚ ആവർതàµà´¤à´¿à´•àµà´•àµà´¨àµà´¨àµ The password contains too many characters of the same class consecutively രഹസàµà´¯à´µà´¾à´•àµà´•ിൽ à´’à´°àµà´ªà´¾à´Ÿàµ തവണ ഒരേ തരം à´…à´•àµà´·à´°à´‚ ആവർതàµà´¤à´¿à´•àµà´•àµà´¨àµà´¨àµ The password contains monotonic sequence longer than %1 characters പാസàµâ€Œà´µàµ‡à´¡à´¿àµ½ %1 à´ªàµà´°à´¤àµ€à´•à´™àµà´™à´³àµ‡à´•àµà´•ാൾ ദൈർഘàµà´¯à´®àµà´³àµà´³ മോണോടോണികൠശàµà´°àµ‡à´£à´¿ à´…à´Ÿà´™àµà´™à´¿à´¯à´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ The password contains too long of a monotonic character sequence പാസàµâ€Œà´µàµ‡à´¡à´¿àµ½ വളരെ ദൈർഘàµà´¯à´®àµà´³àµà´³ ഒരൠമോണോടോണികൠപàµà´°à´¤àµ€à´• à´¶àµà´°àµ‡à´£à´¿à´¯àµà´£àµà´Ÿàµ No password supplied രഹസàµà´¯à´µà´¾à´•àµà´•ൠഒനàµà´¨àµà´‚ നലàµâ€à´•ിയിടàµà´Ÿà´¿à´²àµà´² Cannot obtain random numbers from the RNG device RNG ഉപകരണതàµà´¤à´¿àµ½ നിനàµà´¨àµ ആകസàµâ€Œà´®à´¿à´• സംഖàµà´¯à´•ൾ à´Žà´Ÿàµà´•àµà´•ാൻ പറàµà´±àµà´¨àµà´¨à´¿à´²àµà´². Password generation failed - required entropy too low for settings രഹസàµà´¯à´µà´¾à´•àµà´•ൠസൃഷàµà´Ÿà´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿àµ½ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ - ആവശàµà´¯à´¤àµà´¤à´¿à´¨àµ entropy ഇലàµà´². The password fails the dictionary check - %1 രഹസàµà´¯à´µà´¾à´•àµà´•ൠനിഘണàµà´Ÿàµ പരിശോധനയിൽ പരാജയപàµà´ªàµ†à´Ÿàµà´¨àµà´¨àµ - %1 The password fails the dictionary check രഹസàµà´¯à´µà´¾à´•àµà´•ൠനിഘണàµà´Ÿàµ പരിശോധനയിൽ പരാജയപàµà´ªàµ†à´Ÿàµà´¨àµà´¨àµ Unknown setting - %1 à´…à´œàµà´žà´¾à´¤à´®à´¾à´¯ à´•àµà´°à´®àµ€à´•രണം - %1 Unknown setting അപരിചിതമായ സജàµà´œàµ€à´•രണം Bad integer value of setting - %1 à´•àµà´°à´®àµ€à´•രണതàµà´¤à´¿à´¨àµà´±àµ† ശരിയലàµà´²à´¾à´¤àµà´¤ സംഖàµà´¯à´¾à´®àµ‚à´²àµà´¯à´‚ - %1 Bad integer value തെറàµà´±à´¾à´¯ സംഖàµà´¯ Setting %1 is not of integer type %1 സജàµà´œàµ€à´•രണം സംഖàµà´¯à´¯à´²àµà´² Setting is not of integer type സജàµà´œàµ€à´•രണം സംഖàµà´¯à´¯à´²àµà´² Setting %1 is not of string type %1 സജàµà´œàµ€à´•രണം ഒരൠവാകàµà´•à´²àµà´²à´¾ Setting is not of string type സജàµà´œàµ€à´•രണം ഒരൠവാകàµà´•à´²àµà´²à´¾ Opening the configuration file failed à´•àµà´°à´®àµ€à´•à´°à´£ ഫയൽ à´¤àµà´±à´•àµà´•àµà´¨àµà´¨à´¤à´¿àµ½ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ The configuration file is malformed à´•àµà´°à´®àµ€à´•à´°à´£ ഫയൽ പാഴാണൠFatal failure അപകടകരമായ പിഴവൠUnknown error അപരിചിതമായ പിശകൠPassword is empty രഹസàµà´¯à´µà´¾à´•àµà´•ൠശൂനàµà´¯à´®à´¾à´£àµ PackageChooserPage Form ഫോം Product Name ഉതàµà´ªà´¨àµà´¨à´¤àµà´¤à´¿à´¨àµà´±àµ† പേരൠTextLabel ടെകàµà´¸àµà´±àµà´±àµà´²àµ‡à´¬àµ½ Long Product Description ഉതàµà´ªà´¨àµà´¨à´¤àµà´¤à´¿à´¨àµà´±àµ† ബൃഹതàµà´¤à´¾à´¯ വിശദീകരണം Package Selection പാകàµà´•േജൠതിരഞàµà´žàµ†à´Ÿàµà´•àµà´•ൽ Please pick a product from the list. The selected product will be installed. പടàµà´Ÿà´¿à´•യിൽ നിനàµà´¨àµà´‚ ഒരൠഉതàµà´ªà´¨àµà´¨à´‚ തിരഞàµà´žàµ†à´Ÿàµà´•àµà´•àµà´•. തിരഞàµà´žàµ†à´Ÿàµà´¤àµà´¤ ഉതàµà´ªà´¨àµà´¨à´‚ ഇൻസàµà´±àµà´±à´¾àµ¾ ചെയàµà´¯à´ªàµà´ªàµ†à´Ÿàµà´•. PackageChooserViewStep Packages പാകàµà´•േജàµà´•ൾ Page_Keyboard Form ഫോം Keyboard Model: കീബോഡൠമാതൃക: Type here to test your keyboard നിങàµà´™à´³àµà´Ÿàµ† കീബോർഡൠപരിശോധികàµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµ ഇവിടെ ടൈപàµà´ªàµà´šàµ†à´¯àµà´¯àµà´• Page_UserSetup Form ഫോം What is your name? നിങàµà´™à´³àµà´Ÿàµ† പേരെനàµà´¤à´¾à´£àµ ? What name do you want to use to log in? ലോഗിൻ ചെയàµà´¯à´¾àµ» നിങàµà´™àµ¾ à´à´¤àµ നാമം ഉപയോഗികàµà´•ാനാണൠആഗàµà´°à´¹à´¿à´•àµà´•àµà´¨àµà´¨à´¤àµ? Choose a password to keep your account safe. നിങàµà´™à´³àµà´Ÿàµ† à´…à´•àµà´•ൗണàµà´Ÿàµ à´¸àµà´°à´•àµà´·à´¿à´¤à´®à´¾à´¯à´¿ സൂകàµà´·à´¿à´•àµà´•ാൻ ഒരൠരഹസàµà´¯à´µà´¾à´•àµà´•ൠതിരഞàµà´žàµ†à´Ÿàµà´•àµà´•àµà´•. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>ഒരേ പാസàµâ€Œà´µàµ‡à´¡àµ à´°à´£àµà´Ÿàµà´¤à´µà´£ നൽകàµà´•, à´…à´¤àµà´µà´´à´¿ ടൈപàµà´ªà´¿à´‚ഗൠപിശകàµà´•ൾ പരിശോധികàµà´•ാൻ à´•à´´à´¿à´¯àµà´‚.ഒരൠനലàµà´² പാസàµâ€Œà´µàµ‡à´¡à´¿àµ½ à´…à´•àµà´·à´°à´™àµà´™àµ¾, à´…à´•àµà´•à´™àµà´™àµ¾, à´šà´¿à´¹àµà´¨à´¨à´‚ à´Žà´¨àµà´¨à´¿à´µà´¯àµà´Ÿàµ† മിശàµà´°à´¿à´¤à´‚ à´…à´Ÿà´™àµà´™à´¿à´¯à´¿à´°à´¿à´•àµà´•àµà´‚, à´•àµà´±à´žàµà´žà´¤àµ à´Žà´Ÿàµà´Ÿàµ à´ªàµà´°à´¤àµ€à´•à´™àµà´™à´³àµ†à´™àµà´•à´¿à´²àµà´‚ നീളമàµà´£àµà´Ÿà´¾à´¯à´¿à´°à´¿à´•àµà´•ണം, കൃതàµà´¯à´®à´¾à´¯ ഇടവേളകളിൽ à´…à´µ മാറàµà´±à´£à´‚.</small> What is the name of this computer? à´ˆ à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿà´±à´¿à´¨àµà´±àµ† നാമം à´Žà´¨àµà´¤à´¾à´£àµ ? Your Full Name താങàµà´•à´³àµà´Ÿàµ† à´®àµà´´àµà´µàµ» പേരàµàµ login ലോഗിൻ <small>This name will be used if you make the computer visible to others on a network.</small> <small>നിങàµà´™àµ¾ ഒരൠനെറàµà´±àµâ€Œà´µàµ¼à´•àµà´•ിൽ à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿàµ¼ മറàµà´±àµà´³àµà´³à´µàµ¼à´•àµà´•ൠദൃശàµà´¯à´®à´¾à´•àµà´•àµà´•യാണെങàµà´•ിൽ à´ˆ പേരൠഉപയോഗികàµà´•àµà´‚.</small> Computer Name à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿà´±à´¿à´¨àµà´±àµ† പേരൠPassword രഹസàµà´¯à´µà´¾à´•àµà´•ൠRepeat Password രഹസàµà´¯à´µà´¾à´•àµà´•ൠവീണàµà´Ÿàµà´‚ When this box is checked, password-strength checking is done and you will not be able to use a weak password. à´ˆ à´•à´³àµà´³à´¿ തിരഞàµà´žàµ†à´Ÿàµà´•àµà´•àµà´®àµà´ªàµ‹àµ¾, രഹസàµà´¯à´µà´¾à´•àµà´•à´¿à´¨àµà´±àµ† ബലപരിശോധന നടപàµà´ªà´¿à´²à´¾à´•àµà´•àµà´•à´¯àµà´‚, ആയതിനാൽ താങàµà´•ൾകàµà´•ൠദàµàµ¼à´¬à´²à´®à´¾à´¯ ഒരൠരഹസàµà´¯à´µà´¾à´•àµà´•ൠഉപയോഗികàµà´•ാൻ സാധികàµà´•ാതെ വരàµà´•à´¯àµà´‚ ചെയàµà´¯àµà´‚. Require strong passwords. à´¶à´•àµà´¤à´®à´¾à´¯ രഹസàµà´¯à´µà´¾à´•àµà´•àµà´•ൾ ആവശàµà´¯à´ªàµà´ªàµ†à´Ÿàµà´• Log in automatically without asking for the password. രഹസàµà´¯à´µà´¾à´•àµà´•à´¿à´²àµà´²à´¾à´¤àµ† യാനàµà´¤àµà´°à´¿à´•മായി ലോഗിൻ ചെയàµà´¯àµà´•. Use the same password for the administrator account. à´…à´¡àµà´®à´¿à´¨à´¿à´¸àµà´Ÿàµà´°àµ‡à´±àµà´±àµ¼ à´…à´•àµà´•ൗണàµà´Ÿà´¿à´¨àµà´‚ ഇതേ രഹസàµà´¯à´µà´¾à´•àµà´•ൠഉപയോഗികàµà´•àµà´•. Choose a password for the administrator account. à´…à´¡àµà´®à´¿à´¨à´¿à´¸àµà´Ÿàµà´°àµ‡à´±àµà´±àµ¼ à´…à´•àµà´•à´£àµà´Ÿà´¿à´¨à´¾à´¯à´¿ ഒരൠരഹസàµà´¯à´µà´¾à´•àµà´•ൠതിരഞàµà´žàµ†à´Ÿàµà´•àµà´•àµà´•. <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>ഒരേ പാസàµâ€Œà´µàµ‡à´¡àµ à´°à´£àµà´Ÿàµà´¤à´µà´£ നൽകàµà´•, à´…à´¤àµà´µà´´à´¿ ടൈപàµà´ªà´¿à´‚ഗൠപിശകàµà´•ൾ പരിശോധികàµà´•ാൻ à´•à´´à´¿à´¯àµà´‚.</small> PartitionLabelsView Root റൂടàµà´Ÿàµ Home ഹോം Boot ബൂടàµà´Ÿàµ EFI system ഇഎഫàµà´ സിസàµà´±àµà´±à´‚ Swap à´¸àµà´µà´¾à´ªàµà´ªàµ New partition for %1 %1-à´¨àµà´³àµà´³ à´ªàµà´¤à´¿à´¯ പാർടàµà´Ÿàµ€à´·àµ» New partition à´ªàµà´¤à´¿à´¯ പാർടàµà´Ÿàµ€à´·àµ» %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space ലഭàµà´¯à´®à´¾à´¯ à´¸àµà´¥à´²à´‚ New partition à´ªàµà´¤à´¿à´¯ പാർടàµà´Ÿàµ€à´·àµ» Name പേരൠFile System ഫയൽ സിസàµà´±àµà´±à´‚ Mount Point മൗണàµà´Ÿàµ പോയിനàµà´±àµ Size വലàµà´ªàµà´ªà´‚ PartitionPage Form ഫോം Storage de&vice: à´¸àµà´±àµà´±àµ‹à´±àµ‡à´œàµ ഉപകരണം (&v): &Revert All Changes à´Žà´²àµà´²à´¾ മാറàµà´±à´™àµà´™à´³àµà´‚ പിൻവലികàµà´•àµà´• (&R) New Partition &Table à´ªàµà´¤à´¿à´¯ പാർടàµà´Ÿàµ€à´·àµ» ടേബിൾ Cre&ate നിർമàµà´®à´¿à´•àµà´•àµà´• (&a) &Edit തിരàµà´¤àµà´¤àµà´• (&E) &Delete ഇലàµà´²à´¾à´¤à´¾à´•àµà´•àµà´• (&D) New Volume Group à´ªàµà´¤à´¿à´¯ വോളàµà´¯à´‚ à´—àµà´°àµ‚à´ªàµà´ªàµ Resize Volume Group വോളàµà´¯à´‚ à´—àµà´°àµ‚à´ªàµà´ªà´¿à´¨àµà´±àµ† വലàµà´ªàµà´ªà´‚ മാറàµà´±àµà´• Deactivate Volume Group വോളàµà´¯à´‚ à´—àµà´°àµ‚à´ªàµà´ªàµ നിഷàµà´•àµà´°à´¿à´¯à´®à´¾à´•àµà´•àµà´• Remove Volume Group വോളàµà´¯à´‚ à´—àµà´°àµ‚à´ªàµà´ªàµ നീകàµà´•à´‚ ചെയàµà´¯àµà´• I&nstall boot loader on: ബൂടàµà´Ÿàµà´²àµ‹à´¡àµ¼ ഇവിടെ ഇൻസàµà´±àµà´±à´¾àµ¾ ചെയàµà´¯àµà´• (&n): Are you sure you want to create a new partition table on %1? %1ൽ ഒരൠപàµà´¤à´¿à´¯ പാർടàµà´Ÿàµ€à´·àµ» ടേബിൾ നിർമàµà´®à´¿à´•àµà´•ണമെനàµà´¨àµ താങàµà´•ൾകàµà´•àµà´±à´ªàµà´ªà´¾à´£àµ‹? Can not create new partition à´ªàµà´¤à´¿à´¯ പാർടàµà´Ÿàµ€à´·àµ» നിർമàµà´®à´¿à´•àµà´•ാനായിലàµà´² The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. %1 ലെ പാർടàµà´Ÿàµ€à´·àµ» പടàµà´Ÿà´¿à´•യിൽ ഇതിനകം %2 à´ªàµà´°à´¾à´¥à´®à´¿à´• പാർടàµà´Ÿàµ€à´·à´¨àµà´•ൾ ഉണàµà´Ÿàµ,ഇനി à´’à´¨àµà´¨àµà´‚ ചേർകàµà´•ാൻ കഴിയിലàµà´². പകരം ഒരൠപàµà´°à´¾à´¥à´®à´¿à´• പാർടàµà´Ÿàµ€à´·àµ» നീകàµà´•ംചെയàµâ€Œà´¤àµ à´Žà´•àµà´¸àµà´Ÿàµ†àµ»à´¡à´¡àµâ€Œ പാർടàµà´Ÿàµ€à´·àµ» ചേർകàµà´•àµà´•. PartitionViewStep Gathering system information... സിസàµà´±àµà´±à´¤àµà´¤àµ†à´•àµà´•àµà´±à´¿à´šàµà´šàµà´³àµà´³ വിവരങàµà´™àµ¾ ശേഖരികàµà´•àµà´¨àµà´¨àµ... Partitions പാർടàµà´Ÿàµ€à´·à´¨àµà´•ൾ Install %1 <strong>alongside</strong> another operating system. മറàµà´±àµŠà´°àµ à´“à´ªàµà´ªà´±àµ‡à´±àµà´±à´¿à´‚ഗൠസിസàµà´±àµà´±à´¤àµà´¤à´¿à´¨àµŠà´ªàµà´ªà´‚ %1 ഇൻസàµà´±àµà´±à´¾àµ¾ ചെയàµà´¯àµà´•. <strong>Erase</strong> disk and install %1. à´¡à´¿à´¸àµà´•ൠ<strong>മായàµà´•àµà´•àµà´•</strong>à´Žà´¨àµà´¨à´¿à´Ÿàµà´Ÿàµ %1 ഇൻസàµà´±àµà´±à´¾àµ¾ ചെയàµà´¯àµà´•. <strong>Replace</strong> a partition with %1. ഒരൠപാർടàµà´Ÿàµ€à´·àµ» %1 ഉപയോഗിചàµà´šàµ <strong>à´ªàµà´¨à´ƒà´¸àµà´¥à´¾à´ªà´¿à´•àµà´•àµà´•.</strong> <strong>Manual</strong> partitioning. <strong>à´¸àµà´µà´®àµ‡à´§à´¯à´¾</strong> ഉളàµà´³ പാർടàµà´Ÿàµ€à´·à´¨à´¿à´™àµ. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). %2 (%3) à´¡à´¿à´¸àµà´•ിൽ മറàµà´±àµŠà´°àµ à´“à´ªàµà´ªà´±àµ‡à´±àµà´±à´¿à´‚ഗൠസിസàµà´±àµà´±à´¤àµà´¤à´¿à´¨àµŠà´ªàµà´ªà´‚ %1 ഇൻസàµà´±àµà´±à´¾àµ¾ ചെയàµà´¯àµà´•. <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. à´¡à´¿à´¸àµà´•ൠ<strong>%2</strong> (%3) <strong>മായàµâ€Œà´šàµà´šàµ </strong> %1 ഇൻസàµà´±àµà´±à´¾àµ¾ ചെയàµà´¯àµà´•. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>%2</strong> (%3) à´¡à´¿à´¸àµà´•ിലെ ഒരൠപാർടàµà´Ÿàµ€à´·àµ» %1 ഉപയോഗിചàµà´šàµ <strong>മാറàµà´±à´¿à´¸àµà´¥à´¾à´ªà´¿à´•àµà´•àµà´•</strong>. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>%1 </strong>(%2) à´¡à´¿à´¸àµà´•ിലെ <strong>à´¸àµà´µà´®àµ‡à´§à´¯à´¾</strong> പാർടàµà´Ÿàµ€à´·à´¨à´¿à´‚à´—àµ. Disk <strong>%1</strong> (%2) à´¡à´¿à´¸àµà´•ൠ<strong>%1</strong> (%2) Current: നിലവിലàµà´³àµà´³à´¤àµ: After: ശേഷം: No EFI system partition configured ഇഎഫàµà´ സിസàµà´±àµà´±à´‚ പാർടàµà´Ÿàµ€à´·à´¨àµŠà´¨àµà´¨àµà´‚ à´•àµà´°à´®àµ€à´•à´°à´¿à´šàµà´šà´¿à´Ÿàµà´Ÿà´¿à´²àµà´² An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. %1 ആരംഭികàµà´•ാൻ ഒരൠഇഎഫàµà´ സിസàµà´±àµà´±à´‚ പാർടàµà´Ÿàµ€à´·àµ» ആവശàµà´¯à´®à´¾à´£àµ.<br/><br/>ഒരൠഇഫàµà´ സിസàµà´±àµà´±à´‚ പാർടàµà´Ÿàµ€à´·àµ» à´•àµà´°à´®àµ€à´•à´°à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµ,തിരികെ പോയി <strong>à´‡ എസൠപി</strong> à´«àµà´²à´¾à´—àµà´‚ മൗണàµà´Ÿàµ പോയിനàµà´±àµ <strong>%2</strong> ഉം ആയിടàµà´Ÿàµà´³àµà´³ ഒരൠFAT32 ഫയൽസിസàµà´±àµà´±à´‚ തിരഞàµà´žàµ†à´Ÿàµà´•àµà´•àµà´• à´…à´²àµà´²àµ†à´™àµà´•ിൽ സൃഷàµà´Ÿà´¿à´•àµà´•àµà´•.<br/><br/>ഒരൠഇഎഫàµà´ സിസàµà´±àµà´±à´‚ പാർടàµà´Ÿàµ€à´·àµ» സജàµà´œàµ€à´•à´°à´¿à´•àµà´•ാതെ നിങàµà´™àµ¾à´•àµà´•ൠതàµà´Ÿà´°à´¾à´‚, പകàµà´·àµ‡ നിങàµà´™à´³àµà´Ÿàµ† സിസàµà´±àµà´±à´‚ ആരംഭികàµà´•àµà´¨àµà´¨à´¤à´¿àµ½ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ‡à´•àµà´•ാം. EFI system partition flag not set ഇഎഫàµà´ സിസàµà´±àµà´±à´‚ പാർടàµà´Ÿàµ€à´·àµ» à´«àµà´²à´¾à´—ൠകàµà´°à´®àµ€à´•à´°à´¿à´šàµà´šà´¿à´Ÿàµà´Ÿà´¿à´²àµà´² An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. %1 ആരംഭികàµà´•àµà´¨àµà´¨à´¤à´¿à´¨à´¾à´¯à´¿ ഒരൠഇഎഫàµà´.<br/><br/>മൗണàµà´Ÿàµ പോയിനàµà´±àµ <strong>%2 -à´“à´Ÿàµ</strong>കൂടി ഒരൠപാർടàµà´Ÿàµ€à´·àµ» à´•àµà´°à´®àµ€à´•à´°à´¿à´šàµà´šà´¿à´Ÿàµà´Ÿàµà´£àµà´Ÿà´¾à´¯à´¿à´°àµà´¨àµà´¨àµ, പകàµà´·àµ‡ അതിനàµà´±àµ† <strong>esp</strong> à´«àµà´²à´¾à´—ൠകàµà´°à´®àµ€à´•à´°à´¿à´šàµà´šà´¿à´Ÿàµà´Ÿà´¿à´²àµà´².<br/> à´«àµà´²à´¾à´—ൠകàµà´°à´®àµ€à´•à´°à´¿à´•àµà´•ാനായി തിരിചàµà´šàµ പോയി പാർടàµà´Ÿàµ€à´·àµ» തിരàµà´¤àµà´¤àµà´•.<br/><br/>à´«àµà´²à´¾à´—ൠകàµà´°à´®àµ€à´•à´°à´¿à´•àµà´•ാതെ തനàµà´¨àµ† താങàµà´•ൾകàµà´•ൠതàµà´Ÿà´°à´¾à´µàµà´¨àµà´¨à´¤à´¾à´£àµ, പകàµà´·àµ‡ താങàµà´•à´³àµà´Ÿàµ† സിസàµà´±àµà´±à´‚ ആരംഭികàµà´•ാതിരàµà´¨àµà´¨àµ‡à´•àµà´•ാം. Boot partition not encrypted ബൂടàµà´Ÿàµ പാർടàµà´Ÿàµ€à´·àµ» എൻകàµà´°à´¿à´ªàµà´±àµà´±àµ ചെയàµà´¯à´ªàµà´ªàµ†à´Ÿàµà´Ÿà´¿à´Ÿàµà´Ÿà´¿à´²àµà´² A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. എൻകàµà´°à´¿à´ªàµà´±àµà´±àµ ചെയàµà´¤ ഒരൠറൂടàµà´Ÿàµ പാർടàµà´Ÿàµ€à´·à´¨àµ‹à´ŸàµŠà´ªàµà´ªà´‚ ഒരൠവേർപെടàµà´¤àµà´¤à´¿à´¯ ബൂടàµà´Ÿàµ പാർടàµà´Ÿàµ€à´·à´¨àµà´‚ à´•àµà´°à´®àµ€à´•à´°à´¿à´•àµà´•à´ªàµà´ªàµ†à´Ÿàµà´Ÿà´¿à´°àµà´¨àµà´¨àµ, à´Žà´¨àµà´¨à´¾àµ½ ബൂടàµà´Ÿàµ പാർടàµà´Ÿàµ€à´·àµ» എൻകàµà´°à´¿à´ªàµà´±àµà´±àµ ചെയàµà´¯à´ªàµà´ªàµ†à´Ÿàµà´Ÿà´¤à´²àµà´².<br/><br/>ഇതàµà´¤à´°à´‚ സജàµà´œàµ€à´•രണതàµà´¤à´¿à´¨àµà´±àµ† à´¸àµà´°à´•àµà´· ഉതàµà´•à´£àµà´ à´¾à´œà´¨à´•മാണàµ, à´Žà´¨àµà´¤àµ†à´¨àµà´¨à´¾àµ½ à´ªàµà´°à´§à´¾à´¨à´ªàµà´ªàµ†à´Ÿàµà´Ÿ സിസàµà´±àµà´±à´‚ ഫയലàµà´•ൾ ഒരൠഎൻകàµà´°à´¿à´ªàµà´±àµà´±àµ ചെയàµà´¯à´ªàµà´ªàµ†à´Ÿà´¾à´¤àµà´¤ പാർടàµà´Ÿàµ€à´·à´¨à´¿à´²à´¾à´£àµ സൂകàµà´·à´¿à´šàµà´šà´¿à´Ÿàµà´Ÿàµà´³àµà´³à´¤àµ.<br/> താങàµà´•ൾകàµà´•ൠവേണമെങàµà´•ിൽ à´¤àµà´Ÿà´°à´¾à´‚, പകàµà´·àµ‡ ഫയൽ സിസàµà´±àµà´±à´‚ à´¤àµà´±à´•àµà´•ൽ സിസàµà´±àµà´±à´‚ ആരംഭപàµà´°à´•àµà´°à´¿à´¯à´¯à´¿àµ½ വൈകിയേ സംഭവികàµà´•ൂ.<br/>ബൂടàµà´Ÿàµ പാർടàµà´Ÿàµ€à´·àµ» എൻകàµà´°à´¿à´ªàµà´±àµà´±àµ ചെയàµà´¯à´¾à´¨à´¾à´¯à´¿, തിരിചàµà´šàµ പോയി പാർടàµà´Ÿàµ€à´·àµ» നിർമàµà´®à´¾à´£ ജാലകതàµà´¤à´¿àµ½ <strong>എൻകàµà´°à´¿à´ªàµà´±àµà´±àµ</strong> തിരഞàµà´žàµ†à´Ÿàµà´¤àµà´¤àµà´•ൊണàµà´Ÿàµ അതൠവീണàµà´Ÿàµà´‚ നിർമàµà´®à´¿à´•àµà´•àµà´•. has at least one disk device available. ഒരൠഡിസàµà´•ൠഡിവൈസെങàµà´•à´¿à´²àµà´‚ ലഭàµà´¯à´®à´¾à´£àµ. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job à´ªàµà´²à´¾à´¸àµà´® കെടàµà´Ÿàµà´‚ മടàµà´Ÿàµà´‚ ജോലി Could not select KDE Plasma Look-and-Feel package കെഡിഇ à´ªàµà´²à´¾à´¸àµà´® കെടàµà´Ÿàµà´‚ മടàµà´Ÿàµà´‚ പാകàµà´•േജൠതിരഞàµà´žàµ†à´Ÿàµà´•àµà´•ാനായിലàµà´² PlasmaLnfPage Form ഫോം Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. കെ‌ഡി‌ഇ à´ªàµà´²à´¾à´¸àµà´® ഡെസàµâ€Œà´•àµâ€Œà´Ÿàµ‹à´ªàµà´ªà´¿à´¨à´¾à´¯à´¿ ഒരൠകെടàµà´Ÿàµà´‚ മടàµà´Ÿàµà´‚ തിരഞàµà´žàµ†à´Ÿàµà´•àµà´•àµà´•.നിങàµà´™àµ¾à´•àµà´•ൠഈ ഘടàµà´Ÿà´‚ ഇപàµà´ªàµ‹àµ¾ ഒഴിവാകàµà´•à´¿ സിസàµà´±àµà´±à´‚ ഇൻസàµà´±àµà´±à´¾àµ¾ ചെയàµà´¤à´¤à´¿à´¨àµ ശേഷവàµà´‚ കെടàµà´Ÿàµà´‚ മടàµà´Ÿàµà´‚ à´•àµà´°à´®àµ€à´°à´•à´°à´¿à´•àµà´•ാൻ à´•à´´à´¿à´¯àµà´‚.ഒരൠകെടàµà´Ÿàµà´‚ മടàµà´Ÿàµà´‚ തിരഞàµà´žàµ†à´Ÿàµà´•àµà´•ലിൽ à´•àµà´²à´¿à´•àµà´•àµà´šàµ†à´¯àµà´¯àµà´¨àµà´¨à´¤àµ à´† കെടàµà´Ÿàµà´‚ മടàµà´Ÿà´¿à´¨àµà´±àµ†à´¯àµà´‚ തതàµà´¸à´®à´¯ à´ªàµà´°à´¿à´µàµà´¯àµ‚ നൽകàµà´‚. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. കെ‌ഡി‌ഇ à´ªàµà´²à´¾à´¸àµà´® ഡെസàµâ€Œà´•àµâ€Œà´Ÿàµ‹à´ªàµà´ªà´¿à´¨à´¾à´¯à´¿ ഒരൠകെടàµà´Ÿàµà´‚ മടàµà´Ÿàµà´‚ തിരഞàµà´žàµ†à´Ÿàµà´•àµà´•àµà´•.നിങàµà´™àµ¾à´•àµà´•ൠഈ ഘടàµà´Ÿà´‚ ഇപàµà´ªàµ‹àµ¾ ഒഴിവാകàµà´•à´¿ സിസàµà´±àµà´±à´‚ ഇൻസàµà´±àµà´±à´¾àµ¾ ചെയàµà´¤à´¤à´¿à´¨àµ ശേഷവàµà´‚ കെടàµà´Ÿàµà´‚ മടàµà´Ÿàµà´‚ à´•àµà´°à´®àµ€à´°à´•à´°à´¿à´•àµà´•ാൻ à´•à´´à´¿à´¯àµà´‚ PlasmaLnfViewStep Look-and-Feel കെടàµà´Ÿàµà´‚ മടàµà´Ÿàµà´‚ PreserveFiles Saving files for later ... ഫയലàµà´•ൾ ഭാവിയിലേകàµà´•ായി സംരകàµà´·à´¿à´•àµà´•àµà´¨àµà´¨àµ ... No files configured to save for later. ഭാവിയിലേകàµà´•ായി സംരകàµà´·à´¿à´•àµà´•ാനായി ഫയലàµà´•ളൊനàµà´¨àµà´‚ à´•àµà´°à´®àµ€à´•à´°à´¿à´šàµà´šà´¿à´Ÿàµà´Ÿà´¿à´²àµà´². Not all of the configured files could be preserved. à´•àµà´°à´®àµ€à´•à´°à´¿à´•àµà´•à´ªàµà´ªàµ†à´Ÿàµà´Ÿ ഫയലàµà´•ളെലàµà´²à´¾à´‚ സംരകàµà´·à´¿à´•àµà´•ാനായിലàµà´². ProcessResult There was no output from the command. ആജàµà´žà´¯à´¿àµ½ നിനàµà´¨àµà´‚ ഔടàµà´Ÿàµà´ªàµà´Ÿàµà´ŸàµŠà´¨àµà´¨àµà´®à´¿à´²àµà´². Output: ഔടàµà´Ÿàµà´ªàµà´Ÿàµà´Ÿàµ External command crashed. ബാഹàµà´¯à´®à´¾à´¯ ആജàµà´ž തകർനàµà´¨àµ. Command <i>%1</i> crashed. ആജàµà´ž <i>%1</i> à´ªàµà´°à´µàµ¼à´¤àµà´¤à´¨à´°à´¹à´¿à´¤à´®à´¾à´¯à´¿. External command failed to start. ബാഹàµà´¯à´®à´¾à´¯ ആജàµà´ž ആരംഭികàµà´•àµà´¨àµà´¨à´¤à´¿àµ½ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ. Command <i>%1</i> failed to start. <i>%1</i>ആജàµà´ž ആരംഭികàµà´•àµà´¨àµà´¨à´¤à´¿àµ½ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ. Internal error when starting command. ആജàµà´ž ആരംഭികàµà´•àµà´¨àµà´¨à´¤à´¿àµ½ ആനàµà´¤à´°à´¿à´•മായ പിഴവàµ. Bad parameters for process job call. à´ªàµà´°à´•àµà´°à´¿à´¯ ജോലി വിളിയàµà´•àµà´•ൠശരിയലàµà´²à´¾à´¤àµà´¤ പരാമീറàµà´±à´±àµà´•ൾ. External command failed to finish. ബാഹàµà´¯à´®à´¾à´¯ ആജàµà´ž പൂർതàµà´¤à´¿à´¯à´¾à´µàµà´¨àµà´¨à´¤à´¿àµ½ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ. Command <i>%1</i> failed to finish in %2 seconds. ആജàµà´ž <i>%1</i> %2 സെകàµà´•ൻഡàµà´•ൾകàµà´•àµà´³àµà´³à´¿àµ½ പൂർതàµà´¤à´¿à´¯à´¾à´µàµà´¨àµà´¨à´¤à´¿àµ½ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ. External command finished with errors. ബാഹàµà´¯à´®à´¾à´¯ ആജàµà´ž പിഴവàµà´•ളോടൠകൂടീ പൂർതàµà´¤à´¿à´¯à´¾à´¯à´¿. Command <i>%1</i> finished with exit code %2. ആജàµà´ž <i>%1</i> à´Žà´•àµà´¸à´¿à´±àµà´±àµ കോഡൠ%2ഓടൠകൂടി പൂർതàµà´¤à´¿à´¯à´¾à´¯à´¿. QObject Default Keyboard Model à´¸àµà´µà´¤àµ‡à´¯àµà´³àµà´³ കീബോർഡൠതരം Default à´¸àµà´µà´¤àµ‡à´¯àµà´³àµà´³à´¤àµ unknown à´…à´œàµà´žà´¾à´¤à´‚ extended വിസàµà´¤àµƒà´¤à´®à´¾à´¯à´¤àµ unformatted ഫോർമാറàµà´±àµ ചെയàµà´¯à´ªàµà´ªàµ†à´Ÿà´¾à´¤àµà´¤à´¤àµ swap à´¸àµà´µà´¾à´ªàµà´ªàµ Unpartitioned space or unknown partition table പാർടàµà´Ÿàµ€à´·àµ» ചെയàµà´¯à´ªàµà´ªàµ†à´Ÿà´¾à´¤àµà´¤ à´¸àµà´¥à´²à´‚ à´…à´²àµà´²àµ†à´™àµà´•ിൽ അപരിചിതമായ പാർടàµà´Ÿàµ€à´·àµ» ടേബിൾ (no mount point) (മൗണàµà´Ÿàµ പോയിനàµà´±àµ ഇലàµà´²) Requirements checking for module <i>%1</i> is complete. <i>%1</i>മൊഡàµà´¯àµ‚ളിനായàµà´³àµà´³ ആവശàµà´¯à´•തകൾ പരിശോധികàµà´•ൽ പൂർതàµà´¤à´¿à´¯à´¾à´¯à´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ. %1 (%2) language[name] (country[name]) %1 (%2) No product ഉൽപàµà´ªà´¨àµà´¨à´®àµŠà´¨àµà´¨àµà´®à´¿à´²àµà´² No description provided. വിവരണമൊനàµà´¨àµà´‚ നൽകിയിടàµà´Ÿà´¿à´²àµà´². File not found ഫയൽ à´•à´£àµà´Ÿàµ†à´¤àµà´¤à´¾à´¨à´¾à´¯à´¿à´²àµà´² Path <pre>%1</pre> must be an absolute path. <pre>%1</pre> പാഥൠഒരൠപൂർണàµà´£à´®à´¾à´¯ പാഥൠആയിരികàµà´•ണം. Could not create new random file <pre>%1</pre>. റാൻഡം ഫയൽ <pre>%1</pre> നിർമàµà´®à´¿à´•àµà´•ാനായിലàµà´². RemoveVolumeGroupJob Remove Volume Group named %1. %1 à´Žà´¨àµà´¨àµ പേരàµà´³àµà´³ വോളàµà´¯à´‚ à´—àµà´°àµ‚à´ªàµà´ªàµ നീകàµà´•à´‚ ചെയàµà´¯àµà´•. Remove Volume Group named <strong>%1</strong>. <strong>%1</strong> à´Žà´¨àµà´¨àµ പേരàµà´³àµà´³ വോളàµà´¯à´‚ à´—àµà´°àµ‚à´ªàµà´ªàµ നീകàµà´•à´‚ ചെയàµà´¯àµà´•. The installer failed to remove a volume group named '%1'. '%1' à´Žà´¨àµà´¨àµ പേരàµà´³àµà´³ വോളàµà´¯à´‚ à´—àµà´°àµ‚à´ªàµà´ªàµ നീകàµà´•à´‚ ചെയàµà´¯àµà´¨àµà´¨à´¤à´¿àµ½ ഇൻസàµà´±àµà´±à´¾à´³àµ¼ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ. ReplaceWidget Form ഫോം Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. %1 എവിടെ ഇൻസàµà´±àµà´±à´¾àµ¾ ചെയàµà´¯à´£à´®àµ†à´¨àµà´¨àµ തിരഞàµà´žàµ†à´Ÿàµà´•àµà´•àµà´•.<br/><font color="red">à´®àµà´¨àµà´¨à´±à´¿à´¯à´¿à´ªàµà´ªàµ: </font> ഇതൠതിരഞàµà´žàµ†à´Ÿàµà´¤àµà´¤ പാർടàµà´Ÿàµ€à´·à´¨à´¿à´²àµ† à´Žà´²àµà´²à´¾ ഫയലàµà´•à´³àµà´‚ നീകàµà´•à´‚ ചെയàµà´¯àµà´‚. The selected item does not appear to be a valid partition. തിരഞàµà´žàµ†à´Ÿàµà´•àµà´•à´ªàµà´ªàµ†à´Ÿàµà´Ÿà´¤àµ സാധàµà´µà´¾à´¯ ഒരൠപാർടàµà´Ÿàµ€à´·à´¨à´¾à´¯à´¿ തോനàµà´¨àµà´¨àµà´¨à´¿à´²àµà´². %1 cannot be installed on empty space. Please select an existing partition. %1 ഒരൠശൂനàµà´¯à´®à´¾à´¯ à´¸àµà´¥à´²à´¤àµà´¤àµ ഇൻസàµà´±àµà´±à´¾àµ¾ ചെയàµà´¯à´¾àµ» സാധികàµà´•à´¿à´²àµà´². ദയവായി നിലവിലàµà´³àµà´³ ഒരൠപാർടàµà´Ÿàµ€à´·àµ» തിരഞàµà´žàµ†à´Ÿàµà´•àµà´•ൂ. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 ഒരൠഎകàµà´¸àµà´±àµà´±àµ»à´¡à´¡àµ പാർടàµà´Ÿàµ€à´·à´¨à´¿àµ½ ചെയàµà´¯à´¾àµ» സാധികàµà´•à´¿à´²àµà´². ദയവായി നിലവിലàµà´³àµà´³ ഒരൠപàµà´°àµˆà´®à´±à´¿ à´…à´²àµà´²àµ†à´™àµà´•ിൽ ലോജികàµà´•ൽ പാർടàµà´Ÿàµ€à´·àµ» തിരഞàµà´žàµ†à´Ÿàµà´•àµà´•ൂ. %1 cannot be installed on this partition. %1 à´ˆ പാർടàµà´Ÿàµ€à´·à´¨à´¿àµ½ ഇൻസàµà´±àµà´±à´¾àµ¾ ചെയàµà´¯à´¾àµ» സാധികàµà´•à´¿à´²àµà´². Data partition (%1) ഡാറàµà´± പാർടàµà´Ÿàµ€à´·àµ» (%1) Unknown system partition (%1) അപരിചിതമായ സിസàµà´±àµà´±à´‚ പാർടàµà´Ÿàµ€à´·àµ» (%1) %1 system partition (%2) %1 സിസàµà´±àµà´±à´‚ പാർടàµà´Ÿàµ€à´·àµ» (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>പാർടàµà´Ÿàµ€à´·àµ» %1 %2നൠതീരെ ചെറàµà´¤à´¾à´£àµ. ദയവായി %3ജിബി à´Žà´™àµà´•ീലàµà´‚ ഇടമàµà´³àµà´³ ഒരൠപാർടàµà´Ÿàµ€à´·àµ» തിരഞàµà´žàµ†à´Ÿàµà´•àµà´•ൂ. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/>à´ˆ സിസàµà´±àµà´±à´¤àµà´¤à´¿àµ½ എവിടേയàµà´‚ ഒരൠഇഎഫàµà´ സിസàµà´±àµà´±à´‚ പർടàµà´Ÿàµ€à´·àµ» à´•à´£àµà´Ÿàµ†à´¤àµà´¤à´¾à´¨à´¾à´¯à´¿à´²àµà´². %1 സജàµà´œàµ€à´•à´°à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµ ദയവായി തിരിചàµà´šàµà´ªàµ‹à´¯à´¿ മാനàµà´µàµ½ പാർടàµà´Ÿàµ€à´·à´¨à´¿à´™àµà´™àµ ഉപയോഗികàµà´•àµà´•. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>%1 %2ൽ ഇൻസàµà´±àµà´±à´¾àµ¾ ചെയàµà´¯à´ªàµà´ªàµ†à´Ÿàµà´‚.<br/><font color="red">à´®àµà´¨àµà´¨à´±à´¿à´¯à´¿à´ªàµà´ªàµ:</font>പാർടàµà´Ÿàµ€à´·àµ» %2ൽ ഉളàµà´³ à´Žà´²àµà´²à´¾ ഡാറàµà´±à´¯àµà´‚ നഷàµà´Ÿà´ªàµà´ªàµ†à´Ÿàµà´‚. The EFI system partition at %1 will be used for starting %2. %1 ലെ ഇഎഫàµà´ സിസàµà´±àµà´±à´‚ പാർടàµà´Ÿàµ€à´·àµ» %2 ആരംഭികàµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµ ഉപയോഗികàµà´•àµà´‚. EFI system partition: ഇഎഫàµà´ സിസàµà´±àµà´±à´‚ പാർടàµà´Ÿàµ€à´·àµ» ResizeFSJob Resize Filesystem Job ഫയൽ സിസàµà´±àµà´±à´¤àµà´¤à´¿à´¨àµà´±àµ† വലàµà´ªàµà´ªà´‚ മാറàµà´±àµà´¨àµà´¨ ജോലി Invalid configuration അസാധàµà´µà´¾à´¯ à´•àµà´°à´®àµ€à´•രണം The file-system resize job has an invalid configuration and will not run. ഫയൽ സിസàµà´±àµà´±à´‚ വലàµà´ªàµà´ªà´‚ മാറàµà´±àµà´¨àµà´¨ ജോലിയിൽ അസാധàµà´µà´¾à´¯ à´•àµà´°à´®àµ€à´•രണം ഉണàµà´Ÿàµ, അതൠപàµà´°à´µàµ¼à´¤àµà´¤à´¿à´•àµà´•à´¿à´²àµà´². KPMCore not Available KPMCore ലഭàµà´¯à´®à´²àµà´² Calamares cannot start KPMCore for the file-system resize job. ഫയൽ സിസàµà´±àµà´±à´‚ വലàµà´ªàµà´ªà´‚ മാറàµà´±àµà´¨àµà´¨à´¤à´¿à´¨àµà´³àµà´³ ജോലികàµà´•ായി കാലാമറസിനൠKPMCore ആരംഭികàµà´•ാൻ കഴിയിലàµà´². Resize Failed വലàµà´ªàµà´ªà´‚ മാറàµà´±àµà´¨àµà´¨à´¤àµ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ The filesystem %1 could not be found in this system, and cannot be resized. ഫയൽ സിസàµà´±àµà´±à´‚ %1 à´ˆ സിസàµà´±àµà´±à´¤àµà´¤à´¿àµ½ à´•à´£àµà´Ÿàµ†à´¤àµà´¤à´¾à´¨à´¾à´¯à´¿à´²àµà´², അതിനാൽ അതിനàµà´±àµ† വലàµà´ªàµà´ªà´‚ മാറàµà´±à´¾à´¨à´¾à´µà´¿à´²àµà´². The device %1 could not be found in this system, and cannot be resized. ഉപകരണം %1 à´ˆ സിസàµà´±àµà´±à´¤àµà´¤à´¿àµ½ à´•à´£àµà´Ÿàµ†à´¤àµà´¤à´¾à´¨à´¾à´¯à´¿à´²àµà´², അതിനാൽ അതിനàµà´±àµ† വലàµà´ªàµà´ªà´‚ മാറàµà´±à´¾à´¨à´¾à´µà´¿à´²àµà´². The filesystem %1 cannot be resized. %1 à´Žà´¨àµà´¨ ഫയൽസിസàµà´±àµà´±à´¤àµà´¤à´¿à´¨àµà´±àµ† വലàµà´ªàµà´ªà´‚ മാറàµà´±à´¾àµ» കഴിയിലàµà´². The device %1 cannot be resized. %1 ഉപകരണതàµà´¤à´¿à´¨àµà´±àµ† വലàµà´ªàµà´ªà´‚ മാറàµà´±à´¾àµ» കഴിയിലàµà´². The filesystem %1 must be resized, but cannot. %1 à´Žà´¨àµà´¨ ഫയൽസിസàµà´±àµà´±à´¤àµà´¤à´¿à´¨àµà´±àµ† വലàµà´ªàµà´ªà´‚ മാറàµà´±à´£à´‚, പകàµà´·àµ‡ കഴിയിലàµà´². The device %1 must be resized, but cannot %1 ഉപകരണതàµà´¤à´¿à´¨àµà´±àµ† വലàµà´ªàµà´ªà´‚ മാറàµà´±à´£à´‚, പകàµà´·àµ‡ കഴിയിലàµà´² ResizePartitionJob Resize partition %1. %1 പാർടàµà´Ÿàµ€à´·à´¨àµà´±àµ† വലàµà´ªàµà´ªà´‚ മാറàµà´±àµà´•. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. <strong>%1</strong> à´Žà´¨àµà´¨ <strong>%2MiB</strong> പാർടàµà´Ÿàµ€à´·à´¨àµà´±àµ† വലàµà´ªàµà´ªà´‚ <strong>%3Mib</strong>യിലേകàµà´•ൠമാറàµà´±àµà´•. Resizing %2MiB partition %1 to %3MiB. %1 à´Žà´¨àµà´¨ %2MiB പാർടàµà´Ÿàµ€à´·à´¨àµà´±àµ† വലàµà´ªàµà´ªà´‚ %3Mibയിലേകàµà´•ൠമാറàµà´±àµà´¨àµà´¨àµ. The installer failed to resize partition %1 on disk '%2'. '%2' à´¡à´¿à´¸àµà´•à´¿à´²àµà´³àµà´³ %1 പാർടàµà´Ÿàµ€à´·à´¨àµà´±àµ† വലàµà´ªàµà´ªà´‚ മാറàµà´±àµà´¨àµà´¨à´¤à´¿àµ½ ഇൻസàµà´±àµà´±à´¾à´³àµ¼ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ ResizeVolumeGroupDialog Resize Volume Group വോളàµà´¯à´‚ à´—àµà´°àµ‚à´ªàµà´ªà´¿à´¨àµà´±àµ† വലàµà´ªàµà´ªà´‚ മാറàµà´±àµà´• ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. %1 à´Žà´¨àµà´¨àµ പേരàµà´³àµà´³ വോളàµà´¯à´‚ à´—àµà´°àµ‚à´ªàµà´ªà´¿à´¨àµà´±àµ† വലàµà´ªàµà´ªà´‚ %2ൽ നിനàµà´¨àµà´‚ %3ലേകàµà´•ൠമാറàµà´±àµà´•. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. <strong>%1</strong> à´Žà´¨àµà´¨àµ പേരàµà´³àµà´³ വോളàµà´¯à´‚ à´—àµà´°àµ‚à´ªàµà´ªà´¿à´¨àµà´±àµ† വലàµà´ªàµà´ªà´‚ <strong>%2</strong>ൽ നിനàµà´¨àµà´‚ <strong>%3</strong>ലേകàµà´•ൠമാറàµà´±àµà´•. The installer failed to resize a volume group named '%1'. '%1' à´Žà´¨àµà´¨àµ പേരàµà´³àµà´³ ഒരൠവോളàµà´¯à´‚ à´—àµà´°àµ‚à´ªàµà´ªà´¿à´¨àµà´±àµ† വലàµà´ªàµà´ªà´‚ മാറàµà´±àµà´¨àµà´¨à´¤à´¿àµ½ ഇൻസàµà´±àµà´±à´¾à´³àµ¼ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ. ResultsListDialog For best results, please ensure that this computer: മികചàµà´š ഫലങàµà´™àµ¾à´•àµà´•ായി à´ˆ à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿàµ¼ താഴെപàµà´ªà´±à´¯àµà´¨àµà´¨à´µ നിറവേറàµà´±àµà´¨àµà´¨àµ à´Žà´¨àµà´¨àµà´±à´ªàµà´ªàµà´µà´°àµà´¤àµà´¤àµà´•: System requirements സിസàµà´±àµà´±à´‚ ആവശàµà´¯à´•തകൾ ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> %1 സജàµà´œàµ€à´•à´°à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµà´³àµà´³ à´à´±àµà´±à´µàµà´‚ à´•àµà´±à´žàµà´ž ആവശàµà´¯à´™àµà´™àµ¾ à´ˆ à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿàµ¼ നിറവേറàµà´±àµà´¨àµà´¨à´¿à´²àµà´².<br/>സജàµà´œàµ€à´•രണം à´¤àµà´Ÿà´°à´¾à´¨à´¾à´µà´¿à´²àµà´². <a href="#details">വിവരങàµà´™àµ¾...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> %1 ഇൻസàµà´±àµà´±à´¾àµ¾ ചെയàµà´¯àµà´¨àµà´¨à´¤à´¿à´¨àµà´³àµà´³ à´à´±àµà´±à´µàµà´‚ à´•àµà´±à´žàµà´ž ആവശàµà´¯à´™àµà´™àµ¾ à´ˆ à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿàµ¼ നിറവേറàµà´±àµà´¨àµà´¨à´¿à´²àµà´².<br/>ഇൻസàµà´±àµà´±à´³àµ‡à´·àµ» à´¤àµà´Ÿà´°à´¾à´¨à´¾à´µà´¿à´²àµà´². <a href="#details">വിവരങàµà´™àµ¾...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. %1 സജàµà´œàµ€à´•à´°à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµà´³àµà´³ à´šà´¿à´² ആവശàµà´¯à´™àµà´™àµ¾ à´ˆ à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿàµ¼ നിറവേറàµà´±àµà´¨àµà´¨à´¿à´²àµà´².<br/>സജàµà´œàµ€à´•രണം à´¤àµà´Ÿà´°à´¾à´‚, പകàµà´·àµ‡ à´šà´¿à´² സവിശേഷതകൾ നിഷàµà´•àµà´°à´¿à´¯à´®à´¾à´¯à´¿à´°à´¿à´•àµà´•ാം. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. %1 ഇൻസàµà´±àµà´±à´¾àµ¾ ചെയàµà´¯à´¾àµ» à´¶àµà´ªà´¾àµ¼à´¶ ചെയàµà´¯à´ªàµà´ªàµ†à´Ÿàµà´Ÿà´¿à´Ÿàµà´Ÿàµà´³àµà´³ ആവശàµà´¯à´™àµà´™àµ¾ à´ˆ à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿàµ¼ നിറവേറàµà´±àµà´¨àµà´¨à´¿à´²àµà´².<br/>ഇൻസàµà´±àµà´±à´³àµ‡à´·àµ» à´¤àµà´Ÿà´°à´¾à´‚, പകàµà´·àµ‡ à´šà´¿à´² സവിശേഷതകൾ നിഷàµà´•àµà´°à´¿à´¯à´®à´¾à´¯à´¿à´°à´¿à´•àµà´•ാം. This program will ask you some questions and set up %2 on your computer. à´ˆ à´ªàµà´°à´•àµà´°à´¿à´¯ താങàµà´•ളോടൠചില ചോദàµà´¯à´™àµà´™àµ¾ ചോദികàµà´•àµà´•à´¯àµà´‚ %2 താങàµà´•à´³àµà´Ÿàµ† à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿà´±à´¿àµ½ സജàµà´œàµ€à´•à´°à´¿à´•àµà´•àµà´•à´¯àµà´‚ ചെയàµà´¯àµà´‚. ScanningDialog Scanning storage devices... à´¸àµà´±àµà´±àµ‹à´±àµ‡à´œàµ ഉപകരണങàµà´™àµ¾ തിരയàµà´¨àµà´¨àµ... Partitioning പാർടàµà´Ÿàµ€à´·à´¨à´¿à´™àµà´™àµ SetHostNameJob Set hostname %1 %1 ഹോസàµà´±àµà´±àµâ€Œà´¨àµ†à´¯à´¿à´‚ à´•àµà´°à´®àµ€à´•à´°à´¿à´•àµà´•àµà´• Set hostname <strong>%1</strong>. <strong>%1</strong> ഹോസàµà´±àµà´±àµâ€Œà´¨àµ†à´¯à´¿à´‚ à´•àµà´°à´®àµ€à´•à´°à´¿à´•àµà´•àµà´•. Setting hostname %1. %1 ഹോസàµà´±àµà´±àµâ€Œà´¨àµ†à´¯à´¿à´‚ à´•àµà´°à´®àµ€à´•à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ. Internal Error ആനàµà´¤à´°à´¿à´•മായ പിഴവൠCannot write hostname to target system ടാർഗെറàµà´±àµ സിസàµà´±àµà´±à´¤àµà´¤à´¿à´²àµ‡à´•àµà´•ൠഹോസàµà´±àµà´±àµà´¨à´¾à´®à´‚ à´Žà´´àµà´¤à´¾àµ» കഴിയിലàµà´² SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 കീബോർഡൠമാതൃക %1 ആയി à´•àµà´°à´®àµ€à´•à´°à´¿à´•àµà´•àµà´•, രൂപരേഖ %2-%3 Failed to write keyboard configuration for the virtual console. വിർചàµà´µàµ½ കൺസോളിനായàµà´³àµà´³ കീബോർഡൠകàµà´°à´®àµ€à´•രണം à´Žà´´àµà´¤àµà´¨àµà´¨à´¤à´¿àµ½ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ. Failed to write to %1 %1ലേകàµà´•ൠഎഴàµà´¤àµà´¨àµà´¨à´¤à´¿àµ½ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ Failed to write keyboard configuration for X11. X11 നായി കീബോർഡൠകോൺഫിഗറേഷൻ à´Žà´´àµà´¤àµà´¨àµà´¨à´¤à´¿àµ½ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ. Failed to write keyboard configuration to existing /etc/default directory. നിലവിലàµà´³àµà´³ /etc/default ഡയറകàµà´Ÿà´±à´¿à´¯à´¿à´²àµ‡à´•àµà´•ൠകീബോർഡൠകോൺഫിഗറേഷൻ à´Žà´´àµà´¤àµà´¨àµà´¨à´¤à´¿àµ½ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ. SetPartFlagsJob Set flags on partition %1. പാർടàµà´Ÿàµ€à´·àµ» %1ൽ à´«àµà´²à´¾à´—àµà´•ൾ à´•àµà´°à´®àµ€à´•à´°à´¿à´•àµà´•àµà´•. Set flags on %1MiB %2 partition. %1എംബി പാർടàµà´Ÿàµ€à´·àµ» %2ൽ à´«àµà´²à´¾à´—àµà´•ൾ à´•àµà´°à´®àµ€à´•à´°à´¿à´•àµà´•àµà´•. Set flags on new partition. à´ªàµà´¤à´¿à´¯ പാർടàµà´Ÿàµ€à´·à´¨à´¿àµ½ à´«àµà´²à´¾à´—àµà´•ൾ à´•àµà´°à´®àµ€à´•à´°à´¿à´•àµà´•àµà´•. Clear flags on partition <strong>%1</strong>. <strong>%1</strong> പാർടàµà´Ÿàµ€à´·à´¨à´¿à´²àµ† à´«àµà´²à´¾à´—àµà´•ൾ നീകàµà´•à´‚ ചെയàµà´¯àµà´•. Clear flags on %1MiB <strong>%2</strong> partition. %1എംബി <strong>%2</strong> പാർടàµà´Ÿàµ€à´·à´¨à´¿à´²àµ† à´«àµà´²à´¾à´—àµà´•ൾ à´•àµà´°à´®àµ€à´•à´°à´¿à´•àµà´•àµà´•. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. %1MiB <strong>%2</strong> പാർടàµà´Ÿàµ€à´·àµ» <strong>%3</strong> ആയി à´«àµà´²à´¾à´—ൠചെയàµà´¯àµà´•. Clearing flags on %1MiB <strong>%2</strong> partition. à´«àµà´²à´¾à´—àµà´•ൾ %1MiB <strong>%2</strong> പാർടàµà´Ÿàµ€à´·à´¨à´¿àµ½ നിർമàµà´®à´¿à´•àµà´•àµà´¨àµà´¨àµ. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. <strong>%3</strong> à´«àµà´²à´¾à´—àµà´•ൾ %1MiB <strong>%2</strong> പാർടàµà´Ÿàµ€à´·à´¨à´¿àµ½ à´•àµà´°à´®àµ€à´•à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ. Clear flags on new partition. à´ªàµà´¤à´¿à´¯ പാർടàµà´Ÿàµ€à´·à´¨à´¿à´²àµ† à´«àµà´²à´¾à´—àµà´•ൾ മായàµà´•àµà´•àµà´•. Flag partition <strong>%1</strong> as <strong>%2</strong>. <strong>%1</strong> പാർടàµà´Ÿàµ€à´·à´¨àµ† <strong>%2</strong> ആയി à´«àµà´²à´¾à´—ൠചെയàµà´¯àµà´• Flag new partition as <strong>%1</strong>. à´ªàµà´¤à´¿à´¯ പാർടàµà´Ÿàµ€à´·àµ» <strong>%1 </strong>ആയി à´«àµà´²à´¾à´—àµà´šàµ†à´¯àµà´¯àµà´•. Clearing flags on partition <strong>%1</strong>. പാർടàµà´Ÿàµ€à´·àµ» <strong>%1</strong>ലെ à´«àµà´²à´¾à´—àµà´•ൾ മായàµà´•àµà´•àµà´¨àµà´¨àµ. Clearing flags on new partition. à´ªàµà´¤à´¿à´¯ പാർടàµà´Ÿàµ€à´·à´¨à´¿à´²àµ† à´«àµà´²à´¾à´—àµà´•ൾ മായàµà´•àµà´•àµà´¨àµà´¨àµ. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. <strong>%2</strong> à´«àµà´²à´¾à´—àµà´•ൾ <strong>%1</strong> പാർടàµà´Ÿàµ€à´·à´¨à´¿àµ½ à´•àµà´°à´®àµ€à´•à´°à´¿à´•àµà´•àµà´•. Setting flags <strong>%1</strong> on new partition. <strong>%1</strong> à´«àµà´²à´¾à´—àµà´•ൾ à´ªàµà´¤à´¿à´¯ പാർടàµà´Ÿàµ€à´·à´¨à´¿àµ½ à´•àµà´°à´®àµ€à´•à´°à´¿à´•àµà´•àµà´•. The installer failed to set flags on partition %1. പാർടàµà´Ÿàµ€à´·àµ» %1ൽ à´«àµà´²à´¾à´—àµà´•ൾ à´•àµà´°à´®àµ€à´•à´°à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿àµ½ ഇൻസàµà´±àµà´±à´¾à´³àµ¼ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ. SetPasswordJob Set password for user %1 %1 ഉപയോകàµà´¤à´¾à´µà´¿à´¨àµà´³àµà´³ രഹസàµà´¯à´µà´¾à´•àµà´•ൠകàµà´°à´®àµ€à´•à´°à´¿à´•àµà´•àµà´• Setting password for user %1. %1 ഉപയോകàµà´¤à´¾à´µà´¿à´¨àµà´³àµà´³ രഹസàµà´¯à´µà´¾à´•àµà´•ൠകàµà´°à´®àµ€à´•à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ. Bad destination system path. ലകàµà´·àµà´¯à´¤àµà´¤à´¿à´¨àµà´±àµ† സിസàµà´±àµà´±à´‚ പാതàµà´¤àµ തെറàµà´±à´¾à´£àµ. rootMountPoint is %1 rootMountPoint %1 ആണൠCannot disable root account. റൂടàµà´Ÿàµ à´…à´•àµà´•ൗണàµà´Ÿàµ നിഷàµà´•àµà´°à´¿à´¯à´®à´¾à´•àµà´•ാനായിലàµà´². passwd terminated with error code %1. passwd പിഴവൠകോഡàµâ€Œ %1 ഓടൠകൂടീ അവസാനിചàµà´šàµ. Cannot set password for user %1. ഉപയോകàµà´¤à´¾à´µàµ %1നായി രഹസàµà´¯à´µà´¾à´•àµà´•ൠകàµà´°à´®àµ€à´•à´°à´¿à´•àµà´•ാനായിലàµà´². usermod terminated with error code %1. usermod പിഴവൠകോഡàµâ€Œ %1 ഓടൠകൂടീ അവസാനിചàµà´šàµ. SetTimezoneJob Set timezone to %1/%2 %1%2 à´Žà´¨àµà´¨à´¤à´¿à´²àµ‡à´•àµà´•ൠസമയപദàµà´§à´¤à´¿ à´•àµà´°à´®àµ€à´•à´°à´¿à´•àµà´•àµà´• Cannot access selected timezone path. തിരഞàµà´žàµ†à´Ÿàµà´¤àµà´¤ സമയപദàµà´§à´¤à´¿ പാതàµà´¤àµ ലഭàµà´¯à´®à´²àµà´². Bad path: %1 മോശമായ പാതàµà´¤àµ: %1 Cannot set timezone. സമയപദàµà´§à´¤à´¿ സജàµà´œà´®à´¾à´•àµà´•ാനായിലàµà´². Link creation failed, target: %1; link name: %2 à´•à´£àµà´£à´¿ ഉണàµà´Ÿà´¾à´•àµà´•ൽ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ, ലകàµà´·àµà´¯à´‚: %1, à´•à´£àµà´£à´¿à´¯àµà´Ÿàµ† പേരàµ: %2 Cannot set timezone, സമയപദàµà´§à´¤à´¿ സജàµà´œà´®à´¾à´•àµà´•ാനായിലàµà´², Cannot open /etc/timezone for writing à´Žà´´àµà´¤àµà´¨àµà´¨à´¤à´¿à´¨à´¾à´¯à´¿ /etc/timezone à´¤àµà´±à´•àµà´•ാനായിലàµà´² ShellProcessJob Shell Processes Job ഷെൽ à´ªàµà´°à´•àµà´°à´¿à´¯à´•ൾ ജോലി SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage This is an overview of what will happen once you start the setup procedure. താങàµà´•ൾ സജàµà´œàµ€à´•രണപàµà´°à´•àµà´°à´¿à´¯ ആരംഭിചàµà´šà´¤à´¿à´¨àµà´¶àµ‡à´·à´‚ à´Žà´¨àµà´¤àµ സംഭവികàµà´•àµà´‚ à´Žà´¨àµà´¨à´¤à´¿à´¨àµà´±àµ† അവലോകനമാണിതàµ. This is an overview of what will happen once you start the install procedure. നിങàµà´™àµ¾ ഇൻസàµà´±àµà´±à´¾àµ¾ നടപടികàµà´°à´®à´™àµà´™àµ¾ ആരംഭിചàµà´šàµà´•à´´à´¿à´žàµà´žà´¾àµ½ à´Žà´¨àµà´¤àµ സംഭവികàµà´•àµà´‚ à´Žà´¨àµà´¨à´¤à´¿à´¨àµà´±àµ† ഒരൠഅവലോകനമാണിതàµ. SummaryViewStep Summary à´šàµà´°àµà´•àµà´•à´‚ TrackingInstallJob Installation feedback ഇൻസàµà´±àµà´±à´³àµ‡à´·à´¨àµ† പറàµà´±à´¿à´¯àµà´³àµà´³ à´ªàµà´°à´¤à´¿à´•രണം Sending installation feedback. ഇൻസàµà´±àµà´±à´³àµ‡à´·à´¨àµ† പറàµà´±à´¿à´¯àµà´³àµà´³ à´ªàµà´°à´¤à´¿à´•രണം അയയàµà´•àµà´•àµà´¨àµà´¨àµ. Internal error in install-tracking. ഇൻസàµà´±àµà´±à´¾àµ¾-പിനàµà´¤àµà´Ÿà´°àµà´¨àµà´¨à´¤à´¿àµ½ ആനàµà´¤à´°à´¿à´•മായ പിഴവàµ. HTTP request timed out. HTTP അപേകàµà´·à´¯àµà´Ÿàµ† സമയപരിധി à´•à´´à´¿à´žàµà´žàµ. TrackingMachineNeonJob Machine feedback ഉപകരണതàµà´¤à´¿àµ½ നിനàµà´¨àµà´³àµà´³ à´ªàµà´°à´¤à´¿à´•രണം Configuring machine feedback. ഉപകരണതàµà´¤à´¿àµ½ നിനàµà´¨àµà´³àµà´³ à´ªàµà´°à´¤à´¿à´•രണം à´•àµà´°à´®àµ€à´•à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ. Error in machine feedback configuration. ഉപകരണതàµà´¤à´¿àµ½ നിനàµà´¨àµà´³àµà´³ à´ªàµà´°à´¤à´¿à´•രണതàµà´¤à´¿à´¨àµà´±àµ† à´•àµà´°à´®àµ€à´•രണതàµà´¤à´¿àµ½ പിഴവàµ. Could not configure machine feedback correctly, script error %1. ഉപകരണതàµà´¤à´¿àµ½ നിനàµà´¨àµà´³àµà´³ à´ªàµà´°à´¤à´¿à´•രണം ശരിയായി à´•àµà´°à´®àµ€à´•à´°à´¿à´•àµà´•ാനായിലàµà´². à´¸àµà´•àµà´°à´¿à´ªàµà´±àµà´±àµ പിഴവൠ%1. Could not configure machine feedback correctly, Calamares error %1. ഉപകരണതàµà´¤à´¿àµ½ നിനàµà´¨àµà´³àµà´³ à´ªàµà´°à´¤à´¿à´•രണം ശരിയായി à´•àµà´°à´®àµ€à´•à´°à´¿à´•àµà´•ാനായിലàµà´². കലാമാരേസൠപിഴവൠ%1. TrackingPage Form ഫോം Placeholder à´ªàµà´²àµ‡à´¸àµâ€Œà´¹àµ‹àµ¾à´¡àµ¼ <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>ഇതൠതിരഞàµà´žàµ†à´Ÿàµà´•àµà´•àµà´¨àµà´¨à´¤à´¿à´²àµ‚ടെ, നിങàµà´™à´³àµà´Ÿàµ† ഇൻസàµà´±àµà´±à´¾à´³àµ‡à´·à´¨àµ†à´•àµà´•àµà´±à´¿à´šàµà´šàµ <span style=" font-weight:600;">ഒരൠവിവരവàµà´‚ നിങàµà´™àµ¾ അയയàµâ€Œà´•àµà´•à´¿à´²àµà´².</span></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">ഉപയോകàµà´¤àµƒ ഫീഡàµâ€Œà´¬à´¾à´•àµà´•ിനെകàµà´•àµà´±à´¿à´šàµà´šàµà´³àµà´³ കൂടàµà´¤àµ½ വിവരങàµà´™àµ¾à´•àµà´•ൠഇവിടെ à´•àµà´²à´¿à´•àµà´•àµà´šàµ†à´¯àµà´¯àµà´•</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. à´Žà´¤àµà´° ഉപയോകàµà´¤à´¾à´•àµà´•à´³àµà´£àµà´Ÿàµ ,à´à´¤àµ ഹാർഡàµâ€Œà´µàµ†à´¯à´±à´¿à´²à´¾à´£àµ %1 ഇൻസàµà´±àµà´±à´¾àµ¾ ചെയàµà´¯àµà´¨àµà´¨à´¤àµ (à´šàµà´µà´Ÿàµ†à´¯àµà´³àµà´³ അവസാന à´°à´£àµà´Ÿàµ à´“à´ªàµà´·à´¨àµà´•ൾകàµà´•ൊപàµà´ªà´‚) കൂടാതെ നിങàµà´™àµ¾ à´®àµà´¨àµà´—ണന നൽകàµà´¨àµà´¨ à´ªàµà´°à´¯àµ‹à´—à´™àµà´™à´³àµ†à´•àµà´•àµà´±à´¿à´šàµà´šàµà´³àµà´³ വിവരങàµà´™àµ¾ നേടàµà´¨àµà´¨à´¤à´¿à´¨àµ %1 ഇൻസàµà´±àµà´±à´¾àµ¾ à´Ÿàµà´°à´¾à´•àµà´•ിംഗൠസഹായികàµà´•àµà´¨àµà´¨àµ.à´Žà´¨àµà´¤à´¾à´£àµ അയയàµâ€Œà´•àµà´•àµà´¨àµà´¨à´¤àµ†à´¨àµà´¨àµ കാണാൻ, ഓരോ ഭാഗതàµà´¤à´¿à´¨àµà´‚ à´…à´Ÿàµà´¤àµà´¤àµà´³àµà´³ സഹായ à´à´•àµà´•ണിൽ à´•àµà´²à´¿à´•àµà´•àµà´šàµ†à´¯àµà´¯àµà´•. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. ഇതൠതിരഞàµà´žàµ†à´Ÿàµà´•àµà´•àµà´¨àµà´¨à´¤à´¿à´²àµ‚ടെ നിങàµà´™à´³àµà´Ÿàµ† ഇൻസàµà´±àµà´±à´¾à´³àµ‡à´·à´¨àµ†à´•àµà´•àµà´±à´¿à´šàµà´šàµà´‚ ഹാർഡàµâ€Œà´µàµ†à´¯à´±à´¿à´¨àµ†à´•àµà´•àµà´±à´¿à´šàµà´šàµà´‚ വിവരങàµà´™àµ¾ അയയàµà´•àµà´•àµà´‚. ഇൻസàµà´±àµà´±à´¾à´³àµ‡à´·àµ» പൂർതàµà´¤à´¿à´¯à´¾à´¯à´¤à´¿à´¨àµ ശേഷം <b>ഒരൠതവണ മാതàµà´°à´®àµ‡ à´ˆ വിവരങàµà´™àµ¾ അയയàµà´•àµà´•ൂ</b>. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. ഇതൠതിരഞàµà´žàµ†à´Ÿàµà´•àµà´•àµà´¨àµà´¨à´¤à´¿à´²àµ‚ടെ താങàµà´•ൾ <b>ഇടയàµà´•àµà´•ിടെ</b>താങàµà´•à´³àµà´Ÿàµ† ഇൻസàµà´±àµà´±à´³àµ‡à´·à´¨àµ†à´¯àµà´‚ ഹാർഡàµâ€Œà´µàµ†à´¯à´±à´¿à´¨àµ†à´¯àµà´‚ à´ªàµà´°à´¯àµ‹à´—à´™àµà´™à´³àµ‡à´¯àµà´‚ പറàµà´±à´¿à´¯àµà´³àµà´³ വിവരങàµà´™àµ¾ %1നൠഅയചàµà´šàµà´•ൊടàµà´•àµà´•àµà´‚. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. ഇതൠതിരഞàµà´žàµ†à´Ÿàµà´•àµà´•àµà´¨àµà´¨à´¤à´¿à´²àµ‚ടെ നിങàµà´™à´³àµà´Ÿàµ† ഇൻസàµà´±àµà´±à´¾à´³àµ‡à´·àµ», ഹാർഡàµâ€Œà´µàµ†à´¯àµ¼, ആപàµà´²à´¿à´•àµà´•േഷനàµà´•ൾ, ഉപയോഗ രീതികൾ à´Žà´¨àµà´¨à´¿à´µà´¯àµ†à´•àµà´•àµà´±à´¿à´šàµà´šàµà´³àµà´³ വിവരങàµà´™àµ¾ <b>പതിവായി</b> %1 ലേകàµà´•ൠഅയയàµà´•àµà´•àµà´‚. TrackingViewStep Feedback à´ªàµà´°à´¤à´¿à´•രണം UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>à´’à´¨àµà´¨à´¿à´²à´§à´¿à´•à´‚ ആളàµà´•ൾ à´ˆ à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿàµ¼ ഉപയോഗികàµà´•àµà´®àµ†à´™àµà´•ിൽ, താങàµà´•ൾകàµà´•ൠസജàµà´œàµ€à´•രണതàµà´¤à´¿à´¨àµ ശേഷം നിരവധി à´…à´•àµà´•ൗണàµà´Ÿàµà´•ൾ സൃഷàµà´Ÿà´¿à´•àµà´•ാം.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>à´’à´¨àµà´¨à´¿à´²à´§à´¿à´•à´‚ ആളàµà´•ൾ à´ˆ à´•à´®àµà´ªàµà´¯àµ‚à´Ÿàµà´Ÿàµ¼ ഉപയോഗികàµà´•àµà´®àµ†à´™àµà´•ിൽ, താങàµà´•ൾകàµà´•ൠഇൻസàµà´±àµà´±à´³àµ‡à´·à´¨àµ ശേഷം നിരവധി à´…à´•àµà´•ൗണàµà´Ÿàµà´•ൾ സൃഷàµà´Ÿà´¿à´•àµà´•ാം.</small> Your username is too long. നിങàµà´™à´³àµà´Ÿàµ† ഉപയോകàµà´¤àµƒà´¨à´¾à´®à´‚ വളരെ വലàµà´¤à´¾à´£àµ. Your username must start with a lowercase letter or underscore. താങàµà´•à´³àµà´Ÿàµ† ഉപയോകàµà´¤àµƒà´¨à´¾à´®à´‚ ഒരൠചെറിയ à´…à´•àµà´·à´°à´®àµ‹ à´…à´£àµà´Ÿàµ¼à´¸àµà´•ോറോ ഉപയോഗിചàµà´šàµ വേണം à´¤àµà´Ÿà´™àµà´™à´¾àµ». Only lowercase letters, numbers, underscore and hyphen are allowed. ചെറിയ à´…à´•àµà´·à´°à´™àµà´™àµ¾, à´…à´•àµà´•à´™àµà´™àµ¾, à´…à´£àµà´Ÿàµ¼à´¸àµà´•ോർ, ഹൈഫൺ à´Žà´¨àµà´¨à´¿à´µà´¯àµ‡ à´…à´¨àµà´µà´¦à´¿à´šàµà´šà´¿à´Ÿàµà´Ÿàµà´³àµà´³àµ‚. Only letters, numbers, underscore and hyphen are allowed. à´…à´•àµà´·à´°à´™àµà´™àµ¾, à´…à´•àµà´•à´™àµà´™àµ¾, à´…à´£àµà´Ÿàµ¼à´¸àµà´•ോർ, ഹൈഫൺ à´Žà´¨àµà´¨à´¿à´µà´¯àµ‡ à´…à´¨àµà´µà´¦à´¿à´šàµà´šà´¿à´Ÿàµà´Ÿàµà´³àµà´³àµ‚. Your hostname is too short. നിങàµà´™à´³àµà´Ÿàµ† ഹോസàµà´±àµà´±àµà´¨à´¾à´®à´‚ വളരെ ചെറàµà´¤à´¾à´£àµ Your hostname is too long. നിങàµà´™à´³àµà´Ÿàµ† ഹോസàµà´±àµà´±àµà´¨à´¾à´®à´‚ ദൈർഘàµà´¯à´®àµ‡à´±à´¿à´¯à´¤à´¾à´£àµ Your passwords do not match! നിങàµà´™à´³àµà´Ÿàµ† പാസàµâ€Œà´µàµ‡à´¡àµà´•ൾ പൊരàµà´¤àµà´¤à´ªàµà´ªàµ†à´Ÿàµà´¨àµà´¨à´¿à´²àµà´²! UsersViewStep Users ഉപയോകàµà´¤à´¾à´•àµà´•ൾ VariantModel Key സൂചിക Value മൂലàµà´¯à´‚ VolumeGroupBaseDialog Create Volume Group വോളàµà´¯à´‚ à´—àµà´°àµ‚à´ªàµà´ªàµ നിർമàµà´®à´¿à´•àµà´•àµà´• List of Physical Volumes ഫിസികàµà´•ൽ വോളàµà´¯à´™àµà´™à´³àµà´Ÿàµ† പടàµà´Ÿà´¿à´• Volume Group Name: വോളàµà´¯à´‚ à´—àµà´°àµ‚à´ªàµà´ªà´¿à´¨àµà´±àµ† പേരàµ: Volume Group Type: വോളàµà´¯à´‚ à´—àµà´°àµ‚à´ªàµà´ªàµ തരം: Physical Extent Size: ഫിസികàµà´•ൽ à´Žà´•àµà´¸àµà´±àµà´±à´¨àµà´±àµ വലàµà´ªàµà´ªà´‚: MiB MiB Total Size: മൊതàµà´¤à´‚ വലàµà´ªàµà´ªà´‚: Used Size: ഉപയോഗിചàµà´š വലàµà´ªàµà´ªà´‚: Total Sectors: മൊതàµà´¤à´‚ സെകàµà´Ÿà´±àµà´•ൾ: Quantity of LVs: LVà´•à´³àµà´Ÿàµ† അളവàµ: WelcomePage Form ഫോം Select application and system language à´…à´ªàµà´²à´¿à´•àµà´•േഷനàµà´‚ സിസàµà´±àµà´±à´‚ ഭാഷയàµà´‚ തിരഞàµà´žàµ†à´Ÿàµà´•àµà´•àµà´• Open donations website സംഭാവനകളàµà´Ÿàµ† വെബàµà´¸àµˆà´±àµà´±àµ à´¤àµà´±à´•àµà´•àµà´• &Donate &സംഭാവന ചെയàµà´¯àµà´• Open help and support website സഹായ പിനàµà´¤àµà´£ വെബàµà´¸àµˆà´±àµà´±àµ à´¤àµà´±à´•àµà´•àµà´• Open issues and bug-tracking website à´ªàµà´°à´¶à´¨à´™àµà´™àµ¾,ബഗàµà´—àµâ€Œ à´Ÿàµà´°à´¾à´•àµà´•ിംഗൠവെബàµà´¸àµˆà´±àµà´±àµ à´¤àµà´±à´•àµà´•àµà´• Open release notes website à´ªàµà´°à´•ാശന à´•àµà´±à´¿à´ªàµà´ªàµà´•à´³àµà´Ÿàµ† വെബàµà´¸àµˆà´±àµà´±àµ à´¤àµà´±à´•àµà´•àµà´• &Release notes à´ªàµà´°à´•ാശന à´•àµà´±à´¿à´ªàµà´ªàµà´•ൾ (&R) &Known issues ഇതിനകം അറിയാവàµà´¨àµà´¨ à´ªàµà´°à´¶àµà´¨à´™àµà´™àµ¾ (&K) &Support പിനàµà´¤àµà´£ (&S) &About വിവരം (&A) <h1>Welcome to the %1 installer.</h1> <h1>%1 ഇൻസàµà´±àµà´±à´¾à´³à´±à´¿à´²àµ‡à´•àµà´•ൠസàµà´µà´¾à´—തം</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>%1 -നായàµà´³àµà´³ കലാമാരേസൠഇൻസàµà´±àµà´±à´¾à´³à´±à´¿à´²àµ‡à´•àµà´•ൠസàµà´µà´¾à´—തം.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>%1 -നായàµà´³àµà´³ കലാമാരേസൠസജàµà´œàµ€à´•രണപàµà´°à´•àµà´°à´¿à´¯à´¯à´¿à´²àµ‡à´¯àµà´•àµà´•ൠസàµà´µà´¾à´—തം.</h1> <h1>Welcome to %1 setup.</h1> <h1>%1 സജàµà´œàµ€à´•രണതàµà´¤à´¿à´²àµ‡à´•àµà´•ൠസàµà´µà´¾à´—തം.</h1> About %1 setup %1 സജàµà´œàµ€à´•രണതàµà´¤àµ†à´•àµà´•àµà´±à´¿à´šàµà´šàµ About %1 installer %1 ഇൻസàµà´±àµà´±à´¾à´³à´±à´¿à´¨àµ† à´•àµà´±à´¿à´šàµà´šàµ <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. <h1>%1</h1><br/><strong>%2<br/>%3 à´¨àµ</strong><br/><br/>പകർപàµà´ªà´µà´•ാശം 2015-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>പകർപàµà´ªà´µà´•ാശം 2018-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/><a href="https://calamares.io/team/">കലാമരേസൠടീമിനàµà´‚</a><a href="https://www.transifex.com/calamares/calamares/">കലാമരേസൠപരിഭാഷാ ടീമിനàµà´‚</a> നനàµà´¦à´¿.<br/><br/><a href="https://calamares.io/">കലാമരേസàµ</a>വികസനം <br/><a href="http://www.blue-systems.com/">Blue Systems</a>- Liberating Software à´¸àµà´ªàµ‹àµºà´¸àµ¼ ചെയàµà´¯àµà´¨àµà´¨à´¤à´¾à´£àµ. %1 support %1 പിനàµà´¤àµà´£ WelcomeQmlViewStep Welcome à´¸àµà´µà´¾à´—തം WelcomeViewStep Welcome à´¸àµà´µà´¾à´—തം notesqml <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> About Support Known issues Release notes Donate calamares-3.2.20/lang/calamares_mr.ts000066400000000000000000004650151362604102500174570ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. BootLoaderModel Master Boot Record of %1 %1 चà¥à¤¯à¤¾ मà¥à¤–à¥à¤¯ आरंभ अभिलेखामधे Boot Partition आरंभक विभाजन System Partition पà¥à¤°à¤£à¤¾à¤²à¥€ विभाजन Do not install a boot loader आरंभ सूचक अधिषà¥à¤ à¤¾à¤ªà¤¿à¤¤ करॠनका %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page Calamares::DebugWindow Form सà¥à¤µà¤°à¥à¤ª GlobalStorage JobQueue Modules मोडयà¥à¤²à¥à¤¸ Type: पà¥à¤°à¤•ार : none कोणतेही नाहीत Interface: अंतराफलक : Tools साधने Reload Stylesheet Widget Tree Debug information दोषमारà¥à¤œà¤¨ माहिती Calamares::ExecutionViewStep Set up Install अधिषà¥à¤ à¤¾à¤ªà¤¨à¤¾ Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done पूरà¥à¤£ à¤à¤¾à¤²à¥€ Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 %1 %2 आजà¥à¤žà¤¾ चालवला जातोय Calamares::PythonJob Running %1 operation. %1 कà¥à¤°à¤¿à¤¯à¤¾ चालवला जातोय Bad working directory path Working directory %1 for python job %2 is not readable. Bad main script file Main script file %1 for python job %2 is not readable. Boost.Python error in job "%1". Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager &Back &मागे &Next &पà¥à¤¢à¥‡ &Cancel &रदà¥à¤¦ करा Cancel setup without changing the system. Cancel installation without changing the system. पà¥à¤°à¤£à¤¾à¤²à¥€à¤¤ बदल न करता अधिषà¥à¤Ÿà¤¾à¤ªà¤¨à¤¾ रदà¥à¤¦ करा. Setup Failed Would you like to paste the install log to the web? Install Log Paste URL The upload was unsuccessful. No web-paste was done. Calamares Initialization Failed %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. <br/>The following modules could not be loaded: Continue with installation? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Set up &Install Setup is complete. Close the setup program. Cancel setup? Cancel installation? अधिषà¥à¤ à¤¾à¤ªà¤¨à¤¾ रदà¥à¤¦ करायचे? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. &Yes &होय &No &नाही &Close &बंद करा Continue with setup? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> &Install now &आता अधिषà¥à¤ à¤¾à¤ªà¤¿à¤¤ करा Go &back &मागे जा &Done &पूरà¥à¤£ à¤à¤¾à¤²à¥€ The installation is complete. Close the installer. अधिषà¥à¤ à¤¾à¤ªà¤¨à¤¾ संपूरà¥à¤£ à¤à¤¾à¤²à¥€. अधिषà¥à¤ à¤¾à¤ªà¤• बंद करा. Error तà¥à¤°à¥à¤Ÿà¥€ Installation Failed अधिषà¥à¤ à¤¾à¤ªà¤¨à¤¾ अयशसà¥à¤µà¥€ à¤à¤¾à¤²à¥€ CalamaresPython::Helper Unknown exception type unparseable Python error unparseable Python traceback Unfetchable Python error. CalamaresUtils Install log posted to: %1 CalamaresWindow %1 Setup Program %1 Installer %1 अधिषà¥à¤ à¤¾à¤ªà¤• Show debug information दोषमारà¥à¤œà¤¨ माहिती दरà¥à¤¶à¤µà¤¾ CheckerContainer Gathering system information... ChoicePage Form सà¥à¤µà¤°à¥à¤ª After: नंतर : <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Boot loader location: Select storage de&vice: Current: सदà¥à¤¯à¤¾ : Reuse %1 as home partition for %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. <strong>Select a partition to install on</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. The EFI system partition at %1 will be used for starting %2. EFI system partition: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. No Swap Reuse Swap Swap (no Hibernate) Swap (with Hibernate) Swap to file <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. ClearMountsJob Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 ClearTempMountsJob Clear all temporary mounts. Clearing all temporary mounts. Cannot get list of temporary mounts. Cleared all temporary mounts. CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition विभाजन निरà¥à¤®à¤¾à¤£ करा MiB Partition &Type: विभाजन &पà¥à¤°à¤•ार : &Primary &पà¥à¤°à¤¾à¤¥à¤®à¤¿à¤• E&xtended Fi&le System: LVM LV name Flags: &Mount Point: Si&ze: En&crypt Logical तारà¥à¤•िक Primary पà¥à¤°à¤¾à¤¥à¤®à¤¿à¤• GPT Mountpoint already in use. Please select another one. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. %2 वर %1 हे नवीन विभाजन निरà¥à¤®à¤¾à¤£ करत आहे The installer failed to create partition on disk '%1'. CreatePartitionTableDialog Create Partition Table विभाजन कोषà¥à¤Ÿà¤• निरà¥à¤®à¤¾à¤£ करा Creating a new partition table will delete all existing data on the disk. What kind of partition table do you want to create? Master Boot Record (MBR) GUID Partition Table (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Creating new %1 partition table on %2. The installer failed to create a partition table on %1. CreateUserJob Create user %1 Create user <strong>%1</strong>. Creating user %1. Sudoers dir is not writable. Cannot create sudoers file for writing. Cannot chmod sudoers file. Cannot open groups file for reading. CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. Delete partition <strong>%1</strong>. Deleting partition %1. The installer failed to delete partition %1. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. This device has a <strong>%1</strong> partition table. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - (%2) device[name] - (device-node[name]) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Failed to open %1 DummyCppJob Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Content: &Keep Format Warning: Formatting the partition will erase all existing data. &Mount Point: Si&ze: MiB Fi&le System: Flags: Mountpoint already in use. Please select another one. EncryptWidget Form सà¥à¤µà¤°à¥à¤ª En&crypt system Passphrase Confirm passphrase Please enter the same passphrase in both boxes. FillGlobalStorageJob Set partition information Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Install boot loader on <strong>%1</strong>. Setting up mount points. FinishedPage Form सà¥à¤µà¤°à¥à¤ª <Restart checkbox tooltip> &Restart now <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. FinishedViewStep Finish Setup Complete Installation Complete The setup of %1 is complete. The installation of %1 is complete. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatting partition %1 with file system %2. The installer failed to format partition %1 on disk '%2'. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source The system is not plugged in to a power source. is connected to the Internet The system is not connected to the Internet. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Please install KDE Konsole and try again! Executing script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script KeyboardPage Set keyboard model to %1.<br/> Set keyboard layout to %1/%2. KeyboardViewStep Keyboard LCLocaleDialog System locale setting The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. &Cancel &रदà¥à¤¦ करा &OK LicensePage Form सà¥à¤µà¤°à¥à¤ª <h1>License Agreement</h1> I accept the terms and conditions above. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> File: %1 Show the license text Open license agreement in browser. Hide license text LocalePage The system language will be set to %1. The numbers and dates locale will be set to %1. Region: Zone: &Change... Set timezone to %1/%2.<br/> LocaleViewStep Location LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Configuration Error No root mount point is set for MachineId. NetInstallPage Name Description Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Incorrect configuration) NetInstallViewStep Package selection Office software Office package Browser software Browser package Web browser Kernel Services Login Desktop Applications NotesQmlViewStep Notes OEMPage Ba&tch: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> OEMViewStep OEM Configuration Set the OEM Batch Identifier to <code>%1</code>. PWQ Password is too short परवलीशबà¥à¤¦ खूप लहान आहे Password is too long परवलीशबà¥à¤¦ खूप लांब आहे Password is too weak Memory allocation error when setting '%1' Memory allocation error The password is the same as the old one The password is a palindrome The password differs with case changes only The password is too similar to the old one The password contains the user name in some form The password contains words from the real name of the user in some form The password contains forbidden words in some form The password contains less than %1 digits The password contains too few digits The password contains less than %1 uppercase letters The password contains too few uppercase letters The password contains less than %1 lowercase letters The password contains too few lowercase letters The password contains less than %1 non-alphanumeric characters The password contains too few non-alphanumeric characters The password is shorter than %1 characters The password is too short The password is just rotated old one The password contains less than %1 character classes The password does not contain enough character classes The password contains more than %1 same characters consecutively The password contains too many same characters consecutively The password contains more than %1 characters of the same class consecutively The password contains too many characters of the same class consecutively The password contains monotonic sequence longer than %1 characters The password contains too long of a monotonic character sequence No password supplied Cannot obtain random numbers from the RNG device Password generation failed - required entropy too low for settings The password fails the dictionary check - %1 The password fails the dictionary check Unknown setting - %1 Unknown setting Bad integer value of setting - %1 Bad integer value Setting %1 is not of integer type Setting is not of integer type Setting %1 is not of string type Setting is not of string type Opening the configuration file failed The configuration file is malformed Fatal failure Unknown error Password is empty PackageChooserPage Form सà¥à¤µà¤°à¥à¤ª Product Name TextLabel Long Product Description Package Selection Please pick a product from the list. The selected product will be installed. PackageChooserViewStep Packages Page_Keyboard Form सà¥à¤µà¤°à¥à¤ª Keyboard Model: Type here to test your keyboard Page_UserSetup Form सà¥à¤µà¤°à¥à¤ª What is your name? What name do you want to use to log in? Choose a password to keep your account safe. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> What is the name of this computer? Your Full Name login <small>This name will be used if you make the computer visible to others on a network.</small> Computer Name Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Use the same password for the administrator account. Choose a password for the administrator account. <small>Enter the same password twice, so that it can be checked for typing errors.</small> PartitionLabelsView Root Home Boot EFI system Swap New partition for %1 New partition %1 %2 size[number] filesystem[name] PartitionModel Free Space New partition Name File System Mount Point Size PartitionPage Form सà¥à¤µà¤°à¥à¤ª Storage de&vice: &Revert All Changes New Partition &Table Cre&ate &Edit &Delete New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group I&nstall boot loader on: Are you sure you want to create a new partition table on %1? Can not create new partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. PartitionViewStep Gathering system information... Partitions Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <strong>Replace</strong> a partition with %1. <strong>Manual</strong> partitioning. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Current: सदà¥à¤¯à¤¾ : After: नंतर : No EFI system partition configured An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. EFI system partition flag not set An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form सà¥à¤µà¤°à¥à¤ª Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: External command crashed. Command <i>%1</i> crashed. External command failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Bad parameters for process job call. External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Command <i>%1</i> finished with exit code %2. QObject Default Keyboard Model Default unknown extended unformatted swap Unpartitioned space or unknown partition table (no mount point) Requirements checking for module <i>%1</i> is complete. %1 (%2) language[name] (country[name]) %1 (%2) No product No description provided. File not found Path <pre>%1</pre> must be an absolute path. Could not create new random file <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form सà¥à¤µà¤°à¥à¤ª Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. The selected item does not appear to be a valid partition. %1 cannot be installed on empty space. Please select an existing partition. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 cannot be installed on this partition. Data partition (%1) Unknown system partition (%1) %1 system partition (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. The EFI system partition at %1 will be used for starting %2. EFI system partition: ResizeFSJob Resize Filesystem Job Invalid configuration The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. ResizeVolumeGroupDialog Resize Volume Group ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: System requirements पà¥à¤°à¤£à¤¾à¤²à¥€à¤šà¥€ आवशकà¥à¤¯à¤¤à¤¾ ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. This program will ask you some questions and set up %2 on your computer. ScanningDialog Scanning storage devices... Partitioning SetHostNameJob Set hostname %1 Set hostname <strong>%1</strong>. Setting hostname %1. Internal Error अंतरà¥à¤—त तà¥à¤°à¥‚टी  Cannot write hostname to target system SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Failed to write keyboard configuration for the virtual console. Failed to write to %1 Failed to write keyboard configuration for X11. Failed to write keyboard configuration to existing /etc/default directory. SetPartFlagsJob Set flags on partition %1. Set flags on %1MiB %2 partition. Set flags on new partition. Clear flags on partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag new partition as <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. SetPasswordJob Set password for user %1 Setting password for user %1. Bad destination system path. rootMountPoint is %1 Cannot disable root account. passwd terminated with error code %1. Cannot set password for user %1. usermod terminated with error code %1.  %1 या à¤à¤°à¤° कोडसहित usermod रदà¥à¤¦ केले. SetTimezoneJob Set timezone to %1/%2 %1/%2 हा वेळकà¥à¤·à¥‡à¤¤à¥à¤° निशà¥à¤šà¤¿à¤¤ करा Cannot access selected timezone path. निवडलेलà¥à¤¯à¤¾ वेळकà¥à¤·à¥‡à¤¤à¥à¤°à¤¾à¤šà¤¾ पाथ घेऊ शकत नाही. Bad path: %1 खराब पाथ : %1 Cannot set timezone. वेळकà¥à¤·à¥‡à¤¤à¥à¤° निशà¥à¤šà¤¿à¤¤ करॠशकत नाही Link creation failed, target: %1; link name: %2 दà¥à¤µà¤¾ निरà¥à¤®à¤¾à¤£ करताना अपयश, टारà¥à¤—ेट %1; दà¥à¤µà¤¾ नाव : %2 Cannot set timezone, वेळकà¥à¤·à¥‡à¤¤à¥à¤° निशà¥à¤šà¤¿à¤¤ करॠशकत नाही, Cannot open /etc/timezone for writing /etc/timezone लिहिणà¥à¤¯à¤¾à¤•रिता उघडू शकत नाही ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) SummaryPage This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. SummaryViewStep Summary सारांश TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingMachineNeonJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form सà¥à¤µà¤°à¥à¤ª Placeholder <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. TrackingViewStep Feedback UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> Your username is too long. तà¥à¤®à¤šà¤¾ वापरकरà¥à¤¤à¤¾à¤¨à¤¾à¤µ खूप लांब आहे Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Only letters, numbers, underscore and hyphen are allowed. Your hostname is too short. तà¥à¤®à¤šà¤¾ संगणकनाव खूप लहान आहे Your hostname is too long. तà¥à¤®à¤šà¤¾ संगणकनाव खूप लांब आहे Your passwords do not match! तà¥à¤®à¤šà¤¾ परवलीशबà¥à¤¦ जà¥à¤³à¤¤ नाही UsersViewStep Users वापरकरà¥à¤¤à¥‡ VariantModel Key Value VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB Total Size: Used Size: Total Sectors: Quantity of LVs: WelcomePage Form सà¥à¤µà¤°à¥à¤ª Select application and system language Open donations website &Donate Open help and support website Open issues and bug-tracking website Open release notes website &Release notes &पà¥à¤°à¤•ाशन टिपा &Known issues &जà¥à¤žà¤¾à¤¤ तà¥à¤°à¥à¤Ÿà¥€ &Support %1 पाठबळ &About &विषयी <h1>Welcome to the %1 installer.</h1> <h1>‌%1 अधिषà¥à¤ à¤¾à¤ªà¤•मधे सà¥à¤µà¤¾à¤—त आहे.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>‌%1 साठी असलेलà¥à¤¯à¤¾ अधिषà¥à¤ à¤¾à¤ªà¤•मधà¥à¤¯à¥‡ सà¥à¤µà¤¾à¤—त आहे.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Welcome to %1 setup.</h1> About %1 setup About %1 installer %1 अधिषà¥à¤ à¤¾à¤ªà¤• बदà¥à¤¦à¤² <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support %1 पाठबळ WelcomeQmlViewStep Welcome सà¥à¤µà¤¾à¤—त WelcomeViewStep Welcome सà¥à¤µà¤¾à¤—त notesqml <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> About Support Known issues Release notes Donate calamares-3.2.20/lang/calamares_nb.ts000066400000000000000000004641111362604102500174340ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. BootLoaderModel Master Boot Record of %1 Master Boot Record til %1 Boot Partition Bootpartisjon System Partition Systempartisjon Do not install a boot loader Ikke installer en oppstartslaster %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page Calamares::DebugWindow Form Form GlobalStorage Global Lagring JobQueue OppgaveKø Modules Moduler Type: none Interface: Grensesnitt: Tools Verktøy Reload Stylesheet Widget Tree Debug information Debug informasjon Calamares::ExecutionViewStep Set up Install Installer Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Ferdig Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Kjører kommando %1 %2 Calamares::PythonJob Running %1 operation. Bad working directory path Feil filsti til arbeidsmappe Working directory %1 for python job %2 is not readable. Arbeidsmappe %1 for python oppgave %2 er ikke lesbar. Bad main script file Ugyldig hovedskriptfil Main script file %1 for python job %2 is not readable. Hovedskriptfil %1 for python oppgave %2 er ikke lesbar. Boost.Python error in job "%1". Boost.Python feil i oppgave "%1". Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager &Back &Tilbake &Next &Neste &Cancel &Avbryt Cancel setup without changing the system. Cancel installation without changing the system. Setup Failed Would you like to paste the install log to the web? Install Log Paste URL The upload was unsuccessful. No web-paste was done. Calamares Initialization Failed %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. <br/>The following modules could not be loaded: Continue with installation? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Set up &Install Setup is complete. Close the setup program. Cancel setup? Cancel installation? Avbryte installasjon? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Vil du virkelig avbryte installasjonen? Installasjonsprogrammet vil avsluttes og alle endringer vil gÃ¥ tapt. &Yes &Ja &No &Nei &Close &Lukk Continue with setup? Fortsette Ã¥ sette opp? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> %1 vil nÃ¥ gjøre endringer pÃ¥ harddisken, for Ã¥ installere %2. <br/><strong>Du vil ikke kunne omgjøre disse endringene.</strong> &Install now &Installer nÃ¥ Go &back GÃ¥ &tilbake &Done &Ferdig The installation is complete. Close the installer. Installasjonen er fullført. Lukk installeringsprogrammet. Error Feil Installation Failed Installasjon feilet CalamaresPython::Helper Unknown exception type Ukjent unntakstype unparseable Python error Ikke-kjørbar Python feil unparseable Python traceback Ikke-kjørbar Python tilbakesporing Unfetchable Python error. Ukjent Python feil. CalamaresUtils Install log posted to: %1 CalamaresWindow %1 Setup Program %1 Installer %1 Installasjonsprogram Show debug information Vis feilrettingsinformasjon CheckerContainer Gathering system information... ChoicePage Form Form After: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Manuell partisjonering</strong><br/>Du kan opprette eller endre størrelse pÃ¥ partisjoner selv. Boot loader location: Select storage de&vice: Current: Reuse %1 as home partition for %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. <strong>Select a partition to install on</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. The EFI system partition at %1 will be used for starting %2. EFI system partition: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. No Swap Reuse Swap Swap (no Hibernate) Swap (with Hibernate) Swap to file <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. ClearMountsJob Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 ClearTempMountsJob Clear all temporary mounts. Clearing all temporary mounts. Cannot get list of temporary mounts. Klarte ikke Ã¥ fÃ¥ tak i listen over midlertidige monterte disker. Cleared all temporary mounts. CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Opprett en partisjon MiB Partition &Type: Partisjon &Type: &Primary &Primær E&xtended U&tvidet Fi&le System: LVM LV name Flags: &Mount Point: &Monteringspunkt: Si&ze: St&ørrelse: En&crypt Logical Logisk Primary Primær GPT GPT Mountpoint already in use. Please select another one. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. The installer failed to create partition on disk '%1'. CreatePartitionTableDialog Create Partition Table Opprett partisjonstabell Creating a new partition table will delete all existing data on the disk. What kind of partition table do you want to create? Master Boot Record (MBR) GUID Partition Table (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Creating new %1 partition table on %2. The installer failed to create a partition table on %1. CreateUserJob Create user %1 Opprett bruker %1 Create user <strong>%1</strong>. Creating user %1. Oppretter bruker %1. Sudoers dir is not writable. Cannot create sudoers file for writing. Cannot chmod sudoers file. Cannot open groups file for reading. CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. Delete partition <strong>%1</strong>. Deleting partition %1. The installer failed to delete partition %1. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. This device has a <strong>%1</strong> partition table. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - (%2) device[name] - (device-node[name]) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Failed to open %1 DummyCppJob Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Content: &Keep Format Warning: Formatting the partition will erase all existing data. &Mount Point: &Monteringspunkt: Si&ze: St&ørrelse: MiB Fi&le System: Flags: Mountpoint already in use. Please select another one. EncryptWidget Form Form En&crypt system Passphrase Confirm passphrase Please enter the same passphrase in both boxes. FillGlobalStorageJob Set partition information Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Install boot loader on <strong>%1</strong>. Setting up mount points. FinishedPage Form Form <Restart checkbox tooltip> &Restart now &Start pÃ¥ nytt nÃ¥ <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Innnstallasjonen mislyktes</h1><br/>%1 har ikke blitt installert pÃ¥ datamaskinen din.<br/>Feilmeldingen var: %2. FinishedViewStep Finish Setup Complete Installation Complete Installasjon fullført The setup of %1 is complete. The installation of %1 is complete. Installasjonen av %1 er fullført. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatting partition %1 with file system %2. Formaterer partisjon %1 med filsystem %2. The installer failed to format partition %1 on disk '%2'. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source er koblet til en strømkilde The system is not plugged in to a power source. Systemet er ikke koblet til en strømkilde. is connected to the Internet er tilkoblet Internett The system is not connected to the Internet. Systemet er ikke tilkoblet Internett. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Please install KDE Konsole and try again! Executing script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script KeyboardPage Set keyboard model to %1.<br/> Sett tastaturmodell til %1.<br/> Set keyboard layout to %1/%2. Sett tastaturoppsett til %1/%2. KeyboardViewStep Keyboard Tastatur LCLocaleDialog System locale setting The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. &Cancel &Avbryt &OK &OK LicensePage Form Form <h1>License Agreement</h1> I accept the terms and conditions above. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License Lisens LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 driver</strong><br/>fra %2 <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 grafikkdriver</strong><br/><font color="Grey">fra %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 nettlesertillegg</strong><br/><font color="Grey">fra %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">fra %2</font> File: %1 Show the license text Open license agreement in browser. Hide license text LocalePage The system language will be set to %1. The numbers and dates locale will be set to %1. Region: Zone: &Change... &Endre... Set timezone to %1/%2.<br/> LocaleViewStep Location Plassering LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Generer maskin-ID. Configuration Error No root mount point is set for MachineId. NetInstallPage Name Description Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Incorrect configuration) NetInstallViewStep Package selection Office software Office package Browser software Browser package Web browser Kernel Services Login Desktop Applications NotesQmlViewStep Notes OEMPage Ba&tch: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> OEMViewStep OEM Configuration Set the OEM Batch Identifier to <code>%1</code>. PWQ Password is too short Passordet er for kort Password is too long Passordet er for langt Password is too weak Passordet er for svakt Memory allocation error when setting '%1' Memory allocation error The password is the same as the old one Passordet er det samme som det gamle The password is a palindrome The password differs with case changes only The password is too similar to the old one Passordet likner for mye pÃ¥ det gamle The password contains the user name in some form The password contains words from the real name of the user in some form The password contains forbidden words in some form The password contains less than %1 digits The password contains too few digits The password contains less than %1 uppercase letters Passordet inneholder mindre enn %1 store bokstaver The password contains too few uppercase letters Passordet inneholder for fÃ¥ store bokstaver The password contains less than %1 lowercase letters Passordet inneholder mindre enn %1 smÃ¥ bokstaver The password contains too few lowercase letters Passordet inneholder for fÃ¥ smÃ¥ bokstaver The password contains less than %1 non-alphanumeric characters The password contains too few non-alphanumeric characters The password is shorter than %1 characters The password is too short Passordet er for kort The password is just rotated old one The password contains less than %1 character classes The password does not contain enough character classes The password contains more than %1 same characters consecutively The password contains too many same characters consecutively Passordet inneholder for mange like tegn etter hverandre The password contains more than %1 characters of the same class consecutively The password contains too many characters of the same class consecutively The password contains monotonic sequence longer than %1 characters The password contains too long of a monotonic character sequence No password supplied Cannot obtain random numbers from the RNG device Password generation failed - required entropy too low for settings The password fails the dictionary check - %1 The password fails the dictionary check Unknown setting - %1 Unknown setting Bad integer value of setting - %1 Bad integer value Setting %1 is not of integer type Setting is not of integer type Setting %1 is not of string type Setting is not of string type Innstillingen er ikke av type streng Opening the configuration file failed The configuration file is malformed Fatal failure Unknown error Ukjent feil Password is empty PackageChooserPage Form Form Product Name TextLabel Long Product Description Package Selection Please pick a product from the list. The selected product will be installed. PackageChooserViewStep Packages Page_Keyboard Form Form Keyboard Model: Tastaturmodell: Type here to test your keyboard Skriv her for Ã¥ teste tastaturet ditt Page_UserSetup Form Form What is your name? Hva heter du? What name do you want to use to log in? Hvilket navn vil du bruke for Ã¥ logge inn? Choose a password to keep your account safe. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> What is the name of this computer? Your Full Name login <small>This name will be used if you make the computer visible to others on a network.</small> Computer Name Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Use the same password for the administrator account. Choose a password for the administrator account. <small>Enter the same password twice, so that it can be checked for typing errors.</small> PartitionLabelsView Root Home Boot EFI system Swap New partition for %1 New partition %1 %2 size[number] filesystem[name] PartitionModel Free Space New partition Name File System Mount Point Size PartitionPage Form Form Storage de&vice: &Revert All Changes New Partition &Table Cre&ate &Edit &Delete New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group I&nstall boot loader on: Are you sure you want to create a new partition table on %1? Can not create new partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. PartitionViewStep Gathering system information... Partitions Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <strong>Replace</strong> a partition with %1. <strong>Manual</strong> partitioning. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Current: After: No EFI system partition configured An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. EFI system partition flag not set An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form Form Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: External command crashed. Command <i>%1</i> crashed. External command failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Bad parameters for process job call. Ugyldige parametere for prosessens oppgavekall External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Command <i>%1</i> finished with exit code %2. QObject Default Keyboard Model Standard tastaturmodell Default Standard unknown extended unformatted swap Unpartitioned space or unknown partition table (no mount point) Requirements checking for module <i>%1</i> is complete. %1 (%2) language[name] (country[name]) %1 (%2) No product No description provided. File not found Path <pre>%1</pre> must be an absolute path. Could not create new random file <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form Form Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. The selected item does not appear to be a valid partition. %1 cannot be installed on empty space. Please select an existing partition. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 cannot be installed on this partition. %1 kan ikke bli installert pÃ¥ denne partisjonen. Data partition (%1) Unknown system partition (%1) %1 system partition (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. The EFI system partition at %1 will be used for starting %2. EFI system partition: ResizeFSJob Resize Filesystem Job Invalid configuration The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. ResizeVolumeGroupDialog Resize Volume Group ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: System requirements Systemkrav ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> Denne datamaskinen oppfyller ikke minimumskravene for installering %1.<br/> Installeringen kan ikke fortsette. <a href="#details">Detaljer..</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. This program will ask you some questions and set up %2 on your computer. ScanningDialog Scanning storage devices... Partitioning SetHostNameJob Set hostname %1 Set hostname <strong>%1</strong>. Setting hostname %1. Internal Error Intern feil Cannot write hostname to target system SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Failed to write keyboard configuration for the virtual console. Failed to write to %1 Failed to write keyboard configuration for X11. Failed to write keyboard configuration to existing /etc/default directory. SetPartFlagsJob Set flags on partition %1. Set flags on %1MiB %2 partition. Set flags on new partition. Clear flags on partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag new partition as <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. SetPasswordJob Set password for user %1 Setting password for user %1. Bad destination system path. rootMountPoint is %1 Cannot disable root account. passwd terminated with error code %1. Cannot set password for user %1. usermod terminated with error code %1. SetTimezoneJob Set timezone to %1/%2 Cannot access selected timezone path. Bad path: %1 Cannot set timezone. Link creation failed, target: %1; link name: %2 Cannot set timezone, Cannot open /etc/timezone for writing Klarte ikke Ã¥pne /etc/timezone for skriving ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) SummaryPage This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. SummaryViewStep Summary Oppsummering TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingMachineNeonJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form Form Placeholder <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. TrackingViewStep Feedback UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> Your username is too long. Brukernavnet ditt er for langt. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Only letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Your hostname is too long. Your passwords do not match! UsersViewStep Users Brukere VariantModel Key Value VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB Total Size: Used Size: Total Sectors: Quantity of LVs: WelcomePage Form Form Select application and system language Open donations website &Donate Open help and support website Open issues and bug-tracking website Open release notes website &Release notes &Known issues &Support &About &Om <h1>Welcome to the %1 installer.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Welcome to %1 setup.</h1> About %1 setup About %1 installer <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support WelcomeQmlViewStep Welcome Velkommen WelcomeViewStep Welcome Velkommen notesqml <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> About Support Known issues Release notes Donate calamares-3.2.20/lang/calamares_ne_NP.ts000066400000000000000000004572671362604102500200520ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. यो सिसà¥à¤Ÿà¤®à¤•ो <strong>बूट वातावरण</strong>।<br><br>पà¥à¤°à¤¾à¤¨à¤¾ x86 सिसà¥à¤Ÿà¤®à¤¹à¤°à¥à¤²à¥‡ मातà¥à¤° <strong>BIOS</strong> को समरà¥à¤¥à¤¨ गरà¥à¤›à¤¨à¥à¥¤<br> This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. BootLoaderModel Master Boot Record of %1 Boot Partition System Partition Do not install a boot loader %1 (%2) Calamares::BlankViewStep Blank Page Calamares::DebugWindow Form GlobalStorage JobQueue Modules Type: none Interface: Tools Reload Stylesheet Widget Tree Debug information Calamares::ExecutionViewStep Set up Install Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Calamares::PythonJob Running %1 operation. Bad working directory path Working directory %1 for python job %2 is not readable. Bad main script file Main script file %1 for python job %2 is not readable. Boost.Python error in job "%1". Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager &Back &Next &Cancel Cancel setup without changing the system. Cancel installation without changing the system. Setup Failed Would you like to paste the install log to the web? Install Log Paste URL The upload was unsuccessful. No web-paste was done. Calamares Initialization Failed %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. <br/>The following modules could not be loaded: Continue with installation? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Set up &Install Setup is complete. Close the setup program. Cancel setup? Cancel installation? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. &Yes &No &Close Continue with setup? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> &Install now Go &back &Done The installation is complete. Close the installer. Error Installation Failed CalamaresPython::Helper Unknown exception type unparseable Python error unparseable Python traceback Unfetchable Python error. CalamaresUtils Install log posted to: %1 CalamaresWindow %1 Setup Program %1 Installer Show debug information CheckerContainer Gathering system information... ChoicePage Form After: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Boot loader location: Select storage de&vice: Current: Reuse %1 as home partition for %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. <strong>Select a partition to install on</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. The EFI system partition at %1 will be used for starting %2. EFI system partition: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. No Swap Reuse Swap Swap (no Hibernate) Swap (with Hibernate) Swap to file <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. ClearMountsJob Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 ClearTempMountsJob Clear all temporary mounts. Clearing all temporary mounts. Cannot get list of temporary mounts. Cleared all temporary mounts. CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition MiB Partition &Type: &Primary E&xtended Fi&le System: LVM LV name Flags: &Mount Point: Si&ze: En&crypt Logical Primary GPT Mountpoint already in use. Please select another one. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. The installer failed to create partition on disk '%1'. CreatePartitionTableDialog Create Partition Table Creating a new partition table will delete all existing data on the disk. What kind of partition table do you want to create? Master Boot Record (MBR) GUID Partition Table (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Creating new %1 partition table on %2. The installer failed to create a partition table on %1. CreateUserJob Create user %1 Create user <strong>%1</strong>. Creating user %1. Sudoers dir is not writable. Cannot create sudoers file for writing. Cannot chmod sudoers file. Cannot open groups file for reading. CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. Delete partition <strong>%1</strong>. Deleting partition %1. The installer failed to delete partition %1. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. This device has a <strong>%1</strong> partition table. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - (%2) device[name] - (device-node[name]) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Failed to open %1 DummyCppJob Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Content: &Keep Format Warning: Formatting the partition will erase all existing data. &Mount Point: Si&ze: MiB Fi&le System: Flags: Mountpoint already in use. Please select another one. EncryptWidget Form En&crypt system Passphrase Confirm passphrase Please enter the same passphrase in both boxes. FillGlobalStorageJob Set partition information Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Install boot loader on <strong>%1</strong>. Setting up mount points. FinishedPage Form <Restart checkbox tooltip> &Restart now <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. FinishedViewStep Finish Setup Complete Installation Complete The setup of %1 is complete. The installation of %1 is complete. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatting partition %1 with file system %2. The installer failed to format partition %1 on disk '%2'. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source The system is not plugged in to a power source. is connected to the Internet The system is not connected to the Internet. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Please install KDE Konsole and try again! Executing script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script KeyboardPage Set keyboard model to %1.<br/> Set keyboard layout to %1/%2. KeyboardViewStep Keyboard LCLocaleDialog System locale setting The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. &Cancel &OK LicensePage Form <h1>License Agreement</h1> I accept the terms and conditions above. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> File: %1 Show the license text Open license agreement in browser. Hide license text LocalePage The system language will be set to %1. The numbers and dates locale will be set to %1. Region: Zone: &Change... Set timezone to %1/%2.<br/> LocaleViewStep Location LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Configuration Error No root mount point is set for MachineId. NetInstallPage Name Description Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Incorrect configuration) NetInstallViewStep Package selection Office software Office package Browser software Browser package Web browser Kernel Services Login Desktop Applications NotesQmlViewStep Notes OEMPage Ba&tch: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> OEMViewStep OEM Configuration Set the OEM Batch Identifier to <code>%1</code>. PWQ Password is too short Password is too long Password is too weak Memory allocation error when setting '%1' Memory allocation error The password is the same as the old one The password is a palindrome The password differs with case changes only The password is too similar to the old one The password contains the user name in some form The password contains words from the real name of the user in some form The password contains forbidden words in some form The password contains less than %1 digits The password contains too few digits The password contains less than %1 uppercase letters The password contains too few uppercase letters The password contains less than %1 lowercase letters The password contains too few lowercase letters The password contains less than %1 non-alphanumeric characters The password contains too few non-alphanumeric characters The password is shorter than %1 characters The password is too short The password is just rotated old one The password contains less than %1 character classes The password does not contain enough character classes The password contains more than %1 same characters consecutively The password contains too many same characters consecutively The password contains more than %1 characters of the same class consecutively The password contains too many characters of the same class consecutively The password contains monotonic sequence longer than %1 characters The password contains too long of a monotonic character sequence No password supplied Cannot obtain random numbers from the RNG device Password generation failed - required entropy too low for settings The password fails the dictionary check - %1 The password fails the dictionary check Unknown setting - %1 Unknown setting Bad integer value of setting - %1 Bad integer value Setting %1 is not of integer type Setting is not of integer type Setting %1 is not of string type Setting is not of string type Opening the configuration file failed The configuration file is malformed Fatal failure Unknown error Password is empty PackageChooserPage Form Product Name TextLabel Long Product Description Package Selection Please pick a product from the list. The selected product will be installed. PackageChooserViewStep Packages Page_Keyboard Form Keyboard Model: Type here to test your keyboard Page_UserSetup Form What is your name? What name do you want to use to log in? Choose a password to keep your account safe. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> What is the name of this computer? Your Full Name login <small>This name will be used if you make the computer visible to others on a network.</small> Computer Name Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Use the same password for the administrator account. Choose a password for the administrator account. <small>Enter the same password twice, so that it can be checked for typing errors.</small> PartitionLabelsView Root Home Boot EFI system Swap New partition for %1 New partition %1 %2 size[number] filesystem[name] PartitionModel Free Space New partition Name File System Mount Point Size PartitionPage Form Storage de&vice: &Revert All Changes New Partition &Table Cre&ate &Edit &Delete New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group I&nstall boot loader on: Are you sure you want to create a new partition table on %1? Can not create new partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. PartitionViewStep Gathering system information... Partitions Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <strong>Replace</strong> a partition with %1. <strong>Manual</strong> partitioning. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Current: After: No EFI system partition configured An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. EFI system partition flag not set An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: External command crashed. Command <i>%1</i> crashed. External command failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Bad parameters for process job call. External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Command <i>%1</i> finished with exit code %2. QObject Default Keyboard Model Default unknown extended unformatted swap Unpartitioned space or unknown partition table (no mount point) Requirements checking for module <i>%1</i> is complete. %1 (%2) language[name] (country[name]) No product No description provided. File not found Path <pre>%1</pre> must be an absolute path. Could not create new random file <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. The selected item does not appear to be a valid partition. %1 cannot be installed on empty space. Please select an existing partition. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 cannot be installed on this partition. Data partition (%1) Unknown system partition (%1) %1 system partition (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. The EFI system partition at %1 will be used for starting %2. EFI system partition: ResizeFSJob Resize Filesystem Job Invalid configuration The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. ResizeVolumeGroupDialog Resize Volume Group ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: System requirements ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. This program will ask you some questions and set up %2 on your computer. ScanningDialog Scanning storage devices... Partitioning SetHostNameJob Set hostname %1 Set hostname <strong>%1</strong>. Setting hostname %1. Internal Error Cannot write hostname to target system SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Failed to write keyboard configuration for the virtual console. Failed to write to %1 Failed to write keyboard configuration for X11. Failed to write keyboard configuration to existing /etc/default directory. SetPartFlagsJob Set flags on partition %1. Set flags on %1MiB %2 partition. Set flags on new partition. Clear flags on partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag new partition as <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. SetPasswordJob Set password for user %1 Setting password for user %1. Bad destination system path. rootMountPoint is %1 Cannot disable root account. passwd terminated with error code %1. Cannot set password for user %1. usermod terminated with error code %1. SetTimezoneJob Set timezone to %1/%2 Cannot access selected timezone path. Bad path: %1 Cannot set timezone. Link creation failed, target: %1; link name: %2 Cannot set timezone, Cannot open /etc/timezone for writing ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) SummaryPage This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. SummaryViewStep Summary TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingMachineNeonJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form Placeholder <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. TrackingViewStep Feedback UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> Your username is too long. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Only letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Your hostname is too long. Your passwords do not match! UsersViewStep Users VariantModel Key Value VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB Total Size: Used Size: Total Sectors: Quantity of LVs: WelcomePage Form Select application and system language Open donations website &Donate Open help and support website Open issues and bug-tracking website Open release notes website &Release notes &Known issues &Support &About <h1>Welcome to the %1 installer.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Welcome to %1 setup.</h1> About %1 setup About %1 installer <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support WelcomeQmlViewStep Welcome WelcomeViewStep Welcome notesqml <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> About Support Known issues Release notes Donate calamares-3.2.20/lang/calamares_nl.ts000066400000000000000000005344731362604102500174570ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. De <strong>opstartomgeving</strong> van dit systeem.<br><br>Oudere x86-systemen ondersteunen enkel <strong>BIOS</strong>.<br>Moderne systemen gebruiken meestal <strong>EFI</strong>, maar kunnen ook als BIOS verschijnen als in compatibiliteitsmodus opgestart werd. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. Dit systeem werd opgestart met een <strong>EFI</strong>-opstartomgeving.<br><br>Om het opstarten vanaf een EFI-omgeving te configureren moet dit installatieprogramma een bootloader instellen, zoals <strong>GRUB</strong> of <strong>systemd-boot</strong> op een <strong>EFI-systeempartitie</strong>. Dit gebeurt automatisch, tenzij je voor manueel partitioneren kiest, waar je het moet aanvinken of het zelf aanmaken. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. Dit systeem werd opgestart met een <strong>BIOS</strong>-opstartomgeving.<br><br>Om het opstarten vanaf een BIOS-omgeving te configureren moet dit installatieprogramma een bootloader installeren, zoals <strong>GRUB</strong>, ofwel op het begin van een partitie ofwel op de <strong>Master Boot Record</strong> bij het begin van de partitietabel (bij voorkeur). Dit gebeurt automatisch, tenzij je voor manueel partitioneren kiest, waar je het zelf moet aanmaken. BootLoaderModel Master Boot Record of %1 Master Boot Record van %1 Boot Partition Bootpartitie System Partition Systeempartitie Do not install a boot loader Geen bootloader installeren %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page Lege pagina Calamares::DebugWindow Form Formulier GlobalStorage Globale Opslag JobQueue Wachtrij Modules Modules Type: Type: none geen Interface: Interface: Tools Hulpmiddelen Reload Stylesheet Widget Tree Debug information Debug informatie Calamares::ExecutionViewStep Set up Install Installeer Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Gereed Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Uitvoeren van opdracht %1 %2 Calamares::PythonJob Running %1 operation. Bewerking %1 uitvoeren. Bad working directory path Ongeldig pad voor huidige map Working directory %1 for python job %2 is not readable. Werkmap %1 voor python taak %2 onleesbaar. Bad main script file Onjuist hoofdscriptbestand Main script file %1 for python job %2 is not readable. Hoofdscriptbestand %1 voor python taak %2 onleesbaar. Boost.Python error in job "%1". Boost.Python fout in taak "%1". Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager &Back &Terug &Next &Volgende &Cancel &Afbreken Cancel setup without changing the system. Cancel installation without changing the system. Installatie afbreken zonder aanpassingen aan het systeem. Setup Failed Would you like to paste the install log to the web? Install Log Paste URL The upload was unsuccessful. No web-paste was done. Calamares Initialization Failed Calamares Initialisatie mislukt %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. %1 kan niet worden geïnstalleerd. Calamares kon niet alle geconfigureerde modules laden. Dit is een probleem met hoe Calamares wordt gebruikt door de distributie. <br/>The following modules could not be loaded: <br/>The volgende modules konden niet worden geladen: Continue with installation? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Set up &Install &Installeer Setup is complete. Close the setup program. Cancel setup? Cancel installation? Installatie afbreken? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Wil je het huidige installatieproces echt afbreken? Het installatieprogramma zal afsluiten en alle wijzigingen zullen verloren gaan. &Yes &ja &No &Nee &Close &Sluiten Continue with setup? Doorgaan met installatie? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> Het %1 installatieprogramma zal nu aanpassingen maken aan je schijf om %2 te installeren.<br/><strong>Deze veranderingen kunnen niet ongedaan gemaakt worden.</strong> &Install now Nu &installeren Go &back Ga &terug &Done Voltooi&d The installation is complete. Close the installer. De installatie is voltooid. Sluit het installatie-programma. Error Fout Installation Failed Installatie Mislukt CalamaresPython::Helper Unknown exception type Onbekend uitzonderingstype unparseable Python error onuitvoerbare Python fout unparseable Python traceback onuitvoerbare Python traceback Unfetchable Python error. Onbekende Python fout. CalamaresUtils Install log posted to: %1 CalamaresWindow %1 Setup Program %1 Installer %1 Installatieprogramma Show debug information Toon debug informatie CheckerContainer Gathering system information... Systeeminformatie verzamelen... ChoicePage Form Formulier After: Na: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Handmatig partitioneren</strong><br/>Je maakt of wijzigt zelf de partities. Boot loader location: Bootloader locatie: Select storage de&vice: Selecteer &opslagmedium: Current: Huidig: Reuse %1 as home partition for %2. Hergebruik %1 als home-partitie voor %2 <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Selecteer een partitie om te verkleinen, en sleep vervolgens de onderste balk om het formaat te wijzigen</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. <strong>Select a partition to install on</strong> <strong>Selecteer een partitie om op te installeren</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Er werd geen EFI systeempartitie gevonden op dit systeem. Gelieve terug te gaan en manueel te partitioneren om %1 in te stellen. The EFI system partition at %1 will be used for starting %2. De EFI systeempartitie op %1 zal gebruikt worden om %2 te starten. EFI system partition: EFI systeempartitie: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Dit opslagmedium lijkt geen besturingssysteem te bevatten. Wat wil je doen?<br/>Je zal jouw keuzes kunnen nazien en bevestigen voordat er iets aan het opslagmedium wordt veranderd. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Wis schijf</strong><br/>Dit zal alle huidige gegevens op de geselecteerd opslagmedium <font color="red">verwijderen</font>. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Dit opslagmedium bevat %1. Wat wil je doen?<br/>Je zal jouw keuzes kunnen nazien en bevestigen voordat er iets aan het opslagmedium wordt veranderd. No Swap Geen wisselgeheugen Reuse Swap Wisselgeheugen hergebruiken Swap (no Hibernate) Wisselgeheugen (geen Sluimerstand) Swap (with Hibernate) Wisselgeheugen ( met Sluimerstand) Swap to file Wisselgeheugen naar bestand <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Installeer ernaast</strong><br/>Het installatieprogramma zal een partitie verkleinen om plaats te maken voor %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Vervang een partitie</strong><br/>Vervangt een partitie met %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Dit opslagmedium bevat reeds een besturingssysteem. Wat wil je doen?<br/>Je zal jouw keuzes kunnen nazien en bevestigen voordat er iets aan het opslagmedium wordt veranderd. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Dit opslagmedium bevat meerdere besturingssystemen. Wat wil je doen?<br/>Je zal jouw keuzes kunnen nazien en bevestigen voordat er iets aan het opslagmedium wordt veranderd. ClearMountsJob Clear mounts for partitioning operations on %1 Geef aankoppelpunten vrij voor partitiebewerkingen op %1 Clearing mounts for partitioning operations on %1. Aankoppelpunten vrijgeven voor partitiebewerkingen op %1. Cleared all mounts for %1 Alle aankoppelpunten voor %1 zijn vrijgegeven ClearTempMountsJob Clear all temporary mounts. Geef alle tijdelijke aankoppelpunten vrij. Clearing all temporary mounts. Alle tijdelijke aankoppelpunten vrijgeven. Cannot get list of temporary mounts. Kan geen lijst van tijdelijke aankoppelpunten verkrijgen. Cleared all temporary mounts. Alle tijdelijke aankoppelpunten zijn vrijgegeven. CommandList Could not run command. Kon de opdracht niet uitvoeren. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. De opdracht loopt in de gastomgeving en moet het root pad weten, maar rootMountPoint is niet gedefinieerd. The command needs to know the user's name, but no username is defined. De opdracht moet de naam van de gebruiker weten, maar de gebruikersnaam is niet gedefinieerd. ContextualProcessJob Contextual Processes Job Contextuele processen Taak CreatePartitionDialog Create a Partition Maak partitie MiB MiB Partition &Type: Partitie&type: &Primary &Primair E&xtended &Uitgebreid Fi&le System: &Bestandssysteem LVM LV name LVM LV naam Flags: Vlaggen: &Mount Point: Aan&koppelpunt Si&ze: &Grootte: En&crypt &Versleutelen Logical Logisch Primary Primair GPT GPT Mountpoint already in use. Please select another one. Aankoppelpunt reeds in gebruik. Gelieve een andere te kiezen. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. Nieuwe %1 partitie aanmaken op %2. The installer failed to create partition on disk '%1'. Het installatieprogramma kon geen partitie aanmaken op schijf '%1'. CreatePartitionTableDialog Create Partition Table Maak Partitietabel Creating a new partition table will delete all existing data on the disk. Een nieuwe partitietabel aanmaken zal alle bestaande gegevens op de schijf wissen. What kind of partition table do you want to create? Welk type partitietabel wens je aan te maken? Master Boot Record (MBR) Master Boot Record (MBR) GUID Partition Table (GPT) GUID Partitietabel (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Maak een nieuwe %1 partitietabel aan op %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Maak een nieuwe <strong>%1</strong> partitietabel aan op <strong>%2</strong> (%3). Creating new %1 partition table on %2. Nieuwe %1 partitietabel aanmaken op %2. The installer failed to create a partition table on %1. Het installatieprogramma kon geen partitietabel aanmaken op %1. CreateUserJob Create user %1 Maak gebruiker %1 Create user <strong>%1</strong>. Maak gebruiker <strong>%1</strong> Creating user %1. Gebruiker %1 aanmaken. Sudoers dir is not writable. Sudoers map is niet schrijfbaar. Cannot create sudoers file for writing. Kan het bestand sudoers niet aanmaken. Cannot chmod sudoers file. chmod sudoers gefaald. Cannot open groups file for reading. Kan het bestand groups niet lezen. CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Maak nieuw volumegroep aan met de naam %1. Create new volume group named <strong>%1</strong>. Maak nieuwe volumegroep aan met de naam <strong>%1</strong>. Creating new volume group named %1. Aanmaken van volumegroep met de naam %1. The installer failed to create a volume group named '%1'. Het installatieprogramma kon de volumegroep met de naam '%1' niet aanmaken. DeactivateVolumeGroupJob Deactivate volume group named %1. Volumegroep met de naam %1 uitschakelen. Deactivate volume group named <strong>%1</strong>. Volumegroep met de naam <strong>%1</strong> uitschakelen. The installer failed to deactivate a volume group named %1. Het installatieprogramma kon de volumegroep met de naam %1 niet uitschakelen. DeletePartitionJob Delete partition %1. Verwijder partitie %1. Delete partition <strong>%1</strong>. Verwijder partitie <strong>%1</strong>. Deleting partition %1. Partitie %1 verwijderen. The installer failed to delete partition %1. Het installatieprogramma kon partitie %1 niet verwijderen. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. Het type van <strong>partitietabel</strong> op het geselecteerde opslagmedium.<br><br>Om het type partitietabel te wijzigen, dien je deze te verwijderen en opnieuw aan te maken, wat alle gegevens op het opslagmedium vernietigt.<br>Het installatieprogramma zal de huidige partitietabel behouden tenzij je expliciet anders verkiest.<br>Bij twijfel wordt aangeraden GPT te gebruiken op moderne systemen. This device has a <strong>%1</strong> partition table. Dit apparaat heeft een <strong>%1</strong> partitietabel. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. Dit is een <strong>loop</strong> apparaat.<br><br>Dit is een pseudo-apparaat zonder partitietabel en maakt een bestand beschikbaar als blokapparaat. Dergelijke configuratie bevat gewoonlijk slechts een enkel bestandssysteem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. Het installatieprogramma <strong>kon geen partitietabel vinden</strong> op het geselecteerde opslagmedium.<br><br>Dit apparaat heeft ofwel geen partitietabel, ofwel is deze ongeldig of van een onbekend type.<br>Het installatieprogramma kan een nieuwe partitietabel aanmaken, ofwel automatisch, ofwel via de manuele partitioneringspagina. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Dit is de aanbevolen partitietabel voor moderne systemen die starten vanaf een <strong>EFI</strong> opstartomgeving. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. <br><br>Dit type partitietabel is enkel aan te raden op oudere systemen die opstarten vanaf een <strong>BIOS</strong>-opstartomgeving. GPT is aan te raden in de meeste andere gevallen.<br><br><strong>Opgelet:</strong> De MBR-partitietabel is een verouderde standaard uit de tijd van MS-DOS.<br>Slechts 4 <em>primaire</em> partities kunnen aangemaakt worden, en van deze 4 kan één een <em>uitgebreide</em> partitie zijn, die op zijn beurt meerdere <em>logische</em> partities kan bevatten. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1 - (%2) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Schrijf LUKS configuratie voor Dracut op %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Schrijven van LUKS configuratie voor Dracut overgeslaan: "/" partitie is niet versleuteld Failed to open %1 Openen van %1 mislukt DummyCppJob Dummy C++ Job C++ schijnopdracht EditExistingPartitionDialog Edit Existing Partition Bestaande Partitie Aanpassen Content: Inhoud: &Keep &Behouden Format Formatteren Warning: Formatting the partition will erase all existing data. Opgelet: Een partitie formatteren zal alle bestaande gegevens wissen. &Mount Point: Aan&koppelpunt: Si&ze: &Grootte: MiB MiB Fi&le System: Bestands&systeem Flags: Vlaggen: Mountpoint already in use. Please select another one. Aankoppelpunt reeds in gebruik. Gelieve een andere te kiezen. EncryptWidget Form Formulier En&crypt system En&crypteer systeem Passphrase Wachtwoordzin Confirm passphrase Bevestig wachtwoordzin Please enter the same passphrase in both boxes. Gelieve in beide velden dezelfde wachtwoordzin in te vullen. FillGlobalStorageJob Set partition information Instellen partitie-informatie Install %1 on <strong>new</strong> %2 system partition. Installeer %1 op <strong>nieuwe</strong> %2 systeempartitie. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Maak <strong>nieuwe</strong> %2 partitie met aankoppelpunt <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Installeer %2 op %3 systeempartitie <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Stel %3 partitie <strong>%1</strong> in met aankoppelpunt <strong>%2</strong>. Install boot loader on <strong>%1</strong>. Installeer bootloader op <strong>%1</strong>. Setting up mount points. Aankoppelpunten instellen. FinishedPage Form Formulier <Restart checkbox tooltip> &Restart now &Nu herstarten <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>Klaar.</h1><br/>%1 is op je computer geïnstalleerd.<br/>Je mag je nieuwe systeem nu herstarten of de %2 Live omgeving blijven gebruiken. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Installatie Mislukt</h1><br/>%1 werd niet op de computer geïnstalleerd. <br/>De foutboodschap was: %2 FinishedViewStep Finish Beëindigen Setup Complete Installation Complete Installatie Afgerond. The setup of %1 is complete. The installation of %1 is complete. De installatie van %1 is afgerond. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatting partition %1 with file system %2. Partitie %1 formatteren met bestandssysteem %2. The installer failed to format partition %1 on disk '%2'. Installatieprogramma heeft gefaald om partitie %1 op schijf %2 te formateren. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source aangesloten is op netstroom The system is not plugged in to a power source. Dit systeem is niet aangesloten op netstroom. is connected to the Internet verbonden is met het Internet The system is not connected to the Internet. Dit systeem is niet verbonden met het Internet. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. Het installatieprogramma draait zonder administratorrechten. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. Het schem is te klein on het installatieprogramma te vertonen. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Konsole is niet geïnstalleerd Please install KDE Konsole and try again! Gelieve KDE Konsole te installeren en opnieuw te proberen! Executing script: &nbsp;<code>%1</code> Script uitvoeren: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script Script KeyboardPage Set keyboard model to %1.<br/> Instellen toetsenbord model naar %1.<br/> Set keyboard layout to %1/%2. Instellen toetsenbord lay-out naar %1/%2. KeyboardViewStep Keyboard Toetsenbord LCLocaleDialog System locale setting Landinstellingen The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. De landinstellingen bepalen de taal en het tekenset voor sommige opdrachtregelelementen.<br/>De huidige instelling is <strong>%1</strong>. &Cancel &Afbreken &OK &OK LicensePage Form Formulier <h1>License Agreement</h1> I accept the terms and conditions above. Ik aanvaard de bovenstaande algemene voorwaarden. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License Licentie LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 stuurprogramma</strong><br/>door %2 <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 grafisch stuurprogramma</strong><br/><font color="Grey">door %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">door %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">door %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 pakket</strong><br/><font color="Grey">door %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">door %2</font> File: %1 Show the license text Open license agreement in browser. Hide license text LocalePage The system language will be set to %1. De taal van het systeem zal worden ingesteld op %1. The numbers and dates locale will be set to %1. De getal- en datumnotatie worden ingesteld op %1. Region: Regio: Zone: Zone: &Change... &Aanpassen Set timezone to %1/%2.<br/> Instellen tijdzone naar %1/%2.<br/> LocaleViewStep Location Locatie LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Genereer machine-id Configuration Error No root mount point is set for MachineId. NetInstallPage Name Naam Description Beschrijving Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Netwerkinstallatie. (Uitgeschakeld: kon de pakketlijsten niet binnenhalen, controleer de netwerkconnectie) Network Installation. (Disabled: Received invalid groups data) Netwerkinstallatie. (Uitgeschakeld: ongeldige gegevens over groepen) Network Installation. (Disabled: Incorrect configuration) NetInstallViewStep Package selection Pakketkeuze Office software Office package Browser software Browser package Web browser Kernel Services Login Desktop Applications NotesQmlViewStep Notes OEMPage Ba&tch: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> OEMViewStep OEM Configuration Set the OEM Batch Identifier to <code>%1</code>. PWQ Password is too short Het wachtwoord is te kort Password is too long Het wachtwoord is te lang Password is too weak Wachtwoord is te zwak Memory allocation error when setting '%1' Foute geheugentoewijzing bij het instellen van %1. Memory allocation error Foute geheugentoewijzing The password is the same as the old one Het wachtwoord is hetzelfde als het oude wachtwoord The password is a palindrome Het wachtwoord is een palindroom The password differs with case changes only Het wachtwoord verschilt slechts in hoofdlettergebruik The password is too similar to the old one Het wachtwoord lijkt te veel op het oude wachtwoord The password contains the user name in some form Het wachtwoord bevat de gebruikersnaam op een of andere manier The password contains words from the real name of the user in some form Het wachtwoord bevat woorden van de echte naam van de gebruiker in één of andere vorm. The password contains forbidden words in some form Het wachtwoord bevat verboden woorden in één of andere vorm. The password contains less than %1 digits Het wachtwoord bevat minder dan %1 cijfers The password contains too few digits Het wachtwoord bevat te weinig cijfers The password contains less than %1 uppercase letters Het wachtwoord bevat minder dan %1 hoofdletters. The password contains too few uppercase letters Het wachtwoord bevat te weinig hoofdletters. The password contains less than %1 lowercase letters Het wachtwoord bevat minder dan %1 kleine letters. The password contains too few lowercase letters Het wachtwoord bevat te weinig kleine letters. The password contains less than %1 non-alphanumeric characters Het wachtwoord bevat minder dan %1 niet-alfanumerieke symbolen. The password contains too few non-alphanumeric characters Het wachtwoord bevat te weinig niet-alfanumerieke symbolen. The password is shorter than %1 characters Het wachtwoord is korter dan %1 karakters. The password is too short Het wachtwoord is te kort. The password is just rotated old one Het wachtwoord is enkel omgedraaid. The password contains less than %1 character classes Het wachtwoord bevat minder dan %1 karaktergroepen The password does not contain enough character classes Het wachtwoord bevat te weinig karaktergroepen The password contains more than %1 same characters consecutively Het wachtwoord bevat meer dan %1 dezelfde karakters na elkaar The password contains too many same characters consecutively Het wachtwoord bevat te veel dezelfde karakters na elkaar The password contains more than %1 characters of the same class consecutively Het wachtwoord bevat meer dan %1 karakters van dezelfde groep na elkaar The password contains too many characters of the same class consecutively Het wachtwoord bevat te veel karakters van dezelfde groep na elkaar The password contains monotonic sequence longer than %1 characters Het wachtwoord bevat een monotone sequentie van meer dan %1 karakters The password contains too long of a monotonic character sequence Het wachtwoord bevat een te lange monotone sequentie van karakters No password supplied Geen wachtwoord opgegeven Cannot obtain random numbers from the RNG device Kan geen willekeurige nummers verkrijgen van het RNG apparaat Password generation failed - required entropy too low for settings Wachtwoord aanmaken mislukt - te weinig wanorde voor de instellingen The password fails the dictionary check - %1 Het wachtwoord faalt op de woordenboektest - %1 The password fails the dictionary check Het wachtwoord faalt op de woordenboektest Unknown setting - %1 Onbekende instelling - %1 Unknown setting Onbekende instelling Bad integer value of setting - %1 Ongeldige gehele waarde voor instelling - %1 Bad integer value Ongeldige gehele waarde Setting %1 is not of integer type Instelling %1 is niet van het type integer Setting is not of integer type Instelling is niet van het type integer Setting %1 is not of string type Instelling %1 is niet van het type string Setting is not of string type Instelling is niet van het type string Opening the configuration file failed Openen van het configuratiebestand is mislukt The configuration file is malformed Het configuratiebestand is ongeldig Fatal failure Fatale fout Unknown error Onbekende fout Password is empty PackageChooserPage Form Formulier Product Name TextLabel TextLabel Long Product Description Package Selection Please pick a product from the list. The selected product will be installed. PackageChooserViewStep Packages Page_Keyboard Form Formulier Keyboard Model: Toetsenbord model: Type here to test your keyboard Typ hier om uw toetsenbord te testen Page_UserSetup Form Formulier What is your name? Wat is je naam? What name do you want to use to log in? Welke naam wil je gebruiken om in te loggen? Choose a password to keep your account safe. Kies een wachtwoord om uw account veilig te houden. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>Voer hetzelfde wachtwoord twee keer in, zodat het gecontroleerd kan worden op typefouten. Een goed wachtwoord bevat een combinatie van letters, cijfers en leestekens, is ten minste acht tekens lang en moet regelmatig worden gewijzigd.</ small> What is the name of this computer? Wat is de naam van deze computer? Your Full Name login <small>This name will be used if you make the computer visible to others on a network.</small> <small>Deze naam zal worden gebruikt als u de computer zichtbaar maakt voor anderen op een netwerk.</ small> Computer Name Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Automatisch aanmelden zonder wachtwoord te vragen. Use the same password for the administrator account. Gebruik hetzelfde wachtwoord voor het administratoraccount. Choose a password for the administrator account. Kies een wachtwoord voor het administrator account. <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Voer hetzelfde wachtwoord twee keer in, zodat het gecontroleerd kan worden op typefouten.</ small> PartitionLabelsView Root Root Home Home Boot Boot EFI system EFI systeem Swap Wisselgeheugen New partition for %1 Nieuwe partitie voor %1 New partition Nieuwe partitie %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space Vrije ruimte New partition Nieuwe partitie Name Naam File System Bestandssysteem Mount Point Aankoppelpunt Size Grootte PartitionPage Form Formulier Storage de&vice: &Opslagmedium: &Revert All Changes Alle wijzigingen &ongedaan maken New Partition &Table Nieuwe Partitie & Tabel Cre&ate &Aanmaken &Edit &Bewerken &Delete &Verwijderen New Volume Group Nieuwe volumegroep Resize Volume Group Volumegroep herschalen Deactivate Volume Group Volumegroep uitschakelen Remove Volume Group Volumegroep verwijderen I&nstall boot loader on: I&nstalleer bootloader op: Are you sure you want to create a new partition table on %1? Weet u zeker dat u een nieuwe partitie tabel wil maken op %1? Can not create new partition Kan de nieuwe partitie niet aanmaken The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. De partitietabel op %1 bevat al %2 primaire partities en er kunnen geen nieuwe worden aangemaakt. In plaats hiervan kan één primaire partitie verwijderen en een uitgebreide partitie toevoegen. PartitionViewStep Gathering system information... Systeeminformatie verzamelen... Partitions Partities Install %1 <strong>alongside</strong> another operating system. Installeer %1 <strong>naast</strong> een ander besturingssysteem. <strong>Erase</strong> disk and install %1. <strong>Wis</strong> schijf en installeer %1. <strong>Replace</strong> a partition with %1. <strong>Vervang</strong> een partitie met %1. <strong>Manual</strong> partitioning. <strong>Handmatig</strong> partitioneren. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Installeer %1 <strong>naast</strong> een ander besturingssysteem op schijf <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Wis</strong> schijf <strong>%2</strong> (%3) en installeer %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Vervang</strong> een partitie op schijf <strong>%2</strong> (%3) met %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>Handmatig</strong> partitioneren van schijf <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Schijf <strong>%1</strong> (%2) Current: Huidig: After: Na: No EFI system partition configured Geen EFI systeempartitie geconfigureerd An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. Een EFI systeempartitie is vereist om %1 te starten.<br/><br/>Om een EFI systeempartitie in te stellen, ga terug en selecteer of maak een FAT32 bestandssysteem met de <strong>esp</strong>-vlag aangevinkt en aankoppelpunt <strong>%2</strong>.<br/><br/>Je kan verdergaan zonder een EFI systeempartitie, maar mogelijk start je systeem dan niet op. EFI system partition flag not set EFI-systeem partitievlag niet ingesteld. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Een EFI systeempartitie is vereist om %1 op te starten.<br/><br/>Een partitie is ingesteld met aankoppelpunt <strong>%2</strong>, maar de de <strong>esp</strong>-vlag is niet aangevinkt.<br/>Om deze vlag aan te vinken, ga terug en pas de partitie aan.<br/><br/>Je kan verdergaan zonder deze vlag, maar mogelijk start je systeem dan niet op. Boot partition not encrypted Bootpartitie niet versleuteld A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. Een aparte bootpartitie was ingesteld samen met een versleutelde rootpartitie, maar de bootpartitie zelf is niet versleuteld.<br/><br/>Dit is niet volledig veilig, aangezien belangrijke systeembestanden bewaard worden op een niet-versleutelde partitie.<br/>Je kan doorgaan als je wil, maar het ontgrendelen van bestandssystemen zal tijdens het opstarten later plaatsvinden.<br/>Om de bootpartitie toch te versleutelen: keer terug en maak de bootpartitie opnieuw, waarbij je <strong>Versleutelen</strong> aanvinkt in het venster partitie aanmaken. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Plasma Look-and-Feel taak Could not select KDE Plasma Look-and-Feel package Kon geen KDE Plasma Look-and-Feel pakket selecteren PlasmaLnfPage Form Formulier Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Kies een Look-and Feel voor de KDE Plasma Desktop. Je kan deze stap ook overslaan en de Look-and-Feel instellen op het geïnstalleerde systeem. Bij het selecteren van een Look-and-Feel zal een live voorbeeld tonen van die Look-and-Feel. PlasmaLnfViewStep Look-and-Feel Look-and-Feel PreserveFiles Saving files for later ... Bestanden opslaan voor later... No files configured to save for later. Geen bestanden geconfigureerd om op te slaan voor later. Not all of the configured files could be preserved. Niet alle geconfigureerde bestanden konden worden bewaard. ProcessResult There was no output from the command. Er was geen uitvoer van de opdracht. Output: Uitvoer: External command crashed. Externe opdracht is vastgelopen. Command <i>%1</i> crashed. Opdracht <i>%1</i> is vastgelopen. External command failed to start. Externe opdracht kon niet worden gestart. Command <i>%1</i> failed to start. Opdracht <i>%1</i> kon niet worden gestart. Internal error when starting command. Interne fout bij het starten van de opdracht. Bad parameters for process job call. Onjuiste parameters voor procestaak External command failed to finish. Externe opdracht is niet correct beëindigd. Command <i>%1</i> failed to finish in %2 seconds. Opdracht <i>%1</i> is niet beëindigd in %2 seconden. External command finished with errors. Externe opdracht beëindigd met fouten. Command <i>%1</i> finished with exit code %2. Opdracht <i>%1</i> beëindigd met foutcode %2. QObject Default Keyboard Model Standaard Toetsenbord Model Default Standaard unknown onbekend extended uitgebreid unformatted niet-geformateerd swap wisselgeheugen Unpartitioned space or unknown partition table Niet-gepartitioneerde ruimte of onbekende partitietabel (no mount point) (geen aankoppelpunt) Requirements checking for module <i>%1</i> is complete. %1 (%2) language[name] (country[name]) %1 (%2) No product No description provided. File not found Path <pre>%1</pre> must be an absolute path. Could not create new random file <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Volumegroep met de naam %1 verwijderen. Remove Volume Group named <strong>%1</strong>. Volumegroep met de naam <strong>%1</strong> verwijderen. The installer failed to remove a volume group named '%1'. Het installatieprogramma kon de volumegroep met de naam '%1' niet verwijderen. ReplaceWidget Form Formulier Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Kies waar %1 te installeren. <br/><font color="red">Opgelet: </font>dit zal alle bestanden op de geselecteerde partitie wissen. The selected item does not appear to be a valid partition. Het geselecteerde item is geen geldige partitie. %1 cannot be installed on empty space. Please select an existing partition. %1 kan niet worden geïnstalleerd op lege ruimte. Kies een bestaande partitie. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 kan niet op een uitgebreide partitie geïnstalleerd worden. Kies een bestaande primaire of logische partitie. %1 cannot be installed on this partition. %1 kan niet op deze partitie geïnstalleerd worden. Data partition (%1) Gegevenspartitie (%1) Unknown system partition (%1) Onbekende systeempartitie (%1) %1 system partition (%2) %1 systeempartitie (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>Partitie %1 is te klein voor %2. Gelieve een partitie te selecteren met een capaciteit van minstens %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/>Er werd geen EFI systeempartite gevonden op dit systeem. Gelieve terug te keren en manueel te partitioneren om %1 in te stellen. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>%1 zal geïnstalleerd worden op %2.<br/><font color="red">Opgelet: </font>alle gegevens op partitie %2 zullen verloren gaan. The EFI system partition at %1 will be used for starting %2. De EFI systeempartitie op %1 zal gebruikt worden om %2 te starten. EFI system partition: EFI systeempartitie: ResizeFSJob Resize Filesystem Job Bestandssysteem herschalen Taak Invalid configuration Ongeldige configuratie The file-system resize job has an invalid configuration and will not run. De bestandssysteem herschalen-taak heeft een ongeldige configuratie en zal niet uitgevoerd worden. KPMCore not Available KPMCore niet beschikbaar Calamares cannot start KPMCore for the file-system resize job. Calamares kan KPMCore niet starten voor de bestandssysteem-herschaaltaak. Resize Failed Herschalen mislukt The filesystem %1 could not be found in this system, and cannot be resized. Het bestandssysteem %1 kon niet gevonden worden op dit systeem en kan niet herschaald worden. The device %1 could not be found in this system, and cannot be resized. Het apparaat %1 kon niet gevonden worden op dit systeem en kan niet herschaald worden. The filesystem %1 cannot be resized. Het bestandssysteem %1 kan niet worden herschaald. The device %1 cannot be resized. Het apparaat %1 kan niet worden herschaald. The filesystem %1 must be resized, but cannot. Het bestandssysteem %1 moet worden herschaald, maar kan niet. The device %1 must be resized, but cannot Het apparaat %1 moet worden herschaald, maar kan niet. ResizePartitionJob Resize partition %1. Pas de grootte van partitie %1 aan. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. Installatieprogramma is er niet in geslaagd om de grootte van partitie %1 op schrijf %2 aan te passen. ResizeVolumeGroupDialog Resize Volume Group Volumegroep herschalen ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Herschaal volumegroep met de naam %1 van %2 naar %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. Herschaal volumegroep met de naam <strong>%1</strong> van <strong>%2</strong> naar <strong>%3</strong>. The installer failed to resize a volume group named '%1'. Het installatieprogramma kon de volumegroep met naam '%1' niet herschalen. ResultsListDialog For best results, please ensure that this computer: Voor de beste resultaten is het aangeraden dat deze computer: System requirements Systeemvereisten ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> Deze computer voldoet niet aan de minimumvereisten om %1 te installeren.<br/>De installatie kan niet doorgaan. <a href="#details">Details...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. Deze computer voldoet niet aan enkele van de aanbevolen specificaties om %1 te installeren.<br/>De installatie kan doorgaan, maar sommige functies kunnen uitgeschakeld zijn. This program will ask you some questions and set up %2 on your computer. Dit programma stelt je enkele vragen en installeert %2 op jouw computer. ScanningDialog Scanning storage devices... Opslagmedia inlezen... Partitioning Partitionering SetHostNameJob Set hostname %1 Instellen hostnaam %1 Set hostname <strong>%1</strong>. Instellen hostnaam <strong>%1</strong> Setting hostname %1. Hostnaam %1 instellen. Internal Error Interne Fout Cannot write hostname to target system Kan de hostnaam niet naar doelsysteem schrijven SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Stel toetsenbordmodel in op %1 ,indeling op %2-%3 Failed to write keyboard configuration for the virtual console. Kon de toetsenbordconfiguratie voor de virtuele console niet opslaan. Failed to write to %1 Schrijven naar %1 mislukt Failed to write keyboard configuration for X11. Schrijven toetsenbord configuratie voor X11 mislukt. Failed to write keyboard configuration to existing /etc/default directory. Kon de toetsenbordconfiguratie niet wegschrijven naar de bestaande /etc/default map. SetPartFlagsJob Set flags on partition %1. Stel vlaggen in op partitie %1. Set flags on %1MiB %2 partition. Set flags on new partition. Stel vlaggen in op nieuwe partitie. Clear flags on partition <strong>%1</strong>. Wis vlaggen op partitie <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Wis vlaggen op nieuwe partitie. Flag partition <strong>%1</strong> as <strong>%2</strong>. Partitie <strong>%1</strong> als <strong>%2</strong> vlaggen. Flag new partition as <strong>%1</strong>. Vlag nieuwe partitie als <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Vlaggen op partitie <strong>%1</strong> wissen. Clearing flags on new partition. Vlaggen op nieuwe partitie wissen. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Vlaggen <strong>%2</strong> op partitie <strong>%1</strong> instellen. Setting flags <strong>%1</strong> on new partition. Vlaggen <strong>%1</strong> op nieuwe partitie instellen. The installer failed to set flags on partition %1. Het installatieprogramma kon geen vlaggen instellen op partitie %1. SetPasswordJob Set password for user %1 Instellen wachtwoord voor gebruiker %1 Setting password for user %1. Wachtwoord instellen voor gebruiker %1. Bad destination system path. Onjuiste bestemming systeempad. rootMountPoint is %1 rootMountPoint is %1 Cannot disable root account. Kan root account niet uitschakelen. passwd terminated with error code %1. passwd is afgesloten met foutcode %1. Cannot set password for user %1. Kan het wachtwoord niet instellen voor gebruiker %1 usermod terminated with error code %1. usermod beëindigd met foutcode %1. SetTimezoneJob Set timezone to %1/%2 Instellen tijdzone naar %1/%2 Cannot access selected timezone path. Kan geen toegang krijgen tot het geselecteerde tijdzone pad. Bad path: %1 Onjuist pad: %1 Cannot set timezone. Kan tijdzone niet instellen. Link creation failed, target: %1; link name: %2 Link maken mislukt, doel: %1; koppeling naam: %2 Cannot set timezone, Kan de tijdzone niet instellen, Cannot open /etc/timezone for writing Kan niet schrijven naar /etc/timezone ShellProcessJob Shell Processes Job Shell-processen Taak SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. Dit is een overzicht van wat zal gebeuren wanneer je de installatieprocedure start. SummaryViewStep Summary Samenvatting TrackingInstallJob Installation feedback Installatiefeedback Sending installation feedback. Installatiefeedback opsturen. Internal error in install-tracking. Interne fout in de installatie-tracking. HTTP request timed out. HTTP request is verlopen. TrackingMachineNeonJob Machine feedback Machinefeedback Configuring machine feedback. Instellen van machinefeedback. Error in machine feedback configuration. Fout in de configuratie van de machinefeedback. Could not configure machine feedback correctly, script error %1. Kon de machinefeedback niet correct instellen, scriptfout %1. Could not configure machine feedback correctly, Calamares error %1. Kon de machinefeedback niet correct instellen, Calamares-fout %1. TrackingPage Form Formulier Placeholder Plaatshouder <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>Door dit aan te vinken zal er <span style=" font-weight:600;">geen enkele informatie</span> over jouw installatie verstuurd worden.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Klik hier voor meer informatie over gebruikersfeedback</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. Installatie-tracking helpt %1 om te zien hoeveel gebruikers ze hebben, op welke hardware %1 geïnstalleerd wordt en (met de laatste twee opties hieronder) op de hoogte te blijven van de geprefereerde toepassingen. Om na te gaan wat verzonden zal worden, klik dan op het help-pictogram naast elke optie. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. Door dit aan te vinken zal er informatie verstuurd worden over jouw installatie en hardware. Deze informatie zal <b>slechts eenmaal verstuurd worden</b> na het afronden van de installatie. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. Door dit aan te vinken zal <b>periodiek</b> informatie verstuurd worden naar %1 over jouw installatie, hardware en toepassingen. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. Door dit aan te vinken zal <b>regelmatig</b> informatie verstuurd worden naar %1 over jouw installatie, hardware, toepassingen en gebruikspatronen. TrackingViewStep Feedback Feedback UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> Your username is too long. De gebruikersnaam is te lang. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Only letters, numbers, underscore and hyphen are allowed. Your hostname is too short. De hostnaam is te kort. Your hostname is too long. De hostnaam is te lang. Your passwords do not match! Je wachtwoorden komen niet overeen! UsersViewStep Users Gebruikers VariantModel Key Value Waarde VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Lijst met fysieke volumes Volume Group Name: Volumegroep naam: Volume Group Type: Volumegroep type: Physical Extent Size: Fysieke reikwijdte grootte: MiB MiB Total Size: Totale grootte: Used Size: Gebruikte grootte: Total Sectors: Totaal aantal sectoren: Quantity of LVs: Aantal LV's: WelcomePage Form Formulier Select application and system language Open donations website &Donate Open help and support website Open issues and bug-tracking website Open release notes website &Release notes Aantekeningen bij deze ve&rsie &Known issues Be&kende problemen &Support Onder&steuning &About &Over <h1>Welcome to the %1 installer.</h1> <h1>Welkom in het %1 installatieprogramma.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Welkom in het Calamares installatieprogramma voor %1.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Welcome to %1 setup.</h1> About %1 setup About %1 installer Over het %1 installatieprogramma <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support %1 ondersteuning WelcomeQmlViewStep Welcome Welkom WelcomeViewStep Welcome Welkom notesqml <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> About Support Known issues Release notes Donate calamares-3.2.20/lang/calamares_pl.ts000066400000000000000000005371531362604102500174570ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. <strong>Åšrodowisko uruchomieniowe</strong> systemu.<br><br>Starsze systemy x86 obsÅ‚ugujÄ… tylko <strong>BIOS</strong>.<br>Nowoczesne systemy zwykle używajÄ… <strong>EFI</strong>, lecz możliwe jest również ukazanie siÄ™ BIOS, jeÅ›li dziaÅ‚a w trybie kompatybilnym. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. Ten system zostaÅ‚ uruchomiony w Å›rodowisku rozruchowym <strong>EFI</strong>.<br><br>Aby skonfigurować uruchomienie ze Å›rodowiska EFI, instalator musi wdrożyć aplikacjÄ™ programu rozruchowego, takiego jak <strong>GRUB</strong> lub <strong>systemd-boot</strong> na <strong>Partycji Systemu EFI</strong>. Jest to automatyczne, chyba że wybierasz rÄ™czne partycjonowanie, a w takim przypadku musisz wybrać jÄ… lub utworzyć osobiÅ›cie. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. Ten system zostaÅ‚ uruchomiony w Å›rodowisku rozruchowym <strong>BIOS</strong>.<br><br>Aby skonfigurować uruchomienie ze Å›rodowiska BIOS, instalator musi zainstalować program rozruchowy, taki jak <strong>GRUB</strong> na poczÄ…tku partycji lub w <strong>Głównym Sektorze Rozruchowym</strong> blisko poczÄ…tku tablicy partycji (preferowane). Jest to automatyczne, chyba że wybierasz rÄ™czne partycjonowanie, a w takim przypadku musisz ustawić jÄ… osobiÅ›cie. BootLoaderModel Master Boot Record of %1 Master Boot Record %1 Boot Partition Partycja rozruchowa System Partition Partycja systemowa Do not install a boot loader Nie instaluj programu rozruchowego %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page Pusta strona Calamares::DebugWindow Form Formularz GlobalStorage Ogólne przechowywanie JobQueue OczekujÄ…ce zadania Modules ModuÅ‚y Type: Rodzaj: none brak Interface: Interfejs: Tools NarzÄ™dzia Reload Stylesheet Widget Tree Debug information Informacje debugowania Calamares::ExecutionViewStep Set up Install Zainstaluj Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done UkoÅ„czono Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Wykonywanie polecenia %1 %2 Calamares::PythonJob Running %1 operation. WykonujÄ™ operacjÄ™ %1. Bad working directory path Niepoprawna Å›cieżka katalogu roboczego Working directory %1 for python job %2 is not readable. Katalog roboczy %1 dla zadaÅ„ pythona %2 jest nieosiÄ…galny. Bad main script file Niepoprawny główny plik skryptu Main script file %1 for python job %2 is not readable. Główny plik skryptu %1 dla zadaÅ„ pythona %2 jest nieczytelny. Boost.Python error in job "%1". WystÄ…piÅ‚ błąd Boost.Python w zadaniu "%1". Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Waiting for %n module(s). Oczekiwanie na %n moduÅ‚. Oczekiwanie na %n moduÅ‚y. Oczekiwanie na %n modułów. Oczekiwanie na %n moduÅ‚(y). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager &Back &Wstecz &Next &Dalej &Cancel &Anuluj Cancel setup without changing the system. Cancel installation without changing the system. Anuluj instalacjÄ™ bez dokonywania zmian w systemie. Setup Failed Would you like to paste the install log to the web? Install Log Paste URL The upload was unsuccessful. No web-paste was done. Calamares Initialization Failed Błąd inicjacji programu Calamares %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. %1 nie może zostać zainstalowany. Calamares nie mógÅ‚ wczytać wszystkich skonfigurowanych modułów. Jest to problem ze sposobem, w jaki Calamares jest używany przez dystrybucjÄ™. <br/>The following modules could not be loaded: <br/>NastÄ™pujÄ…ce moduÅ‚y nie mogÅ‚y zostać wczytane: Continue with installation? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Set up &Install Za&instaluj Setup is complete. Close the setup program. Cancel setup? Anulować ustawianie? Cancel installation? Anulować instalacjÄ™? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Czy na pewno chcesz anulować obecny proces instalacji? Instalator zostanie zamkniÄ™ty i wszystkie zmiany zostanÄ… utracone. &Yes &Tak &No &Nie &Close Zam&knij Continue with setup? Kontynuować z programem instalacyjnym? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> Instalator %1 zamierza przeprowadzić zmiany na Twoim dysku, aby zainstalować %2.<br/><strong>Nie bÄ™dziesz mógÅ‚ cofnąć tych zmian.</strong> &Install now &Zainstaluj teraz Go &back &Cofnij siÄ™ &Done &UkoÅ„czono The installation is complete. Close the installer. Instalacja ukoÅ„czona pomyÅ›lnie. Możesz zamknąć instalator. Error Błąd Installation Failed WystÄ…piÅ‚ błąd instalacji CalamaresPython::Helper Unknown exception type Nieznany rodzaj wyjÄ…tku unparseable Python error nieparowalny błąd Pythona unparseable Python traceback nieparowalny traceback Pythona Unfetchable Python error. NieosiÄ…galny błąd Pythona. CalamaresUtils Install log posted to: %1 CalamaresWindow %1 Setup Program %1 Installer Instalator %1 Show debug information Pokaż informacje debugowania CheckerContainer Gathering system information... Zbieranie informacji o systemie... ChoicePage Form Formularz After: Po: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>RÄ™czne partycjonowanie</strong><br/>Możesz samodzielnie utworzyć lub zmienić rozmiar istniejÄ…cych partycji. Boot loader location: PoÅ‚ożenie programu rozruchowego: Select storage de&vice: &Wybierz urzÄ…dzenie przechowywania: Current: Bieżący: Reuse %1 as home partition for %2. Użyj ponownie %1 jako partycji domowej dla %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Wybierz partycjÄ™ do zmniejszenia, a nastÄ™pnie przeciÄ…gnij dolny pasek, aby zmienić jej rozmiar</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. <strong>Select a partition to install on</strong> <strong>Wybierz partycjÄ™, na której przeprowadzona bÄ™dzie instalacja</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Nigdzie w tym systemie nie można odnaleźć partycji systemowej EFI. Prosimy siÄ™ cofnąć i użyć rÄ™cznego partycjonowania dysku do ustawienia %1. The EFI system partition at %1 will be used for starting %2. Partycja systemowa EFI na %1 bÄ™dzie użyta do uruchamiania %2. EFI system partition: Partycja systemowa EFI: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. To urzÄ…dzenie pamiÄ™ci masowej prawdopodobnie nie posiada żadnego systemu operacyjnego. Co chcesz zrobić?<br/>BÄ™dziesz miaÅ‚ możliwość przejrzenia oraz zatwierdzenia swoich ustawieÅ„ przed wykonaniem jakichkolwiek zmian na tym urzÄ…dzeniu. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Wyczyść dysk</strong><br/>Ta operacja <font color="red">usunie</font> wszystkie dane obecnie znajdujÄ…ce siÄ™ na wybranym urzÄ…dzeniu przechowywania. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. To urzÄ…dzenie pamiÄ™ci masowej posiada %1. Co chcesz zrobić?<br/>BÄ™dziesz miaÅ‚ możliwość przejrzenia oraz zatwierdzenia swoich ustawieÅ„ przed wykonaniem jakichkolwiek zmian na tym urzÄ…dzeniu. No Swap Brak przestrzeni wymiany Reuse Swap Użyj ponownie przestrzeni wymiany Swap (no Hibernate) PrzestrzeÅ„ wymiany (bez hibernacji) Swap (with Hibernate) PrzestrzeÅ„ wymiany (z hibernacjÄ…) Swap to file PrzestrzeÅ„ wymiany do pliku <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Zainstaluj obok siebie</strong><br/>Instalator zmniejszy partycjÄ™, aby zrobić miejsce dla %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>ZastÄ…p partycjÄ™</strong><br/>ZastÄ™powanie partycji poprzez %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. To urzÄ…dzenie pamiÄ™ci masowej posiada już system operacyjny. Co chcesz zrobić?<br/>BÄ™dziesz miaÅ‚ możliwość przejrzenia oraz zatwierdzenia swoich ustawieÅ„ przed wykonaniem jakichkolwiek zmian na tym urzÄ…dzeniu. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. To urzÄ…dzenie pamiÄ™ci masowej posiada kilka systemów operacyjnych. Co chcesz zrobić?<br/>BÄ™dziesz miaÅ‚ możliwość przejrzenia oraz zatwierdzenia swoich ustawieÅ„ przed wykonaniem jakichkolwiek zmian na tym urzÄ…dzeniu. ClearMountsJob Clear mounts for partitioning operations on %1 Wyczyść zamontowania dla operacji partycjonowania na %1 Clearing mounts for partitioning operations on %1. Czyszczenie montowaÅ„ dla operacji partycjonowania na %1. Cleared all mounts for %1 Wyczyszczono wszystkie zamontowania dla %1 ClearTempMountsJob Clear all temporary mounts. Wyczyść wszystkie tymczasowe montowania. Clearing all temporary mounts. Usuwanie wszystkich tymczasowych punktów montowania. Cannot get list of temporary mounts. Nie można uzyskać listy tymczasowych montowaÅ„. Cleared all temporary mounts. Wyczyszczono wszystkie tymczasowe montowania. CommandList Could not run command. Nie można wykonać polecenia. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. Polecenie uruchomione jest w Å›rodowisku hosta i musi znać Å›cieżkÄ™ katalogu głównego, jednakże nie zostaÅ‚ okreÅ›lony punkt montowania katalogu głównego (root). The command needs to know the user's name, but no username is defined. Polecenie musi znać nazwÄ™ użytkownika, ale żadna nazwa nie zostaÅ‚a jeszcze zdefiniowana. ContextualProcessJob Contextual Processes Job DziaÅ‚ania procesów kontekstualnych CreatePartitionDialog Create a Partition Utwórz partycjÄ™ MiB MB Partition &Type: Rodzaj par&tycji: &Primary &Podstawowa E&xtended Ro&zszerzona Fi&le System: System p&lików: LVM LV name Nazwa LV LVM Flags: Flagi: &Mount Point: Punkt &montowania: Si&ze: Ro&zmiar: En&crypt Zaszy%fruj Logical Logiczna Primary Podstawowa GPT GPT Mountpoint already in use. Please select another one. Punkt montowania jest już używany. ProszÄ™ wybrać inny. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. Tworzenie nowej partycji %1 na %2. The installer failed to create partition on disk '%1'. Instalator nie mógÅ‚ utworzyć partycji na dysku '%1'. CreatePartitionTableDialog Create Partition Table Utwórz tablicÄ™ partycji Creating a new partition table will delete all existing data on the disk. Utworzenie nowej tablicy partycji usunie wszystkie istniejÄ…ce na dysku dane. What kind of partition table do you want to create? Jaki rodzaj tablicy partycji chcesz utworzyć? Master Boot Record (MBR) Master Boot Record (MBR) GUID Partition Table (GPT) Tablica partycji GUID (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Utwórz nowÄ… tablicÄ™ partycjÄ™ %1 na %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Utwórz nowÄ… tabelÄ™ partycji <strong>%1</strong> na <strong>%2</strong> (%3). Creating new %1 partition table on %2. Tworzenie nowej tablicy partycji %1 na %2. The installer failed to create a partition table on %1. Instalator nie mógÅ‚ utworzyć tablicy partycji na %1. CreateUserJob Create user %1 Utwórz użytkownika %1 Create user <strong>%1</strong>. Utwórz użytkownika <strong>%1</strong>. Creating user %1. Tworzenie użytkownika %1. Sudoers dir is not writable. Katalog sudoers nie ma prawa do zapisu. Cannot create sudoers file for writing. Nie można utworzyć pliku sudoers z możliwoÅ›ciÄ… zapisu. Cannot chmod sudoers file. Nie można wykonać chmod na pliku sudoers. Cannot open groups file for reading. Nie można otworzyć pliku groups do odczytu. CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Utwórz nowÄ… grupÄ™ woluminów o nazwie %1. Create new volume group named <strong>%1</strong>. Utwórz nowÄ… grupÄ™ woluminów o nazwie <strong>%1</strong>. Creating new volume group named %1. Tworzenie nowej grupy woluminów o nazwie %1. The installer failed to create a volume group named '%1'. Instalator nie mógÅ‚ utworzyć grupy woluminów o nazwie %1 DeactivateVolumeGroupJob Deactivate volume group named %1. Dezaktywuj grupÄ™ woluminów o nazwie %1 Deactivate volume group named <strong>%1</strong>. Dezaktywuj grupÄ™ woluminów o nazwie <strong>%1</strong> The installer failed to deactivate a volume group named %1. Instalator nie mógÅ‚ dezaktywować grupy woluminów o nazwie %1 DeletePartitionJob Delete partition %1. UsuÅ„ partycjÄ™ %1. Delete partition <strong>%1</strong>. UsuÅ„ partycjÄ™ <strong>%1</strong>. Deleting partition %1. Usuwanie partycji %1. The installer failed to delete partition %1. Instalator nie mógÅ‚ usunąć partycji %1. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. Typ <strong>tabeli partycji</strong> na zaznaczonym noÅ›niku danych.<br><br>JedynÄ… metodÄ… na zmianÄ™ tabeli partycji jest jej wyczyszczenie i utworzenie jej od nowa, co spowoduje utratÄ™ wszystkich danych.<br>Ten instalator zachowa obecnÄ… tabelÄ™ partycji, jeżeli nie wybierzesz innej opcji.<br>W wypadku niepewnoÅ›ci, w nowszych systemach zalecany jest GPT. This device has a <strong>%1</strong> partition table. To urzÄ…dzenie ma <strong>%1</strong> tablicÄ™ partycji. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. To jest urzÄ…dzenie <strong>pÄ™tli zwrotnej</strong>. To jest pseudo-urzÄ…dzenie, które nie posiada tabeli partycji, która czyni plik dostÄ™pny jako urzÄ…dzenie blokowe. Ten rodzaj instalacji zwykle zawiera tylko jeden system plików. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. Instalator <strong>nie mógÅ‚ znaleźć tabeli partycji</strong> na zaznaczonym noÅ›niku danych.<br><br>UrzÄ…dzenie nie posiada tabeli partycji bÄ…dź jest ona uszkodzona lub nieznanego rodzaju.<br>Instalator może utworzyć dla Ciebie nowÄ… tabelÄ™ partycji automatycznie, lub możesz uczynić to rÄ™cznie. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Zalecany rodzaj tabeli partycji dla nowoczesnych systemów uruchamianych przez <strong>EFI</strong>. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. <br><br>Ten rodzaj tabeli partycji jest zalecany tylko dla systemów uruchamianych ze Å›rodowiska uruchomieniowego <strong>BIOS</strong>. GPT jest zalecane w wiÄ™kszoÅ›ci innych wypadków.<br><br><strong>Ostrzeżenie:</strong> tabele partycji MBR sÄ… przestarzaÅ‚ym standardem z ery MS-DOS.<br>Możesz posiadać tylko 4 partycje <em>podstawowe</em>, z których jedna może być partycjÄ… <em>rozszerzonÄ…</em>, zawierajÄ…cÄ… wiele partycji <em>logicznych</em>. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1-(%2) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Zapisz konfiguracjÄ™ LUKS dla Dracut do %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted PominiÄ™to zapisywanie konfiguracji LUKS dla Dracut: partycja "/" nie jest szyfrowana Failed to open %1 Nie udaÅ‚o siÄ™ otworzyć %1 DummyCppJob Dummy C++ Job DziaÅ‚anie obiektu Dummy C++ EditExistingPartitionDialog Edit Existing Partition Edycja istniejÄ…cej partycji Content: Zawartość: &Keep &Zachowaj Format Sformatuj Warning: Formatting the partition will erase all existing data. Ostrzeżenie: Sformatowanie partycji wymaże wszystkie istniejÄ…ce na niej dane. &Mount Point: Punkt &montowania: Si&ze: Ro&zmiar: MiB MB Fi&le System: System p&lików: Flags: Flagi: Mountpoint already in use. Please select another one. Punkt montowania jest już używany. ProszÄ™ wybrać inny. EncryptWidget Form Formularz En&crypt system Zaszy&fruj system Passphrase HasÅ‚o Confirm passphrase Potwierdź hasÅ‚o Please enter the same passphrase in both boxes. Użyj tego samego hasÅ‚a w obu polach. FillGlobalStorageJob Set partition information Ustaw informacje partycji Install %1 on <strong>new</strong> %2 system partition. Zainstaluj %1 na <strong>nowej</strong> partycji systemowej %2. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Ustaw <strong>nowÄ…</strong> partycjÄ™ %2 z punktem montowania <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Zainstaluj %2 na partycji systemowej %3 <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Ustaw partycjÄ™ %3 <strong>%1</strong> z punktem montowania <strong>%2</strong>. Install boot loader on <strong>%1</strong>. Zainstaluj program rozruchowy na <strong>%1</strong>. Setting up mount points. Ustawianie punktów montowania. FinishedPage Form Form <Restart checkbox tooltip> &Restart now &Uruchom ponownie teraz <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>Wszystko gotowe.</h1><br/>%1 zostaÅ‚ zainstalowany na Twoim komputerze.<br/>Możesz teraz ponownie uruchomić komputer, aby przejść do nowego systemu, albo kontynuować używanie Å›rodowiska live %2. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Instalacja nie powiodÅ‚a siÄ™</h1><br/>Nie udaÅ‚o siÄ™ zainstalować %1 na Twoim komputerze.<br/>Komunikat o błędzie: %2. FinishedViewStep Finish Koniec Setup Complete Ustawianie ukoÅ„czone Installation Complete Instalacja zakoÅ„czona The setup of %1 is complete. Ustawianie %1 jest ukoÅ„czone. The installation of %1 is complete. Instalacja %1 ukoÅ„czyÅ‚a siÄ™ pomyÅ›lnie. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatting partition %1 with file system %2. Formatowanie partycji %1 z systemem plików %2. The installer failed to format partition %1 on disk '%2'. Instalator nie mógÅ‚ sformatować partycji %1 na dysku '%2'. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source jest podłączony do źródÅ‚a zasilania The system is not plugged in to a power source. System nie jest podłączony do źródÅ‚a zasilania. is connected to the Internet jest podłączony do Internetu The system is not connected to the Internet. System nie jest podłączony do Internetu. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. Instalator jest uruchomiony bez praw administratora. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. Zbyt niska rozdzielczość ekranu, aby wyÅ›wietlić instalator. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. Tworzenie initramfs z mkinitcpio. InitramfsJob Creating initramfs. Tworzenie initramfs. InteractiveTerminalPage Konsole not installed Konsole jest niezainstalowany Please install KDE Konsole and try again! Zainstaluj KDE Konsole i spróbuj ponownie! Executing script: &nbsp;<code>%1</code> Wykonywanie skryptu: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script Skrypt KeyboardPage Set keyboard model to %1.<br/> Ustaw model klawiatury na %1.<br/> Set keyboard layout to %1/%2. Ustaw model klawiatury na %1/%2. KeyboardViewStep Keyboard Klawiatura LCLocaleDialog System locale setting Systemowe ustawienia lokalne The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. Systemowe ustawienia lokalne wpÅ‚ywajÄ… na ustawienia jÄ™zyka i znaków w niektórych elementach wiersza poleceÅ„ interfejsu użytkownika.<br/>Bieżące ustawienie to <strong>%1</strong>. &Cancel &Anuluj &OK &OK LicensePage Form Formularz <h1>License Agreement</h1> I accept the terms and conditions above. AkceptujÄ™ powyższe warunki korzystania. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License Licencja LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>sterownik %1</strong><br/>autorstwa %2 <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>sterownik graficzny %1</strong><br/><font color="Grey">autorstwa %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>wtyczka do przeglÄ…darki %1</strong><br/><font color="Grey">autorstwa %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>kodek %1</strong><br/><font color="Grey">autorstwa %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>pakiet %1</strong><br/><font color="Grey">autorstwa %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">autorstwa %2</font> File: %1 Show the license text Pokaż tekst licencji Open license agreement in browser. Hide license text LocalePage The system language will be set to %1. JÄ™zyk systemu zostanie ustawiony na %1. The numbers and dates locale will be set to %1. Format liczb i daty zostanie ustawiony na %1. Region: Region: Zone: Strefa: &Change... &ZmieÅ„... Set timezone to %1/%2.<br/> Ustaw strefÄ™ czasowÄ… na %1/%2.<br/> LocaleViewStep Location PoÅ‚ożenie LuksBootKeyFileJob Configuring LUKS key file. Konfigurowanie pliku klucza LUKS. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Generuj machine-id. Configuration Error Błąd konfiguracji No root mount point is set for MachineId. NetInstallPage Name Nazwa Description Opis Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Instalacja sieciowa. (Wyłączona: Nie można pobrać listy pakietów, sprawdź swoje połączenie z sieciÄ…) Network Installation. (Disabled: Received invalid groups data) Instalacja sieciowa. (NiedostÄ™pna: Otrzymano nieprawidÅ‚owe dane grupowe) Network Installation. (Disabled: Incorrect configuration) NetInstallViewStep Package selection Wybór pakietów Office software Office package Browser software Browser package Web browser Kernel Services Login Desktop Applications NotesQmlViewStep Notes OEMPage Ba&tch: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> OEMViewStep OEM Configuration Konfiguracja OEM Set the OEM Batch Identifier to <code>%1</code>. PWQ Password is too short HasÅ‚o jest zbyt krótkie Password is too long HasÅ‚o jest zbyt dÅ‚ugie Password is too weak HasÅ‚o jest zbyt sÅ‚abe Memory allocation error when setting '%1' WystÄ…piÅ‚ błąd przydzielania pamiÄ™ci przy ustawieniu '%1' Memory allocation error Błąd przydzielania pamiÄ™ci The password is the same as the old one HasÅ‚o jest takie samo jak poprzednie The password is a palindrome HasÅ‚o jest palindromem The password differs with case changes only HasÅ‚a różniÄ… siÄ™ tylko wielkoÅ›ciÄ… znaków The password is too similar to the old one HasÅ‚o jest zbyt podobne do poprzedniego The password contains the user name in some form HasÅ‚o zawiera nazwÄ™ użytkownika The password contains words from the real name of the user in some form HasÅ‚o zawiera fragment peÅ‚nej nazwy użytkownika The password contains forbidden words in some form HasÅ‚o zawiera jeden z niedozwolonych wyrazów The password contains less than %1 digits HasÅ‚o skÅ‚ada siÄ™ z mniej niż %1 znaków The password contains too few digits HasÅ‚o zawiera zbyt maÅ‚o znaków The password contains less than %1 uppercase letters HasÅ‚o skÅ‚ada siÄ™ z mniej niż %1 wielkich liter The password contains too few uppercase letters HasÅ‚o zawiera zbyt maÅ‚o wielkich liter The password contains less than %1 lowercase letters HasÅ‚o skÅ‚ada siÄ™ z mniej niż %1 maÅ‚ych liter The password contains too few lowercase letters HasÅ‚o zawiera zbyt maÅ‚o maÅ‚ych liter The password contains less than %1 non-alphanumeric characters HasÅ‚o skÅ‚ada siÄ™ z mniej niż %1 znaków niealfanumerycznych The password contains too few non-alphanumeric characters HasÅ‚o zawiera zbyt maÅ‚o znaków niealfanumerycznych The password is shorter than %1 characters HasÅ‚o zawiera mniej niż %1 znaków The password is too short HasÅ‚o jest zbyt krótkie The password is just rotated old one HasÅ‚o jest odwróceniem poprzedniego The password contains less than %1 character classes HasÅ‚o skÅ‚ada siÄ™ z mniej niż %1 rodzajów znaków The password does not contain enough character classes HasÅ‚o zawiera zbyt maÅ‚o rodzajów znaków The password contains more than %1 same characters consecutively HasÅ‚o zawiera ponad %1 powtarzajÄ…cych siÄ™ tych samych znaków The password contains too many same characters consecutively HasÅ‚o zawiera zbyt wiele powtarzajÄ…cych siÄ™ znaków The password contains more than %1 characters of the same class consecutively HasÅ‚o zawiera wiÄ™cej niż %1 znaków tego samego rodzaju The password contains too many characters of the same class consecutively HasÅ‚o skÅ‚ada siÄ™ ze zbyt wielu znaków tego samego rodzaju The password contains monotonic sequence longer than %1 characters HasÅ‚o zawiera jednakowy ciÄ…g dÅ‚uższy niż %1 znaków The password contains too long of a monotonic character sequence HasÅ‚o zawiera zbyt dÅ‚ugi ciÄ…g jednakowych znaków No password supplied Nie podano hasÅ‚a Cannot obtain random numbers from the RNG device Nie można uzyskać losowych znaków z urzÄ…dzenia RNG Password generation failed - required entropy too low for settings Błąd tworzenia hasÅ‚a - wymagana entropia jest zbyt niska dla ustawieÅ„ The password fails the dictionary check - %1 HasÅ‚o nie przeszÅ‚o pomyÅ›lnie sprawdzenia sÅ‚ownikowego - %1 The password fails the dictionary check HasÅ‚o nie przeszÅ‚o pomyÅ›lnie sprawdzenia sÅ‚ownikowego Unknown setting - %1 Nieznane ustawienie - %1 Unknown setting Nieznane ustawienie Bad integer value of setting - %1 Błędna wartość liczby caÅ‚kowitej ustawienia - %1 Bad integer value Błędna wartość liczby caÅ‚kowitej Setting %1 is not of integer type Ustawienie %1 nie jest liczbÄ… caÅ‚kowitÄ… Setting is not of integer type Ustawienie nie jest liczbÄ… caÅ‚kowitÄ… Setting %1 is not of string type Ustawienie %1 nie jest ciÄ…giem znaków Setting is not of string type Ustawienie nie jest ciÄ…giem znaków Opening the configuration file failed Nie udaÅ‚o siÄ™ otworzyć pliku konfiguracyjnego The configuration file is malformed Plik konfiguracyjny jest uszkodzony Fatal failure Błąd krytyczny Unknown error Nieznany błąd Password is empty PackageChooserPage Form Formularz Product Name TextLabel EtykietaTekstowa Long Product Description Package Selection Please pick a product from the list. The selected product will be installed. PackageChooserViewStep Packages Page_Keyboard Form Form Keyboard Model: Model klawiatury: Type here to test your keyboard Napisz coÅ› tutaj, aby sprawdzić swojÄ… klawiaturÄ™ Page_UserSetup Form Form What is your name? Jak siÄ™ nazywasz? What name do you want to use to log in? Jakiego imienia chcesz używać do logowania siÄ™? Choose a password to keep your account safe. Wybierz hasÅ‚o, aby chronić swoje konto. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>Wpisz swoje hasÅ‚o dwa razy, aby mieć pewność, że uniknÄ…Å‚eÅ› literówek. Dobre hasÅ‚o powinno zawierać mieszaninÄ™ liter, cyfr, znaków specjalnych; mieć przynajmniej 8 znaków i być regularnie zmieniane.</small> What is the name of this computer? Jaka jest nazwa tego komputera? Your Full Name login <small>This name will be used if you make the computer visible to others on a network.</small> <small>Ta nazwa bÄ™dzie używana, jeÅ›li udostÄ™pnisz swój komputer w sieci.</small> Computer Name Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Zaloguj automatycznie bez proszenia o hasÅ‚o. Use the same password for the administrator account. Użyj tego samego hasÅ‚a dla konta administratora. Choose a password for the administrator account. Wybierz hasÅ‚o do konta administratora. <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Wpisz to samo hasÅ‚o dwa razy, aby mieć pewność, że uniknÄ…Å‚eÅ› literówek.</small> PartitionLabelsView Root Systemowa Home Domowa Boot Rozruchowa EFI system System EFI Swap PrzestrzeÅ„ wymiany New partition for %1 Nowa partycja dla %1 New partition Nowa partycja %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space Wolna powierzchnia New partition Nowa partycja Name Nazwa File System System plików Mount Point Punkt montowania Size Rozmiar PartitionPage Form Form Storage de&vice: UrzÄ…dzenie przecho&wywania: &Revert All Changes P&rzywróć do pierwotnego stanu New Partition &Table Nowa &tablica partycji Cre&ate Ut_wórz &Edit &Edycja &Delete U&suÅ„ New Volume Group Nowa Grupa Woluminów Resize Volume Group ZmieÅ„ Rozmiar Grupy Woluminów Deactivate Volume Group Dezaktywuj GrupÄ™ Woluminów Remove Volume Group UsuÅ„ GrupÄ™ Woluminów I&nstall boot loader on: Zainstaluj program rozruchowy Are you sure you want to create a new partition table on %1? Czy na pewno chcesz utworzyć nowÄ… tablicÄ™ partycji na %1? Can not create new partition Nie można utworzyć nowej partycji The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. Tablica partycji na %1 ma już %2 podstawowych partycji i wiÄ™cej nie może już być dodanych. Prosimy o usuniÄ™cie jednej partycji systemowej i dodanie zamiast niej partycji rozszerzonej. PartitionViewStep Gathering system information... Zbieranie informacji o systemie... Partitions Partycje Install %1 <strong>alongside</strong> another operating system. Zainstaluj %1 <strong>obok</strong> innego systemu operacyjnego. <strong>Erase</strong> disk and install %1. <strong>Wyczyść</strong> dysk i zainstaluj %1. <strong>Replace</strong> a partition with %1. <strong>ZastÄ…p</strong> partycjÄ™ poprzez %1. <strong>Manual</strong> partitioning. <strong>RÄ™czne</strong> partycjonowanie. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Zainstaluj %1 <strong>obok</strong> innego systemu operacyjnego na dysku <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Wyczyść</strong> dysk <strong>%2</strong> (%3) i zainstaluj %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>ZastÄ…p</strong> partycjÄ™ na dysku <strong>%2</strong> (%3) poprzez %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>RÄ™czne</strong> partycjonowanie na dysku <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Dysk <strong>%1</strong> (%2) Current: Bieżący: After: Po: No EFI system partition configured Nie skonfigurowano partycji systemowej EFI An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. Partycja systemu EFI jest zalecana aby rozpocząć %1.<br/><br/>Aby jÄ… skonfigurować, wróć i wybierz lub utwórz partycjÄ™ z systemem plików FAT32 i flagÄ… <strong>esp</strong> o punkcie montowania <strong>%2</strong>.<br/><br/>Możesz kontynuować bez ustawiania partycji systemu EFI, ale twój system może nie uruchomić siÄ™. EFI system partition flag not set Flaga partycji systemowej EFI nie zostaÅ‚a ustawiona An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Partycja systemu EFI jest konieczna, aby rozpocząć %1.<br/><br/>Partycja zostaÅ‚a skonfigurowana w punkcie montowania <strong>%2</strong>, ale nie zostaÅ‚a ustawiona flaga <strong>esp</strong>. Aby ustawić tÄ™ flagÄ™, wróć i zmodyfikuj tÄ™ partycjÄ™.<br/><br/>Możesz kontynuować bez ustawienia tej flagi, ale Twój system może siÄ™ nie uruchomić. Boot partition not encrypted Niezaszyfrowana partycja rozruchowa A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. Oddzielna partycja rozruchowa zostaÅ‚a skonfigurowana razem z zaszyfrowanÄ… partycjÄ… roota, ale partycja rozruchowa nie jest szyfrowana.<br/><br/>Nie jest to najbezpieczniejsze rozwiÄ…zanie, ponieważ ważne pliki systemowe znajdujÄ… siÄ™ na niezaszyfrowanej partycji.<br/>Możesz kontynuować, ale odblokowywanie systemu nastÄ…pi później, w trakcie uruchamiania.<br/>Aby zaszyfrować partycjÄ™ rozruchowÄ…, wróć i utwórz jÄ… ponownie zaznaczajÄ…c opcjÄ™ <strong>Szyfruj</strong> w oknie tworzenia partycji. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job DziaÅ‚ania WyglÄ…du-i-Zachowania Plasmy Could not select KDE Plasma Look-and-Feel package Nie można wybrać pakietu WyglÄ…d-i-Zachowanie Plasmy KDE PlasmaLnfPage Form Formularz Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Wybierz wyglÄ…d i styl pulpitu Plazmy KDE. Możesz również pominąć ten krok i skonfigurować wyglÄ…d po zainstalowaniu systemu. KlikniÄ™cie przycisku wyboru wyglÄ…du i stylu daje podglÄ…d na żywo tego wyglÄ…du i stylu. PlasmaLnfViewStep Look-and-Feel WyglÄ…d-i-Zachowanie PreserveFiles Saving files for later ... Zapisywanie plików na później ... No files configured to save for later. Nie skonfigurowano żadnych plików do zapisania na później. Not all of the configured files could be preserved. Nie wszystkie pliki konfiguracyjne mogÄ… być zachowane. ProcessResult There was no output from the command. W wyniku polecenia nie ma żadnego rezultatu. Output: WyjÅ›cie: External command crashed. ZewnÄ™trzne polecenie zakoÅ„czone niepowodzeniem. Command <i>%1</i> crashed. Wykonanie polecenia <i>%1</i> nie powiodÅ‚o siÄ™. External command failed to start. Nie udaÅ‚o siÄ™ uruchomić zewnÄ™trznego polecenia. Command <i>%1</i> failed to start. Polecenie <i>%1</i> nie zostaÅ‚o uruchomione. Internal error when starting command. WystÄ…piÅ‚ wewnÄ™trzny błąd podczas uruchamiania polecenia. Bad parameters for process job call. Błędne parametry wywoÅ‚ania zadania. External command failed to finish. Nie udaÅ‚o siÄ™ ukoÅ„czyć zewnÄ™trznego polecenia. Command <i>%1</i> failed to finish in %2 seconds. Nie udaÅ‚o siÄ™ ukoÅ„czyć polecenia <i>%1</i> w ciÄ…gu %2 sekund. External command finished with errors. UkoÅ„czono zewnÄ™trzne polecenie z błędami. Command <i>%1</i> finished with exit code %2. Polecenie <i>%1</i> zostaÅ‚o ukoÅ„czone z błędem o kodzie %2. QObject Default Keyboard Model DomyÅ›lny model klawiatury Default DomyÅ›lnie unknown nieznany extended rozszerzona unformatted niesformatowany swap przestrzeÅ„ wymiany Unpartitioned space or unknown partition table PrzestrzeÅ„ bez partycji lub nieznana tabela partycji (no mount point) (brak punktu montowania) Requirements checking for module <i>%1</i> is complete. %1 (%2) language[name] (country[name]) %1 (%2) No product No description provided. File not found Path <pre>%1</pre> must be an absolute path. Could not create new random file <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. UsuÅ„ GrupÄ™ Woluminów o nazwie %1 Remove Volume Group named <strong>%1</strong>. UsuÅ„ GrupÄ™ Woluminów o nazwie <strong>%1</strong> The installer failed to remove a volume group named '%1'. Instalator nie mógÅ‚ usunąć grupy woluminów o nazwie %1 ReplaceWidget Form Formularz Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Wskaż gdzie zainstalować %1.<br/><font color="red">Uwaga: </font>na wybranej partycji zostanÄ… usuniÄ™te wszystkie pliki. The selected item does not appear to be a valid partition. Wybrany element zdaje siÄ™ nie być poprawnÄ… partycjÄ…. %1 cannot be installed on empty space. Please select an existing partition. Nie można zainstalować %1 na pustej przestrzeni. Prosimy wybrać istniejÄ…cÄ… partycjÄ™. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. Nie można zainstalować %1 na rozszerzonej partycji. Prosimy wybrać istniejÄ…cÄ… partycjÄ™ podstawowÄ… lub logicznÄ…. %1 cannot be installed on this partition. %1 nie może zostać zainstalowany na tej partycji. Data partition (%1) Partycja z danymi (%1) Unknown system partition (%1) Nieznana partycja systemowa (%1) %1 system partition (%2) %1 partycja systemowa (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>Partycja %1 jest zbyt maÅ‚a dla %2. Prosimy wybrać partycjÄ™ o pojemnoÅ›ci przynajmniej %3 GB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/>Nigdzie w tym systemie nie można odnaleźć partycji systemowej EFI. Prosimy siÄ™ cofnąć i użyć rÄ™cznego partycjonowania dysku do ustawienia %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>%1 zostanie zainstalowany na %2.<br/><font color="red">Uwaga: </font>wszystkie dane znajdujÄ…ce siÄ™ na partycji %2 zostanÄ… utracone. The EFI system partition at %1 will be used for starting %2. Partycja systemowa EFI na %1 bÄ™dzie użyta do uruchamiania %2. EFI system partition: Partycja systemowa EFI: ResizeFSJob Resize Filesystem Job ZmieÅ„ Rozmiar zadania systemu plików Invalid configuration NieprawidÅ‚owa konfiguracja The file-system resize job has an invalid configuration and will not run. Zadanie zmiany rozmiaru systemu plików ma nieprawidÅ‚owÄ… konfiguracjÄ™ i nie uruchomi siÄ™ KPMCore not Available KPMCore nie dostÄ™pne Calamares cannot start KPMCore for the file-system resize job. Calamares nie może uruchomić KPMCore dla zadania zmiany rozmiaru systemu plików Resize Failed Nieudana zmiana rozmiaru The filesystem %1 could not be found in this system, and cannot be resized. System plików %1 nie mógÅ‚ być znaleziony w tym systemie i nie może być zmieniony rozmiar The device %1 could not be found in this system, and cannot be resized. UrzÄ…dzenie %1 nie mogÅ‚o być znalezione w tym systemie i zmiana rozmiaru jest nie dostÄ™pna The filesystem %1 cannot be resized. Zmiana rozmiaru w systemie plików %1 niedostÄ™pna The device %1 cannot be resized. Zmiana rozmiaru w urzÄ…dzeniu %1 niedostÄ™pna The filesystem %1 must be resized, but cannot. Wymagana zmiana rozmiaru w systemie plików %1 , ale jest niedostÄ™pna The device %1 must be resized, but cannot Wymagana zmiana rozmiaru w urzÄ…dzeniu %1 , ale jest niedostÄ™pna ResizePartitionJob Resize partition %1. ZmieÅ„ rozmiar partycji %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. Instalator nie mógÅ‚ zmienić rozmiaru partycji %1 na dysku '%2'. ResizeVolumeGroupDialog Resize Volume Group ZmieÅ„ Rozmiar Grupy Woluminów ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. ZmieÅ„ rozmiar grupy woluminów o nazwie %1 od %2 do %3 Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. ZmieÅ„ rozmiar grupy woluminów o nazwie <strong>%1</strong> od <strong>%2</strong> do <strong>%3</strong> The installer failed to resize a volume group named '%1'. Instalator nie mógÅ‚ zmienić rozmiaru grupy woluminów o nazwie %1 ResultsListDialog For best results, please ensure that this computer: Dla osiÄ…gniÄ™cia najlepszych rezultatów upewnij siÄ™, że ten komputer: System requirements Wymagania systemowe ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> Ten komputer nie speÅ‚nia minimalnych wymagaÅ„, niezbÄ™dnych do instalacji %1.<br/>Instalacja nie może być kontynuowana. <a href="#details">Szczegóły...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. Ten komputer nie speÅ‚nia wszystkich, zalecanych do instalacji %1 wymagaÅ„.<br/>Instalacja może być kontynuowana, ale niektóre opcje mogÄ… być niedostÄ™pne. This program will ask you some questions and set up %2 on your computer. Ten program zada Ci garść pytaÅ„ i ustawi %2 na Twoim komputerze. ScanningDialog Scanning storage devices... Skanowanie urzÄ…dzeÅ„ przechowywania... Partitioning Partycjonowanie SetHostNameJob Set hostname %1 Ustaw nazwÄ™ komputera %1 Set hostname <strong>%1</strong>. Ustaw nazwÄ™ komputera <strong>%1</strong>. Setting hostname %1. Ustawianie nazwy komputera %1. Internal Error Błąd wewnÄ™trzny Cannot write hostname to target system Nie można zapisać nazwy komputera w docelowym systemie SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Ustaw model klawiatury na %1, jej ukÅ‚ad na %2-%3 Failed to write keyboard configuration for the virtual console. Błąd zapisu konfiguracji klawiatury dla konsoli wirtualnej. Failed to write to %1 Nie można zapisać do %1 Failed to write keyboard configuration for X11. Błąd zapisu konfiguracji klawiatury dla X11. Failed to write keyboard configuration to existing /etc/default directory. Błąd zapisu konfiguracji ukÅ‚adu klawiatury dla istniejÄ…cego katalogu /etc/default. SetPartFlagsJob Set flags on partition %1. Ustaw flagi na partycji %1. Set flags on %1MiB %2 partition. Set flags on new partition. Ustaw flagi na nowej partycji. Clear flags on partition <strong>%1</strong>. UsuÅ„ flagi na partycji <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Wyczyść flagi na nowej partycji. Flag partition <strong>%1</strong> as <strong>%2</strong>. Oflaguj partycjÄ™ <strong>%1</strong> jako <strong>%2</strong>. Flag new partition as <strong>%1</strong>. Oflaguj nowÄ… partycjÄ™ jako <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Usuwanie flag na partycji <strong>%1</strong>. Clearing flags on new partition. Czyszczenie flag na nowej partycji. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Ustawianie flag <strong>%2</strong> na partycji <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. Ustawianie flag <strong>%1</strong> na nowej partycji. The installer failed to set flags on partition %1. Instalator nie mógÅ‚ ustawić flag na partycji %1. SetPasswordJob Set password for user %1 Ustaw hasÅ‚o dla użytkownika %1 Setting password for user %1. Ustawianie hasÅ‚a użytkownika %1. Bad destination system path. Błędna Å›cieżka docelowa systemu. rootMountPoint is %1 Punkt montowania / to %1 Cannot disable root account. Nie można wyłączyć konta administratora. passwd terminated with error code %1. ZakoÅ„czono passwd z kodem błędu %1. Cannot set password for user %1. Nie można ustawić hasÅ‚a dla użytkownika %1. usermod terminated with error code %1. Polecenie usermod przerwane z kodem błędu %1. SetTimezoneJob Set timezone to %1/%2 Ustaw strefÄ™ czasowa na %1/%2 Cannot access selected timezone path. Brak dostÄ™pu do wybranej Å›cieżki strefy czasowej. Bad path: %1 Niepoprawna Å›cieżka: %1 Cannot set timezone. Nie można ustawić strefy czasowej. Link creation failed, target: %1; link name: %2 Błąd tworzenia dowiÄ…zania, cel: %1; nazwa dowiÄ…zania: %2 Cannot set timezone, Nie można ustawić strefy czasowej, Cannot open /etc/timezone for writing Nie można otworzyć /etc/timezone celem zapisu ShellProcessJob Shell Processes Job DziaÅ‚ania procesów powÅ‚oki SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. To jest podsumowanie czynnoÅ›ci, które zostanÄ… wykonane po rozpoczÄ™ciu przez Ciebie instalacji. SummaryViewStep Summary Podsumowanie TrackingInstallJob Installation feedback Informacja zwrotna o instalacji Sending installation feedback. WysyÅ‚anie informacji zwrotnej o instalacji. Internal error in install-tracking. Błąd wewnÄ™trzny Å›ledzenia instalacji. HTTP request timed out. Wyczerpano limit czasu żądania HTTP. TrackingMachineNeonJob Machine feedback Maszynowa informacja zwrotna Configuring machine feedback. Konfiguracja machine feedback Error in machine feedback configuration. Błąd w konfiguracji maszynowej informacji zwrotnej. Could not configure machine feedback correctly, script error %1. Nie można poprawnie skonfigurować maszynowej informacji zwrotnej, błąd skryptu %1. Could not configure machine feedback correctly, Calamares error %1. Nie można poprawnie skonfigurować maszynowej informacji zwrotnej, błąd Calamares %1. TrackingPage Form Formularz Placeholder Symbol zastÄ™pczy <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>Jeżeli wybierzesz tÄ… opcjÄ™, nie zostanÄ… wysÅ‚ane <span style=" font-weight:600;">żadne informacje</span> o Twojej instalacji.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">NaciÅ›nij, aby dowiedzieć siÄ™ wiÄ™cej o uzyskiwaniu informacji zwrotnych.</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. Åšledzenie instalacji pomoże %1 dowiedzieć siÄ™, ilu majÄ… użytkowników, na jakim sprzÄ™cie instalujÄ… %1 i (jeżeli wybierzesz dwie ostatnie opcje) uzyskać informacje o używanych aplikacjach. Jeżeli chcesz wiedzieć, jakie informacje bÄ™dÄ… wysyÅ‚ane, naciÅ›nij ikonÄ™ pomocy obok. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. Jeżeli wybierzesz tÄ™ opcjÄ™, zostanÄ… wysÅ‚ane informacje dotyczÄ…ce tej instalacji i używanego sprzÄ™tu. ZostanÄ… wysÅ‚ane <b>jednokrotnie</b> po zakoÅ„czeniu instalacji. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. Jeżeli wybierzesz tÄ™ opcjÄ™, <b>okazjonalnie</b> bÄ™dÄ… wysyÅ‚ane informacje dotyczÄ…ce tej instalacji, używanego sprzÄ™tu i aplikacji do %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. Jeżeli wybierzesz tÄ… opcjÄ™, <b>regularnie</b> bÄ™dÄ… wysyÅ‚ane informacje dotyczÄ…ce tej instalacji, używanego sprzÄ™tu i aplikacji do %1. TrackingViewStep Feedback Informacje zwrotne UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> Your username is too long. Twoja nazwa użytkownika jest za dÅ‚uga. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Only letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Twoja nazwa komputera jest za krótka. Your hostname is too long. Twoja nazwa komputera jest za dÅ‚uga. Your passwords do not match! Twoje hasÅ‚a nie sÄ… zgodne! UsersViewStep Users Użytkownicy VariantModel Key Value Wartość VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Lista fizycznych woluminów Volume Group Name: Nazwa Grupy Woluminów : Volume Group Type: Typ Grupy Woluminów Physical Extent Size: Rozmiar fizycznego rozszerzenia : MiB MB Total Size: ÅÄ…czny Rozmiar : Used Size: Użyty Rozmiar Total Sectors: ÅÄ…cznie Sektorów : Quantity of LVs: Ilość Grup Woluminów : WelcomePage Form Formularz Select application and system language Open donations website &Donate Open help and support website Open issues and bug-tracking website Open release notes website &Release notes Informacje o &wydaniu &Known issues &Znane problemy &Support &Wsparcie &About &Informacje <h1>Welcome to the %1 installer.</h1> <h1>Witamy w instalatorze %1.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Witamy w instalatorze Calamares dla systemu %1.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Welcome to %1 setup.</h1> <h1>Witamy w ustawianiu %1.</h1> About %1 setup About %1 installer O instalatorze %1 <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support Wsparcie %1 WelcomeQmlViewStep Welcome Witamy WelcomeViewStep Welcome Witamy notesqml <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> About Support Known issues Release notes Donate calamares-3.2.20/lang/calamares_pt_BR.ts000066400000000000000000005577071362604102500200610ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. O <strong>ambiente de inicialização</strong> deste sistema.<br><br>Sistemas x86 antigos têm suporte apenas ao <strong>BIOS</strong>.<br>Sistemas modernos normalmente usam <strong>EFI</strong>, mas também podem mostrar o BIOS se forem iniciados no modo de compatibilidade. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. Este sistema foi iniciado com um ambiente de inicialização <strong>EFI</strong>.<br><br>Para configurar o início a partir de um ambiente EFI, este instalador deverá instalar um gerenciador de inicialização, como o <strong>GRUB</strong> ou <strong>systemd-boot</strong> em uma <strong>Partição de Sistema EFI</strong>. Esse processo é automático, a não ser que escolha o particionamento manual, que no caso fará você escolher ou criar o gerenciador de inicialização por conta própria. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. Este sistema foi iniciado utilizando o <strong>BIOS</strong> como ambiente de inicialização.<br><br>Para configurar a inicialização em um ambiente BIOS, este instalador deve instalar um gerenciador de boot, como o <strong>GRUB</strong>, no começo de uma partição ou no <strong>Master Boot Record</strong>, perto do começo da tabela de partições (recomendado). Esse processo é automático, a não ser que você escolha o particionamento manual, onde você deverá configurá-lo manualmente. BootLoaderModel Master Boot Record of %1 Master Boot Record de %1 Boot Partition Partição de Boot System Partition Partição de Sistema Do not install a boot loader Não instalar um gerenciador de inicialização %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page Página em Branco Calamares::DebugWindow Form Formulário GlobalStorage Armazenamento Global JobQueue Fila de Trabalhos Modules Módulos Type: Tipo: none nenhum Interface: Interface: Tools Ferramentas Reload Stylesheet Recarregar folha de estilo Widget Tree Ãrvore de widgets Debug information Informações de depuração Calamares::ExecutionViewStep Set up Configurar Install Instalar Calamares::FailJob Job failed (%1) A tarefa falhou (%1) Programmed job failure was explicitly requested. Falha na tarefa programada foi solicitada explicitamente. Calamares::JobThread Done Concluído Calamares::NamedJob Example job (%1) Tarefa de exemplo (%1) Calamares::ProcessJob Run command '%1' in target system. Executar o comando '%1' no sistema de destino. Run command '%1'. Executar comando '%1'. Running command %1 %2 Executando comando %1 %2 Calamares::PythonJob Running %1 operation. Executando operação %1. Bad working directory path Caminho de diretório de trabalho ruim Working directory %1 for python job %2 is not readable. Diretório de trabalho %1 para a tarefa do python %2 não é legível. Bad main script file Arquivo de script principal ruim Main script file %1 for python job %2 is not readable. Arquivo de script principal %1 para a tarefa do python %2 não é legível. Boost.Python error in job "%1". Boost.Python erro na tarefa "%1". Calamares::QmlViewStep Loading ... Carregando ... QML Step <i>%1</i>. Passo QML <i>%1</i>. Loading failed. Carregamento falhou. Calamares::RequirementsChecker Waiting for %n module(s). Esperando por %n módulo. Esperando por %n módulos. (%n second(s)) (%n segundo) (%n segundos) System-requirements checking is complete. Verificação de requerimentos do sistema completa. Calamares::ViewManager &Back &Voltar &Next &Próximo &Cancel &Cancelar Cancel setup without changing the system. Cancelar configuração sem alterar o sistema. Cancel installation without changing the system. Cancelar instalação sem modificar o sistema. Setup Failed A Configuração Falhou Would you like to paste the install log to the web? Deseja colar o registro de instalação na web? Install Log Paste URL Colar URL de Registro de Instalação The upload was unsuccessful. No web-paste was done. Não foi possível fazer o upload. Nenhuma colagem foi feita na web. Calamares Initialization Failed Falha na inicialização do Calamares %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. %1 não pôde ser instalado. O Calamares não conseguiu carregar todos os módulos configurados. Este é um problema com o modo em que o Calamares está sendo utilizado pela distribuição. <br/>The following modules could not be loaded: <br/>Os seguintes módulos não puderam ser carregados: Continue with installation? Continuar com a instalação? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> O programa de configuração %1 está prestes a fazer mudanças no seu disco de modo a configurar %2.<br/><strong>Você não será capaz de desfazer estas mudanças.</strong> &Set up now &Configurar agora &Set up &Configurar &Install &Instalar Setup is complete. Close the setup program. A configuração está completa. Feche o programa de configuração. Cancel setup? Cancelar a configuração? Cancel installation? Cancelar a instalação? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Você realmente quer cancelar o processo atual de configuração? O programa de configuração será fechado e todas as mudanças serão perdidas. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Você deseja realmente cancelar a instalação atual? O instalador será fechado e todas as alterações serão perdidas. &Yes &Sim &No &Não &Close Fe&char Continue with setup? Continuar com configuração? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> O instalador %1 está prestes a fazer alterações no disco a fim de instalar %2.<br/><strong>Você não será capaz de desfazer estas mudanças.</strong> &Install now &Instalar agora Go &back &Voltar &Done Concluí&do The installation is complete. Close the installer. A instalação está completa. Feche o instalador. Error Erro Installation Failed Falha na Instalação CalamaresPython::Helper Unknown exception type Tipo de exceção desconhecida unparseable Python error erro inanalisável do Python unparseable Python traceback rastreamento inanalisável do Python Unfetchable Python error. Erro inbuscável do Python. CalamaresUtils Install log posted to: %1 Registro de instalação colado em: %1 CalamaresWindow %1 Setup Program Programa de configuração %1 %1 Installer Instalador %1 Show debug information Exibir informações de depuração CheckerContainer Gathering system information... Coletando informações do sistema... ChoicePage Form Formulário After: Depois: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Particionamento manual</strong><br/>Você pode criar ou redimensionar partições. Boot loader location: Local do gerenciador de inicialização: Select storage de&vice: Selecione o dispositi&vo de armazenamento: Current: Atual: Reuse %1 as home partition for %2. Reutilizar %1 como partição home para %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Selecione uma partição para reduzir, então arraste a barra de baixo para redimensionar</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 será reduzida para %2MiB e uma nova partição de %3MiB será criada para %4. <strong>Select a partition to install on</strong> <strong>Selecione uma partição para instalação</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Uma partição de sistema EFI não pôde ser encontrada neste dispositivo. Por favor, volte e use o particionamento manual para gerenciar %1. The EFI system partition at %1 will be used for starting %2. A partição de sistema EFI em %1 será utilizada para iniciar %2. EFI system partition: Partição de sistema EFI: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Parece que não há um sistema operacional neste dispositivo de armazenamento. O que você gostaria de fazer?<br/>Você poderá revisar e confirmar suas opções antes que as alterações sejam feitas no dispositivo de armazenamento. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Apagar disco</strong><br/>Isto <font color="red">excluirá</font> todos os dados no dispositivo de armazenamento selecionado. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Este dispositivo de armazenamento possui %1 nele. O que você gostaria de fazer?<br/>Você poderá revisar e confirmar suas opções antes que as alterações sejam feitas no dispositivo de armazenamento. No Swap Sem swap Reuse Swap Reutilizar swap Swap (no Hibernate) Swap (sem hibernação) Swap (with Hibernate) Swap (com hibernação) Swap to file Swap em arquivo <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Instalar lado a lado</strong><br/>O instalador reduzirá uma partição para liberar espaço para %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Substituir uma partição</strong><br/>Substitui uma partição com %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Já há um sistema operacional neste dispositivo de armazenamento. O que você gostaria de fazer?<br/>Você poderá revisar e confirmar suas opções antes que as alterações sejam feitas no dispositivo de armazenamento. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Há diversos sistemas operacionais neste dispositivo de armazenamento. O que você gostaria de fazer?<br/>Você poderá revisar e confirmar suas opções antes que as alterações sejam feitas no dispositivo de armazenamento. ClearMountsJob Clear mounts for partitioning operations on %1 Limpar as montagens para as operações nas partições em %1 Clearing mounts for partitioning operations on %1. Limpando montagens para operações de particionamento em %1. Cleared all mounts for %1 Todos os pontos de montagem para %1 foram limpos ClearTempMountsJob Clear all temporary mounts. Limpar pontos de montagens temporários. Clearing all temporary mounts. Limpando todos os pontos de montagem temporários. Cannot get list of temporary mounts. Não foi possível listar os pontos de montagens. Cleared all temporary mounts. Pontos de montagens temporários limpos. CommandList Could not run command. Não foi possível executar o comando. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. O comando é executado no ambiente do hospedeiro e precisa saber o caminho root, mas nenhum rootMountPoint foi definido. The command needs to know the user's name, but no username is defined. O comando precisa saber do nome do usuário, mas nenhum nome de usuário foi definido. ContextualProcessJob Contextual Processes Job Tarefa de Processos Contextuais CreatePartitionDialog Create a Partition Criar uma partição MiB MiB Partition &Type: &Tipo da partição: &Primary &Primária E&xtended E&xtendida Fi&le System: Sistema de &Arquivos: LVM LV name Nome do LVM LV Flags: Marcadores: &Mount Point: Ponto de &Montagem: Si&ze: &Tamanho: En&crypt &Criptografar Logical Lógica Primary Primária GPT GPT Mountpoint already in use. Please select another one. Ponto de montagem já em uso. Por favor, selecione outro. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Criar nova partição de %2MiB em %4 (%3) com o sistema de arquivos %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Criar nova partição de <strong>%2MiB</strong> em <strong>%4</strong> (%3) com o sistema de arquivos <strong>%1</strong>. Creating new %1 partition on %2. Criando nova partição %1 em %2. The installer failed to create partition on disk '%1'. O instalador não conseguiu criar partições no disco '%1'. CreatePartitionTableDialog Create Partition Table Criar Tabela de Partições Creating a new partition table will delete all existing data on the disk. A criação de uma nova tabela de partições excluirá todos os dados no disco. What kind of partition table do you want to create? Que tipo de tabela de partições você deseja criar? Master Boot Record (MBR) Master Boot Record (MBR) GUID Partition Table (GPT) GUID Partition Table (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Criar nova tabela de partições %1 em %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Criar nova tabela de partições <strong>%1</strong> em <strong>%2</strong> (%3). Creating new %1 partition table on %2. Criando nova tabela de partições %1 em %2. The installer failed to create a partition table on %1. O instalador não conseguiu criar uma tabela de partições em %1. CreateUserJob Create user %1 Criar usuário %1 Create user <strong>%1</strong>. Criar usuário <strong>%1</strong>. Creating user %1. Criando usuário %1. Sudoers dir is not writable. O diretório do sudoers não é gravável. Cannot create sudoers file for writing. Não foi possível criar arquivo sudoers para gravação. Cannot chmod sudoers file. Não foi possível utilizar chmod no arquivo sudoers. Cannot open groups file for reading. Não foi possível abrir arquivo de grupos para leitura. CreateVolumeGroupDialog Create Volume Group Criar Grupo de Volumes CreateVolumeGroupJob Create new volume group named %1. Criar novo grupo de volumes nomeado %1. Create new volume group named <strong>%1</strong>. Criar novo grupo de volumes nomeado <strong>%1</strong>. Creating new volume group named %1. Criando novo grupo de volumes nomeado %1. The installer failed to create a volume group named '%1'. O instalador não conseguiu criar um grupo de volumes nomeado '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Desativar grupo de volumes nomeado %1. Deactivate volume group named <strong>%1</strong>. Desativar grupo de volumes nomeado <strong>%1</strong>. The installer failed to deactivate a volume group named %1. O instalador não conseguiu desativar um grupo de volumes nomeado '%1'. DeletePartitionJob Delete partition %1. Excluir a partição %1. Delete partition <strong>%1</strong>. Excluir a partição <strong>%1</strong>. Deleting partition %1. Excluindo a partição %1. The installer failed to delete partition %1. O instalador não conseguiu excluir a partição %1. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. O tipo de <strong>tabela de partições</strong> no dispositivo de armazenamento selecionado.<br><br>O único modo de alterar o tipo de tabela de partições é apagar e recriar a mesma do começo, processo o qual exclui todos os dados do dispositivo.<br>Este instalador manterá a tabela de partições atual, a não ser que você escolha o contrário.<br>Em caso de dúvidas, em sistemas modernos o GPT é recomendado. This device has a <strong>%1</strong> partition table. Este dispositivo possui uma tabela de partições <strong>%1</strong>. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. Este é um dispositivo de <strong>loop</strong>.<br><br>Esse é um pseudo-dispositivo sem tabela de partições que faz um arquivo acessível como um dispositivo de bloco. Esse tipo de configuração normalmente contém apenas um único sistema de arquivos. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. O instalador <strong>não pôde detectar uma tabela de partições</strong> no dispositivo de armazenamento selecionado.<br><br>O dispositivo ou não tem uma tabela de partições, ou a tabela de partições está corrompida, ou é de um tipo desconhecido.<br>Este instalador pode criar uma nova tabela de partições para você, tanto automaticamente, como pela página de particionamento manual. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Este é o tipo de tabela de partições recomendado para sistemas modernos que inicializam a partir de um ambiente <strong>EFI</strong>. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. <br><br>Este tipo de tabela de partições só é aconselhável em sistemas antigos que iniciam a partir de um ambiente de inicialização <strong>BIOS</strong>. O GPT é recomendado na maioria dos outros casos.<br><br><strong>Aviso:</strong> a tabela de partições MBR é um padrão obsoleto da era do MS-DOS.<br>Apenas 4 partições <em>primárias</em> podem ser criadas, e dessas 4, uma pode ser uma partição <em>estendida</em>, que pode, por sua vez, conter várias partições <em>lógicas</em>. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1 - (%2) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Escrever configuração LUKS para o Dracut em %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Pular escrita de configuração LUKS para o Dracut: a partição "/" não está criptografada Failed to open %1 Ocorreu uma falha ao abrir %1 DummyCppJob Dummy C++ Job Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Editar Partição Existente Content: Conteúdo: &Keep &Manter Format Formatar Warning: Formatting the partition will erase all existing data. Atenção: A formatação apagará todos os dados existentes. &Mount Point: Ponto de &Montagem: Si&ze: &Tamanho: MiB MiB Fi&le System: &Sistema de Arquivos: Flags: Marcadores: Mountpoint already in use. Please select another one. Ponto de montagem já em uso. Por favor, selecione outro. EncryptWidget Form Formulário En&crypt system &Criptografar sistema Passphrase Frase-chave Confirm passphrase Confirme a frase-chave Please enter the same passphrase in both boxes. Por favor, insira a mesma frase-chave nos dois campos. FillGlobalStorageJob Set partition information Definir informações da partição Install %1 on <strong>new</strong> %2 system partition. Instalar %1 em <strong>nova</strong> partição %2 do sistema. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Configurar <strong>nova</strong> partição %2 com ponto de montagem <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Instalar %2 na partição %3 do sistema <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Configurar partição %3 <strong>%1</strong> com ponto de montagem <strong>%2</strong>. Install boot loader on <strong>%1</strong>. Instalar gerenciador de inicialização em <strong>%1</strong>. Setting up mount points. Configurando pontos de montagem. FinishedPage Form Formulário <Restart checkbox tooltip> <Restart checkbox tooltip> &Restart now &Reiniciar agora <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>Tudo concluído.</h1><br/>%1 foi configurado no seu computador.<br/>Agora você pode começar a usar seu novo sistema. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <html><head/><body><p>Quando essa caixa for marcada, seu sistema irá reiniciar imediatamente quando você clicar em <span style="font-style:italic;">Concluído</span> ou fechar o programa de configuração.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>Tudo pronto.</h1><br/>%1 foi instalado no seu computador.<br/>Agora você pode reiniciar seu novo sistema ou continuar usando o ambiente Live %2. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <html><head/><body><p>Quando essa caixa for marcada, seu sistema irá reiniciar imediatamente quando você clicar em <span style="font-style:italic;">Concluído</span> ou fechar o instalador.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>A configuração falhou</h1><br/>%1 não foi configurado no seu computador.<br/>A mensagem de erro foi: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>A instalação falhou</h1><br/>%1 não foi instalado em seu computador.<br/>A mensagem de erro foi: %2. FinishedViewStep Finish Concluir Setup Complete Configuração Concluída Installation Complete Instalação Completa The setup of %1 is complete. A configuração de %1 está concluída. The installation of %1 is complete. A instalação do %1 está completa. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Formatar partição %1 (sistema de arquivos: %2, tamanho: %3 MiB) em %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatar partição de <strong>%3MiB</strong> <strong>%1</strong> com o sistema de arquivos <strong>%2</strong>. Formatting partition %1 with file system %2. Formatando partição %1 com o sistema de arquivos %2. The installer failed to format partition %1 on disk '%2'. O instalador falhou em formatar a partição %1 no disco '%2'. GeneralRequirements has at least %1 GiB available drive space tenha pelo menos %1 GiB disponível de espaço no disco There is not enough drive space. At least %1 GiB is required. Não há espaço suficiente no disco. Pelo menos %1 GiB é requerido. has at least %1 GiB working memory tenha pelo menos %1 GiB de memória de trabalho The system does not have enough working memory. At least %1 GiB is required. O sistema não tem memória de trabalho o suficiente. Pelo menos %1 GiB é requerido. is plugged in to a power source está conectado a uma fonte de energia The system is not plugged in to a power source. O sistema não está conectado a uma fonte de energia. is connected to the Internet está conectado à Internet The system is not connected to the Internet. O sistema não está conectado à Internet. is running the installer as an administrator (root) está executando o instalador como administrador (root) The setup program is not running with administrator rights. O programa de configuração não está sendo executado com direitos de administrador. The installer is not running with administrator rights. O instalador não está sendo executado com permissões de administrador. has a screen large enough to show the whole installer tem uma tela grande o suficiente para mostrar todo o instalador The screen is too small to display the setup program. A tela é muito pequena para exibir o programa de configuração. The screen is too small to display the installer. A tela é muito pequena para exibir o instalador. HostInfoJob Collecting information about your machine. Coletando informações sobre a sua máquina. IDJob OEM Batch Identifier Identificador de Lote OEM Could not create directories <code>%1</code>. Não foi possível criar diretórios <code>%1</code>. Could not open file <code>%1</code>. Não foi possível abrir arquivo <code>%1</code>. Could not write to file <code>%1</code>. Não foi possível escrever no arquivo <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. Criando initramfs com mkinitcpio. InitramfsJob Creating initramfs. Criando initramfs. InteractiveTerminalPage Konsole not installed Konsole não instalado Please install KDE Konsole and try again! Por favor, instale o Konsole do KDE e tente novamente! Executing script: &nbsp;<code>%1</code> Executando script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script Script KeyboardPage Set keyboard model to %1.<br/> Definir o modelo de teclado para %1.<br/> Set keyboard layout to %1/%2. Definir o layout do teclado para %1/%2. KeyboardViewStep Keyboard Teclado LCLocaleDialog System locale setting Definição de localidade do sistema The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. A configuração de localidade do sistema afeta a linguagem e o conjunto de caracteres para algumas linhas de comando e elementos da interface do usuário.<br/>A configuração atual é <strong>%1</strong>. &Cancel &Cancelar &OK &OK LicensePage Form Formulário <h1>License Agreement</h1> <h1>Contrato de Licença</h1> I accept the terms and conditions above. Aceito os termos e condições acima. Please review the End User License Agreements (EULAs). Revise o contrato de licença de usuário final (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. Este procedimento de configuração irá instalar software proprietário que está sujeito aos termos de licença. If you do not agree with the terms, the setup procedure cannot continue. Se não concordar com os termos, o procedimento de configuração não poderá continuar. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Este procedimento de configuração pode instalar software proprietário sujeito a termos de licenciamento para fornecer recursos adicionais e aprimorar a experiência do usuário. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Se você não concordar com os termos, o software proprietário não será instalado e serão utilizadas as alternativas de código aberto. LicenseViewStep License Licença LicenseWidget URL: %1 URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>driver %1</strong><br/>por %2 <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>driver gráfico %1</strong><br/><font color="Grey">por %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>plugin do navegador %1</strong><br/><font color="Grey">por %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>codec %1</strong><br/><font color="Grey">por %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>pacote %1</strong><br/><font color="Grey">por %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">por %2</font> File: %1 Arquivo: %1 Show the license text Mostrar o texto da licença Open license agreement in browser. Contrato de licença aberta no navegador. Hide license text Esconder texto de licença LocalePage The system language will be set to %1. O idioma do sistema será definido como %1. The numbers and dates locale will be set to %1. O local dos números e datas será definido como %1. Region: Região: Zone: Ãrea: &Change... &Mudar... Set timezone to %1/%2.<br/> Definir o fuso horário para %1/%2.<br/> LocaleViewStep Location Localização LuksBootKeyFileJob Configuring LUKS key file. Configurando o arquivo de chave do LUKS. No partitions are defined. Nenhuma partição está definida. Encrypted rootfs setup error Erro de configuração de rootfs encriptado Root partition %1 is LUKS but no passphrase has been set. A partição raiz %1 é LUKS, mas nenhuma senha foi definida. Could not create LUKS key file for root partition %1. Não foi possível criar o arquivo de chave LUKS para a partição raiz %1. Could not configure LUKS key file on partition %1. Não foi possível configurar a chave LUKS na partição %1. MachineIdJob Generate machine-id. Gerar machine-id. Configuration Error Erro de Configuração. No root mount point is set for MachineId. Nenhum ponto de montagem raiz está definido para MachineId. NetInstallPage Name Nome Description Descrição Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Instalação pela Rede. (Desabilitada: Não foi possível adquirir lista de pacotes, verifique sua conexão com a internet) Network Installation. (Disabled: Received invalid groups data) Instalação pela Rede. (Desabilitado: Recebidos dados de grupos inválidos) Network Installation. (Disabled: Incorrect configuration) Instalação via Rede. (Desabilitada: Configuração incorreta) NetInstallViewStep Package selection Seleção de pacotes Office software Software de office Office package Pacote office Browser software Softwares de browser Browser package Pacote de browser Web browser Navegador web Kernel Kernel Services Seriços Login Login Desktop Ãrea de trabalho Applications Aplicações NotesQmlViewStep Notes Notas OEMPage Ba&tch: &Lote: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>Especifique um identificador de lote aqui. Ele será armazenado no sistema de destino.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>Configuração OEM</h1><p>O Calamares irá utilizar as configurações OEM enquanto configurar o sistema de destino.</p></body></html> OEMViewStep OEM Configuration Configuração OEM Set the OEM Batch Identifier to <code>%1</code>. Definir o identificador de Lote OEM em <code>%1</code>. PWQ Password is too short A senha é muito curta Password is too long A senha é muito longa Password is too weak A senha é muito fraca Memory allocation error when setting '%1' Erro de alocação de memória ao definir '% 1' Memory allocation error Erro de alocação de memória The password is the same as the old one A senha é a mesma que a antiga The password is a palindrome A senha é um palíndromo The password differs with case changes only A senha difere apenas com mudanças entre maiúsculas ou minúsculas The password is too similar to the old one A senha é muito semelhante à antiga The password contains the user name in some form A senha contém o nome de usuário em alguma forma The password contains words from the real name of the user in some form A senha contém palavras do nome real do usuário The password contains forbidden words in some form A senha contém palavras proibidas de alguma forma The password contains less than %1 digits A senha contém menos de %1 dígitos The password contains too few digits A senha contém poucos dígitos The password contains less than %1 uppercase letters A senha contém menos que %1 letras maiúsculas The password contains too few uppercase letters A senha contém poucas letras maiúsculas The password contains less than %1 lowercase letters A senha contém menos que %1 letras minúsculas The password contains too few lowercase letters A senha contém poucas letras minúsculas The password contains less than %1 non-alphanumeric characters A senha contém menos que %1 caracteres não alfanuméricos The password contains too few non-alphanumeric characters A senha contém poucos caracteres não alfanuméricos The password is shorter than %1 characters A senha é menor que %1 caracteres The password is too short A senha é muito curta The password is just rotated old one A senha é apenas uma antiga modificada The password contains less than %1 character classes A senha contém menos de %1 tipos de caracteres The password does not contain enough character classes A senha não contém tipos suficientes de caracteres The password contains more than %1 same characters consecutively A senha contém mais que %1 caracteres iguais consecutivamente The password contains too many same characters consecutively A senha contém muitos caracteres iguais consecutivamente The password contains more than %1 characters of the same class consecutively A senha contém mais que %1 caracteres do mesmo tipo consecutivamente The password contains too many characters of the same class consecutively A senha contém muitos caracteres da mesma classe consecutivamente The password contains monotonic sequence longer than %1 characters A senha contém uma sequência monotônica com mais de %1 caracteres The password contains too long of a monotonic character sequence A senha contém uma sequência de caracteres monotônicos muito longa No password supplied Nenhuma senha fornecida Cannot obtain random numbers from the RNG device Não é possível obter números aleatórios do dispositivo RNG Password generation failed - required entropy too low for settings A geração de senha falhou - a entropia requerida é muito baixa para as configurações The password fails the dictionary check - %1 A senha falhou na verificação do dicionário - %1 The password fails the dictionary check A senha falhou na verificação do dicionário Unknown setting - %1 Configuração desconhecida - %1 Unknown setting Configuração desconhecida Bad integer value of setting - %1 Valor de número inteiro errado na configuração - %1 Bad integer value Valor de número inteiro errado Setting %1 is not of integer type A configuração %1 não é do tipo inteiro Setting is not of integer type A configuração não é de tipo inteiro Setting %1 is not of string type A configuração %1 não é do tipo string Setting is not of string type A configuração não é do tipo string Opening the configuration file failed Falha ao abrir o arquivo de configuração The configuration file is malformed O arquivo de configuração está defeituoso Fatal failure Falha fatal Unknown error Erro desconhecido Password is empty A senha está em branco PackageChooserPage Form Formulário Product Name Nome do Produto TextLabel EtiquetaDeTexto Long Product Description Descrição Estendida do Produto Package Selection Seleção de Pacote Please pick a product from the list. The selected product will be installed. Por favor, escolha um produto da lista. O produto selecionado será instalado. PackageChooserViewStep Packages Pacotes Page_Keyboard Form Formulário Keyboard Model: Modelo de teclado: Type here to test your keyboard Escreva aqui para testar o seu teclado Page_UserSetup Form Formulário What is your name? Qual é o seu nome? What name do you want to use to log in? Qual nome você quer usar para entrar? Choose a password to keep your account safe. Escolha uma senha para mantar a sua conta segura. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>Digite a mesma senha duas vezes, de modo que possam ser verificados erros de digitação. Uma boa senha contém uma mistura de letras, números e sinais de pontuação, deve ter pelo menos oito caracteres e deve ser alterada em intervalos regulares.</small> What is the name of this computer? Qual é o nome deste computador? Your Full Name Seu nome completo login login <small>This name will be used if you make the computer visible to others on a network.</small> <small>Esse nome será usado caso você deixe o computador visível a outros na rede.</small> Computer Name Nome do computador Password Senha Repeat Password Repita a senha When this box is checked, password-strength checking is done and you will not be able to use a weak password. Quando esta caixa estiver marcada, será feita a verificação do tamanho da senha e você não poderá usar uma senha fraca. Require strong passwords. Exigir senhas fortes. Log in automatically without asking for the password. Entrar automaticamente sem perguntar pela senha. Use the same password for the administrator account. Usar a mesma senha para a conta de administrador. Choose a password for the administrator account. Escolha uma senha para a conta administradora. <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Digite a mesma senha duas vezes para que possa ser verificada contra erros de digitação.</small> PartitionLabelsView Root Root Home Home Boot Inicialização EFI system Sistema EFI Swap Swap New partition for %1 Nova partição para %1 New partition Nova partição %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space Espaço livre New partition Nova partição Name Nome File System Sistema de arquivos Mount Point Ponto de montagem Size Tamanho PartitionPage Form Formulário Storage de&vice: Dispositi&vo de armazenamento: &Revert All Changes &Reverter todas as alterações New Partition &Table Nova Tabela de Partições Cre&ate Cri&ar &Edit &Editar &Delete &Deletar New Volume Group Novo Grupo de Volumes Resize Volume Group Redimensionar Grupo de Volumes Deactivate Volume Group Desativar Grupo de Volumes Remove Volume Group Remover Grupo de Volumes I&nstall boot loader on: I&nstalar gerenciador de inicialização em: Are you sure you want to create a new partition table on %1? Você tem certeza de que deseja criar uma nova tabela de partições em %1? Can not create new partition Não foi possível criar uma nova partição The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. A tabela de partições %1 já tem %2 partições primárias, e nenhuma a mais pode ser adicionada. Por favor, remova uma partição primária e adicione uma partição estendida no lugar. PartitionViewStep Gathering system information... Coletando informações do sistema... Partitions Partições Install %1 <strong>alongside</strong> another operating system. Instalar %1 <strong>ao lado de</strong> outro sistema operacional. <strong>Erase</strong> disk and install %1. <strong>Apagar</strong> disco e instalar %1. <strong>Replace</strong> a partition with %1. <strong>Substituir</strong> uma partição com %1. <strong>Manual</strong> partitioning. Particionamento <strong>manual</strong>. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Instalar %1 <strong>ao lado de</strong> outro sistema operacional no disco <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Apagar</strong> disco <strong>%2</strong> (%3) e instalar %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Substituir</strong> uma partição no disco <strong>%2</strong> (%3) com %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Particionamento <strong>manual</strong> no disco <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Disco <strong>%1</strong> (%2) Current: Atualmente: After: Depois: No EFI system partition configured Nenhuma partição de sistema EFI configurada An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. Uma partição de sistema EFI é necessária para iniciar %1.<br/><br/>Para configurar uma partição de sistema EFI, volte, selecione ou crie um sistema de arquivos FAT32 com o marcador <strong>esp</strong> ativado e ponto de montagem <strong>%2</strong>.<br/><br/>Você pode continuar sem definir uma partição de sistema EFI, mas seu sistema pode não iniciar. EFI system partition flag not set Marcador da partição do sistema EFI não definida An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Uma partição de sistema EFI é necessária para iniciar %1.<br/><br/>Uma partição foi configurada com o ponto de montagem <strong>%2</strong>, mas seu marcador <strong>esp</strong> não foi definido.<br/>Para definir o marcador, volte e edite a partição.<br/><br/>Você pode continuar sem definir um marcador, mas seu sistema pode não iniciar. Boot partition not encrypted Partição de boot não criptografada A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. Uma partição de inicialização separada foi configurada juntamente com uma partição raiz criptografada, mas a partição de inicialização não é criptografada.<br/><br/>Há preocupações de segurança quanto a esse tipo de configuração, porque arquivos de sistema importantes são mantidos em uma partição não criptografada.<br/>Você pode continuar se quiser, mas o desbloqueio do sistema de arquivos acontecerá mais tarde durante a inicialização do sistema.<br/>Para criptografar a partição de inicialização, volte e recrie-a, selecionando <strong>Criptografar</strong> na janela de criação da partição. has at least one disk device available. tem pelo menos um dispositivo de disco disponível. There are no partitions to install on. Não há partições para instalar. PlasmaLnfJob Plasma Look-and-Feel Job Tarefa de Tema do Plasma Could not select KDE Plasma Look-and-Feel package Não foi possível selecionar o pacote de tema do KDE Plasma PlasmaLnfPage Form Formulário Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Por favor escolha um tema para a área de trabalho KDE Plasma. Você também pode pular esta etapa e escolher um tema quando o sistema estiver configurado. Clicar em uma seleção de tema irá mostrar-lhe uma previsão dele em tempo real. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Por favor escolha um estilo visual para o Desktop KDE Plasma. Você também pode pular esse passo e configurar o estilo visual quando o sistema estiver instalado. Ao clicar na seleção de estilo visual será possível visualizar um preview daquele estilo visual. PlasmaLnfViewStep Look-and-Feel Tema PreserveFiles Saving files for later ... Salvando arquivos para mais tarde... No files configured to save for later. Nenhum arquivo configurado para ser salvo mais tarde. Not all of the configured files could be preserved. Nem todos os arquivos configurados puderam ser preservados. ProcessResult There was no output from the command. Não houve saída do comando. Output: Saída: External command crashed. O comando externo falhou. Command <i>%1</i> crashed. O comando <i>%1</i> falhou. External command failed to start. O comando externo falhou ao iniciar. Command <i>%1</i> failed to start. O comando <i>%1</i> falhou ao iniciar. Internal error when starting command. Erro interno ao iniciar o comando. Bad parameters for process job call. Parâmetros ruins para a chamada da tarefa do processo. External command failed to finish. O comando externo falhou ao finalizar. Command <i>%1</i> failed to finish in %2 seconds. O comando <i>%1</i> falhou ao finalizar em %2 segundos. External command finished with errors. O comando externo foi concluído com erros. Command <i>%1</i> finished with exit code %2. O comando <i>%1</i> foi concluído com o código %2. QObject Default Keyboard Model Modelo de teclado padrão Default Padrão unknown desconhecido extended estendida unformatted não formatado swap swap Unpartitioned space or unknown partition table Espaço não particionado ou tabela de partições desconhecida (no mount point) (sem ponto de montagem) Requirements checking for module <i>%1</i> is complete. A verificação de requerimentos para o módulo <i>%1</i> está completa. %1 (%2) language[name] (country[name]) %1 (%2) No product Sem produto No description provided. Nenhuma descrição disponível. File not found Arquivo não encontrado Path <pre>%1</pre> must be an absolute path. O caminho <pre>%1</pre> deve ser completo. Could not create new random file <pre>%1</pre>. Não foi possível criar um novo arquivo aleatório <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Remover Grupo de Volumes nomeado %1. Remove Volume Group named <strong>%1</strong>. Remover Grupo de Volumes nomeado <strong>%1</strong>. The installer failed to remove a volume group named '%1'. O instalador não conseguiu remover um grupo de volumes nomeado '%1'. ReplaceWidget Form Formulário Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Selecione onde instalar %1.<br/><font color="red">Atenção:</font> isto excluirá todos os arquivos existentes na partição selecionada. The selected item does not appear to be a valid partition. O item selecionado não parece ser uma partição válida. %1 cannot be installed on empty space. Please select an existing partition. %1 não pode ser instalado no espaço vazio. Por favor, selecione uma partição existente. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 não pode ser instalado em uma partição estendida. Por favor, selecione uma partição primária ou lógica existente. %1 cannot be installed on this partition. %1 não pode ser instalado nesta partição. Data partition (%1) Partição de dados (%1) Unknown system partition (%1) Partição de sistema desconhecida (%1) %1 system partition (%2) Partição de sistema %1 (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>A partição %1 é muito pequena para %2. Por favor, selecione uma partição com capacidade mínima de %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/>Não foi encontrada uma partição de sistema EFI no sistema. Por favor, volte e use o particionamento manual para configurar %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>%1 será instalado em %2.<br/><font color="red">Atenção: </font>todos os dados da partição %2 serão perdidos. The EFI system partition at %1 will be used for starting %2. A partição do sistema EFI em %1 será utilizada para iniciar %2. EFI system partition: Partição do sistema EFI: ResizeFSJob Resize Filesystem Job Redimensionar Tarefa de Sistema de Arquivos Invalid configuration Configuração inválida The file-system resize job has an invalid configuration and will not run. A tarefa de redimensionamento do sistema de arquivos tem uma configuração inválida e não poderá ser executada. KPMCore not Available O KPMCore não está disponível Calamares cannot start KPMCore for the file-system resize job. O Calamares não pôde iniciar o KPMCore para a tarefa de redimensionamento do sistema de arquivos. Resize Failed O Redimensionamento Falhou The filesystem %1 could not be found in this system, and cannot be resized. O sistema de arquivos %1 não pôde ser encontrado neste sistema e não poderá ser redimensionado. The device %1 could not be found in this system, and cannot be resized. O dispositivo %1 não pôde ser encontrado neste sistema e não poderá ser redimensionado. The filesystem %1 cannot be resized. O sistema de arquivos %1 não pode ser redimensionado. The device %1 cannot be resized. O dispositivo %1 não pode ser redimensionado. The filesystem %1 must be resized, but cannot. O sistema de arquivos %1 deve ser redimensionado, mas não foi possível executar a tarefa. The device %1 must be resized, but cannot O dispositivo %1 deve ser redimensionado, mas não foi possível executar a tarefa. ResizePartitionJob Resize partition %1. Redimensionar partição %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Redimensionar partição de <strong>%2MiB</strong> <strong>%1</strong> para <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. Redimensionando partição de %2MiB %1 para %3MiB. The installer failed to resize partition %1 on disk '%2'. O instalador falhou em redimensionar a partição %1 no disco '%2'. ResizeVolumeGroupDialog Resize Volume Group Redimensionar Grupo de Volumes ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Redimensionar grupo de volumes nomeado %1 de %2 para %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. Redimensionar grupo de volumes nomeado <strong>%1</strong> de <strong>%2</strong> para <strong>%3</strong>. The installer failed to resize a volume group named '%1'. O instalador não conseguiu redimensionar um grupo de volumes nomeado '%1'. ResultsListDialog For best results, please ensure that this computer: Para melhores resultados, por favor, certifique-se de que este computador: System requirements Requisitos do sistema ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> Este computador não satisfaz os requerimentos mínimos para configurar %1.<br/>A configuração não pode continuar. <a href="#details">Detalhes...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> Este computador não satisfaz os requisitos mínimos para instalar %1.<br/>A instalação não pode continuar. <a href="#details">Detalhes...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. Este computador não satisfaz alguns dos requerimentos recomendados para configurar %1.<br/>A configuração pode continuar, mas algumas funções podem ser desativadas. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. Este computador não satisfaz alguns dos requisitos recomendados para instalar %1.<br/>A instalação pode continuar, mas alguns recursos podem ser desativados. This program will ask you some questions and set up %2 on your computer. Este programa irá fazer-lhe algumas perguntas e configurar %2 no computador. ScanningDialog Scanning storage devices... Localizando dispositivos de armazenamento... Partitioning Particionando SetHostNameJob Set hostname %1 Definir nome da máquina %1 Set hostname <strong>%1</strong>. Definir nome da máquina <strong>%1</strong>. Setting hostname %1. Definindo nome da máquina %1. Internal Error Erro interno Cannot write hostname to target system Não é possível gravar o nome da máquina para o sistema alvo SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Definir modelo de teclado para %1, layout para %2-%3 Failed to write keyboard configuration for the virtual console. Falha ao gravar a configuração do teclado para o console virtual. Failed to write to %1 Falha ao gravar em %1 Failed to write keyboard configuration for X11. Falha ao gravar a configuração do teclado para X11. Failed to write keyboard configuration to existing /etc/default directory. Falha ao gravar a configuração do teclado no diretório /etc/default existente. SetPartFlagsJob Set flags on partition %1. Definir marcadores na partição %1. Set flags on %1MiB %2 partition. Definir marcadores na partição de %1MiB %2. Set flags on new partition. Definir marcadores na nova partição. Clear flags on partition <strong>%1</strong>. Limpar marcadores na partição <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Limpar marcadores na partição de %1MiB <strong>%2</strong>. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Marcar partição de %1MiB <strong>%2</strong> como <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Limpando marcadores na partição de %1MiB <strong>%2</strong>. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Definindo marcadores <strong>%3</strong> na partição de %1MiB <strong>%2</strong>. Clear flags on new partition. Limpar marcadores na nova partição. Flag partition <strong>%1</strong> as <strong>%2</strong>. Marcar partição <strong>%1</strong> como <strong>%2</strong>. Flag new partition as <strong>%1</strong>. Marcar nova partição como <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Limpando marcadores na partição <strong>%1</strong>. Clearing flags on new partition. Limpando marcadores na nova partição. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Definindo marcadores <strong>%2</strong> na partição <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. Definindo marcadores <strong>%1</strong> na nova partição. The installer failed to set flags on partition %1. O instalador falhou em definir marcadores na partição %1. SetPasswordJob Set password for user %1 Definir senha para usuário %1 Setting password for user %1. Definindo senha para usuário %1. Bad destination system path. O caminho para o sistema está mal direcionado. rootMountPoint is %1 rootMountPoint é %1 Cannot disable root account. Não é possível desativar a conta root. passwd terminated with error code %1. passwd terminado com código de erro %1. Cannot set password for user %1. Não foi possível definir senha para o usuário %1. usermod terminated with error code %1. usermod terminou com código de erro %1. SetTimezoneJob Set timezone to %1/%2 Definir fuso horário para %1/%2 Cannot access selected timezone path. Não é possível acessar o caminho do fuso horário selecionado. Bad path: %1 Caminho ruim: %1 Cannot set timezone. Não foi possível definir o fuso horário. Link creation failed, target: %1; link name: %2 Não foi possível criar o link, alvo: %1; nome: %2 Cannot set timezone, Não foi possível definir o fuso horário. Cannot open /etc/timezone for writing Não foi possível abrir /etc/timezone para gravação ShellProcessJob Shell Processes Job Processos de trabalho do Shell SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage This is an overview of what will happen once you start the setup procedure. Esta é uma visão geral do que acontecerá quando você iniciar o procedimento de configuração. This is an overview of what will happen once you start the install procedure. Este é um resumo do que acontecerá assim que o processo de instalação for iniciado. SummaryViewStep Summary Resumo TrackingInstallJob Installation feedback Feedback da instalação Sending installation feedback. Enviando feedback da instalação. Internal error in install-tracking. Erro interno no install-tracking. HTTP request timed out. A solicitação HTTP expirou. TrackingMachineNeonJob Machine feedback Feedback da máquina Configuring machine feedback. Configurando feedback da máquina. Error in machine feedback configuration. Erro na configuração de feedback da máquina. Could not configure machine feedback correctly, script error %1. Não foi possível configurar o feedback da máquina corretamente, erro de script %1. Could not configure machine feedback correctly, Calamares error %1. Não foi possível configurar o feedback da máquina corretamente, erro do Calamares %1. TrackingPage Form Formulário Placeholder Substituto <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>Ao selecionar isto, você <span style=" font-weight:600;">não enviará nenhuma informação</span> sobre sua instalação.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Clique aqui para mais informações sobre o feedback do usuário</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. O rastreamento de instalação ajuda %1 a ver quantos usuários eles têm, em qual hardware eles instalam %1 e (com as duas últimas opções abaixo), adquirir informações sobre os aplicativos preferidos. Para ver o que será enviado, por favor, clique no ícone de ajuda perto de cada área. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. Ao selecionar isto, você enviará informações sobre sua instalação e hardware. Esta informação <b>será enviada apenas uma vez</b> depois que a instalação terminar. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. Ao selecionar isto, você enviará <b>periodicamente</b> informações sobre sua instalação, hardware e aplicativos para %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. Ao selecionar isto, você enviará <b>regularmente</b> informações sobre sua instalação, hardware, aplicativos e padrões de uso para %1. TrackingViewStep Feedback Feedback UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Se mais de uma pessoa for utilizar este computador, você poderá criar múltiplas contas após terminar a configuração.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Se mais de uma pessoa for utilizar este computador, você poderá criar múltiplas contas após terminar de instalar.</small> Your username is too long. O nome de usuário é grande demais. Your username must start with a lowercase letter or underscore. Seu nome de usuário deve começar com uma letra maiúscula ou com um sublinhado. Only lowercase letters, numbers, underscore and hyphen are allowed. É permitido apenas letras minúsculas, números, sublinhado e hífen. Only letters, numbers, underscore and hyphen are allowed. É permitido apenas letras, números, sublinhado e hífen. Your hostname is too short. O nome da máquina é muito curto. Your hostname is too long. O nome da máquina é muito grande. Your passwords do not match! As senhas não estão iguais! UsersViewStep Users Usuários VariantModel Key Chave Value Valor VolumeGroupBaseDialog Create Volume Group Criar Grupo de Volumes List of Physical Volumes Lista de Volumes Físicos Volume Group Name: Nome do Grupo de Volumes: Volume Group Type: Tipo do Grupo de Volumes: Physical Extent Size: Extensão do Tamanho Físico: MiB MiB Total Size: Tamanho Total: Used Size: Tamanho Utilizado: Total Sectors: Total de Setores: Quantity of LVs: Quantidade de LVs: WelcomePage Form Formulário Select application and system language Selecione a aplicação e a linguagem do sistema Open donations website Abrir website de doações &Donate &Doar Open help and support website Abrir website de ajuda e suporte Open issues and bug-tracking website Abrir website de problemas e rastreamento de bugs Open release notes website Abrir o site com as notas de lançamento &Release notes &Notas de lançamento &Known issues &Problemas conhecidos &Support &Suporte &About &Sobre <h1>Welcome to the %1 installer.</h1> <h1>Bem-vindo ao instalador %1 .</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Bem-vindo ao instalador Calamares para %1.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Bem-vindo ao programa de configuração Calamares para %1.</h1> <h1>Welcome to %1 setup.</h1> <h1>Bem-vindo à configuração de %1</h1> About %1 setup Sobre a configuração de %1 About %1 installer Sobre o instalador %1 <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. <h1>%1</h1><br/><strong>%2<br/>para %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Obrigado ao <a href="https://calamares.io/team/">time Calamares</a> e ao <a href="https://www.transifex.com/calamares/calamares/">time de tradutores do Calamares</a>.<br/><br/>O desenvolvimento do <a href="https://calamares.io/">Calamares</a> é patrocinado pela <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support %1 suporte WelcomeQmlViewStep Welcome Bem-vindo WelcomeViewStep Welcome Bem-vindo notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> <h3>%1 <quote>%2</quote></h3> About Sobre Support Suporte Known issues Problemas conhecidos Release notes Notas de lançamento Donate Faça uma doação calamares-3.2.20/lang/calamares_pt_PT.ts000066400000000000000000005475731362604102500201010ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. O <strong>ambiente de arranque</strong> deste sistema.<br><br>Sistemas x86 mais antigos apenas suportam <strong>BIOS</strong>.<br>Sistemas modernos normalmente usam <strong>EFI</strong>, mas também podem aparecer como BIOS se iniciados em modo de compatibilidade. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. Este sistema foi iniciado com ambiente de arranque<strong>EFI</strong>.<br><br>Para configurar o arranque de um ambiente EFI, o instalador tem de implantar uma aplicação de carregar de arranque, tipo <strong>GRUB</strong> ou <strong>systemd-boot</strong> ou uma <strong>Partição de Sistema EFI</strong>. Isto é automático, a menos que escolha particionamento manual, e nesse caso tem de escolhê-la ou criar uma por si próprio. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. Este sistema foi iniciado com um ambiente de arranque <strong>BIOS</strong>.<br><br>Para configurar um arranque de um ambiente BIOS, este instalador tem de instalar um carregador de arranque, tipo <strong>GRUB</strong>, quer no início da partição ou no <strong>Master Boot Record</strong> perto do início da tabela de partições (preferido). Isto é automático, a não ser que escolha particionamento manual, e nesse caso tem de o configurar por si próprio BootLoaderModel Master Boot Record of %1 Master Boot Record de %1 Boot Partition Partição de arranque System Partition Partição do Sistema Do not install a boot loader Não instalar um carregador de arranque %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page Página em Branco Calamares::DebugWindow Form Formulário GlobalStorage ArmazenamentoGlobal JobQueue FilaDeTrabalho Modules Módulos Type: Tipo: none nenhum Interface: Interface: Tools Ferramentas Reload Stylesheet Recarregar Folha de estilo Widget Tree Ãrvore de Widgets Debug information Informação de depuração Calamares::ExecutionViewStep Set up Configuração Install Instalar Calamares::FailJob Job failed (%1) Tarefa falhou (%1) Programmed job failure was explicitly requested. Falha de tarefa programada foi explicitamente solicitada. Calamares::JobThread Done Concluído Calamares::NamedJob Example job (%1) Exemplo de tarefa (%1) Calamares::ProcessJob Run command '%1' in target system. Execute o comando '%1' no sistema alvo. Run command '%1'. Execute o comando '%1'. Running command %1 %2 A executar comando %1 %2 Calamares::PythonJob Running %1 operation. Operação %1 em execução. Bad working directory path Caminho do directório de trabalho errado Working directory %1 for python job %2 is not readable. Directório de trabalho %1 para a tarefa python %2 não é legível. Bad main script file Ficheiro de script principal errado Main script file %1 for python job %2 is not readable. Ficheiro de script principal %1 para a tarefa python %2 não é legível. Boost.Python error in job "%1". Erro Boost.Python na tarefa "%1". Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Waiting for %n module(s). A aguardar por %n módulo(s). A aguardar por %n módulo(s). (%n second(s)) (%n segundo(s)) (%n segundo(s)) System-requirements checking is complete. A verificação de requisitos de sistema está completa. Calamares::ViewManager &Back &Voltar &Next &Próximo &Cancel &Cancelar Cancel setup without changing the system. Cancelar instalação sem alterar o sistema. Cancel installation without changing the system. Cancelar instalar instalação sem modificar o sistema. Setup Failed Falha de Instalação Would you like to paste the install log to the web? Deseja colar o registo de instalação na Web? Install Log Paste URL Instalar o URL da pasta de registo The upload was unsuccessful. No web-paste was done. O carregamento não teve êxito. Nenhuma pasta da web foi feita. Calamares Initialization Failed Falha na Inicialização do Calamares %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. %1 não pode ser instalado. O Calamares não foi capaz de carregar todos os módulos configurados. Isto é um problema da maneira como o Calamares é usado pela distribuição. <br/>The following modules could not be loaded: <br/>Os módulos seguintes não puderam ser carregados: Continue with installation? Continuar com a instalação? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> O programa de instalação %1 está prestes a fazer alterações no seu disco para configurar o %2.<br/><strong>Você não poderá desfazer essas alterações.</strong> &Set up now &Instalar agora &Set up &Instalar &Install &Instalar Setup is complete. Close the setup program. Instalação completa. Feche o programa de instalação. Cancel setup? Cancelar instalação? Cancel installation? Cancelar a instalação? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Quer mesmo cancelar o processo de instalação atual? O programa de instalação irá fechar todas as alterações serão perdidas. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Tem a certeza que pretende cancelar o atual processo de instalação? O instalador será encerrado e todas as alterações serão perdidas. &Yes &Sim &No &Não &Close &Fechar Continue with setup? Continuar com a configuração? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> O %1 instalador está prestes a fazer alterações ao seu disco em ordem para instalar %2.<br/><strong>Não será capaz de desfazer estas alterações.</strong> &Install now &Instalar agora Go &back Voltar &atrás &Done &Feito The installation is complete. Close the installer. A instalação está completa. Feche o instalador. Error Erro Installation Failed Falha na Instalação CalamaresPython::Helper Unknown exception type Tipo de exceção desconhecido unparseable Python error erro inanalisável do Python unparseable Python traceback rasto inanalisável do Python Unfetchable Python error. Erro inatingível do Python. CalamaresUtils Install log posted to: %1 Instalar registo publicado em: %1 CalamaresWindow %1 Setup Program %1 Programa de Instalação %1 Installer %1 Instalador Show debug information Mostrar informação de depuração CheckerContainer Gathering system information... A recolher informação de sistema... ChoicePage Form Formulário After: Depois: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Particionamento manual</strong><br/>Pode criar ou redimensionar partições manualmente. Boot loader location: Localização do carregador de arranque: Select storage de&vice: Selecione o dis&positivo de armazenamento: Current: Atual: Reuse %1 as home partition for %2. Reutilizar %1 como partição home para %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Selecione uma partição para encolher, depois arraste a barra de fundo para redimensionar</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. <strong>Select a partition to install on</strong> <strong>Selecione uma partição para instalar</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Nenhuma partição de sistema EFI foi encontrada neste sistema. Por favor volte atrás e use o particionamento manual para configurar %1. The EFI system partition at %1 will be used for starting %2. A partição de sistema EFI em %1 será usada para iniciar %2. EFI system partition: Partição de sistema EFI: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Este dispositivo de armazenamento aparenta não ter um sistema operativo. O que quer fazer?<br/>Poderá rever e confirmar as suas escolhas antes de qualquer alteração ser feita no dispositivo de armazenamento. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Apagar disco</strong><br/>Isto irá <font color="red">apagar</font> todos os dados atualmente apresentados no dispositivo de armazenamento selecionado. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Este dispositivo de armazenamento tem %1 nele. O que quer fazer?<br/>Poderá rever e confirmar as suas escolhas antes de qualquer alteração ser feita no dispositivo de armazenamento. No Swap Sem Swap Reuse Swap Reutilizar Swap Swap (no Hibernate) Swap (sem Hibernação) Swap (with Hibernate) Swap (com Hibernação) Swap to file Swap para ficheiro <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Instalar paralelamente</strong><br/>O instalador irá encolher a partição para arranjar espaço para %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Substituir a partição</strong><br/>Substitui a partição com %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Este dispositivo de armazenamento já tem um sistema operativo nele. O que quer fazer?<br/>Poderá rever e confirmar as suas escolhas antes de qualquer alteração ser feita no dispositivo de armazenamento. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Este dispositivo de armazenamento tem múltiplos sistemas operativos nele, O que quer fazer?<br/>Poderá rever e confirmar as suas escolhas antes de qualquer alteração ser feita no dispositivo de armazenamento. ClearMountsJob Clear mounts for partitioning operations on %1 Limpar montagens para operações de particionamento em %1 Clearing mounts for partitioning operations on %1. A limpar montagens para operações de particionamento em %1. Cleared all mounts for %1 Limpar todas as montagens para %1 ClearTempMountsJob Clear all temporary mounts. Limpar todas as montagens temporárias. Clearing all temporary mounts. A limpar todas as montagens temporárias. Cannot get list of temporary mounts. Não é possível obter a lista de montagens temporárias. Cleared all temporary mounts. Limpou todas as montagens temporárias. CommandList Could not run command. Não foi possível correr o comando. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. O comando corre no ambiente do host e precisa de conhecer o caminho root, mas nenhum Ponto de Montagem root está definido. The command needs to know the user's name, but no username is defined. O comando precisa de saber o nome do utilizador, mas não está definido nenhum nome de utilizador. ContextualProcessJob Contextual Processes Job Tarefa de Processos Contextuais CreatePartitionDialog Create a Partition Criar uma Partição MiB MiB Partition &Type: Partição &Tamanho: &Primary &Primário E&xtended E&stendida Fi&le System: Sistema de Fi&cheiros: LVM LV name nome LVM LV Flags: Flags: &Mount Point: &Ponto de Montagem: Si&ze: Ta&manho: En&crypt En&criptar Logical Lógica Primary Primária GPT GPT Mountpoint already in use. Please select another one. Ponto de montagem já em uso. Por favor selecione outro. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. Criando nova partição %1 em %2. The installer failed to create partition on disk '%1'. O instalador falhou a criação da partição no disco '%1'. CreatePartitionTableDialog Create Partition Table Criar Tabela de Partições Creating a new partition table will delete all existing data on the disk. Criar uma nova tabela de partições irá apagar todos os dados existentes no disco. What kind of partition table do you want to create? Que tipo de tabela de partições quer criar? Master Boot Record (MBR) Master Boot Record (MBR) GUID Partition Table (GPT) Tabela de Partições GUID (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Criar nova %1 tabela de partições em %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Criar nova <strong>%1</strong> tabela de partições <strong>%2</strong> (%3). Creating new %1 partition table on %2. A criar nova %1 tabela de partições em %2. The installer failed to create a partition table on %1. O instalador falhou a criação de uma tabela de partições em %1. CreateUserJob Create user %1 Criar utilizador %1 Create user <strong>%1</strong>. Criar utilizador <strong>%1</strong>. Creating user %1. A criar utilizador %1. Sudoers dir is not writable. O diretório dos super utilizadores não é gravável. Cannot create sudoers file for writing. Impossível criar ficheiro do super utilizador para escrita. Cannot chmod sudoers file. Impossível de usar chmod no ficheiro dos super utilizadores. Cannot open groups file for reading. Impossível abrir ficheiro dos grupos para leitura. CreateVolumeGroupDialog Create Volume Group Criar Grupo de Volume CreateVolumeGroupJob Create new volume group named %1. Criar novo grupo de volume com o nome %1. Create new volume group named <strong>%1</strong>. Criar novo grupo de volume com o nome <strong>%1</strong>. Creating new volume group named %1. A criar novo grupo de volume com o nome %1. The installer failed to create a volume group named '%1'. O instalador falhou ao criar o grupo de volume com o nome '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Desativar grupo de volume com o nome %1. Deactivate volume group named <strong>%1</strong>. Desativar grupo de volume com o nome <strong>%1</strong>. The installer failed to deactivate a volume group named %1. O instalador falhou ao desativar o grupo de volume com o nome %1. DeletePartitionJob Delete partition %1. Apagar partição %1. Delete partition <strong>%1</strong>. Apagar partição <strong>%1</strong>. Deleting partition %1. A apagar a partição %1. The installer failed to delete partition %1. O instalador não conseguiu apagar a partição %1. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. O tipo da <strong>tabela de partições</strong> no dispositivo de armazenamento selecionado.<br><br>A única maneira de mudar o tipo da tabela de partições é apagá-la e recriar a tabela de partições do nada, o que destrói todos os dados no dispositivo de armazenamento.<br>Este instalador manterá a tabela de partições atual a não ser que escolha explicitamente em contrário.<br>Se não tem a certeza, nos sistemas modernos é preferido o GPT. This device has a <strong>%1</strong> partition table. Este dispositivo tem uma tabela de partições <strong>%1</strong>. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. Este é um dispositivo<strong>loop</strong>.<br><br>É um pseudo-dispositivo sem tabela de partições que torna um ficheiro acessível como um dispositivo de bloco. Este tipo de configuração normalmente apenas contém um único sistema de ficheiros. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. Este instalador <strong>não consegue detetar uma tabela de partições</strong> no dispositivo de armazenamento selecionado.<br><br>O dispositivo ou não tem tabela de partições, ou a tabela de partições está corrompida ou é de tipo desconhecido.<br>Este instalador pode criar uma nova tabela de partições para si, quer automativamente, ou através da página de particionamento manual. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Este é o tipo de tabela de partições recomendado para sistema modernos que arrancam a partir de um ambiente <strong>EFI</strong> de arranque. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. <br><br>Este tipo de tabela de partições é aconselhável apenas em sistemas mais antigos que iniciam a partir de um ambiente de arranque <strong>BIOS</strong>. GPT é recomendado na maior parte dos outros casos.<br><br><strong>Aviso:</strong> A tabela de partições MBR é um standard obsoleto da era MS-DOS.<br>Apenas 4 partições <em>primárias</em> podem ser criadas, e dessa 4, apenas uma pode ser partição <em>estendida</em>, que por sua vez podem ser tornadas em várias partições <em>lógicas</em>. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1 - (%2) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Escrever configuração LUKS para Dracut em %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Saltar escrita de configuração LUKS para Dracut: partição "/" não está encriptada Failed to open %1 Falha ao abrir %1 DummyCppJob Dummy C++ Job Tarefa Dummy C++ EditExistingPartitionDialog Edit Existing Partition Editar Partição Existente Content: Conteúdo: &Keep &Manter Format Formatar: Warning: Formatting the partition will erase all existing data. Atenção: Formatar a partição irá apagar todos os dados existentes. &Mount Point: &Ponto de Montagem: Si&ze: Ta&manho: MiB MiB Fi&le System: Si&stema de Ficheiros: Flags: Flags: Mountpoint already in use. Please select another one. Ponto de montagem já em uso. Por favor selecione outro. EncryptWidget Form Forma En&crypt system En&criptar systema Passphrase Frase-chave Confirm passphrase Confirmar frase-chave Please enter the same passphrase in both boxes. Por favor insira a mesma frase-passe em ambas as caixas. FillGlobalStorageJob Set partition information Definir informação da partição Install %1 on <strong>new</strong> %2 system partition. Instalar %1 na <strong>nova</strong> %2 partição de sistema. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Criar <strong>nova</strong> %2 partição com ponto de montagem <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Instalar %2 em %3 partição de sistema <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Criar %3 partitição <strong>%1</strong> com ponto de montagem <strong>%2</strong>. Install boot loader on <strong>%1</strong>. Instalar carregador de arranque em <strong>%1</strong>. Setting up mount points. Definindo pontos de montagem. FinishedPage Form Formulário <Restart checkbox tooltip> <Restart checkbox tooltip> &Restart now &Reiniciar agora <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>Tudo feito</h1><br/>%1 foi instalado no seu computador.<br/>Pode agora reiniciar para o seu novo sistema, ou continuar a usar o %2 ambiente Live. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Instalação Falhada</h1><br/>%1 não foi instalado no seu computador.<br/>A mensagem de erro foi: %2. FinishedViewStep Finish Finalizar Setup Complete Instalação Completa Installation Complete Instalação Completa The setup of %1 is complete. A instalação de %1 está completa. The installation of %1 is complete. A instalação de %1 está completa. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatting partition %1 with file system %2. A formatar partição %1 com sistema de ficheiros %2. The installer failed to format partition %1 on disk '%2'. O instalador falhou ao formatar a partição %1 no disco '%2'. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source está ligado a uma fonte de energia The system is not plugged in to a power source. O sistema não está ligado a uma fonte de energia. is connected to the Internet está ligado à internet The system is not connected to the Internet. O sistema não está ligado à internet. is running the installer as an administrator (root) The setup program is not running with administrator rights. O programa de instalação está agora a correr com direitos de administrador. The installer is not running with administrator rights. O instalador não está a correr com permissões de administrador. has a screen large enough to show the whole installer The screen is too small to display the setup program. O ecrã é demasiado pequeno para mostrar o programa de instalação. The screen is too small to display the installer. O ecrã tem um tamanho demasiado pequeno para mostrar o instalador. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Identificador OEM em Lote Could not create directories <code>%1</code>. Não foi possível criar diretorias <code>%1</code>. Could not open file <code>%1</code>. Não foi possível abrir ficheiro <code>%1</code>. Could not write to file <code>%1</code>. Não foi possível escrever para o ficheiro <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. A criar o initramfs. InteractiveTerminalPage Konsole not installed Konsole não instalado Please install KDE Konsole and try again! Por favor instale a consola KDE e tente novamente! Executing script: &nbsp;<code>%1</code> A executar script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script Script KeyboardPage Set keyboard model to %1.<br/> Definir o modelo do teclado para %1.<br/> Set keyboard layout to %1/%2. Definir esquema do teclado para %1/%2. KeyboardViewStep Keyboard Teclado LCLocaleDialog System locale setting Definição de localização do Sistema The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. A definição local do sistema afeta o idioma e conjunto de carateres para alguns elementos do interface da linha de comandos.<br/>A definição atual é <strong>%1</strong>. &Cancel &Cancelar &OK &OK LicensePage Form Formulário <h1>License Agreement</h1> I accept the terms and conditions above. Aceito os termos e condições acima descritos. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License Licença LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 controlador</strong><br/>por %2 <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 controlador gráfico</strong><br/><font color="Grey">por %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 extra para navegador</strong><br/><font color="Grey">por %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">por %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 pacote</strong><br/><font color="Grey">por %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">por %2</font> File: %1 Show the license text Open license agreement in browser. Hide license text Esconder texto da licença LocalePage The system language will be set to %1. A linguagem do sistema será definida para %1. The numbers and dates locale will be set to %1. Os números e datas locais serão definidos para %1. Region: Região: Zone: Zona: &Change... &Alterar... Set timezone to %1/%2.<br/> Definir fuso horário para %1/%2.<br/> LocaleViewStep Location Localização LuksBootKeyFileJob Configuring LUKS key file. A configurar o ficheiro chave do LUKS. No partitions are defined. Nenhuma partição é definida. Encrypted rootfs setup error Erro de configuração do rootfs criptografado Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Gerar id-máquina Configuration Error Erro de configuração No root mount point is set for MachineId. NetInstallPage Name Nome Description Descrição Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Instalaçao de Rede. (Desativada: Incapaz de buscar listas de pacotes, verifique a sua ligação de rede) Network Installation. (Disabled: Received invalid groups data) Instalação de Rede. (Desativada: Recebeu dados de grupos inválidos) Network Installation. (Disabled: Incorrect configuration) NetInstallViewStep Package selection Seleção de pacotes Office software Office package Browser software Browser package Web browser Kernel Services Login Desktop Applications NotesQmlViewStep Notes OEMPage Ba&tch: Ba&tch: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> OEMViewStep OEM Configuration Configuração OEM Set the OEM Batch Identifier to <code>%1</code>. Definir o Identificar OEM em Lote para <code>%1</code>. PWQ Password is too short A palavra-passe é demasiado curta Password is too long A palavra-passe é demasiado longa Password is too weak A palavra-passe é demasiado fraca Memory allocation error when setting '%1' Erro de alocação de memória quando definido '%1' Memory allocation error Erro de alocação de memória The password is the same as the old one A palavra-passe é a mesma que a antiga The password is a palindrome A palavra-passe é um palíndromo The password differs with case changes only A palavra-passe difere com apenas diferenças de maiúsculas e minúsculas The password is too similar to the old one A palavra-passe é demasiado semelhante à antiga The password contains the user name in some form A palavra passe contém de alguma forma o nome do utilizador The password contains words from the real name of the user in some form A palavra passe contém de alguma forma palavras do nome real do utilizador The password contains forbidden words in some form A palavra-passe contém de alguma forma palavras proibidas The password contains less than %1 digits A palavra-passe contém menos de %1 dígitos The password contains too few digits A palavra-passe contém muito poucos dígitos The password contains less than %1 uppercase letters A palavra-passe contém menos de %1 letras maiúsculas The password contains too few uppercase letters A palavra-passe contém muito poucas letras maiúsculas The password contains less than %1 lowercase letters A palavra-passe contém menos de %1 letras minúsculas The password contains too few lowercase letters A palavra-passe contém muito poucas letras minúsculas The password contains less than %1 non-alphanumeric characters A palavra-passe contém menos de %1 carateres não-alfanuméricos The password contains too few non-alphanumeric characters A palavra-passe contém muito pouco carateres não alfa-numéricos The password is shorter than %1 characters A palavra-passe é menor do que %1 carateres The password is too short A palavra-passe é demasiado pequena The password is just rotated old one A palavra-passe é apenas uma antiga alternada The password contains less than %1 character classes A palavra-passe contém menos de %1 classe de carateres The password does not contain enough character classes A palavra-passe não contém classes de carateres suficientes The password contains more than %1 same characters consecutively A palavra-passe contém apenas mais do que %1 carateres iguais consecutivos The password contains too many same characters consecutively A palavra-passe contém demasiados carateres iguais consecutivos The password contains more than %1 characters of the same class consecutively A palavra-passe contém mais do que %1 carateres consecutivos da mesma classe The password contains too many characters of the same class consecutively A palavra-passe contém demasiados carateres consecutivos da mesma classe The password contains monotonic sequence longer than %1 characters A palavra-passe contém sequência mono tónica mais longa do que %1 carateres The password contains too long of a monotonic character sequence A palavra-passe contém uma sequência mono tónica de carateres demasiado longa No password supplied Nenhuma palavra-passe fornecida Cannot obtain random numbers from the RNG device Não é possível obter sequência aleatória de números a partir do dispositivo RNG Password generation failed - required entropy too low for settings Geração de palavra-passe falhada - entropia obrigatória demasiado baixa para definições The password fails the dictionary check - %1 A palavra-passe falha a verificação do dicionário - %1 The password fails the dictionary check A palavra-passe falha a verificação do dicionário Unknown setting - %1 Definição desconhecida - %1 Unknown setting Definição desconhecida Bad integer value of setting - %1 Valor inteiro incorreto para definição - %1 Bad integer value Valor inteiro incorreto Setting %1 is not of integer type Definição %1 não é do tipo inteiro Setting is not of integer type Definição não é do tipo inteiro Setting %1 is not of string type Definição %1 não é do tipo cadeia de carateres Setting is not of string type Definição não é do tipo cadeira de carateres Opening the configuration file failed Abertura da configuração de ficheiro falhou The configuration file is malformed O ficheiro de configuração está mal formado Fatal failure Falha fatal Unknown error Erro desconhecido Password is empty PackageChooserPage Form Forma Product Name Nome do produto TextLabel EtiquetaTexto Long Product Description Descrição longa do produto Package Selection Seleção de pacote Please pick a product from the list. The selected product will be installed. PackageChooserViewStep Packages Pacotes Page_Keyboard Form Formulário Keyboard Model: Modelo do Teclado: Type here to test your keyboard Escreva aqui para testar a configuração do teclado Page_UserSetup Form Formulário What is your name? Qual é o seu nome? What name do you want to use to log in? Que nome deseja usar para iniciar a sessão? Choose a password to keep your account safe. Escolha uma palavra-passe para manter a sua conta segura. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>Digite a mesma palavra-passe duas vezes, de modo a que possam ser verificados erros de digitação. Uma boa palavra-passe contém uma mistura de letras, números e sinais de pontuação, deve ter pelo menos oito caracteres de comprimento, e deve ser alterada em intervalos regulares.</small> What is the name of this computer? Qual o nome deste computador? Your Full Name O seu nome completo login inicio de sessão <small>This name will be used if you make the computer visible to others on a network.</small> <small>Este nome será usado se tornar este computador visível para outros numa rede.</small> Computer Name Nome do computador Password Palavra-passe Repeat Password Repita a palavra-passe When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Requer palavras-passe fortes. Log in automatically without asking for the password. Iniciar sessão automaticamente sem pedir a palavra-passe. Use the same password for the administrator account. Usar a mesma palavra-passe para a conta de administrador. Choose a password for the administrator account. Escolha uma palavra-passe para a conta de administrador. <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Introduza a mesma palavra-passe duas vezes, para que se possam verificar erros de digitação.</small> PartitionLabelsView Root Root Home Home Boot Arranque EFI system Sistema EFI Swap Swap New partition for %1 Nova partição para %1 New partition Nova partição %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space Espaço Livre New partition Nova partição Name Nome File System Sistema de Ficheiros Mount Point Ponto de Montagem Size Tamanho PartitionPage Form Formulário Storage de&vice: Dis&positivo de armazenamento: &Revert All Changes &Reverter todas as alterações New Partition &Table Nova &Tabela de Partições Cre&ate Cri&ar &Edit &Editar &Delete &Apagar New Volume Group Novo Grupo de Volume Resize Volume Group Redimensionar Grupo de Volume Deactivate Volume Group Desativar Grupo de Volume Remove Volume Group Remover Grupo de Volume I&nstall boot loader on: I&nstalar carregador de arranque em: Are you sure you want to create a new partition table on %1? Tem certeza de que deseja criar uma nova tabela de partições em %1? Can not create new partition Não é possível criar nova partição The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. A tabela de partições em %1 já tem %2 partições primárias, e não podem ser adicionadas mais. Em vez disso, por favor remova uma partição primária e adicione uma partição estendida. PartitionViewStep Gathering system information... A recolher informações do sistema... Partitions Partições Install %1 <strong>alongside</strong> another operating system. Instalar %1 <strong>paralelamente</strong> a outro sistema operativo. <strong>Erase</strong> disk and install %1. <strong>Apagar</strong> disco e instalar %1. <strong>Replace</strong> a partition with %1. <strong>Substituir</strong> a partição com %1. <strong>Manual</strong> partitioning. Particionamento <strong>Manual</strong>. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Instalar %1 <strong>paralelamente</strong> a outro sistema operativo no disco <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Apagar</strong> disco <strong>%2</strong> (%3) e instalar %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Substituir</strong> a partição no disco <strong>%2</strong> (%3) com %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Particionamento <strong>Manual</strong> no disco <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Disco <strong>%1</strong> (%2) Current: Atual: After: Depois: No EFI system partition configured Nenhuma partição de sistema EFI configurada An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. É necessária uma partição de sistema EFI para iniciar %1.<br/><br/>Para configurar uma partição de sistema EFI, volte atrás e selecione ou crie um sistema de ficheiros FAT32 com a flag <strong>esp</strong> ativada e ponto de montagem <strong>%2</strong>.<br/><br/>Pode continuar sem configurar uma partição de sistema EFI mas o seu sistema pode falhar o arranque. EFI system partition flag not set flag não definida da partição de sistema EFI An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. É necessária uma partição de sistema EFI para iniciar %1.<br/><br/>A partitição foi configurada com o ponto de montagem <strong>%2</strong> mas a sua flag <strong>esp</strong> não está definida.<br/>Para definir a flag, volte atrás e edite a partição.<br/><br/>Pode continuar sem definir a flag mas o seu sistema pode falhar o arranque. Boot partition not encrypted Partição de arranque não encriptada A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. Foi preparada uma partição de arranque separada juntamente com uma partição root encriptada, mas a partição de arranque não está encriptada.<br/><br/>Existem preocupações de segurança com este tipo de configuração, por causa de importantes ficheiros de sistema serem guardados numa partição não encriptada.<br/>Se desejar pode continuar, mas o destrancar do sistema de ficheiros irá ocorrer mais tarde durante o arranque do sistema.<br/>Para encriptar a partição de arranque, volte atrás e recrie-a, e selecione <strong>Encriptar</strong> na janela de criação de partições. has at least one disk device available. tem pelo menos um dispositivo de disco disponível. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Tarefa de Aparência Plasma Could not select KDE Plasma Look-and-Feel package Não foi possível selecionar o pacote KDE Plasma Look-and-Feel PlasmaLnfPage Form Forma Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Escolha um aspecto para o ambiente de trabalho KDE Plasma. Também pode ignorar este passo e configurar o aspecto uma vez que o sistema esteja configurado. Ao clicar numa seleção de aspecto terá uma pré-visualização ao vivo desse aspecto. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Por favor escolha a aparência para o Ambiente de Trabalho KDE Plasma. Pode também saltar este passo e configurar a aparência uma vez instalado o sistema. Ao clicar numa seleção de aparência irá ter uma pré-visualização ao vivo dessa aparência. PlasmaLnfViewStep Look-and-Feel Aparência PreserveFiles Saving files for later ... A guardar ficheiros para mais tarde ... No files configured to save for later. Nenhuns ficheiros configurados para guardar para mais tarde. Not all of the configured files could be preserved. Nem todos os ficheiros configurados puderam ser preservados. ProcessResult There was no output from the command. O comando não produziu saída de dados. Output: Saída de Dados: External command crashed. O comando externo "crashou". Command <i>%1</i> crashed. Comando <i>%1</i> "crashou". External command failed to start. Comando externo falhou ao iniciar. Command <i>%1</i> failed to start. Comando <i>%1</i> falhou a inicialização. Internal error when starting command. Erro interno ao iniciar comando. Bad parameters for process job call. Maus parâmetros para chamada de processamento de tarefa. External command failed to finish. Comando externo falhou a finalização. Command <i>%1</i> failed to finish in %2 seconds. Comando <i>%1</i> falhou ao finalizar em %2 segundos. External command finished with errors. Comando externo finalizou com erros. Command <i>%1</i> finished with exit code %2. Comando <i>%1</i> finalizou com código de saída %2. QObject Default Keyboard Model Modelo de Teclado Padrão Default Padrão unknown desconhecido extended estendido unformatted não formatado swap swap Unpartitioned space or unknown partition table Espaço não particionado ou tabela de partições desconhecida (no mount point) (sem ponto de montagem) Requirements checking for module <i>%1</i> is complete. A verificação de requisitos para módulo <i>%1</i> está completa. %1 (%2) language[name] (country[name]) %1 (%2) No product Nenhum produto No description provided. Nenhuma descrição fornecida. File not found Ficheiro não encontrado Path <pre>%1</pre> must be an absolute path. Could not create new random file <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Remover Grupo de Volume com o nome %1. Remove Volume Group named <strong>%1</strong>. Remover Grupo de Volume com o nome <strong>%1</strong>. The installer failed to remove a volume group named '%1'. O instalador falhou a remoção do grupo de volume com o nome '%1'. ReplaceWidget Form Formulário Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Selecione onde instalar %1.<br/><font color="red">Aviso: </font>isto irá apagar todos os ficheiros na partição selecionada. The selected item does not appear to be a valid partition. O item selecionado não aparenta ser uma partição válida. %1 cannot be installed on empty space. Please select an existing partition. %1 não pode ser instalado no espaço vazio. Por favor selecione uma partição existente. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 não pode ser instalado numa partição estendida. Por favor selecione uma partição primária ou partição lógica. %1 cannot be installed on this partition. %1 não pode ser instalado nesta partição. Data partition (%1) Partição de dados (%1) Unknown system partition (%1) Partição de sistema desconhecida (%1) %1 system partition (%2) %1 partição de sistema (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>A partição %1 é demasiado pequena para %2. Por favor selecione uma partição com pelo menos %3 GiB de capacidade. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/>Uma partição de sistema EFI não pode ser encontrada em nenhum sítio neste sistema. Por favor volte atrás e use o particionamento manual para instalar %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>%1 será instalado na %2.<br/><font color="red">Aviso: </font>todos os dados na partição %2 serão perdidos. The EFI system partition at %1 will be used for starting %2. A partição de sistema EFI em %1 será usada para iniciar %2. EFI system partition: Partição de sistema EFI: ResizeFSJob Resize Filesystem Job Tarefa de Redimensionamento do Sistema de Ficheiros Invalid configuration Configuração inválida The file-system resize job has an invalid configuration and will not run. A tarefa de redimensionamento do sistema de ficheiros tem uma configuração inválida e não irá ser corrida. KPMCore not Available KPMCore não Disponível Calamares cannot start KPMCore for the file-system resize job. O Calamares não consegue iniciar KPMCore para a tarefa de redimensionamento de sistema de ficheiros. Resize Failed Redimensionamento Falhou The filesystem %1 could not be found in this system, and cannot be resized. O sistema de ficheiros %1 não foi encontrado neste sistema, e não pode ser redimensionado. The device %1 could not be found in this system, and cannot be resized. O dispositivo %1 não pode ser encontrado neste sistema, e não pode ser redimensionado. The filesystem %1 cannot be resized. O sistema de ficheiros %1 não pode ser redimensionado. The device %1 cannot be resized. O dispositivo %1 não pode ser redimensionado. The filesystem %1 must be resized, but cannot. O sistema de ficheiros %1 tem de ser redimensionado, mas não pode. The device %1 must be resized, but cannot O dispositivo %1 tem de ser redimensionado, mas não pode ResizePartitionJob Resize partition %1. Redimensionar partição %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Redimensionar <strong>%2MiB</strong> partição <strong>%1</strong> para <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. A redimensionar %2MiB partição %1 para %3MiB. The installer failed to resize partition %1 on disk '%2'. O instalador falhou o redimensionamento da partição %1 no disco '%2'. ResizeVolumeGroupDialog Resize Volume Group Redimensionar Grupo de Volume ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Redimensionar grupo de volume com o nome %1 de %2 até %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. Redimensionar grupo de volume com o nome <strong>%1</strong> de <strong>%2</strong> até <strong>%3</strong>. The installer failed to resize a volume group named '%1'. O instalador falhou ao redimensionar o grupo de volume com o nome '%1'. ResultsListDialog For best results, please ensure that this computer: Para melhores resultados, por favor certifique-se que este computador: System requirements Requisitos de sistema ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> Este computador não satisfaz os requisitos mínimos para instalar %1.<br/>A instalação não pode continuar. <a href="#details">Detalhes...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. Este computador não satisfaz alguns dos requisitos recomendados para instalar %1.<br/>A instalação pode continuar, mas algumas funcionalidades poderão ser desativadas. This program will ask you some questions and set up %2 on your computer. Este programa vai fazer-lhe algumas perguntas e configurar o %2 no seu computador. ScanningDialog Scanning storage devices... A examinar dispositivos de armazenamento... Partitioning Particionamento SetHostNameJob Set hostname %1 Configurar nome da máquina %1 Set hostname <strong>%1</strong>. Definir nome da máquina <strong>%1</strong>. Setting hostname %1. A definir nome da máquina %1. Internal Error Erro interno Cannot write hostname to target system Não é possível escrever o nome da máquina para o sistema selecionado SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Definir modelo do teclado para %1, disposição para %2-%3 Failed to write keyboard configuration for the virtual console. Falha ao escrever configuração do teclado para a consola virtual. Failed to write to %1 Falha ao escrever para %1 Failed to write keyboard configuration for X11. Falha ao escrever configuração do teclado para X11. Failed to write keyboard configuration to existing /etc/default directory. Falha ao escrever a configuração do teclado para a diretoria /etc/default existente. SetPartFlagsJob Set flags on partition %1. Definir flags na partição %1. Set flags on %1MiB %2 partition. Definir flags na partição %1MiB %2. Set flags on new partition. Definir flags na nova partição. Clear flags on partition <strong>%1</strong>. Limpar flags na partitição <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Limpar flags na nova partição. Flag partition <strong>%1</strong> as <strong>%2</strong>. Definir flag da partição <strong>%1</strong> como <strong>%2</strong>. Flag new partition as <strong>%1</strong>. Nova partição com flag <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. A limpar flags na partição <strong>%1</strong>. Clearing flags on new partition. A limpar flags na nova partição. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. A definir flags <strong>%2</strong> na partitição <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. A definir flags <strong>%1</strong> na nova partição. The installer failed to set flags on partition %1. O instalador falhou ao definir flags na partição %1. SetPasswordJob Set password for user %1 Definir palavra-passe para o utilizador %1 Setting password for user %1. A definir palavra-passe para o utilizador %1. Bad destination system path. Mau destino do caminho do sistema. rootMountPoint is %1 rootMountPoint é %1 Cannot disable root account. Não é possível desativar a conta root. passwd terminated with error code %1. passwd terminado com código de erro %1. Cannot set password for user %1. Não é possível definir a palavra-passe para o utilizador %1. usermod terminated with error code %1. usermod terminou com código de erro %1. SetTimezoneJob Set timezone to %1/%2 Configurar fuso horário para %1/%2 Cannot access selected timezone path. Não é possível aceder ao caminho do fuso horário selecionado. Bad path: %1 Mau caminho: %1 Cannot set timezone. Não é possível definir o fuso horário. Link creation failed, target: %1; link name: %2 Falha na criação de ligação, alvo: %1; nome da ligação: %2 Cannot set timezone, Não é possível definir o fuso horário, Cannot open /etc/timezone for writing Não é possível abrir /etc/timezone para escrita ShellProcessJob Shell Processes Job Tarefa de Processos da Shell SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage This is an overview of what will happen once you start the setup procedure. Isto é uma visão geral do que acontecerá assim que iniciar o procedimento de configuração. This is an overview of what will happen once you start the install procedure. Isto é uma visão geral do que acontecerá assim que iniciar o procedimento de instalação. SummaryViewStep Summary Resumo TrackingInstallJob Installation feedback Relatório da Instalação Sending installation feedback. A enviar relatório da instalação. Internal error in install-tracking. Erro interno no rastreio da instalação. HTTP request timed out. Expirou o tempo para o pedido de HTTP. TrackingMachineNeonJob Machine feedback Relatório da máquina Configuring machine feedback. A configurar relatório da máquina. Error in machine feedback configuration. Erro na configuração do relatório da máquina. Could not configure machine feedback correctly, script error %1. Não foi possível configurar corretamente o relatório da máquina, erro de script %1. Could not configure machine feedback correctly, Calamares error %1. Não foi possível configurar corretamente o relatório da máquina, erro do Calamares %1. TrackingPage Form Forma Placeholder Espaço reservado <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>Ao selecionar isto, não estará a enviar <span style=" font-weight:600;">qualquer informação</span> sobre a sua instalação.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Clique aqui para mais informação acerca do relatório do utilizador</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. O rastreio de instalação ajuda %1 a ver quanto utilizadores eles têm, qual o hardware que instalam %1 e (com a duas últimas opções abaixo), obter informação contínua sobre aplicações preferidas. Para ver o que será enviado, por favor clique no ícone de ajuda a seguir a cada área. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. Ao selecionar isto estará a enviar informação acerca da sua instalação e hardware. Esta informação será <b>enviada apenas uma vez</b> depois da instalação terminar. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. Ao selecionar isto irá <b>periodicamente</b> enviar informação sobre a instalação, hardware e aplicações, para %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. Ao selecionar isto irá periodicamente enviar informação sobre a instalação, hardware, aplicações e padrões de uso, para %1. TrackingViewStep Feedback Relatório UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Se mais de uma pessoa usar este computador, você pode criar várias contas após a configuração.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Se mais de uma pessoa usar este computador, você pode criar várias contas após a instalação.</small> Your username is too long. O seu nome de utilizador é demasiado longo. Your username must start with a lowercase letter or underscore. O seu nome de utilizador deve começar com uma letra minúscula ou underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Apenas letras minúsculas, números, underscore e hífen são permitidos. Only letters, numbers, underscore and hyphen are allowed. Apenas letras, números, underscore e hífen são permitidos. Your hostname is too short. O nome da sua máquina é demasiado curto. Your hostname is too long. O nome da sua máquina é demasiado longo. Your passwords do not match! As suas palavras-passe não coincidem! UsersViewStep Users Utilizadores VariantModel Key Chave Value Valor VolumeGroupBaseDialog Create Volume Group Criar Grupo de Volume List of Physical Volumes Lista de Volumes Físicos Volume Group Name: Nome do Grupo de Volume: Volume Group Type: Tipo do Grupo de Volume: Physical Extent Size: Tamanho da Extensão Física: MiB MiB Total Size: Tamanho Total: Used Size: Tamanho Usado: Total Sectors: Total de Setores: Quantity of LVs: Quantidade de LVs: WelcomePage Form Formulário Select application and system language Selecione o idioma da aplicação e do sistema Open donations website Abrir site de doações &Donate &Doar Open help and support website Abra o site de ajuda e suporte Open issues and bug-tracking website Site de questões abertas e monitorização de erros Open release notes website Abrir o site com as notas de lançamento &Release notes &Notas de lançamento &Known issues &Problemas conhecidos &Support &Suporte &About &Acerca <h1>Welcome to the %1 installer.</h1> <h1>Bem vindo ao instalador do %1.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Bem vindo ao instalador Calamares para %1.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Bem vindo ao programa de instalação Calamares para %1.</h1> <h1>Welcome to %1 setup.</h1> <h1>Bem vindo à instalação de %1.</h1> About %1 setup Sobre a instalação de %1 About %1 installer Acerca %1 instalador <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. <h1>%1</h1><br/><strong>%2<br/>para %3</strong><br/><br/>Direitos de Cópia 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Direitos de Cópia 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Agradecimentos à <a href="https://calamares.io/team/">Equipa Calamares</a> e à<a href="https://www.transifex.com/calamares/calamares/">Equipa de tradutores do Calamares</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> desenvolvido e patrocinado por <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support %1 suporte WelcomeQmlViewStep Welcome Bem-vindo WelcomeViewStep Welcome Bem-vindo notesqml <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> About Support Known issues Release notes Donate calamares-3.2.20/lang/calamares_ro.ts000066400000000000000000005313361362604102500174610ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. <strong>Mediul de boot</strong> al acestui sistem.<br><br>Sistemele x86 mai vechi suportă numai <strong>BIOS</strong>.<br>Sisteme moderne folosesc de obicei <strong>EFI</strong>, dar ar putea fi afiÈ™ate ca BIOS dacă au fost pornite în modul de compatibilitate. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. Acest sistem a fost pornit într-un mediu de boot <strong>EFI</strong>.<br><br>Pentru a configura pornirea dintr-un mediu EFI, acest program de instalare trebuie să creeze o aplicaÈ›ie pentru boot-are, cum ar fi <strong>GRUB</strong> sau <strong>systemd-boot</strong> pe o <strong>partiÈ›ie de sistem EFI</strong>. Acest pas este automat, cu excepÈ›ia cazului în care alegeÈ›i partiÈ›ionarea manuală. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. Sistemul a fost pornit într-un mediu de boot <strong>BIOS</strong>.<br><br>Pentru a configura pornirea de la un mediu BIOS, programul de instalare trebuie să instaleze un mediu de boot, cum ar fi <strong>GRUB</strong> fie la începutul unei partiÈ›ii sau pe <strong>Master Boot Record</strong> în partea de început a unei tabele de partiÈ›ii (preferabil). Acesta este un pas automat, cu excepÈ›ia cazului în care alegeÈ›i partiÈ›ionarea manuală. BootLoaderModel Master Boot Record of %1 Master boot record (MBR) al %1 Boot Partition PartiÈ›ie de boot System Partition PartiÈ›ie de sistem Do not install a boot loader Nu instala un bootloader %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page Calamares::DebugWindow Form Formular GlobalStorage Stocare globală JobQueue Coadă de sarcini Modules Module Type: Tipul: none nimic Interface: InterfaÈ›a: Tools Unelte Reload Stylesheet Widget Tree Debug information InformaÈ›ie pentru depanare Calamares::ExecutionViewStep Set up Install Instalează Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Gata Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Se rulează comanda %1 %2 Calamares::PythonJob Running %1 operation. Se rulează operaÈ›iunea %1. Bad working directory path Calea dosarului de lucru este proastă Working directory %1 for python job %2 is not readable. Dosarul de lucru %1 pentru sarcina python %2 nu este citibil. Bad main script file FiÈ™ierul script principal este prost Main script file %1 for python job %2 is not readable. FiÈ™ierul script peincipal %1 pentru sarcina Python %2 nu este citibil. Boost.Python error in job "%1". Eroare Boost.Python în sarcina „%1â€. Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager &Back &ÃŽnapoi &Next &Următorul &Cancel &Anulează Cancel setup without changing the system. Cancel installation without changing the system. Anulează instalarea fără schimbarea sistemului. Setup Failed Would you like to paste the install log to the web? Install Log Paste URL The upload was unsuccessful. No web-paste was done. Calamares Initialization Failed %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. <br/>The following modules could not be loaded: Continue with installation? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Set up &Install Instalează Setup is complete. Close the setup program. Cancel setup? Cancel installation? Anulez instalarea? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. DoriÈ›i să anulaÈ›i procesul curent de instalare? Programul de instalare va ieÈ™i, iar toate modificările vor fi pierdute. &Yes &Da &No &Nu &Close ÃŽn&chide Continue with setup? ContinuaÈ›i configurarea? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> Programul de instalare %1 este pregătit să facă schimbări pe discul dumneavoastră pentru a instala %2.<br/><strong>Nu veÈ›i putea anula aceste schimbări.</strong> &Install now &Instalează acum Go &back ÃŽ&napoi &Done &Gata The installation is complete. Close the installer. Instalarea este completă. ÃŽnchide instalatorul. Error Eroare Installation Failed Instalare eÈ™uată CalamaresPython::Helper Unknown exception type Tip de excepÈ›ie necunoscut unparseable Python error Eroare Python neanalizabilă unparseable Python traceback Traceback Python neanalizabil Unfetchable Python error. Eroare Python nepreluabilă CalamaresUtils Install log posted to: %1 CalamaresWindow %1 Setup Program %1 Installer Program de instalare %1 Show debug information Arată informaÈ›ia de depanare CheckerContainer Gathering system information... Se adună informaÈ›ii despre sistem... ChoicePage Form Formular After: După: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>PartiÈ›ionare manuală</strong><br/>PuteÈ›i crea sau redimensiona partiÈ›iile. Boot loader location: LocaÈ›ie boot loader: Select storage de&vice: Selectează dispoziti&vul de stocare: Current: Actual: Reuse %1 as home partition for %2. Reutilizează %1 ca partiÈ›ie home pentru %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Selectează o partiÈ›ie de micÈ™orat, apoi trageÈ›i bara din jos pentru a redimensiona</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. <strong>Select a partition to install on</strong> <strong>Selectează o partiÈ›ie pe care să se instaleze</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. O partiÈ›ie de sistem EFI nu poate fi găsită nicăieri în acest sistem. Vă rugăm să reveniÈ›i È™i să partiÈ›ionaÈ›i manual pentru a seta %1. The EFI system partition at %1 will be used for starting %2. PartiÈ›ia de sistem EFI de la %1 va fi folosită pentru a porni %2. EFI system partition: PartiÈ›ie de sistem EFI: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Acest dispozitiv de stocare nu pare să aibă un sistem de operare instalat. Ce doriÈ›i să faceÈ›i?<br/>VeÈ›i putea revedea È™i confirma alegerile făcute înainte să fie realizate schimbări pe dispozitivul de stocare. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Șterge discul</strong><br/>Aceasta va <font color="red">È™terge</font> toate datele prezente pe dispozitivul de stocare selectat. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Acest dispozitiv de stocare are %1. Ce doriÈ›i să faceÈ›i?<br/>VeÈ›i putea revedea È™i confirma alegerile făcute înainte să fie realizate schimbări pe dispozitivul de stocare. No Swap Reuse Swap Swap (no Hibernate) Swap (with Hibernate) Swap to file <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Instalează laolaltă</strong><br/>Instalatorul va micÈ™ora o partiÈ›ie pentru a face loc pentru %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>ÃŽnlocuieÈ™te o partiÈ›ie</strong><br/>ÃŽnlocuieÈ™te o partiÈ›ie cu %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Acest dispozitiv de stocare are deja un sistem de operare instalat. Ce doriÈ›i să faceÈ›i?<br/>VeÈ›i putea revedea È™i confirma alegerile făcute înainte de se realiza schimbări pe dispozitivul de stocare. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Acest dispozitiv de stocare are mai multe sisteme de operare instalate. Ce doriÈ›i să faceÈ›i?<br/>VeÈ›i putea revedea È™i confirma alegerile făcute înainte de a se realiza schimbări pe dispozitivul de stocare. ClearMountsJob Clear mounts for partitioning operations on %1 EliminaÈ›i montările pentru operaÈ›iunea de partiÈ›ionare pe %1 Clearing mounts for partitioning operations on %1. Se elimină montările pentru operaÈ›iunile de partiÈ›ionare pe %1. Cleared all mounts for %1 S-au eliminat toate punctele de montare pentru %1 ClearTempMountsJob Clear all temporary mounts. Elimină toate montările temporare. Clearing all temporary mounts. Se elimină toate montările temporare. Cannot get list of temporary mounts. Nu se poate obÈ›ine o listă a montărilor temporare. Cleared all temporary mounts. S-au eliminat toate montările temporare. CommandList Could not run command. Nu s-a putut executa comanda. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. ContextualProcessJob Contextual Processes Job Job de tip Contextual Process CreatePartitionDialog Create a Partition Creează o partiÈ›ie MiB MiB Partition &Type: &Tip de partiÈ›ie: &Primary &Primară E&xtended E&xtinsă Fi&le System: Sis&tem de fiÈ™iere: LVM LV name Nume LVM LV Flags: Flags: &Mount Point: Punct de &Montare Si&ze: Mă&rime: En&crypt &Criptează Logical Logică Primary Primară GPT GPT Mountpoint already in use. Please select another one. Punct de montare existent. Vă rugăm alegeÅ£i altul. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. Se creează nouă partiÈ›ie %1 pe %2. The installer failed to create partition on disk '%1'. Programul de instalare nu a putut crea partiÈ›ia pe discul „%1â€. CreatePartitionTableDialog Create Partition Table Creează tabelă de partiÈ›ii Creating a new partition table will delete all existing data on the disk. Crearea unei tabele de partiÈ›ii va È™terge toate datele de pe disc. What kind of partition table do you want to create? Ce fel de tabelă de partiÈ›ii doriÈ›i să creaÈ›i? Master Boot Record (MBR) ÃŽnregistrare de boot principală (MBR) GUID Partition Table (GPT) Tabelă de partiÈ›ii GUID (GPT) CreatePartitionTableJob Create new %1 partition table on %2. CreaÈ›i o nouă tabelă de partiÈ›ii %1 pe %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). CreaÈ›i o nouă tabelă de partiÈ›ii <strong>%1</strong> pe <strong>%2</strong> (%3). Creating new %1 partition table on %2. Se creează o nouă tabelă de partiÈ›ii %1 pe %2. The installer failed to create a partition table on %1. Programul de instalare nu a putut crea o tabelă de partiÈ›ii pe %1. CreateUserJob Create user %1 Creează utilizatorul %1 Create user <strong>%1</strong>. Creează utilizatorul <strong>%1</strong>. Creating user %1. Se creează utilizator %1. Sudoers dir is not writable. Nu se poate scrie în dosarul sudoers. Cannot create sudoers file for writing. Nu se poate crea fiÈ™ierul sudoers pentru scriere. Cannot chmod sudoers file. Nu se poate chmoda fiÈ™ierul sudoers. Cannot open groups file for reading. Nu se poate deschide fiÈ™ierul groups pentru citire. CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. Șterge partiÈ›ia %1. Delete partition <strong>%1</strong>. Șterge partiÈ›ia <strong>%1</strong>. Deleting partition %1. Se È™terge partiÈ›ia %1. The installer failed to delete partition %1. Programul de instalare nu a putut È™terge partiÈ›ia %1. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. Tipul de <strong>tabelă de partiÈ›ii</strong> de pe dispozitivul de stocare selectat.<br><br>Singura metodă de a schimba tipul de tabelă de partiÈ›ii este È™tergerea È™i recrearea acesteia de la zero, ceea de distruge toate datele de pe dispozitivul de stocare.<br>Acest program de instalare va păstra tabela de partiÈ›ii actuală cu excepÈ›ia cazului în care alegeÈ›i altfel.<br>Dacă nu sunteÈ›i sigur, GPT este preferabil pentru sistemele moderne. This device has a <strong>%1</strong> partition table. Acest dispozitiv are o tabelă de partiÈ›ii <strong>%1</strong>. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. Acesta este un dispozitiv de tip <strong>loop</strong>.<br><br>Este un pseudo-dispozitiv fără tabelă de partiÈ›ii care face un fiÈ™ier accesibil ca un dispozitiv de tip bloc. Această schemă conÈ›ine de obicei un singur sistem de fiÈ™iere. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. Programul de instalare <strong>nu poate detecta o tabelă de partiÈ›ii</strong> pe dispozitivul de stocare selectat.<br><br>Dispozitivul fie nu are o tabelă de partiÈ›ii, sau tabela de partiÈ›ii este coruptă sau de un tip necunoscut.<br>Acest program de instalare poate crea o nouă tabelă de partiÈ›ie în mod automat sau prin intermediul paginii de partiÈ›ionare manuală. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Acesta este tipul de tabelă de partiÈ›ii recomandat pentru sisteme moderne ce pornesc de pe un mediu de boot <strong>EFI</strong>. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. <br><br>Această tabelă de partiÈ›ii este recomandabilă doar pentru sisteme mai vechi care pornesc de la un mediu de boot <strong>BIOS</strong>. GPT este recomandabil în cele mai multe cazuri.<br><br><strong>AtenÈ›ie:</strong> tabela de partiÈ›ii MBR partition este un standard învechit din epoca MS-DOS.<br>Acesta permite doar 4 partiÈ›ii <em>primare</em>, iar din acestea 4 doar una poate fi de tip <em>extins</em>, care la rândul ei mai poate conÈ›ine un număr mare de partiÈ›ii <em>logice</em>. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Scrie configuraÈ›ia LUKS pentru Dracut pe %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Omite scrierea configuraÈ›iei LUKS pentru Dracut: partiÈ›ia „/†nu este criptată Failed to open %1 Nu s-a reuÈ™it deschiderea %1 DummyCppJob Dummy C++ Job Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Editează partiÈ›ie existentă Content: ConÈ›inut: &Keep &Păstrează Format Formatează Warning: Formatting the partition will erase all existing data. AtenÈ›ie: Formatarea partiÈ›iei va È™terge toate datele existente. &Mount Point: Punct de &Montare: Si&ze: Mă&rime MiB MiB Fi&le System: Sis&tem de fiÈ™iere: Flags: Flags: Mountpoint already in use. Please select another one. Punct de montare existent. Vă rugăm alegeÅ£i altul. EncryptWidget Form Formular En&crypt system Sistem de &criptare Passphrase Frază secretă Confirm passphrase Confirmă fraza secretă Please enter the same passphrase in both boxes. IntroduceÈ›i aceeaÈ™i frază secretă în ambele căsuÈ›e. FillGlobalStorageJob Set partition information Setează informaÈ›ia pentru partiÈ›ie Install %1 on <strong>new</strong> %2 system partition. Instalează %1 pe <strong>noua</strong> partiÈ›ie de sistem %2. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Setează <strong>noua</strong> partiÈ›ie %2 cu punctul de montare <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Instalează %2 pe partiÈ›ia de sistem %3 <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Setează partiÈ›ia %3 <strong>%1</strong> cu punctul de montare <strong>%2</strong>. Install boot loader on <strong>%1</strong>. Instalează bootloader-ul pe <strong>%1</strong>. Setting up mount points. Se setează puncte de montare. FinishedPage Form Formular <Restart checkbox tooltip> &Restart now &ReporneÈ™te acum <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>Gata.</h1><br/>%1 a fost instalat pe calculatorul dumneavoastră.<br/>PuteÈ›i reporni noul sistem, sau puteÈ›i continua să folosiÈ›i sistemul de operare portabil %2. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Instalarea a eÈ™uat</h1><br/>%1 nu a mai fost instalat pe acest calculator.<br/>Mesajul de eroare era: %2. FinishedViewStep Finish Termină Setup Complete Installation Complete Instalarea s-a terminat The setup of %1 is complete. The installation of %1 is complete. Instalarea este %1 completă. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatting partition %1 with file system %2. Se formatează partiÈ›ia %1 cu sistemul de fiÈ™iere %2. The installer failed to format partition %1 on disk '%2'. Programul de instalare nu a putut formata partiÈ›ia %1 pe discul „%2â€. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source este alimentat cu curent The system is not plugged in to a power source. Sistemul nu este alimentat cu curent. is connected to the Internet este conectat la Internet The system is not connected to the Internet. Sistemul nu este conectat la Internet. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. Programul de instalare nu rulează cu privilegii de administrator. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. Ecranu este prea mic pentru a afiÈ™a instalatorul. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Konsole nu este instalat Please install KDE Konsole and try again! Trebuie să instalezi KDE Konsole È™i să încerci din nou! Executing script: &nbsp;<code>%1</code> Se execută scriptul: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script Script KeyboardPage Set keyboard model to %1.<br/> Setează modelul tastaturii la %1.<br/> Set keyboard layout to %1/%2. Setează aranjamentul de tastatură la %1/%2. KeyboardViewStep Keyboard Tastatură LCLocaleDialog System locale setting Setările de localizare The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. Setările de localizare ale sistemului afectează limba È™i setul de caractere folosit pentru unele elemente de interfață la linia de comandă.<br/>Setările actuale sunt <strong>%1</strong>. &Cancel &Anulează &OK %Ok LicensePage Form Formular <h1>License Agreement</h1> I accept the terms and conditions above. Sunt de acord cu termenii È™i condiÈ›iile de mai sus. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License Licență LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 driver</strong><br/>de %2 <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 driver grafic</strong><br/><font color="Grey">de %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 plugin de browser</strong><br/><font color="Grey">de %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">de %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 pachet</strong><br/><font color="Grey">de %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">de %2</font> File: %1 Show the license text Open license agreement in browser. Hide license text LocalePage The system language will be set to %1. Limba sistemului va fi %1. The numbers and dates locale will be set to %1. Formatul numerelor È™i datelor calendaristice va fi %1. Region: Regiune: Zone: Zonă: &Change... S&chimbă Set timezone to %1/%2.<br/> Setează fusul orar la %1/%2.<br/> LocaleViewStep Location LocaÈ›ie LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Generează machine-id. Configuration Error No root mount point is set for MachineId. NetInstallPage Name Nume Description Despre Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Instalarea reÈ›elei. (Dezactivat: Nu se pot obÈ›ine listele de pachete, verificaÈ›i conexiunea la reÈ›ea) Network Installation. (Disabled: Received invalid groups data) Instalare prin reÈ›ea. (Dezactivată: S-au recepÈ›ionat grupuri de date invalide) Network Installation. (Disabled: Incorrect configuration) NetInstallViewStep Package selection SelecÈ›ia pachetelor Office software Office package Browser software Browser package Web browser Kernel Services Login Desktop Applications NotesQmlViewStep Notes OEMPage Ba&tch: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> OEMViewStep OEM Configuration Set the OEM Batch Identifier to <code>%1</code>. PWQ Password is too short Parola este prea scurtă Password is too long Parola este prea lungă Password is too weak Parola este prea slabă Memory allocation error when setting '%1' Eroare de alocare a memorie in timpul setării '%1' Memory allocation error Eroare de alocare a memoriei The password is the same as the old one Parola este aceeasi a si cea veche The password is a palindrome Parola este un palindrom The password differs with case changes only Parola diferă doar prin schimbăarii ale majusculelor The password is too similar to the old one Parola este prea similară cu cea vehe The password contains the user name in some form Parola contine numele de utilizator intr-o anume formă The password contains words from the real name of the user in some form Parola contine cuvinte din numele real al utilizatorului intr-o anumita formă The password contains forbidden words in some form Parola contine cuvinte interzise int-o anumita formă The password contains less than %1 digits Parola contine mai putin de %1 caractere The password contains too few digits Parola contine prea putine caractere The password contains less than %1 uppercase letters Parola contine mai putin de %1 litera cu majusculă The password contains too few uppercase letters Parola contine prea putine majuscule The password contains less than %1 lowercase letters Parola contine mai putin de %1 minuscule The password contains too few lowercase letters Parola contine prea putine minuscule The password contains less than %1 non-alphanumeric characters Parola contine mai putin de %1 caractere non-alfanumerice The password contains too few non-alphanumeric characters Parola contine prea putine caractere non-alfanumerice The password is shorter than %1 characters Parola este mai scurta de %1 caractere The password is too short Parola este prea mica The password is just rotated old one Parola este doar cea veche rasturnata The password contains less than %1 character classes Parola contine mai putin de %1 clase de caractere The password does not contain enough character classes Parola nu contine destule clase de caractere The password contains more than %1 same characters consecutively Parola ontine mai mult de %1 caractere identice consecutiv The password contains too many same characters consecutively Parola ontine prea multe caractere identice consecutive The password contains more than %1 characters of the same class consecutively Parola contine mai mult de %1 caractere ale aceleiaÅŸi clase consecutive The password contains too many characters of the same class consecutively Parola contine prea multe caractere ale aceleiaÅŸi clase consecutive The password contains monotonic sequence longer than %1 characters Parola ontine o secventa monotonica mai lunga de %1 caractere The password contains too long of a monotonic character sequence Parola contine o secventa de caractere monotonica prea lunga No password supplied Nicio parola nu a fost furnizata Cannot obtain random numbers from the RNG device Nu s-a putut obtine un numar aleator de la dispozitivul RNG Password generation failed - required entropy too low for settings Generarea parolei a esuat - necesita entropie prea mica pentru setari The password fails the dictionary check - %1 Parola a esuat verificarea dictionarului - %1 The password fails the dictionary check Parola a esuat verificarea dictionarului Unknown setting - %1 Setare necunoscuta - %1 Unknown setting Setare necunoscuta Bad integer value of setting - %1 Valoare gresita integrala a setari - %1 Bad integer value Valoare gresita integrala a setari Setting %1 is not of integer type Setarea %1 nu este de tip integral Setting is not of integer type Setarea nu este de tipul integral Setting %1 is not of string type Setarea %1 nu este de tipul ÅŸir Setting is not of string type Setarea nu este de tipul ÅŸir Opening the configuration file failed Deschiderea fisierului de configuratie a esuat The configuration file is malformed Fisierul de configuratie este malformat Fatal failure Esec fatal Unknown error Eroare necunoscuta Password is empty PackageChooserPage Form Formular Product Name TextLabel EtichetăText Long Product Description Package Selection Please pick a product from the list. The selected product will be installed. PackageChooserViewStep Packages Page_Keyboard Form Formular Keyboard Model: Modelul tastaturii: Type here to test your keyboard TastaÈ›i aici pentru a testa tastatura Page_UserSetup Form Formular What is your name? Cum vă numiÈ›i? What name do you want to use to log in? Ce nume doriÈ›i să utilizaÈ›i pentru logare? Choose a password to keep your account safe. AlegeÈ›i o parolă pentru a menÈ›ine contul în siguranță. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>IntroduceÈ›i parola de 2 ori pentru a se verifica greÈ™elile de tipar. O parolă bună va conÈ›ine o combinaÈ›ie de litere, numere È™i punctuaÈ›ie, ar trebui să aibă cel puÈ›in 8 caractere È™i ar trebui schimbată la intervale regulate.</small> What is the name of this computer? Care este numele calculatorului? Your Full Name login <small>This name will be used if you make the computer visible to others on a network.</small> <small>Numele va fi folosit dacă faceÈ›i acest calculator vizibil pentru alÈ›ii pe o reÈ›ea.</small> Computer Name Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Autentifică-mă automat, fără a-mi cere parola. Use the same password for the administrator account. FoloseÈ™te aceeaÈ™i parolă pentru contul de administrator. Choose a password for the administrator account. Alege o parolă pentru contul de administrator. <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>IntroduceÈ›i parola de 2 ori pentru a se verifica greÈ™elile de tipar.</small> PartitionLabelsView Root Root Home Home Boot Boot EFI system Sistem EFI Swap Swap New partition for %1 Noua partiÈ›ie pentru %1 New partition Noua partiÈ›ie %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space SpaÈ›iu liber New partition PartiÈ›ie nouă Name Nume File System Sistem de fiÈ™iere Mount Point Punct de montare Size Mărime PartitionPage Form Formular Storage de&vice: Dispoziti&v de stocare: &Revert All Changes &Retrage toate schimbările New Partition &Table &Tabelă nouă de partiÈ›ii Cre&ate &Edit &Editează &Delete &Șterge New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group I&nstall boot loader on: Are you sure you want to create a new partition table on %1? Sigur doriÈ›i să creaÈ›i o nouă tabelă de partiÈ›ie pe %1? Can not create new partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. PartitionViewStep Gathering system information... Se adună informaÈ›ii despre sistem... Partitions PartiÈ›ii Install %1 <strong>alongside</strong> another operating system. Instalează %1 <strong>laolaltă</strong> cu un alt sistem de operare. <strong>Erase</strong> disk and install %1. <strong>Șterge</strong> discul È™i instalează %1. <strong>Replace</strong> a partition with %1. <strong>ÃŽnlocuieÈ™te</strong> o partiÈ›ie cu %1. <strong>Manual</strong> partitioning. PartiÈ›ionare <strong>manuală</strong>. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Instalează %1 <strong>laolaltă</strong> cu un alt sistem de operare pe discul <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Șterge</strong> discul <strong>%2</strong> (%3) È™i instalează %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>ÃŽnlocuieÈ™te</strong> o partiÈ›ie pe discul <strong>%2</strong> (%3) cu %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). PartiÈ›ionare <strong>manuală</strong> a discului <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Discul <strong>%1</strong> (%2) Current: Actual: After: După: No EFI system partition configured Nicio partiÈ›ie de sistem EFI nu a fost configurată An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. Este necesară o partiÈ›ie de sistem EFI pentru a porni %1.<br/><br/>Pentru a configura o partiÈ›ie de sistem EFI, reveniÈ›i È™i selectaÈ›i sau creaÈ›i o partiÈ›ie FAT32 cu flag-ul <strong>esp</strong> activat È™i montată la <strong>%2</strong>.<br/><br/>PuteÈ›i continua È™i fără configurarea unei partiÈ›ii de sistem EFI, dar este posibil ca sistemul să nu pornească. EFI system partition flag not set Flag-ul de partiÈ›ie de sistem pentru EFI nu a fost setat An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. O partiÈ›ie de sistem EFI este necesară pentru a porni %1.<br/><br/>A fost configurată o partiÈ›ie cu punct de montare la <strong>%2</strong> dar flag-ul <strong>esp</strong> al acesteia nu a fost setat.<br/>Pentru a seta flag-ul, reveniÈ›i È™i editaÈ›i partiÈ›ia.<br/><br/>PuteÈ›i continua È™i fără setarea flag-ului, dar este posibil ca sistemul să nu pornească. Boot partition not encrypted PartiÈ›ia de boot nu este criptată A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. A fost creată o partiÈ›ie de boot împreună cu o partiÈ›ie root criptată, dar partiÈ›ia de boot nu este criptată.<br/><br/>Sunt potenÈ›iale probleme de securitate cu un astfel de aranjament deoarece importante fiÈ™iere de sistem sunt păstrate pe o partiÈ›ie necriptată.<br/>PuteÈ›i continua dacă doriÈ›i, dar descuierea sistemului se va petrece mai târziu în timpul pornirii.<br/>Pentru a cripta partiÈ›ia de boot, reveniÈ›i È™i recreaÈ›i-o, alegând opÈ›iunea <strong>Criptează</strong> din fereastra de creare de partiÈ›ii. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Job de tip Plasma Look-and-Feel Could not select KDE Plasma Look-and-Feel package Nu s-a putut selecta pachetul pentru KDE Plasma Look-and-Feel PlasmaLnfPage Form Formular Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Alege un aspect pentru KDE Plasma Desktop. Deasemenea poti sari acest pas si configura aspetul odata ce sistemul este instalat. Apasand pe selectia aspectului iti va oferi o previzualizare live al acelui aspect. PlasmaLnfViewStep Look-and-Feel Interfață PreserveFiles Saving files for later ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Nu a existat nici o iesire din comanda Output: Output External command crashed. Comanda externă a eÈ™uat. Command <i>%1</i> crashed. Comanda <i>%1</i> a eÈ™uat. External command failed to start. Comanda externă nu a putut fi pornită. Command <i>%1</i> failed to start. Comanda <i>%1</i> nu a putut fi pornită. Internal error when starting command. Eroare internă la pornirea comenzii. Bad parameters for process job call. Parametri proÈ™ti pentru apelul sarcinii de proces. External command failed to finish. Finalizarea comenzii externe a eÈ™uat. Command <i>%1</i> failed to finish in %2 seconds. Comanda <i>%1</i> nu a putut fi finalizată în %2 secunde. External command finished with errors. Comanda externă finalizată cu erori. Command <i>%1</i> finished with exit code %2. Comanda <i>%1</i> finalizată cu codul de ieÈ™ire %2. QObject Default Keyboard Model Modelul tastaturii implicit Default Implicit unknown necunoscut extended extins unformatted neformatat swap swap Unpartitioned space or unknown partition table SpaÈ›iu nepartiÈ›ionat sau tabelă de partiÈ›ii necunoscută (no mount point) Requirements checking for module <i>%1</i> is complete. %1 (%2) language[name] (country[name]) %1 (%2) No product No description provided. File not found Path <pre>%1</pre> must be an absolute path. Could not create new random file <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form Formular Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. SelectaÈ›i locul în care să instalaÈ›i %1.<br/><font color="red">AtenÈ›ie: </font>aceasta va È™terge toate fiÈ™ierele de pe partiÈ›ia selectată. The selected item does not appear to be a valid partition. Elementul selectat nu pare a fi o partiÈ›ie validă. %1 cannot be installed on empty space. Please select an existing partition. %1 nu poate fi instalat în spaÈ›iul liber. Vă rugăm să alegeÈ›i o partiÈ›ie existentă. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 nu poate fi instalat pe o partiÈ›ie extinsă. Vă rugăm selectaÈ›i o partiÈ›ie primară existentă sau o partiÈ›ie logică. %1 cannot be installed on this partition. %1 nu poate fi instalat pe această partiÈ›ie. Data partition (%1) PartiÈ›ie de date (%1) Unknown system partition (%1) PartiÈ›ie de sistem necunoscută (%1) %1 system partition (%2) %1 partiÈ›ie de sistem (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>PartiÈ›ia %1 este prea mică pentru %2. Vă rugăm selectaÈ›i o partiÈ›ie cu o capacitate de cel puÈ›in %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/>O partiÈ›ie de sistem EFI nu a putut fi găsită nicăieri pe sistem. Vă rugăm să reveniÈ›i È™i să utilizaÈ›i partiÈ›ionarea manuală pentru a seta %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>%1 va fi instalat pe %2.<br/><font color="red">AtenÈ›ie: </font>toate datele de pe partiÈ›ia %2 se vor pierde. The EFI system partition at %1 will be used for starting %2. PartiÈ›ia de sistem EFI de la %1 va fi folosită pentru a porni %2. EFI system partition: PartiÈ›ie de sistem EFI: ResizeFSJob Resize Filesystem Job Invalid configuration The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. Redimensionează partiÈ›ia %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. Programul de instalare nu a redimensionat partiÈ›ia %1 pe discul „%2â€. ResizeVolumeGroupDialog Resize Volume Group ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: Pentru rezultate optime, asiguraÈ›i-vă că acest calculator: System requirements CerinÈ›e de sistem ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> Acest calculator nu satisface cerinÈ›ele minimale pentru instalarea %1.<br/>Instalarea nu poate continua. <a href="#details">Detalii...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. Acest calculator nu satisface unele din cerinÈ›ele recomandate pentru instalarea %1.<br/>Instalarea poate continua, dar unele funcÈ›ii ar putea fi dezactivate. This program will ask you some questions and set up %2 on your computer. Acest program vă va pune mai multe întrebări È™i va seta %2 pe calculatorul dumneavoastră. ScanningDialog Scanning storage devices... Se scanează dispozitivele de stocare... Partitioning PartiÈ›ionare SetHostNameJob Set hostname %1 Setează hostname %1 Set hostname <strong>%1</strong>. SetaÈ›i un hostname <strong>%1</strong>. Setting hostname %1. Se setează hostname %1. Internal Error Eroare internă Cannot write hostname to target system Nu se poate scrie hostname pe sistemul È›intă SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Setează modelul de tastatură la %1, cu aranjamentul %2-%3 Failed to write keyboard configuration for the virtual console. Nu s-a reuÈ™it scrierea configuraÈ›iei de tastatură pentru consola virtuală. Failed to write to %1 Nu s-a reuÈ™it scrierea %1 Failed to write keyboard configuration for X11. Nu s-a reuÈ™it scrierea configuraÈ›iei de tastatură pentru X11. Failed to write keyboard configuration to existing /etc/default directory. Nu s-a reuÈ™it scrierea configuraÈ›iei de tastatură în directorul existent /etc/default. SetPartFlagsJob Set flags on partition %1. Setează flag-uri pentru partiÈ›ia %1. Set flags on %1MiB %2 partition. Set flags on new partition. Setează flagurile pe noua partiÈ›ie. Clear flags on partition <strong>%1</strong>. Șterge flag-urile partiÈ›iei <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Elimină flagurile pentru noua partiÈ›ie. Flag partition <strong>%1</strong> as <strong>%2</strong>. Marchează partiÈ›ia <strong>%1</strong> cu flag-ul <strong>%2</strong>. Flag new partition as <strong>%1</strong>. Marchează noua partiÈ›ie ca <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Se È™terg flag-urile pentru partiÈ›ia <strong>%1</strong>. Clearing flags on new partition. Se elimină flagurile de pe noua partiÈ›ie. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Se setează flag-urile <strong>%2</strong> pentru partiÈ›ia <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. Se setează flagurile <strong>%1</strong> pe noua partiÈ›ie. The installer failed to set flags on partition %1. Programul de instalare a eÈ™uat în setarea flag-urilor pentru partiÈ›ia %1. SetPasswordJob Set password for user %1 Setează parola pentru utilizatorul %1 Setting password for user %1. Se setează parola pentru utilizatorul %1. Bad destination system path. Cale de sistem destinaÈ›ie proastă. rootMountPoint is %1 rootMountPoint este %1 Cannot disable root account. Nu pot dezactiva contul root passwd terminated with error code %1. eroare la setarea parolei cod %1 Cannot set password for user %1. Nu se poate seta parola pentru utilizatorul %1. usermod terminated with error code %1. usermod s-a terminat cu codul de eroare %1. SetTimezoneJob Set timezone to %1/%2 Setează fusul orar la %1/%2 Cannot access selected timezone path. Nu se poate accesa calea fusului selectat. Bad path: %1 Cale proastă: %1 Cannot set timezone. Nu se poate seta fusul orar. Link creation failed, target: %1; link name: %2 Crearea legăturii eÈ™uată, È›inta: %1; numele legăturii: 2 Cannot set timezone, Nu se poate seta fusul orar, Cannot open /etc/timezone for writing Nu se poate deschide /etc/timezone pentru scriere ShellProcessJob Shell Processes Job Shell-ul procesează sarcina. SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. Acesta este un rezumat a ce se va întâmpla după ce începeÈ›i procedura de instalare. SummaryViewStep Summary Sumar TrackingInstallJob Installation feedback Feedback pentru instalare Sending installation feedback. Trimite feedback pentru instalare Internal error in install-tracking. Eroare internă în gestionarea instalării. HTTP request timed out. Requestul HTTP a atins time out. TrackingMachineNeonJob Machine feedback Feedback pentru maÈ™ină Configuring machine feedback. Se configurează feedback-ul pentru maÈ™ină Error in machine feedback configuration. Eroare în configuraÈ›ia de feedback pentru maÈ™ină. Could not configure machine feedback correctly, script error %1. Nu s-a putut configura feedback-ul pentru maÈ™ină în mod corect, eroare de script %1 Could not configure machine feedback correctly, Calamares error %1. Nu s-a putut configura feedback-ul pentru maÈ™ină în mod corect, eroare Calamares %1. TrackingPage Form Formular Placeholder Substituent <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>Prin selectarea acestei opÈ›iuni <span style=" font-weight:600;">nu vei trimite nicio informaÈ›ie</span> vei trimite informaÈ›ii despre instalare.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Clic aici pentru mai multe informaÈ›ii despre feedback-ul de la utilizatori</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. Urmărirea instalărilor ajută %1 să măsoare numărul de utilizatori, hardware-ul pe care se instalează %1 È™i (cu ajutorul celor două opÈ›iuni de mai jos) poate obÈ›ine informaÈ›ii în mod continuu despre aplicaÈ›iile preferate. Pentru a vedea ce informaÈ›ii se trimit, clic pe pictograma de ajutor din dreptul fiecărei zone. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. Alegând să trimiÈ›i aceste informaÈ›ii despre instalare È™i hardware vei trimite aceste informaÈ›ii <b>o singură dată</b> după finalizarea instalării. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. Prin această alegere vei trimite informaÈ›ii despre instalare, hardware È™i aplicaÈ›ii în mod <b>periodic</b>. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. Prin această alegere vei trimite informaÈ›ii în mod <b>regulat</b> despre instalare, hardware, aplicaÈ›ii È™i tipare de utilizare la %1. TrackingViewStep Feedback Feedback UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> Your username is too long. Numele de utilizator este prea lung. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Only letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Hostname este prea scurt. Your hostname is too long. Hostname este prea lung. Your passwords do not match! Parolele nu se potrivesc! UsersViewStep Users Utilizatori VariantModel Key Value Valoare VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB MiB Total Size: Used Size: Total Sectors: Quantity of LVs: WelcomePage Form Formular Select application and system language Open donations website &Donate Open help and support website Open issues and bug-tracking website Open release notes website &Release notes &Note asupra ediÈ›iei &Known issues &Probleme cunoscute &Support &Suport &About &Despre <h1>Welcome to the %1 installer.</h1> <h1>Bine aÈ›i venit la programul de instalare pentru %1.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Bun venit în programul de instalare Calamares pentru %1.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Welcome to %1 setup.</h1> About %1 setup About %1 installer Despre programul de instalare %1 <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support %1 suport WelcomeQmlViewStep Welcome Bine aÈ›i venit WelcomeViewStep Welcome Bine aÈ›i venit notesqml <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> About Support Known issues Release notes Donate calamares-3.2.20/lang/calamares_ru.ts000066400000000000000000006056301362604102500174660ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. <strong>Среда загрузки</strong> данной ÑиÑтемы.<br><br>Старые ÑиÑтемы x86 поддерживают только <strong>BIOS</strong>.<br>Современные ÑиÑтемы обычно иÑпользуют <strong>EFI</strong>, но также могут имитировать BIOS, еÑли Ñреда загрузки запущена в режиме ÑовмеÑтимоÑти. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. Эта ÑиÑтема иÑпользует Ñреду загрузки <strong>EFI</strong>.<br><br>Чтобы наÑтроить запуÑк из под Ñреды EFI, уÑтановщик иÑпользует Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸, такое как <strong>GRUB</strong> или <strong>systemd-boot</strong> на <strong>ÑиÑтемном разделе EFI</strong>. ПроцеÑÑ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ð·Ð¸Ñ€Ð¾Ð²Ð°Ð½, но вы можете иÑпользовать ручной режим, где вы Ñами будете должны выбрать или Ñоздать его. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. Эта ÑиÑтема запущена в <strong>BIOS</strong> Ñреде загрузки.<br><br> Чтобы наÑтроить запуÑк из под Ñреды BIOS, уÑтановщик должен уÑтановить загручик, такой как <strong>GRUB</strong>, либо в начале раздела, либо в <strong>Master Boot Record</strong>, находÑщийÑÑ Ð² начале таблицы разделов (по умолчанию). ПроцеÑÑ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ð·Ð¸Ñ€Ð¾Ð²Ð°Ð½, но вы можете выбрать ручной режим, где будете должны наÑтроить его Ñами. BootLoaderModel Master Boot Record of %1 Ð“Ð»Ð°Ð²Ð½Ð°Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·Ð¾Ñ‡Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ %1 Boot Partition Загрузочный раздел System Partition СиÑтемный раздел Do not install a boot loader Ðе уÑтанавливать загрузчик %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page ПуÑÑ‚Ð°Ñ Ñтраница Calamares::DebugWindow Form Форма GlobalStorage Глобальное хранилище JobQueue Очередь заданий Modules Модули Type: Тип: none нет Interface: ИнтерфейÑ: Tools ИнÑтрументы Reload Stylesheet Перезагрузить таблицу Ñтилей Widget Tree Debug information ÐžÑ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Calamares::ExecutionViewStep Set up Install УÑтановить Calamares::FailJob Job failed (%1) Задание не уÑпешно (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Готово Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 ВыполнÑетÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° %1 %2 Calamares::PythonJob Running %1 operation. ВыполнÑетÑÑ Ð´ÐµÐ¹Ñтвие %1. Bad working directory path Ðеверный путь к рабочему каталогу Working directory %1 for python job %2 is not readable. Рабочий каталог %1 Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ñ‡Ð¸ python %2 недоÑтупен Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ. Bad main script file Ошибочный главный файл ÑÑ†ÐµÐ½Ð°Ñ€Ð¸Ñ Main script file %1 for python job %2 is not readable. Главный файл ÑÑ†ÐµÐ½Ð°Ñ€Ð¸Ñ %1 Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ñ‡Ð¸ python %2 недоÑтупен Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ. Boost.Python error in job "%1". Boost.Python ошибка в задаче "%1". Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Проверка ÑоответÑÑ‚Ð²Ð¸Ñ ÑиÑтемным требованиÑм завершена. Calamares::ViewManager &Back &Ðазад &Next &Далее &Cancel О&тмена Cancel setup without changing the system. Отменить уÑтановку без Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑиÑтемы. Cancel installation without changing the system. Отменить уÑтановку без Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑиÑтемы. Setup Failed Сбой уÑтановки Would you like to paste the install log to the web? Install Log Paste URL The upload was unsuccessful. No web-paste was done. Calamares Initialization Failed Ошибка инициализации Calamares %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. Ðе удалоÑÑŒ уÑтановить %1. Calamares не удалоÑÑŒ загрузить вÑе Ñконфигурированные модули. Эта проблема вызвана тем, как ваш диÑтрибутив иÑпользует Calamares. <br/>The following modules could not be loaded: <br/>Ðе удалоÑÑŒ загрузить Ñледующие модули: Continue with installation? Продолжить уÑтановку? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> Программа уÑтановки %1 готова внеÑти Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð½Ð° Ваш диÑк, чтобы уÑтановить %2.<br/><strong>Отменить Ñти Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð±ÑƒÐ´ÐµÑ‚ невозможно.</strong> &Set up now &Set up &Install &УÑтановить Setup is complete. Close the setup program. УÑтановка завершена. Закройте программу уÑтановки. Cancel setup? Отменить уÑтановку? Cancel installation? Отменить уÑтановку? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Прервать процеÑÑ ÑƒÑтановки? Программа уÑтановки прекратит работу и вÑе Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð±ÑƒÐ´ÑƒÑ‚ потерÑны. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. ДейÑтвительно прервать процеÑÑ ÑƒÑтановки? Программа уÑтановки Ñразу прекратит работу, вÑе Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð±ÑƒÐ´ÑƒÑ‚ потерÑны. &Yes &Да &No &Ðет &Close &Закрыть Continue with setup? Продолжить уÑтановку? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> Программа уÑтановки %1 готова внеÑти Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð½Ð° Ваш диÑк, чтобы уÑтановить %2.<br/><strong>Отменить Ñти Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð±ÑƒÐ´ÐµÑ‚ невозможно.</strong> &Install now ПриÑтупить к &уÑтановке Go &back &Ðазад &Done &Готово The installation is complete. Close the installer. УÑтановка завершена. Закройте уÑтановщик. Error Ошибка Installation Failed УÑтановка завершилаÑÑŒ неудачей CalamaresPython::Helper Unknown exception type ÐеизвеÑтный тип иÑÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ unparseable Python error неподдающаÑÑÑ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐµ ошибка Python unparseable Python traceback неподдающийÑÑ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐµ traceback Python Unfetchable Python error. ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° Python CalamaresUtils Install log posted to: %1 CalamaresWindow %1 Setup Program Программа уÑтановки %1 %1 Installer Программа уÑтановки %1 Show debug information Показать отладочную информацию CheckerContainer Gathering system information... Сбор информации о ÑиÑтеме... ChoicePage Form Форма After: ПоÑле: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Ð ÑƒÑ‡Ð½Ð°Ñ Ñ€Ð°Ð·Ð¼ÐµÑ‚ÐºÐ°</strong><br/>Ð’Ñ‹ можете ÑамоÑтоÑтельно Ñоздавать разделы или изменÑть их размеры. Boot loader location: РаÑположение загрузчика: Select storage de&vice: Выбрать уÑтройÑтво &хранениÑ: Current: Текущий: Reuse %1 as home partition for %2. ИÑпользовать %1 как домашний раздел Ð´Ð»Ñ %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Выберите раздел Ð´Ð»Ñ ÑƒÐ¼ÐµÐ½ÑŒÑˆÐµÐ½Ð¸Ñ, затем двигайте ползунок, изменÑÑ Ñ€Ð°Ð·Ð¼ÐµÑ€</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 будет уменьшен до %2MB и новый раздел %3MB будет Ñоздан Ð´Ð»Ñ %4. <strong>Select a partition to install on</strong> <strong>Выберите раздел Ð´Ð»Ñ ÑƒÑтановки</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Ðе найдено ÑиÑтемного раздела EFI. ПожалуйÑта, вернитеÑÑŒ назад и выполните ручную разметку %1. The EFI system partition at %1 will be used for starting %2. СиÑтемный раздел EFI на %1 будет иÑпользован Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑка %2. EFI system partition: СиÑтемный раздел EFI: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Видимо, на Ñтом уÑтройÑтве нет операционной ÑиÑтемы. Что Ð’Ñ‹ хотите Ñделать?<br/>Ð’Ñ‹ Ñможете изменить или подтвердить Ñвой выбор до того, как на уÑтройÑтве будут Ñделаны какие-либо изменениÑ. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Стереть диÑк</strong><br/>Это <font color="red">удалит</font> вÑе данные, которые ÑÐµÐ¹Ñ‡Ð°Ñ Ð½Ð°Ñ…Ð¾Ð´ÑÑ‚ÑÑ Ð½Ð° выбранном уÑтройÑтве. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Ðа Ñтом уÑтройÑтве еÑть %1. Что Ð’Ñ‹ хотите Ñделать?<br/>Ð’Ñ‹ Ñможете изменить или подтвердить Ñвой выбор до того, как на уÑтройÑтве будут Ñделаны какие-либо изменениÑ. No Swap Без раздела подкачки Reuse Swap ИÑпользовать ÑущеÑтвующий раздел подкачки Swap (no Hibernate) Swap (with Hibernate) Swap to file <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>УÑтановить Ñ€Ñдом</strong><br/>Программа уÑтановки уменьшит раздел, чтобы оÑвободить меÑто Ð´Ð»Ñ %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Заменить раздел</strong><br/>МенÑет раздел на %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Ðа Ñтом уÑтройÑтве уже еÑть Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð°Ñ ÑиÑтема. Что Ð’Ñ‹ хотите Ñделать?<br/>Ð’Ñ‹ Ñможете изменить или подтвердить Ñвой выбор до того, как на уÑтройÑтве будут Ñделаны какие-либо изменениÑ. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Ðа Ñтом уÑтройÑтве еÑть неÑколько операционных ÑиÑтем. Что Ð’Ñ‹ хотите Ñделать?<br/>Ð’Ñ‹ Ñможете изменить или подтвердить Ñвой выбор до того, как на уÑтройÑтве будут Ñделаны какие-либо изменениÑ. ClearMountsJob Clear mounts for partitioning operations on %1 ОÑвободить точки Ð¼Ð¾Ð½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð¼ÐµÑ‚ÐºÐ¸ на %1 Clearing mounts for partitioning operations on %1. ОÑвобождаютÑÑ Ñ‚Ð¾Ñ‡ÐºÐ¸ Ð¼Ð¾Ð½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð¼ÐµÑ‚ÐºÐ¸ на %1. Cleared all mounts for %1 ОÑвобождены вÑе точки Ð¼Ð¾Ð½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ %1 ClearTempMountsJob Clear all temporary mounts. ОÑвободить вÑе временные точки монтированиÑ. Clearing all temporary mounts. ОÑвобождаютÑÑ Ð²Ñе временные точки монтированиÑ. Cannot get list of temporary mounts. Ðе удалоÑÑŒ получить ÑпиÑок временных точек монтированиÑ. Cleared all temporary mounts. ОÑвобождены вÑе временные точки монтированиÑ. CommandList Could not run command. Ðе удалоÑÑŒ выполнить команду. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. Команда выполнÑетÑÑ Ð² окружении уÑтановщика, и ей необходимо знать путь корневого раздела, но rootMountPoint не определено. The command needs to know the user's name, but no username is defined. Команде необходимо знать Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ, но оно не задано. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Создать раздел MiB МиБ Partition &Type: &Тип раздела: &Primary &ОÑновной E&xtended &РаÑширенный Fi&le System: &Ð¤Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема: LVM LV name Ð˜Ð¼Ñ LV LVM Flags: Флаги: &Mount Point: Точка &Ð¼Ð¾Ð½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Si&ze: Ра&змер: En&crypt Ши&фровать Logical ЛогичеÑкий Primary ОÑновной GPT GPT Mountpoint already in use. Please select another one. Точка Ð¼Ð¾Ð½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÑƒÐ¶Ðµ занÑта. ПожалуйÑта, выберете другую. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Создать новый раздел %2 MB на %4 (%3) Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¾Ð¹ ÑиÑтемой %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Создать новый раздел <strong>%2 MB</strong> на <strong>%4</strong> (%3) Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¾Ð¹ ÑиÑтемой <strong>%1</strong>. Creating new %1 partition on %2. СоздаетÑÑ Ð½Ð¾Ð²Ñ‹Ð¹ %1 раздел на %2. The installer failed to create partition on disk '%1'. Программа уÑтановки не Ñмогла Ñоздать раздел на диÑке '%1'. CreatePartitionTableDialog Create Partition Table Создать таблицу разделов Creating a new partition table will delete all existing data on the disk. При Ñоздании новой таблицы разделов будут удалены вÑе данные на диÑке. What kind of partition table do you want to create? Какой тип таблицы разделов Ð’Ñ‹ желаете Ñоздать? Master Boot Record (MBR) Ð“Ð»Ð°Ð²Ð½Ð°Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·Ð¾Ñ‡Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ (MBR) GUID Partition Table (GPT) Таблица разделов GUID (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Создать новую таблицу разделов %1 на %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Создать новую таблицу разделов <strong>%1</strong> на <strong>%2</strong> (%3). Creating new %1 partition table on %2. СоздаетÑÑ Ð½Ð¾Ð²Ð°Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° разделов %1 на %2. The installer failed to create a partition table on %1. Программа уÑтановки не Ñмогла Ñоздать таблицу разделов на %1. CreateUserJob Create user %1 Создать учетную запиÑÑŒ %1 Create user <strong>%1</strong>. Создать учетную запиÑÑŒ <strong>%1</strong>. Creating user %1. СоздаетÑÑ ÑƒÑ‡ÐµÑ‚Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ %1. Sudoers dir is not writable. Каталог sudoers не доÑтупен Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи. Cannot create sudoers file for writing. Ðе удалоÑÑŒ запиÑать файл sudoers. Cannot chmod sudoers file. Ðе удалоÑÑŒ применить chmod к файлу sudoers. Cannot open groups file for reading. Ðе удалоÑÑŒ открыть файл groups Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ. CreateVolumeGroupDialog Create Volume Group Создать группу томов CreateVolumeGroupJob Create new volume group named %1. Создать новую группу томов на диÑке %1 Create new volume group named <strong>%1</strong>. Создать новую группу томов на диÑке %1 Creating new volume group named %1. Cоздание новой группы томов на диÑке %1 The installer failed to create a volume group named '%1'. Программа уÑтановки не Ñмогла Ñоздать группу томов на диÑке '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. Удалить раздел %1. Delete partition <strong>%1</strong>. Удалить раздел <strong>%1</strong>. Deleting partition %1. УдалÑетÑÑ Ñ€Ð°Ð·Ð´ÐµÐ» %1. The installer failed to delete partition %1. Программе уÑтановки не удалоÑÑŒ удалить раздел %1. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. Тип <strong>таблицы разделов</strong> на выбраном уÑтройÑтве хранениÑ.<br><br>Смена типа раздела возможна только путем ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¸ переÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð²Ñей таблицы разделов, что уничтожит вÑе данные на уÑтройÑтве.<br>Этот уÑтановщик не затронет текущую таблицу разделов, кроме как вы Ñами решите иначе.<br>По умолчанию, Ñовременные ÑиÑтемы иÑпользуют GPT-разметку. This device has a <strong>%1</strong> partition table. Ðа Ñтом уÑтройÑтве имеетÑÑ <strong>%1</strong> таблица разделов. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. Это <strong>loop</strong> уÑтройÑтво.<br><br>Это пÑевдо-уÑтройÑтво без таблицы разделов позволÑет иÑпользовать обычный файл как блочное уÑтройÑтво. При таком виде Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¾Ð±Ñ‹Ñ‡Ð½Ð¾ имеетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ одна Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. Программа уÑтановки <strong>не обнаружила таблицы разделов</strong> на выбранном уÑтройÑтве хранениÑ.<br><br>Ðа Ñтом уÑтройÑтве либо нет таблицы разделов, либо она повреждена, либо неизвеÑтного типа.<br>Эта программа уÑтановки может Ñоздать Ð´Ð»Ñ Ð’Ð°Ñ Ð½Ð¾Ð²ÑƒÑŽ таблицу разделов автоматичеÑки или через Ñтраницу ручной разметки. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Это рекомендуемый тип таблицы разделов Ð´Ð»Ñ Ñовременных ÑиÑтем, которые иÑпользуют окружение <strong>EFI</strong> Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. <br><br>Этот тип таблицы разделов рекомендуетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ Ñтарых ÑиÑтем, запуÑкаемых из Ñреды загрузки <strong>BIOS</strong>. Ð’ большинÑтве Ñлучаев вмеÑто Ñтого лучше иÑпользовать GPT.<br><br><strong>Внимание:</strong> MBR Ñтандарт таблицы разделов ÑвлÑетÑÑ ÑƒÑтаревшим.<br>Он допуÑкает макÑимум 4 <em>первичных</em> раздела, только один из них может быть <em>раÑширенным</em> и Ñодержать много <em>логичеÑких</em> под-разделов. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1 - (%2) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 ЗапиÑать LUKS наÑтройки Ð´Ð»Ñ Dracut в %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted ПропуÑтить Ñохранение LUKS наÑтроек Ð´Ð»Ñ Dracut: "/" раздел не зашифрован Failed to open %1 Ðе удалоÑÑŒ открыть %1 DummyCppJob Dummy C++ Job Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Редактировать ÑущеÑтвующий раздел Content: Содержит: &Keep О&Ñтавить Format Форматировать Warning: Formatting the partition will erase all existing data. Внимание: Форматирование раздела уничтожит вÑе данные. &Mount Point: Точка &монтированиÑ: Si&ze: Ра&змер: MiB МиБ Fi&le System: &Ð¤Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема: Flags: Флаги: Mountpoint already in use. Please select another one. Точка Ð¼Ð¾Ð½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÑƒÐ¶Ðµ занÑта. ПожалуйÑта, выберете другую. EncryptWidget Form Форма En&crypt system СиÑтема &ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Passphrase Пароль Confirm passphrase Подтвердите пароль Please enter the same passphrase in both boxes. ПожалуйÑта, введите один и тот же пароль в оба полÑ. FillGlobalStorageJob Set partition information УÑтановить ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ разделе Install %1 on <strong>new</strong> %2 system partition. УÑтановить %1 на <strong>новый</strong> ÑиÑтемный раздел %2. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. ÐаÑтроить <strong>новый</strong> %2 раздел Ñ Ñ‚Ð¾Ñ‡ÐºÐ¾Ð¹ Ð¼Ð¾Ð½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. УÑтановить %2 на %3 ÑиÑтемный раздел <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. ÐаÑтроить %3 раздел <strong>%1</strong> Ñ Ñ‚Ð¾Ñ‡ÐºÐ¾Ð¹ Ð¼Ð¾Ð½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ <strong>%2</strong>. Install boot loader on <strong>%1</strong>. УÑтановить загрузчик на <strong>%1</strong>. Setting up mount points. ÐаÑтраиваютÑÑ Ñ‚Ð¾Ñ‡ÐºÐ¸ монтированиÑ. FinishedPage Form Ð“ÐµÐ¾Ð¼ÐµÑ‚Ñ€Ð¸Ñ <Restart checkbox tooltip> <Restart checkbox tooltip> &Restart now П&ерезагрузить <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>Готово.</h1><br/>СиÑтема %1 уÑтановлена на ваш компьютер.<br/>Можете перезагрузить компьютер и начать иÑпользовать вашу новую ÑиÑтему. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <html><head/><body><p>ЕÑли Ñтот флажок уÑтановлен, ваша ÑиÑтема будет перезагружена Ñразу поÑле Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ ÐºÐ½Ð¾Ð¿ÐºÐ¸ <span style="font-style:italic;">Готово</span> или Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹ уÑтановки.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>Готово.</h1><br/>СиÑтема %1 уÑтановлена на Ваш компьютер.<br/>Ð’Ñ‹ можете перезагрузить компьютер и иÑпользовать Вашу новую ÑиÑтему или продолжить работу в Live окружении %2. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <html><head/><body><p>ЕÑли Ñтот флажок уÑтановлен, ваша ÑиÑтема будет перезагружена Ñразу поÑле Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ ÐºÐ½Ð¾Ð¿ÐºÐ¸ <span style=" font-style:italic;">Готово</span> или Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹ уÑтановки.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Сбой уÑтановки</h1><br/>СиÑтема %1 не была уÑтановлена на ваш компьютер.<br/>Сообщение об ошибке: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Сбой уÑтановки</h1><br/>Ðе удалоÑÑŒ уÑтановить %1 на ваш компьютер.<br/>Сообщение об ошибке: %2. FinishedViewStep Finish Завершить Setup Complete УÑтановка завершена Installation Complete УÑтановка завершена The setup of %1 is complete. УÑтановка %1 завершена. The installation of %1 is complete. УÑтановка %1 завершена. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Форматировать раздел %1 (Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема: %2, размер: %3 МБ) на %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Форматировать раздел <strong>%1</strong> размером <strong>%3MB</strong> Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¾Ð¹ ÑиÑтемой <strong>%2</strong>. Formatting partition %1 with file system %2. ФорматируетÑÑ Ñ€Ð°Ð·Ð´ÐµÐ» %1 под файловую ÑиÑтему %2. The installer failed to format partition %1 on disk '%2'. Программе уÑтановки не удалоÑÑŒ отформатировать раздел %1 на диÑке '%2'. GeneralRequirements has at least %1 GiB available drive space доÑтупно как минимум %1 ГБ Ñвободного диÑкового проÑтранÑтва There is not enough drive space. At least %1 GiB is required. ÐедоÑтаточно меÑта на диÑках. Ðеобходимо как минимум %1 ГБ. has at least %1 GiB working memory доÑтупно как минимум %1 ГБ оперативной памÑти The system does not have enough working memory. At least %1 GiB is required. ÐедоÑтаточно оперативной памÑти. Ðеобходимо как минимум %1 ГБ. is plugged in to a power source подключено Ñетевое питание The system is not plugged in to a power source. Сетевое питание не подключено. is connected to the Internet приÑутÑтвует выход в Ñеть Интернет The system is not connected to the Internet. ОтÑутÑтвует выход в Интернет. is running the installer as an administrator (root) The setup program is not running with administrator rights. Программа уÑтановки запущена без прав админиÑтратора. The installer is not running with administrator rights. Программа уÑтановки не запущена Ñ Ð¿Ñ€Ð¸Ð²Ð¸Ð»ÐµÐ³Ð¸Ñми админиÑтратора. has a screen large enough to show the whole installer The screen is too small to display the setup program. Экран Ñлишком маленький, чтобы отобразить программу уÑтановки. The screen is too small to display the installer. Слишком маленький Ñкран Ð´Ð»Ñ Ð¾ÐºÐ½Ð° уÑтановщика. HostInfoJob Collecting information about your machine. Сбор информации о вашем компьютере. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Ðе удалоÑÑŒ Ñоздать директории <code>%1</code>. Could not open file <code>%1</code>. Ðе удалоÑÑŒ открыть файл <code>%1</code>. Could not write to file <code>%1</code>. Ðе удалаÑÑŒ запиÑÑŒ в файл <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. Создание initramfs при помощи mkinitcpio. InitramfsJob Creating initramfs. Создание initramfs. InteractiveTerminalPage Konsole not installed Программа Konsole не уÑтановлена Please install KDE Konsole and try again! УÑтановите KDE Konsole и попробуйте ещё раз! Executing script: &nbsp;<code>%1</code> ВыполнÑетÑÑ Ñценарий: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script Скрипт KeyboardPage Set keyboard model to %1.<br/> УÑтановить модель клавиатуры на %1.<br/> Set keyboard layout to %1/%2. УÑтановить раÑкладку клавиатуры на %1/%2. KeyboardViewStep Keyboard Клавиатура LCLocaleDialog System locale setting Общие региональные наÑтройки The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. Общие региональные наÑтройки влиÑÑŽÑ‚ на Ñзык и кодировку Ð´Ð»Ñ Ð¾Ñ‚Ð´ÐµÐ»ÑŒÐ½Ñ‹Ñ… Ñлементов интерфейÑа командной Ñтроки.<br/>Текущий выбор <strong>%1</strong>. &Cancel О&тмена &OK &ОК LicensePage Form Форма <h1>License Agreement</h1> <h1>Лицензионное Ñоглашение</h1> I accept the terms and conditions above. Я принимаю приведенные выше уÑловиÑ. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License Ð›Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>драйвер %1</strong><br/>от %2 <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>видео драйвер %1</strong><br/><font color="Grey">от %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>плагин браузера %1</strong><br/><font color="Grey">от %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>кодек %1</strong><br/><font color="Grey">от %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>пакет %1</strong><br/><font color="Grey">от %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">от %2</font> File: %1 Файл: %1 Show the license text Показать текÑÑ‚ лицензии Open license agreement in browser. Открыть лицензионное Ñоглашение в браузере. Hide license text Скрыть текÑÑ‚ лицензии LocalePage The system language will be set to %1. СиÑтемным Ñзыком будет уÑтановлен %1. The numbers and dates locale will be set to %1. Региональным форматом чиÑел и дат будет уÑтановлен %1. Region: Регион: Zone: Зона: &Change... И&зменить... Set timezone to %1/%2.<br/> УÑтановить чаÑовой поÑÑ Ð½Ð° %1/%2.<br/> LocaleViewStep Location МеÑтоположение LuksBootKeyFileJob Configuring LUKS key file. ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° ключа LUKS. No partitions are defined. Разделы не были заданы. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Корневой раздел %1 Ñто LUKS, но ключ ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ðµ был задан. Could not create LUKS key file for root partition %1. Ðе удалоÑÑŒ Ñоздать файл ключа LUKS Ð´Ð»Ñ ÐºÐ¾Ñ€Ð½ÐµÐ²Ð¾Ð³Ð¾ раздела %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Configuration Error No root mount point is set for MachineId. NetInstallPage Name Ð˜Ð¼Ñ Description ОпиÑание Network Installation. (Disabled: Unable to fetch package lists, check your network connection) УÑтановка по Ñети. (Отключено: не удаетÑÑ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒ ÑпиÑок пакетов, проверьте Ñетевое подключение) Network Installation. (Disabled: Received invalid groups data) УÑтановка по Ñети. (Отключено: получены неверные ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ группах) Network Installation. (Disabled: Incorrect configuration) NetInstallViewStep Package selection Выбор пакетов Office software Office package Browser software Browser package Web browser Веб-браузер Kernel Ядро Services Login Desktop Applications ÐŸÑ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ NotesQmlViewStep Notes OEMPage Ba&tch: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> OEMViewStep OEM Configuration Set the OEM Batch Identifier to <code>%1</code>. PWQ Password is too short Слишком короткий пароль Password is too long Слишком длинный пароль Password is too weak Пароль Ñлишком Ñлабый Memory allocation error when setting '%1' Ошибка Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ð°Ð¼Ñти при уÑтановке «%1» Memory allocation error Ошибка Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ð°Ð¼Ñти The password is the same as the old one Пароль такой же, как и Ñтарый The password is a palindrome Пароль ÑвлÑетÑÑ Ð¿Ð°Ð»Ð¸Ð½Ð´Ñ€Ð¾Ð¼Ð¾Ð¼ The password differs with case changes only Пароль отличаетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ региÑтром Ñимволов The password is too similar to the old one Пароль Ñлишком похож на Ñтарый The password contains the user name in some form Пароль Ñодержит Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ The password contains words from the real name of the user in some form Пароль Ñодержит Ñлова из реального имени Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ The password contains forbidden words in some form Пароль Ñодержит запрещённые Ñлова The password contains less than %1 digits Пароль Ñодержит менее %1 цифр The password contains too few digits Ð’ пароле Ñлишком мало цифр The password contains less than %1 uppercase letters Пароль Ñодержит менее %1 заглавных букв The password contains too few uppercase letters Ð’ пароле Ñлишком мало заглавных букв The password contains less than %1 lowercase letters Пароль Ñодержит менее %1 Ñтрочных букв The password contains too few lowercase letters Ð’ пароле Ñлишком мало Ñтрочных букв The password contains less than %1 non-alphanumeric characters Пароль Ñодержит менее %1 не буквенно-цифровых Ñимволов The password contains too few non-alphanumeric characters Ð’ пароле Ñлишком мало не буквенно-цифровых Ñимволов The password is shorter than %1 characters Пароль короче %1 Ñимволов The password is too short Пароль Ñлишком короткий The password is just rotated old one Ðовый пароль — Ñто проÑто перевёрнутый Ñтарый The password contains less than %1 character classes Пароль Ñодержит менее %1 клаÑÑов Ñимволов The password does not contain enough character classes Пароль Ñодержит недоÑтаточно клаÑÑов Ñимволов The password contains more than %1 same characters consecutively Пароль Ñодержит более %1 одинаковых поÑледовательных Ñимволов The password contains too many same characters consecutively Пароль Ñодержит Ñлишком много одинаковых поÑледовательных Ñимволов The password contains more than %1 characters of the same class consecutively Пароль Ñодержит более %1 Ñимволов одного и того же клаÑÑа поÑледовательно The password contains too many characters of the same class consecutively Пароль Ñодержит Ñлишком длинную поÑледовательноÑть Ñимволов одного и того же клаÑÑа The password contains monotonic sequence longer than %1 characters Пароль Ñодержит монотонную поÑледовательноÑть длиннее %1 Ñимволов The password contains too long of a monotonic character sequence Пароль Ñодержит Ñлишком длинную монотонную поÑледовательноÑть Ñимволов No password supplied Ðе задан пароль Cannot obtain random numbers from the RNG device Ðе удаётÑÑ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒ Ñлучайные чиÑла Ñ ÑƒÑтройÑтва RNG Password generation failed - required entropy too low for settings The password fails the dictionary check - %1 Пароль не прошёл проверку на иÑпользование Ñловарных Ñлов - %1 The password fails the dictionary check Пароль не прошёл проверку на иÑпользование Ñловарных Ñлов Unknown setting - %1 ÐеизвеÑÑ‚Ð½Ð°Ñ Ð½Ð°Ñтройка - %1 Unknown setting ÐеизвеÑÑ‚Ð½Ð°Ñ Ð½Ð°Ñтройка Bad integer value of setting - %1 ÐедопуÑтимое целое значение ÑвойÑтва - %1 Bad integer value ÐедопуÑтимое целое значение Setting %1 is not of integer type ÐаÑтройка %1 не ÑвлÑетÑÑ Ñ†ÐµÐ»Ñ‹Ð¼ чиÑлом Setting is not of integer type ÐаÑтройка не ÑвлÑетÑÑ Ñ†ÐµÐ»Ñ‹Ð¼ чиÑлом Setting %1 is not of string type ÐаÑтройка %1 не ÑвлÑетÑÑ Ñтрокой Setting is not of string type ÐаÑтройка не ÑвлÑетÑÑ Ñтрокой Opening the configuration file failed Ðе удалоÑÑŒ открыть конфигурационный файл The configuration file is malformed Ошибка в Ñтруктуре конфигурационного файла Fatal failure Фатальный Ñбой Unknown error ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° Password is empty ПуÑтой пароль PackageChooserPage Form Форма Product Name TextLabel Long Product Description Package Selection Please pick a product from the list. The selected product will be installed. PackageChooserViewStep Packages Page_Keyboard Form Ð“ÐµÐ¾Ð¼ÐµÑ‚Ñ€Ð¸Ñ Keyboard Model: Тип клавиатуры: Type here to test your keyboard Эта облаÑть - Ð´Ð»Ñ Ñ‚ÐµÑÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸Ð°Ñ‚ÑƒÑ€Ñ‹ Page_UserSetup Form Ð“ÐµÐ¾Ð¼ÐµÑ‚Ñ€Ð¸Ñ What is your name? Как Ð’Ð°Ñ Ð·Ð¾Ð²ÑƒÑ‚? What name do you want to use to log in? Какое Ð¸Ð¼Ñ Ð’Ñ‹ хотите иÑпользовать Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ð°? Choose a password to keep your account safe. Выберите пароль Ð´Ð»Ñ Ð·Ð°Ñ‰Ð¸Ñ‚Ñ‹ вашей учетной запиÑи. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>Введите одинаковый пароль дважды, Ñто необходимо Ð´Ð»Ñ Ð¸ÑÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¾ÑˆÐ¸Ð±Ð¾Ðº. Хороший пароль ÑоÑтоит из ÑмеÑи букв, цифр и знаков пунктуации; должен иметь длину от 8 знаков и его Ñтоит периодичеÑки изменÑть.</small> What is the name of this computer? Какое Ð¸Ð¼Ñ Ñƒ компьютера? Your Full Name Ваше полное Ð¸Ð¼Ñ login <small>This name will be used if you make the computer visible to others on a network.</small> <small>Это Ð¸Ð¼Ñ Ð±ÑƒÐ´ÐµÑ‚ иÑпользовано, еÑли Ð’Ñ‹ Ñделаете Ñтот компьютер видимым в Ñети.</small> Computer Name Ð˜Ð¼Ñ ÐºÐ¾Ð¼Ð¿ÑŒÑŽÑ‚ÐµÑ€Ð° Password Пароль Repeat Password Повторите пароль When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. ÐвтоматичеÑкий вход, без запроÑа паролÑ. Use the same password for the administrator account. ИÑпользовать тот же пароль Ð´Ð»Ñ Ð°ÐºÐºÐ°ÑƒÐ½Ñ‚Ð° админиÑтратора. Choose a password for the administrator account. Выберите пароль админиÑтратора <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Введите пароль дважды, чтобы иÑключить ошибки ввода.</small> PartitionLabelsView Root Root Home Home Boot Boot EFI system СиÑтема EFI Swap Swap New partition for %1 Ðовый раздел Ð´Ð»Ñ %1 New partition Ðовый раздел %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space ДоÑтупное меÑто New partition Ðовый раздел Name Ð˜Ð¼Ñ File System Ð¤Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема Mount Point Точка Ð¼Ð¾Ð½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Size Размер PartitionPage Form Ð“ÐµÐ¾Ð¼ÐµÑ‚Ñ€Ð¸Ñ Storage de&vice: &УÑтройÑтво: &Revert All Changes &Отменить вÑе Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ New Partition &Table ÐÐ¾Ð²Ð°Ñ &таблица разделов Cre&ate Со&здать &Edit &Править &Delete &Удалить New Volume Group ÐÐ¾Ð²Ð°Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð° томов Resize Volume Group Изменить размер группы томов Deactivate Volume Group Remove Volume Group Удалить группу томов I&nstall boot loader on: УÑÑ‚&ановить загрузчик в: Are you sure you want to create a new partition table on %1? Ð’Ñ‹ уверены, что хотите Ñоздать новую таблицу разделов на %1? Can not create new partition Ðе удалоÑÑŒ Ñоздать новый раздел The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. Ð’ таблице разделов на %1 уже %2 первичных разделов, больше добавить нельзÑ. Удалите один из первичных разделов и добавьте раÑширенный раздел. PartitionViewStep Gathering system information... Сбор информации о ÑиÑтеме... Partitions Разделы Install %1 <strong>alongside</strong> another operating system. УÑтановить %1 <strong>параллельно</strong> к другой операционной ÑиÑтеме. <strong>Erase</strong> disk and install %1. <strong>ОчиÑтить</strong> диÑк и уÑтановить %1. <strong>Replace</strong> a partition with %1. <strong>Заменить</strong> раздел на %1. <strong>Manual</strong> partitioning. <strong>РучнаÑ</strong> разметка. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). УÑтановить %1 <strong>параллельно</strong> к другой операционной ÑиÑтеме на диÑке <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>ОчиÑтить</strong> диÑк <strong>%2</strong> (%3) и уÑтановить %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Заменить</strong> раздел на диÑке <strong>%2</strong> (%3) на %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>РучнаÑ</strong> разметка диÑка <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) ДиÑк <strong>%1</strong> (%2) Current: Текущий: After: ПоÑле: No EFI system partition configured Ðет наÑтроенного ÑиÑтемного раздела EFI An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. Чтобы начать, необходим ÑиÑтемный раздел EFI %1.<br/><br/>Ð”Ð»Ñ Ð½Ð°Ñтройки ÑиÑтемного раздела EFI, вернитеÑÑŒ, выберите или Ñоздайте файловую ÑиÑтему FAT32 Ñ ÑƒÑтановленным флагом <strong>esp</strong> и точкой Ð¼Ð¾Ð½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ <strong>%2</strong>.<br/><br/>Ð’Ñ‹ можете продолжить и без наÑтройки ÑиÑтемного раздела EFI, но Ваша ÑиÑтема может не загрузитьÑÑ. EFI system partition flag not set Ðе уÑтановлен флаг ÑиÑтемного раздела EFI An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Чтобы начать, необходим ÑиÑтемный раздел EFI %1.<br/><br/>Был наÑтроен раздел Ñ Ñ‚Ð¾Ñ‡ÐºÐ¾Ð¹ Ð¼Ð¾Ð½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ <strong>%2</strong>, но его флаг <strong>esp</strong> не уÑтановлен.<br/>Ð”Ð»Ñ ÑƒÑтановки флага вернитеÑÑŒ и отредактируйте раздел.<br/><br/>Ð’Ñ‹ можете продолжить и без уÑтановки флага, но Ваша ÑиÑтема может не загрузитьÑÑ. Boot partition not encrypted Загрузочный раздел не зашифрован A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. Включено шифрование корневого раздела, но иÑпользован отдельный загрузочный раздел без шифрованиÑ.<br/><br/>При такой конфигурации возникают проблемы Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑтью, потому что важные ÑиÑтемные файлы хранÑÑ‚ÑÑ Ð½Ð° разделе без шифрованиÑ.<br/>ЕÑли хотите, можете продолжить, но Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема будет разблокирована позднее во Ð²Ñ€ÐµÐ¼Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ ÑиÑтемы.<br/>Чтобы включить шифрование загрузочного раздела, вернитеÑÑŒ назад и Ñнова Ñоздайте его, отметив <strong>Шифровать</strong> в окне ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñ€Ð°Ð·Ð´ÐµÐ»Ð°. has at least one disk device available. имеет как минимум одно доÑтупное диÑковое уÑтройÑтво. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package Ðе удалоÑÑŒ выбрать пакет внешнего вида Ð´Ð»Ñ KDE Plasma PlasmaLnfPage Form Форма Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Выберите внешний вид Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ KDE Plasma. Ð’Ñ‹ можете пропуÑтить Ñтот шаг, и наÑтроить его поÑле уÑтановки ÑиÑтемы. Щелкните на выборе внешнего вида, чтобы увидеть, как он будет выглÑдеть. PlasmaLnfViewStep Look-and-Feel Внешний вид PreserveFiles Saving files for later ... СохранÑÑŽ файлы на потом... No files configured to save for later. Ðет файлов, которые требуетÑÑ Ñохранить на потом. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Вывода из команды не поÑледовало. Output: Вывод: External command crashed. Сбой внешней команды. Command <i>%1</i> crashed. Сбой команды <i>%1</i>. External command failed to start. Ðе удалоÑÑŒ запуÑтить внешнюю команду. Command <i>%1</i> failed to start. Ðе удалоÑÑŒ запуÑтить команду <i>%1</i>. Internal error when starting command. ВнутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ° при запуÑке команды. Bad parameters for process job call. Ðеверные параметры Ð´Ð»Ñ Ð²Ñ‹Ð·Ð¾Ð²Ð° процеÑÑа. External command failed to finish. Ðе удалоÑÑŒ завершить внешнюю команду. Command <i>%1</i> failed to finish in %2 seconds. Команда <i>%1</i> не завершилаÑÑŒ за %2 Ñ. External command finished with errors. ВнешнÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° завершилаÑÑŒ Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°Ð¼Ð¸ Command <i>%1</i> finished with exit code %2. Команда <i>%1</i> завершилаÑÑŒ Ñ ÐºÐ¾Ð´Ð¾Ð¼ %2. QObject Default Keyboard Model Модель клавиатуры по умолчанию Default По умолчанию unknown неизвеÑтный extended раÑширенный unformatted неформатированный swap swap Unpartitioned space or unknown partition table Ðеразмеченное меÑто или неизвеÑÑ‚Ð½Ð°Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° разделов (no mount point) (без точки монтированиÑ) Requirements checking for module <i>%1</i> is complete. Проверка требований Ð´Ð»Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ <i>%1</i> завершена. %1 (%2) language[name] (country[name]) %1 (%2) No product No description provided. File not found Файл не найден Path <pre>%1</pre> must be an absolute path. Путь <pre>%1</pre> должен быть абÑолютным путём. Could not create new random file <pre>%1</pre>. Ðе удалоÑÑŒ Ñоздать новый Ñлучайный файл <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Удалить группу томов на диÑке %1 Remove Volume Group named <strong>%1</strong>. Удалить группу томов на диÑке %1 The installer failed to remove a volume group named '%1'. УÑтановщик не Ñмог удалить группу томов на диÑке '%1'. ReplaceWidget Form Форма Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Выберите, где уÑтановить %1.<br/><font color="red">Внимание: </font>Ñто удалит вÑе файлы на выбранном разделе. The selected item does not appear to be a valid partition. Выбранный Ñлемент, видимо, не ÑвлÑетÑÑ Ð´ÐµÐ¹Ñтвующим разделом. %1 cannot be installed on empty space. Please select an existing partition. %1 не может быть уÑтановлен вне раздела. ПожалуйÑта выберите ÑущеÑтвующий раздел. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 не может быть уÑтановлен прÑмо в раÑширенный раздел. Выберите ÑущеÑтвующий оÑновной или логичеÑкий раздел. %1 cannot be installed on this partition. %1 не может быть уÑтановлен в Ñтот раздел. Data partition (%1) Раздел данных (%1) Unknown system partition (%1) ÐеизвеÑтный ÑиÑтемный раздел (%1) %1 system partition (%2) %1 ÑиÑтемный раздел (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>Раздел %1 Ñлишком мал Ð´Ð»Ñ %2. ПожалуйÑта выберите раздел объемом не менее %3 Гиб. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/>Ðе найден ÑиÑтемный раздел EFI. ВернитеÑÑŒ назад и выполните ручную разметку Ð´Ð»Ñ ÑƒÑтановки %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>%1 будет уÑтановлен в %2.<br/><font color="red">Внимание: </font>вÑе данные на разделе %2 будут потерÑны. The EFI system partition at %1 will be used for starting %2. СиÑтемный раздел EFI на %1 будет иÑпользован Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑка %2. EFI system partition: СиÑтемный раздел EFI: ResizeFSJob Resize Filesystem Job Изменить размер файловой ÑиÑтемы Invalid configuration ÐедейÑÑ‚Ð²Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed Ðе удалоÑÑŒ изменить размер The filesystem %1 could not be found in this system, and cannot be resized. Ð¤Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема %1 не обнаружена в Ñтой ÑиÑтеме, поÑтому её размер невозможно изменить. The device %1 could not be found in this system, and cannot be resized. УÑтройÑтво %1 не обнаружено в Ñтой ÑиÑтеме, поÑтому его размер невозможно изменить. The filesystem %1 cannot be resized. Ðевозможно изменить размер файловой ÑиÑтемы %1. The device %1 cannot be resized. Ðевозможно изменить размер уÑтройÑтва %1. The filesystem %1 must be resized, but cannot. Ðеобходимо, но не удаётÑÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ размер файловой ÑиÑтемы %1 The device %1 must be resized, but cannot Ðеобходимо, но не удаётÑÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ размер уÑтройÑтва %1 ResizePartitionJob Resize partition %1. Изменить размер раздела %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Изменить размер <strong>%2MB</strong> раздела <strong>%1</strong> на <strong>%3MB</strong>. Resizing %2MiB partition %1 to %3MiB. Изменение размера раздела %1 Ñ %2MB на %3MB. The installer failed to resize partition %1 on disk '%2'. Программе уÑтановки не удалоÑÑŒ изменить размер раздела %1 на диÑке '%2'. ResizeVolumeGroupDialog Resize Volume Group Изменить размер группы томов ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Изменить размер группы томов под именем %1 Ñ %2 на %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. Изменить размер группы томов под именем <strong>%1</strong> Ñ <strong>%2</strong> на <strong>%3</strong>. The installer failed to resize a volume group named '%1'. Программе уÑтановки не удалоÑÑŒ изменить размер группы томов под именем '%1'. ResultsListDialog For best results, please ensure that this computer: Ð”Ð»Ñ Ð½Ð°Ð¸Ð»ÑƒÑ‡ÑˆÐ¸Ñ… результатов, убедитеÑÑŒ, что Ñтот компьютер: System requirements СиÑтемные Ñ‚Ñ€ÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> Этот компьютер не ÑоответÑтвует минимальным требованиÑм Ð´Ð»Ñ ÑƒÑтановки %1.<br/>Ðевозможно продолжить уÑтановку. <a href="#details">Подробнее...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> Этот компьютер не ÑоответÑтвует минимальным требованиÑм Ð´Ð»Ñ ÑƒÑтановки %1.<br/>Ðевозможно продолжить уÑтановку. <a href="#details">Подробнее...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. Этот компьютер ÑоответÑтвует не вÑем рекомендуемым требованиÑм Ð´Ð»Ñ ÑƒÑтановки %1.<br/>Можно продолжить уÑтановку, но некоторые возможноÑти могут быть недоÑтупны. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. Этот компьютер ÑоответÑтвует не вÑем рекомендуемым требованиÑм Ð´Ð»Ñ ÑƒÑтановки %1.<br/>Можно продолжить уÑтановку, но некоторые возможноÑти могут быть недоÑтупны. This program will ask you some questions and set up %2 on your computer. Эта программа задаÑÑ‚ вам неÑколько вопроÑов и поможет уÑтановить %2 на ваш компьютер. ScanningDialog Scanning storage devices... СканируютÑÑ ÑƒÑтройÑтва хранениÑ... Partitioning Разметка SetHostNameJob Set hostname %1 Задать Ð¸Ð¼Ñ ÐºÐ¾Ð¼Ð¿ÑŒÑŽÑ‚ÐµÑ€Ð° в Ñети %1 Set hostname <strong>%1</strong>. Задать Ð¸Ð¼Ñ ÐºÐ¾Ð¼Ð¿ÑŒÑŽÑ‚ÐµÑ€Ð° в Ñети <strong>%1</strong>. Setting hostname %1. Задаю Ð¸Ð¼Ñ ÐºÐ¾Ð¼Ð¿ÑŒÑŽÑ‚ÐµÑ€Ð° в Ñети Ð´Ð»Ñ %1. Internal Error ВнутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ° Cannot write hostname to target system Ðе возможно запиÑать Ð¸Ð¼Ñ ÐºÐ¾Ð¼Ð¿ÑŒÑŽÑ‚ÐµÑ€Ð° в целевую ÑиÑтему SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 УÑтановить модель клавиатуры на %1, раÑкладку на %2-%3 Failed to write keyboard configuration for the virtual console. Ðе удалоÑÑŒ запиÑать параметры клавиатуры Ð´Ð»Ñ Ð²Ð¸Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð¾Ð¹ конÑоли. Failed to write to %1 Ðе удалоÑÑŒ запиÑать на %1 Failed to write keyboard configuration for X11. Ðе удалоÑÑŒ запиÑать параметры клавиатуры Ð´Ð»Ñ X11. Failed to write keyboard configuration to existing /etc/default directory. Ðе удалоÑÑŒ запиÑать параметры клавиатуры в ÑущеÑтвующий каталог /etc/default. SetPartFlagsJob Set flags on partition %1. УÑтановить флаги на разделе %1. Set flags on %1MiB %2 partition. УÑтановить флаги %1MiB раздела %2. Set flags on new partition. УÑтановить флаги нового раздела. Clear flags on partition <strong>%1</strong>. ОчиÑтить флаги раздела <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. СнÑть флаги %1MiB раздела <strong>%2</strong>. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Отметить %1MB раздел <strong>%2</strong> флагом как <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. СнÑтие флагов %1MiB раздела <strong>%2</strong>. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. УÑтановка флагов <strong>%3</strong> %1MiB раздела <strong>%2</strong>. Clear flags on new partition. СброÑить флаги нового раздела. Flag partition <strong>%1</strong> as <strong>%2</strong>. Отметить раздел <strong>%1</strong> флагом как <strong>%2</strong>. Flag new partition as <strong>%1</strong>. Отметить новый раздел флагом как <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. ОчиÑтка флагов раздела <strong>%1</strong>. Clearing flags on new partition. Ð¡Ð±Ñ€Ð¾Ñ Ñ„Ð»Ð°Ð³Ð¾Ð² нового раздела. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. УÑтановка флагов <strong>%2</strong> на раздел <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. УÑтановка флагов <strong>%1</strong> нового раздела. The installer failed to set flags on partition %1. УÑтановщик не Ñмог уÑтановить флаги на раздел %1. SetPasswordJob Set password for user %1 Задать пароль Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %1 Setting password for user %1. УÑтанавливаю пароль Ð´Ð»Ñ ÑƒÑ‡ÐµÑ‚Ð½Ð¾Ð¹ запиÑи %1. Bad destination system path. Ðеверный путь целевой ÑиÑтемы. rootMountPoint is %1 Точка Ð¼Ð¾Ð½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ¾Ñ€Ð½ÐµÐ²Ð¾Ð³Ð¾ раздела %1 Cannot disable root account. Ðевозможно отключить учетную запиÑÑŒ root passwd terminated with error code %1. Команда passwd завершилаÑÑŒ Ñ ÐºÐ¾Ð´Ð¾Ð¼ ошибки %1. Cannot set password for user %1. Ðе удалоÑÑŒ задать пароль Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %1. usermod terminated with error code %1. Команда usermod завершилаÑÑŒ Ñ ÐºÐ¾Ð´Ð¾Ð¼ ошибки %1. SetTimezoneJob Set timezone to %1/%2 УÑтановить чаÑовой поÑÑ Ð½Ð° %1/%2 Cannot access selected timezone path. Ðет доÑтупа к указанному чаÑовому поÑÑу. Bad path: %1 Ðеправильный путь: %1 Cannot set timezone. Ðевозможно уÑтановить чаÑовой поÑÑ. Link creation failed, target: %1; link name: %2 Ðе удалоÑÑŒ Ñоздать ÑÑылку, цель: %1; Ð¸Ð¼Ñ ÑÑылки: %2 Cannot set timezone, ЧаÑовой поÑÑ Ð½Ðµ уÑтановлен, Cannot open /etc/timezone for writing Ðевозможно открыть /etc/timezone Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) SummaryPage This is an overview of what will happen once you start the setup procedure. Это обзор изменений, которые будут применены при запуÑке процедуры уÑтановки. This is an overview of what will happen once you start the install procedure. Это обзор изменений, которые будут применены при запуÑке процедуры уÑтановки. SummaryViewStep Summary Итог TrackingInstallJob Installation feedback Отчёт об уÑтановке Sending installation feedback. Отправка отчёта об уÑтановке. Internal error in install-tracking. HTTP request timed out. Тайм-аут запроÑа HTTP. TrackingMachineNeonJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Ðе удалоÑÑŒ наÑтроить отзывы о компьютере, ошибка ÑÑ†ÐµÐ½Ð°Ñ€Ð¸Ñ %1. Could not configure machine feedback correctly, Calamares error %1. Ðе удалоÑÑŒ наÑтроить отзывы о компьютере, ошибка Calamares %1. TrackingPage Form Форма Placeholder Заменитель <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>ЕÑли вы Ñто выберете, то не будет отправлено <span style=" font-weight:600;">никаких</span> Ñведений об уÑтановке.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Щелкните здеÑÑŒ чтобы узнать больше об отзывах пользователей</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. ОтÑлеживание уÑтановок позволÑет %1 узнать, Ñколько у них пользователей, на каком оборудовании уÑтанавливаетÑÑ %1, и (Ñ Ð´Ð²ÑƒÐ¼Ñ Ð¿Ð¾Ñледними опциÑми) поÑтоÑнно получать ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ предпочитаемых приложениÑÑ…. Чтобы увидеть, что будет отправлено, щелкните по значку Ñправки Ñ€Ñдом Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ облаÑтью. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. Отметив Ñтот пункт, вы поделитеÑÑŒ информацией о уÑтановке и Ñвоем оборудовании. Эта Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ <b>будет отправлена только один раз</b> поÑле Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ ÑƒÑтановки. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. Отметив Ñтот пункт, вы будете <b>периодичеÑки</b> отправлÑть %1 информацию о Ñвоей уÑтановке, оборудовании и приложениÑÑ…. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. Отметив Ñтот пункт, вы будете <b>регулÑрно</b> отправлÑть %1 информацию о Ñвоей уÑтановке, оборудовании, приложениÑÑ… и паттернах их иÑпользованиÑ. TrackingViewStep Feedback Отзывы UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>ЕÑли Ñтот компьютер будет иÑпользоватьÑÑ Ð½ÐµÑколькими людьми, вы Ñможете Ñоздать учетные запиÑи Ð´Ð»Ñ Ð½Ð¸Ñ… поÑле уÑтановки.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>ЕÑли Ñтот компьютер иÑпользуетÑÑ Ð½ÐµÑколькими людьми, Ð’Ñ‹ Ñможете Ñоздать ÑоответÑтвующие учетные запиÑи Ñразу поÑле уÑтановки.</small> Your username is too long. Ваше Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ñлишком длинное. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. ДопуÑкаютÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ñтрочные буквы, чиÑла, Ñимволы Ð¿Ð¾Ð´Ñ‡Ñ‘Ñ€ÐºÐ¸Ð²Ð°Ð½Ð¸Ñ Ð¸ дефиÑÑ‹. Only letters, numbers, underscore and hyphen are allowed. ДопуÑкаютÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ буквы, цифры, Ñимволы Ð¿Ð¾Ð´Ñ‡Ñ‘Ñ€ÐºÐ¸Ð²Ð°Ð½Ð¸Ñ Ð¸ дефиÑÑ‹. Your hostname is too short. Ð˜Ð¼Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ компьютера Ñлишком коротко. Your hostname is too long. Ð˜Ð¼Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ компьютера Ñлишком длинное. Your passwords do not match! Пароли не Ñовпадают! UsersViewStep Users Пользователи VariantModel Key Value Значение VolumeGroupBaseDialog Create Volume Group Создать группу томов List of Physical Volumes СпиÑок физичеÑких томов Volume Group Name: Ð˜Ð¼Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ томов: Volume Group Type: Тип группы томов: Physical Extent Size: MiB МиБ Total Size: Общий объём: Used Size: ИÑпользованный объём: Total Sectors: Ð’Ñего Ñекторов: Quantity of LVs: WelcomePage Form Форма Select application and system language Open donations website &Donate Open help and support website Open issues and bug-tracking website Open release notes website &Release notes &ÐŸÑ€Ð¸Ð¼ÐµÑ‡Ð°Ð½Ð¸Ñ Ðº выпуÑку &Known issues &ИзвеÑтные проблемы &Support П&оддержка &About &О программе <h1>Welcome to the %1 installer.</h1> <h1>Добро пожаловать в программу уÑтановки %1 .</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Добро пожаловать в уÑтановщик Calamares Ð´Ð»Ñ %1 .</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Добро пожаловать в программу уÑтановки Calamares Ð´Ð»Ñ %1 .</h1> <h1>Welcome to %1 setup.</h1> <h1>Добро пожаловать в программу уÑтановки %1 .</h1> About %1 setup О уÑтановке %1 About %1 installer О программе уÑтановки %1 <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support %1 поддержка WelcomeQmlViewStep Welcome Добро пожаловать WelcomeViewStep Welcome Добро пожаловать notesqml <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> About Support Known issues Release notes Donate calamares-3.2.20/lang/calamares_sk.ts000066400000000000000000005554471362604102500174670ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. <strong>Zavádzacie prostredie</strong> tohto systému.<br><br>StarÅ¡ie systémy architektúry x86 podporujú iba <strong>BIOS</strong>.<br>Moderné systémy obvykle používajú <strong>EFI</strong>, ale tiež sa môžu zobraziÅ¥ ako BIOS, ak sú spustené v režime kompatiblitiy. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. Tento systém bol spustený so zavádzacím prostredím <strong>EFI</strong>.<br><br>Na konfiguráciu spustenia z prostredia EFI, musí inÅ¡talátor umiestniÅ¥ aplikáciu zavádzaÄa, ako je <strong>GRUB</strong> alebo <strong>systemd-boot</strong> na <strong>oddiel systému EFI</strong>. Toto je vykonané automaticky, pokiaľ nezvolíte ruÄné rozdelenie oddielov, v tom prípade ho musíte zvoliÅ¥ alebo vytvoriÅ¥ ruÄne. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. Tento systém bol spustený so zavádzacím prostredím <strong>BIOS</strong>.<br><br>Na konfiguráciu spustenia z prostredia BIOS, musí inÅ¡talátor nainÅ¡talovaÅ¥ zavádzaÄ, ako je <strong>GRUB</strong>, buÄ na zaÄiatok oddielu alebo na <strong>hlavný zavádzací záznam (MBR)</strong> pri zaÄiatku tabuľky oddielov (preferované). Toto je vykonané automaticky, pokiaľ nezvolíte ruÄné rozdelenie oddielov, v tom prípade ho musíte nainÅ¡talovaÅ¥ ruÄne. BootLoaderModel Master Boot Record of %1 Hlavný zavádzací záznam (MBR) zariadenia %1 Boot Partition Zavádzací oddiel System Partition Systémový oddiel Do not install a boot loader NeinÅ¡talovaÅ¥ zavádzaÄ %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page Prázdna stránka Calamares::DebugWindow Form Forma GlobalStorage Globálne úložisko JobQueue Fronta úloh Modules Moduly Type: Typ: none žiadny Interface: Rozhranie: Tools Nástroje Reload Stylesheet Widget Tree Debug information Ladiace informácie Calamares::ExecutionViewStep Set up InÅ¡talácia Install InÅ¡talácia Calamares::FailJob Job failed (%1) Úloha zlyhala (%1) Programmed job failure was explicitly requested. Zlyhanie naprogramovanej úlohy bolo výluÄne vyžiadané. Calamares::JobThread Done Hotovo Calamares::NamedJob Example job (%1) Vzorová úloha (%1) Calamares::ProcessJob Run command '%1' in target system. Spustenie príkazu „%1“ v cieľovom systéme. Run command '%1'. Spustenie príkazu „%1“. Running command %1 %2 Spúšťa sa príkaz %1 %2 Calamares::PythonJob Running %1 operation. Spúšťa sa operácia %1. Bad working directory path Nesprávna cesta k pracovnému adresáru Working directory %1 for python job %2 is not readable. Pracovný adresár %1 pre úlohu jazyka python %2 nie je možné ÄítaÅ¥. Bad main script file Nesprávny súbor hlavného skriptu Main script file %1 for python job %2 is not readable. Súbor hlavného skriptu %1 pre úlohu jazyka python %2 nie je možné ÄítaÅ¥. Boost.Python error in job "%1". Chyba knižnice Boost.Python v úlohe „%1“. Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Waiting for %n module(s). ÄŒaká sa na %n modul. ÄŒaká sa na %n moduly. ÄŒaká sa na %n modulov. ÄŒaká sa na %n modulov. (%n second(s)) (%n sekunda) (%n sekundy) (%n sekúnd) (%n sekúnd) System-requirements checking is complete. Kontrola systémových požiadaviek je dokonÄená. Calamares::ViewManager &Back &Späť &Next ÄŽ&alej &Cancel &ZruÅ¡iÅ¥ Cancel setup without changing the system. ZruÅ¡enie inÅ¡talácie bez zmien v systéme. Cancel installation without changing the system. Zruší inÅ¡taláciu bez zmeny systému. Setup Failed InÅ¡talácia zlyhala Would you like to paste the install log to the web? Chceli by ste vložiÅ¥ záznam z inÅ¡talácie na web? Install Log Paste URL The upload was unsuccessful. No web-paste was done. Calamares Initialization Failed Zlyhala inicializácia inÅ¡talátora Calamares %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. Nie je možné nainÅ¡talovaÅ¥ %1. Calamares nemohol naÄítaÅ¥ vÅ¡etky konfigurované moduly. Je problém s tým, ako sa Calamares používa pri distribúcii. <br/>The following modules could not be loaded: <br/>Nebolo možné naÄítaÅ¥ nasledujúce moduly Continue with installation? PokraÄovaÅ¥ v inÅ¡talácii? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> InÅ¡talaÄný program distribúcie %1 sa chystá vykonaÅ¥ zmeny na vaÅ¡om disku, aby nainÅ¡taloval distribúciu %2. <br/><strong>Tieto zmeny nebudete môcÅ¥ vrátiÅ¥ späť.</strong> &Set up now &InÅ¡talovaÅ¥ teraz &Set up &InÅ¡talovaÅ¥ &Install _InÅ¡talovaÅ¥ Setup is complete. Close the setup program. InÅ¡talácia je dokonÄená. Zavrite inÅ¡talaÄný program. Cancel setup? ZruÅ¡iÅ¥ inÅ¡taláciu? Cancel installation? ZruÅ¡iÅ¥ inÅ¡taláciu? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Naozaj chcete zruÅ¡iÅ¥ aktuálny priebeh inÅ¡talácie? InÅ¡talaÄný program bude ukonÄený a zmeny budú stratené. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. SkutoÄne chcete zruÅ¡iÅ¥ aktuálny priebeh inÅ¡talácie? InÅ¡talátor sa ukonÄí a vÅ¡etky zmeny budú stratené. &Yes _Ãno &No _Nie &Close _ZavrieÅ¥ Continue with setup? PokraÄovaÅ¥ v inÅ¡talácii? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> InÅ¡talátor distribúcie %1 sa chystá vykonaÅ¥ zmeny na vaÅ¡om disku, aby nainÅ¡taloval distribúciu %2. <br/><strong>Tieto zmeny nebudete môcÅ¥ vrátiÅ¥ späť.</strong> &Install now &InÅ¡talovaÅ¥ teraz Go &back PrejsÅ¥ s&päť &Done _DokonÄiÅ¥ The installation is complete. Close the installer. InÅ¡talácia je dokonÄená. Zatvorí inÅ¡talátor. Error Chyba Installation Failed InÅ¡talácia zlyhala CalamaresPython::Helper Unknown exception type Neznámy typ výnimky unparseable Python error Neanalyzovateľná chyba jazyka Python unparseable Python traceback Neanalyzovateľný ladiaci výstup jazyka Python Unfetchable Python error. Nezískateľná chyba jazyka Python. CalamaresUtils Install log posted to: %1 Záznam o inÅ¡talácii bol odoslaný do: %1 CalamaresWindow %1 Setup Program InÅ¡talaÄný program distribúcie %1 %1 Installer InÅ¡talátor distribúcie %1 Show debug information ZobraziÅ¥ ladiace informácie CheckerContainer Gathering system information... Zbierajú sa informácie o poÄítaÄi... ChoicePage Form Forma After: Potom: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>RuÄné rozdelenie oddielov</strong><br/>Môžete vytvoriÅ¥ alebo zmeniÅ¥ veľkosÅ¥ oddielov podľa seba. Boot loader location: Umiestnenie zavádzaÄa: Select storage de&vice: Vyberte úložné &zariadenie: Current: Teraz: Reuse %1 as home partition for %2. Opakované použitie oddielu %1 ako domovského pre distribúciu %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Vyberte oddiel na zmenÅ¡enie a potom potiahnutím spodného pruhu zmeňte veľkosÅ¥</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. Oddiel %1 bude zmenÅ¡ený na %2MiB a nový %3MiB oddiel bude vytvorený pre distribúciu %4. <strong>Select a partition to install on</strong> <strong>Vyberte oddiel, na ktorý sa má inÅ¡talovaÅ¥</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Oddiel systému EFI sa nedá v tomto poÄítaÄi nájsÅ¥. Prosím, prejdite späť a použite ruÄné rozdelenie oddielov na inÅ¡taláciu distribúcie %1. The EFI system partition at %1 will be used for starting %2. Oddie lsystému EFI na %1 bude použitý na spustenie distribúcie %2. EFI system partition: Oddiel systému EFI: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Zdá sa, že toto úložné zariadenie neobsahuje operaÄný systém. ÄŒo by ste chceli urobiÅ¥?<br/>Budete môcÅ¥ skontrolovaÅ¥ a potvrdiÅ¥ vaÅ¡e voľby pred uplatnením akejkoľvek zmeny na úložnom zariadení. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Vymazanie disku</strong><br/>Týmto sa <font color="red">odstránia</font> vÅ¡etky údaje momentálne sa nachádzajúce na vybranom úložnom zariadení. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Toto úložné zariadenie obsahuje operaÄný systém %1. ÄŒo by ste chceli urobiÅ¥?<br/>Budete môcÅ¥ skontrolovaÅ¥ a potvrdiÅ¥ vaÅ¡e voľby pred uplatnením akejkoľvek zmeny na úložnom zariadení. No Swap Bez odkladacieho priestoru Reuse Swap Znovu použiÅ¥ odkladací priestor Swap (no Hibernate) Odkladací priestor (bez hibernácie) Swap (with Hibernate) Odkladací priestor (s hibernáciou) Swap to file Odkladací priestor v súbore <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>InÅ¡talácia popri súÄasnom systéme</strong><br/>InÅ¡talátor zmenší oddiel a uvoľní miesto pre distribúciu %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Nahradenie oddielu</strong><br/>Nahradí oddiel distribúciou %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Toto úložné zariadenie už obsahuje operaÄný systém. ÄŒo by ste chceli urobiÅ¥?<br/>Budete môcÅ¥ skontrolovaÅ¥ a potvrdiÅ¥ vaÅ¡e voľby pred uplatnením akejkoľvek zmeny na úložnom zariadení. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Toto úložné zariadenie obsahuje viacero operaÄných systémov. ÄŒo by ste chceli urobiÅ¥?<br/>Budete môcÅ¥ skontrolovaÅ¥ a potvrdiÅ¥ vaÅ¡e voľby pred uplatnením akejkoľvek zmeny na úložnom zariadení. ClearMountsJob Clear mounts for partitioning operations on %1 VymazaÅ¥ pripojenia pre operácie rozdelenia oddielov na zariadení %1 Clearing mounts for partitioning operations on %1. Vymazávajú sa pripojenia pre operácie rozdelenia oddielov na zariadení %1. Cleared all mounts for %1 Vymazané vÅ¡etky pripojenia pre zariadenie %1 ClearTempMountsJob Clear all temporary mounts. Vymazanie vÅ¡etkých doÄasných pripojení. Clearing all temporary mounts. Vymazávajú sa vÅ¡etky doÄasné pripojenia. Cannot get list of temporary mounts. Nedá sa získaÅ¥ zoznam doÄasných pripojení. Cleared all temporary mounts. Vymazané vÅ¡etky doÄasné pripojenia. CommandList Could not run command. Nepodarilo sa spustiÅ¥ príkaz. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. Príkaz beží v hostiteľskom prostredí a potrebuje poznaÅ¥ koreňovú cestu, ale nie je definovaný žiadny koreňový prípojný bod. The command needs to know the user's name, but no username is defined. Príkaz musí poznaÅ¥ meno používateľa, ale žiadne nie je definované. ContextualProcessJob Contextual Processes Job Úloha kontextových procesov CreatePartitionDialog Create a Partition Vytvorenie oddielu MiB MiB Partition &Type: &Typ oddielu: &Primary &Primárny E&xtended Ro&zšírený Fi&le System: &Systém súborov: LVM LV name Názov LVM LV Flags: ZnaÄky: &Mount Point: Bo&d pripojenia: Si&ze: Veľ&kosÅ¥: En&crypt ZaÅ¡i&frovaÅ¥ Logical Logický Primary Primárny GPT GPT Mountpoint already in use. Please select another one. Bod pripojenia sa už používa. Prosím, vyberte iný. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Vytvorenie nového %2MiB oddielu na zariadení %4 (%3) so systémom súborov %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Vytvorenie nového <strong>%2MiB</strong> oddielu na zariadení <strong>%4</strong> (%3) so systémom súborov <strong>%1</strong>. Creating new %1 partition on %2. Vytvára sa nový %1 oddiel na zariadení %2. The installer failed to create partition on disk '%1'. InÅ¡talátor zlyhal pri vytváraní oddielu na disku „%1“. CreatePartitionTableDialog Create Partition Table Vytvorenie tabuľky oddielov Creating a new partition table will delete all existing data on the disk. Vytvorením novej tabuľky oddielov sa odstránia vÅ¡etky existujúce údaje na disku. What kind of partition table do you want to create? Ktorý typ tabuľky oddielov chcete vytvoriÅ¥? Master Boot Record (MBR) Hlavný zavádzací záznam (MBR) GUID Partition Table (GPT) Tabuľka oddielov GUID (GPT) CreatePartitionTableJob Create new %1 partition table on %2. VytvoriÅ¥ novú tabuľku oddielov typu %1 na zariadení %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). VytvoriÅ¥ novú <strong>%1</strong> tabuľku oddielov na zariadení <strong>%2</strong> (%3). Creating new %1 partition table on %2. Vytvára sa nová tabuľka oddielov typu %1 na zariadení %2. The installer failed to create a partition table on %1. InÅ¡talátor zlyhal pri vytváraní tabuľky oddielov na zariadení %1. CreateUserJob Create user %1 VytvoriÅ¥ používateľa %1 Create user <strong>%1</strong>. VytvoriÅ¥ používateľa <strong>%1</strong>. Creating user %1. Vytvára sa používateľ %1. Sudoers dir is not writable. Adresár Sudoers nie je zapisovateľný. Cannot create sudoers file for writing. Nedá sa vytvoriÅ¥ súbor sudoers na zapisovanie. Cannot chmod sudoers file. Nedá sa vykonaÅ¥ príkaz chmod na súbori sudoers. Cannot open groups file for reading. Nedá sa otvoriÅ¥ súbor skupín na Äítanie. CreateVolumeGroupDialog Create Volume Group VytvoriÅ¥ skupinu zväzkov CreateVolumeGroupJob Create new volume group named %1. Vytvorenie novej skupiny zväzkov s názvom %1. Create new volume group named <strong>%1</strong>. Vytvorenie novej skupiny zväzkov s názvom<strong>%1</strong>. Creating new volume group named %1. Vytvorenie novej skupiny zväzkov s názvom %1. The installer failed to create a volume group named '%1'. InÅ¡talátor zlyhal pri vytváraní skupiny zväzkov s názvom „%1“. DeactivateVolumeGroupJob Deactivate volume group named %1. Deaktivácia skupiny zväzkov s názvom %1. Deactivate volume group named <strong>%1</strong>. Deaktivácia skupiny zväzkov s názvom <strong>%1</strong>. The installer failed to deactivate a volume group named %1. InÅ¡talátor zlyhal pri deaktivovaní skupiny zväzkov s názvom %1. DeletePartitionJob Delete partition %1. OdstrániÅ¥ oddiel %1. Delete partition <strong>%1</strong>. OdstrániÅ¥ oddiel <strong>%1</strong>. Deleting partition %1. Odstraňuje sa oddiel %1. The installer failed to delete partition %1. InÅ¡talátor zlyhal pri odstraňovaní oddielu %1. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. Typ <strong>tabuľky oddielov</strong> na vybranom úložnom zariadení.<br><br>Jediným spôsobom ako zmeniÅ¥ tabuľku oddielov je vymazanie a znovu vytvorenie tabuľky oddielov od zaÄiatku, Äím sa zniÄia vÅ¡etky údaje úložnom zariadení.<br>InÅ¡talátor ponechá aktuálnu tabuľku oddielov, pokiaľ sa výluÄne nerozhodnete inak.<br>Ak nie ste si istý, na moderných systémoch sa preferuje typ tabuľky oddielov GPT. This device has a <strong>%1</strong> partition table. Toto zariadenie obsahuje tabuľku oddielov <strong>%1</strong>. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. Toto je <strong>sluÄkové</strong> zariadenie.<br><br>Je to pseudo-zariadenie bez tabuľky oddielov, Äo umožňuje prístup k súborom ako na blokovom zariadení. Tento druh inÅ¡talácie obvykle obsahuje iba jeden systém súborov. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. InÅ¡talátor <strong>nemôže rozpoznaÅ¥ tabuľku oddielov</strong> na vybranom úložnom zariadení.<br><br>Zariadenie buÄ neobsahuje žiadnu tabuľku oddielov, alebo je tabuľka oddielov poÅ¡kodená, alebo je neznámeho typu.<br>InÅ¡talátor môže vytvoriÅ¥ novú tabuľku oddielov buÄ automaticky alebo prostredníctvom stránky s ruÄným rozdelením oddielov. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Toto je odporúÄaná tabuľka oddielov pre moderné systémy, ktoré sa spúšťajú zo zavádzacieho prostredia <strong>EFI</strong>. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. <br><br>Tento typ tabuľky oddielov je vhodný iba pre starÅ¡ie systémy, ktoré sa spúšťajú zo zavádzacieho prostredia <strong>BIOS</strong>. GPT je odporúÄaná vo väÄÅ¡ine Äalších prípadov.<br><br><strong>Upozornenie:</strong> Tabuľka oddielov MBR je zastaralý Å¡tandard z éry operaÄného systému MS-DOS.<br>Môžu byÅ¥ vytvorené iba 4 <em>primárne</em> oddiely a z nich môže byÅ¥ jeden <em>rozšíreným</em> oddielom, ktorý môže následne obsahovaÅ¥ viacero <em>logických</em> oddielov. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1 - (%2) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Zápis nastavenia LUKS pre nástroj Dracut do %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Vynechanie zápisu nastavenia LUKS pre nástroj Dracut: oddiel „/“ nie je zaÅ¡ifrovaný Failed to open %1 Zlyhalo otvorenie %1 DummyCppJob Dummy C++ Job Fiktívna úloha jazyka C++ EditExistingPartitionDialog Edit Existing Partition Úprava existujúceho oddielu Content: Obsah: &Keep &PonechaÅ¥ Format FormátovaÅ¥ Warning: Formatting the partition will erase all existing data. Upozornenie: Naformátovaním oddielu sa vymažú vÅ¡etky existujúce údaje. &Mount Point: Bod pripoje&nia: Si&ze: V&eľkosÅ¥: MiB MiB Fi&le System: S&ystém súborov: Flags: ZnaÄky: Mountpoint already in use. Please select another one. Bod pripojenia sa už používa. Prosím, vyberte iný. EncryptWidget Form Forma En&crypt system &ZaÅ¡ifrovaÅ¥ systém Passphrase Heslo Confirm passphrase Potvrdenie hesla Please enter the same passphrase in both boxes. Prosím, zadajte rovnaké heslo do oboch polí. FillGlobalStorageJob Set partition information NastaviÅ¥ informácie o oddieli Install %1 on <strong>new</strong> %2 system partition. InÅ¡talovaÅ¥ distribúciu %1 na <strong>novom</strong> %2 systémovom oddieli. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. NastaviÅ¥ <strong>nový</strong> %2 oddiel s bodom pripojenia <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. InÅ¡talovaÅ¥ distribúciu %2 na %3 systémovom oddieli <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. NastaviÅ¥ %3 oddiel <strong>%1</strong> s bodom pripojenia <strong>%2</strong>. Install boot loader on <strong>%1</strong>. InÅ¡talovaÅ¥ zavádzaÄ do <strong>%1</strong>. Setting up mount points. Nastavujú sa body pripojení. FinishedPage Form Forma <Restart checkbox tooltip> <Restart checkbox tooltip> &Restart now &ReÅ¡tartovaÅ¥ teraz <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>VÅ¡etko je dokonÄené.</h1><br/>Distribúcia %1 bola nainÅ¡talovaná do vášho poÄítaÄa.<br/>Teraz môžete zaÄaÅ¥ používaÅ¥ váš nový systém. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <html><head/><body><p>KeÄ je zaÅ¡krtnuté toto políÄko, váš systém sa okamžite reÅ¡tartuje po stlaÄení tlaÄidla <span style="font-style:italic;">DokonÄiÅ¥</span> alebo zatvorení inÅ¡talaÄného programu.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>VÅ¡etko je dokonÄené.</h1><br/>Distribúcia %1 bola nainÅ¡talovaná do vášho poÄítaÄa.<br/>Teraz môžete reÅ¡tartovaÅ¥ poÄítaÄ a spustiÅ¥ váš nový systém, alebo pokraÄovaÅ¥ v používaní živého prostredia distribúcie %2. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <html><head/><body><p>KeÄ je zaÅ¡krtnuté toto políÄko, váš systém sa okamžite reÅ¡tartuje po stlaÄení tlaÄidla <span style="font-style:italic;">DokonÄiÅ¥</span> alebo zatvorení inÅ¡talátora.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>InÅ¡talácia zlyhala</h1><br/>Distribúcia %1 nebola nainÅ¡talovaná do vášho poÄítaÄa.<br/>Chybová hláška: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>InÅ¡talácia zlyhala</h1><br/>Distribúcia %1 nebola nainÅ¡talovaná do vášho poÄítaÄa.<br/>Chybová hláška: %2. FinishedViewStep Finish DokonÄenie Setup Complete InÅ¡talácia dokonÄená Installation Complete InÅ¡talácia dokonÄená The setup of %1 is complete. InÅ¡talácia distribúcie %1 je dokonÄená. The installation of %1 is complete. InÅ¡talácia distribúcie %1s je dokonÄená. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Naformátovanie oddielu %1 (systém súborov: %2, veľkosÅ¥: %3 MiB) na %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Naformátovanie <strong>%3MiB</strong> oddielu <strong>%1</strong> so systémom súborov <strong>%2</strong>. Formatting partition %1 with file system %2. Formátuje sa oddiel %1 so systémom súborov %2. The installer failed to format partition %1 on disk '%2'. InÅ¡talátor zlyhal pri formátovaní oddielu %1 na disku „%2“. GeneralRequirements has at least %1 GiB available drive space obsahuje aspoň %1 GiB voľného miesta na disku There is not enough drive space. At least %1 GiB is required. Nie je dostatok miesta na disku. Vyžaduje sa aspoň %1 GiB. has at least %1 GiB working memory obsahuje aspoň %1 GiB voľnej operaÄnej pamäte The system does not have enough working memory. At least %1 GiB is required. PoÄítaÄ neobsahuje dostatok operaÄnej pamäte. Vyžaduje sa aspoň %1 GiB. is plugged in to a power source je pripojený k zdroju napájania The system is not plugged in to a power source. PoÄítaÄ nie je pripojený k zdroju napájania. is connected to the Internet je pripojený k internetu The system is not connected to the Internet. PoÄítaÄ nie je pripojený k internetu. is running the installer as an administrator (root) The setup program is not running with administrator rights. InÅ¡talaÄný program nie je spustený s právami správcu. The installer is not running with administrator rights. InÅ¡talátor nie je spustený s právami správcu. has a screen large enough to show the whole installer The screen is too small to display the setup program. Obrazovka je príliÅ¡ malá na to, aby bolo možné zobraziÅ¥ inÅ¡talaÄný program. The screen is too small to display the installer. Obrazovka je príliÅ¡ malá na to, aby bolo možné zobraziÅ¥ inÅ¡talátor. HostInfoJob Collecting information about your machine. Zbieranie informácií o vaÅ¡om poÄítaÄi. IDJob OEM Batch Identifier Hromadný identifikátor OEM Could not create directories <code>%1</code>. Nepodarilo sa vytvoriÅ¥ adresáre <code>%1</code>. Could not open file <code>%1</code>. Nepodarilo sa otvoriÅ¥ súbor <code>%1</code>. Could not write to file <code>%1</code>. Nepodarilo sa zapísaÅ¥ do súboru <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. Vytvára sa initramfs pomocou mkinitcpio. InitramfsJob Creating initramfs. Vytvára sa initramfs. InteractiveTerminalPage Konsole not installed Aplikácia Konsole nie je nainÅ¡talovaná Please install KDE Konsole and try again! Prosím, nainÅ¡talujte Konzolu prostredia KDE a skúste to znovu! Executing script: &nbsp;<code>%1</code> Spúšťa sa skript: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script Skript KeyboardPage Set keyboard model to %1.<br/> Nastavenie modelu klávesnice na %1.<br/> Set keyboard layout to %1/%2. Nastavenie rozloženia klávesnice na %1/%2. KeyboardViewStep Keyboard Klávesnica LCLocaleDialog System locale setting Miestne nastavenie systému The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. Miestne nastavenie systému ovplyvní jazyk a znakovú sadu niektorých prvkov používateľského rozhrania v príkazovom riadku.<br/>Aktuálne nastavenie je <strong>%1</strong>. &Cancel &ZruÅ¡iÅ¥ &OK &OK LicensePage Form Forma <h1>License Agreement</h1> <h1>LicenÄné podmienky</h1> I accept the terms and conditions above. Prijímam podmienky vyššie. Please review the End User License Agreements (EULAs). Prosím, prezrite si licenÄné podmienky koncového používateľa (EULA). This setup procedure will install proprietary software that is subject to licensing terms. Touto inÅ¡talaÄnou procedúrou sa nainÅ¡taluje uzavretý softvér, ktorý je predmetom licenÄných podmienok. If you do not agree with the terms, the setup procedure cannot continue. Bez súhlasu podmienok nemôže inÅ¡talaÄná procedúra pokraÄovaÅ¥. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License Licencia LicenseWidget URL: %1 URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>OvládaÄ %1</strong><br/>vytvoril %2 <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>OvládaÄ grafickej karty %1</strong><br/><font color="Grey">vytvoril %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>Zásuvný modul prehliadaÄa %1</strong><br/><font color="Grey">vytvoril %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>Kodek %1</strong><br/><font color="Grey">vytvoril %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>Balík %1</strong><br/><font color="Grey">vytvoril %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">vytvoril %2</font> File: %1 Súbor: %1 Show the license text ZobraziÅ¥ licenÄný text Open license agreement in browser. OtvoriÅ¥ licenÄné podmienky v prehliadaÄi. Hide license text <br> LocalePage The system language will be set to %1. Jazyk systému bude nastavený na %1. The numbers and dates locale will be set to %1. Miestne nastavenie Äísel a dátumov bude nastavené na %1. Region: OblasÅ¥: Zone: Zóna: &Change... Z&meniÅ¥... Set timezone to %1/%2.<br/> Nastavenie Äasovej zóny na %1/%2.<br/> LocaleViewStep Location Umiestnenie LuksBootKeyFileJob Configuring LUKS key file. Nastavuje sa kľúÄový súbor LUKS. No partitions are defined. Nie sú urÄené žiadne oddiely. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Generovanie identifikátora poÄítaÄa. Configuration Error Chyba konfigurácie No root mount point is set for MachineId. NetInstallPage Name Názov Description Popis Network Installation. (Disabled: Unable to fetch package lists, check your network connection) SieÅ¥ová inÅ¡talácia. (Zakázaná: Nie je možné získaÅ¥ zoznamy balíkov. Skontrolujte vaÅ¡e sieÅ¥ové pripojenie.) Network Installation. (Disabled: Received invalid groups data) SieÅ¥ová inÅ¡talácia. (Zakázaná: Boli prijaté neplatné údaje o skupinách) Network Installation. (Disabled: Incorrect configuration) SieÅ¥ová inÅ¡talácia. (Zakázaná: Nesprávna konfigurácia) NetInstallViewStep Package selection Výber balíkov Office software Office package Browser software Browser package Web browser Kernel Services Login Desktop Applications NotesQmlViewStep Notes OEMPage Ba&tch: H&romadne: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>Sem zadajte hromadný identifikátor. Bude uložený v cieľovom systéme.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> OEMViewStep OEM Configuration Konfigurácia OEM Set the OEM Batch Identifier to <code>%1</code>. Nastavenie hromadného identifikátora výrobcu na <code>%1</code>. PWQ Password is too short Heslo je príliÅ¡ krátke Password is too long Heslo je príliÅ¡ dlhé Password is too weak Heslo je príliÅ¡ slabé Memory allocation error when setting '%1' Chyba poÄas vyhradzovania pamäte pri nastavovaní „%1“ Memory allocation error Chyba poÄas vyhradzovania pamäte The password is the same as the old one Heslo je rovnaké ako to staré The password is a palindrome Heslo je palindróm The password differs with case changes only Heslo sa odliÅ¡uje iba vo veľkosti písmen The password is too similar to the old one Heslo je príliÅ¡ podobné ako to staré The password contains the user name in some form Heslo obsahuje v nejakom tvare používateľské meno The password contains words from the real name of the user in some form Heslo obsahuje v nejakom tvare slová zo skutoÄného mena používateľa The password contains forbidden words in some form Heslo obsahuje zakázané slová v urÄitom tvare The password contains less than %1 digits Heslo obsahuje menej ako %1 Äíslic The password contains too few digits Heslo tiež obsahuje pár Äíslic The password contains less than %1 uppercase letters Heslo obsahuje menej ako %1 veľkých písmen The password contains too few uppercase letters Heslo obsahuje príliÅ¡ málo veľkých písmen The password contains less than %1 lowercase letters Heslo obsahuje menej ako %1 malých písmen The password contains too few lowercase letters Heslo obsahuje príliÅ¡ málo malých písmen The password contains less than %1 non-alphanumeric characters Heslo obsahuje menej ako% 1 nealfanumerických znakov The password contains too few non-alphanumeric characters Heslo obsahuje príliÅ¡ málo nealfanumerických znakov The password is shorter than %1 characters Heslo je kratÅ¡ie ako %1 znakov The password is too short Heslo je príliÅ¡ krátke The password is just rotated old one Heslo je iba obrátené staré heslo The password contains less than %1 character classes Heslo obsahuje menej ako %1 triedy znakov The password does not contain enough character classes Heslo neobsahuje dostatok tried znakov The password contains more than %1 same characters consecutively Heslo obsahuje viac ako% 1 rovnakých znakov za sebou The password contains too many same characters consecutively Heslo obsahuje príliÅ¡ veľa rovnakých znakov The password contains more than %1 characters of the same class consecutively Heslo obsahuje postupne viac ako% 1 znakov toho istého typu The password contains too many characters of the same class consecutively Heslo obsahuje postupne príliÅ¡ veľa znakov toho istého typu The password contains monotonic sequence longer than %1 characters Heslo obsahuje monotónnu sekvenciu dlhÅ¡iu ako %1 znakov The password contains too long of a monotonic character sequence Heslo obsahuje príliÅ¡ dlhú sekvenciu monotónnych znakov No password supplied Nebolo poskytnuté žiadne heslo Cannot obtain random numbers from the RNG device Nedajú sa získaÅ¥ náhodné Äísla zo zariadenia RNG Password generation failed - required entropy too low for settings Generovanie hesla zlyhalo - potrebná entropia je príliÅ¡ nízka na nastavenie The password fails the dictionary check - %1 Heslo zlyhalo pri slovníkovej kontrole - %1 The password fails the dictionary check Heslo zlyhalo pri slovníkovej kontrole Unknown setting - %1 Neznáme nastavenie - %1 Unknown setting Neznáme nastavenie Bad integer value of setting - %1 Nesprávna celoÄíselná hodnota nastavenia - %1 Bad integer value Nesprávna celoÄíselná hodnota Setting %1 is not of integer type Nastavenie %1 nie je celé Äíslo Setting is not of integer type Nastavenie nie je celé Äíslo Setting %1 is not of string type Nastavenie %1 nie je reÅ¥azec Setting is not of string type Nastavenie nie je reÅ¥azec Opening the configuration file failed Zlyhalo otváranie konfiguraÄného súboru The configuration file is malformed KonfiguraÄný súbor je poÅ¡kodený Fatal failure Závažné zlyhanie Unknown error Neznáma chyba Password is empty Heslo je prázdne PackageChooserPage Form Forma Product Name Názov produktu TextLabel Textová menovka Long Product Description Dlhý popis produktu Package Selection Výber balíkov Please pick a product from the list. The selected product will be installed. Prosím, vyberte produkt zo zoznamu. Vybraný produkt bude nainÅ¡talovaný. PackageChooserViewStep Packages Balíky Page_Keyboard Form Forma Keyboard Model: Model klávesnice: Type here to test your keyboard Tu môžete písaÅ¥ na odskúšanie vaÅ¡ej klávesnice Page_UserSetup Form Forma What is your name? Aké je vaÅ¡e meno? What name do you want to use to log in? Aké meno chcete použiÅ¥ na prihlásenie? Choose a password to keep your account safe. Zvoľte heslo pre zachovanie vášho úÄtu v bezpeÄí. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>Zadajte rovnaké heslo dvakrát, aby sa prediÅ¡lo preklepom. Dobré heslo by malo obsahovaÅ¥ mix písmen, Äísel a diakritiky, malo by maÅ¥ dĺžku aspoň osem znakov a malo by byÅ¥ pravidelne menené.</small> What is the name of this computer? Aký je názov tohto poÄítaÄa? Your Full Name VaÅ¡e celé meno login prihlásenie <small>This name will be used if you make the computer visible to others on a network.</small> <small>Tento názov bude použitý, keÄ sprístupníte poÄítaÄ v sieti.</small> Computer Name Názov poÄítaÄa Password Heslo Repeat Password Zopakovanie hesla When this box is checked, password-strength checking is done and you will not be able to use a weak password. KeÄ je zaÅ¡krtnuté toto políÄko, kontrola kvality hesla bude ukonÄená a nebudete môcÅ¥ použiÅ¥ slabé heslo. Require strong passwords. Vyžadujú sa silné heslá. Log in automatically without asking for the password. PrihlásiÅ¥ automaticky bez pýtania hesla. Use the same password for the administrator account. PoužiÅ¥ rovnaké heslo pre úÄet správcu. Choose a password for the administrator account. Zvoľte heslo pre úÄet správcu. <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Zadajte rovnaké heslo dvakrát, aby sa prediÅ¡lo preklepom.</small> PartitionLabelsView Root Koreňový adresár Home Domovský adresár Boot ZavádzaÄ EFI system Systém EFI Swap Odkladací priestor New partition for %1 Nový oddiel pre %1 New partition Nový oddiel %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space Voľné miesto New partition Nový oddiel Name Názov File System Systém súborov Mount Point Bod pripojenia Size VeľkosÅ¥ PartitionPage Form Forma Storage de&vice: Úložné zar&iadenie: &Revert All Changes V&rátiÅ¥ vÅ¡etky zmeny New Partition &Table Nová &tabuľka oddielov Cre&ate VytvoriÅ¥ &Edit &UpraviÅ¥ &Delete O&dstrániÅ¥ New Volume Group Nová skupina zväzkov Resize Volume Group ZmeniÅ¥ veľkosÅ¥ skupiny zväzkov Deactivate Volume Group DeaktivovaÅ¥ skupinu zväzkov Remove Volume Group OdstrániÅ¥ skupinu zväzkov I&nstall boot loader on: Nai&nÅ¡talovaÅ¥ zavádzaÄ na: Are you sure you want to create a new partition table on %1? Naozaj chcete vytvoriÅ¥ novú tabuľku oddielov na zariadení %1? Can not create new partition Nedá sa vytvoriÅ¥ nový oddiel The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. Tabuľka oddielov na %1 už obsahuje primárne oddiely %2 a nie je možné pridávaÅ¥ žiadne ÄalÅ¡ie. Odstráňte jeden primárny oddiel a namiesto toho pridajte rozšírenú oblasÅ¥. PartitionViewStep Gathering system information... Zbierajú sa informácie o poÄítaÄi... Partitions Oddiely Install %1 <strong>alongside</strong> another operating system. InÅ¡talácia distribúcie %1 <strong>popri</strong> inom operaÄnom systéme. <strong>Erase</strong> disk and install %1. <strong>Vymazanie</strong> disku a inÅ¡talácia distribúcie %1. <strong>Replace</strong> a partition with %1. <strong>Nahradenie</strong> oddielu distribúciou %1. <strong>Manual</strong> partitioning. <strong>RuÄné</strong> rozdelenie oddielov. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). InÅ¡talácia distribúcie %1 <strong>popri</strong> inom operaÄnom systéme na disku <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Vymazanie</strong> disku <strong>%2</strong> (%3) a inÅ¡talácia distribúcie %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Nahradenie</strong> oddielu na disku <strong>%2</strong> (%3) distribúciou %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>RuÄné</strong> rozdelenie oddielov na disku <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Disk <strong>%1</strong> (%2) Current: Teraz: After: Potom: No EFI system partition configured Nie je nastavený žiadny oddiel systému EFI An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. Oddiel systému EFI je potrebný pre spustenie distribúcie %1.<br/><br/>Na nastavenie oddielu systému EFI prejdite späť a vyberte alebo vytvorte systém súborov FAT32 s povolenou znaÄkou <strong>esp</strong> a bod pripojenia <strong>%2</strong>.<br/><br/>Môžete pokraÄovaÅ¥ bez nastavenia oddielu systému EFI, ale váš systém môže pri spustení zlyhaÅ¥. EFI system partition flag not set ZnaÄka oddielu systému EFI nie je nastavená An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Oddiel systému EFI je potrebný pre spustenie distribúcie %1.<br/><br/>Oddiel bol nastavený s bodom pripojenia <strong>%2</strong>, ale nemá nastavenú znaÄku <strong>esp</strong>.<br/>Na nastavenie znaÄky prejdite späť a upravte oddiel.<br/><br/>Môžete pokraÄovaÅ¥ bez nastavenia znaÄky, ale váš systém môže pri spustení zlyhaÅ¥. Boot partition not encrypted Zavádzací oddiel nie je zaÅ¡ifrovaný A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. Spolu so zaÅ¡ifrovaným koreňovým oddielom bol nainÅ¡talovaný oddelený zavádzací oddiel, ktorý ale nie je zaÅ¡ifrovaný.<br/><br/>S týmto typom inÅ¡talácie je ohrozená bezpeÄnosÅ¥, pretože dôležité systémové súbory sú uchovávané na nezaÅ¡ifrovanom oddieli.<br/>Ak si to želáte, môžete pokraÄovaÅ¥, ale neskôr, poÄas spúšťania systému sa vykoná odomknutie systému súborov.<br/>Na zaÅ¡ifrovanie zavádzacieho oddielu prejdite späť a vytvorte ju znovu vybraním voľby <strong>ZaÅ¡ifrovaÅ¥</strong> v okne vytvárania oddielu. has at least one disk device available. má dostupné aspoň jedno diskové zariadenie. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Úloha vzhľadu a dojmu prostredia Plasma Could not select KDE Plasma Look-and-Feel package Nepodarilo sa vybraÅ¥ balík vzhľadu a dojmu prostredia KDE Plasma PlasmaLnfPage Form Forma Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Prosím, zvoľte vzhľad a dojem pre pracovné prostredie KDE Plasma. Tento krok môžete preskoÄiÅ¥ a nastaviÅ¥ vzhľad a dojem po inÅ¡talácii systému. Kliknutím na výber Vzhľad a dojem sa zobrazí živý náhľad daného vzhľadu a dojmu. PlasmaLnfViewStep Look-and-Feel Vzhľad a dojem PreserveFiles Saving files for later ... Ukladajú sa súbory na neskôr... No files configured to save for later. Žiadne konfigurované súbory pre uloženie na neskôr. Not all of the configured files could be preserved. Nie vÅ¡etky konfigurované súbory môžu byÅ¥ uchované. ProcessResult There was no output from the command. Žiadny výstup z príkazu. Output: Výstup: External command crashed. Externý príkaz neÄakane skonÄil. Command <i>%1</i> crashed. Príkaz <i>%1</i> neÄakane skonÄil. External command failed to start. Zlyhalo spustenie externého príkazu. Command <i>%1</i> failed to start. Zlyhalo spustenie príkazu <i>%1</i> . Internal error when starting command. PoÄas spúšťania príkazu sa vyskytla interná chyba. Bad parameters for process job call. Nesprávne parametre pre volanie úlohy procesu. External command failed to finish. Zlyhalo dokonÄenie externého príkazu. Command <i>%1</i> failed to finish in %2 seconds. Zlyhalo dokonÄenie príkazu <i>%1</i> poÄas doby %2 sekúnd. External command finished with errors. Externý príkaz bol dokonÄený s chybami. Command <i>%1</i> finished with exit code %2. Príkaz <i>%1</i> skonÄil s ukonÄovacím kódom %2. QObject Default Keyboard Model Predvolený model klávesnice Default Predvolený unknown neznámy extended rozšírený unformatted nenaformátovaný swap odkladací Unpartitioned space or unknown partition table Nerozdelené miesto alebo neznáma tabuľka oddielov (no mount point) (žiadny bod pripojenia) Requirements checking for module <i>%1</i> is complete. Kontrola požiadaviek modulu <i>%1</i> je dokonÄená. %1 (%2) language[name] (country[name]) %1 (%2) No product Žiadny produkt No description provided. Nie je poskytnutý żiadny popis. File not found Súbor sa nenaÅ¡iel Path <pre>%1</pre> must be an absolute path. Cesta <pre>%1</pre> musí byÅ¥ úplnou cestou. Could not create new random file <pre>%1</pre>. Nepodarilo sa vytvoriÅ¥ nový náhodný súbor <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Odstránenie skupiny zväzkov s názvom %1. Remove Volume Group named <strong>%1</strong>. Odstránenie skupiny s názvom <strong>%1</strong>. The installer failed to remove a volume group named '%1'. InÅ¡talátor zlyhal pri odstraňovaní skupiny zväzkov s názvom „%1“. ReplaceWidget Form Forma Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Vyberte, kam sa má nainÅ¡talovaÅ¥ distribúcia %1.<br/><font color="red">Upozornenie: </font>týmto sa odstránia vÅ¡etky súbory na vybranom oddieli. The selected item does not appear to be a valid partition. Zdá sa, že vybraná položka nie je platným oddielom. %1 cannot be installed on empty space. Please select an existing partition. Distribúcia %1 sa nedá nainÅ¡talovaÅ¥ na prázdne miesto. Prosím, vyberte existujúci oddiel. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. Distribúcia %1 sa nedá nainÅ¡talovaÅ¥ na rozšírený oddiel. Prosím, vyberte existujúci primárny alebo logický oddiel. %1 cannot be installed on this partition. Distribúcia %1 sa nedá nainÅ¡talovaÅ¥ na tento oddiel. Data partition (%1) Údajový oddiel (%1) Unknown system partition (%1) Neznámy systémový oddiel (%1) %1 system partition (%2) Systémový oddiel operaÄného systému %1 (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>Oddiel %1 je príliÅ¡ malý pre distribúciu %2. Prosím, vyberte oddiel s kapacitou aspoň %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/>Oddiel systému EFI sa nedá v tomto poÄítaÄi nájsÅ¥. Prosím, prejdite späť a použite ruÄné rozdelenie oddielov na inÅ¡taláciu distribúcie %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>Distribúcia %1 bude nainÅ¡talovaná na oddiel %2.<br/><font color="red">Upozornenie: </font>vÅ¡etky údaje na oddieli %2 budú stratené. The EFI system partition at %1 will be used for starting %2. Oddiel systému EFI na %1 bude použitý pre spustenie distribúcie %2. EFI system partition: Oddiel systému EFI: ResizeFSJob Resize Filesystem Job Úloha zmeny veľkosti systému súborov Invalid configuration Neplatná konfigurácia The file-system resize job has an invalid configuration and will not run. Úloha zmeny veľkosti systému súborov má neplatnú konfiguráciu a nebude spustená. KPMCore not Available Jadro KPMCore nie je dostupné Calamares cannot start KPMCore for the file-system resize job. InÅ¡talátor Calamares nemôže spustiÅ¥ jadro KPMCore pre úlohu zmeny veľkosti systému súborov. Resize Failed Zlyhala zmena veľkosti The filesystem %1 could not be found in this system, and cannot be resized. Systém súborov %1 sa nepodarilo nájsÅ¥ v tomto systéme a nemôže sa zmeniÅ¥ jeho veľkosÅ¥. The device %1 could not be found in this system, and cannot be resized. Zariadenie %1 sa nepodarilo nájsÅ¥ v tomto systéme a nemôže sa zmeniÅ¥ jeho veľkosÅ¥. The filesystem %1 cannot be resized. Nedá sa zmeniÅ¥ veľkosÅ¥ systému súborov %1. The device %1 cannot be resized. Nedá sa zmeniÅ¥ veľkosÅ¥ zariadenia %1. The filesystem %1 must be resized, but cannot. Musí sa zmeniÅ¥ veľkosÅ¥ systému súborov %1, ale nedá sa vykonaÅ¥. The device %1 must be resized, but cannot Musí sa zmeniÅ¥ veľkosÅ¥ zariadenia %1, ale nedá sa vykonaÅ¥. ResizePartitionJob Resize partition %1. Zmena veľkosti oddielu %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Zmena veľkosti <strong>%2MiB</strong> oddielu <strong>%1</strong> na <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. Mení sa veľkosÅ¥ %2MiB oddielu %1 na %3MiB. The installer failed to resize partition %1 on disk '%2'. InÅ¡talátor zlyhal pri zmene veľkosti oddielu %1 na disku „%2“. ResizeVolumeGroupDialog Resize Volume Group ZmeniÅ¥ veľkosÅ¥ skupiny zväzkov ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Zmena veľkosti skupiny zväzkov s názvom %1 z %2 na %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. Zmena veľkosti skupiny zväzkov s názvom <strong>%1</strong> z <strong>%2</strong> na <strong>%3</strong>. The installer failed to resize a volume group named '%1'. InÅ¡talátor zlyhal pri zmene veľkosti skupiny zväzkov s názvom „%1“. ResultsListDialog For best results, please ensure that this computer: Pre Äo najlepší výsledok, sa prosím, uistite, že tento poÄítaÄ: System requirements Systémové požiadavky ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> Tento poÄítaÄ nespĺňa minimálne požiadavky pre inÅ¡taláciu distribúcie %1.<br/>InÅ¡talácia nemôže pokraÄovaÅ¥. <a href="#details">Podrobnosti...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> Tento poÄítaÄ nespĺňa minimálne požiadavky pre inÅ¡taláciu distribúcie %1.<br/>InÅ¡talácia nemôže pokraÄovaÅ¥. <a href="#details">Podrobnosti...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. Tento poÄítaÄ nespĺňa niektoré z odporúÄaných požiadaviek pre inÅ¡taláciu distribúcie %1.<br/>InÅ¡talácia môže pokraÄovaÅ¥, ale niektoré funkcie môžu byÅ¥ zakázané. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. Tento poÄítaÄ nespĺňa niektoré z odporúÄaných požiadaviek pre inÅ¡taláciu distribúcie %1.<br/>InÅ¡talácia môže pokraÄovaÅ¥, ale niektoré funkcie môžu byÅ¥ zakázané. This program will ask you some questions and set up %2 on your computer. Tento program vám položí niekoľko otázok a nainÅ¡taluje distribúciu %2 do vášho poÄítaÄa. ScanningDialog Scanning storage devices... Prehľadávajú sa úložné zariadenia... Partitioning Rozdelenie oddielov SetHostNameJob Set hostname %1 Nastavenie názvu hostiteľa %1 Set hostname <strong>%1</strong>. Nastavenie názvu hostiteľa <strong>%1</strong>. Setting hostname %1. Nastavuje sa názov hostiteľa %1. Internal Error Vnútorná chyba Cannot write hostname to target system Nedá sa zapísaÅ¥ názov hostiteľa do cieľového systému SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Nastavenie modelu klávesnice na %1 a rozloženia na %2-%3 Failed to write keyboard configuration for the virtual console. Zlyhalo zapísanie nastavenia klávesnice pre virtuálnu konzolu. Failed to write to %1 Zlyhalo zapísanie do %1 Failed to write keyboard configuration for X11. Zlyhalo zapísanie nastavenia klávesnice pre server X11. Failed to write keyboard configuration to existing /etc/default directory. Zlyhalo zapísanie nastavenia klávesnice do existujúceho adresára /etc/default. SetPartFlagsJob Set flags on partition %1. Nastavenie znaÄiek na oddieli %1. Set flags on %1MiB %2 partition. Nastavenie znaÄiek na %1MiB oddieli %2. Set flags on new partition. Nastavenie znaÄiek na novom oddieli. Clear flags on partition <strong>%1</strong>. Vymazanie znaÄiek na oddieli <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Vymazanie znaÄiek na %1MiB oddieli <strong>%2</strong>. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. OznaÄenie %1MiB oddielu <strong>%2</strong> ako <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Vymazávajú sa znaÄky na %1MiB oddieli <strong>%2</strong>. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Nastavujú sa znaÄky <strong>%3</strong> na %1MiB oddieli <strong>%2</strong>. Clear flags on new partition. Vymazanie znaÄiek na novom oddieli. Flag partition <strong>%1</strong> as <strong>%2</strong>. OznaÄenie oddielu <strong>%1</strong> ako <strong>%2</strong>. Flag new partition as <strong>%1</strong>. OznaÄenie nového oddielu ako <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Vymazávajú sa znaÄky na oddieli <strong>%1</strong>. Clearing flags on new partition. Vymazávajú sa znaÄky na novom oddieli. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Nastavujú sa znaÄky <strong>%2</strong> na oddieli <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. Nastavujú sa znaÄky <strong>%1</strong> na novom oddieli. The installer failed to set flags on partition %1. InÅ¡talátor zlyhal pri nastavovaní znaÄiek na oddieli %1. SetPasswordJob Set password for user %1 Nastavenie hesla pre používateľa %1 Setting password for user %1. Nastavuje sa heslo pre používateľa %1. Bad destination system path. Nesprávny cieľ systémovej cesty. rootMountPoint is %1 rootMountPoint je %1 Cannot disable root account. Nedá sa zakázaÅ¥ úÄet správcu. passwd terminated with error code %1. Príkaz passwd ukonÄený s chybovým kódom %1. Cannot set password for user %1. Nedá sa nastaviÅ¥ heslo pre používateľa %1. usermod terminated with error code %1. Príkaz usermod ukonÄený s chybovým kódom %1. SetTimezoneJob Set timezone to %1/%2 Nastavenie Äasovej zóny na %1/%2 Cannot access selected timezone path. Nedá sa získaÅ¥ prístup k vybranej ceste Äasovej zóny. Bad path: %1 Nesprávna cesta: %1 Cannot set timezone. Nedá sa nastaviÅ¥ Äasová zóna. Link creation failed, target: %1; link name: %2 Zlyhalo vytvorenie odakzu, cieľ: %1; názov odkazu: %2 Cannot set timezone, Nedá sa nastaviÅ¥ Äasová zóna, Cannot open /etc/timezone for writing Nedá sa otvoriÅ¥ cesta /etc/timezone pre zapisovanie ShellProcessJob Shell Processes Job Úloha procesov príkazového riadku SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage This is an overview of what will happen once you start the setup procedure. Toto je prehľad toho, Äo sa stane, keÄ spustíte inÅ¡taláciu. This is an overview of what will happen once you start the install procedure. Toto je prehľad toho, Äo sa stane, keÄ spustíte inÅ¡taláciu. SummaryViewStep Summary Súhrn TrackingInstallJob Installation feedback Spätná väzba inÅ¡talácie Sending installation feedback. Odosiela sa spätná väzba inÅ¡talácie. Internal error in install-tracking. Interná chyba príkazu install-tracking. HTTP request timed out. Požiadavka HTTP vyprÅ¡ala. TrackingMachineNeonJob Machine feedback Spätná väzba poÄítaÄa Configuring machine feedback. Nastavuje sa spätná väzba poÄítaÄa. Error in machine feedback configuration. Chyba pri nastavovaní spätnej väzby poÄítaÄa. Could not configure machine feedback correctly, script error %1. Nepodarilo sa správne nastaviÅ¥ spätnú väzbu poÄítaÄa. Chyba skriptu %1. Could not configure machine feedback correctly, Calamares error %1. Nepodarilo sa správne nastaviÅ¥ spätnú väzbu poÄítaÄa. Chyba inÅ¡talátora Calamares %1. TrackingPage Form Forma Placeholder Zástupný text <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>Výberom tejto voľby neodoÅ¡lete <span style=" font-weight:600;">žiadne informácie</span> o vaÅ¡ej inÅ¡talácii.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Kliknutím sem získate viac informácií o spätnej väzbe od používateľa</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. InÅ¡talácia sledovania pomáha distribúcii %1 vidieÅ¥, koľko používateľov ju používa, na akom hardvéri inÅ¡talujú distribúciu %1 a (s poslednými dvoma voľbami nižšie) získavaÅ¥ nepretržité informácie o uprednostňovaných aplikáciách. Na zobrazenie, Äo bude odosielané, prosím, kliknite na ikonu pomocníka vedľa každej oblasti. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. Vybraním tejto voľby odoÅ¡lete informácie o vaÅ¡ej inÅ¡talácii a hardvéri. Tieto informácie budú <b>odoslané iba raz</b> po dokonÄení inÅ¡talácie. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. Vybraním tejto voľby budete <b>pravidelne</b> odosielaÅ¥ informácie o vaÅ¡ej inÅ¡talácii, hardvéri a aplikáciách distribúcii %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. Vybraním tejto voľby budete <b>neustále</b> odosielaÅ¥ informácie o vaÅ¡ej inÅ¡talácii, hardvéri, aplikáciách a charakteristike používania distribúcii %1. TrackingViewStep Feedback Spätná väzba UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Ak bude tento poÄítaÄ používaÅ¥ viac ako jedna osoba, môžete nastaviÅ¥ viacero úÄtov po inÅ¡talácii.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Ak bude tento poÄítaÄ používaÅ¥ viac ako jedna osoba, môžete nastaviÅ¥ viacero úÄtov po inÅ¡talácii.</small> Your username is too long. VaÅ¡e používateľské meno je príliÅ¡ dlhé. Your username must start with a lowercase letter or underscore. VaÅ¡e používateľské meno musí zaÄínaÅ¥ malým písmenom alebo podÄiarkovníkom. Only lowercase letters, numbers, underscore and hyphen are allowed. Only letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Váš názov hostiteľa je príliÅ¡ krátky. Your hostname is too long. Váš názov hostiteľa je príliÅ¡ dlhý. Your passwords do not match! VaÅ¡e heslá sa nezhodujú! UsersViewStep Users Používatelia VariantModel Key Value Hodnota VolumeGroupBaseDialog Create Volume Group VytvoriÅ¥ skupinu zväzkov List of Physical Volumes Zoznam fyzických zväzkov Volume Group Name: Názov skupiny zväzkov: Volume Group Type: Typ skupiny zväzkov: Physical Extent Size: Fyzická veľkosÅ¥ oblasti: MiB MiB Total Size: Celková veľkosÅ¥: Used Size: Využitá veľkosÅ¥: Total Sectors: Celkom sektorov: Quantity of LVs: Množstvo LZ: WelcomePage Form Forma Select application and system language Výber jazyka aplikácií a systému Open donations website &Donate &PrispieÅ¥ Open help and support website OtvoriÅ¥ webovú stránku s pomocou a podporou Open issues and bug-tracking website OtvoriÅ¥ webovú stránku s problémami a chybami Open release notes website OtvoriÅ¥ webovú stránku s poznámkami k vydaniu &Release notes &Poznámky k vydaniu &Known issues &Známe problémy &Support Po&dpora &About &O inÅ¡talátore <h1>Welcome to the %1 installer.</h1> <h1>Vitajte v inÅ¡talátore distribúcie %1.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Vitajte v aplikácii Calamares, inÅ¡talátore distribúcie %1.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Vitajte v inÅ¡talaÄnom programe Calamares pre distribúciu %1.</h1> <h1>Welcome to %1 setup.</h1> <h1>Vitajte pri inÅ¡talácii distribúcie %1.</h1> About %1 setup O inÅ¡talátore %1 About %1 installer O inÅ¡talátore %1 <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. <h1>%1</h1><br/><strong>%2<br/>pre %3</strong><br/><br/>Autorské práva 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Autorské práva 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>PoÄakovanie patrí <a href="https://calamares.io/team/">tímu inÅ¡talátora Calamares</a> a <a href="https://www.transifex.com/calamares/calamares/">prekladateľskému tímu inÅ¡talátora Calamares</a>.<br/><br/>Vývoj inÅ¡talátora <a href="https://calamares.io/">Calamares</a> je sponzorovaný spoloÄnosÅ¥ou <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - oslobodzujúci softvér. %1 support Podpora distribúcie %1 WelcomeQmlViewStep Welcome Uvítanie WelcomeViewStep Welcome Uvítanie notesqml <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> About Support Known issues Release notes Donate calamares-3.2.20/lang/calamares_sl.ts000066400000000000000000004640251362604102500174570ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. BootLoaderModel Master Boot Record of %1 Boot Partition Zagonski razdelek System Partition Sistemski razdelek Do not install a boot loader %1 (%2) Calamares::BlankViewStep Blank Page Calamares::DebugWindow Form Oblika GlobalStorage JobQueue Modules Type: Vrsta: none Interface: Tools Reload Stylesheet Widget Tree Debug information Calamares::ExecutionViewStep Set up Install Namesti Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done KonÄano Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Calamares::PythonJob Running %1 operation. Bad working directory path Nepravilna pot delovne mape Working directory %1 for python job %2 is not readable. Ni mogoÄe brati delovne mape %1 za pythonovo opravilo %2. Bad main script file Nepravilna datoteka glavnega skripta Main script file %1 for python job %2 is not readable. Ni mogoÄe brati datoteke %1 glavnega skripta za pythonovo opravilo %2. Boost.Python error in job "%1". Napaka Boost.Python v opravilu "%1". Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager &Back &Nazaj &Next &Naprej &Cancel Cancel setup without changing the system. Cancel installation without changing the system. Setup Failed Would you like to paste the install log to the web? Install Log Paste URL The upload was unsuccessful. No web-paste was done. Calamares Initialization Failed %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. <br/>The following modules could not be loaded: Continue with installation? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Set up &Install Setup is complete. Close the setup program. Cancel setup? Cancel installation? Preklic namestitve? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Ali res želite preklicati trenutni namestitveni proces? Namestilni program se bo konÄal in vse spremembe bodo izgubljene. &Yes &No &Close Continue with setup? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> &Install now Go &back &Done The installation is complete. Close the installer. Error Napaka Installation Failed Namestitev je spodletela CalamaresPython::Helper Unknown exception type Neznana vrsta izjeme unparseable Python error nerazÄlenljiva napaka Python unparseable Python traceback Unfetchable Python error. CalamaresUtils Install log posted to: %1 CalamaresWindow %1 Setup Program %1 Installer %1 Namestilnik Show debug information CheckerContainer Gathering system information... Zbiranje informacij o sistemu ... ChoicePage Form Oblika After: Potem: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Boot loader location: Select storage de&vice: Current: Reuse %1 as home partition for %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. <strong>Select a partition to install on</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. The EFI system partition at %1 will be used for starting %2. EFI system partition: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. No Swap Reuse Swap Swap (no Hibernate) Swap (with Hibernate) Swap to file <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. ClearMountsJob Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 ClearTempMountsJob Clear all temporary mounts. PoÄisti vse zaÄasne priklope. Clearing all temporary mounts. Cannot get list of temporary mounts. Ni možno dobiti seznama zaÄasnih priklopov. Cleared all temporary mounts. Vsi zaÄasni priklopi so bili poÄiÅ¡Äeni. CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Ustvari razdelek MiB Partition &Type: &Vrsta razdelka: &Primary &Primaren E&xtended R&azÅ¡irjen Fi&le System: LVM LV name Flags: Zastavice: &Mount Point: &Priklopna toÄka: Si&ze: Ve&likost En&crypt Logical LogiÄen Primary Primaren GPT GPT Mountpoint already in use. Please select another one. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. The installer failed to create partition on disk '%1'. Namestilniku ni uspelo ustvariti razdelka na disku '%1'. CreatePartitionTableDialog Create Partition Table Ustvari razpredelnico razdelkov Creating a new partition table will delete all existing data on the disk. Ustvarjanje nove razpredelnice razdelkov bo izbrisalo vse obstojeÄe podatke na disku. What kind of partition table do you want to create? KakÅ¡na vrsta razpredelnice razdelkov naj se ustvari? Master Boot Record (MBR) Master Boot Record (MBR) GUID Partition Table (GPT) GUID Razpredelnica razdelkov (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Creating new %1 partition table on %2. The installer failed to create a partition table on %1. Namestilniku ni uspelo ustvariti razpredelnice razdelkov na %1. CreateUserJob Create user %1 Ustvari uporabnika %1 Create user <strong>%1</strong>. Creating user %1. Sudoers dir is not writable. Mapa sudoers ni zapisljiva. Cannot create sudoers file for writing. Ni mogoÄe ustvariti datoteke sudoers za pisanje. Cannot chmod sudoers file. Na datoteki sudoers ni mogoÄe izvesti opravila chmod. Cannot open groups file for reading. Datoteke skupin ni bilo mogoÄe odpreti za branje. CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. Delete partition <strong>%1</strong>. Deleting partition %1. The installer failed to delete partition %1. Namestilniku ni uspelo izbrisati razdelka %1. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. This device has a <strong>%1</strong> partition table. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Failed to open %1 DummyCppJob Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Uredi obstojeÄi razdelek Content: Vsebina: &Keep Format Formatiraj Warning: Formatting the partition will erase all existing data. Opozorilo: Formatiranje razdelka bo izbrisalo vse obstojeÄe podatke. &Mount Point: &Priklopna toÄka: Si&ze: Ve&likost MiB Fi&le System: Flags: Zastavice: Mountpoint already in use. Please select another one. EncryptWidget Form Oblika En&crypt system Passphrase Confirm passphrase Please enter the same passphrase in both boxes. FillGlobalStorageJob Set partition information Nastavi informacije razdelka Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Install boot loader on <strong>%1</strong>. Setting up mount points. FinishedPage Form Oblika <Restart checkbox tooltip> &Restart now <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. FinishedViewStep Finish KonÄano Setup Complete Installation Complete The setup of %1 is complete. The installation of %1 is complete. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatting partition %1 with file system %2. The installer failed to format partition %1 on disk '%2'. Namestilniku ni uspelo formatirati razdelka %1 na disku '%2'. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source je priklopljen na vir napajanja The system is not plugged in to a power source. is connected to the Internet je povezan s spletom The system is not connected to the Internet. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Please install KDE Konsole and try again! Executing script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script KeyboardPage Set keyboard model to %1.<br/> Nastavi model tipkovnice na %1.<br/> Set keyboard layout to %1/%2. Nastavi razporeditev tipkovnice na %1/%2. KeyboardViewStep Keyboard Tipkovnica LCLocaleDialog System locale setting The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. &Cancel &OK LicensePage Form Oblika <h1>License Agreement</h1> I accept the terms and conditions above. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> File: %1 Show the license text Open license agreement in browser. Hide license text LocalePage The system language will be set to %1. The numbers and dates locale will be set to %1. Region: ObmoÄje: Zone: ÄŒasovni pas: &Change... Set timezone to %1/%2.<br/> Nastavi Äasovni pas na %1/%2.<br/> LocaleViewStep Location Položaj LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Configuration Error No root mount point is set for MachineId. NetInstallPage Name Ime Description Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Incorrect configuration) NetInstallViewStep Package selection Office software Office package Browser software Browser package Web browser Kernel Services Login Desktop Applications NotesQmlViewStep Notes OEMPage Ba&tch: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> OEMViewStep OEM Configuration Set the OEM Batch Identifier to <code>%1</code>. PWQ Password is too short Password is too long Password is too weak Memory allocation error when setting '%1' Memory allocation error The password is the same as the old one The password is a palindrome The password differs with case changes only The password is too similar to the old one The password contains the user name in some form The password contains words from the real name of the user in some form The password contains forbidden words in some form The password contains less than %1 digits The password contains too few digits The password contains less than %1 uppercase letters The password contains too few uppercase letters The password contains less than %1 lowercase letters The password contains too few lowercase letters The password contains less than %1 non-alphanumeric characters The password contains too few non-alphanumeric characters The password is shorter than %1 characters The password is too short The password is just rotated old one The password contains less than %1 character classes The password does not contain enough character classes The password contains more than %1 same characters consecutively The password contains too many same characters consecutively The password contains more than %1 characters of the same class consecutively The password contains too many characters of the same class consecutively The password contains monotonic sequence longer than %1 characters The password contains too long of a monotonic character sequence No password supplied Cannot obtain random numbers from the RNG device Password generation failed - required entropy too low for settings The password fails the dictionary check - %1 The password fails the dictionary check Unknown setting - %1 Unknown setting Bad integer value of setting - %1 Bad integer value Setting %1 is not of integer type Setting is not of integer type Setting %1 is not of string type Setting is not of string type Opening the configuration file failed The configuration file is malformed Fatal failure Unknown error Password is empty PackageChooserPage Form Oblika Product Name TextLabel Long Product Description Package Selection Please pick a product from the list. The selected product will be installed. PackageChooserViewStep Packages Page_Keyboard Form Oblika Keyboard Model: Model tipkovnice: Type here to test your keyboard Tipkajte tukaj za testiranje tipkovnice Page_UserSetup Form Oblika What is your name? VaÅ¡e ime? What name do you want to use to log in? Katero ime želite uporabiti za prijavljanje? Choose a password to keep your account safe. Izberite geslo za zaÅ¡Äito vaÅ¡ega raÄuna. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>Geslo vnesite dvakrat, da se zavarujete pred morebitnimi tipkarskimi napakami. Dobro geslo vsebuje meÅ¡anico Ärk, Å¡tevilk in loÄil ter ima najmanj osem znakov. PriporoÄljivo je, da ga spreminjate v rednih Äasovnih razmikih.</small> What is the name of this computer? Ime raÄunalnika? Your Full Name login <small>This name will be used if you make the computer visible to others on a network.</small> <small>To ime bo uporabljeno, Äe bo vaÅ¡ raÄunalnik viden drugim napravam v omrežju.</small> Computer Name Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Use the same password for the administrator account. Choose a password for the administrator account. Izberite geslo za skrbniÅ¡ki raÄun. <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Geslo vnesite dvakrat, da se zavarujete pred morebitnimi tipkarskimi napakami.</small> PartitionLabelsView Root Home Boot EFI system Swap New partition for %1 New partition Nov razdelek %1 %2 size[number] filesystem[name] PartitionModel Free Space Razpoložljiv prostor New partition Nov razdelek Name Ime File System DatoteÄni sistem Mount Point Priklopna toÄka Size Velikost PartitionPage Form Oblika Storage de&vice: &Revert All Changes &Povrni vse spremembe New Partition &Table Nov razdelek &Razpredelnica Cre&ate &Edit &Urejaj &Delete &IzbriÅ¡i New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group I&nstall boot loader on: Are you sure you want to create a new partition table on %1? Ali ste prepriÄani, da želite ustvariti novo razpredelnico razdelkov na %1? Can not create new partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. PartitionViewStep Gathering system information... Zbiranje informacij o sistemu ... Partitions Razdelki Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <strong>Replace</strong> a partition with %1. <strong>Manual</strong> partitioning. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Current: After: Potem: No EFI system partition configured An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. EFI system partition flag not set An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form Oblika Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: External command crashed. Command <i>%1</i> crashed. External command failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Bad parameters for process job call. Nepravilni parametri za klic procesa opravila. External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Command <i>%1</i> finished with exit code %2. QObject Default Keyboard Model Privzeti model tipkovnice Default Privzeto unknown extended unformatted swap Unpartitioned space or unknown partition table (no mount point) Requirements checking for module <i>%1</i> is complete. %1 (%2) language[name] (country[name]) No product No description provided. File not found Path <pre>%1</pre> must be an absolute path. Could not create new random file <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form Oblika Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. The selected item does not appear to be a valid partition. %1 cannot be installed on empty space. Please select an existing partition. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 cannot be installed on this partition. Data partition (%1) Unknown system partition (%1) %1 system partition (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. The EFI system partition at %1 will be used for starting %2. EFI system partition: ResizeFSJob Resize Filesystem Job Invalid configuration The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. ResizeVolumeGroupDialog Resize Volume Group ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: Za najboljÅ¡e rezultate se prepriÄajte, da vaÅ¡ raÄunalnik izpolnjuje naslednje zahteve: System requirements ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. This program will ask you some questions and set up %2 on your computer. ScanningDialog Scanning storage devices... Partitioning SetHostNameJob Set hostname %1 Set hostname <strong>%1</strong>. Setting hostname %1. Internal Error Cannot write hostname to target system SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Failed to write keyboard configuration for the virtual console. Failed to write to %1 Failed to write keyboard configuration for X11. Failed to write keyboard configuration to existing /etc/default directory. SetPartFlagsJob Set flags on partition %1. Set flags on %1MiB %2 partition. Set flags on new partition. Clear flags on partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag new partition as <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. SetPasswordJob Set password for user %1 Setting password for user %1. Bad destination system path. rootMountPoint is %1 Cannot disable root account. passwd terminated with error code %1. Cannot set password for user %1. usermod terminated with error code %1. SetTimezoneJob Set timezone to %1/%2 Cannot access selected timezone path. Bad path: %1 Cannot set timezone. Link creation failed, target: %1; link name: %2 Cannot set timezone, Cannot open /etc/timezone for writing ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) SummaryPage This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. SummaryViewStep Summary Povzetek TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingMachineNeonJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form Oblika Placeholder <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. TrackingViewStep Feedback UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> Your username is too long. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Only letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Your hostname is too long. Your passwords do not match! UsersViewStep Users VariantModel Key Value VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB Total Size: Used Size: Total Sectors: Quantity of LVs: WelcomePage Form Oblika Select application and system language Open donations website &Donate Open help and support website Open issues and bug-tracking website Open release notes website &Release notes &Known issues &Support &About <h1>Welcome to the %1 installer.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Welcome to %1 setup.</h1> About %1 setup About %1 installer <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support WelcomeQmlViewStep Welcome DobrodoÅ¡li WelcomeViewStep Welcome DobrodoÅ¡li notesqml <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> About Support Known issues Release notes Donate calamares-3.2.20/lang/calamares_sq.ts000066400000000000000000005576521362604102500174750ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. <strong>Mjedisi i nisjes</strong> i këtij sistemi.<br><br>Sisteme x86 të vjetër mbulojnë vetëm <strong>BIOS</strong>.<br>Sistemet moderne zakonisht përdorin <strong>EFI</strong>-n, por mund të shfaqen edhe si BIOS, nëse nisen nën mënyrën përputhshmëri. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. Ky sistem qe nisur me një mjedis nisjesh <strong>EFI</strong>.<br><br>Që të formësojë nisjen nga një mjedis EFI, ky instalues duhet të vërë në punë një aplikacion ngarkuesi nisësi, të tillë si <strong>GRUB</strong> ose <strong>systemd-boot</strong> në një <strong>Pjesë EFI Sistemi</strong>. Kjo bëhet vetvetiu, hiq rastin kur zgjidhni pjesëzim dorazi, rast në të cilin duhet ta zgjidhni apo krijoni ju vetë. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. Ky sistem qe nisur me një mjedis nisjesh <strong>BIOS</strong>.<br><br>Që të formësojë nisjen nga një mjedis BIOS, ky instalues duhet të instalojë një ngarkues nisjesh, të tillë si <strong>GRUB</strong>, ose në krye të një pjese, ose te <strong>Master Boot Record</strong> pranë fillimit të tabelës së pjesëve (e parapëlqyer). Kjo bëhet vetvetiu, veç në zgjedhshi pjesëzim dorazi, rast në të cilin duhet ta rregulloni ju vetë. BootLoaderModel Master Boot Record of %1 Master Boot Record për %1 Boot Partition Pjesë Nisjesh System Partition Pjesëzim Sistemi Do not install a boot loader Mos instalo ngarkues nisjesh %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page Faqe e Zbrazët Calamares::DebugWindow Form Formular GlobalStorage GlobalStorage JobQueue Radhë Aktesh Modules Module Type: Lloj: none asnjë Interface: Ndërfaqe: Tools Mjete Reload Stylesheet Ringarko Fletëstilin Widget Tree Pemë Widget-sh Debug information Të dhëna diagnostikimi Calamares::ExecutionViewStep Set up Ujdise Install Instaloje Calamares::FailJob Job failed (%1) Akti dështoi (%1) Programmed job failure was explicitly requested. Dështimi i programuar i aktit qe kërkuar shprehimisht. Calamares::JobThread Done U bë Calamares::NamedJob Example job (%1) Shembull akti (%1) Calamares::ProcessJob Run command '%1' in target system. Xhiroje urdhrin '%1' te sistemi i synuar. Run command '%1'. Xhiro urdhrin '%1'. Running command %1 %2 Po xhirohet urdhri %1 %2 Calamares::PythonJob Running %1 operation. Po xhirohet %1 veprim. Bad working directory path Shteg i gabuar drejtorie pune Working directory %1 for python job %2 is not readable. Drejtoria e punës %1 për aktin python %2 s’është e lexueshme. Bad main script file Kartelë kryesore programthi e dëmtuar Main script file %1 for python job %2 is not readable. Kartela kryesore e programthit file %1 për aktin python %2 s’është e lexueshme. Boost.Python error in job "%1". Gabim Boost.Python tek akti \"%1\". Calamares::QmlViewStep Loading ... Po ngarkohet … QML Step <i>%1</i>. Hapi QML <i>%1</i>. Loading failed. Ngarkimi dështoi. Calamares::RequirementsChecker Waiting for %n module(s). Po pritet për %n modul(e). Po pritet për %n modul(e). (%n second(s)) (%n sekondë(a)) (%n sekondë(a)) System-requirements checking is complete. Kontrolli i domosdoshmërive të sistemit u plotësua. Calamares::ViewManager &Back &Mbrapsht &Next Pas&uesi &Cancel &Anuloje Cancel setup without changing the system. Anuloje rregullimin pa ndryshuar sistemin. Cancel installation without changing the system. Anuloje instalimin pa ndryshuar sistemin. Setup Failed Rregullimi Dështoi Would you like to paste the install log to the web? Do të donit të hidhet në web regjistri i instalimit? Install Log Paste URL URL Ngjitjeje Regjistri Instalimi The upload was unsuccessful. No web-paste was done. Ngarkimi s’qe i suksesshëm. S’u bë hedhje në web. Calamares Initialization Failed Gatitja e Calamares-it Dështoi %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. %1 s’mund të instalohet. Calamares s’qe në gjendje të ngarkonte krejt modulet e konfiguruar. Ky është një problem që lidhet me mënyrën se si përdoret Calamares nga shpërndarja. <br/>The following modules could not be loaded: <br/>S’u ngarkuan dot modulet vijues: Continue with installation? Të vazhdohet me instalimin? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> Programi i rregullimit %1 është një hap larg nga bërja e ndryshimeve në diskun tuaj, që të mund të rregullojë %2.<br/><strong>S’do të jeni në gjendje t’i zhbëni këto ndryshime.</strong> &Set up now &Rregulloje tani &Set up &Rregulloje &Install &Instaloje Setup is complete. Close the setup program. Rregullimi është i plotë. Mbylleni programin e rregullimit. Cancel setup? Të anulohet rregullimi? Cancel installation? Të anulohet instalimi? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Doni vërtet të anulohet procesi i tanishëm i rregullimit? Programi i rregullimit do të mbyllet dhe krejt ndryshimet do të humbin. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Doni vërtet të anulohet procesi i tanishëm i instalimit? Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. &Yes &Po &No &Jo &Close &Mbylle Continue with setup? Të vazhdohet me rregullimin? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> Instaluesi %1 është një hap larg nga bërja e ndryshimeve në diskun tuaj, që të mund të instalojë %2.<br/><strong>S’do të jeni në gjendje t’i zhbëni këto ndryshime.</strong> &Install now &Instaloje tani Go &back Kthehu &mbrapsht &Done &U bë The installation is complete. Close the installer. Instalimi u plotësua. Mbylle instaluesin. Error Gabim Installation Failed Instalimi Dështoi CalamaresPython::Helper Unknown exception type Lloj i panjohur përjashtimi unparseable Python error Gabim kodi Python të papërtypshëm unparseable Python traceback <i>Traceback</i> Python i papërtypshëm Unfetchable Python error. Gabim Python mosprurjeje kodi. CalamaresUtils Install log posted to: %1 Regjistri i instalimit u postua te: %1 CalamaresWindow %1 Setup Program Programi i Rregullimit të %1 %1 Installer Instalues %1 Show debug information Shfaq të dhëna diagnostikimi CheckerContainer Gathering system information... Po grumbullohen të dhëna mbi sistemin… ChoicePage Form Formular After: Pas: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Pjesëzim dorazi</strong><br/>Pjesët mund t’i krijoni dhe ripërmasoni ju vetë. Boot loader location: Vendndodhje ngarkuesi nisjesh: Select storage de&vice: Përzgjidhni &pajisje depozitimi: Current: E tanishmja: Reuse %1 as home partition for %2. Ripërdore %1 si pjesën shtëpi për %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Përzgjidhni një pjesë që të zvogëlohet, mandej tërhiqni shtyllën e poshtme që ta ripërmasoni</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 do të zvogëlohet në %2MiB dhe për %4 do të krijohet një pjesë e re %3MiB. <strong>Select a partition to install on</strong> <strong>Përzgjidhni një pjesë ku të instalohet</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Në këtë sistem s’gjendet gjëkundi një pjesë EFI sistemi. Ju lutemi, kthehuni mbrapsht dhe përdorni pjesëzimin dorazi që të rregulloni %1. The EFI system partition at %1 will be used for starting %2. Për nisjen e %2 do të përdoret pjesa EFI e sistemit te %1. EFI system partition: Pjesë Sistemi EFI: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Kjo pajisje depozitimi përmban %1 në të. Ç’do të donit të bënit?<br/>Do të jeni në gjendje të rishqyrtoni dhe ripohoni zgjedhjet tuaja, para se te pajisja e depozitimit të bëhet çfarëdo ndryshimi. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Fshije diskun</strong><br/>Kështu do të <font color=\"red\">fshihen</font> krejt të dhënat të pranishme tani në pajisjen e përzgjedhur. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Kjo pajisje depozitimi përmban %1 në të. Ç’do të donit të bënit?<br/>Do të jeni në gjendje të rishqyrtoni dhe ripohoni zgjedhjet tuaja, para se te pajisja e depozitimit të bëhet çfarëdo ndryshimi. No Swap Pa Swap Reuse Swap Ripërdor Swap-in Swap (no Hibernate) Swap (pa Letargji) Swap (with Hibernate) Swap (me Letargji) Swap to file Swap në kartelë <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Instaloje në krah të tij</strong><br/>Instaluesi do të zvogëlojë një pjesë për të bërë vend për %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Zëvendëso një pjesë</strong><br/>Zëvendëson një pjesë me %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Kjo pajisje depozitimi ka tashmë një sistem operativ në të. Ç’do të donit të bënit?<br/>Do të jeni në gjendje të rishqyrtoni dhe ripohoni zgjedhjet tuaja, para se te pajisja e depozitimit të bëhet çfarëdo ndryshimi. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Kjo pajisje depozitimi ka disa sisteme operativë në të. Ç’do të donit të bënit?<br/>Do të jeni në gjendje të rishqyrtoni dhe ripohoni zgjedhjet tuaja, para se te pajisja e depozitimit të bëhet çfarëdo ndryshimi. ClearMountsJob Clear mounts for partitioning operations on %1 Hiqi montimet për veprime pjesëzimi te %1 Clearing mounts for partitioning operations on %1. Po hiqen montimet për veprime pjesëzimi te %1. Cleared all mounts for %1 U hoqën krejt montimet për %1 ClearTempMountsJob Clear all temporary mounts. Hiqi krejt montimet e përkohshme. Clearing all temporary mounts. Po hiqen krejt montimet e përkohshme. Cannot get list of temporary mounts. S’merret dot lista e montimeve të përkohshme. Cleared all temporary mounts. U hoqën krejt montimet e përkohshme. CommandList Could not run command. S’u xhirua dot urdhri. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. Urdhri xhirohet në mjedisin strehë dhe është e nevojshme të dijë shtegun për rrënjën, por nuk ka rootMountPoint të përcaktuar. The command needs to know the user's name, but no username is defined. Urdhri lypset të dijë emrin e përdoruesit, por s’ka të përcaktuar emër përdoruesi. ContextualProcessJob Contextual Processes Job Akt Procesesh Kontekstuale CreatePartitionDialog Create a Partition Krijoni një Pjesë MiB MiB Partition &Type: &Lloj Pjese: &Primary &Parësore E&xtended E&xtended Fi&le System: &Sistem Kartelash: LVM LV name Emër VLl LVM Flags: Flamurka: &Mount Point: Pikë &Montimi: Si&ze: &Madhësi: En&crypt &Fshehtëzoje Logical Logjik Primary Parësor GPT GPT Mountpoint already in use. Please select another one. Pikë montimi tashmë e përdorur. Ju lutemi, përzgjidhni një tjetër. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Krijo pjesë të re %2MiB te %4 (%3) me sistem kartelash %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Krijo pjesë të re <strong>%2MiB</strong> te <strong>%4</strong> (%3) me sistem kartelash <strong>%1</strong>. Creating new %1 partition on %2. Po krijohet pjesë e re %1 te %2. The installer failed to create partition on disk '%1'. Instaluesi s’arriti të krijojë pjesë në diskun '%1'. CreatePartitionTableDialog Create Partition Table Krijo Tabelë Pjesësh Creating a new partition table will delete all existing data on the disk. Krijimi i një tabele të re pjesësh do të fshijë krejt të dhënat ekzistuese në disk. What kind of partition table do you want to create? Ç’lloj tabele pjesësh doni të krijoni? Master Boot Record (MBR) Master Boot Record (MBR) GUID Partition Table (GPT) Tabelë Pjesësh GUID (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Krijo tabelë të re pjesësh %1 te %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Krijoni tabelë pjesësh të re <strong>%1</strong> te <strong>%2</strong> (%3). Creating new %1 partition table on %2. Po krijohet tabelë e re pjesësh %1 te %2. The installer failed to create a partition table on %1. Instaluesi s’arriti të krijojë tabelë pjesësh në diskun %1. CreateUserJob Create user %1 Krijo përdoruesin %1 Create user <strong>%1</strong>. Krijo përdoruesin <strong>%1</strong>. Creating user %1. Po krijohet përdoruesi %1. Sudoers dir is not writable. Drejtoria sudoers s’është e shkrueshme. Cannot create sudoers file for writing. S’krijohet dot kartelë sudoers për shkrim. Cannot chmod sudoers file. S’mund të kryhet chmod mbi kartelën sudoers. Cannot open groups file for reading. S’hapet dot kartelë grupesh për lexim. CreateVolumeGroupDialog Create Volume Group Krijoni Grup Volumesh CreateVolumeGroupJob Create new volume group named %1. Krijo grup të ri vëllimesh të quajtur %1. Create new volume group named <strong>%1</strong>. Krijo grup të ri vëllimesh të quajtur <strong>%1</strong>. Creating new volume group named %1. Po krijohet grup i ri vëllimesh i quajtur <strong>%1</strong>. The installer failed to create a volume group named '%1'. Instaluesi s’arriti të krijojë grup të ri vëllimesh të quajtur '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Çaktivizoje grupin e vëllimeve të quajtur %1. Deactivate volume group named <strong>%1</strong>. Çaktivizoje grupin e vëllimeve të quajtur <strong>%1</strong>. The installer failed to deactivate a volume group named %1. Instaluesi s’arriti të çaktivizojë një grup vëllimesh të quajtur %1. DeletePartitionJob Delete partition %1. Fshije pjesën %1. Delete partition <strong>%1</strong>. Fshije pjesën <strong>%1</strong>. Deleting partition %1. Po fshihet pjesa %1. The installer failed to delete partition %1. Instaluesi dështoi në fshirjen e pjesës %1. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. Lloji i <strong>tabelës së pjesëve</strong> në pajisjen e përzgjedhur të depozitimeve.<br><br>Mënyra e vetme për ndryshim të tabelës së pjesëve është të fshihet dhe rikrijohet nga e para tabela e pjesëve, çka shkatërron krejt të dhënat në pajisjen e depozitimit.<br>Ky instalues do të ruajë tabelën e tanishme të pjesëve, veç në zgjedhshi ndryshe shprehimisht.<br>Nëse s’jeni i sigurt, në sisteme moderne parapëlqehet GPT. This device has a <strong>%1</strong> partition table. Kjo pajisje ka një tabelë pjesësh <strong>%1</strong>. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. Kjo është një pajisje <strong>loop</strong>.<br><br>Është një pseudo-pajisje pa tabelë pjesësh, që e bën një kartelë të përdorshme si një pajisje blloqesh. Kjo lloj skeme zakonisht përmban një sistem të vetëm kartelash. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. Ky instalues <strong>s’pikas dot tabelë pjesësh</strong> te pajisja e depozitimit e përzgjedhur.<br><br>Ose pajisja s’ka tabelë pjesësh, ose tabela e pjesëve është e dëmtuar ose e një lloji të panjohur.<br>Ky instalues mund të krijojë për ju një tabelë të re pjesësh, ose vetvetiu, ose përmes faqes së pjesëzimit dorazi. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Ky është lloji i parapëlqyer tabele pjesësh për sisteme modernë që nisen nga një mjedis nisjesh <strong>EFI</strong>. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. <br><br>Ky lloj tabele pjesësh është i këshillueshëm vetëm në sisteme të vjetër të cilët nisen nga një mjedis nisjesh <strong>BIOS</strong>. Në shumicën e rasteve të tjera këshillohet GPT.<br><br><strong>Kujdes:</strong> Tabela e pjesëve MBR është një standard i vjetruar, i erës MS-DOS.<br>Mund të krijohen vetëm 4 pjesë <em>parësore</em>, dhe nga këto 4, një mund të jetë pjesë <em>extended</em>, e cila nga ana e vet mund të përmbajë mjaft pjesë <em>logjike</em>. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1 - (%2) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Shkruaj formësim LUKS për Dracut te %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Anashkalo shkrim formësim LUKS për Dracut: pjesa \"/\" s’është e fshehtëzuar Failed to open %1 S’arrihet të hapet %1 DummyCppJob Dummy C++ Job Akt C++ Dummy EditExistingPartitionDialog Edit Existing Partition Përpuno Pjesën Ekzistuese Content: Lëndë: &Keep &Mbaje Format Formatoje Warning: Formatting the partition will erase all existing data. Kujdes: Formatimi i pjesës do të fshijë krejt të dhënat ekzistuese. &Mount Point: Pikë &Montimi: Si&ze: &Madhësi: MiB MiB Fi&le System: &Sistem Kartelash: Flags: Flamurka: Mountpoint already in use. Please select another one. Pikë montimi tashmë e përdorur. Ju lutemi, përzgjidhni një tjetër. EncryptWidget Form Formular En&crypt system &Fshehtëzoje sistemin Passphrase Frazëkalim Confirm passphrase Ripohoni frazëkalimin Please enter the same passphrase in both boxes. Ju lutemi, jepni të njëjtin frazëkalim në të dy kutizat. FillGlobalStorageJob Set partition information Caktoni të dhëna pjese Install %1 on <strong>new</strong> %2 system partition. Instaloje %1 në pjesë sistemi <strong>të re</strong> %2. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Rregullo pjesë të <strong>re</strong> %2 me pikë montimi <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Instaloje %2 te pjesa e sistemit %3 <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Rregullo pjesë %3 <strong>%1</strong> me pikë montimi <strong>%2</strong>. Install boot loader on <strong>%1</strong>. Instalo ngarkues nisjesh në <strong>%1</strong>. Setting up mount points. Po rregullohen pika montimesh. FinishedPage Form Formular <Restart checkbox tooltip> <Ndihmëz për kutizën Rinise> &Restart now &Rinise tani <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>Kaq qe.</h1><br/>%1 u rregullua në kompjuterin tuaj.<br/>Tani mundeni të filloni të përdorni sistemin tuaj të ri. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <html><head/><body><p>Kur i vihet shenjë kësaj kutie, sistemi juaj do të riniset menjëherë, kur klikoni mbi <span style=" font-style:italic;">U bë</span> ose mbyllni programin e rregullimit.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>Kaq qe.</h1><br/>%1 është instaluar në kompjuterin tuaj.<br/>Tani mundeni ta rinisni me sistemin tuaj të ri, ose të vazhdoni përdorimin e mjedisit %2 Live. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <html><head/><body><p>Kur i vihet shenjë kësaj kutie, sistemi juaj do të riniset menjëherë, kur klikoni mbi <span style=" font-style:italic;">U bë</span> ose mbyllni instaluesin.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Rregullimi Dështoi</h1><br/>%1 s’u rregullua në kompjuterin tuaj.<br/>Mesazhi i gabimit qe: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Instalimi Dështoi</h1><br/>%1 s’u instalua në kompjuterin tuaj.<br/>Mesazhi i gabimit qe: %2. FinishedViewStep Finish Përfundoje Setup Complete Rregullim i Plotësuar Installation Complete Instalimi u Plotësua The setup of %1 is complete. Rregullimi i %1 u plotësua. The installation of %1 is complete. Instalimi i %1 u plotësua. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Formatoje pjesën %1 (sistem kartelash: %2, madhësi: %3 MiB) në %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formato pjesën <strong>%3MiB</strong> <strong>%1</strong> me sistem kartelash <strong>%2</strong>. Formatting partition %1 with file system %2. Po formatohet pjesa %1 me sistem kartelash %2. The installer failed to format partition %1 on disk '%2'. Instaluesi s’arriti të formatojë pjesën %1 në diskun '%2'. GeneralRequirements has at least %1 GiB available drive space ka të paktën %1 GiB hapësirë të përdorshme There is not enough drive space. At least %1 GiB is required. S’ka hapësirë të mjaftueshme. Lypset të paktën %1 GiB. has at least %1 GiB working memory ka të paktën %1 GiB kujtesë të përdorshme The system does not have enough working memory. At least %1 GiB is required. Sistemi s’ka kujtesë të mjaftueshme për të punuar. Lypsen të paktën %1 GiB. is plugged in to a power source është në prizë The system is not plugged in to a power source. Sistemi s'është i lidhur me ndonjë burim rryme. is connected to the Internet është lidhur në Internet The system is not connected to the Internet. Sistemi s’është i lidhur në Internet. is running the installer as an administrator (root) po e xhiron instaluesin si një përgjegjës (rrënjë) The setup program is not running with administrator rights. Programi i rregullimit nuk po xhirohen me të drejta përgjegjësi. The installer is not running with administrator rights. Instaluesi s’po xhirohet me të drejta përgjegjësi. has a screen large enough to show the whole installer ka një ekran të mjaftueshëm për të shfaqur krejt instaluesin The screen is too small to display the setup program. Ekrani është shumë i vogël për të shfaqur programin e rregullimit. The screen is too small to display the installer. Ekrani është shumë i vogël për shfaqjen e instaluesit. HostInfoJob Collecting information about your machine. Po grumbullohen të dhëna rreth makinës tuaj. IDJob OEM Batch Identifier Identifikues Partie OEM Could not create directories <code>%1</code>. S’u krijuan dot drejtoritë <code>%1</code>. Could not open file <code>%1</code>. S’u hap dot kartela <code>%1</code>. Could not write to file <code>%1</code>. S’u shkrua dot te kartelë <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. Po krijohet initramfs me mkinitcpio. InitramfsJob Creating initramfs. Po krijohet initramfs. InteractiveTerminalPage Konsole not installed Konsol e painstaluar Please install KDE Konsole and try again! Ju lutemi, instaloni KDE Konsole dhe riprovoni! Executing script: &nbsp;<code>%1</code> Po përmbushet programthi: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script Programth KeyboardPage Set keyboard model to %1.<br/> Si model tastiere do të caktohet %1.<br/> Set keyboard layout to %1/%2. Si model tastiere do të caktohet %1%2. KeyboardViewStep Keyboard Tastierë LCLocaleDialog System locale setting Rregullim i vendores së sistemit The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. Rregullimi i vendores së sistemit ka të bëjë me gjuhën dhe shkronjat për disa elementë të ndërfaqes së përdoruesit për rresht urdhrash.<br/>Vlera e tanishme është <strong>%1</strong>. &Cancel &Anuloje &OK &OK LicensePage Form Formular <h1>License Agreement</h1> <h1>Marrëveshje Licence</h1> I accept the terms and conditions above. I pranoj termat dhe kushtet më sipër. Please review the End User License Agreements (EULAs). Ju lutemi, shqyrtoni Marrëveshjet e Licencave për Përdorues të Thjeshtë (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. Kjo procedurë ujdisjeje do të instalojë software pronësor që është subjekt kushtesh licencimi. If you do not agree with the terms, the setup procedure cannot continue. Nëse nuk pajtoheni me kushtet, procedura e ujdisjes s’do të vazhdojë. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Që të furnizojë veçori shtesë dhe të përmirësojë punën e përdoruesit, kjo procedurë ujdisjeje mundet të instalojë software pronësor që është subjekt kushtesh licencimi. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Nëse nuk pajtohemi me kushtet, nuk do të instalohet software pronësor, dhe në vend të tij do të përdoren alternativa nga burimi i hapët. LicenseViewStep License Licencë LicenseWidget URL: %1 URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>përudhës %1</strong><br/>nga %2 <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>Përudhës grafik %1</strong><br/><font color=\"Grey\">nga %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>Shtojcë shfletuesi %1</strong><br/><font color=\"Grey\">nga %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>Kodek %1</strong><br/><font color=\"Grey\">nga %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>Paketë %1</strong><br/><font color=\"Grey\">nga %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color=\"Grey\">nga %2</font> File: %1 Kartelë: %1 Show the license text Shfaq tekstin e licencës Open license agreement in browser. Hape marrëveshjen e licencës në shfletues. Hide license text Fshihe tekstin e licencës LocalePage The system language will be set to %1. Si gjuhë sistemi do të caktohet %1. The numbers and dates locale will be set to %1. Si vendore për numra dhe data do të vihet %1. Region: Rajon: Zone: Zonë: &Change... &Ndryshojeni… Set timezone to %1/%2.<br/> Si zonë kohore do të caktohet %1/%2.<br/> LocaleViewStep Location Vendndodhje LuksBootKeyFileJob Configuring LUKS key file. Po formësohet kartelë kyçesh LUKS. No partitions are defined. S’ka pjesë të përkufizuara. Encrypted rootfs setup error Gabim ujdisjeje rootfs të fshehtëzuar Root partition %1 is LUKS but no passphrase has been set. Pjesa rrënjë %1 është LUKS, por s’është caktuar frazëkalim. Could not create LUKS key file for root partition %1. S’u krijua dot kartelë kyçi LUKS për ndarjen rrënjë %1. Could not configure LUKS key file on partition %1. S’u formësua dot kartelë kyçesh LUKS te pjesën %1. MachineIdJob Generate machine-id. Prodho machine-id. Configuration Error Gabim Formësimi No root mount point is set for MachineId. S’është caktuar pikë montimi rrënjë për MachineId. NetInstallPage Name Emër Description Përshkrim Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Instalim Nga Rrjeti. (U çaktivizua: S’arrihet të sillen lista paketash, kontrolloni lidhjen tuaj në rrjet) Network Installation. (Disabled: Received invalid groups data) Instalim Nga Rrjeti. (U çaktivizua: U morën të dhëna të pavlefshme grupesh) Network Installation. (Disabled: Incorrect configuration) Instalim Nga Rrjeti. (E çaktivizuar: Formësim i pasaktë) NetInstallViewStep Package selection Përzgjedhje paketash Office software Software zyrash Office package Paketë zyrash Browser software Software shfletuesi Browser package Paketë shfletuesi Web browser Shfletues Kernel Kernel Services Shërbime Login Hyrje Desktop Desktop Applications Aplikacione NotesQmlViewStep Notes Shënime OEMPage Ba&tch: &amp;Parti <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>Jepni këtu një identifikues partie. Ky do të depozitohet te sistemi i synuar.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>Formësim OEM-i</h1><p>Calamares do të përdorë rregullime OEM ndërkohë që formëson sistemin e synuar.</p></body></html> OEMViewStep OEM Configuration Formësim OEM-i Set the OEM Batch Identifier to <code>%1</code>. Caktoni Identifikues partie OEM si <code>%1</code>. PWQ Password is too short Fjalëkalimi është shumë i shkurtër Password is too long Fjalëkalimi është shumë i gjatë Password is too weak Fjalëkalimi është shumë i dobët Memory allocation error when setting '%1' Gabim caktimi kujtese kur rregullohej '%1' Memory allocation error Gabim caktimi kujtese The password is the same as the old one Fjalëkalimi është i njëjtë me të vjetrin The password is a palindrome Fjalëkalimi është një palindromë The password differs with case changes only Fjalëkalimet ndryshojnë vetëm nga shkronja të mëdha apo të vogla The password is too similar to the old one Fjalëkalimi është shumë i ngjashëm me të vjetrin The password contains the user name in some form Fjalëkalimi, në një farë mënyre, përmban emrin e përdoruesit The password contains words from the real name of the user in some form Fjalëkalimi, në një farë mënyre, përmban fjalë nga emri i vërtetë i përdoruesit The password contains forbidden words in some form Fjalëkalimi, në një farë mënyre, përmban fjalë të ndaluara The password contains less than %1 digits Fjalëkalimi përmban më pak se %1 shifra The password contains too few digits Fjalëkalimi përmban shumë pak shifra The password contains less than %1 uppercase letters Fjalëkalimi përmban më pak se %1 shkronja të mëdha The password contains too few uppercase letters Fjalëkalimi përmban pak shkronja të mëdha The password contains less than %1 lowercase letters Fjalëkalimi përmban më pak se %1 shkronja të vogla The password contains too few lowercase letters Fjalëkalimi përmban pak shkronja të vogla The password contains less than %1 non-alphanumeric characters Fjalëkalimi përmban më pak se %1 shenja jo alfanumerike The password contains too few non-alphanumeric characters Fjalëkalimi përmban pak shenja jo alfanumerike The password is shorter than %1 characters Fjalëkalimi është më i shkurtër se %1 shenja The password is too short Fjalëkalimi është shumë i shkurtër The password is just rotated old one Fjalëkalimi është i vjetri i ricikluar The password contains less than %1 character classes Fjalëkalimi përmban më pak se %1 klasa shenjash The password does not contain enough character classes Fjalëkalimi nuk përmban klasa të mjaftueshme shenjash The password contains more than %1 same characters consecutively Fjalëkalimi përmban më shumë se %1 shenja të njëjta njëra pas tjetrës The password contains too many same characters consecutively Fjalëkalimi përmban shumë shenja të njëjta njëra pas tjetrës The password contains more than %1 characters of the same class consecutively Fjalëkalimi përmban më shumë se %1 shenja të së njëjtës klasë njëra pas tjetrës The password contains too many characters of the same class consecutively Fjalëkalimi përmban shumë shenja të së njëjtës klasë njëra pas tjetrës The password contains monotonic sequence longer than %1 characters Fjalëkalimi përmban varg monoton më të gjatë se %1 shenja The password contains too long of a monotonic character sequence Fjalëkalimi përmban varg monoton shumë të gjatë shenjash No password supplied S’u dha fjalëkalim Cannot obtain random numbers from the RNG device S’merren dot numra të rëndomtë nga pajisja RNG Password generation failed - required entropy too low for settings Prodhimi i fjalëkalimit dështoi - entropi e domosdoshme për rregullimin shumë e ulët The password fails the dictionary check - %1 Fjalëkalimi s’kaloi dot kontrollin kundrejt fjalorit - %1 The password fails the dictionary check Fjalëkalimi s’kaloi dot kontrollin kundrejt fjalorit Unknown setting - %1 Rregullim i panjohur - %1 Unknown setting Rregullim i panjohur Bad integer value of setting - %1 Vlerë e plotë e gabuar për rregullimin - %1 Bad integer value Vlerë e plotë e gabuar Setting %1 is not of integer type Rregullimi për %1 s’është numër i plotë Setting is not of integer type Rregullimi s’është numër i plotë Setting %1 is not of string type Rregullimi për %1 s’është i llojit varg Setting is not of string type Rregullimi s’është i llojit varg Opening the configuration file failed Dështoi hapja e kartelës së formësimit The configuration file is malformed Kartela e formësimit është e keqformuar Fatal failure Dështim fatal Unknown error Gabim i panjohur Password is empty Fjalëkalimi është i zbrazët PackageChooserPage Form Formular Product Name Emër Produkti TextLabel EtiketëTekst Long Product Description Përshkrim i Gjatë i Produktit Package Selection Përzgjedhje Pakete Please pick a product from the list. The selected product will be installed. Ju lutemi, zgjidhni prej listës një produkt. Produkti i përzgjedhur do të instalohet. PackageChooserViewStep Packages Paketa Page_Keyboard Form Formular Keyboard Model: Model Tastiere: Type here to test your keyboard Që të provoni tastierën tuaj, shtypni këtu Page_UserSetup Form Formular What is your name? Cili është emri juaj? What name do you want to use to log in? Ç’emër doni të përdorni për t’u futur? Choose a password to keep your account safe. Zgjidhni një fjalëkalim për ta mbajtur llogarinë tuaj të parrezikuar. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>Jepeni të njëjtin fjalëkalim dy herë, që të kontrollohet për gabime shkrimi. Një fjalëkalim i mirë do të përmbante një përzierje shkronjash, numrash dhe shenjash pikësimi, do të duhej të ishte të paktën tetë shenja i gjatë, dhe do të duhej të ndryshohej periodikisht.</small> What is the name of this computer? Cili është emri i këtij kompjuteri? Your Full Name Emri Juaj i Plotë login hyrje <small>This name will be used if you make the computer visible to others on a network.</small> <small>Ky emër do të përdoret nëse e bëni kompjuterin të dukshëm për të tjerët në një rrjet.</small> Computer Name Emër Kompjuteri Password Fjalëkalim Repeat Password Ripërsëritni Fjalëkalimin When this box is checked, password-strength checking is done and you will not be able to use a weak password. Kur i vihet shenjë kësaj kutize, bëhet kontroll fortësie fjalëkalimi dhe s’do të jeni në gjendje të përdorni një fjalëkalim të dobët. Require strong passwords. Kërko doemos fjalëkalimet të fuqishëm. Log in automatically without asking for the password. Kryej hyrje vetvetiu, pa kërkuar fjalëkalimin. Use the same password for the administrator account. Përdor të njëjtin fjalëkalim për llogarinë e përgjegjësit. Choose a password for the administrator account. Zgjidhni një fjalëkalim për llogarinë e përgjegjësit. <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Jepeni të njëjtin fjalëkalim dy herë, që të mund të kontrollohet për gabime shkrimi.</small> PartitionLabelsView Root Rrënjë Home Shtëpi Boot Nisje EFI system Sistem EFI Swap Swap New partition for %1 Pjesë e re për %1 New partition Pjesë e re %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space Hapësirë e Lirë New partition Pjesë e re Name Emër File System Sistem Kartelash Mount Point Pikë Montimi Size Madhësi PartitionPage Form Formular Storage de&vice: &Pajisje depozitimi: &Revert All Changes &Prapëso Krejt Ndryshimet New Partition &Table &Tabelë e Re Pjesësh Cre&ate &Krijoje &Edit &Përpunoje &Delete &Fshije New Volume Group Grup i Ri Vëllimesh Resize Volume Group Ripërmaso Grup Vëllimesh Deactivate Volume Group Çaktivizo Grup Vëllimesh Remove Volume Group Hiqni Grup Vëllimesh I&nstall boot loader on: &Instalo ngarkues nisjesh në: Are you sure you want to create a new partition table on %1? Jeni i sigurt se doni të krijoni një tabelë të re pjesësh në %1? Can not create new partition S’krijohet dot pjesë e re The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. Tabela e pjesëzimit te %1 ka tashmë %2 pjesë parësore, dhe s’mund të shtohen të tjera. Ju lutemi, në vend të kësaj, hiqni një pjesë parësore dhe shtoni një pjesë të zgjeruar. PartitionViewStep Gathering system information... Po grumbullohen të dhëna mbi sistemin… Partitions Pjesë Install %1 <strong>alongside</strong> another operating system. Instalojeni %1 <strong>në krah</strong> të një tjetër sistemi operativ. <strong>Erase</strong> disk and install %1. <strong>Fshije</strong> diskun dhe instalo %1. <strong>Replace</strong> a partition with %1. <strong>Zëvendësojeni</strong> një pjesë me %1. <strong>Manual</strong> partitioning. Pjesëzim <strong>dorazi</strong>. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Instaloje %1 <strong>në krah</strong> të një tjetri sistemi operativ në diskun <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Fshije</strong> diskun <strong>%2</strong> (%3) dhe instalo %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Zëvendëso</strong> një pjesë te disku <strong>%2</strong> (%3) me %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Pjesëzim <strong>dorazi</strong> në diskun <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Disku <strong>%1</strong> (%2) Current: E tanishmja: After: Më Pas: No EFI system partition configured S’ka të formësuar pjesë sistemi EFI An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. Që të niset %1, është e domosdoshme një pjesë sistemi EFI.<br/><br/>Që të formësoni një pjesë sistemi EFI, kthehuni mbrapsht dhe përzgjidhni ose krijoni një sistem kartelash FAT32 me flamurkën <strong>esp</strong> të aktivizuar dhe me pikë montimi <strong>%2</strong>.<br/><br/>Mund të vazhdoni pa rregulluar një pjesë sistemi EFI, por mundet që sistemi të mos arrijë dot të niset. EFI system partition flag not set S’është vënë flamurkë EFI pjese sistemi An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Që të niset %1, është e domosdoshme një pjesë sistemi EFI.<br/><br/>Është formësuar një pjesë me pikë montimi <strong>%2</strong>, por pa i vënë flamurkën <strong>esp</strong>.<br/>Që t’ia vini, kthehuni mbrapsht dhe përpunoni pjesë.<br/><br/>Mund të vazhdoni pa i vënë flamurkën, por mundet që sistemi të mos arrijë dot të niset. Boot partition not encrypted Pjesë nisjesh e pafshehtëzuar A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. Tok me pjesën e fshehtëzuar <em>root</em> qe rregulluar edhe një pjesë <em>boot</em> veçmas, por pjesa <em>boot</em> s’është e fshehtëzuar.<br/><br/>Ka preokupime mbi sigurinë e këtij lloj rregullimi, ngaqë kartela të rëndësishme sistemi mbahen në një pjesë të pafshehtëzuar.<br/>Mund të vazhdoni, nëse doni, por shkyçja e sistemit të kartelave do të ndodhë më vonë, gjatë nisjes së sistemit.<br/>Që të fshehtëzoni pjesën <em>boot</em>, kthehuni mbrapsht dhe rikrijojeni, duke përzgjedhur te skena e krijimit të pjesës <strong>Fshehtëzoje</strong>. has at least one disk device available. ka të paktën një pajisje disku për përdorim. There are no partitions to install on. S’ka pjesë ku të instalohet. PlasmaLnfJob Plasma Look-and-Feel Job Akt Plasma Look-and-Feel Could not select KDE Plasma Look-and-Feel package S’u përzgjodh dot paketa KDE Plasma Look-and-Feel PlasmaLnfPage Form Formular Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Ju lutemi, zgjidhni një grup parametrash pamje-dhe-ndjesi për KDE Plasma Desktop. Mundeni edhe ta anashkaloni këtë hap dhe të formësoni pamje-dhe-ndjesi pasi të jetë rregulluar sistemi. Klikimi mbi një përzgjedhje pamje-dhe-ndjesi do t’ju japë një paraparje të atypëratyshme të saj. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Ju lutemi, zgjidhni një grup parametrash pamje-dhe-ndjesi për KDE Plasma Desktop. Mundeni edhe ta anashkaloni këtë hap dhe të formësoni pamje-dhe-ndjesi pasi të jetë instaluar sistemi. Klikimi mbi një përzgjedhje pamje-dhe-ndjesi do t’ju japë një paraparje të atypëratyshme të saj. PlasmaLnfViewStep Look-and-Feel Pamje-dhe-Ndjesi PreserveFiles Saving files for later ... Po ruhen kartela për më vonë ... No files configured to save for later. S’ka kartela të formësuara për t’i ruajtur më vonë. Not all of the configured files could be preserved. S’u mbajtën dot tërë kartelat e formësuara. ProcessResult There was no output from the command. S’pati përfundim nga urdhri. Output: Përfundim: External command crashed. Urdhri i jashtëm u vithis. Command <i>%1</i> crashed. Urdhri <i>%1</i> u vithis. External command failed to start. Dështoi nisja e urdhrit të jashtëm. Command <i>%1</i> failed to start. Dështoi nisja e urdhrit <i>%1</i>. Internal error when starting command. Gabim i brendshëm kur niset urdhri. Bad parameters for process job call. Parametra të gabuar për thirrje akti procesi. External command failed to finish. S’u arrit të përfundohej urdhër i jashtëm. Command <i>%1</i> failed to finish in %2 seconds. Urdhri <i>%1</i> s’arriti të përfundohej në %2 sekonda. External command finished with errors. Urdhri i jashtë përfundoi me gabime. Command <i>%1</i> finished with exit code %2. Urdhri <i>%1</i> përfundoi me kod daljeje %2. QObject Default Keyboard Model Model Parazgjedhje Për Tastierën Default Parazgjedhje unknown e panjohur extended extended unformatted e paformatuar swap swap Unpartitioned space or unknown partition table Hapësirë e papjesëzuar ose tabelë e panjohur pjesësh (no mount point) (s’ka pikë montimi) Requirements checking for module <i>%1</i> is complete. Kontrolli i domosdoshmërive për modulin <i>%1</i> u plotësua. %1 (%2) language[name] (country[name]) %1 (%2) No product S’ka produkt No description provided. S’u dha përshkrim. File not found S’u gjet kartelë Path <pre>%1</pre> must be an absolute path. Shtegu <pre>%1</pre> duhet të jetë shteg absolut. Could not create new random file <pre>%1</pre>. S’u krijua dot kartelë e re kuturu <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Hiqe Grupin e Vëllimeve të quajtur %1. Remove Volume Group named <strong>%1</strong>. Hiqe Grupin e Vëllimeve të quajtur <strong>%1</strong>. The installer failed to remove a volume group named '%1'. Instaluesi s’arriti të heqë një grup vëllimesh të quajtur '%1'. ReplaceWidget Form Formular Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Përzgjidhni ku të instalohet %1.<br/><font color=\"red\">Kujdes: </font>kjo do të sjellë fshirjen e krejt kartelave në pjesën e përzgjedhur. The selected item does not appear to be a valid partition. Objekti i përzgjedhur s’duket se është pjesë e vlefshme. %1 cannot be installed on empty space. Please select an existing partition. %1 s’mund të instalohet në hapësirë të zbrazët. Ju lutemi, përzgjidhni një pjesë ekzistuese. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 s’mund të instalohet në një pjesë të llojit extended. Ju lutemi, përzgjidhni një pjesë parësore ose logjike ekzistuese. %1 cannot be installed on this partition. %1 s’mund të instalohet në këtë pjesë. Data partition (%1) Pjesë të dhënash (%1) Unknown system partition (%1) Pjesë sistemi e panjohur (%1) %1 system partition (%2) Pjesë sistemi %1 (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>Ndarja %1 është shumë e vogël për %2. Ju lutemi, përzgjidhni një pjesë me kapacitet të paktën %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/>Në këtë sistem s’gjendet dot ndonjë pjesë sistemi EFI. Ju lutemi, që të rregulloni %1, kthehuni mbrapsht dhe përdorni procesin e pjesëzimit dorazi. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>%1 do të instalohet në %2.<br/><font color=\"red\">Kujdes: </font>krejt të dhënat në pjesën %2 do të humbin. The EFI system partition at %1 will be used for starting %2. Për nisjen e %2 do të përdoret ndarja EFI e sistemit te %1. EFI system partition: Pjesë Sistemi EFI: ResizeFSJob Resize Filesystem Job Akt Ripërmasimi Sistemi Kartelash Invalid configuration Formësim i palvefshëm The file-system resize job has an invalid configuration and will not run. Akti i ripërmasimit të sistemit të kartela ka një formësim të pavlefshëm dhe nuk do të kryhet. KPMCore not Available S’ka KPMCore Calamares cannot start KPMCore for the file-system resize job. Calamares s’mund të nisë KPMCore për aktin e ripërmasimit të sistemit të kartelave. Resize Failed Ripërmasimi Dështoi The filesystem %1 could not be found in this system, and cannot be resized. Sistemi %1 i kartelave s’u gjet dot në këtë sistem, dhe s’mund të ripërmasohet. The device %1 could not be found in this system, and cannot be resized. Pajisja %1 s’u gjet dot në këtë sistem, dhe s’mund të ripërmasohet. The filesystem %1 cannot be resized. Sistemi %1 i kartelave s’mund të ripërmasohet. The device %1 cannot be resized. Pajisja %1 s’mund të ripërmasohet. The filesystem %1 must be resized, but cannot. Sistemi %1 i kartelave duhet ripërmasuar, por kjo s’bëhet dot. The device %1 must be resized, but cannot Pajisja %1 duhet ripërmasuar, por kjo s’bëhet dot. ResizePartitionJob Resize partition %1. Ripërmaso pjesën %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Ripërmasoje pjesën <strong>%2MiB</strong> <strong>%1</strong> në <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. Po ripërmasohet ndarja %2MiB %1 në %3MiB. The installer failed to resize partition %1 on disk '%2'. Instaluesi s’arriti të ripërmasojë pjesën %1 në diskun '%2'. ResizeVolumeGroupDialog Resize Volume Group Ripërmaso Grup Vëllimesh ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Ripërmasoje grupin e vëllimeve të quajtur %1 nga %2 në %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. Ripërmasoje grupin e vëllimeve të quajtur <strong>%1</strong> nga <strong>%2</strong> në <strong>%3</strong>. The installer failed to resize a volume group named '%1'. Instaluesi s’arriti të ripërmasojë një grup vëllimesh të quajtur '%1'. ResultsListDialog For best results, please ensure that this computer: Për përfundime më të mira, ju lutemi, garantoni që ky kompjuter: System requirements Sistem i domosdoshëm ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> Ky kompjuter s’i plotëson kërkesat minimum për rregullimin e %1.<br/>Rregullimi s’mund të vazhdojë. <a href=\"#details\">Hollësi…</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> Ky kompjuter s’i plotëson kërkesat minimum për instalimin e %1.<br/>Instalimi s’mund të vazhdojë. <a href=\"#details\">Hollësi…</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. Ky kompjuter s’i plotëson disa nga domosdoshmëritë e rekomanduara për rregullimin e %1.<br/>Rregullimi mund të vazhdojë, por disa veçori mund të përfundojnë të çaktivizuara. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. Ky kompjuter s’i plotëson disa nga domosdoshmëritë e rekomanduara për instalimin e %1.<br/>Instalimi mund të vazhdojë, por disa veçori mund të përfundojnë të çaktivizuara. This program will ask you some questions and set up %2 on your computer. Ky program do t’ju bëjë disa pyetje dhe do të rregullojë %2 në kompjuterin tuaj. ScanningDialog Scanning storage devices... Po kontrollohen pajisje depozitimi… Partitioning Pjesëzim SetHostNameJob Set hostname %1 Cakto strehëemër %1 Set hostname <strong>%1</strong>. Cakto strehëemër <strong>%1</strong>. Setting hostname %1. Po caktohet strehëemri %1. Internal Error Gabim i Brendshëm Cannot write hostname to target system S’shkruhet dot strehëemër te sistemi i synuar SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Si model tastiere do të caktohet %1, si skemë %2-%3 Failed to write keyboard configuration for the virtual console. S’u arrit të shkruhej formësim tastiere për konsolën virtuale. Failed to write to %1 S’u arrit të shkruhej te %1 Failed to write keyboard configuration for X11. S’u arrit të shkruhej formësim tastiere për X11. Failed to write keyboard configuration to existing /etc/default directory. S’u arrit të shkruhej formësim tastiere në drejtori /etc/default ekzistuese. SetPartFlagsJob Set flags on partition %1. Vendos flamurka në pjesën %1. Set flags on %1MiB %2 partition. Vendos flamurka në pjesën %1MiB %2.` Set flags on new partition. Vendos flamurka në pjesë të re. Clear flags on partition <strong>%1</strong>. Hiqi flamurkat te ndarja <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Hiqi flamurkat te pjesa %1MiB <strong>%2</strong>. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Vëri flamurkë pjesës %1MiB <strong>%2</strong> si <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Po hiqen flamurkat në pjesën %1MiB <strong>%2</strong>. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Po vihen flamurkat <strong>%3</strong> në pjesën %1MiB <strong>%2</strong>. Clear flags on new partition. Hiqi flamurkat te ndarja e re. Flag partition <strong>%1</strong> as <strong>%2</strong>. Vëri flamurkë pjesës <strong>%1</strong> si <strong>%2</strong>. Flag new partition as <strong>%1</strong>. Vëri flamurkë pjesës së re si <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Po hiqen flamurkat në pjesën <strong>%1</strong>. Clearing flags on new partition. Po hiqen flamurkat në pjesën e re. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Po vihen flamurkat <strong>%2</strong> në pjesën <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. Po vihen flamurkat <strong>%1</strong> në pjesën e re. The installer failed to set flags on partition %1. Instaluesi s’arriti të vërë flamurka në pjesën %1. SetPasswordJob Set password for user %1 Caktoni fjalëkalim për përdoruesin %1 Setting password for user %1. Po caktohet fjalëkalim për përdoruesin %1. Bad destination system path. Shteg i gabuar destinacioni sistemi. rootMountPoint is %1 rootMountPoint është %1 Cannot disable root account. S’mund të çaktivizohet llogaria rrënjë. passwd terminated with error code %1. passwd përfundoi me kod gabimi %1. Cannot set password for user %1. S’caktohet dot fjalëkalim për përdoruesin %1. usermod terminated with error code %1. usermod përfundoi me kod gabimi %1. SetTimezoneJob Set timezone to %1/%2 Si zonë kohore do të caktohet %1/%2 Cannot access selected timezone path. S’përdoret dot shtegu i zonës kohore të përzgjedhur. Bad path: %1 Shteg i gabuar: %1 Cannot set timezone. S’caktohet dot zonë kohore. Link creation failed, target: %1; link name: %2 Krijimi i lidhjes dështoi, objektiv: %1; emër lidhjeje: %2 Cannot set timezone, S’caktohet dot zonë kohore, Cannot open /etc/timezone for writing S’hapet dot /etc/timezone për shkrim ShellProcessJob Shell Processes Job Akt Procesesh Shelli SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage This is an overview of what will happen once you start the setup procedure. Kjo është një përmbledhje e asaj që do të ndodhë sapo të nisni procedurën e rregullimit. This is an overview of what will happen once you start the install procedure. Kjo është një përmbledhje e asaj që do të ndodhë sapo të nisni procedurën e instalimit. SummaryViewStep Summary Përmbledhje TrackingInstallJob Installation feedback Përshtypje mbi instalimin Sending installation feedback. Po dërgohen përshtypjet mbi instalimin Internal error in install-tracking. Gabim i brendshëm në shquarjen e instalimit. HTTP request timed out. Kërkesës HTTP i mbaroi koha. TrackingMachineNeonJob Machine feedback Të dhëna nga makina Configuring machine feedback. Po formësohet moduli Të dhëna nga makina. Error in machine feedback configuration. Gabim në formësimin e modulit Të dhëna nga makina. Could not configure machine feedback correctly, script error %1. S’u formësua dot si duhet moduli Të dhëna nga makina, gabim programthi %1. Could not configure machine feedback correctly, Calamares error %1. S’u formësua dot si duhet moduli Të dhëna nga makina, gabim Calamares %1. TrackingPage Form Formular Placeholder Vendmbajtëse <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>Duke përzgjedhur këtë, <span style=" font-weight:600;">s’do të dërgoni fare të dhëna</span> rreth instalimit tuaj.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Për më tepër të dhëna rreth përshtypjeve të përdoruesit, klikoni këtu</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. Instalimi i gjurmimit e ndihmon %1 të shohë se sa përdorues ka, në çfarë hardware-i e instalojnë %1 dhe (përmes dy mundësive të fundit më poshtë), të marrë të dhëna të vazhdueshme rre aplikacioneve të parapëlqyera. Që të shihni se ç’dërgohet, ju lutemi, klikoni ikonën e ndihmës në krah të çdo fushe. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. Duke përzgjedhur këtë, do të dërgoni të dhëna mbi instalimin dhe hardware-in tuaj. Këto të dhëna do të <b>dërgohen vetëm një herë</b>, pasi të përfundojë instalimi. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. Duke përzgjedhur këtë, do të dërgoni <b>periodikisht</b> te %1 të dhëna mbi instalimin, hardware-in dhe aplikacionet tuaja. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. Duke përzgjedhur këtë, do të dërgoni <b>rregullisht</b> te %1 të dhëna mbi instalimin, hardware-in, aplikacionet dhe rregullsitë tuaja në përdorim. TrackingViewStep Feedback Përshtypje UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Nëse këtë kompjuter do ta përdorë më shumë se një person, mund të krijoni disa llogari, pas rregullimit.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Nëse këtë kompjuter do ta përdorë më shumë se një person, mund të krijoni disa llogari, pas instalimit.</small> Your username is too long. Emri juaj i përdoruesit është shumë i gjatë. Your username must start with a lowercase letter or underscore. Emri juaj i përdoruesit duhet të fillojë me një shkronjë të vogël ose nënvijë. Only lowercase letters, numbers, underscore and hyphen are allowed. Lejohen vetëm shkronja të vogla, numra, nënvijë dhe vijë ndarëse. Only letters, numbers, underscore and hyphen are allowed. Lejohen vetëm shkronja, numra, nënvijë dhe vijë ndarëse. Your hostname is too short. Strehëemri juaj është shumë i shkurtër. Your hostname is too long. Strehëemri juaj është shumë i gjatë. Your passwords do not match! Fjalëkalimet tuaj s’përputhen! UsersViewStep Users Përdorues VariantModel Key Kyç Value Vlerë VolumeGroupBaseDialog Create Volume Group Krijoni Grup Volumesh List of Physical Volumes Listë Vëllimesh Fizike Volume Group Name: Emër Grupi Vëllimesh: Volume Group Type: Lloj Grupi Vëllimesh: Physical Extent Size: Madhësi e Shtrirjes Fizike: MiB MiB Total Size: Madhësi Gjithsej: Used Size: Madhësi e Përdorur: Total Sectors: Sektorë Gjithsej Quantity of LVs: Sasi VL-sh: WelcomePage Form Formular Select application and system language Përzgjidhni gjuhë aplikacioni dhe sistemi Open donations website Hap sajtin e dhurimeve &Donate &Dhuroni Open help and support website Hap sajtin e ndihmës dhe asistencës Open issues and bug-tracking website Hap sajtin ndjekjes së problemeve dhe të metave Open release notes website Hapni sajtin e shënimeve mbi hedhjet në qarkullim &Release notes Shënime &versioni &Known issues &Probleme të njohura &Support &Asistencë &About &Mbi <h1>Welcome to the %1 installer.</h1> <h1>Mirë se vini te instaluesi i %1.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Mirë se vini te instaluesi Calamares për %1.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Mirë se vini te programi i rregullimit Calamares për %1.</h1> <h1>Welcome to %1 setup.</h1> <h1>Mirë se vini te rregullimi i %1.</h1> About %1 setup Mbi rregullimin e %1 About %1 installer Rreth instaluesit %1 <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. <h1>%1</h1><br/><strong>%2<br/>për %3</strong><br/><br/>Të drejta Kopjimi 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Të drejta Kopjimi 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Falënderime për <a href="https://calamares.io/team/">ekipin e Calamares</a> dhe <a href="https://www.transifex.com/calamares/calamares/">ekipin e përkthyesve të Calamares</a>.<br/><br/>Zhvillimi i <a href="https://calamares.io/">Calamares</a> sponsorizohet nga <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support Asistencë %1 WelcomeQmlViewStep Welcome Mirë se vini WelcomeViewStep Welcome Mirë se vini notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>Ky është një shembull shënimesh hedhjeje në qarkullim.</p> welcomeq <h3>%1 <quote>%2</quote></h3> <h3>%1 <quote>%2</quote></h3> About Mbi Support Asistencë Known issues Probleme të njohura Release notes Shënime hedhjeje në qarkullim Donate Dhuroni calamares-3.2.20/lang/calamares_sr.ts000066400000000000000000004661131362604102500174650ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. BootLoaderModel Master Boot Record of %1 Boot Partition Подизна партиција System Partition СиÑтемÑка партиција Do not install a boot loader Ðе инÑталирај подизни учитавач %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page Calamares::DebugWindow Form Форма GlobalStorage JobQueue Modules Модули Type: Тип: none ништа Interface: Сучеље: Tools Ðлатке Reload Stylesheet Widget Tree Debug information Calamares::ExecutionViewStep Set up Install ИнÑталирај Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Завршено Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Извршавам команду %1 %2 Calamares::PythonJob Running %1 operation. Извршавам %1 операцију. Bad working directory path Лоша путања радног директоријума Working directory %1 for python job %2 is not readable. Радни директоријум %1 за питонов поÑао %2 није читљив. Bad main script file Лош фајл главне Ñкрипте Main script file %1 for python job %2 is not readable. Фајл главне Ñкрипте %1 за питонов поÑао %2 није читљив. Boost.Python error in job "%1". Boost.Python грешка у поÑлу „%1“. Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager &Back &Ðазад &Next &Следеће &Cancel &Откажи Cancel setup without changing the system. Cancel installation without changing the system. Setup Failed Would you like to paste the install log to the web? Install Log Paste URL The upload was unsuccessful. No web-paste was done. Calamares Initialization Failed %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. <br/>The following modules could not be loaded: Continue with installation? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Set up &Install Setup is complete. Close the setup program. Cancel setup? Cancel installation? Отказати инÑталацију? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Да ли Ñтварно желите да прекинете текући Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð¸Ð½Ñталације? ИнÑталер ће бити затворен и Ñве промене ће бити изгубљене. &Yes &No &Close Continue with setup? ÐаÑтавити Ñа подешавањем? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> &Install now &ИнÑталирај Ñада Go &back Иди &назад &Done The installation is complete. Close the installer. Error Грешка Installation Failed ИнÑталација није уÑпела CalamaresPython::Helper Unknown exception type Ðепознат тип изузетка unparseable Python error unparseable Python traceback Unfetchable Python error. CalamaresUtils Install log posted to: %1 CalamaresWindow %1 Setup Program %1 Installer %1 инÑталер Show debug information CheckerContainer Gathering system information... ChoicePage Form Форма After: ПоÑле: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Ручно партициониÑање</strong><br/>Сами можете креирати или мењати партције. Boot loader location: Подизни учитавач на: Select storage de&vice: Изаберите у&ређај за Ñмештање: Current: Тренутно: Reuse %1 as home partition for %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. <strong>Select a partition to install on</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. The EFI system partition at %1 will be used for starting %2. EFI system partition: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. No Swap Reuse Swap Swap (no Hibernate) Swap (with Hibernate) Swap to file <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. ClearMountsJob Clear mounts for partitioning operations on %1 Уклони тачке припајања за операције партиције на %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 Уклоњене Ñве тачке припајања за %1 ClearTempMountsJob Clear all temporary mounts. Clearing all temporary mounts. Cannot get list of temporary mounts. Cleared all temporary mounts. CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Ðаправи партицију MiB Partition &Type: &Тип партиције &Primary &Примарна E&xtended П&роширена Fi&le System: Фајл &ÑиÑтем: LVM LV name Flags: &Mount Point: Тачка &припајања: Si&ze: Вели&чина En&crypt Logical Логичка Primary Примарна GPT GPT Mountpoint already in use. Please select another one. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. The installer failed to create partition on disk '%1'. ИнÑталација није уÑпела да направи партицију на диÑку '%1'. CreatePartitionTableDialog Create Partition Table Ðаправи табелу партиција Creating a new partition table will delete all existing data on the disk. Прављење нове партиције табела ће обриÑати Ñве поÑтојеће податке на диÑку. What kind of partition table do you want to create? Какву табелу партиција желите да направите? Master Boot Record (MBR) GUID Partition Table (GPT) GUID партициона табела (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Creating new %1 partition table on %2. The installer failed to create a partition table on %1. ИнÑталација није уÑпела да направи табелу партиција на %1. CreateUserJob Create user %1 Ðаправи кориÑника %1 Create user <strong>%1</strong>. Creating user %1. Правим кориÑника %1 Sudoers dir is not writable. Ðије могуће пиÑати у "СудоерÑ" директоријуму. Cannot create sudoers file for writing. Cannot chmod sudoers file. Ðије могуће променити мод (chmod) над "ÑудоерÑ" фајлом Cannot open groups file for reading. CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. Delete partition <strong>%1</strong>. Deleting partition %1. The installer failed to delete partition %1. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. This device has a <strong>%1</strong> partition table. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - (%2) device[name] - (device-node[name]) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Failed to open %1 DummyCppJob Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Content: Садржај: &Keep &Очувај Format Форматирај Warning: Formatting the partition will erase all existing data. Упозорење: Форматирање партиције ће обриÑати Ñве поÑтојеће податке. &Mount Point: &Тачка монтирања: Si&ze: &Величина: MiB Fi&le System: Фајл &ÑиÑтем: Flags: Mountpoint already in use. Please select another one. EncryptWidget Form Форма En&crypt system Passphrase Confirm passphrase Please enter the same passphrase in both boxes. FillGlobalStorageJob Set partition information Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Install boot loader on <strong>%1</strong>. Setting up mount points. FinishedPage Form Форма <Restart checkbox tooltip> &Restart now <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. FinishedViewStep Finish Заврши Setup Complete Installation Complete The setup of %1 is complete. The installation of %1 is complete. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatting partition %1 with file system %2. The installer failed to format partition %1 on disk '%2'. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source The system is not plugged in to a power source. is connected to the Internet The system is not connected to the Internet. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Please install KDE Konsole and try again! Executing script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script Скрипта KeyboardPage Set keyboard model to %1.<br/> Set keyboard layout to %1/%2. KeyboardViewStep Keyboard ТаÑтатура LCLocaleDialog System locale setting The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. &Cancel &Откажи &OK LicensePage Form Форма <h1>License Agreement</h1> I accept the terms and conditions above. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License Лиценца LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> File: %1 Show the license text Open license agreement in browser. Hide license text LocalePage The system language will be set to %1. СиÑтемÑки језик биће поÑтављен на %1 The numbers and dates locale will be set to %1. Region: Регион: Zone: Зона: &Change... &Измени... Set timezone to %1/%2.<br/> LocaleViewStep Location Локација LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Configuration Error Грешка поÑтаве No root mount point is set for MachineId. NetInstallPage Name Ðазив Description ÐžÐ¿Ð¸Ñ Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Incorrect configuration) NetInstallViewStep Package selection Избор пакета Office software Office package Browser software Browser package Web browser Kernel Services Login Desktop Applications NotesQmlViewStep Notes OEMPage Ba&tch: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> OEMViewStep OEM Configuration Set the OEM Batch Identifier to <code>%1</code>. PWQ Password is too short Password is too long Password is too weak Memory allocation error when setting '%1' Memory allocation error The password is the same as the old one The password is a palindrome The password differs with case changes only The password is too similar to the old one The password contains the user name in some form The password contains words from the real name of the user in some form The password contains forbidden words in some form The password contains less than %1 digits The password contains too few digits The password contains less than %1 uppercase letters The password contains too few uppercase letters The password contains less than %1 lowercase letters The password contains too few lowercase letters The password contains less than %1 non-alphanumeric characters The password contains too few non-alphanumeric characters The password is shorter than %1 characters The password is too short The password is just rotated old one The password contains less than %1 character classes The password does not contain enough character classes The password contains more than %1 same characters consecutively The password contains too many same characters consecutively The password contains more than %1 characters of the same class consecutively The password contains too many characters of the same class consecutively The password contains monotonic sequence longer than %1 characters The password contains too long of a monotonic character sequence No password supplied Cannot obtain random numbers from the RNG device Password generation failed - required entropy too low for settings The password fails the dictionary check - %1 The password fails the dictionary check Unknown setting - %1 Unknown setting Bad integer value of setting - %1 Bad integer value Setting %1 is not of integer type Setting is not of integer type Setting %1 is not of string type Setting is not of string type Opening the configuration file failed The configuration file is malformed Fatal failure Unknown error Password is empty PackageChooserPage Form Форма Product Name TextLabel Long Product Description Package Selection Please pick a product from the list. The selected product will be installed. PackageChooserViewStep Packages Page_Keyboard Form Форма Keyboard Model: Type here to test your keyboard куцајте овде да теÑтирате таÑтатуру Page_UserSetup Form Форма What is your name? Како Ñе зовете? What name do you want to use to log in? Choose a password to keep your account safe. Изаберите лозинку да обезбедите Ñвој налог. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> What is the name of this computer? Како ћете звати ваш рачунар? Your Full Name login <small>This name will be used if you make the computer visible to others on a network.</small> Computer Name Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Use the same password for the administrator account. Choose a password for the administrator account. <small>Enter the same password twice, so that it can be checked for typing errors.</small> PartitionLabelsView Root Home Boot EFI system Swap New partition for %1 New partition %1 %2 size[number] filesystem[name] PartitionModel Free Space New partition Name Ðазив File System Фајл ÑиÑтем Mount Point Size PartitionPage Form Форма Storage de&vice: &Revert All Changes New Partition &Table Cre&ate &Edit &Delete New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group I&nstall boot loader on: Are you sure you want to create a new partition table on %1? Can not create new partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. PartitionViewStep Gathering system information... Partitions Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <strong>Replace</strong> a partition with %1. <strong>Manual</strong> partitioning. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Current: Тренутно: After: ПоÑле: No EFI system partition configured An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. EFI system partition flag not set An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form Форма Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: External command crashed. Command <i>%1</i> crashed. External command failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Bad parameters for process job call. Лоши параметри при позиву поÑла процеÑа. External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Command <i>%1</i> finished with exit code %2. QObject Default Keyboard Model Default подразумевано unknown непознато extended проширена unformatted неформатирана swap Unpartitioned space or unknown partition table (no mount point) Requirements checking for module <i>%1</i> is complete. %1 (%2) language[name] (country[name]) %1 (%2) No product No description provided. File not found Path <pre>%1</pre> must be an absolute path. Could not create new random file <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form Форма Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. The selected item does not appear to be a valid partition. %1 cannot be installed on empty space. Please select an existing partition. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 cannot be installed on this partition. Data partition (%1) Unknown system partition (%1) %1 system partition (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. The EFI system partition at %1 will be used for starting %2. EFI system partition: ResizeFSJob Resize Filesystem Job Invalid configuration The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. ResizeVolumeGroupDialog Resize Volume Group ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: За најбоље резултате обезбедите да овај рачунар: System requirements СиÑтемÑки захтеви ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. This program will ask you some questions and set up %2 on your computer. ScanningDialog Scanning storage devices... Partitioning ПартициониÑање SetHostNameJob Set hostname %1 Set hostname <strong>%1</strong>. Setting hostname %1. Internal Error Интерна грешка Cannot write hostname to target system SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Failed to write keyboard configuration for the virtual console. Failed to write to %1 Failed to write keyboard configuration for X11. Failed to write keyboard configuration to existing /etc/default directory. SetPartFlagsJob Set flags on partition %1. Set flags on %1MiB %2 partition. Set flags on new partition. Clear flags on partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag new partition as <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. SetPasswordJob Set password for user %1 Setting password for user %1. Bad destination system path. rootMountPoint is %1 Cannot disable root account. passwd terminated with error code %1. Cannot set password for user %1. usermod terminated with error code %1. SetTimezoneJob Set timezone to %1/%2 Cannot access selected timezone path. Bad path: %1 Cannot set timezone. Link creation failed, target: %1; link name: %2 Cannot set timezone, Cannot open /etc/timezone for writing ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) SummaryPage This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. SummaryViewStep Summary Сажетак TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingMachineNeonJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form Форма Placeholder <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. TrackingViewStep Feedback UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> Your username is too long. Ваше кориÑничко име је предугачко. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Only letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Име вашег "домаћина" - hostname је прекратко. Your hostname is too long. Ваше име домаћина је предуго - hostname Your passwords do not match! Лозинке Ñе не поклапају! UsersViewStep Users КориÑници VariantModel Key Value VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB Total Size: Used Size: Total Sectors: Quantity of LVs: WelcomePage Form Форма Select application and system language Open donations website &Donate Open help and support website Open issues and bug-tracking website Open release notes website &Release notes &Known issues &Познати проблеми &Support По&дршка &About &О програму <h1>Welcome to the %1 installer.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Welcome to %1 setup.</h1> About %1 setup About %1 installer О %1 инÑталатеру <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support %1 подршка WelcomeQmlViewStep Welcome Добродошли WelcomeViewStep Welcome Добродошли notesqml <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> About Support Known issues Release notes Donate calamares-3.2.20/lang/calamares_sr@latin.ts000066400000000000000000004632361362604102500206200ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. BootLoaderModel Master Boot Record of %1 Master Boot Record na %1 Boot Partition Particija za pokretanje sistema System Partition Sistemska particija Do not install a boot loader %1 (%2) Calamares::BlankViewStep Blank Page Calamares::DebugWindow Form GlobalStorage JobQueue Modules Type: Vrsta: none Interface: Tools Reload Stylesheet Widget Tree Debug information Calamares::ExecutionViewStep Set up Install Instaliraj Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Gotovo Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Calamares::PythonJob Running %1 operation. Bad working directory path Neispravna putanja do radne datoteke Working directory %1 for python job %2 is not readable. Nemoguće proÄitati radnu datoteku %1 za funkciju %2 u Python-u. Bad main script file Neispravan glavna datoteka za skriptu Main script file %1 for python job %2 is not readable. Glavna datoteka za skriptu %1 za Python funkciju %2 se ne može proÄitati. Boost.Python error in job "%1". Boost.Python greÅ¡ka u funkciji %1 Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager &Back &Nazad &Next &Dalje &Cancel &Prekini Cancel setup without changing the system. Cancel installation without changing the system. Setup Failed Would you like to paste the install log to the web? Install Log Paste URL The upload was unsuccessful. No web-paste was done. Calamares Initialization Failed %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. <br/>The following modules could not be loaded: Continue with installation? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Set up &Install Setup is complete. Close the setup program. Cancel setup? Cancel installation? Prekini instalaciju? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Da li stvarno želite prekinuti trenutni proces instalacije? Instaler će se zatvoriti i sve promjene će biti izgubljene. &Yes &No &Close Continue with setup? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> &Install now Go &back &Done The installation is complete. Close the installer. Error GreÅ¡ka Installation Failed NeuspjeÅ¡na instalacija CalamaresPython::Helper Unknown exception type Nepoznat tip izuzetka unparseable Python error unparseable Python error unparseable Python traceback unparseable Python traceback Unfetchable Python error. Unfetchable Python error. CalamaresUtils Install log posted to: %1 CalamaresWindow %1 Setup Program %1 Installer %1 Instaler Show debug information CheckerContainer Gathering system information... ChoicePage Form After: Poslije: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Boot loader location: Select storage de&vice: Current: Reuse %1 as home partition for %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. <strong>Select a partition to install on</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. The EFI system partition at %1 will be used for starting %2. EFI system partition: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. No Swap Reuse Swap Swap (no Hibernate) Swap (with Hibernate) Swap to file <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. ClearMountsJob Clear mounts for partitioning operations on %1 Skini taÄke montiranja za operacije nad particijama na %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 Sve taÄke montiranja na %1 skinute ClearTempMountsJob Clear all temporary mounts. Clearing all temporary mounts. Cannot get list of temporary mounts. Cleared all temporary mounts. CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Kreiraj particiju MiB Partition &Type: &Tip particije &Primary &Primarna E&xtended P&roÅ¡irena Fi&le System: LVM LV name Flags: &Mount Point: TaÄka &montiranja: Si&ze: Veli&Äina En&crypt Logical LogiÄka Primary Primarna GPT GPT Mountpoint already in use. Please select another one. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. The installer failed to create partition on disk '%1'. Instaler nije uspeo napraviti particiju na disku '%1'. CreatePartitionTableDialog Create Partition Table Napravi novu tabelu particija Creating a new partition table will delete all existing data on the disk. Kreiranje nove tabele particija će obrisati sve podatke na disku. What kind of partition table do you want to create? Kakvu tabelu particija želite da napravite? Master Boot Record (MBR) Master Boot Record (MBR) GUID Partition Table (GPT) GUID Partition Table (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Creating new %1 partition table on %2. The installer failed to create a partition table on %1. Instaler nije uspjeo da napravi tabelu particija na %1. CreateUserJob Create user %1 Napravi korisnika %1 Create user <strong>%1</strong>. Creating user %1. Sudoers dir is not writable. Nemoguće mijenjati fajlove u sudoers direktorijumu Cannot create sudoers file for writing. Nemoguće napraviti sudoers fajl Cannot chmod sudoers file. Nemoguće uraditi chmod nad sudoers fajlom. Cannot open groups file for reading. Nemoguće otvoriti groups fajl CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. Delete partition <strong>%1</strong>. Deleting partition %1. The installer failed to delete partition %1. Instaler nije uspjeo obrisati particiju %1. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. This device has a <strong>%1</strong> partition table. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Failed to open %1 DummyCppJob Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Promjeni postojeću particiju: Content: Sadržaj: &Keep Format Formatiraj Warning: Formatting the partition will erase all existing data. Upozorenje: Formatiranje particije će obrisati sve podatke. &Mount Point: TaÄka za &montiranje: Si&ze: Veli&Äina MiB Fi&le System: Flags: Mountpoint already in use. Please select another one. EncryptWidget Form En&crypt system Passphrase Confirm passphrase Please enter the same passphrase in both boxes. FillGlobalStorageJob Set partition information Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Install boot loader on <strong>%1</strong>. Setting up mount points. FinishedPage Form <Restart checkbox tooltip> &Restart now <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. FinishedViewStep Finish ZavrÅ¡i Setup Complete Installation Complete The setup of %1 is complete. The installation of %1 is complete. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatting partition %1 with file system %2. The installer failed to format partition %1 on disk '%2'. Instaler nije uspeo formatirati particiju %1 na disku '%2'. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source je prikljuÄen na izvor struje The system is not plugged in to a power source. is connected to the Internet ima vezu sa internetom The system is not connected to the Internet. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Please install KDE Konsole and try again! Executing script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script KeyboardPage Set keyboard model to %1.<br/> Set keyboard layout to %1/%2. KeyboardViewStep Keyboard Tastatura LCLocaleDialog System locale setting The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. &Cancel &Prekini &OK LicensePage Form <h1>License Agreement</h1> I accept the terms and conditions above. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> File: %1 Show the license text Open license agreement in browser. Hide license text LocalePage The system language will be set to %1. The numbers and dates locale will be set to %1. Region: Regija: Zone: Zona: &Change... Set timezone to %1/%2.<br/> Postavi vremensku zonu na %1/%2.<br/> LocaleViewStep Location Lokacija LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Configuration Error No root mount point is set for MachineId. NetInstallPage Name Naziv Description Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Incorrect configuration) NetInstallViewStep Package selection Office software Office package Browser software Browser package Web browser Kernel Services Login Desktop Applications NotesQmlViewStep Notes OEMPage Ba&tch: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> OEMViewStep OEM Configuration Set the OEM Batch Identifier to <code>%1</code>. PWQ Password is too short Password is too long Password is too weak Memory allocation error when setting '%1' Memory allocation error The password is the same as the old one The password is a palindrome The password differs with case changes only The password is too similar to the old one The password contains the user name in some form The password contains words from the real name of the user in some form The password contains forbidden words in some form The password contains less than %1 digits The password contains too few digits The password contains less than %1 uppercase letters The password contains too few uppercase letters The password contains less than %1 lowercase letters The password contains too few lowercase letters The password contains less than %1 non-alphanumeric characters The password contains too few non-alphanumeric characters The password is shorter than %1 characters The password is too short The password is just rotated old one The password contains less than %1 character classes The password does not contain enough character classes The password contains more than %1 same characters consecutively The password contains too many same characters consecutively The password contains more than %1 characters of the same class consecutively The password contains too many characters of the same class consecutively The password contains monotonic sequence longer than %1 characters The password contains too long of a monotonic character sequence No password supplied Cannot obtain random numbers from the RNG device Password generation failed - required entropy too low for settings The password fails the dictionary check - %1 The password fails the dictionary check Unknown setting - %1 Unknown setting Bad integer value of setting - %1 Bad integer value Setting %1 is not of integer type Setting is not of integer type Setting %1 is not of string type Setting is not of string type Opening the configuration file failed The configuration file is malformed Fatal failure Unknown error Password is empty PackageChooserPage Form Product Name TextLabel Long Product Description Package Selection Please pick a product from the list. The selected product will be installed. PackageChooserViewStep Packages Page_Keyboard Form Keyboard Model: Model tastature: Type here to test your keyboard Test tastature Page_UserSetup Form What is your name? Kako se zovete? What name do you want to use to log in? Koje ime želite koristiti da se prijavite? Choose a password to keep your account safe. Odaberite lozinku da biste zaÅ¡titili VaÅ¡ korisniÄki nalog. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>UpiÅ¡ite istu lozinku dvaput, da ne bi doÅ¡lo do greÅ¡ke kod kucanja. Dobra lozinka se sastoji od meÅ¡avine slova, brojeva i interpunkcijskih znakova; trebala bi biti duga bar osam znakova, i trebalo bi da ju menjate redovno</small> What is the name of this computer? Kako želite nazvati ovaj raÄunar? Your Full Name login <small>This name will be used if you make the computer visible to others on a network.</small> <small>Ovo ime će biti vidljivo drugim raÄunarima na mreži</small> Computer Name Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Use the same password for the administrator account. Choose a password for the administrator account. <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Unesite istu lozinku dvaput, da ne bi doÅ¡lp do greÅ¡ke kod kucanja</small> PartitionLabelsView Root Home Boot EFI system Swap New partition for %1 New partition Nova particija %1 %2 size[number] filesystem[name] PartitionModel Free Space Slobodan prostor New partition Nova particija Name Naziv File System Fajl sistem Mount Point Size VeliÄina PartitionPage Form Storage de&vice: &Revert All Changes &Vrati sve promjene New Partition &Table Cre&ate &Edit &Delete New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group I&nstall boot loader on: Are you sure you want to create a new partition table on %1? Can not create new partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. PartitionViewStep Gathering system information... Partitions Particije Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <strong>Replace</strong> a partition with %1. <strong>Manual</strong> partitioning. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Current: After: Poslije: No EFI system partition configured An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. EFI system partition flag not set An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: External command crashed. Command <i>%1</i> crashed. External command failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Bad parameters for process job call. PogreÅ¡ni parametri kod poziva funkcije u procesu. External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Command <i>%1</i> finished with exit code %2. QObject Default Keyboard Model Default unknown extended unformatted swap Unpartitioned space or unknown partition table (no mount point) Requirements checking for module <i>%1</i> is complete. %1 (%2) language[name] (country[name]) No product No description provided. File not found Path <pre>%1</pre> must be an absolute path. Could not create new random file <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. The selected item does not appear to be a valid partition. %1 cannot be installed on empty space. Please select an existing partition. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 cannot be installed on this partition. Data partition (%1) Unknown system partition (%1) %1 system partition (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. The EFI system partition at %1 will be used for starting %2. EFI system partition: ResizeFSJob Resize Filesystem Job Invalid configuration The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. Promjeni veliÄinu particije %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. ResizeVolumeGroupDialog Resize Volume Group ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: Za najbolje rezultate, uvjetite se da li ovaj raÄunar: System requirements ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. This program will ask you some questions and set up %2 on your computer. ScanningDialog Scanning storage devices... Partitioning SetHostNameJob Set hostname %1 Postavi ime raÄunara %1 Set hostname <strong>%1</strong>. Setting hostname %1. Internal Error Cannot write hostname to target system SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Failed to write keyboard configuration for the virtual console. Failed to write to %1 Failed to write keyboard configuration for X11. Failed to write keyboard configuration to existing /etc/default directory. SetPartFlagsJob Set flags on partition %1. Set flags on %1MiB %2 partition. Set flags on new partition. Clear flags on partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag new partition as <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. SetPasswordJob Set password for user %1 Setting password for user %1. Bad destination system path. rootMountPoint is %1 Cannot disable root account. passwd terminated with error code %1. Cannot set password for user %1. usermod terminated with error code %1. SetTimezoneJob Set timezone to %1/%2 Cannot access selected timezone path. Bad path: %1 Cannot set timezone. Link creation failed, target: %1; link name: %2 Cannot set timezone, Cannot open /etc/timezone for writing ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) SummaryPage This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. SummaryViewStep Summary IzveÅ¡taj TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingMachineNeonJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form Placeholder <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. TrackingViewStep Feedback UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> Your username is too long. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Only letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Your hostname is too long. Your passwords do not match! VaÅ¡e lozinke se ne poklapaju UsersViewStep Users Korisnici VariantModel Key Value Vrednost VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB Total Size: Used Size: Total Sectors: Quantity of LVs: WelcomePage Form Select application and system language Open donations website &Donate Open help and support website Open issues and bug-tracking website Open release notes website &Release notes &Known issues &Support &About <h1>Welcome to the %1 installer.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Welcome to %1 setup.</h1> About %1 setup About %1 installer <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support WelcomeQmlViewStep Welcome DobrodoÅ¡li WelcomeViewStep Welcome DobrodoÅ¡li notesqml <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> About Support Known issues Release notes Donate calamares-3.2.20/lang/calamares_sv.ts000066400000000000000000005202751362604102500174710ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. Systemets <strong>startmiljö</strong>.<br><br>Äldre x86-system stöder endast <strong>BIOS</strong>.<br>Moderna system stöder vanligen <strong>EFI</strong>, men kan ocksÃ¥ vara i kompatibilitetsläge för BIOS. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. Detta system startades med en <strong>EFI-miljö</strong>.<br><br>För att ställa in start frÃ¥n en EFI-miljö mÃ¥ste en starthanterare användas, t.ex. <strong>GRUB</strong> eller <strong>systemd-boot</strong> pÃ¥ en <strong>EFI-systempartition</strong>. Detta sker automatiskt, sÃ¥vida du inte väljer att partitionera manuellt. DÃ¥ mÃ¥ste du själv installera en starthanterare. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. Detta system startades med en <strong>BIOS-miljö</strong>. <br><br>För att ställa in start frÃ¥n en BIOS-miljö mÃ¥ste en starthanterare som t.ex. <strong>GRUB</strong> installeras, antingen i början av en partition eller pÃ¥ <strong>huvudstartsektorn (MBR)</strong> i början av partitionstabellen. Detta sker automatiskt, sÃ¥vida du inte väljer manuell partitionering. DÃ¥ mÃ¥ste du själv installera en starthanterare. BootLoaderModel Master Boot Record of %1 Master Boot Record pÃ¥ %1 Boot Partition Startpartition System Partition Systempartition Do not install a boot loader Installera inte nÃ¥gon starthanterare %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page Tom sida Calamares::DebugWindow Form Form GlobalStorage GlobalStorage JobQueue JobQueue Modules Moduler Type: Typ: none ingen Interface: Gränssnitt: Tools Verktyg Reload Stylesheet Widget Tree Debug information Avlusningsinformation Calamares::ExecutionViewStep Set up Inställningar Install Installera Calamares::FailJob Job failed (%1) Uppgiften misslyckades (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Klar Calamares::NamedJob Example job (%1) Exempel jobb (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Kör kommandot '%1'. Running command %1 %2 Kör kommando %1 %2 Calamares::PythonJob Running %1 operation. Kör %1-operation Bad working directory path Arbetskatalogens sökväg är ogiltig Working directory %1 for python job %2 is not readable. Arbetskatalog %1 för pythonuppgift %2 är inte läsbar. Bad main script file Ogiltig huvudskriptfil Main script file %1 for python job %2 is not readable. Huvudskriptfil %1 för pythonuppgift %2 är inte läsbar. Boost.Python error in job "%1". Boost.Python-fel i uppgift "%'1". Calamares::QmlViewStep Loading ... Laddar ... QML Step <i>%1</i>. QML steg <i>%1</i>. Loading failed. Calamares::RequirementsChecker Waiting for %n module(s). Väntar pÃ¥ %n modul(er). Väntar pÃ¥ %n modul(er). (%n second(s)) (%n sekund(er)) (%n sekund(er)) System-requirements checking is complete. Calamares::ViewManager &Back &BakÃ¥t &Next &Nästa &Cancel Avbryt Cancel setup without changing the system. Avbryt inställningarna utan att förändra systemet. Cancel installation without changing the system. Avbryt installationen utan att förändra systemet. Setup Failed Inställningarna misslyckades Would you like to paste the install log to the web? Install Log Paste URL The upload was unsuccessful. No web-paste was done. Sändningen misslyckades. Ingenting sparades pÃ¥ webbplatsen. Calamares Initialization Failed Initieringen av Calamares misslyckades %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. <br/>The following modules could not be loaded: <br/>Följande moduler kunde inte hämtas: Continue with installation? Vill du fortsätta med installationen? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Installera nu &Set up &Installera &Install &Installera Setup is complete. Close the setup program. Installationen är klar. Du kan avsluta installationsprogrammet. Cancel setup? Avbryt inställningarna? Cancel installation? Avbryt installation? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Är du säker pÃ¥ att du vill avsluta installationen i förtid? Alla ändringar kommer att gÃ¥ förlorade. &Yes &Ja &No &Nej &Close &Stäng Continue with setup? Fortsätt med installation? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> %1-installeraren är pÃ¥ väg att göra ändringar för att installera %2.<br/><strong>Du kommer inte att kunna Ã¥ngra dessa ändringar.</strong> &Install now &Installera nu Go &back GÃ¥ &bakÃ¥t &Done &Klar The installation is complete. Close the installer. Installationen är klar. Du kan avsluta installationshanteraren. Error Fel Installation Failed Installationen misslyckades CalamaresPython::Helper Unknown exception type Okänd undantagstyp unparseable Python error Otolkbart Pythonfel unparseable Python traceback Otolkbar Python-traceback Unfetchable Python error. Ohämtbart Pythonfel CalamaresUtils Install log posted to: %1 CalamaresWindow %1 Setup Program %1 Installationsprogram %1 Installer %1-installationsprogram Show debug information Visa avlusningsinformation CheckerContainer Gathering system information... Samlar systeminformation... ChoicePage Form Formulär After: Efter: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Manuell partitionering</strong><br/>Du kan själv skapa och ändra storlek pÃ¥ partitionerna. Boot loader location: Sökväg till starthanterare: Select storage de&vice: Välj lagringsenhet: Current: Nuvarande: Reuse %1 as home partition for %2. Ã…teranvänd %1 som hempartition för %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Välj en partition att minska, sen dra i nedre fältet för att ändra storlek</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. <strong>Select a partition to install on</strong> <strong>Välj en partition att installera pÃ¥</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Ingen EFI-partition kunde inte hittas pÃ¥ systemet. GÃ¥ tillbaka och partitionera din lagringsenhet manuellt för att ställa in %1. The EFI system partition at %1 will be used for starting %2. EFI-partitionen %1 kommer att användas för att starta %2. EFI system partition: EFI-partition: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Denna lagringsenhet ser inte ut att ha ett operativsystem installerat. Vad vill du göra?<br/>Du kommer kunna granska och bekräfta dina val innan nÃ¥gon ändring görs pÃ¥ lagringseneheten. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Rensa lagringsenhet</strong><br/>Detta kommer <font color="red">radera</font> all existerande data pÃ¥ den valda lagringsenheten. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Denna lagringsenhet har %1 pÃ¥ sig. Vad vill du göra?<br/>Du kommer kunna granska och bekräfta dina val innan nÃ¥gon ändring görs pÃ¥ lagringsenheten. No Swap Ingen Swap Reuse Swap Ã…teranvänd Swap Swap (no Hibernate) Swap (with Hibernate) Swap to file Använd en fil som växlingsenhet <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Installera pÃ¥ sidan om</strong><br/>Installationshanteraren kommer krympa en partition för att göra utrymme för %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Ersätt en partition</strong><br/>Ersätter en partition med %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Denna lagringsenhet har redan ett operativsystem pÃ¥ sig. Vad vill du göra?<br/>Du kommer kunna granska och bekräfta dina val innan nÃ¥gon ändring sker pÃ¥ lagringsenheten. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Denna lagringsenhet har flera operativsystem pÃ¥ sig. Vad vill du göra?<br/>Du kommer kunna granska och bekräfta dina val innan nÃ¥gon ändring sker pÃ¥ lagringsenheten. ClearMountsJob Clear mounts for partitioning operations on %1 Rensa monteringspunkter för partitionering pÃ¥ %1 Clearing mounts for partitioning operations on %1. Rensar monteringspunkter för partitionering pÃ¥ %1. Cleared all mounts for %1 Rensade alla monteringspunkter för %1 ClearTempMountsJob Clear all temporary mounts. Rensa alla tillfälliga monteringspunkter. Clearing all temporary mounts. Rensar alla tillfälliga monteringspunkter. Cannot get list of temporary mounts. Kunde inte hämta tillfälliga monteringspunkter. Cleared all temporary mounts. Rensade alla tillfälliga monteringspunkter CommandList Could not run command. Kunde inte köra kommandot. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Skapa en partition MiB MiB Partition &Type: Partitions&typ: &Primary &Primär E&xtended Utökad Fi&le System: Fi&lsystem: LVM LV name LVM LV namn Flags: Flaggor: &Mount Point: &Monteringspunkt: Si&ze: Storlek: En&crypt Kr%yptera Logical Logisk Primary Primär GPT GPT Mountpoint already in use. Please select another one. Monteringspunkt används redan. Välj en annan. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Skapa ny %2MiB partition pÃ¥ %4 (%3) med filsystem %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Skapa ny <strong>%2MiB</strong>partition pÃ¥ <strong>%4</strong> (%3) med filsystem <strong>%1</strong>. Creating new %1 partition on %2. Skapar ny %1 partition pÃ¥ %2. The installer failed to create partition on disk '%1'. Installationsprogrammet kunde inte skapa partition pÃ¥ disk '%1'. CreatePartitionTableDialog Create Partition Table Skapa partitionstabell Creating a new partition table will delete all existing data on the disk. Skapa en ny partitionstabell och ta bort alla befintliga data pÃ¥ disken. What kind of partition table do you want to create? Vilken typ av partitionstabell vill du skapa? Master Boot Record (MBR) Master Boot Record (MBR) GUID Partition Table (GPT) GUID-partitionstabell (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Skapa ny %1 partitionstabell pÃ¥ %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Skapa ny <strong>%1</strong> partitionstabell pÃ¥ <strong>%2</strong> (%3). Creating new %1 partition table on %2. Skapar ny %1 partitionstabell pÃ¥ %2. The installer failed to create a partition table on %1. Installationsprogrammet kunde inte skapa en partitionstabell pÃ¥ %1. CreateUserJob Create user %1 Skapar användare %1 Create user <strong>%1</strong>. Skapa användare <strong>%1</strong>. Creating user %1. Skapar användare %1 Sudoers dir is not writable. Sudoerkatalogen är inte skrivbar. Cannot create sudoers file for writing. Kunde inte skapa sudoerfil för skrivning. Cannot chmod sudoers file. Kunde inte chmodda sudoerfilen. Cannot open groups file for reading. Kunde inte öppna gruppfilen för läsning. CreateVolumeGroupDialog Create Volume Group Skapa volymgrupp CreateVolumeGroupJob Create new volume group named %1. Skapa ny volymgrupp med namnet %1. Create new volume group named <strong>%1</strong>. Skapa ny volymgrupp med namnet <strong>%1</strong>. Creating new volume group named %1. Skapa ny volymgrupp med namnet %1. The installer failed to create a volume group named '%1'. Installationsprogrammet kunde inte skapa en volymgrupp med namnet '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deaktivera volymgruppen med namnet %1. Deactivate volume group named <strong>%1</strong>. Deaktivera volymgruppen med namnet <strong>%1</strong>. The installer failed to deactivate a volume group named %1. Installationsprogrammet kunde inte deaktivera volymgruppen med namnet %1. DeletePartitionJob Delete partition %1. Ta bort partition %1. Delete partition <strong>%1</strong>. Ta bort partition <strong>%1</strong>. Deleting partition %1. Tar bort partition %1. The installer failed to delete partition %1. Installationsprogrammet kunde inte ta bort partition %1. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. Typen av <strong>partitionstabell</strong> pÃ¥ den valda lagringsenheten.<br><br>Det enda sättet attt ändra typen av partitionstabell är genom att radera och Ã¥terskapa partitionstabellen frÃ¥n början, vilket förstör all data pÃ¥ lagringsenheten.<br>Installationshanteraren kommer behÃ¥lla den nuvarande partitionstabellen om du inte väljer nÃ¥got annat.<br>PÃ¥ moderna system är GPT att föredra. This device has a <strong>%1</strong> partition table. Denna enhet har en <strong>%1</strong> partitionstabell. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Det här är den rekommenderade typen av partitionstabell för moderna system med en startpartition av typen <strong>EFI</strong>. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1 - (%2) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Skriv LUKS konfiguration för Dracut till %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Failed to open %1 Kunde inte öppna %1 DummyCppJob Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Ändra befintlig partition Content: InnehÃ¥ll: &Keep BehÃ¥ll Format Format Warning: Formatting the partition will erase all existing data. Varning: Formatering av partitionen kommer att radera alla data. &Mount Point: &Monteringspunkt Si&ze: Storlek: MiB MiB Fi&le System: Fi&lsystem: Flags: Flaggor: Mountpoint already in use. Please select another one. Monteringspunkt används redan. Välj en annan. EncryptWidget Form Form En&crypt system Kryptera system Passphrase Lösenord Confirm passphrase Bekräfta lösenord Please enter the same passphrase in both boxes. Vänligen skriv samma lösenord i bÃ¥da fälten. FillGlobalStorageJob Set partition information Ange partitionsinformation Install %1 on <strong>new</strong> %2 system partition. Installera %1 pÃ¥ <strong>ny</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Installera %2 pÃ¥ %3 system partition <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Install boot loader on <strong>%1</strong>. Installera uppstartshanterare pÃ¥ <strong>%1</strong>. Setting up mount points. Ställer in monteringspunkter. FinishedPage Form Formulär <Restart checkbox tooltip> <Restart checkbox tooltip> &Restart now Sta&rta om nu <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>Klappat och klart.</h1><br/>%1 har installerats pÃ¥ din dator.<br/>Du kan nu starta om till ditt nya system, eller fortsätta att använda %2 i liveläge. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. FinishedViewStep Finish Slutför Setup Complete Inställningarna är klara Installation Complete Installationen är klar The setup of %1 is complete. Inställningarna för %1 är klara. The installation of %1 is complete. Installationen av %1 är klar. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Formatera partition %1 (filsystem: %2, storlek: %3 MiB) pÃ¥ %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatera <strong>%3MiB</strong> partition <strong>%1</strong> med filsystem <strong>%2</strong>. Formatting partition %1 with file system %2. Formatera partition %1 med filsystem %2. The installer failed to format partition %1 on disk '%2'. Installationsprogrammet misslyckades att formatera partition %1 pÃ¥ disk '%2'. GeneralRequirements has at least %1 GiB available drive space har minst %1 GiB tillgängligt pÃ¥ hÃ¥rddisken There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory har minst %1 GiB arbetsminne The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source är ansluten till en strömkälla The system is not plugged in to a power source. Systemet är inte anslutet till nÃ¥gon strömkälla. is connected to the Internet är ansluten till internet The system is not connected to the Internet. Systemet är inte anslutet till internet. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. Installationsprogammet körs inte med administratörsrättigheter. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. Skärmen är för liten för att visa installationshanteraren. HostInfoJob Collecting information about your machine. Samlar in information om din maskin. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Kunde inte skapa mappar <code>%1</code>. Could not open file <code>%1</code>. Kunde inte öppna fil <code>%1</code>. Could not write to file <code>%1</code>. Kunde inte skriva till fil <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. Skapar initramfs med mkinitcpio. InitramfsJob Creating initramfs. Skapar initramfs. InteractiveTerminalPage Konsole not installed Konsole inte installerat Please install KDE Konsole and try again! Executing script: &nbsp;<code>%1</code> Kör skript: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script Skript KeyboardPage Set keyboard model to %1.<br/> Sätt tangenbordsmodell till %1.<br/> Set keyboard layout to %1/%2. Sätt tangentbordslayout till %1/%2. KeyboardViewStep Keyboard Tangentbord LCLocaleDialog System locale setting SystemsprÃ¥ksinställning The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. SystemsprÃ¥ket pÃ¥verkar vilket sprÃ¥k och teckenuppsättning somliga kommandoradsprogram använder.<br/>Det nuvarande sprÃ¥ket är <strong>%1</strong>. &Cancel &Avsluta &OK &Okej LicensePage Form Formulär <h1>License Agreement</h1> <h1>Licensavtal</h1> I accept the terms and conditions above. Jag accepterar villkoren och avtalet ovan. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License Licens LicenseWidget URL: %1 URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1-drivrutin</strong><br/>frÃ¥n %2 <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 grafikdrivrutin</strong><br/><font color="Grey">frÃ¥n %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 insticksprogram</strong><br/><font color="Grey">frÃ¥n %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">frÃ¥n %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1-paket</strong><br/><font color="Grey">frÃ¥n %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">frÃ¥n %2</font> File: %1 Fil: %1 Show the license text Visa licens text Open license agreement in browser. Öppna licensavtal i en webbläsare. Hide license text Dölj licens text LocalePage The system language will be set to %1. SystemsprÃ¥ket kommer ändras till %1. The numbers and dates locale will be set to %1. Region: Region: Zone: Zon: &Change... Ändra... Set timezone to %1/%2.<br/> Sätt tidszon till %1/%2.<br/> LocaleViewStep Location Plats LuksBootKeyFileJob Configuring LUKS key file. Konfigurerar LUKS nyckel fil. No partitions are defined. Inga partitioner är definerade. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Generera maskin-id. Configuration Error Konfigurationsfel No root mount point is set for MachineId. NetInstallPage Name Namn Description Beskrivning Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Nätverksinstallation. (Inaktiverad: Kan inte hämta paketlistor, kontrollera nätverksanslutningen) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Incorrect configuration) NetInstallViewStep Package selection Paketval Office software Kontors programvara Office package Kontors paket Browser software Browser package Web browser Webbläsare Kernel Kärna Services Tjänster Login Inloggning Desktop Skrivbord Applications Program NotesQmlViewStep Notes Anteckningar OEMPage Ba&tch: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> OEMViewStep OEM Configuration OEM Konfiguration Set the OEM Batch Identifier to <code>%1</code>. PWQ Password is too short Lösenordet är för kort Password is too long Lösenordet är för lÃ¥ngt Password is too weak Lösenordet är för svagt Memory allocation error when setting '%1' Memory allocation error Minnesallokerings fel The password is the same as the old one The password is a palindrome Lösenordet är en palindrom The password differs with case changes only The password is too similar to the old one The password contains the user name in some form The password contains words from the real name of the user in some form The password contains forbidden words in some form The password contains less than %1 digits The password contains too few digits The password contains less than %1 uppercase letters The password contains too few uppercase letters The password contains less than %1 lowercase letters The password contains too few lowercase letters The password contains less than %1 non-alphanumeric characters The password contains too few non-alphanumeric characters The password is shorter than %1 characters The password is too short Detta lösenordet är för kort The password is just rotated old one The password contains less than %1 character classes The password does not contain enough character classes The password contains more than %1 same characters consecutively The password contains too many same characters consecutively The password contains more than %1 characters of the same class consecutively The password contains too many characters of the same class consecutively The password contains monotonic sequence longer than %1 characters The password contains too long of a monotonic character sequence No password supplied Inget lösenord angivit Cannot obtain random numbers from the RNG device Password generation failed - required entropy too low for settings The password fails the dictionary check - %1 The password fails the dictionary check Unknown setting - %1 Okänd inställning - %1 Unknown setting Okänd inställning Bad integer value of setting - %1 Bad integer value DÃ¥ligt heltals värde Setting %1 is not of integer type Inställning %1 är inte av heltals typ Setting is not of integer type Inställning är inte av heltals typ Setting %1 is not of string type Inställning %1 är inte av sträng typ Setting is not of string type Inställning %1 är inte av sträng typ Opening the configuration file failed The configuration file is malformed Fatal failure Unknown error Okänt fel Password is empty PackageChooserPage Form Form Product Name Produktnamn TextLabel Long Product Description LÃ¥ng produktbeskrivning Package Selection Paketval Please pick a product from the list. The selected product will be installed. PackageChooserViewStep Packages Paket Page_Keyboard Form Form Keyboard Model: Tangentbordsmodell: Type here to test your keyboard Skriv här för att testa ditt tangentbord Page_UserSetup Form Form What is your name? Vad heter du? What name do you want to use to log in? Vilket namn vill du använda för att logga in? Choose a password to keep your account safe. Välj ett lösenord för att hÃ¥lla ditt konto säkert. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>Ange samma lösenord tvÃ¥ gÃ¥nger, sÃ¥ att det kan kontrolleras för stavfel. Ett bra lösenord innehÃ¥ller en blandning av bokstäver, nummer och interpunktion, bör vara minst Ã¥tta tecken lÃ¥ngt, och bör ändras regelbundet.</small> What is the name of this computer? Vad är namnet pÃ¥ datorn? Your Full Name login inloggning <small>This name will be used if you make the computer visible to others on a network.</small> <small>Detta namn används om du gör datorn synlig för andra i ett nätverk.</small> Computer Name Datornamn Password Lösenord Repeat Password Repetera Lösenord When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Kräv starkt lösenord. Log in automatically without asking for the password. Logga in automatiskt utan att frÃ¥ga efter lösenord. Use the same password for the administrator account. Använd samma lösenord för administratörskontot. Choose a password for the administrator account. Välj ett lösenord för administratörskontot. <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Ange samma lösenord tvÃ¥ gÃ¥nger, sÃ¥ att det kan kontrolleras för stavfel.</small> PartitionLabelsView Root Root Home Hem Boot Boot EFI system EFI-system Swap Swap New partition for %1 Ny partition för %1 New partition Ny partition %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space Ledigt utrymme New partition Ny partition Name Namn File System Filsystem Mount Point Monteringspunkt Size Storlek PartitionPage Form Form Storage de&vice: Lagringsenhet: &Revert All Changes Ã…terställ alla ändringar New Partition &Table Ny partitions&tabell Cre&ate Skapa &Edit Ändra &Delete Ta bort New Volume Group Ny volymgrupp Resize Volume Group Ändra storlek pÃ¥ volymgrupp Deactivate Volume Group Deaktivera volymgrupp Remove Volume Group Ta bort volymgrupp I&nstall boot loader on: Installera uppstartshanterare pÃ¥: Are you sure you want to create a new partition table on %1? Är du säker pÃ¥ att du vill skapa en ny partitionstabell pÃ¥ %1? Can not create new partition Kan inte skapa ny partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. PartitionViewStep Gathering system information... Samlar systeminformation... Partitions Partitioner Install %1 <strong>alongside</strong> another operating system. Installera %1 <strong>bredvid</strong> ett annat operativsystem. <strong>Erase</strong> disk and install %1. <strong>Rensa</strong> disken och installera %1. <strong>Replace</strong> a partition with %1. <strong>Ersätt</strong> en partition med %1. <strong>Manual</strong> partitioning. <strong>Manuell</strong> partitionering. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Installera %1 <strong>bredvid</strong> ett annat operativsystem pÃ¥ disken <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Rensa</strong> disken <strong>%2</strong> (%3) och installera %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Ersätt</strong> en partition pÃ¥ disken <strong>%2</strong> (%3) med %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>Manuell</strong> partitionering pÃ¥ disken <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Disk <strong>%1</strong> (%2) Current: Nuvarande: After: Efter: No EFI system partition configured Ingen EFI system partition konfigurerad An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. EFI system partition flag not set EFI system partitionsflagga inte satt An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Boot partition not encrypted Boot partition inte krypterad A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form Form Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... Sparar filer tills senare ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: Utdata: External command crashed. Externt kommando kraschade. Command <i>%1</i> crashed. Kommando <i>%1</i> kraschade. External command failed to start. Command <i>%1</i> failed to start. Kommando <i>%1</i> misslyckades med att starta.  Internal error when starting command. Bad parameters for process job call. Ogiltiga parametrar för processens uppgiftsanrop. External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Command <i>%1</i> finished with exit code %2. QObject Default Keyboard Model Standardtangentbordsmodell Default Standard unknown okänd extended utökad unformatted oformaterad swap swap Unpartitioned space or unknown partition table Opartitionerat utrymme eller okänd partitionstabell (no mount point) (ingen monteringspunkt) Requirements checking for module <i>%1</i> is complete. %1 (%2) language[name] (country[name]) %1 (%2) No product Ingen produkt No description provided. File not found Filen hittades inte Path <pre>%1</pre> must be an absolute path. Could not create new random file <pre>%1</pre>. Kunde inte skapa ny slumpmässig fil <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form Formulär Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Välj var du vill installera %1.<br/><font color="red">Varning: </font>detta kommer att radera alla filer pÃ¥ den valda partitionen. The selected item does not appear to be a valid partition. Det valda alternativet verkar inte vara en giltig partition. %1 cannot be installed on empty space. Please select an existing partition. %1 kan inte installeras i tomt utrymme. Välj en existerande partition. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 kan inte installeras pÃ¥ en utökad partition. Välj en existerande primär eller logisk partition. %1 cannot be installed on this partition. %1 kan inte installeras pÃ¥ den här partitionen. Data partition (%1) Datapartition (%1) Unknown system partition (%1) Okänd systempartition (%1) %1 system partition (%2) Systempartition för %1 (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>Partitionen %1 är för liten för %2. Välj en partition med minst storleken %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>%1 kommer att installeras pÃ¥ %2.<br/><font color="red">Varning: </font>all data pÃ¥ partition %2 kommer att gÃ¥ förlorad. The EFI system partition at %1 will be used for starting %2. EFI-systempartitionen %1 kommer att användas för att starta %2. EFI system partition: EFI-systempartition: ResizeFSJob Resize Filesystem Job Invalid configuration Ogiltig konfiguration The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. Ändra storlek pÃ¥ partition %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Ändra <strong>%2MiB</strong>-partitionen <strong>%1</strong> till <strong>%3MB</strong>. Resizing %2MiB partition %1 to %3MiB. Ändrar storlek pÃ¥ partitionen %1 frÃ¥n %2MB till %3MB. The installer failed to resize partition %1 on disk '%2'. Installationsprogrammet misslyckades med att ändra storleken pÃ¥ partition %1 pÃ¥ disk '%2'. ResizeVolumeGroupDialog Resize Volume Group Ändra storlek pÃ¥ volymgrupp ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: För bästa resultat, vänligen se till att datorn: System requirements Systemkrav ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> Datorn uppfyller inte minimikraven för inställning av %1.<br/>Inga inställningar kan inte göras. <a href="#details">Detaljer...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> Denna dator uppfyller inte minimikraven för att installera %1.<br/>Installationen kan inte fortsätta. <a href="#details">Detaljer...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. NÃ¥gra av kraven för inställning av %1 uppfylls inte av datorn.<br/>Inställningarna kan ändÃ¥ göras men vissa funktioner kommer kanske inte att kunna användas. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. Denna dator uppfyller inte alla rekommenderade krav för att installera %1.<br/>Installationen kan fortsätta, men alla alternativ och funktioner kanske inte kan användas. This program will ask you some questions and set up %2 on your computer. Detta program kommer att ställa dig nÃ¥gra frÃ¥gor och installera %2 pÃ¥ din dator. ScanningDialog Scanning storage devices... Skannar lagringsenheter... Partitioning Partitionering SetHostNameJob Set hostname %1 Ange värdnamn %1 Set hostname <strong>%1</strong>. Ange värdnamn <strong>%1</strong>. Setting hostname %1. Anger värdnamn %1. Internal Error Internt fel Cannot write hostname to target system Kan inte skriva värdnamn till mÃ¥lsystem SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Sätt tangentbordsmodell till %1, layout till %2-%3 Failed to write keyboard configuration for the virtual console. Misslyckades med att skriva tangentbordskonfiguration för konsolen. Failed to write to %1 Misslyckades med att skriva %1 Failed to write keyboard configuration for X11. Misslyckades med att skriva tangentbordskonfiguration för X11. Failed to write keyboard configuration to existing /etc/default directory. Misslyckades med att skriva tangentbordskonfiguration till den existerande mappen /etc/default. SetPartFlagsJob Set flags on partition %1. Sätt flaggor pÃ¥ partition %1. Set flags on %1MiB %2 partition. Sätt flaggor pÃ¥ %1MiB %2 partition. Set flags on new partition. Sätt flaggor pÃ¥ ny partition. Clear flags on partition <strong>%1</strong>. Rensa flaggor pÃ¥ partition <strong>%1</strong>, Clear flags on %1MiB <strong>%2</strong> partition. Rensa flaggor pÃ¥ %1MiB <strong>%2</strong>partition. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Flagga %1MiB <strong>%2</strong>partition som <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Rensa flaggor pÃ¥ %1MiB <strong>%2</strong>partition. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Sätter flaggor <strong>%3</strong> pÃ¥ %11MiB <strong>%2</strong>partition. Clear flags on new partition. Rensa flaggor pÃ¥ ny partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flagga partition <strong>%1</strong> som <strong>%2</strong>. Flag new partition as <strong>%1</strong>. Flagga ny partition som <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. SetPasswordJob Set password for user %1 Ange lösenord för användare %1 Setting password for user %1. Ställer in lösenord för användaren %1. Bad destination system path. Ogiltig systemsökväg till mÃ¥let. rootMountPoint is %1 rootMonteringspunkt är %1 Cannot disable root account. Kunde inte inaktivera root konto. passwd terminated with error code %1. passwd stoppades med felkod %1. Cannot set password for user %1. Kan inte ställa in lösenord för användare %1. usermod terminated with error code %1. usermod avslutade med felkod %1. SetTimezoneJob Set timezone to %1/%2 Sätt tidszon till %1/%2 Cannot access selected timezone path. Kan inte komma Ã¥t vald tidszonssökväg. Bad path: %1 Ogiltig sökväg: %1 Cannot set timezone. Kan inte ställa in tidszon. Link creation failed, target: %1; link name: %2 Skapande av länk misslyckades, mÃ¥l: %1; länknamn: %2 Cannot set timezone, Kan inte ställa in tidszon, Cannot open /etc/timezone for writing Kunde inte öppna /etc/timezone för skrivning ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. Detta är en överblick av vad som kommer att ske när du startar installationsprocessen. SummaryViewStep Summary Översikt TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingMachineNeonJob Machine feedback Maskin feedback Configuring machine feedback. Konfigurerar maskin feedback Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Kunde inte konfigurera maskin feedback korrekt, script fel %1. Could not configure machine feedback correctly, Calamares error %1. Kunde inte konfigurera maskin feedback korrekt, Calamares fel %1. TrackingPage Form Form Placeholder PlatshÃ¥llare <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. TrackingViewStep Feedback Feedback UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Om mer än en person skall använda datorn sÃ¥ kan du skapa flera användarkonton när inställningarna är klara.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Om mer än en person skall använda datorn sÃ¥ kan du skapa flera användarkonton när installationen är klar.</small> Your username is too long. Ditt användarnamn är för lÃ¥ngt. Your username must start with a lowercase letter or underscore. Ditt användarnamn mÃ¥ste börja med en liten bokstav eller ett understreck. Only lowercase letters, numbers, underscore and hyphen are allowed. Endast smÃ¥ bokstäver, nummer, understreck och bindestreck är tillÃ¥tet. Only letters, numbers, underscore and hyphen are allowed. Endast bokstäver, nummer, understreck och bindestreck är tillÃ¥tet. Your hostname is too short. Ditt värdnamn är för kort. Your hostname is too long. Ditt värdnamn är för lÃ¥ngt. Your passwords do not match! Lösenorden överensstämmer inte! UsersViewStep Users Användare VariantModel Key Nyckel Value Värde VolumeGroupBaseDialog Create Volume Group Skapa volymgrupp List of Physical Volumes Lista pÃ¥ fysiska volymer Volume Group Name: Volymgrupp namn: Volume Group Type: Volymgrupp typ: Physical Extent Size: MiB MiB Total Size: Total storlek: Used Size: Använd storlek: Total Sectors: Totala sektorer: Quantity of LVs: WelcomePage Form Formulär Select application and system language Välj program och system sprÃ¥k Open donations website &Donate &Donera Open help and support website Besök webbplatsen för hjälp och support Open issues and bug-tracking website Besök webbplatsen för problem och felsökning Open release notes website Besök webbplatsen för versionsinformation &Release notes Versionsinformation, &R &Known issues &Kända problem &Support &Support &About Om, &A <h1>Welcome to the %1 installer.</h1> <h1>Välkommen till %1-installeraren.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Välkommen till installationsprogrammet Calamares för %1.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Welcome to %1 setup.</h1> About %1 setup Om inställningarna för %1 About %1 installer Om %1-installationsprogrammet <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support %1-support WelcomeQmlViewStep Welcome Välkommen WelcomeViewStep Welcome Välkommen notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>Detta är exempel versionsinformation. welcomeq <h3>%1 <quote>%2</quote></h3> <h3>%1 <quote>%2</quote></h3> About Om Support Support Known issues Kända problem Release notes Versionsinformation Donate Donera calamares-3.2.20/lang/calamares_th.ts000066400000000000000000005111231362604102500174440ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. BootLoaderModel Master Boot Record of %1 Master Boot Record ของ %1 Boot Partition พาร์ทิชัน Boot System Partition พาร์ทิชันระบบ Do not install a boot loader ไม่ต้องติดตั้งบูตโหลดเดอร์ %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page Calamares::DebugWindow Form ฟอร์ม GlobalStorage GlobalStorage JobQueue JobQueue Modules Modules Type: ประเภท: none Interface: Tools Reload Stylesheet Widget Tree Debug information ข้อมูลดีบั๊ภCalamares::ExecutionViewStep Set up Install ติดตั้ง Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done เสร็จสิ้น Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 à¸à¸³à¸¥à¸±à¸‡à¹€à¸£à¸µà¸¢à¸à¹ƒà¸Šà¹‰à¸„ำสั่ง %1 %2 Calamares::PythonJob Running %1 operation. à¸à¸²à¸£à¸›à¸à¸´à¸šà¸±à¸•ิà¸à¸²à¸£ %1 à¸à¸³à¸¥à¸±à¸‡à¸—ำงาน Bad working directory path เส้นทางไดเรคทอรีที่ใช้ทำงานไม่ถูà¸à¸•้อง Working directory %1 for python job %2 is not readable. ไม่สามารถอ่านไดเรคทอรีที่ใช้ทำงาน %1 สำหรับ python %2 ได้ Bad main script file ไฟล์สคริปต์หลัà¸à¹„ม่ถูà¸à¸•้อง Main script file %1 for python job %2 is not readable. ไม่สามารถอ่านไฟล์สคริปต์หลัภ%1 สำหรับ python %2 ได้ Boost.Python error in job "%1". Boost.Python ผิดพลาดที่งาน "%1". Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager &Back &B ย้อนà¸à¸¥à¸±à¸š &Next &N ถัดไป &Cancel &C ยà¸à¹€à¸¥à¸´à¸ Cancel setup without changing the system. Cancel installation without changing the system. Setup Failed Would you like to paste the install log to the web? Install Log Paste URL The upload was unsuccessful. No web-paste was done. Calamares Initialization Failed %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. <br/>The following modules could not be loaded: Continue with installation? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Set up &Install Setup is complete. Close the setup program. Cancel setup? Cancel installation? ยà¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸•ิดตั้ง? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. คุณต้องà¸à¸²à¸£à¸¢à¸à¹€à¸¥à¸´à¸à¸à¸£à¸°à¸šà¸§à¸™à¸à¸²à¸£à¸•ิดตั้งที่à¸à¸³à¸¥à¸±à¸‡à¸”ำเนินà¸à¸²à¸£à¸­à¸¢à¸¹à¹ˆà¸«à¸£à¸·à¸­à¹„ม่? ตัวติดตั้งจะสิ้นสุดà¸à¸²à¸£à¸—ำงานà¹à¸¥à¸°à¹„ม่บันทึà¸à¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¸—ี่ได้ดำเนินà¸à¸²à¸£à¸à¹ˆà¸­à¸™à¸«à¸™à¹‰à¸²à¸™à¸µà¹‰ &Yes &No &Close Continue with setup? ดำเนินà¸à¸²à¸£à¸•ิดตั้งต่อหรือไม่? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> ตัวติดตั้ง %1 à¸à¸³à¸¥à¸±à¸‡à¸žà¸¢à¸²à¸¢à¸²à¸¡à¸—ี่จะทำà¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¹ƒà¸™à¸”ิสà¸à¹Œà¸‚องคุณเพื่อติดตั้ง %2<br/><strong>คุณจะไม่สามารถยà¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¹€à¸«à¸¥à¹ˆà¸²à¸™à¸µà¹‰à¹„ด้</strong> &Install now &ติดตั้งตอนนี้ Go &back à¸à¸¥à¸±&บไป &Done The installation is complete. Close the installer. Error ข้อผิดพลาด Installation Failed à¸à¸²à¸£à¸•ิดตั้งล้มเหลว CalamaresPython::Helper Unknown exception type ข้อผิดพลาดไม่ทราบประเภท unparseable Python error ข้อผิดพลาด unparseable Python unparseable Python traceback ประวัติย้อนหลัง unparseable Python Unfetchable Python error. ข้อผิดพลาด Unfetchable Python CalamaresUtils Install log posted to: %1 CalamaresWindow %1 Setup Program %1 Installer ตัวติดตั้ง %1 Show debug information à¹à¸ªà¸”งข้อมูลà¸à¸²à¸£à¸”ีบั๊ภCheckerContainer Gathering system information... à¸à¸³à¸¥à¸±à¸‡à¸£à¸§à¸šà¸£à¸§à¸¡à¸‚้อมูลของระบบ... ChoicePage Form ฟอร์ม After: หลัง: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Boot loader location: Select storage de&vice: Current: Reuse %1 as home partition for %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. <strong>Select a partition to install on</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. ไม่พบพาร์ทิชันสำหรับระบบ EFI อยู่ที่ไหนเลยในระบบนี้ à¸à¸£à¸¸à¸“าà¸à¸¥à¸±à¸šà¹„ปเลือà¸à¹ƒà¸Šà¹‰à¸à¸²à¸£à¹à¸šà¹ˆà¸‡à¸žà¸²à¸£à¹Œà¸—ิชันด้วยตนเอง เพื่อติดตั้ง %1 The EFI system partition at %1 will be used for starting %2. พาร์ทิชันสำหรับระบบ EFI ที่ %1 จะถูà¸à¹ƒà¸Šà¹‰à¹€à¸žà¸·à¹ˆà¸­à¹€à¸£à¸´à¹ˆà¸¡à¸•้น %2 EFI system partition: พาร์ทิชันสำหรับระบบ EFI: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. No Swap Reuse Swap Swap (no Hibernate) Swap (with Hibernate) Swap to file <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. ClearMountsJob Clear mounts for partitioning operations on %1 ล้างจุดเชื่อมต่อสำหรับà¸à¸²à¸£à¹à¸šà¹ˆà¸‡à¸žà¸²à¸£à¹Œà¸—ิชันบน %1 Clearing mounts for partitioning operations on %1. à¸à¸³à¸¥à¸±à¸‡à¸¥à¹‰à¸²à¸‡à¸ˆà¸¸à¸”เชื่อมต่อสำหรับà¸à¸²à¸£à¸”ำเนินงานเà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸šà¸žà¸²à¸£à¹Œà¸—ิชันบน %1 Cleared all mounts for %1 ล้างจุดเชื่อมต่อทั้งหมดà¹à¸¥à¹‰à¸§à¸ªà¸³à¸«à¸£à¸±à¸š %1 ClearTempMountsJob Clear all temporary mounts. ล้างจุดเชื่อมต่อชั่วคราวทั้งหมด Clearing all temporary mounts. à¸à¸³à¸¥à¸±à¸‡à¸¥à¹‰à¸²à¸‡à¸ˆà¸¸à¸”เชื่อมต่อชั่วคราวทุà¸à¸ˆà¸¸à¸” Cannot get list of temporary mounts. ไม่สามารถดึงรายà¸à¸²à¸£à¸ˆà¸¸à¸”เชื่อมต่อชั่วคราวได้ Cleared all temporary mounts. จุดเชื่อมต่อชั่วคราวทั้งหมดถูà¸à¸¥à¹‰à¸²à¸‡à¹à¸¥à¹‰à¸§ CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition สร้างพาร์ทิชัน MiB Partition &Type: &T พาร์ทิชันà¹à¸¥à¸°à¸›à¸£à¸°à¹€à¸ à¸—: &Primary &P หลัภE&xtended &X ขยาย Fi&le System: LVM LV name Flags: Flags: &Mount Point: &M จุดเชื่อมต่อ: Si&ze: &Z ขนาด: En&crypt Logical โลจิคอล Primary หลัภGPT GPT Mountpoint already in use. Please select another one. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. The installer failed to create partition on disk '%1'. ตัวติดตั้งไม่สามารถสร้างพาร์ทิชันบนดิสà¸à¹Œ '%1' CreatePartitionTableDialog Create Partition Table สร้างตารางพาร์ทิชัน Creating a new partition table will delete all existing data on the disk. à¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¸•ารางพาร์ทิชันใหม่จะลบข้อมูลทั้งหมดบนดิสà¸à¹Œ What kind of partition table do you want to create? คุณต้องà¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¸•ารางพาร์ทิชันชนิดใด? Master Boot Record (MBR) Master Boot Record (MBR) GUID Partition Table (GPT) GUID Partition Table (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Creating new %1 partition table on %2. The installer failed to create a partition table on %1. ตัวติดตั้งไม่สามารถสร้างตารางพาร์ทิชันบน %1 CreateUserJob Create user %1 สร้างผู้ใช้ %1 Create user <strong>%1</strong>. Creating user %1. Sudoers dir is not writable. ไม่สามารถเขียนไดเรคทอรี Sudoers ได้ Cannot create sudoers file for writing. ไม่สามารถสร้างไฟล์ sudoers เพื่อเขียนได้ Cannot chmod sudoers file. ไม่สามารถ chmod ไฟล์ sudoers Cannot open groups file for reading. ไม่สามารถเปิดไฟล์ groups เพื่ออ่านได้ CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. Delete partition <strong>%1</strong>. Deleting partition %1. The installer failed to delete partition %1. ตัวติดตั้งไม่สามารถลบพาร์ทิชัน %1 DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. This device has a <strong>%1</strong> partition table. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Failed to open %1 DummyCppJob Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition à¹à¸à¹‰à¹„ขพาร์ทิชันที่มีอยู่เดิม Content: เนื้อหา: &Keep Format ฟอร์à¹à¸¡à¸— Warning: Formatting the partition will erase all existing data. คำเตือน: à¸à¸²à¸£à¸Ÿà¸­à¸£à¹Œà¹à¸¡à¸—พาร์ทิชันจะลบข้อมูลที่มีอยู่เดิมทั้งหมด &Mount Point: &M จุดเชื่อมต่อ: Si&ze: &Z ขนาด: MiB Fi&le System: Flags: Flags: Mountpoint already in use. Please select another one. EncryptWidget Form ฟอร์ม En&crypt system Passphrase Confirm passphrase Please enter the same passphrase in both boxes. FillGlobalStorageJob Set partition information ตั้งค่าข้อมูลพาร์ทิชัน Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Install boot loader on <strong>%1</strong>. Setting up mount points. FinishedPage Form ฟอร์ม <Restart checkbox tooltip> &Restart now &R เริ่มต้นใหม่ทันที <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>เสร็จสิ้น</h1><br/>%1 ติดตั้งบนคอมพิวเตอร์ของคุณเรียบร้อย<br/>คุณสามารถเริ่มทำงานเพื่อเข้าระบบใหม่ของคุณ หรือดำเนินà¸à¸²à¸£à¹ƒà¸Šà¹‰ %2 Live environment ต่อไป <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. FinishedViewStep Finish สิ้นสุด Setup Complete Installation Complete The setup of %1 is complete. The installation of %1 is complete. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatting partition %1 with file system %2. The installer failed to format partition %1 on disk '%2'. ตัวติดตั้งไม่สามารถฟอร์à¹à¸¡à¸—พาร์ทิชัน %1 บนดิสà¸à¹Œ '%2' GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source เชื่อมต่อปลั๊à¸à¹€à¸‚้าà¸à¸±à¸šà¹à¸«à¸¥à¹ˆà¸‡à¸ˆà¹ˆà¸²à¸¢à¹„ฟ The system is not plugged in to a power source. is connected to the Internet เชื่อมต่อà¸à¸±à¸šà¸­à¸´à¸™à¹€à¸•อร์เน็ต The system is not connected to the Internet. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Please install KDE Konsole and try again! Executing script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script KeyboardPage Set keyboard model to %1.<br/> ตั้งค่าโมเดลà¹à¸›à¹‰à¸™à¸žà¸´à¸¡à¸žà¹Œà¹€à¸›à¹‡à¸™ %1<br/> Set keyboard layout to %1/%2. ตั้งค่าà¹à¸šà¸šà¹à¸›à¹‰à¸™à¸žà¸´à¸¡à¸žà¹Œà¹€à¸›à¹‡à¸™ %1/%2 KeyboardViewStep Keyboard à¹à¸›à¹‰à¸™à¸žà¸´à¸¡à¸žà¹Œ LCLocaleDialog System locale setting à¸à¸²à¸£à¸•ั้งค่า locale ระบบ The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. &Cancel &C ยà¸à¹€à¸¥à¸´à¸ &OK LicensePage Form à¹à¸šà¸šà¸Ÿà¸­à¸£à¹Œà¸¡ <h1>License Agreement</h1> I accept the terms and conditions above. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> File: %1 Show the license text Open license agreement in browser. Hide license text LocalePage The system language will be set to %1. The numbers and dates locale will be set to %1. Region: ภูมิภาค: Zone: โซน: &Change... &C เปลี่ยนà¹à¸›à¸¥à¸‡... Set timezone to %1/%2.<br/> ตั้งโซนเวลาเป็น %1/%2<br/> LocaleViewStep Location ตำà¹à¸«à¸™à¹ˆà¸‡ LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Configuration Error No root mount point is set for MachineId. NetInstallPage Name ชื่อ Description Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Incorrect configuration) NetInstallViewStep Package selection Office software Office package Browser software Browser package Web browser Kernel Services Login Desktop Applications NotesQmlViewStep Notes OEMPage Ba&tch: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> OEMViewStep OEM Configuration Set the OEM Batch Identifier to <code>%1</code>. PWQ Password is too short Password is too long Password is too weak Memory allocation error when setting '%1' Memory allocation error The password is the same as the old one The password is a palindrome The password differs with case changes only The password is too similar to the old one The password contains the user name in some form The password contains words from the real name of the user in some form The password contains forbidden words in some form The password contains less than %1 digits The password contains too few digits The password contains less than %1 uppercase letters The password contains too few uppercase letters The password contains less than %1 lowercase letters The password contains too few lowercase letters The password contains less than %1 non-alphanumeric characters The password contains too few non-alphanumeric characters The password is shorter than %1 characters The password is too short The password is just rotated old one The password contains less than %1 character classes The password does not contain enough character classes The password contains more than %1 same characters consecutively The password contains too many same characters consecutively The password contains more than %1 characters of the same class consecutively The password contains too many characters of the same class consecutively The password contains monotonic sequence longer than %1 characters The password contains too long of a monotonic character sequence No password supplied Cannot obtain random numbers from the RNG device Password generation failed - required entropy too low for settings The password fails the dictionary check - %1 The password fails the dictionary check Unknown setting - %1 Unknown setting Bad integer value of setting - %1 Bad integer value Setting %1 is not of integer type Setting is not of integer type Setting %1 is not of string type Setting is not of string type Opening the configuration file failed The configuration file is malformed Fatal failure Unknown error Password is empty PackageChooserPage Form ฟอร์ม Product Name TextLabel Long Product Description Package Selection Please pick a product from the list. The selected product will be installed. PackageChooserViewStep Packages Page_Keyboard Form ฟอร์ม Keyboard Model: โมเดลà¹à¸›à¹‰à¸™à¸žà¸´à¸¡à¸žà¹Œ: Type here to test your keyboard พิมพ์ที่นี่เพื่อทดสอบà¹à¸›à¹‰à¸™à¸žà¸´à¸¡à¸žà¹Œà¸‚องคุณ Page_UserSetup Form ฟอร์ม What is your name? ชื่อของคุณคือ? What name do you want to use to log in? ชื่อที่คุณต้องà¸à¸²à¸£à¹ƒà¸Šà¹‰à¹ƒà¸™à¸à¸²à¸£à¸¥à¹‡à¸­à¸à¸­à¸´à¸™? Choose a password to keep your account safe. เลือà¸à¸£à¸«à¸±à¸ªà¸œà¹ˆà¸²à¸™à¹€à¸žà¸·à¹ˆà¸­à¸£à¸±à¸à¸©à¸²à¸šà¸±à¸à¸Šà¸µà¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¸‚องคุณให้ปลอดภัย <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>ใส่รหัสผ่านเดียวà¸à¸±à¸™à¸‹à¹‰à¸³ 2 ครั้ง เพื่อเป็นà¸à¸²à¸£à¸•รวจสอบข้อผิดพลาดจาà¸à¸à¸²à¸£à¸žà¸´à¸¡à¸žà¹Œ รหัสผ่านที่ดีจะต้องมีà¸à¸²à¸£à¸œà¸ªà¸¡à¸à¸±à¸™à¸£à¸°à¸«à¸§à¹ˆà¸²à¸‡ ตัวอัà¸à¸©à¸£à¸ à¸²à¸©à¸²à¸­à¸±à¸‡à¸à¸¤à¸© ตัวเลข à¹à¸¥à¸°à¸ªà¸±à¸à¸¥à¸±à¸à¸©à¸“์ ควรมีความยาวอย่างน้อย 8 ตัวอัà¸à¸‚ระ à¹à¸¥à¸°à¸„วรมีà¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¸£à¸«à¸±à¸ªà¸œà¹ˆà¸²à¸™à¹€à¸›à¹‡à¸™à¸›à¸£à¸°à¸ˆà¸³</small> What is the name of this computer? คอมพิวเตอร์เครื่องนี้ชื่อ? Your Full Name login <small>This name will be used if you make the computer visible to others on a network.</small> <small>ชื่อนี้จะถูà¸à¹ƒà¸Šà¹‰à¸–้าคุณตั้งค่าให้เครื่องอื่นๆ มองเห็นคอมพิวเตอร์ของคุณบนเครือข่าย</small> Computer Name Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Use the same password for the administrator account. Choose a password for the administrator account. เลือà¸à¸£à¸«à¸±à¸ªà¸œà¹ˆà¸²à¸™à¸ªà¸³à¸«à¸£à¸±à¸šà¸šà¸±à¸à¸Šà¸µà¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¸œà¸¹à¹‰à¸”ูà¹à¸¥à¸£à¸°à¸šà¸š <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>ใส่รหัสผ่านเดิมซ้ำ 2 ครั้ง เพื่อเป็นà¸à¸²à¸£à¸•รวจสอบข้อผิดพลาดที่เà¸à¸´à¸”จาà¸à¸à¸²à¸£à¸žà¸´à¸¡à¸žà¹Œ</small> PartitionLabelsView Root Home Boot EFI system Swap New partition for %1 New partition พาร์ทิชันใหม่ %1 %2 size[number] filesystem[name] PartitionModel Free Space พื้นที่ว่าง New partition พาร์ทิชันใหม่ Name ชื่อ File System ระบบไฟล์ Mount Point จุดเชื่อมต่อ Size ขนาด PartitionPage Form ฟอร์ม Storage de&vice: &Revert All Changes &R คืนค่าà¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¸—ั้งหมด New Partition &Table &T ตารางพาร์ทิชันใหม่ Cre&ate &Edit &E à¹à¸à¹‰à¹„ข &Delete &D ลบ New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group I&nstall boot loader on: Are you sure you want to create a new partition table on %1? คุณà¹à¸™à¹ˆà¹ƒà¸ˆà¸§à¹ˆà¸²à¸ˆà¸°à¸ªà¸£à¹‰à¸²à¸‡à¸•ารางพาร์ทิชันใหม่บน %1? Can not create new partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. PartitionViewStep Gathering system information... à¸à¸³à¸¥à¸±à¸‡à¸£à¸§à¸šà¸£à¸§à¸¡à¸‚้อมูลของระบบ... Partitions พาร์ทิชัน Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <strong>Replace</strong> a partition with %1. <strong>Manual</strong> partitioning. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Current: After: หลัง: No EFI system partition configured An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. EFI system partition flag not set An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form ฟอร์ม Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: External command crashed. Command <i>%1</i> crashed. External command failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Bad parameters for process job call. พารามิเตอร์ไม่ถูà¸à¸•้องสำหรับà¸à¸²à¸£à¹€à¸£à¸µà¸¢à¸à¸à¸²à¸£à¸—ำงาน External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Command <i>%1</i> finished with exit code %2. QObject Default Keyboard Model โมเดลà¹à¸›à¹‰à¸™à¸žà¸´à¸¡à¸žà¹Œà¸„่าเริ่มต้น Default ค่าเริ่มต้น unknown extended unformatted swap Unpartitioned space or unknown partition table (no mount point) Requirements checking for module <i>%1</i> is complete. %1 (%2) language[name] (country[name]) %1 (%2) No product No description provided. File not found Path <pre>%1</pre> must be an absolute path. Could not create new random file <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form ฟอร์ม Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. เลือà¸à¸—ี่ที่จะติดตั้ง %1<br/><font color="red">คำเตือน: </font>ตัวเลือà¸à¸™à¸µà¹‰à¸ˆà¸°à¸¥à¸šà¹„ฟล์ทั้งหมดบนพาร์ทิชันที่เลือภThe selected item does not appear to be a valid partition. ไอเทมที่เลือà¸à¹„ม่ใช่พาร์ทิชันที่ถูà¸à¸•้อง %1 cannot be installed on empty space. Please select an existing partition. ไม่สามารถติดตั้ง %1 บนพื้นที่ว่าง à¸à¸£à¸¸à¸“าเลือà¸à¸žà¸²à¸£à¹Œà¸—ิชันที่มี %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. ไม่สามารถติดตั้ง %1 บนพาร์ทิชัน extended à¸à¸£à¸¸à¸“าเลือà¸à¸žà¸²à¸£à¹Œà¸—ิชันหลัà¸à¸«à¸£à¸·à¸­à¸žà¸²à¸£à¹Œà¸—ิชันโลจิคัลที่มีอยู่ %1 cannot be installed on this partition. ไม่สามารถติดตั้ง %1 บนพาร์ทิชันนี้ Data partition (%1) พาร์ทิชันข้อมูล (%1) Unknown system partition (%1) พาร์ทิชันระบบที่ไม่รู้จัภ(%1) %1 system partition (%2) %1 พาร์ทิชันระบบ (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. The EFI system partition at %1 will be used for starting %2. พาร์ทิชันสำหรับระบบ EFI ที่ %1 จะถูà¸à¹ƒà¸Šà¹‰à¹€à¸žà¸·à¹ˆà¸­à¹€à¸£à¸´à¹ˆà¸¡à¸•้น %2 EFI system partition: พาร์ทิชันสำหรับระบบ EFI: ResizeFSJob Resize Filesystem Job Invalid configuration The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. เปลี่ยนขนาดพาร์ทิชัน %1 Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. ตัวติดตั้งไม่สามารถเปลี่ยนขนาดพาร์ทิชัน %1 บนดิสà¸à¹Œ '%2' ResizeVolumeGroupDialog Resize Volume Group ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: สำหรับผลลัพธ์ที่ดีขึ้น โปรดตรวจสอบให้à¹à¸™à¹ˆà¹ƒà¸ˆà¸§à¹ˆà¸²à¸„อมพิวเตอร์เครื่องนี้: System requirements ความต้องà¸à¸²à¸£à¸‚องระบบ ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> ขณะที่à¸à¸³à¸¥à¸±à¸‡à¸•ิดตั้ง ตัวติดตั้งฟ้องว่า คอมพิวเตอร์นี้มีความต้องà¸à¸²à¸£à¹„ม่เพียงพอที่จะติดตั้ง %1.<br/>ไม่สามารถทำà¸à¸²à¸£à¸•ิดตั้งต่อไปได้ <a href="#details">รายละเอียด...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. ขณะที่à¸à¸³à¸¥à¸±à¸‡à¸•ิดตั้ง ตัวติดตั้งฟ้องว่า คอมพิวเตอร์มีความต้องà¸à¸²à¸£à¹„ม่เพียงพอที่จะติดตั้ง %1<br/>ไม่สามารถทำà¸à¸²à¸£à¸•ิดตั้งต่อไปได้ à¹à¸¥à¸°à¸Ÿà¸µà¹€à¸ˆà¸­à¸£à¹Œà¸šà¸²à¸‡à¸­à¸¢à¹ˆà¸²à¸‡à¸ˆà¸°à¸–ูà¸à¸›à¸´à¸”ไว้ This program will ask you some questions and set up %2 on your computer. โปรà¹à¸à¸£à¸¡à¸™à¸µà¹‰à¸ˆà¸°à¸–ามคุณบางอย่าง เพื่อติดตั้ง %2 ไว้ในคอมพิวเตอร์ของคุณ ScanningDialog Scanning storage devices... Partitioning SetHostNameJob Set hostname %1 ตั้งค่าชื่อโฮสต์ %1 Set hostname <strong>%1</strong>. Setting hostname %1. Internal Error ข้อผิดพลาดภายใน Cannot write hostname to target system ไม่สามารถเขียนชื่อโฮสต์ไปที่ระบบเป้าหมาย SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 ตั้งค่าโมเดลà¹à¸›à¹‰à¸™à¸žà¸´à¸¡à¸žà¹Œà¹€à¸›à¹‡à¸™ %1 à¹à¸šà¸š %2-%3 Failed to write keyboard configuration for the virtual console. ไม่สามารถเขียนà¸à¸²à¸£à¸•ั้งค่าà¹à¸›à¹‰à¸™à¸žà¸´à¸¡à¸žà¹Œà¸ªà¸³à¸«à¸£à¸±à¸šà¸„อนโซลเสมือน Failed to write to %1 ไม่สามารถเขียนไปที่ %1 Failed to write keyboard configuration for X11. ไม่สามาถเขียนà¸à¸²à¸£à¸•ั้งค่าà¹à¸›à¹‰à¸™à¸žà¸´à¸¡à¸žà¹Œà¸ªà¸³à¸«à¸£à¸±à¸š X11 Failed to write keyboard configuration to existing /etc/default directory. SetPartFlagsJob Set flags on partition %1. Set flags on %1MiB %2 partition. Set flags on new partition. Clear flags on partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag new partition as <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. SetPasswordJob Set password for user %1 ตั้งรหัสผ่านสำหรับผู้ใช้ %1 Setting password for user %1. Bad destination system path. path ของระบบเป้าหมายไม่ถูà¸à¸•้อง rootMountPoint is %1 rootMountPoint คือ %1 Cannot disable root account. passwd terminated with error code %1. Cannot set password for user %1. ไม่สามารถตั้งค่ารหัสผ่านสำหรับผู้ใช้ %1 usermod terminated with error code %1. usermod จบด้วยโค้ดข้อผิดพลาด %1 SetTimezoneJob Set timezone to %1/%2 ตั้งโซนเวลาเป็น %1/%2 Cannot access selected timezone path. ไม่สามารถเข้าถึง path โซนเวลาที่เลือภBad path: %1 path ไม่ถูà¸à¸•้อง: %1 Cannot set timezone. ไม่สามารถตั้งค่าโซนเวลาได้ Link creation failed, target: %1; link name: %2 à¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¹‚ยงล้มเหลว เป้าหมาย: %1 ชื่อà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¹‚ยง: %2 Cannot set timezone, Cannot open /etc/timezone for writing ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) SummaryPage This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. SummaryViewStep Summary สาระสำคัภTrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingMachineNeonJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form ฟอร์ม Placeholder <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. TrackingViewStep Feedback UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> Your username is too long. ชื่อผู้ใช้ของคุณยาวเà¸à¸´à¸™à¹„ป Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Only letters, numbers, underscore and hyphen are allowed. Your hostname is too short. ชื่อโฮสต์ของคุณสั้นเà¸à¸´à¸™à¹„ป Your hostname is too long. ชื่อโฮสต์ของคุณยาวเà¸à¸´à¸™à¹„ป Your passwords do not match! รหัสผ่านของคุณไม่ตรงà¸à¸±à¸™! UsersViewStep Users ผู้ใช้ VariantModel Key Value ค่า VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB Total Size: Used Size: Total Sectors: Quantity of LVs: WelcomePage Form à¹à¸šà¸šà¸Ÿà¸­à¸£à¹Œà¸¡ Select application and system language Open donations website &Donate Open help and support website Open issues and bug-tracking website Open release notes website &Release notes &Known issues &Support &About &A เà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸š <h1>Welcome to the %1 installer.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Welcome to %1 setup.</h1> About %1 setup About %1 installer เà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸šà¸•ัวติดตั้ง %1 <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support WelcomeQmlViewStep Welcome ยินดีต้อนรับ WelcomeViewStep Welcome ยินดีต้อนรับ notesqml <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> About Support Known issues Release notes Donate calamares-3.2.20/lang/calamares_tr_TR.ts000066400000000000000000005534021362604102500200710ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. Bu sistemdeki<br> <strong>önyükleme arayüzü</strong> sadece eski x86 sistem ve <strong>BIOS</strong> destekler. <br>Modern sistemler genellikle <strong>EFI</strong> kullanır fakat önyükleme arayüzü uyumlu modda ise BIOS seçilebilir. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. Bu sistem, bir <strong>EFI</strong> önyükleme arayüzü ile baÅŸladı.<br><br>EFI ortamından baÅŸlangıcı yapılandırmak için, bu yükleyici <strong>EFI Sistem Bölümü</strong> üzerinde <strong>GRUB</strong> veya <strong>systemd-boot</strong> gibi bir önyükleyici oluÅŸturmalıdır. Bunu otomatik olarak yapabileceÄŸiniz gibi elle disk bölümleri oluÅŸturarak ta yapabilirsiniz. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. Bu sistem, bir <strong>BIOS</strong> önyükleme arayüzü ile baÅŸladı.<br><br>BIOS ortamında önyükleme için, yükleyici bölümün başında veya bölüm tablosu baÅŸlangıcına yakın <strong>Master Boot Record</strong> üzerine <strong>GRUB</strong> gibi bir önyükleyici yüklemeniz gerekir (önerilir). EÄŸer bu iÅŸlemin otomatik olarak yapılmasını istemez iseniz elle bölümleme yapabilirsiniz. BootLoaderModel Master Boot Record of %1 %1 Üzerine Önyükleyici Kur Boot Partition Önyükleyici Disk Bölümü System Partition Sistem Disk Bölümü Do not install a boot loader Bir önyükleyici kurmayın %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page BoÅŸ Sayfa Calamares::DebugWindow Form Biçim GlobalStorage KüreselDepo JobQueue İşKuyruÄŸu Modules Eklentiler Type: Tipi: none hiçbiri Interface: Arayüz: Tools Araçlar Reload Stylesheet Stil Sayfasını Yeniden Yükle Widget Tree Gereç AÄŸacı Debug information Hata ayıklama bilgisi Calamares::ExecutionViewStep Set up Kur Install Sistem Kuruluyor Calamares::FailJob Job failed (%1) İş hatası (%1) Programmed job failure was explicitly requested. Programlanmış iÅŸ arızası açıkça istendi. Calamares::JobThread Done Sistem kurulumu tamamlandı, kurulum aracından çıkabilirsiniz. Calamares::NamedJob Example job (%1) Örnek İş (%1) Calamares::ProcessJob Run command '%1' in target system. Hedef sistemde '%1' komutunu çalıştırın. Run command '%1'. '%1' komutunu çalıştırın. Running command %1 %2 %1 Komutu çalışıyor %2 Calamares::PythonJob Running %1 operation. %1 iÅŸlemleri yapılıyor. Bad working directory path Dizin yolu kötü çalışıyor Working directory %1 for python job %2 is not readable. %2 python iÅŸleri için %1 dizinleme çalışırken okunamadı. Bad main script file Sorunlu betik dosyası Main script file %1 for python job %2 is not readable. %2 python iÅŸleri için %1 sorunlu betik okunamadı. Boost.Python error in job "%1". Boost.Python iÅŸ hatası "%1". Calamares::QmlViewStep Loading ... Yükleniyor ... QML Step <i>%1</i>. QML Adımı <i>%1</i>. Loading failed. Yükleme baÅŸarısız. Calamares::RequirementsChecker Waiting for %n module(s). %n modülü bekleniyor. %n modül(leri) bekleniyor. (%n second(s)) (%n saniye(ler)) (%n saniye) System-requirements checking is complete. Sistem gereksinimleri kontrolü tamamlandı. Calamares::ViewManager &Back &Geri &Next &Sonraki &Cancel &Vazgeç Cancel setup without changing the system. Sistemi deÄŸiÅŸtirmeden kurulumu iptal edin. Cancel installation without changing the system. Sistemi deÄŸiÅŸtirmeden kurulumu iptal edin. Setup Failed Kurulum BaÅŸarısız Would you like to paste the install log to the web? Yükleme günlüğünü web'e yapıştırmak ister misiniz? Install Log Paste URL Günlük Yapıştırma URL'sini Yükle The upload was unsuccessful. No web-paste was done. Yükleme baÅŸarısız oldu. Web yapıştırması yapılmadı. Calamares Initialization Failed Calamares BaÅŸlatılamadı %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. %1 yüklenemedi. Calamares yapılandırılmış modüllerin bazılarını yükleyemedi. Bu, Calamares'in kullandığınız dağıtıma uyarlamasından kaynaklanan bir sorundur. <br/>The following modules could not be loaded: <br/>AÅŸağıdaki modüller yüklenemedi: Continue with installation? Kuruluma devam edilsin mi? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> %1 sistem kurulum uygulaması,%2 ayarlamak için diskinizde deÄŸiÅŸiklik yapmak üzere. <br/><strong>Bu deÄŸiÅŸiklikleri geri alamayacaksınız.</strong> &Set up now &Åžimdi kur &Set up &Kur &Install &Yükle Setup is complete. Close the setup program. Kurulum tamamlandı. Kurulum programını kapatın. Cancel setup? Kurulum iptal edilsin mi? Cancel installation? Yüklemeyi iptal et? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Mevcut kurulum iÅŸlemini gerçekten iptal etmek istiyor musunuz? Kurulum uygulaması sonlandırılacak ve tüm deÄŸiÅŸiklikler kaybedilecek. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Yükleme iÅŸlemini gerçekten iptal etmek istiyor musunuz? Yükleyiciden çıkınca tüm deÄŸiÅŸiklikler kaybedilecek. &Yes &Evet &No &Hayır &Close &Kapat Continue with setup? Kuruluma devam et? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> %1 sistem yükleyici %2 yüklemek için diskinizde deÄŸiÅŸiklik yapacak.<br/><strong>Bu deÄŸiÅŸiklikleri geri almak mümkün olmayacak.</strong> &Install now &Åžimdi yükle Go &back Geri &git &Done &Tamam The installation is complete. Close the installer. Yükleme iÅŸi tamamlandı. Sistem yükleyiciyi kapatın. Error Hata Installation Failed Kurulum BaÅŸarısız CalamaresPython::Helper Unknown exception type Bilinmeyen Özel Durum Tipi unparseable Python error Python hata ayıklaması unparseable Python traceback Python geri çekme ayıklaması Unfetchable Python error. Okunamayan Python hatası. CalamaresUtils Install log posted to: %1 Gönderilen log yüklemesi: %1 CalamaresWindow %1 Setup Program %1 Kurulum Uygulaması %1 Installer %1 Yükleniyor Show debug information Hata ayıklama bilgisini göster CheckerContainer Gathering system information... Sistem bilgileri toplanıyor... ChoicePage Form Biçim After: Sonra: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Elle bölümleme</strong><br/>Bölümler oluÅŸturabilir ve boyutlandırabilirsiniz. Boot loader location: Önyükleyici konumu: Select storage de&vice: Depolama ay&gıtı seç: Current: Geçerli: Reuse %1 as home partition for %2. %2 ev bölümü olarak %1 yeniden kullanılsın. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Küçültmek için bir bölüm seçip alttaki çubuÄŸu sürükleyerek boyutlandır</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1, %2MB'a küçülecek ve %4 için yeni bir %3MB disk bölümü oluÅŸturulacak. <strong>Select a partition to install on</strong> <strong>YükleyeceÄŸin disk bölümünü seç</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Bu sistemde EFI disk bölümü bulunamadı. Lütfen geri dönün ve %1 kurmak için geliÅŸmiÅŸ kurulum seçeneÄŸini kullanın. The EFI system partition at %1 will be used for starting %2. %1 EFI sistem bölümü %2 baÅŸlatmak için kullanılacaktır. EFI system partition: EFI sistem bölümü: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Bu depolama aygıtı üzerinde yüklü herhangi bir iÅŸletim sistemi tespit etmedik. Ne yapmak istersiniz?<br/>Yaptığınız deÄŸiÅŸiklikler disk bölümü üzerine uygulanmadan önce gözden geçirme fırsatınız olacak. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Diski sil</strong><br/>Seçili depolama bölümündeki mevcut veriler ÅŸu anda <font color="red">silinecektir.</font> This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Bu depolama aygıtı üzerinde %1 vardır. Ne yapmak istersiniz?<br/>Yaptığınız deÄŸiÅŸiklikler disk bölümü üzerine uygulanmadan önce gözden geçirme fırsatınız olacak. No Swap Takas alanı yok Reuse Swap Yeniden takas alanı Swap (no Hibernate) Takas Alanı (uyku modu yok) Swap (with Hibernate) Takas Alanı (uyku moduyla) Swap to file Takas alanı dosyası <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Yanına yükleyin</strong><br/>Sistem yükleyici disk bölümünü küçülterek %1 için yer açacak. <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Varolan bir disk bölümüne kur</strong><br/>Varolan bir disk bölümü üzerine %1 kur. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Bu depolama aygıtı üzerinde bir iÅŸletim sistemi yüklü. Ne yapmak istersiniz? <br/>Yaptığınız deÄŸiÅŸiklikler disk bölümü üzerine uygulanmadan önce gözden geçirme fırsatınız olacak. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Bu depolama aygıtı üzerinde birden fazla iÅŸletim sistemi var. Ne yapmak istersiniz? <br/>Yaptığınız deÄŸiÅŸiklikler disk bölümü üzerine uygulanmadan önce gözden geçirme fırsatınız olacak. ClearMountsJob Clear mounts for partitioning operations on %1 %1 bölümleme iÅŸlemleri için sorunsuz baÄŸla Clearing mounts for partitioning operations on %1. %1 bölümleme iÅŸlemleri için baÄŸlama noktaları temizleniyor. Cleared all mounts for %1 %1 için tüm baÄŸlı bölümler ayrıldı ClearTempMountsJob Clear all temporary mounts. Tüm geçici baÄŸları temizleyin. Clearing all temporary mounts. Geçici olarak baÄŸlananlar temizleniyor. Cannot get list of temporary mounts. Geçici baÄŸların listesi alınamadı. Cleared all temporary mounts. Tüm geçici baÄŸlar temizlendi. CommandList Could not run command. Komut çalıştırılamadı. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. Komut, ana bilgisayar ortamında çalışır ve kök yolunu bilmesi gerekir, ancak kökMontajNoktası tanımlanmamıştır. The command needs to know the user's name, but no username is defined. Komutun kullanıcının adını bilmesi gerekir, ancak kullanıcı adı tanımlanmamıştır. ContextualProcessJob Contextual Processes Job BaÄŸlamsal Süreç İşleri CreatePartitionDialog Create a Partition Yeni Bölüm OluÅŸtur MiB MB Partition &Type: Bölüm &Tip: &Primary &Birincil E&xtended U&zatılmış Fi&le System: D&osya Sistemi: LVM LV name LVM LV adı Flags: Bayraklar: &Mount Point: &BaÄŸlama Noktası: Si&ze: Bo&yut: En&crypt Åžif&rele Logical Mantıksal Primary Birincil GPT GPT Mountpoint already in use. Please select another one. BaÄŸlama noktası zaten kullanımda. Lütfen diÄŸerini seçiniz. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. %4 üzerinde (%3) ile %1 dosya sisteminde %2MB disk bölümü oluÅŸtur. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. <strong>%4</strong> üzerinde (%3) ile <strong>%1</strong> dosya sisteminde <strong>%2MB</strong> disk bölümü oluÅŸtur. Creating new %1 partition on %2. %2 üzerinde %1 yeni disk bölümü oluÅŸtur. The installer failed to create partition on disk '%1'. Yükleyici '%1' diski üzerinde yeni bölüm oluÅŸturamadı. CreatePartitionTableDialog Create Partition Table Bölümleme Tablosu OluÅŸtur Creating a new partition table will delete all existing data on the disk. Yeni bir bölüm tablosu oluÅŸturmak disk üzerindeki tüm verileri silecektir. What kind of partition table do you want to create? Ne tür bölüm tablosu oluÅŸturmak istiyorsunuz? Master Boot Record (MBR) Önyükleme Bölümü (MBR) GUID Partition Table (GPT) GUID Bölüm Tablosu (GPT) CreatePartitionTableJob Create new %1 partition table on %2. %2 üzerinde %1 yeni disk tablosu oluÅŸtur. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). <strong>%2</strong> (%3) üzerinde <strong>%1</strong> yeni disk tablosu oluÅŸtur. Creating new %1 partition table on %2. %2 üzerinde %1 yeni disk tablosu oluÅŸtur. The installer failed to create a partition table on %1. Yükleyici %1 üzerinde yeni bir bölüm tablosu oluÅŸturamadı. CreateUserJob Create user %1 %1 Kullanıcısı oluÅŸturuluyor... Create user <strong>%1</strong>. <strong>%1</strong> kullanıcı oluÅŸtur. Creating user %1. %1 Kullanıcısı oluÅŸturuluyor... Sudoers dir is not writable. Sudoers dosyası yazılabilir deÄŸil. Cannot create sudoers file for writing. sudoers dosyası oluÅŸturulamadı ve yazılamadı. Cannot chmod sudoers file. Sudoers dosya izinleri ayarlanamadı. Cannot open groups file for reading. groups dosyası okunamadı. CreateVolumeGroupDialog Create Volume Group Birim Grubu OluÅŸtur CreateVolumeGroupJob Create new volume group named %1. %1 adında yeni birim grubu oluÅŸturun. Create new volume group named <strong>%1</strong>. <strong>%1</strong>adlı yeni birim grubu oluÅŸtur Creating new volume group named %1. %1 adlı yeni birim grubu oluÅŸturuluyor. The installer failed to create a volume group named '%1'. Yükleyici, '%1' adında bir birim grubu oluÅŸturamadı. DeactivateVolumeGroupJob Deactivate volume group named %1. %1 adlı birim grubunu devre dışı bırakın. Deactivate volume group named <strong>%1</strong>. <strong>%1</strong> adlı birim grubunu devre dışı bırakın. The installer failed to deactivate a volume group named %1. Yükleyici, %1 adında bir birim grubunu devre dışı bırakamadı. DeletePartitionJob Delete partition %1. %1 disk bölümünü sil. Delete partition <strong>%1</strong>. <strong>%1</strong> disk bölümünü sil. Deleting partition %1. %1 disk bölümü siliniyor. The installer failed to delete partition %1. Yükleyici %1 bölümünü silemedi. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. Seçili depolama aygıtında bir <strong>bölümleme tablosu</strong> oluÅŸtur.<br><br>Bölümleme tablosu oluÅŸturmanın tek yolu aygıt üzerindeki bölümleri silmek, verileri yoketmek ve yeni bölümleme tablosu oluÅŸturmaktır.<br>Sistem yükleyici aksi bir seçeneÄŸe baÅŸvurmaz iseniz geçerli bölümlemeyi koruyacaktır.<br>Emin deÄŸilseniz, modern sistemler için GPT tercih edebilirsiniz. This device has a <strong>%1</strong> partition table. Bu aygıt bir <strong>%1</strong> bölümleme tablosuna sahip. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. Bu bir <strong>döngüsel</strong> aygıttır.<br><br>Bu bir pseudo-device aygıt olup disk bölümlemesi yoktur ve dosyalara eriÅŸim saÄŸlayan blok bir aygıttır. Kurulum genelde sadece bir tek dosya sistemini içerir. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. Sistem yükleyici seçili depolama aygıtında bir bölümleme tablosu tespit edemedi.<br><br>Aygıt üzerinde bir disk bölümleme tablosu hiç oluÅŸturulmamış ya da disk yapısı bilinmeyen bir tiptedir.<br>Sistem yükleyiciyi kullanarak elle ya da otomatik olarak bir disk bölümü tablosu oluÅŸturabilirsiniz. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Bu bölümleme tablosu modern sistemlerdeki <strong>EFI</strong> önyükleme arayüzünü baÅŸlatmak için önerilir. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. <br><br>Bu bölümleme tablosu <strong>BIOS</strong>önyükleme arayüzü kullanan eski sistemlerde tercih edilir. Birçok durumda GPT tavsiye edilmektedir.<br><br><strong>Uyarı:</strong> MBR bölüm tablosu eski tip MS-DOS biçimi için standarttır.<br>Sadece 4 <em>birincil</em> birim oluÅŸturulabilir ve 4 ten fazla bölüm için <em>uzatılmış</em> bölümler oluÅŸturulmalıdır, böylece daha çok <em>mantıksal</em> bölüm oluÅŸturulabilir. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1 - (%2) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 %1 aygıtına Dracut için LUKS yapılandırmasını yaz Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Dracut için LUKS yapılandırma iÅŸlemi atlanıyor: "/" diski ÅŸifrelenemedi Failed to open %1 %1 Açılamadı DummyCppJob Dummy C++ Job Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Mevcut Bölümü Düzenle Content: İçerik: &Keep &Tut Format Biçimle Warning: Formatting the partition will erase all existing data. Uyarı: Biçimlenen bölümdeki tüm veriler silinecek. &Mount Point: &BaÄŸlama Noktası: Si&ze: Bo&yut: MiB MB Fi&le System: D&osya Sistemi: Flags: Bayraklar: Mountpoint already in use. Please select another one. BaÄŸlama noktası zaten kullanımda. Lütfen diÄŸerini seçiniz. EncryptWidget Form Biçim En&crypt system Sistemi Åžif&rele Passphrase Parola Confirm passphrase Parolayı doÄŸrula Please enter the same passphrase in both boxes. Her iki kutuya da aynı parolayı giriniz. FillGlobalStorageJob Set partition information Bölüm bilgilendirmesini ayarla Install %1 on <strong>new</strong> %2 system partition. %2 <strong>yeni</strong> sistem diskine %1 yükle. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. %2 <strong>yeni</strong> disk bölümünü <strong>%1</strong> ile ayarlayıp baÄŸla. Install %2 on %3 system partition <strong>%1</strong>. %3 <strong>%1</strong> sistem diskine %2 yükle. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. %3 diskine<strong>%1</strong> ile <strong>%2</strong> baÄŸlama noktası ayarla. Install boot loader on <strong>%1</strong>. <strong>%1</strong> üzerine sistem ön yükleyiciyi kur. Setting up mount points. BaÄŸlama noktalarını ayarla. FinishedPage Form Biçim <Restart checkbox tooltip> <Restart checkbox tooltip> &Restart now &Åžimdi yeniden baÅŸlat <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>Kurulum Tamamlandı.</h1><br/>%1 bilgisayarınıza kuruldu.<br/>Åžimdi yeni kurduÄŸunuz iÅŸletim sistemini kullanabilirsiniz. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <html><head/><body><p>Bu kutucuk iÅŸaretlenerek <span style="font-style:italic;">Tamam</span> butonu tıklandığında ya da kurulum uygulaması kapatıldığında bilgisayarınız yeniden baÅŸlatılacaktır.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>Tüm iÅŸlem tamamlandı.</h1><br/>%1 bilgisayarınıza yüklendi<br/>Yeni kurduÄŸunuz sistemi kullanmak için yeniden baÅŸlatabilir veya %2 Çalışan sistem ile devam edebilirsiniz. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <html><head/><body><p>Bu kutucuk iÅŸaretlenerek <span style="font-style:italic;">Tamam</span> butonu tıklandığında ya da sistem yükleyici kapatıldığında bilgisayarınız yeniden baÅŸlatılacaktır.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Kurulum BaÅŸarısız</h1><br/>%1 bilgisayarınıza kurulamadı.<br/>Hata mesajı: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Yükleme BaÅŸarısız</h1><br/>%1 bilgisayarınıza yüklenemedi.<br/>Hata mesajı çıktısı: %2. FinishedViewStep Finish Kurulum Tamam Setup Complete Kurulum Tamanlandı Installation Complete Kurulum Tamamlandı The setup of %1 is complete. %1 kurulumu tamamlandı. The installation of %1 is complete. Kurulum %1 oranında tamamlandı. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. %1 disk bölümü biçimle (dosya sistemi: %2 boyut: %3) %4 üzerinde. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. <strong>%1</strong> diskine <strong>%2</strong> dosya sistemi ile <strong>%3MB</strong> disk bölümü oluÅŸtur. Formatting partition %1 with file system %2. %1 disk bölümü %2 dosya sistemi ile biçimlendiriliyor. The installer failed to format partition %1 on disk '%2'. Yükleyici %1 bölümünü '%2' diski üzerinde biçimlendiremedi. GeneralRequirements has at least %1 GiB available drive space En az %1 GB disk sürücü alanı var There is not enough drive space. At least %1 GiB is required. Yeterli disk sürücü alanı mevcut deÄŸil. En az %1 GB disk alanı gereklidir. has at least %1 GiB working memory En az %1 GB bellek var The system does not have enough working memory. At least %1 GiB is required. Yeterli ram bellek gereksinimi karşılanamıyor. En az %1 GB ram bellek gereklidir. is plugged in to a power source Bir güç kaynağına takılı olduÄŸundan... The system is not plugged in to a power source. Sistem güç kaynağına baÄŸlı deÄŸil. is connected to the Internet İnternete baÄŸlı olduÄŸundan... The system is not connected to the Internet. Sistem internete baÄŸlı deÄŸil. is running the installer as an administrator (root) yükleyiciyi yönetici (kök) olarak çalıştırıyor The setup program is not running with administrator rights. Kurulum uygulaması yönetici haklarıyla çalışmıyor. The installer is not running with administrator rights. Sistem yükleyici yönetici haklarına sahip olmadan çalışmıyor. has a screen large enough to show the whole installer yükleyicinin tamamını gösterecek kadar büyük bir ekrana sahip The screen is too small to display the setup program. Kurulum uygulamasını görüntülemek için ekran çok küçük. The screen is too small to display the installer. Ekran, sistem yükleyiciyi görüntülemek için çok küçük. HostInfoJob Collecting information about your machine. Makineniz hakkında bilgi toplama. IDJob OEM Batch Identifier OEM Toplu Tanımlayıcı Could not create directories <code>%1</code>. <code>%1</code> dizinleri oluÅŸturulamadı. Could not open file <code>%1</code>. <code>%1</code> dosyası açılamadı. Could not write to file <code>%1</code>. <code>%1</code> dosyasına yazılamadı. InitcpioJob Creating initramfs with mkinitcpio. Mkinitcpio ile initramfs oluÅŸturuluyor. InitramfsJob Creating initramfs. Initramfs oluÅŸturuluyor. InteractiveTerminalPage Konsole not installed Konsole uygulaması yüklü deÄŸil Please install KDE Konsole and try again! Lütfen KDE Konsole yükle ve tekrar dene! Executing script: &nbsp;<code>%1</code> Komut durumu: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script Betik KeyboardPage Set keyboard model to %1.<br/> %1 Klavye düzeni olarak seçildi.<br/> Set keyboard layout to %1/%2. Alt klavye türevi olarak %1/%2 seçildi. KeyboardViewStep Keyboard Klavye Düzeni LCLocaleDialog System locale setting Sistem yerel ayarları The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. Sistem yerel ayarı, bazı uçbirim, kullanıcı ayarlamaları ve baÅŸkaca dil seçeneklerini belirler ve etkiler. <br/>Varsayılan geçerli ayarlar <strong>%1</strong>. &Cancel &Vazgeç &OK &TAMAM LicensePage Form Form <h1>License Agreement</h1> <h1>Lisans AnlaÅŸması</h1> I accept the terms and conditions above. Yukarıdaki ÅŸartları ve koÅŸulları kabul ediyorum. Please review the End User License Agreements (EULAs). Lütfen Son Kullanıcı Lisans SözleÅŸmelerini (EULA) inceleyin. This setup procedure will install proprietary software that is subject to licensing terms. Bu kurulum prosedürü, lisanslama koÅŸullarına tabi olan tescilli yazılımı kuracaktır. If you do not agree with the terms, the setup procedure cannot continue. KoÅŸulları kabul etmiyorsanız kurulum prosedürü devam edemez. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Bu kurulum prosedürü, ek özellikler saÄŸlamak ve kullanıcı deneyimini geliÅŸtirmek için lisans koÅŸullarına tabi olan özel yazılımlar yükleyebilir. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. KoÅŸulları kabul etmiyorsanız, tescilli yazılım yüklenmeyecek ve bunun yerine açık kaynak alternatifleri kullanılacaktır. LicenseViewStep License Lisans LicenseWidget URL: %1 URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 sürücü</strong><br/>by %2 <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 grafik sürücü</strong><br/><font color="Grey">by %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 tarayıcı eklentisi</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 kodek</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 paketi</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> File: %1 Dosya: %1 Show the license text Lisans metnini göster Open license agreement in browser. Tarayıcıda açık lisans sözleÅŸmesi. Hide license text Lisans metnini gizle LocalePage The system language will be set to %1. Sistem dili %1 olarak ayarlanacak. The numbers and dates locale will be set to %1. Sayılar ve günler için sistem yereli %1 olarak ayarlanacak. Region: Bölge: Zone: Åžehir: &Change... &DeÄŸiÅŸtir... Set timezone to %1/%2.<br/> Bölge ve zaman dilimi %1/%2 olarak ayarlandı.<br/> LocaleViewStep Location Sistem Yereli LuksBootKeyFileJob Configuring LUKS key file. LUKS anahtar dosyası yapılandırılıyor. No partitions are defined. Hiçbir disk bölümü tanımlanmadı. Encrypted rootfs setup error ÅžifrelenmiÅŸ rootfs kurulum hatası Root partition %1 is LUKS but no passphrase has been set. %1 kök disk bölümü LUKS olacak fakat bunun için parola belirlenmedi. Could not create LUKS key file for root partition %1. %1 kök disk bölümü için LUKS anahtar dosyası oluÅŸturulamadı. Could not configure LUKS key file on partition %1. %1 disk bölümü LUKS anahtar dosyası yapılandırılamadı. MachineIdJob Generate machine-id. Makine kimliÄŸi oluÅŸtur. Configuration Error Yapılandırma Hatası No root mount point is set for MachineId. MachineId için kök baÄŸlama noktası ayarlanmadı. NetInstallPage Name İsim Description Açıklama Network Installation. (Disabled: Unable to fetch package lists, check your network connection) AÄŸ Üzerinden Kurulum. (Devre Dışı: Paket listeleri alınamıyor, aÄŸ baÄŸlantısını kontrol ediniz) Network Installation. (Disabled: Received invalid groups data) AÄŸ Kurulum. (Devre dışı: Geçersiz grup verileri alındı) Network Installation. (Disabled: Incorrect configuration) AÄŸ Kurulumu. (Devre dışı: Yanlış yapılandırma) NetInstallViewStep Package selection Paket seçimi Office software Ofis yazılımı Office package Ofis paketi Browser software Tarayıcı yazılımı Browser package Tarayıcı paketi Web browser İnternet tarayıcısı Kernel Çekirdek Services Servisler Login Oturum aç Desktop Masaüstü Applications Uygulamalar NotesQmlViewStep Notes Notlar OEMPage Ba&tch: Top&lu: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>Buraya toplu tanımlayıcı girin. Bu hedef sistemde depolanır.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>OEM Yapılandırma</h1><p>Calamares hedef sistemi yapılandırırken OEM ayarlarını kullanacaktır.</p></body></html> OEMViewStep OEM Configuration OEM Yapılandırma Set the OEM Batch Identifier to <code>%1</code>. OEM Toplu Tanımlayıcıyı <code>%1</code>'e Ayarlayın. PWQ Password is too short Åžifre çok kısa Password is too long Åžifre çok uzun Password is too weak Åžifre çok zayıf Memory allocation error when setting '%1' '%1' ayarlanırken bellek ayırma hatası Memory allocation error Bellek ayırma hatası The password is the same as the old one Åžifre eski ÅŸifreyle aynı The password is a palindrome Parola eskilerden birinin ters okunuÅŸu olabilir The password differs with case changes only Parola sadece vaka deÄŸiÅŸiklikleri ile farklılık gösterir The password is too similar to the old one Parola eski parolaya çok benzer The password contains the user name in some form Parola kullanıcı adını bir biçimde içeriyor The password contains words from the real name of the user in some form Åžifre, kullanıcının gerçek adına ait kelimeleri bazı biçimde içerir The password contains forbidden words in some form Åžifre, bazı biçimde yasak kelimeler içeriyor The password contains less than %1 digits Åžifre %1 den az hane içeriyor The password contains too few digits Parola çok az basamak içeriyor The password contains less than %1 uppercase letters Parola %1 den az büyük harf içeriyor The password contains too few uppercase letters Parola çok az harf içermektedir The password contains less than %1 lowercase letters Parola %1 den daha küçük harf içermektedir The password contains too few lowercase letters Parola çok az küçük harf içeriyor The password contains less than %1 non-alphanumeric characters Åžifre %1 den az alfasayısal olmayan karakter içeriyor The password contains too few non-alphanumeric characters Parola çok az sayıda alfasayısal olmayan karakter içeriyor The password is shorter than %1 characters Parola %1 karakterden kısa The password is too short Parola çok kısa The password is just rotated old one Åžifre önceden kullanıldı The password contains less than %1 character classes Parola %1 den az karakter sınıfı içeriyor The password does not contain enough character classes Parola yeterli sayıda karakter sınıfı içermiyor The password contains more than %1 same characters consecutively Åžifre, %1 den fazla aynı karakteri ardışık olarak içeriyor The password contains too many same characters consecutively Parola ardışık olarak aynı sayıda çok karakter içeriyor The password contains more than %1 characters of the same class consecutively Parola, aynı sınıftan %1 den fazla karakter ardışık olarak içeriyor The password contains too many characters of the same class consecutively Parola aynı sınıfta çok fazla karakter içeriyor The password contains monotonic sequence longer than %1 characters Åžifre, %1 karakterden daha uzun monoton dizilim içeriyor The password contains too long of a monotonic character sequence Parola çok uzun monoton karakter dizisi içeriyor No password supplied Parola saÄŸlanmadı Cannot obtain random numbers from the RNG device RNG cihazından rastgele sayılar elde edemiyor Password generation failed - required entropy too low for settings Åžifre üretimi baÅŸarısız oldu - ayarlar için entropi çok düşük gerekli The password fails the dictionary check - %1 Parola, sözlüğü kontrolü baÅŸarısız - %1 The password fails the dictionary check Parola, sözlük onayı baÅŸarısız Unknown setting - %1 Bilinmeyen ayar - %1 Unknown setting Bilinmeyen ayar Bad integer value of setting - %1 Ayarın bozuk tam sayı deÄŸeri - %1 Bad integer value Yanlış tamsayı deÄŸeri Setting %1 is not of integer type %1 ayarı tamsayı tipi deÄŸil Setting is not of integer type Ayar tamsayı tipi deÄŸil Setting %1 is not of string type Ayar %1, dize tipi deÄŸil Setting is not of string type Ayar, dize tipi deÄŸil Opening the configuration file failed Yapılandırma dosyasını açma baÅŸarısız oldu The configuration file is malformed Yapılandırma dosyası hatalı biçimlendirildi Fatal failure Ölümcül arıza Unknown error Bilinmeyen hata Password is empty Åžifre boÅŸ PackageChooserPage Form Biçim Product Name Ürün adı TextLabel MetinEtiketi Long Product Description Uzun ürün açıklaması Package Selection Paket seçimi Please pick a product from the list. The selected product will be installed. Lütfen listeden bir ürün seçin. Seçilen ürün yüklenecek. PackageChooserViewStep Packages Paketler Page_Keyboard Form Form Keyboard Model: Klavye Modeli: Type here to test your keyboard Klavye seçiminizi burada test edebilirsiniz Page_UserSetup Form Form What is your name? Adınız nedir? What name do you want to use to log in? GiriÅŸ için hangi adı kullanmak istersiniz? Choose a password to keep your account safe. Hesabınızın güvenliÄŸini saÄŸlamak için bir parola belirleyiniz. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>Yazım hatası ihtimaline karşı parolanızı iki kere yazınız. Güçlü bir parola en az sekiz karakter olmalı ve rakamları, harfleri, karakterleri içermelidir, düzenli aralıklarla deÄŸiÅŸtirilmelidir.</small> What is the name of this computer? Bu bilgisayarın adı nedir? Your Full Name Tam Adınız login oturum aç <small>This name will be used if you make the computer visible to others on a network.</small> <small>Bilgisayarınız herhangi bir aÄŸ üzerinde görünür ise bu adı kullanacak.</small> Computer Name Bilgisayar Adı Password Åžifre Repeat Password Åžifreyi Tekrarla When this box is checked, password-strength checking is done and you will not be able to use a weak password. Bu kutu iÅŸaretlendiÄŸinde parola gücü kontrolü yapılır ve zayıf bir parola kullanamazsınız. Require strong passwords. Güçlü ÅŸifre gerekir. Log in automatically without asking for the password. Åžifre sormadan otomatik olarak giriÅŸ yap. Use the same password for the administrator account. Yönetici ile kullanıcı aynı ÅŸifreyi kullansın. Choose a password for the administrator account. Yönetici-Root hesabı için bir parola belirle. <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Yazım hatası ihtimaline karşı aynı ÅŸifreyi tekrar giriniz.</small> PartitionLabelsView Root Root Home Home Boot Boot EFI system EFI sistem Swap Swap-Takas New partition for %1 %1 için yeni disk bölümü New partition Yeni disk bölümü %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space BoÅŸ Alan New partition Yeni bölüm Name İsim File System Dosya Sistemi Mount Point BaÄŸlama Noktası Size Boyut PartitionPage Form Form Storage de&vice: Depolama ay&gıtı: &Revert All Changes &Tüm DeÄŸiÅŸiklikleri Geri Al New Partition &Table Yeni Bölüm &Tablo Cre&ate OluÅŸ&tur &Edit &Düzenle &Delete &Sil New Volume Group Yeni Birim Grubu Resize Volume Group Birim Grubunu Yeniden Boyutlandır Deactivate Volume Group Birim Grubunu Devre Dışı Bırak Remove Volume Group Birim Grubunu Kaldır I&nstall boot loader on: Ö&nyükleyiciyi ÅŸuraya kurun: Are you sure you want to create a new partition table on %1? %1 tablosunda yeni bölüm oluÅŸturmaya devam etmek istiyor musunuz? Can not create new partition Yeni disk bölümü oluÅŸturulamıyor The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. %1 üzerindeki disk bölümü tablosu zaten %2 birincil disk bölümüne sahip ve artık eklenemiyor. Lütfen bir birincil disk bölümü kaldırın ve bunun yerine uzatılmış bir disk bölümü ekleyin. PartitionViewStep Gathering system information... Sistem bilgileri toplanıyor... Partitions Disk Bölümleme Install %1 <strong>alongside</strong> another operating system. DiÄŸer iÅŸletim sisteminin <strong>yanına</strong> %1 yükle. <strong>Erase</strong> disk and install %1. Diski <strong>sil</strong> ve %1 yükle. <strong>Replace</strong> a partition with %1. %1 ile disk bölümünün üzerine <strong>yaz</strong>. <strong>Manual</strong> partitioning. <strong>Manuel</strong> bölümleme. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). <strong>%2</strong> (%3) diskindeki diÄŸer iÅŸletim sisteminin <strong>yanına</strong> %1 yükle. <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>%2</strong> (%3) diski <strong>sil</strong> ve %1 yükle. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>%2</strong> (%3) disk bölümünün %1 ile <strong>üzerine yaz</strong>. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>%1</strong> (%2) disk bölümünü <strong>manuel</strong> bölümle. Disk <strong>%1</strong> (%2) Disk <strong>%1</strong> (%2) Current: Geçerli: After: Sonra: No EFI system partition configured EFI sistem bölümü yapılandırılmamış An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. %1 baÅŸlatmak için bir EFI sistem bölümü gereklidir.<br/><br/>EFI sistem bölümünü yapılandırmak için geri dönün ve seçim yapın veya FAT32 dosya sistemi ile <strong>esp</strong> etiketiyle <strong>%2</strong> noktasına baÄŸlayın.<br/><br/>Bir EFI sistem bölümü kurmadan devam edebilirsiniz fakat iÅŸletim sistemi baÅŸlatılamayabilir. EFI system partition flag not set EFI sistem bölümü bayrağı ayarlanmadı An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. %1 baÅŸlatmak için bir EFI sistem bölümü gereklidir.<br/><br/>Bir baÄŸlama noktası <strong>%2</strong> olarak yapılandırıldı fakat <strong>esp</strong>bayrağı ayarlanmadı.<br/>Bayrağı ayarlamak için, geri dönün ve bölümü düzenleyin.<br/><br/>Sen bayrağı ayarlamadan devam edebilirsin fakat iÅŸletim sistemi baÅŸlatılamayabilir. Boot partition not encrypted Önyükleme yani boot diski ÅŸifrelenmedi A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. Ayrı bir önyükleme yani boot disk bölümü, ÅŸifrenmiÅŸ bir kök bölüm ile birlikte ayarlandı, fakat önyükleme bölümü ÅŸifrelenmedi.<br/><br/>Bu tip kurulumun güvenlik endiÅŸeleri vardır, çünkü önemli sistem dosyaları ÅŸifrelenmemiÅŸ bir bölümde saklanır.<br/>İsterseniz kuruluma devam edebilirsiniz, fakat dosya sistemi kilidi daha sonra sistem baÅŸlatılırken açılacak.<br/> Önyükleme bölümünü ÅŸifrelemek için geri dönün ve bölüm oluÅŸturma penceresinde <strong>Åžifreleme</strong>seçeneÄŸi ile yeniden oluÅŸturun. has at least one disk device available. Mevcut en az bir disk aygıtı var. There are no partitions to install on. Kurulacak disk bölümü yok. PlasmaLnfJob Plasma Look-and-Feel Job Plazma Look-and-Feel İşleri Could not select KDE Plasma Look-and-Feel package KDE Plazma Look-and-Feel paketi seçilemedi PlasmaLnfPage Form Biçim Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Lütfen KDE Plazma Masaüstü için temalardan Bak ve Hisset bölümünü seçin. Ayrıca bu adımı atlayabilir ve sistem ayarlandıktan sonra bak ve hisset tema yapılandırabilirsiniz. Bir bak ve hisset seçeneÄŸine tıklarsanız size canlı bir önizleme gösterilecektir. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Lütfen KDE Plazma Masaüstü için bir görünüm seçin. Ayrıca, bu adımı atlayabilir ve sistem kurulduktan sonra görünümü yapılandırabilirsiniz. Bir görünüm ve tercihe tıkladığınızda size look-and-feel yani canlı bir önizleme sunulur. PlasmaLnfViewStep Look-and-Feel Look-and-Feel PreserveFiles Saving files for later ... Dosyalar daha sonrası için kaydediliyor ... No files configured to save for later. Daha sonra kaydetmek için dosya yapılandırılmamış. Not all of the configured files could be preserved. Yapılandırılmış dosyaların tümü korunamadı. ProcessResult There was no output from the command. Komut çıktısı yok. Output: Çıktı: External command crashed. Harici komut çöktü. Command <i>%1</i> crashed. Komut <i>%1</i> çöktü. External command failed to start. Harici komut baÅŸlatılamadı. Command <i>%1</i> failed to start. Komut <i>%1</i> baÅŸlatılamadı. Internal error when starting command. Komut baÅŸlatılırken dahili hata. Bad parameters for process job call. Çalışma adımları baÅŸarısız oldu. External command failed to finish. Harici komut baÅŸarısız oldu. Command <i>%1</i> failed to finish in %2 seconds. Komut <i>%1</i> %2 saniyede baÅŸarısız oldu. External command finished with errors. Harici komut hatalarla bitti. Command <i>%1</i> finished with exit code %2. Komut <i>%1</i> %2 çıkış kodu ile tamamlandı QObject Default Keyboard Model Varsayılan Klavye Modeli Default Varsayılan unknown bilinmeyen extended uzatılmış unformatted biçimlenmemiÅŸ swap Swap-Takas Unpartitioned space or unknown partition table BölümlenmemiÅŸ alan veya bilinmeyen bölüm tablosu (no mount point) (baÄŸlama noktası yok) Requirements checking for module <i>%1</i> is complete. <i>%1</i> modülü için gerekenler tamamlandı. %1 (%2) language[name] (country[name]) %1 (%2) No product Ürün yok No description provided. Açıklama bulunamadı. File not found Dosya bulunamadı Path <pre>%1</pre> must be an absolute path. <pre>%1</pre> yolu mutlak bir yol olmalı. Could not create new random file <pre>%1</pre>. <pre>%1</pre>yeni rasgele dosya oluÅŸturulamadı. RemoveVolumeGroupJob Remove Volume Group named %1. %1 adlı Birim Grubunu kaldır. Remove Volume Group named <strong>%1</strong>. <strong>%1</strong> adlı Birim Grubunu kaldır. The installer failed to remove a volume group named '%1'. Yükleyici, '%1' adında bir birim grubunu kaldıramadı. ReplaceWidget Form Biçim Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. %1 kurulacak diski seçin.<br/><font color="red">Uyarı: </font>Bu iÅŸlem seçili disk üzerindeki tüm dosyaları silecek. The selected item does not appear to be a valid partition. Seçili nesne, geçerli bir disk bölümü olarak görünmüyor. %1 cannot be installed on empty space. Please select an existing partition. %1 tanımlanmamış boÅŸ bir alana kurulamaz. Lütfen geçerli bir disk bölümü seçin. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 uzatılmış bir disk bölümüne kurulamaz. Geçerli bir, birincil disk ya da mantıksal disk bölümü seçiniz. %1 cannot be installed on this partition. %1 bu disk bölümüne yüklenemedi. Data partition (%1) Veri diski (%1) Unknown system partition (%1) Bilinmeyen sistem bölümü (%1) %1 system partition (%2) %1 sistem bölümü (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>disk bölümü %2 için %1 daha küçük. Lütfen, en az %3 GB kapasiteli bir disk bölümü seçiniz. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/>Bu sistemde EFI disk bölümü bulamadı. Lütfen geri dönün ve %1 kurmak için geliÅŸmiÅŸ kurulum seçeneÄŸini kullanın. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>%2 üzerine %1 kuracak.<br/><font color="red">Uyarı: </font>%2 diskindeki tüm veriler kaybedilecek. The EFI system partition at %1 will be used for starting %2. %1 EFI sistem bölümü %2 baÅŸlatmak için kullanılacaktır. EFI system partition: EFI sistem bölümü: ResizeFSJob Resize Filesystem Job Dosya Sistemini Yeniden Boyutlandır Invalid configuration Geçersiz yapılandırma The file-system resize job has an invalid configuration and will not run. Dosya sistemi yeniden boyutlandırma iÅŸi sorunlu yapılandırıldı ve çalışmayacak. KPMCore not Available KPMCore Hazır deÄŸil Calamares cannot start KPMCore for the file-system resize job. Calamares dosya sistemi yeniden boyutlandırma iÅŸi için KPMCore baÅŸlatılamıyor. Resize Failed Yeniden Boyutlandırılamadı The filesystem %1 could not be found in this system, and cannot be resized. %1 dosya sistemi bu sistemde bulunamadı ve yeniden boyutlandırılamıyor. The device %1 could not be found in this system, and cannot be resized. %1 aygıtı bu sistemde bulunamadı ve yeniden boyutlandırılamıyor. The filesystem %1 cannot be resized. %1 dosya sistemi yeniden boyutlandırılamıyor. The device %1 cannot be resized. %1 aygıtı yeniden boyutlandırılamıyor. The filesystem %1 must be resized, but cannot. %1 dosya sistemi yeniden boyutlandırılmalıdır, fakat yapılamaz. The device %1 must be resized, but cannot %1 dosya sistemi yeniden boyutlandırılmalıdır, ancak yapılamaz. ResizePartitionJob Resize partition %1. %1 bölümünü yeniden boyutlandır. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. <strong>%2MB</strong> <strong>%1</strong> disk bölümü <strong>%3MB</strong> olarak yeniden boyutlandır. Resizing %2MiB partition %1 to %3MiB. %1 disk bölümü %2 boyutundan %3 boyutuna ayarlanıyor. The installer failed to resize partition %1 on disk '%2'. Yükleyici %1 bölümünü '%2' diski üzerinde yeniden boyutlandırılamadı. ResizeVolumeGroupDialog Resize Volume Group Birim Grubunu Yeniden Boyutlandır ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. %1 adındaki birim grubunu %2'den %3'e kadar yeniden boyutlandırın. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. <strong>%1</strong>adındaki birim grubunu <strong>%2</strong>'den <strong>%3</strong>'e yeniden boyutlandırın The installer failed to resize a volume group named '%1'. Yükleyici, '%1' adında bir birim grubunu yeniden boyutlandıramadı. ResultsListDialog For best results, please ensure that this computer: En iyi sonucu elde etmek için bilgisayarınızın aÅŸağıdaki gereksinimleri karşıladığından emin olunuz: System requirements Sistem gereksinimleri ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> Bu bilgisayar %1 kurulumu için minimum gereksinimleri karşılamıyor.<br/>Kurulum devam etmeyecek. <a href="#details">Detaylar...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> Bu bilgisayara %1 yüklemek için minimum gereksinimler karşılanamadı. Kurulum devam edemiyor. <a href="#detaylar">Detaylar...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. Bu bilgisayar %1 kurulumu için önerilen gereksinimlerin bazılarına uymuyor. Kurulum devam edebilirsiniz ancak bazı özellikler devre dışı bırakılabilir. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. Bu bilgisayara %1 yüklemek için önerilen gereksinimlerin bazıları karşılanamadı.<br/> Kuruluma devam edebilirsiniz fakat bazı özellikler devre dışı kalabilir. This program will ask you some questions and set up %2 on your computer. Bu program size bazı sorular soracak ve bilgisayarınıza %2 kuracak. ScanningDialog Scanning storage devices... Depolama aygıtları taranıyor... Partitioning Bölümleme SetHostNameJob Set hostname %1 %1 sunucu-adı ayarla Set hostname <strong>%1</strong>. <strong>%1</strong> sunucu-adı ayarla. Setting hostname %1. %1 sunucu-adı ayarlanıyor. Internal Error Dahili Hata Cannot write hostname to target system Hedef sisteme sunucu-adı yazılamadı SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Klavye düzeni %1 olarak, alt türevi %2-%3 olarak ayarlandı. Failed to write keyboard configuration for the virtual console. Uçbirim için klavye yapılandırmasını kaydetmek baÅŸarısız oldu. Failed to write to %1 %1 üzerine kaydedilemedi Failed to write keyboard configuration for X11. X11 için klavye yapılandırmaları kaydedilemedi. Failed to write keyboard configuration to existing /etc/default directory. /etc/default dizine klavye yapılandırması yazılamadı. SetPartFlagsJob Set flags on partition %1. %1 bölüm bayrağını ayarla. Set flags on %1MiB %2 partition. %1MB %2 disk bölümüne bayrak ayarla. Set flags on new partition. Yeni disk bölümüne bayrak ayarla. Clear flags on partition <strong>%1</strong>. <strong>%1</strong> bölüm bayrağını kaldır. Clear flags on %1MiB <strong>%2</strong> partition. %1MB <strong>%2</strong> disk bölümünden bayrakları temizle. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. %1MB <strong>%2</strong> disk bölüm bayrağı <strong>%3</strong> olarak belirlendi. Clearing flags on %1MiB <strong>%2</strong> partition. %1MB <strong>%2</strong> disk bölümünden bayraklar temizleniyor. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. <strong>%3</strong> bayrağı %1MB <strong>%2</strong> disk bölümüne ayarlanıyor. Clear flags on new partition. Yeni disk bölümünden bayrakları temizle. Flag partition <strong>%1</strong> as <strong>%2</strong>. Bayrak bölüm <strong>%1</strong> olarak <strong>%2</strong>. Flag new partition as <strong>%1</strong>. Yeni disk bölümü <strong>%1</strong> olarak belirlendi. Clearing flags on partition <strong>%1</strong>. <strong>%1</strong> bölümünden bayraklar kaldırılıyor. Clearing flags on new partition. Yeni disk bölümünden bayraklar temizleniyor. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. <strong>%2</strong> bayrakları <strong>%1</strong> bölümüne ayarlandı. Setting flags <strong>%1</strong> on new partition. Yeni disk bölümüne <strong>%1</strong> bayrağı ayarlanıyor. The installer failed to set flags on partition %1. Yükleyici %1 bölüm bayraklarını ayarlamakta baÅŸarısız oldu. SetPasswordJob Set password for user %1 %1 Kullanıcı için parola ayarla Setting password for user %1. %1 Kullanıcısı için parola ayarlanıyor. Bad destination system path. Hedef sistem yolu bozuk. rootMountPoint is %1 rootBaÄŸlamaNoktası %1 Cannot disable root account. root hesap devre dışı bırakılamaz. passwd terminated with error code %1. passwd %1 hata kodu ile sonlandı. Cannot set password for user %1. %1 Kullanıcısı için parola ayarlanamadı. usermod terminated with error code %1. usermod %1 hata koduyla çöktü. SetTimezoneJob Set timezone to %1/%2 %1/%2 Zaman dilimi ayarla Cannot access selected timezone path. Seçilen zaman dilimini yoluna eriÅŸilemedi. Bad path: %1 Hatalı yol: %1 Cannot set timezone. Zaman dilimi ayarlanamadı. Link creation failed, target: %1; link name: %2 Link oluÅŸturulamadı, hedef: %1; link adı: %2 Cannot set timezone, Bölge ve zaman dilimi ayarlanmadı, Cannot open /etc/timezone for writing /etc/timezone açılamadığından düzenlenemedi ShellProcessJob Shell Processes Job Kabuk İşlemleri İşi SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage This is an overview of what will happen once you start the setup procedure. Bu, kurulum prosedürü baÅŸlatıldıktan sonra ne gibi deÄŸiÅŸiklikler dair olacağına genel bir bakış. This is an overview of what will happen once you start the install procedure. Yükleme iÅŸlemleri baÅŸladıktan sonra yapılacak iÅŸlere genel bir bakış. SummaryViewStep Summary Kurulum Bilgileri TrackingInstallJob Installation feedback Kurulum geribildirimi Sending installation feedback. Kurulum geribildirimi gönderiliyor. Internal error in install-tracking. Kurulum izlemede dahili hata. HTTP request timed out. HTTP isteÄŸi zaman aşımına uÄŸradı. TrackingMachineNeonJob Machine feedback Makine geri bildirimi Configuring machine feedback. Makine geribildirimini yapılandırma. Error in machine feedback configuration. Makine geri bildirim yapılandırmasında hata var. Could not configure machine feedback correctly, script error %1. Makine geribildirimi doÄŸru yapılandırılamadı, betik hatası %1. Could not configure machine feedback correctly, Calamares error %1. Makine geribildirimini doÄŸru bir ÅŸekilde yapılandıramadı, Calamares hata %1. TrackingPage Form Biçim Placeholder Yer tutucu <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>Bunu seçerseniz <span style=" font-weight:600;">kurulum hakkında</span> hiçbir bilgi gönderemezsiniz.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Kullanıcı geri bildirimi hakkında daha fazla bilgi için burayı tıklayın</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. Yükleme takibi, sahip oldukları kaç kullanıcının, hangi donanımın %1'e kurulduÄŸunu ve (son iki seçenekle birlikte) tercih edilen uygulamalar hakkında sürekli bilgi sahibi olmasını saÄŸlamak için %1'e yardımcı olur. Ne gönderileceÄŸini görmek için, lütfen her alanın yanındaki yardım simgesini tıklayın. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. Bunu seçerseniz kurulum ve donanımınız hakkında bilgi gönderirsiniz. Bu bilgi, <b>kurulum tamamlandıktan sonra</b> yalnızca bir kez gönderilecektir. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. Bunu seçerek <b>kurulum, donanım ve uygulamalarınızla ilgili bilgileri</b> düzenli olarak %1'e gönderirsiniz. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. Bunu seçerek <b>kurulum, donanım ve uygulamalarınızla ilgili bilgileri </b> düzenli olarak %1 adresine gönderirsiniz. TrackingViewStep Feedback Geribildirim UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Bu bilgisayarı birden fazla kiÅŸi kullanacaksa, kurulumdan sonra birden fazla kullanıcı hesabı oluÅŸturabilirsiniz.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Bu bilgisayarı birden fazla kiÅŸi kullanacaksa, yükleme bittikten sonra birden fazla kullanıcı hesabı oluÅŸturabilirsiniz.</small> Your username is too long. Kullanıcı adınız çok uzun. Your username must start with a lowercase letter or underscore. Kullanıcı adınız küçük harf veya alt çizgi ile baÅŸlamalıdır. Only lowercase letters, numbers, underscore and hyphen are allowed. Sadece küçük harflere, sayılara, alt çizgi ve kısa çizgilere izin verilir. Only letters, numbers, underscore and hyphen are allowed. Sadece harfler, rakamlar, alt çizgi ve kısa çizgi izin verilir. Your hostname is too short. Makine adınız çok kısa. Your hostname is too long. Makine adınız çok uzun. Your passwords do not match! Parolanız eÅŸleÅŸmiyor! UsersViewStep Users Kullanıcı Tercihleri VariantModel Key Anahtar Value DeÄŸer VolumeGroupBaseDialog Create Volume Group Birim Grubu OluÅŸtur List of Physical Volumes Fiziksel Birimlerin Listesi Volume Group Name: Birim Grubu Adı: Volume Group Type: Birim Grubu Tipi: Physical Extent Size: Fiziksel GeniÅŸleme Boyutu: MiB MB Total Size: Toplam Boyut: Used Size: Kullanılan Boyut: Total Sectors: Toplam Sektörler: Quantity of LVs: LVs Miktarı: WelcomePage Form Biçim Select application and system language Uygulama ve sistem dilini seçin Open donations website Bağış web sitesini aç &Donate &Bağış Open help and support website Yardım ve destek web sitesini açın Open issues and bug-tracking website Geri bildirim ve hata izleme web sitesi Open release notes website Sürüm Notları web sitesini aç &Release notes &Sürüm notları &Known issues &Bilinen hatalar &Support &Destek &About &Hakkında <h1>Welcome to the %1 installer.</h1> <h1>%1 Sistem Yükleyiciye HoÅŸgeldiniz.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>%1 Calamares Sistem Yükleyici .</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>%1 için Calamares sistem kurulum uygulamasına hoÅŸ geldiniz.</h1> <h1>Welcome to %1 setup.</h1> <h1>%1 Kurulumuna HoÅŸgeldiniz.</h1> About %1 setup %1 kurulum hakkında About %1 installer %1 sistem yükleyici hakkında <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. <h1>%1</h1><br/><strong>%2<br/>için %3</strong><br/><br/>Telif Hakkı 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Telif Hakkı 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>TeÅŸekkürler <a href="https://calamares.io/team/">Calamares takımı</a> ve <a href="https://www.transifex.com/calamares/calamares/">Calamares çeviri takımı</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> geliÅŸim destekçisi <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Özgür Yazılım. %1 support %1 destek WelcomeQmlViewStep Welcome HoÅŸgeldiniz WelcomeViewStep Welcome HoÅŸgeldiniz notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>Bunlar örnek sürüm notlarıdır.</p> welcomeq <h3>%1 <quote>%2</quote></h3> <h3>%1 <quote>%2</quote></h3> About Hakkında Support Destek Known issues Bilinen sorunlar Release notes Sürüm notları Donate Bağış calamares-3.2.20/lang/calamares_uk.ts000066400000000000000000006357641362604102500174720ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. <strong>Завантажувальне Ñередовище</strong> цієї ÑиÑтеми.<br><br>Старі x86-ÑиÑтеми підтримують тільки <strong>BIOS</strong>.<br>Ðові ÑиÑтеми зазвичай викориÑтовують<strong>EFI</strong>, проте Ñ—Ñ… може бути показано Ñк BIOS, Ñкщо запущено у режимі ÑуміÑноÑті. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. Цю ÑиÑтему було запущено із завантажувальним Ñередовищем <strong>EFI</strong>.<br><br>Щоб налаштувати Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð· Ñередовища EFI, заÑіб вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð¾Ð²Ð¸Ð½ÐµÐ½ вÑтановити на <strong>СиÑтемний Розділ EFI</strong> програму-завантажувач таку, Ñк <strong>GRUB</strong> або <strong>systemd-boot</strong>. Це буде зроблено автоматично, Ñкщо ви не обрали Ñ€Ð¾Ð·Ð¿Ð¾Ð´Ñ–Ð»ÐµÐ½Ð½Ñ Ð´Ð¸Ñку вручну. Ð’ оÑтанньому випадку вам потрібно обрати завантажувач або вÑтановити його влаÑноруч. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. Цю ÑиÑтему було запущено із завантажувальним Ñередовищем <strong>BIOS</strong>.<br><br>Щоб налаштувати Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð· Ñередовища BIOS, заÑіб вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð¾Ð²Ð¸Ð½ÐµÐ½ вÑтановити завантажувач, такий, Ñк <strong>GRUB</strong> або на початку розділу або у <strong>Головний Завантажувальний Ð—Ð°Ð¿Ð¸Ñ (Master Boot Record)</strong> Ð±Ñ–Ð»Ñ Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÑƒ таблиці розділів (рекомендовано). Це буде зроблено автоматично, Ñкщо вами не вибрано поділ диÑка вручну. Ð’ оÑтанньому випадку вам потрібно вÑтановити завантажувач влаÑноруч. BootLoaderModel Master Boot Record of %1 Головний Завантажувальний Ð—Ð°Ð¿Ð¸Ñ (Master Boot Record) %1 Boot Partition Завантажувальний розділ System Partition СиÑтемний розділ Do not install a boot loader Ðе вÑтановлювати завантажувач %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page ÐŸÐ¾Ñ€Ð¾Ð¶Ð½Ñ Ñторінка Calamares::DebugWindow Form Форма GlobalStorage Глобальне Ñховище JobQueue Черга завдань Modules Модулі Type: Тип: none немає Interface: ІнтерфейÑ: Tools ІнÑтрументи Reload Stylesheet Перезавантажити таблицю Ñтилів Widget Tree Дерево віджетів Debug information ДіагноÑтична Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Calamares::ExecutionViewStep Set up Ðалаштувати Install Ð’Ñтановити Calamares::FailJob Job failed (%1) Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ (%1) Programmed job failure was explicitly requested. Ðевдача в запрограмованому завданні була чітко задана. Calamares::JobThread Done Готово Calamares::NamedJob Example job (%1) Приклад Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ (%1) Calamares::ProcessJob Run command '%1' in target system. Виконати команду «%1» у ÑиÑтемі призначеннÑ. Run command '%1'. Виконати команду «%1». Running command %1 %2 Виконуємо команду %1 %2 Calamares::PythonJob Running %1 operation. ЗапуÑк операції %1. Bad working directory path Ðеправильний шлÑÑ… робочого каталогу Working directory %1 for python job %2 is not readable. Ðеможливо прочитати робочу директорію %1 Ð´Ð»Ñ Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ python %2. Bad main script file Ðеправильний файл головного Ñценарію Main script file %1 for python job %2 is not readable. Ðеможливо прочитати файл головного Ñценарію %1 Ð´Ð»Ñ Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ python %2. Boost.Python error in job "%1". Помилка Boost.Python у завданні "%1". Calamares::QmlViewStep Loading ... ЗавантаженнÑ… QML Step <i>%1</i>. Крок QML <i>%1</i>. Loading failed. Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸. Calamares::RequirementsChecker Waiting for %n module(s). ÐžÑ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ %n модулю. ÐžÑ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ %n модулів. ÐžÑ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ %n модулів. ÐžÑ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ %n модулів. (%n second(s)) (%n Ñекунда) (%n Ñекунди) (%n Ñекунд(и)) (%n Ñекунд(и)) System-requirements checking is complete. Перевірка ÑиÑтемних вимог завершена. Calamares::ViewManager &Back &Ðазад &Next &Вперед &Cancel &СкаÑувати Cancel setup without changing the system. СкаÑувати Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð±ÐµÐ· зміни ÑиÑтеми. Cancel installation without changing the system. СкаÑувати вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð±ÐµÐ· зміни ÑиÑтеми. Setup Failed Помилка вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Would you like to paste the install log to the web? Хочете виклаÑти журнал вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñƒ мережі? Install Log Paste URL ÐдреÑа Ð´Ð»Ñ Ð²ÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð½Ñ Ð¶ÑƒÑ€Ð½Ð°Ð»Ñƒ вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ The upload was unsuccessful. No web-paste was done. Ðе вдалоÑÑ Ð²Ð¸Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ дані. Calamares Initialization Failed Помилка ініціалізації Calamares %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. %1 неможливо вÑтановити. Calamares не зміг завантажити вÑÑ– налаштовані модулі. Ð¦Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð° зв'Ñзана з тим, Ñк Calamares викориÑтовуєтьÑÑ Ð´Ð¸Ñтрибутивом. <br/>The following modules could not be loaded: <br/>Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ наÑтупні модулі: Continue with installation? Продовжити вÑтановленнÑ? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> Програма Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ %1 збираєтьÑÑ Ð²Ð½ÐµÑти зміни до вашого диÑка, щоб налаштувати %2. <br/><strong> Ви не зможете ÑкаÑувати ці зміни.</strong> &Set up now &Ðалаштувати зараз &Set up &Ðалаштувати &Install &Ð’Ñтановити Setup is complete. Close the setup program. Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð¾. Закрити програму вÑтановленнÑ. Cancel setup? СкаÑувати налаштуваннÑ? Cancel installation? СкаÑувати вÑтановленнÑ? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Ви наÑправді бажаєте ÑкаÑувати поточну процедуру налаштовуваннÑ? Роботу програми Ð´Ð»Ñ Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð±ÑƒÐ´Ðµ завершено, а уÑÑ– зміни буде втрачено. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Чи ви наÑправді бажаєте ÑкаÑувати Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð²ÑтановленнÑ? Роботу заÑобу вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð±ÑƒÐ´Ðµ завершено, Ñ– вÑÑ– зміни буде втрачено. &Yes &Так &No &ÐÑ– &Close &Закрити Continue with setup? Продовжити вÑтановленнÑ? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> ЗаÑіб вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ %1 має намір внеÑти зміни до розподілу вашого диÑка, щоб вÑтановити %2.<br/><strong>Ці зміни неможливо буде ÑкаÑувати.</strong> &Install now &Ð’Ñтановити зараз Go &back Перейти &назад &Done &Закінчити The installation is complete. Close the installer. Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð¾. Завершити роботу заÑобу вÑтановленнÑ. Error Помилка Installation Failed Помилка під Ñ‡Ð°Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ CalamaresPython::Helper Unknown exception type Ðевідомий тип виключної Ñитуації unparseable Python error нерозбірлива помилка Python unparseable Python traceback нерозбірливе відÑÑ‚ÐµÐ¶ÐµÐ½Ð½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ Python Unfetchable Python error. Помилка Python, інформацію про Ñку неможливо отримати. CalamaresUtils Install log posted to: %1 Журнал вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð²Ð¸ÐºÐ»Ð°Ð´ÐµÐ½Ð¾ за адреÑою: %1 CalamaresWindow %1 Setup Program Програма Ð´Ð»Ñ Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ %1 %1 Installer ЗаÑіб вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ %1 Show debug information Показати діагноÑтичну інформацію CheckerContainer Gathering system information... Збираємо інформацію про ÑиÑтему... ChoicePage Form Форма After: ПіÑлÑ: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Ð Ð¾Ð·Ð¿Ð¾Ð´Ñ–Ð»ÐµÐ½Ð½Ñ Ð²Ñ€ÑƒÑ‡Ð½Ñƒ</strong><br/>Ви можете Ñтворити або змінити розмір розділів влаÑноруч. Boot loader location: Ð Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÑƒÐ²Ð°Ñ‡Ð°: Select storage de&vice: Обрати &приÑтрій зберіганнÑ: Current: Зараз: Reuse %1 as home partition for %2. ВикориÑтати %1 Ñк домашній розділ (home) Ð´Ð»Ñ %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Оберіть розділ Ð´Ð»Ñ Ð·Ð¼ÐµÐ½ÑˆÐµÐ½Ð½Ñ, потім Ñ‚Ñгніть повзунок, щоб змінити розмір</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 буде ÑтиÑнуто до %2 МіБ. ÐатоміÑть буде Ñтворено розділ розміром %3 МіБ Ð´Ð»Ñ %4. <strong>Select a partition to install on</strong> <strong>Оберіть розділ, на Ñкий вÑтановити</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Ð’ цій ÑиÑтемі не знайдено жодного ÑиÑтемного розділу EFI. Щоб вÑтановити %1, будь лаÑка, повернітьÑÑ Ñ‚Ð° оберіть Ñ€Ð¾Ð·Ð¿Ð¾Ð´Ñ–Ð»ÐµÐ½Ð½Ñ Ð²Ñ€ÑƒÑ‡Ð½Ñƒ. The EFI system partition at %1 will be used for starting %2. СиÑтемний розділ EFI %1 буде викориÑтано Ð´Ð»Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ %2. EFI system partition: СиÑтемний розділ EFI: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Цей приÑтрій зберіганнÑ, Ñхоже, не має жодної операційної ÑиÑтеми. Що ви бажаєте зробити?<br/>У Ð²Ð°Ñ Ð±ÑƒÐ´Ðµ можливіÑть переглÑнути та підтвердити вÑе, що ви обрали перед тим, Ñк будуть зроблені будь-Ñкі зміни на приÑтрої зберіганнÑ. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>ОчиÑтити диÑк</strong><br/>Це <font color="red">знищить</font> вÑÑ– данні, приÑутні на обраному приÑтрої зберіганнÑ. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Ðа цьому приÑтрої Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ Ñ” %1. Що ви бажаєте зробити?<br/>У Ð²Ð°Ñ Ð±ÑƒÐ´Ðµ можливіÑть переглÑнути та підтвердити вÑе, що ви обрали перед тим, Ñк будуть зроблені будь-Ñкі зміни на приÑтрої зберіганнÑ. No Swap Без резервної пам'Ñті Reuse Swap Повторно викориÑтати резервну пам'Ñть Swap (no Hibernate) Резервна пам'Ñть (без приÑиплÑннÑ) Swap (with Hibernate) Резервна пам'Ñть (із приÑиплÑннÑм) Swap to file Резервна пам'Ñть у файлі <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Ð’Ñтановити поруч</strong><br/>ЗаÑіб вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·Ð¼ÐµÐ½ÑˆÐ¸Ñ‚ÑŒ розмір розділу, щоб вивільнити проÑтір Ð´Ð»Ñ %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Замінити розділ</strong><br/>Замінити розділу на %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Ðа цьому приÑтрої Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ Ð²Ð¶Ðµ Ñ” операційна ÑиÑтема. Що ви бажаєте зробити?<br/>У Ð²Ð°Ñ Ð±ÑƒÐ´Ðµ можливіÑть переглÑнути та підтвердити вÑе, що ви обрали перед тим, Ñк будуть зроблені будь-Ñкі зміни на приÑтрої зберіганнÑ. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. Ðа цьому приÑтрої Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ Ð²Ð¶Ðµ Ñ” декілька операційних ÑиÑтем. Що ви бажаєте зробити?<br/>У Ð²Ð°Ñ Ð±ÑƒÐ´Ðµ можливіÑть переглÑнути та підтвердити вÑе, що ви обрали перед тим, Ñк будуть зроблені будь-Ñкі зміни на приÑтрої зберіганнÑ. ClearMountsJob Clear mounts for partitioning operations on %1 ОчиÑтити точки Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ð¹ над розділами на %1 Clearing mounts for partitioning operations on %1. ÐžÑ‡Ð¸Ñ‰ÐµÐ½Ð½Ñ Ñ‚Ð¾Ñ‡Ð¾Ðº Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ð¹ над розділами на %1. Cleared all mounts for %1 Очищено вÑÑ– точки Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ %1 ClearTempMountsJob Clear all temporary mounts. ОчиÑтити вÑÑ– тимчаÑові точки підключеннÑ. Clearing all temporary mounts. ÐžÑ‡Ð¸Ñ‰ÐµÐ½Ð½Ñ Ð²ÑÑ–Ñ… тимчаÑових точок підключеннÑ. Cannot get list of temporary mounts. Ðеможливо отримати ÑпиÑок тимчаÑових точок підключеннÑ. Cleared all temporary mounts. Очищено вÑÑ– тимчаÑові точки підключеннÑ. CommandList Could not run command. Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ команду. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. Програма запуÑкаєтьÑÑ Ñƒ Ñередовищі оÑновної ÑиÑтеми Ñ– потребує даних щодо кореневої теки, але не визначено rootMountPoint. The command needs to know the user's name, but no username is defined. Команді потрібні дані щодо імені кориÑтувача, але ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача не визначено. ContextualProcessJob Contextual Processes Job Ð—Ð°Ð²Ð´Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐºÑтових процеÑів CreatePartitionDialog Create a Partition Створити розділ MiB МіБ Partition &Type: &Тип розділу: &Primary &ОÑновний E&xtended &Розширений Fi&le System: &Файлова ÑиÑтема: LVM LV name Ðазва логічного тому LVM Flags: Прапорці: &Mount Point: Точка &підключеннÑ: Si&ze: Ро&змір: En&crypt За&шифрувати Logical Логічний Primary ОÑновний GPT GPT Mountpoint already in use. Please select another one. Точка Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð½Ð°Ñ€Ð°Ð·Ñ– викориÑтовуєтьÑÑ. Оберіть, будь лаÑка, іншу. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Створити розділ у %2 МіБ на %4 (%3) із файловою ÑиÑтемою %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Створити розділ у <strong>%2 МіБ</strong> на <strong>%4</strong> (%3) із файловою ÑиÑтемою <strong>%1</strong>. Creating new %1 partition on %2. Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ розділу %1 на %2. The installer failed to create partition on disk '%1'. ЗаÑобу вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð½Ðµ вдалоÑÑ Ñтворити розділ на диÑку «%1». CreatePartitionTableDialog Create Partition Table Створити таблицю розділів Creating a new partition table will delete all existing data on the disk. Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð½Ð¾Ð²Ð¾Ñ— таблиці розділів знищить вÑÑ– данні, Ñкі зберігалиÑÑ Ð½Ð° диÑку. What kind of partition table do you want to create? Таблицю розділів Ñкого типу ви бажаєте Ñтворити? Master Boot Record (MBR) Головний завантажувальний Ð·Ð°Ð¿Ð¸Ñ (MBR) GUID Partition Table (GPT) Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² GUID (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Створити нову таблицю розділів %1 на %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Створити нову таблицю розділів <strong>%1</strong> на <strong>%2</strong> (%3). Creating new %1 partition table on %2. Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð½Ð¾Ð²Ð¾Ñ— таблиці розділів %1 на %2. The installer failed to create a partition table on %1. ЗаÑобу вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð½Ðµ вдалоÑÑ Ñтворити таблицю розділів на %1. CreateUserJob Create user %1 Створити кориÑтувача %1 Create user <strong>%1</strong>. Створити кориÑтувача <strong>%1</strong>. Creating user %1. Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ÐºÐ¾Ñ€Ð¸Ñтувача %1. Sudoers dir is not writable. Каталог sudoers Ñ” непридатним до запиÑу. Cannot create sudoers file for writing. Ðеможливо Ñтворити файл sudoers Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу. Cannot chmod sudoers file. Ðеможливо вÑтановити права на файл sudoers. Cannot open groups file for reading. Ðеможливо відкрити файл груп Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ. CreateVolumeGroupDialog Create Volume Group Створити групу томів CreateVolumeGroupJob Create new volume group named %1. Створити групу томів із назвою %1. Create new volume group named <strong>%1</strong>. Створити групу томів із назвою <strong>%1</strong>. Creating new volume group named %1. Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð³Ñ€ÑƒÐ¿Ð¸ томів із назвою %1. The installer failed to create a volume group named '%1'. ЗаÑобу вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð½Ðµ вдалоÑÑ Ñтворити групу томів із назвою «%1». DeactivateVolumeGroupJob Deactivate volume group named %1. СкаÑувати активацію групи томів із назвою %1. Deactivate volume group named <strong>%1</strong>. СкаÑувати активацію групи томів із назвою <strong>%1</strong>. The installer failed to deactivate a volume group named %1. ЗаÑобу вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð½Ðµ вдалоÑÑ ÑкаÑувати активацію групи томів із назвою «%1». DeletePartitionJob Delete partition %1. Видалити розділ %1. Delete partition <strong>%1</strong>. Видалити розділ <strong>%1</strong>. Deleting partition %1. Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %1. The installer failed to delete partition %1. ЗаÑобу вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð½Ðµ вдалоÑÑ Ð²Ð¸Ð»ÑƒÑ‡Ð¸Ñ‚Ð¸ розділ %1. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. Тип <strong>таблиці розділів</strong> на вибраному приÑтрої Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ….<br><br>Єдиний ÑпоÑіб змінити таблицю розділів — це очиÑтити Ñ– Ñтворити таблицю розділів з нулÑ, що знищить вÑÑ– дані на приÑтрої зберіганнÑ.<br>ЗаÑіб вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·Ð°Ð»Ð¸ÑˆÐ¸Ñ‚ÑŒ поточну таблицю розділів, Ñкщо ви Ñвно не виберете інше.<br>Якщо не впевнені, на більш ÑучаÑних ÑиÑтемах надайте перевагу GPT. This device has a <strong>%1</strong> partition table. Ðа цьому приÑтрої Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² <strong>%1</strong>. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. Це <strong>loop-приÑтрій</strong>.Це пÑевдо-приÑтрій, що не має таблиці розділів та дозволÑÑ” доÑтуп до файлу Ñк до блокового приÑтрою. Цей ÑпоÑіб Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð·Ð²Ð¸Ñ‡Ð°Ð¹ міÑтить одну єдину файлову ÑиÑтему. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. ЗаÑобу вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ <strong>не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ таблицю розділів</strong> на обраному приÑтрої зберіганнÑ.<br><br>ПриÑтрій або на має таблиці розділів, або таблицю розділів пошкоджено чи вона невідомого типу.<br>ЗаÑіб вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¼Ð¾Ð¶Ðµ Ñтворити нову таблицю розділів Ð´Ð»Ñ Ð²Ð°Ñ, автоматично або за допомогою Ñторінки Ñ€Ð¾Ð·Ð¿Ð¾Ð´Ñ–Ð»ÐµÐ½Ð½Ñ Ð²Ñ€ÑƒÑ‡Ð½Ñƒ. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Це рекомендований тип таблиці розділів Ð´Ð»Ñ ÑучаÑних ÑиÑтем, Ñкі запуÑкаютьÑÑ Ð·Ð° допомогою завантажувального Ñередовища <strong>EFI</strong>. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. <br><br>Цей тип таблиці розділів рекомендований лише Ð´Ð»Ñ Ñтарих ÑиÑтем, Ñкі запуÑкаютьÑÑ Ð·Ð° допомогою завантажувального Ñередовища <strong>BIOS</strong>. GPT рекомендовано у більшоÑті інших випадків.<br><br><strong>ПопередженнÑ:</strong> Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² MBR - це заÑтарілий Ñтандарт чаÑів MS-DOS. Можливо Ñтворити <br>Лише 4 <em>оÑновних</em> розділів, один зі Ñких може бути <em>розширеним</em>, Ñкий в Ñвою чергу може міÑтити багато <em>логічних</em> розділів. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1 – (%2) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 ЗапиÑати Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ LUKS Ð´Ð»Ñ Dracut до %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted ПропуÑтити Ð·Ð°Ð¿Ð¸Ñ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ LUKS Ð´Ð»Ñ Dracut: розділ "/" не зашифрований Failed to open %1 Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ %1 DummyCppJob Dummy C++ Job ЗавданнÑ-макет C++ EditExistingPartitionDialog Edit Existing Partition Ð ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Content: ВміÑÑ‚: &Keep За&лишити Format Форматувати Warning: Formatting the partition will erase all existing data. ПопередженнÑ: Ð¤Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ знищить вÑÑ– приÑутні на ньому дані. &Mount Point: Точка &підключеннÑ: Si&ze: Ро&змір: MiB МіБ Fi&le System: &Файлова ÑиÑтема: Flags: Прапорці: Mountpoint already in use. Please select another one. Точка Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð½Ð°Ñ€Ð°Ð·Ñ– викориÑтовуєтьÑÑ. Оберіть, будь лаÑка, іншу. EncryptWidget Form Форма En&crypt system За&шифрувати ÑиÑтему Passphrase Ключова фраза Confirm passphrase ÐŸÑ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ ÐºÐ»ÑŽÑ‡Ð¾Ð²Ð¾Ñ— фрази Please enter the same passphrase in both boxes. Будь лаÑка, введіть однакову ключову фразу у обидва текÑтові вікна. FillGlobalStorageJob Set partition information ВвеÑти інформацію про розділ Install %1 on <strong>new</strong> %2 system partition. Ð’Ñтановити %1 на <strong>новий</strong> ÑиÑтемний розділ %2. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Ðалаштувати <strong>новий</strong> розділ %2 з точкою Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Ð’Ñтановити %2 на ÑиÑтемний розділ %3 <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Ðалаштувати розділ %3 <strong>%1</strong> з точкою Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ <strong>%2</strong>. Install boot loader on <strong>%1</strong>. Ð’Ñтановити завантажувач на <strong>%1</strong>. Setting up mount points. ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‚Ð¾Ñ‡Ð¾Ðº підключеннÑ. FinishedPage Form Форма <Restart checkbox tooltip> <Підказка до пункту позначки перезапуÑку> &Restart now &Перезавантажити зараз <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>Виконано.</h1><br/>Ðа вашому комп'ютері було налаштовано %1.<br/>Можете починати кориÑтуватиÑÑ Ð²Ð°ÑˆÐ¾ÑŽ новою ÑиÑтемою. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <html><head/><body><p>Якщо позначено цей пункт, вашу ÑиÑтему буде негайно перезапущено піÑÐ»Ñ Ð½Ð°Ñ‚Ð¸ÑÐºÐ°Ð½Ð½Ñ ÐºÐ½Ð¾Ð¿ÐºÐ¸ <span style="font-style:italic;">Закінчити</span> або Ð·Ð°ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ð²Ñ–ÐºÐ½Ð° програми Ð´Ð»Ñ Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>Ð’Ñе зроблено.</h1><br/>%1 вÑтановлено на ваш комп'ютер.<br/>Ви можете перезавантажитиÑÑ Ð´Ð¾ вашої нової ÑиÑтеми або продовжити викориÑÑ‚Ð°Ð½Ð½Ñ Live-Ñередовища %2. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <html><head/><body><p>Якщо позначено цей пункт, вашу ÑиÑтему буде негайно перезапущено піÑÐ»Ñ Ð½Ð°Ñ‚Ð¸ÑÐºÐ°Ð½Ð½Ñ ÐºÐ½Ð¾Ð¿ÐºÐ¸ <span style="font-style:italic;">Закінчити</span> або Ð·Ð°ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ð²Ñ–ÐºÐ½Ð° заÑобу вÑтановленнÑ.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Ðе вдалоÑÑ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ñ‚Ð¸</h1><br/>%1 не було налаштовано на вашому комп'ютері.<br/>ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ помилку: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·Ð°Ð·Ð½Ð°Ð»Ð¾ невдачі</h1><br/>%1 не було вÑтановлено на Ваш комп'ютер.<br/>ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ помилку: %2. FinishedViewStep Finish Завершити Setup Complete ÐÐ°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¾ Installation Complete Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¾ The setup of %1 is complete. ÐÐ°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ %1 завершено. The installation of %1 is complete. Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ %1 завершено. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Форматувати розділ %1 (файлова ÑиÑтема: %2, розмір: %3 МіБ) на %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Форматувати розділ у <strong>%3 МіБ</strong> <strong>%1</strong> з викориÑтаннÑм файлової ÑиÑтеми <strong>%2</strong>. Formatting partition %1 with file system %2. Ð¤Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %1 з файловою ÑиÑтемою %2. The installer failed to format partition %1 on disk '%2'. ЗаÑобу вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð½Ðµ вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %1 на диÑку «%2». GeneralRequirements has at least %1 GiB available drive space міÑтить принаймні %1 ГіБ міÑÑ†Ñ Ð½Ð° диÑку There is not enough drive space. At least %1 GiB is required. Ðа диÑку недоÑтатньо міÑцÑ. Потрібно принаймні %1 ГіБ. has at least %1 GiB working memory має принаймні %1 ГіБ робочої пам'Ñті The system does not have enough working memory. At least %1 GiB is required. У ÑиÑтемі немає доÑтатнього об'єму робочої пам'Ñті. Потрібно принаймні %1 ГіБ. is plugged in to a power source підключена до джерела Ð¶Ð¸Ð²Ð»ÐµÐ½Ð½Ñ The system is not plugged in to a power source. СиÑтема не підключена до джерела живленнÑ. is connected to the Internet з'єднано з мережею Інтернет The system is not connected to the Internet. СиÑтема не з'єднана з мережею Інтернет. is running the installer as an administrator (root) виконує заÑіб вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð²Ñ–Ð´ імені адмініÑтратора (root) The setup program is not running with administrator rights. Програму Ð´Ð»Ñ Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð¿ÑƒÑ‰ÐµÐ½Ð¾ не від імені адмініÑтратора. The installer is not running with administrator rights. ЗаÑіб вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·Ð°Ð¿ÑƒÑ‰ÐµÐ½Ð¾ без прав адмініÑтратора. has a screen large enough to show the whole installer має доÑтатньо великий Ð´Ð»Ñ ÑƒÑього вікна заÑобу вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÐµÐºÑ€Ð°Ð½ The screen is too small to display the setup program. Екран Ñ” замалим Ð´Ð»Ñ Ð¿Ð¾ÐºÐ°Ð·Ñƒ вікна заÑобу налаштовуваннÑ. The screen is too small to display the installer. Екран замалий Ð´Ð»Ñ Ð¿Ð¾ÐºÐ°Ð·Ñƒ вікна заÑобу вÑтановленнÑ. HostInfoJob Collecting information about your machine. Збираємо дані щодо вашого комп'ютера. IDJob OEM Batch Identifier Пакетний ідентифікатор OEM Could not create directories <code>%1</code>. Ðе вдалоÑÑ Ñтворити каталоги <code>%1</code>. Could not open file <code>%1</code>. Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл <code>%1</code>. Could not write to file <code>%1</code>. Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ Ð´Ð¾ файла <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ initramfs за допомогою mkinitcpio. InitramfsJob Creating initramfs. Створюємо initramfs. InteractiveTerminalPage Konsole not installed Konsole не вÑтановлено Please install KDE Konsole and try again! Будь лаÑка вÑтановіть KDE Konsole Ñ– Ñпробуйте знову! Executing script: &nbsp;<code>%1</code> ВиконуєтьÑÑ Ñкрипт: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script Скрипт KeyboardPage Set keyboard model to %1.<br/> Ð’Ñтановити модель клавіатури Ñк %1.<br/> Set keyboard layout to %1/%2. Ð’Ñтановити розкладку клавіатури Ñк %1/%2. KeyboardViewStep Keyboard Клавіатура LCLocaleDialog System locale setting ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÑиÑтемної локалі The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÑиÑтемної локалі впливає на мову та набір Ñимволів Ð´Ð»Ñ Ð´ÐµÑких елементів інтерфейÑу командного Ñ€Ñдку.<br/>Ðаразі вÑтановлено <strong>%1</strong>. &Cancel &СкаÑувати &OK &OK LicensePage Form Форма <h1>License Agreement</h1> <h1>Ліцензійна угода</h1> I accept the terms and conditions above. Я приймаю Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð½Ñ Ñ‚Ð° умови, що наведені вище. Please review the End User License Agreements (EULAs). Будь лаÑка, переглÑньте ліцензійні угоди із кінцевим кориÑтувачем (EULA). This setup procedure will install proprietary software that is subject to licensing terms. Під Ñ‡Ð°Ñ Ñ†Ñ–Ñ”Ñ— процедури Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð±ÑƒÐ´Ðµ вÑтановлено закрите програмне забезпеченнÑ, викориÑÑ‚Ð°Ð½Ð½Ñ Ñкого передбачає згоду із умовами ліцензійної угоди. If you do not agree with the terms, the setup procedure cannot continue. Якщо ви не погодитеÑÑ Ñ–Ð· умовами, Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð¿Ð¾Ð´Ð°Ð»ÑŒÑˆÐ¾Ñ— процедури Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ñтане неможливим. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Під Ñ‡Ð°Ñ Ñ†Ñ–Ñ”Ñ— процедури Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ð¾Ð¶Ðµ бути вÑтановлено закрите програмне Ð·Ð°Ð±ÐµÐ·Ð¿ÐµÑ‡ÐµÐ½Ð½Ñ Ð· метою Ð·Ð°Ð±ÐµÐ·Ð¿ÐµÑ‡ÐµÐ½Ð½Ñ Ñ€ÐµÐ°Ð»Ñ–Ð·Ð°Ñ†Ñ–Ñ— та Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ð´Ð¾Ð´Ð°Ñ‚ÐºÐ¾Ð²Ð¸Ñ… можливоÑтей. ВикориÑÑ‚Ð°Ð½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ програмного Ð·Ð°Ð±ÐµÐ·Ð¿ÐµÑ‡ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡Ð°Ñ” згоду із умовами ліцензійної угоди. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Якщо ви не погодитеÑÑ Ñ–Ð· умовами ліцензуваннÑ, закрите програмне Ð·Ð°Ð±ÐµÐ·Ð¿ÐµÑ‡ÐµÐ½Ð½Ñ Ð½Ðµ буде вÑтановлено. ЗаміÑть нього буде викориÑтано альтернативи із відкритим кодом. LicenseViewStep License Ð›Ñ–Ñ†ÐµÐ½Ð·Ñ–Ñ LicenseWidget URL: %1 ÐдреÑа: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>Драйвер %1</strong><br/>від %2 <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>Графічний драйвер %1</strong><br/><font color="Grey">від %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>Додаток Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ³Ð»Ñду інтернету %1</strong><br/><font color="Grey">%2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>Кодек %1</strong><br/><font color="Grey">від %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>Пакет %1</strong><br/><font color="Grey">від %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">від %2</font> File: %1 Файл: %1 Show the license text Показати текÑÑ‚ ліцензійної угоди Open license agreement in browser. Відкрити ліцензійну угоду у програмі Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ³Ð»Ñду. Hide license text Сховати текÑÑ‚ ліцензійної угоди LocalePage The system language will be set to %1. Мову %1 буде вÑтановлено Ñк ÑиÑтемну. The numbers and dates locale will be set to %1. %1 буде вÑтановлено Ñк локаль чиÑел та дат. Region: Регіон: Zone: Зона: &Change... &Змінити... Set timezone to %1/%2.<br/> Ð’Ñтановити зону %1/%2.<br/> LocaleViewStep Location Ð Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ LuksBootKeyFileJob Configuring LUKS key file. Ðалаштовуємо файл ключа LUKS. No partitions are defined. Ðе визначено жодного розділу. Encrypted rootfs setup error Помилка Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ… rootfs Root partition %1 is LUKS but no passphrase has been set. Кореневим розділом %1 Ñ” розділ LUKS, але пароль до нього не вÑтановлено. Could not create LUKS key file for root partition %1. Ðе вдалоÑÑ Ñтворити файл ключа LUKS Ð´Ð»Ñ ÐºÐ¾Ñ€ÐµÐ½ÐµÐ²Ð¾Ð³Ð¾ розділу %1. Could not configure LUKS key file on partition %1. Ðе вдалоÑÑ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ñ‚Ð¸ файл ключа LUKS на розділі %1. MachineIdJob Generate machine-id. Створити ідентифікатор машини. Configuration Error Помилка Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ No root mount point is set for MachineId. Ðе вÑтановлено точки Ð¼Ð¾Ð½Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ñ€ÐµÐ½ÐµÐ²Ð¾Ñ— файлової ÑиÑтеми Ð´Ð»Ñ MachineId. NetInstallPage Name Ім'Ñ Description ÐžÐ¿Ð¸Ñ Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ‡ÐµÑ€ÐµÐ· мережу. (Вимкнено: Ðеможливо отримати ÑпиÑок пакетів, перевірте ваше Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ мережі) Network Installation. (Disabled: Received invalid groups data) Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ‡ÐµÑ€ÐµÐ· мережу. (Вимкнено: Отримано неправильні дані про групи) Network Installation. (Disabled: Incorrect configuration) Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·Ð° допомогою мережі. (Вимкнено: помилкові налаштуваннÑ) NetInstallViewStep Package selection Вибір пакетів Office software ОфіÑні програми Office package ОфіÑний пакунок Browser software Браузери Browser package Пакунок браузера Web browser ПереглÑдач інтернету Kernel Ядро Services Служби Login Вхід до ÑиÑтеми Desktop Ð¡Ñ‚Ñ–Ð»ÑŒÐ½Ð¸Ñ†Ñ Applications Програми NotesQmlViewStep Notes Ðотатки OEMPage Ba&tch: П&акетна обробка: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>Тут Ñлід вказати пакетний ідентифікатор. Його буде збережено у ÑиÑтемі призначеннÑ.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>ÐÐ°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ–Ð² OEM</h1><p>Calamares викориÑтовуватиме параметри OEM під Ñ‡Ð°Ñ Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ ÑиÑтеми призначеннÑ.</p></body></html> OEMViewStep OEM Configuration ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ OEM Set the OEM Batch Identifier to <code>%1</code>. Ð’Ñтановити пакетний ідентифікатор OEM у Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ <code>%1</code>. PWQ Password is too short Пароль занадто короткий Password is too long Пароль задовгий Password is too weak Пароль надто ненадійний Memory allocation error when setting '%1' Помилка під Ñ‡Ð°Ñ Ñпроби отримати пам'Ñть Ð´Ð»Ñ Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Â«%1» Memory allocation error Помилка Ð²Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ Ð¿Ð°Ð¼'Ñті The password is the same as the old one Цей пароль такий же Ñк Ñ– Ñтарий The password is a palindrome Пароль Ñ” паліндромом The password differs with case changes only Паролі відрізнÑютьÑÑ Ð»Ð¸ÑˆÐµ регіÑтром літер The password is too similar to the old one Цей пароль надто Ñхожий на попередній The password contains the user name in some form Цей пароль ÑкимоÑÑŒ чином міÑтить ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача The password contains words from the real name of the user in some form Цей пароль міÑтить Ñлова зі Ñправжнього імені кориÑтувача в ÑкійÑÑŒ із форм The password contains forbidden words in some form Пароль міÑтить певні форми заборонених Ñлів The password contains less than %1 digits Цей пароль міÑтить менше ніж %1 Ñимвол The password contains too few digits Цей пароль міÑтить замало Ñимволів The password contains less than %1 uppercase letters У паролі міÑтитьÑÑ Ð¼ÐµÐ½ÑˆÐµ за %1 літер верхнього регіÑтру The password contains too few uppercase letters У паролі міÑтитьÑÑ Ð½Ð°Ð´Ñ‚Ð¾ мало літер верхнього регіÑтру The password contains less than %1 lowercase letters У паролі міÑтитьÑÑ Ð¼ÐµÐ½ÑˆÐµ за %1 літер нижнього регіÑтру The password contains too few lowercase letters У паролі міÑтитьÑÑ Ð½Ð°Ð´Ñ‚Ð¾ мало літер нижнього регіÑтру The password contains less than %1 non-alphanumeric characters Цей пароль міÑтить менше ніж %1 Ñимволів, Ñкі не Ñ” літерами або цифрами The password contains too few non-alphanumeric characters Цей пароль міÑтить надто мало Ñимволів, Ñкі не Ñ” літерами або цифрами The password is shorter than %1 characters Пароль Ñ” коротшим за %1 Ñимволів The password is too short Цей пароль занадто короткий The password is just rotated old one Пароль Ñ” оберненою верÑією Ñтарого Ð¿Ð°Ñ€Ð¾Ð»Ñ The password contains less than %1 character classes Пароль ÑкладаєтьÑÑ Ñ–Ð· Ñимволів, Ñкі належать до клаÑів, кількіÑть Ñких менша за %1 The password does not contain enough character classes КількіÑть клаÑів, до Ñких належать Ñимволи паролÑ, Ñ” надто малою The password contains more than %1 same characters consecutively У паролі міÑтитьÑÑ Ð¿Ð¾ÑлідовніÑть із понад %1 однакових Ñимволів The password contains too many same characters consecutively У паролі міÑтитьÑÑ Ð½Ð°Ð´Ñ‚Ð¾ довга поÑлідовніÑть із однакових Ñимволів The password contains more than %1 characters of the same class consecutively У паролі міÑтитьÑÑ Ð¿Ð¾ÑлідовніÑть із понад %1 Ñимволів одного клаÑу The password contains too many characters of the same class consecutively У паролі міÑтитьÑÑ Ð½Ð°Ð´Ñ‚Ð¾ довга поÑлідовніÑть із Ñимволів одного клаÑу The password contains monotonic sequence longer than %1 characters У паролі міÑтитьÑÑ Ð¿Ð¾ÑлідовніÑть із одного Ñимволу, Ñка Ñ” довшою за %1 Ñимволів The password contains too long of a monotonic character sequence У паролі міÑтитьÑÑ Ð½Ð°Ð´Ñ‚Ð¾ довга поÑлідовніÑть із одного Ñимволу No password supplied Пароль не надано Cannot obtain random numbers from the RNG device Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ випадкові чиÑла з приÑтрою RNG Password generation failed - required entropy too low for settings Ðе вдалоÑÑ Ñтворити пароль — не доÑÑгнуто вказаного у параметрах Ñ€Ñ–Ð²Ð½Ñ ÐµÐ½Ñ‚Ñ€Ð¾Ð¿Ñ–Ñ— The password fails the dictionary check - %1 Пароль не пройшов перевірки за Ñловником — %1 The password fails the dictionary check Пароль не пройшов перевірки за Ñловником Unknown setting - %1 Ðевідомий параметр – %1 Unknown setting Ðевідомий параметр Bad integer value of setting - %1 Помилкове цілочиÑельне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° — %1 Bad integer value Помилкове ціле Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Setting %1 is not of integer type Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° %1 не належить до типу цілих чиÑел Setting is not of integer type Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° не належить до типу цілих чиÑел Setting %1 is not of string type Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° %1 не належить до Ñ€Ñдкового типу Setting is not of string type Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° не належить до Ñ€Ñдкового типу Opening the configuration file failed Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл налаштувань The configuration file is malformed Ð¤Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° налаштувань Ñ” помилковим Fatal failure Фатальна помилка Unknown error Ðевідома помилка Password is empty Пароль Ñ” порожнім PackageChooserPage Form Форма Product Name Ðазва продукту TextLabel ТекÑтова мітка Long Product Description Довгий Ð¾Ð¿Ð¸Ñ Ð¿Ñ€Ð¾Ð´ÑƒÐºÑ‚Ñƒ Package Selection Вибір пакетів Please pick a product from the list. The selected product will be installed. Будь лаÑка, виберіть продукт зі ÑпиÑку. Буде вÑтановлено вибраний продукт. PackageChooserViewStep Packages Пакунки Page_Keyboard Form Форма Keyboard Model: Модель клавіатури: Type here to test your keyboard Ðапишіть тут, щоб перевірити клавіатуру Page_UserSetup Form Форма What is your name? Ваше ім'Ñ? What name do you want to use to log in? Яке ім'Ñ Ð²Ð¸ бажаєте викориÑтовувати Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ñƒ? Choose a password to keep your account safe. Оберіть пароль, щоб тримати ваш обліковий рахунок у безпеці. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>Введіть один й той Ñамий пароль двічі, Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€ÐºÐ¸ щодо помилок введеннÑ. Ðадійному паролю Ñлід міÑтити Ñуміш літер, чиÑел та розділових знаків, бути довжиною хоча б віÑім Ñимволів та регулÑрно змінюватиÑÑŒ.</small> What is the name of this computer? Ðазва цього комп'ютера? Your Full Name Ваше ім'Ñ Ð¿Ð¾Ð²Ð½Ñ–Ñтю login Ð·Ð°Ð¿Ð¸Ñ <small>This name will be used if you make the computer visible to others on a network.</small> <small>Цю назву буде викориÑтано, Ñкщо ви зробите комп'ютер видимим іншим у мережі.</small> Computer Name Ðазва комп'ютера Password Пароль Repeat Password Повторіть пароль When this box is checked, password-strength checking is done and you will not be able to use a weak password. Якщо позначено цей пункт, буде виконано перевірку ÑкладноÑті паролÑ. Ви не зможете ÑкориÑтатиÑÑ Ð½Ð°Ð´Ñ‚Ð¾ проÑтим паролем. Require strong passwords. Вимагати Ñкладні паролі. Log in automatically without asking for the password. Входити автоматично без паролю. Use the same password for the administrator account. ВикориÑтовувати той Ñамий пароль Ñ– Ð´Ð»Ñ Ð¾Ð±Ð»Ñ–ÐºÐ¾Ð²Ð¾Ð³Ð¾ рахунку адмініÑтратора. Choose a password for the administrator account. Оберіть пароль Ð´Ð»Ñ Ð¾Ð±Ð»Ñ–ÐºÐ¾Ð²Ð¾Ð³Ð¾ рахунку адмініÑтратора. <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Введіть один й той Ñамий пароль двічі, Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€ÐºÐ¸ щодо помилок введеннÑ.</small> PartitionLabelsView Root Корінь Home Домівка Boot Завантажувальний розділ EFI system EFI-ÑиÑтема Swap Резервна пам'Ñть New partition for %1 Ðовий розділ Ð´Ð»Ñ %1 New partition Ðовий розділ %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space Вільний проÑтір New partition Ðовий розділ Name Ðазва File System Файлова ÑиÑтема Mount Point Точка Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Size Розмір PartitionPage Form Форма Storage de&vice: &ПриÑтрій зберіганнÑ: &Revert All Changes Скинути вÑÑ– &зміни New Partition &Table Ðова &Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² Cre&ate С&творити &Edit З&мінити &Delete &Вилучити New Volume Group Створити групу томів Resize Volume Group Змінити розміри групи томів Deactivate Volume Group Вимкнути групу томів Remove Volume Group Вилучити групу томів I&nstall boot loader on: МіÑце вÑÑ‚&Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÑƒÐ²Ð°Ñ‡Ð°: Are you sure you want to create a new partition table on %1? Ви впевнені, що бажаєте Ñтворити нову таблицю розділів на %1? Can not create new partition Ðе вдалоÑÑ Ñтворити новий розділ The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² на %1 вже міÑтить %2 оÑновних розділи. Ð”Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð¾Ñновних розділів неможливе. Будь лаÑка, вилучіть один оÑновний розділ або додайте заміÑть нього розширений розділ. PartitionViewStep Gathering system information... Збір інформації про ÑиÑтему... Partitions Розділи Install %1 <strong>alongside</strong> another operating system. Ð’Ñтановити %1 <strong>поруч</strong> з іншою операційною ÑиÑтемою. <strong>Erase</strong> disk and install %1. <strong>ОчиÑтити</strong> диÑк та вÑтановити %1. <strong>Replace</strong> a partition with %1. <strong>Замінити</strong> розділ на %1. <strong>Manual</strong> partitioning. Розподіл диÑка <strong>вручну</strong>. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Ð’Ñтановити %1 <strong>поруч</strong> з іншою операційною ÑиÑтемою на диÑк <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>ОчиÑтити</strong> диÑк <strong>%2</strong> (%3) та вÑтановити %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Замінити</strong> розділ на диÑку <strong>%2</strong> (%3) на %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Розподіл диÑка <strong>%1</strong> (%2) <strong>вручну</strong>. Disk <strong>%1</strong> (%2) ДиÑк <strong>%1</strong> (%2) Current: Зараз: After: ПіÑлÑ: No EFI system partition configured Ðе налаштовано жодного ÑиÑтемного розділу EFI An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. Щоб запуÑтити %1, потрібен ÑиÑтемний розділ EFI.<br/><br/>Щоб налаштувати ÑиÑтемний розділ EFI, повернітьÑÑ Ñ– виберіть або Ñтворіть файлову ÑиÑтему FAT32 з увімкненим параметром <strong>esp</strong> та точкою Ð¼Ð¾Ð½Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ <strong>%2</strong>.<br/><br/>Ви можете продовжити, не налаштовуючи ÑиÑтемний розділ EFI, але тоді у вашої ÑиÑтеми можуть виникнути проблеми із запуÑком. EFI system partition flag not set Опцію ÑиÑтемного розділу EFI не вÑтановлено An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Ð”Ð»Ñ Ð·Ð°Ð¿ÑƒÑку %1 потрібен ÑиÑтемний розділ EFI.<br/><br/>Розділ налаштовано з точкою Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ <strong>%2</strong>, але Ð¾Ð¿Ñ†Ñ–Ñ <strong>esp</strong> не вÑтановлено.<br/>Щоб вÑтановити опцію, повернітьÑÑ Ñ‚Ð° відредагуйте розділ.<br/><br/>Ви можете продовжити не налаштовуючи цю опцію, але ваша ÑиÑтема може не запуÑкатиÑÑŒ. Boot partition not encrypted Завантажувальний розділ незашифрований A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. Було налаштовано окремий завантажувальний розділ порÑд із зашифрованим кореневим розділом, але завантажувальний розділ незашифрований.<br/><br/>ІÑнують проблеми з безпекою такого типу, оÑкільки важливі ÑиÑтемні файли зберігаютьÑÑ Ð½Ð° незашифрованому розділі.<br/>Ви можете продовжувати, Ñкщо бажаєте, але Ñ€Ð¾Ð·Ð±Ð»Ð¾ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¾Ñ— ÑиÑтеми відбудетьÑÑ Ð¿Ñ–Ð·Ð½Ñ–ÑˆÐµ під Ñ‡Ð°Ñ Ð·Ð°Ð¿ÑƒÑку ÑиÑтеми.<br/>Щоб зашифрувати завантажувальний розділ, повернітьÑÑ Ñ– Ñтворіть його знов, обравши <strong>Зашифрувати</strong> у вікні ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð². has at least one disk device available. має принаймні один доÑтупний диÑковий приÑтрій. There are no partitions to install on. Ðемає розділів Ð´Ð»Ñ Ð²ÑтановленнÑ. PlasmaLnfJob Plasma Look-and-Feel Job Ð—Ð°Ð²Ð´Ð°Ð½Ð½Ñ Ñ–Ð· Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸Ð³Ð»Ñду Ñ– поведінки Плазми Could not select KDE Plasma Look-and-Feel package Ðе вдалоÑÑ Ð²Ð¸Ð±Ñ€Ð°Ñ‚Ð¸ пакунок виглÑду Ñ– поведінки Плазми KDE PlasmaLnfPage Form Форма Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Будь лаÑка, виберіть параметри виглÑду Ñ– поведінки Ñтільниці Плазми KDE. Ви також можете пропуÑтити цей крок Ñ– налаштувати виглÑд Ñ– поведінку піÑÐ»Ñ Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ ÑиÑтеми. ÐатиÑÐºÐ°Ð½Ð½Ñ Ð¿ÑƒÐ½ÐºÑ‚Ñƒ вибору виглÑду Ñ– поведінки відкриє вікно із інтерактивним переглÑдом відповідних параметрів. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Будь лаÑка, виберіть параметри виглÑду Ñ– поведінки Ñтільниці Плазми KDE Ви також можете пропуÑтити цей крок Ñ– налаштувати виглÑд Ñ– поведінку піÑÐ»Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÑиÑтеми. ÐатиÑÐºÐ°Ð½Ð½Ñ Ð¿ÑƒÐ½ÐºÑ‚Ñƒ вибору виглÑду Ñ– поведінки відкриє вікно із інтерактивним переглÑдом відповідних параметрів. PlasmaLnfViewStep Look-and-Feel ВиглÑд Ñ– поведінка PreserveFiles Saving files for later ... Ð—Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð² на потім ... No files configured to save for later. Ðе налаштовано файлів Ð´Ð»Ñ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ Ð½Ð° майбутнє. Not all of the configured files could be preserved. Ðе уÑÑ– налаштовані файли може бути збережено. ProcessResult There was no output from the command. У результаті Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ не отримано виведених даних. Output: Виведені дані: External command crashed. Ð’Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð·Ð¾Ð²Ð½Ñ–ÑˆÐ½ÑŒÐ¾Ñ— команди завершилоÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾ÑŽ. Command <i>%1</i> crashed. Ðварійне Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ <i>%1</i>. External command failed to start. Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ зовнішню команду. Command <i>%1</i> failed to start. Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ команду <i>%1</i>. Internal error when starting command. Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° під Ñ‡Ð°Ñ Ñпроби виконати команду. Bad parameters for process job call. Ðеправильні параметри виклику Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸. External command failed to finish. Ðе вдалоÑÑ Ð·Ð°Ð²ÐµÑ€ÑˆÐ¸Ñ‚Ð¸ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð·Ð¾Ð²Ð½Ñ–ÑˆÐ½ÑŒÐ¾Ñ— команди. Command <i>%1</i> failed to finish in %2 seconds. Ðе вдалоÑÑ Ð·Ð°Ð²ÐµÑ€ÑˆÐ¸Ñ‚Ð¸ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ <i>%1</i> за %2 Ñекунд. External command finished with errors. Ð’Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð·Ð¾Ð²Ð½Ñ–ÑˆÐ½ÑŒÐ¾Ñ— команди завершено із помилками. Command <i>%1</i> finished with exit code %2. Ð’Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ <i>%1</i> завершено повідомленнÑм із кодом виходу %2. QObject Default Keyboard Model Типова модель клавіатури Default Типовий unknown невідома extended розширений unformatted не форматовано swap резервна пам'Ñть Unpartitioned space or unknown partition table Ðерозподілений проÑтір або невідома Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² (no mount point) (немає точки монтуваннÑ) Requirements checking for module <i>%1</i> is complete. Перевірку Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð²Ð¸Ð¼Ð¾Ð³ щодо Ð¼Ð¾Ð´ÑƒÐ»Ñ <i>%1</i> завершено. %1 (%2) language[name] (country[name]) %1 (%2) No product Ðемає продукту No description provided. ОпиÑу не надано. File not found Файл не знайдено Path <pre>%1</pre> must be an absolute path. ШлÑÑ… <pre>%1</pre> має бути абÑолютним. Could not create new random file <pre>%1</pre>. Ðе вдалоÑÑ Ñтворити випадковий файл <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Вилучити групу томів із назвою %1. Remove Volume Group named <strong>%1</strong>. Вилучити групу томів із назвою <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ЗаÑобу вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð½Ðµ вдалоÑÑ Ð²Ð¸Ð»ÑƒÑ‡Ð¸Ñ‚Ð¸ групу томів із назвою «%1». ReplaceWidget Form Форма Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Виберіть міÑце вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ %1.<br/><font color="red">Увага:</font> у результаті Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ñ†Ñ–Ñ”Ñ— дії уÑÑ– файли на вибраному розділі буде витерто. The selected item does not appear to be a valid partition. Вибраний елемент не Ñ” дійÑним розділом. %1 cannot be installed on empty space. Please select an existing partition. %1 не можна вÑтановити на порожній проÑтір. Будь лаÑка, оберіть дійÑний розділ. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 не можна вÑтановити на розширений розділ. Будь лаÑка, оберіть дійÑний первинний або логічний розділ. %1 cannot be installed on this partition. %1 не можна вÑтановити на цей розділ. Data partition (%1) Розділ з даними (%1) Unknown system partition (%1) Ðевідомий ÑиÑтемний розділ (%1) %1 system partition (%2) СиÑтемний розділ %1 (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>Розділ %1 замалий Ð´Ð»Ñ %2. Будь лаÑка оберіть розділ розміром хоча б %3 Гб. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/>СиÑтемний розділ EFI у цій ÑиÑтемі не знайдено. Ð”Ð»Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ %1, будь лаÑка, повернітьÑÑ Ð½Ð°Ð·Ð°Ð´ Ñ– ÑкориÑтайтеÑÑ Ñ€Ð¾Ð·Ð¿Ð¾Ð´Ñ–Ð»ÐµÐ½Ð½Ñм вручну. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>%1 буде вÑтановлено на %2.<br/><font color="red">Увага: </font>вÑÑ– дані на розділі %2 буде загублено. The EFI system partition at %1 will be used for starting %2. СиÑтемний розділ EFI на %1 буде викориÑтано Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑку %2. EFI system partition: СиÑтемний розділ EFI: ResizeFSJob Resize Filesystem Job Ð—Ð°Ð²Ð´Ð°Ð½Ð½Ñ Ð·Ñ– зміни розмірів файлової ÑиÑтеми Invalid configuration Ðекоректні Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ The file-system resize job has an invalid configuration and will not run. Ð—Ð°Ð²Ð´Ð°Ð½Ð½Ñ Ð·Ñ– зміни розмірів файлової ÑиÑтеми налаштовано некоректно. Його не буде виконано. KPMCore not Available Ðемає доÑтупу до KPMCore Calamares cannot start KPMCore for the file-system resize job. Calamares не вдалоÑÑ Ð·Ð°Ð¿ÑƒÑтити KPMCore Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ Ð·Ñ– зміни розмірів файлової ÑиÑтеми. Resize Failed Помилка під Ñ‡Ð°Ñ Ð·Ð¼Ñ–Ð½Ð¸ розмірів The filesystem %1 could not be found in this system, and cannot be resized. Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ файлову ÑиÑтему %1 у цій ÑиÑтемі. Зміна розмірів цієї файлової ÑиÑтеми неможлива. The device %1 could not be found in this system, and cannot be resized. Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ приÑтрій %1 у цій ÑиÑтемі. Зміна розмірів файлової ÑиÑтеми на приÑтрої неможлива. The filesystem %1 cannot be resized. Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ зміну розмірів файлової ÑиÑтеми %1. The device %1 cannot be resized. Ðе вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ розміри приÑтрою %1. The filesystem %1 must be resized, but cannot. Розміри файлової ÑиÑтеми %1 має бути змінено, але виконати зміну не вдалоÑÑ. The device %1 must be resized, but cannot Розміри приÑтрою %1 має бути змінено, але виконати зміну не вдалоÑÑ ResizePartitionJob Resize partition %1. Змінити розмір розділу %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Змінити розміри розділу у <strong>%2 МіБ</strong> <strong>%1</strong> до <strong>%3 МіБ</strong>. Resizing %2MiB partition %1 to %3MiB. Змінюємо розміри розділу %2 МіБ %1 до %3 МіБ. The installer failed to resize partition %1 on disk '%2'. ЗаÑобу вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð½Ðµ вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ розміри розділу %1 на диÑку «%2». ResizeVolumeGroupDialog Resize Volume Group Змінити розміри групи томів ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Змінити розміри групи томів із назвою %1 з %2 до %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. Змінити розміри групи томів із назвою <strong>%1</strong> з <strong>%2</strong> до <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ЗаÑобу вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð½Ðµ вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ розміри групи томів із назвою «%1». ResultsListDialog For best results, please ensure that this computer: Щоб отримати найкращий результат, будь лаÑка, переконайтеÑÑ, що цей комп'ютер: System requirements Вимоги до ÑиÑтеми ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> Цей комп'ютер не задовольнÑÑ” мінімальні вимоги Ð´Ð»Ñ Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ %1.<br/>ÐÐ°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ продовжити. <a href="#details">Докладніше...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> Цей комп'ютер не задовольнÑÑ” мінімальні вимоги Ð´Ð»Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ %1.<br/>Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ продовжити. <a href="#details">Докладніше...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. Цей комп'ютер не задовольнÑÑ” рекомендовані вимоги щодо Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ %1. Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¼Ð¾Ð¶Ð½Ð° продовжити, але деÑкі можливоÑті можуть виÑвитиÑÑ Ð½ÐµÐ´Ð¾Ñтупними. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. Цей комп'ютер не задовольнÑÑ” рекомендовані вимоги Ð´Ð»Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ %1.<br/>Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¼Ð¾Ð¶Ð½Ð° продовжити, але деÑкі можливоÑті можуть виÑвитиÑÑ Ð½ÐµÐ´Ð¾Ñтупними. This program will ask you some questions and set up %2 on your computer. Ð¦Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð° поÑтавить кілька питань та вÑтановить %2 на ваш комп'ютер. ScanningDialog Scanning storage devices... Скануємо приÑтрої зберіганнÑ... Partitioning Поділ на розділи SetHostNameJob Set hostname %1 Ð’Ñтановити назву вузла %1 Set hostname <strong>%1</strong>. Ð’Ñтановити назву вузла <strong>%1</strong>. Setting hostname %1. Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð½Ð°Ð·Ð²Ð¸ вузла %1. Internal Error Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Cannot write hostname to target system Ðе вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати назву вузла до ÑиÑтеми Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Ð’Ñтановити модель клавіатури %1, розкладку %2-%3 Failed to write keyboard configuration for the virtual console. Ðе вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ»Ð°Ð²Ñ–Ð°Ñ‚ÑƒÑ€Ð¸ Ð´Ð»Ñ Ð²Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð¾Ñ— конÑолі. Failed to write to %1 Ðевдача під Ñ‡Ð°Ñ Ð·Ð°Ð¿Ð¸Ñу до %1 Failed to write keyboard configuration for X11. Ðевдача під Ñ‡Ð°Ñ Ð·Ð°Ð¿Ð¸Ñу конфігурації клавіатури Ð´Ð»Ñ X11. Failed to write keyboard configuration to existing /etc/default directory. Ðе вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ»Ð°Ð²Ñ–Ð°Ñ‚ÑƒÑ€Ð¸ до наÑвного каталогу /etc/default. SetPartFlagsJob Set flags on partition %1. Ð’Ñтановити прапорці на розділі %1. Set flags on %1MiB %2 partition. Ð’Ñтановити прапорці Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ у %1 МіБ %2. Set flags on new partition. Ð’Ñтановити прапорці на новому розділі. Clear flags on partition <strong>%1</strong>. ОчиÑтити прапорці на розділі <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. ЗнÑти прапорці на розділі у %1 МіБ <strong>%2</strong>. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ Ð½Ð° розділі у %1 МіБ <strong>%2</strong> Ñк <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Знімаємо прапорці на розділі у %1 МіБ <strong>%2</strong>. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Ð’Ñтановлюємо прапорці <strong>%3</strong> на розділі у %1 МіБ <strong>%2</strong>. Clear flags on new partition. ОчиÑтити прапорці на новому розділі. Flag partition <strong>%1</strong> as <strong>%2</strong>. Ð’Ñтановити прапорці <strong>%2</strong> Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ <strong>%1</strong>. Flag new partition as <strong>%1</strong>. Ð’Ñтановити прапорці <strong>%1</strong> Ð´Ð»Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ розділу. Clearing flags on partition <strong>%1</strong>. Очищуємо прапорці Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ <strong>%1</strong>. Clearing flags on new partition. Очищуємо прапорці Ð´Ð»Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ розділу. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Ð’Ñтановлюємо прапорці <strong>%2</strong> Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. Ð’Ñтановлюємо прапорці <strong>%1</strong> Ð´Ð»Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ розділу. The installer failed to set flags on partition %1. ЗаÑобу вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð½Ðµ вдалоÑÑ Ð²Ñтановити прапорці Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %1. SetPasswordJob Set password for user %1 Ð’Ñтановити пароль Ð´Ð»Ñ ÐºÐ¾Ñ€Ð¸Ñтувача %1 Setting password for user %1. Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð¾Ð»ÑŽ Ð´Ð»Ñ ÐºÐ¾Ñ€Ð¸Ñтувача %1. Bad destination system path. Поганий шлÑÑ… Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÑиÑтеми. rootMountPoint is %1 Коренева точка Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ %1 Cannot disable root account. Ðеможливо вимкнути обліковий Ð·Ð°Ð¿Ð¸Ñ root. passwd terminated with error code %1. passwd завершив роботу з кодом помилки %1. Cannot set password for user %1. Ðе можу вÑтановити пароль Ð´Ð»Ñ ÐºÐ¾Ñ€Ð¸Ñтувача %1. usermod terminated with error code %1. usermod завершилаÑÑ Ð· кодом помилки %1. SetTimezoneJob Set timezone to %1/%2 Ð’Ñтановити чаÑову зону %1.%2 Cannot access selected timezone path. Ðе можу діÑтатиÑÑ Ð´Ð¾ шлÑху обраної чаÑової зони. Bad path: %1 Поганий шлÑÑ…: %1 Cannot set timezone. Ðе можу вÑтановити чаÑову зону. Link creation failed, target: %1; link name: %2 Ðевдача під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¿Ð¾ÑиланнÑ, ціль: %1, назва поÑиланнÑ: %2 Cannot set timezone, Ðе вдалоÑÑ Ð²Ñтановити чаÑовий поÑÑ. Cannot open /etc/timezone for writing Ðе можу відкрити /etc/timezone Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу ShellProcessJob Shell Processes Job Ð—Ð°Ð²Ð´Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑів командної оболонки SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 з %L2 SummaryPage This is an overview of what will happen once you start the setup procedure. Це оглÑд того, що трапитьÑÑ ÐºÐ¾Ð»Ð¸ ви почнете процедуру налаштовуваннÑ. This is an overview of what will happen once you start the install procedure. Це оглÑд того, що трапитьÑÑ ÐºÐ¾Ð»Ð¸ ви почнете процедуру вÑтановленнÑ. SummaryViewStep Summary ОглÑд TrackingInstallJob Installation feedback Відгуки щодо вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Sending installation feedback. ÐадÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð²Ñ–Ð´Ð³ÑƒÐºÑ–Ð² щодо вÑтановленнÑ. Internal error in install-tracking. Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° під Ñ‡Ð°Ñ ÑÑ‚ÐµÐ¶ÐµÐ½Ð½Ñ Ð·Ð° вÑтановленнÑм. HTTP request timed out. Перевищено Ñ‡Ð°Ñ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð° обробку запиту HTTP. TrackingMachineNeonJob Machine feedback Дані щодо комп'ютера Configuring machine feedback. ÐÐ°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð°Ð´ÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… щодо комп'ютера. Error in machine feedback configuration. Помилка у налаштуваннÑÑ… надÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… щодо комп'ютера. Could not configure machine feedback correctly, script error %1. Ðе вдалоÑÑ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ñ‚Ð¸ надÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… щодо комп'ютера належним чином. Помилка Ñкрипту: %1. Could not configure machine feedback correctly, Calamares error %1. Ðе вдалоÑÑ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ñ‚Ð¸ надÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… щодо комп'ютера належним чином. Помилка у Calamares: %1. TrackingPage Form Форма Placeholder Замінник <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>Якщо буде позначено цей пункт, програма <span style=" font-weight:600;">не надÑилатиме ніÑких даних</span> щодо вÑтановленої ÑиÑтеми.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">ÐатиÑніть, щоб дізнатиÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про відгуки кориÑтувачів</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. Ð¡Ñ‚ÐµÐ¶ÐµÐ½Ð½Ñ Ð·Ð° вÑтановленнÑм допоможе визначити %1 кількіÑть кориÑтувачів, параметри обладнаннÑ, на Ñкому вÑтановлюють %1 Ñ– (Ñкщо позначено оÑтанні два пункти нижче) неперервно отримувати дані щодо програм, Ñкі викориÑтовуютьÑÑ Ñƒ ÑиÑтемі. Щоб ознайомитиÑÑ Ñ–Ð· даними, Ñкі буде надіÑлано, натиÑніть піктограму довідки, розташовану порÑд із кожним із варіантів. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. Якщо буде позначено цей пункт, програма надішле дані щодо вÑтановленої ÑиÑтеми та обладнаннÑ. Ці дані буде <b>надіÑлано лише один раз</b> піÑÐ»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð²ÑтановленнÑ. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. Якщо позначити цей пункт, програма <b>періодично</b> надÑилатиме дані щодо вÑтановленої вами ÑиÑтеми, Ð¾Ð±Ð»Ð°Ð´Ð½Ð°Ð½Ð½Ñ Ñ– програм до %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. Якщо позначити цей пункт, програма <b>регулÑрно</b> надÑилатиме дані щодо вÑтановленої вами ÑиÑтеми, обладнаннÑ, програм та кориÑÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÑиÑтемою до %1. TrackingViewStep Feedback Відгуки UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Якщо за цим комп'ютером працюватимуть декілька кориÑтувачів, ви можете Ñтворити декілька облікових запиÑів піÑÐ»Ñ Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Якщо за цим комп'ютером працюватимуть декілька кориÑтувачів, ви можете Ñтворити декілька облікових запиÑів піÑÐ»Ñ Ð²ÑтановленнÑ.</small> Your username is too long. Ваше ім'Ñ Ð·Ð°Ð´Ð¾Ð²Ð³Ðµ. Your username must start with a lowercase letter or underscore. Ваше ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача має починатиÑÑ Ñ–Ð· малої літери або Ñимволу підкреÑлюваннÑ. Only lowercase letters, numbers, underscore and hyphen are allowed. Можна викориÑтовувати лише латинÑькі літери нижнього регіÑтру, цифри, Ñимволи підкреÑÐ»ÑŽÐ²Ð°Ð½Ð½Ñ Ñ‚Ð° дефіÑи. Only letters, numbers, underscore and hyphen are allowed. Можна викориÑтовувати лише латинÑькі літери, цифри, Ñимволи підкреÑÐ»ÑŽÐ²Ð°Ð½Ð½Ñ Ñ‚Ð° дефіÑи. Your hostname is too short. Ðазва вузла Ñ” надто короткою. Your hostname is too long. Ðазва вузла Ñ” надто довгою. Your passwords do not match! Паролі не збігаютьÑÑ! UsersViewStep Users КориÑтувачі VariantModel Key Ключ Value Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ VolumeGroupBaseDialog Create Volume Group Створити групу томів List of Physical Volumes СпиÑок фізичний томів Volume Group Name: Ðазва групи томів: Volume Group Type: Тип групи томів: Physical Extent Size: Розмір фізичного розширеннÑ: MiB МіБ Total Size: Загальний розмір: Used Size: ВикориÑтано: Total Sectors: Загалом Ñекторів: Quantity of LVs: КількіÑть логічних томів: WelcomePage Form Форма Select application and system language Виберіть мову програм Ñ– ÑиÑтеми Open donations website Відкрити Ñторінку Ñайта із поÑиланнÑми Ð´Ð»Ñ Ñ„Ñ–Ð½Ð°Ð½Ñової підтримки &Donate Підтримати &фінанÑово Open help and support website Відкрити Ñторінку Ñайта із поÑиланнÑми на довідку та технічну підтримку Open issues and bug-tracking website Відкрити Ñторінку Ñайта ÑÑ‚ÐµÐ¶ÐµÐ½Ð½Ñ Ð·Ð° вадами у програмі Open release notes website Відкрити Ñторінку Ñайта із нотатками щодо випуÑку &Release notes При&мітки до випуÑку &Known issues &Відомі проблеми &Support Під&тримка &About &Про програму <h1>Welcome to the %1 installer.</h1> <h1>ЛаÑкаво проÑимо до заÑобу вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ %1.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>ЛаÑкаво проÑимо до заÑобу вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Calamares Ð´Ð»Ñ %1.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Вітаємо у програмі Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Calamares Ð´Ð»Ñ %1.</h1> <h1>Welcome to %1 setup.</h1> <h1>Вітаємо у програмі Ð´Ð»Ñ Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ %1.</h1> About %1 setup Про заÑіб Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ %1 About %1 installer Про заÑіб вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ %1 <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. <h1>%1</h1><br/><strong>%2<br/>Ð´Ð»Ñ %3</strong><br/><br/>© Teo Mrnjavac &lt;teo@kde.org&gt;, 2014–2017<br/>© Adriaan de Groot &lt;groot@kde.org&gt;, 2017–2019<br/>ДÑкуємо <a href="https://calamares.io/team/">команді розробників Calamares</a> та <a href="https://www.transifex.com/calamares/calamares/">команді перекладачів Calamares</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> розроблено за фінанÑової підтримки <br/><a href="http://www.blue-systems.com/">Blue Systems</a> — Liberating Software. %1 support Підтримка %1 WelcomeQmlViewStep Welcome Вітаємо WelcomeViewStep Welcome Вітаємо notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>Це приклад нотаток щодо випуÑку.</p> welcomeq <h3>%1 <quote>%2</quote></h3> <h3>%1 <quote>%2</quote></h3> About Про програму Support Підтримка Known issues Відомі вади Release notes Ðотатки щодо випуÑку Donate Підтримати фінанÑово calamares-3.2.20/lang/calamares_ur.ts000066400000000000000000004566421362604102500174750ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. BootLoaderModel Master Boot Record of %1 Boot Partition System Partition Do not install a boot loader %1 (%2) Calamares::BlankViewStep Blank Page Calamares::DebugWindow Form GlobalStorage JobQueue Modules Type: none Interface: Tools Reload Stylesheet Widget Tree Debug information Calamares::ExecutionViewStep Set up Install Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Calamares::PythonJob Running %1 operation. Bad working directory path Working directory %1 for python job %2 is not readable. Bad main script file Main script file %1 for python job %2 is not readable. Boost.Python error in job "%1". Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager &Back &Next &Cancel Cancel setup without changing the system. Cancel installation without changing the system. Setup Failed Would you like to paste the install log to the web? Install Log Paste URL The upload was unsuccessful. No web-paste was done. Calamares Initialization Failed %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. <br/>The following modules could not be loaded: Continue with installation? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Set up &Install Setup is complete. Close the setup program. Cancel setup? Cancel installation? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. &Yes &No &Close Continue with setup? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> &Install now Go &back &Done The installation is complete. Close the installer. Error Installation Failed CalamaresPython::Helper Unknown exception type unparseable Python error unparseable Python traceback Unfetchable Python error. CalamaresUtils Install log posted to: %1 CalamaresWindow %1 Setup Program %1 Installer Show debug information CheckerContainer Gathering system information... ChoicePage Form After: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Boot loader location: Select storage de&vice: Current: Reuse %1 as home partition for %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. <strong>Select a partition to install on</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. The EFI system partition at %1 will be used for starting %2. EFI system partition: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. No Swap Reuse Swap Swap (no Hibernate) Swap (with Hibernate) Swap to file <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. ClearMountsJob Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 ClearTempMountsJob Clear all temporary mounts. Clearing all temporary mounts. Cannot get list of temporary mounts. Cleared all temporary mounts. CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition MiB Partition &Type: &Primary E&xtended Fi&le System: LVM LV name Flags: &Mount Point: Si&ze: En&crypt Logical Primary GPT Mountpoint already in use. Please select another one. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. The installer failed to create partition on disk '%1'. CreatePartitionTableDialog Create Partition Table Creating a new partition table will delete all existing data on the disk. What kind of partition table do you want to create? Master Boot Record (MBR) GUID Partition Table (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Creating new %1 partition table on %2. The installer failed to create a partition table on %1. CreateUserJob Create user %1 Create user <strong>%1</strong>. Creating user %1. Sudoers dir is not writable. Cannot create sudoers file for writing. Cannot chmod sudoers file. Cannot open groups file for reading. CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. Delete partition <strong>%1</strong>. Deleting partition %1. The installer failed to delete partition %1. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. This device has a <strong>%1</strong> partition table. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - (%2) device[name] - (device-node[name]) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Failed to open %1 DummyCppJob Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Content: &Keep Format Warning: Formatting the partition will erase all existing data. &Mount Point: Si&ze: MiB Fi&le System: Flags: Mountpoint already in use. Please select another one. EncryptWidget Form En&crypt system Passphrase Confirm passphrase Please enter the same passphrase in both boxes. FillGlobalStorageJob Set partition information Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Install boot loader on <strong>%1</strong>. Setting up mount points. FinishedPage Form <Restart checkbox tooltip> &Restart now <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. FinishedViewStep Finish Setup Complete Installation Complete The setup of %1 is complete. The installation of %1 is complete. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatting partition %1 with file system %2. The installer failed to format partition %1 on disk '%2'. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source The system is not plugged in to a power source. is connected to the Internet The system is not connected to the Internet. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Please install KDE Konsole and try again! Executing script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script KeyboardPage Set keyboard model to %1.<br/> Set keyboard layout to %1/%2. KeyboardViewStep Keyboard LCLocaleDialog System locale setting The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. &Cancel &OK LicensePage Form <h1>License Agreement</h1> I accept the terms and conditions above. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> File: %1 Show the license text Open license agreement in browser. Hide license text LocalePage The system language will be set to %1. The numbers and dates locale will be set to %1. Region: Zone: &Change... Set timezone to %1/%2.<br/> LocaleViewStep Location LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Configuration Error No root mount point is set for MachineId. NetInstallPage Name Description Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Incorrect configuration) NetInstallViewStep Package selection Office software Office package Browser software Browser package Web browser Kernel Services Login Desktop Applications NotesQmlViewStep Notes OEMPage Ba&tch: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> OEMViewStep OEM Configuration Set the OEM Batch Identifier to <code>%1</code>. PWQ Password is too short Password is too long Password is too weak Memory allocation error when setting '%1' Memory allocation error The password is the same as the old one The password is a palindrome The password differs with case changes only The password is too similar to the old one The password contains the user name in some form The password contains words from the real name of the user in some form The password contains forbidden words in some form The password contains less than %1 digits The password contains too few digits The password contains less than %1 uppercase letters The password contains too few uppercase letters The password contains less than %1 lowercase letters The password contains too few lowercase letters The password contains less than %1 non-alphanumeric characters The password contains too few non-alphanumeric characters The password is shorter than %1 characters The password is too short The password is just rotated old one The password contains less than %1 character classes The password does not contain enough character classes The password contains more than %1 same characters consecutively The password contains too many same characters consecutively The password contains more than %1 characters of the same class consecutively The password contains too many characters of the same class consecutively The password contains monotonic sequence longer than %1 characters The password contains too long of a monotonic character sequence No password supplied Cannot obtain random numbers from the RNG device Password generation failed - required entropy too low for settings The password fails the dictionary check - %1 The password fails the dictionary check Unknown setting - %1 Unknown setting Bad integer value of setting - %1 Bad integer value Setting %1 is not of integer type Setting is not of integer type Setting %1 is not of string type Setting is not of string type Opening the configuration file failed The configuration file is malformed Fatal failure Unknown error Password is empty PackageChooserPage Form Product Name TextLabel Long Product Description Package Selection Please pick a product from the list. The selected product will be installed. PackageChooserViewStep Packages Page_Keyboard Form Keyboard Model: Type here to test your keyboard Page_UserSetup Form What is your name? What name do you want to use to log in? Choose a password to keep your account safe. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> What is the name of this computer? Your Full Name login <small>This name will be used if you make the computer visible to others on a network.</small> Computer Name Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Use the same password for the administrator account. Choose a password for the administrator account. <small>Enter the same password twice, so that it can be checked for typing errors.</small> PartitionLabelsView Root Home Boot EFI system Swap New partition for %1 New partition %1 %2 size[number] filesystem[name] PartitionModel Free Space New partition Name File System Mount Point Size PartitionPage Form Storage de&vice: &Revert All Changes New Partition &Table Cre&ate &Edit &Delete New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group I&nstall boot loader on: Are you sure you want to create a new partition table on %1? Can not create new partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. PartitionViewStep Gathering system information... Partitions Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <strong>Replace</strong> a partition with %1. <strong>Manual</strong> partitioning. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Current: After: No EFI system partition configured An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. EFI system partition flag not set An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: External command crashed. Command <i>%1</i> crashed. External command failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Bad parameters for process job call. External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Command <i>%1</i> finished with exit code %2. QObject Default Keyboard Model Default unknown extended unformatted swap Unpartitioned space or unknown partition table (no mount point) Requirements checking for module <i>%1</i> is complete. %1 (%2) language[name] (country[name]) No product No description provided. File not found Path <pre>%1</pre> must be an absolute path. Could not create new random file <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. The selected item does not appear to be a valid partition. %1 cannot be installed on empty space. Please select an existing partition. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 cannot be installed on this partition. Data partition (%1) Unknown system partition (%1) %1 system partition (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. The EFI system partition at %1 will be used for starting %2. EFI system partition: ResizeFSJob Resize Filesystem Job Invalid configuration The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. ResizeVolumeGroupDialog Resize Volume Group ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: System requirements ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. This program will ask you some questions and set up %2 on your computer. ScanningDialog Scanning storage devices... Partitioning SetHostNameJob Set hostname %1 Set hostname <strong>%1</strong>. Setting hostname %1. Internal Error Cannot write hostname to target system SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Failed to write keyboard configuration for the virtual console. Failed to write to %1 Failed to write keyboard configuration for X11. Failed to write keyboard configuration to existing /etc/default directory. SetPartFlagsJob Set flags on partition %1. Set flags on %1MiB %2 partition. Set flags on new partition. Clear flags on partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag new partition as <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. SetPasswordJob Set password for user %1 Setting password for user %1. Bad destination system path. rootMountPoint is %1 Cannot disable root account. passwd terminated with error code %1. Cannot set password for user %1. usermod terminated with error code %1. SetTimezoneJob Set timezone to %1/%2 Cannot access selected timezone path. Bad path: %1 Cannot set timezone. Link creation failed, target: %1; link name: %2 Cannot set timezone, Cannot open /etc/timezone for writing ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) SummaryPage This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. SummaryViewStep Summary TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingMachineNeonJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form Placeholder <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. TrackingViewStep Feedback UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> Your username is too long. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Only letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Your hostname is too long. Your passwords do not match! UsersViewStep Users VariantModel Key Value VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB Total Size: Used Size: Total Sectors: Quantity of LVs: WelcomePage Form Select application and system language Open donations website &Donate Open help and support website Open issues and bug-tracking website Open release notes website &Release notes &Known issues &Support &About <h1>Welcome to the %1 installer.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Welcome to %1 setup.</h1> About %1 setup About %1 installer <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support WelcomeQmlViewStep Welcome WelcomeViewStep Welcome notesqml <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> About Support Known issues Release notes Donate calamares-3.2.20/lang/calamares_uz.ts000066400000000000000000004565641362604102500175100ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. BootLoaderModel Master Boot Record of %1 Boot Partition System Partition Do not install a boot loader %1 (%2) Calamares::BlankViewStep Blank Page Calamares::DebugWindow Form GlobalStorage JobQueue Modules Type: none Interface: Tools Reload Stylesheet Widget Tree Debug information Calamares::ExecutionViewStep Set up Install Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Calamares::PythonJob Running %1 operation. Bad working directory path Working directory %1 for python job %2 is not readable. Bad main script file Main script file %1 for python job %2 is not readable. Boost.Python error in job "%1". Calamares::QmlViewStep Loading ... QML Step <i>%1</i>. Loading failed. Calamares::RequirementsChecker Waiting for %n module(s). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager &Back &Next &Cancel Cancel setup without changing the system. Cancel installation without changing the system. Setup Failed Would you like to paste the install log to the web? Install Log Paste URL The upload was unsuccessful. No web-paste was done. Calamares Initialization Failed %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. <br/>The following modules could not be loaded: Continue with installation? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> &Set up now &Set up &Install Setup is complete. Close the setup program. Cancel setup? Cancel installation? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. &Yes &No &Close Continue with setup? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> &Install now Go &back &Done The installation is complete. Close the installer. Error Installation Failed CalamaresPython::Helper Unknown exception type unparseable Python error unparseable Python traceback Unfetchable Python error. CalamaresUtils Install log posted to: %1 CalamaresWindow %1 Setup Program %1 Installer Show debug information CheckerContainer Gathering system information... ChoicePage Form After: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Boot loader location: Select storage de&vice: Current: Reuse %1 as home partition for %2. <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. <strong>Select a partition to install on</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. The EFI system partition at %1 will be used for starting %2. EFI system partition: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. No Swap Reuse Swap Swap (no Hibernate) Swap (with Hibernate) Swap to file <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. ClearMountsJob Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 ClearTempMountsJob Clear all temporary mounts. Clearing all temporary mounts. Cannot get list of temporary mounts. Cleared all temporary mounts. CommandList Could not run command. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command needs to know the user's name, but no username is defined. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition MiB Partition &Type: &Primary E&xtended Fi&le System: LVM LV name Flags: &Mount Point: Si&ze: En&crypt Logical Primary GPT Mountpoint already in use. Please select another one. CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. The installer failed to create partition on disk '%1'. CreatePartitionTableDialog Create Partition Table Creating a new partition table will delete all existing data on the disk. What kind of partition table do you want to create? Master Boot Record (MBR) GUID Partition Table (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Creating new %1 partition table on %2. The installer failed to create a partition table on %1. CreateUserJob Create user %1 Create user <strong>%1</strong>. Creating user %1. Sudoers dir is not writable. Cannot create sudoers file for writing. Cannot chmod sudoers file. Cannot open groups file for reading. CreateVolumeGroupDialog Create Volume Group CreateVolumeGroupJob Create new volume group named %1. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. Delete partition <strong>%1</strong>. Deleting partition %1. The installer failed to delete partition %1. DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. This device has a <strong>%1</strong> partition table. This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - (%2) device[name] - (device-node[name]) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Failed to open %1 DummyCppJob Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Content: &Keep Format Warning: Formatting the partition will erase all existing data. &Mount Point: Si&ze: MiB Fi&le System: Flags: Mountpoint already in use. Please select another one. EncryptWidget Form En&crypt system Passphrase Confirm passphrase Please enter the same passphrase in both boxes. FillGlobalStorageJob Set partition information Install %1 on <strong>new</strong> %2 system partition. Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. Install boot loader on <strong>%1</strong>. Setting up mount points. FinishedPage Form <Restart checkbox tooltip> &Restart now <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. FinishedViewStep Finish Setup Complete Installation Complete The setup of %1 is complete. The installation of %1 is complete. FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatting partition %1 with file system %2. The installer failed to format partition %1 on disk '%2'. GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source The system is not plugged in to a power source. is connected to the Internet The system is not connected to the Internet. is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed Please install KDE Konsole and try again! Executing script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script KeyboardPage Set keyboard model to %1.<br/> Set keyboard layout to %1/%2. KeyboardViewStep Keyboard LCLocaleDialog System locale setting The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. &Cancel &OK LicensePage Form <h1>License Agreement</h1> I accept the terms and conditions above. Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License LicenseWidget URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> File: %1 Show the license text Open license agreement in browser. Hide license text LocalePage The system language will be set to %1. The numbers and dates locale will be set to %1. Region: Zone: &Change... Set timezone to %1/%2.<br/> LocaleViewStep Location LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. Configuration Error No root mount point is set for MachineId. NetInstallPage Name Description Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Incorrect configuration) NetInstallViewStep Package selection Office software Office package Browser software Browser package Web browser Kernel Services Login Desktop Applications NotesQmlViewStep Notes OEMPage Ba&tch: <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> OEMViewStep OEM Configuration Set the OEM Batch Identifier to <code>%1</code>. PWQ Password is too short Password is too long Password is too weak Memory allocation error when setting '%1' Memory allocation error The password is the same as the old one The password is a palindrome The password differs with case changes only The password is too similar to the old one The password contains the user name in some form The password contains words from the real name of the user in some form The password contains forbidden words in some form The password contains less than %1 digits The password contains too few digits The password contains less than %1 uppercase letters The password contains too few uppercase letters The password contains less than %1 lowercase letters The password contains too few lowercase letters The password contains less than %1 non-alphanumeric characters The password contains too few non-alphanumeric characters The password is shorter than %1 characters The password is too short The password is just rotated old one The password contains less than %1 character classes The password does not contain enough character classes The password contains more than %1 same characters consecutively The password contains too many same characters consecutively The password contains more than %1 characters of the same class consecutively The password contains too many characters of the same class consecutively The password contains monotonic sequence longer than %1 characters The password contains too long of a monotonic character sequence No password supplied Cannot obtain random numbers from the RNG device Password generation failed - required entropy too low for settings The password fails the dictionary check - %1 The password fails the dictionary check Unknown setting - %1 Unknown setting Bad integer value of setting - %1 Bad integer value Setting %1 is not of integer type Setting is not of integer type Setting %1 is not of string type Setting is not of string type Opening the configuration file failed The configuration file is malformed Fatal failure Unknown error Password is empty PackageChooserPage Form Product Name TextLabel Long Product Description Package Selection Please pick a product from the list. The selected product will be installed. PackageChooserViewStep Packages Page_Keyboard Form Keyboard Model: Type here to test your keyboard Page_UserSetup Form What is your name? What name do you want to use to log in? Choose a password to keep your account safe. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> What is the name of this computer? Your Full Name login <small>This name will be used if you make the computer visible to others on a network.</small> Computer Name Password Repeat Password When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Use the same password for the administrator account. Choose a password for the administrator account. <small>Enter the same password twice, so that it can be checked for typing errors.</small> PartitionLabelsView Root Home Boot EFI system Swap New partition for %1 New partition %1 %2 size[number] filesystem[name] PartitionModel Free Space New partition Name File System Mount Point Size PartitionPage Form Storage de&vice: &Revert All Changes New Partition &Table Cre&ate &Edit &Delete New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group I&nstall boot loader on: Are you sure you want to create a new partition table on %1? Can not create new partition The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. PartitionViewStep Gathering system information... Partitions Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <strong>Replace</strong> a partition with %1. <strong>Manual</strong> partitioning. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Current: After: No EFI system partition configured An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. EFI system partition flag not set An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Boot partition not encrypted A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Could not select KDE Plasma Look-and-Feel package PlasmaLnfPage Form Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... No files configured to save for later. Not all of the configured files could be preserved. ProcessResult There was no output from the command. Output: External command crashed. Command <i>%1</i> crashed. External command failed to start. Command <i>%1</i> failed to start. Internal error when starting command. Bad parameters for process job call. External command failed to finish. Command <i>%1</i> failed to finish in %2 seconds. External command finished with errors. Command <i>%1</i> finished with exit code %2. QObject Default Keyboard Model Default unknown extended unformatted swap Unpartitioned space or unknown partition table (no mount point) Requirements checking for module <i>%1</i> is complete. %1 (%2) language[name] (country[name]) No product No description provided. File not found Path <pre>%1</pre> must be an absolute path. Could not create new random file <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. The selected item does not appear to be a valid partition. %1 cannot be installed on empty space. Please select an existing partition. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 cannot be installed on this partition. Data partition (%1) Unknown system partition (%1) %1 system partition (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. The EFI system partition at %1 will be used for starting %2. EFI system partition: ResizeFSJob Resize Filesystem Job Invalid configuration The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. ResizeVolumeGroupDialog Resize Volume Group ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: System requirements ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. This program will ask you some questions and set up %2 on your computer. ScanningDialog Scanning storage devices... Partitioning SetHostNameJob Set hostname %1 Set hostname <strong>%1</strong>. Setting hostname %1. Internal Error Cannot write hostname to target system SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Failed to write keyboard configuration for the virtual console. Failed to write to %1 Failed to write keyboard configuration for X11. Failed to write keyboard configuration to existing /etc/default directory. SetPartFlagsJob Set flags on partition %1. Set flags on %1MiB %2 partition. Set flags on new partition. Clear flags on partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Clear flags on new partition. Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag new partition as <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. Clearing flags on new partition. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%1</strong> on new partition. The installer failed to set flags on partition %1. SetPasswordJob Set password for user %1 Setting password for user %1. Bad destination system path. rootMountPoint is %1 Cannot disable root account. passwd terminated with error code %1. Cannot set password for user %1. usermod terminated with error code %1. SetTimezoneJob Set timezone to %1/%2 Cannot access selected timezone path. Bad path: %1 Cannot set timezone. Link creation failed, target: %1; link name: %2 Cannot set timezone, Cannot open /etc/timezone for writing ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) SummaryPage This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. SummaryViewStep Summary TrackingInstallJob Installation feedback Sending installation feedback. Internal error in install-tracking. HTTP request timed out. TrackingMachineNeonJob Machine feedback Configuring machine feedback. Error in machine feedback configuration. Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, Calamares error %1. TrackingPage Form Placeholder <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. TrackingViewStep Feedback UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> Your username is too long. Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Only letters, numbers, underscore and hyphen are allowed. Your hostname is too short. Your hostname is too long. Your passwords do not match! UsersViewStep Users VariantModel Key Value VolumeGroupBaseDialog Create Volume Group List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB Total Size: Used Size: Total Sectors: Quantity of LVs: WelcomePage Form Select application and system language Open donations website &Donate Open help and support website Open issues and bug-tracking website Open release notes website &Release notes &Known issues &Support &About <h1>Welcome to the %1 installer.</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Welcome to %1 setup.</h1> About %1 setup About %1 installer <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support WelcomeQmlViewStep Welcome WelcomeViewStep Welcome notesqml <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> About Support Known issues Release notes Donate calamares-3.2.20/lang/calamares_zh_CN.ts000066400000000000000000005247701362604102500200460ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. 这个系统的<strong>引导环境</strong>。<br><br>较旧的 x86 ç³»ç»Ÿåªæ”¯æŒ <strong>BIOS</strong>。<br>现代的系统则通常使用 <strong>EFI</strong>,但若引导时使用了兼容模å¼ï¼Œä¹Ÿå¯ä»¥å˜ä¸º BIOS。 This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. 这个系统是从 <strong>EFI</strong> 引导环境å¯åŠ¨çš„ã€‚<br><br>ç›®å‰å¸‚é¢ä¸Šå¤§å¤šæ•°çš„æ°‘用设备都使用 EFIï¼Œå¹¶åŒæ—¶å¯¹ç¡¬ç›˜ä½¿ç”¨ GPT 分区表分区。<br>您如果è¦ä»Ž EFI 环境引导这个系统的è¯ï¼Œæœ¬å®‰è£…程åºå¿…须安装一个引导器(如 <strong>GRUB</strong> 或 <strong>systemd-boot</strong>)到 <strong>EFI 分区</strong>。这个步骤将会由本安装程åºè‡ªåŠ¨æ‰§è¡Œï¼Œé™¤éžæ‚¨é€‰æ‹©è‡ªå·±åˆ›å»ºåˆ†åŒºâ€”—此时您必须选择让本安装程åºè‡ªåŠ¨åˆ›å»ºEFI分区或您自己手动创建EFI分区。 This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. 这个系统从 <strong>BIOS</strong> 引导环境å¯åŠ¨ã€‚<br><br> è¦ä»Ž BIOS 环境引导,本安装程åºå¿…须安装引导器(如 <strong>GRUB</strong>),一般而言è¦ä¹ˆå®‰è£…在分区的开头,è¦ä¹ˆå°±æ˜¯åœ¨é è¿›åˆ†åŒºè¡¨å¼€å¤´çš„ <strong>主引导记录</strong>(推èï¼‰ä¸­ã€‚è¿™ä¸ªæ­¥éª¤æ˜¯è‡ªåŠ¨çš„ï¼Œé™¤éžæ‚¨é€‰æ‹©æ‰‹åŠ¨åˆ†åŒºâ€”â€”æ­¤æ—¶æ‚¨å¿…é¡»è‡ªè¡Œé…置。 BootLoaderModel Master Boot Record of %1 主引导记录 %1 Boot Partition 引导分区 System Partition 系统分区 Do not install a boot loader ä¸è¦å®‰è£…å¼•å¯¼ç¨‹åº %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page 空白页 Calamares::DebugWindow Form è¡¨å• GlobalStorage 全局存储 JobQueue 任务队列 Modules æ¨¡å— Type: 类型: none æ—  Interface: 接å£ï¼š Tools 工具 Reload Stylesheet é‡è½½æ ·å¼è¡¨ Widget Tree 树形控件 Debug information è°ƒè¯•ä¿¡æ¯ Calamares::ExecutionViewStep Set up 建立 Install 安装 Calamares::FailJob Job failed (%1) 任务失败(%1) Programmed job failure was explicitly requested. 出现明确抛出的任务执行失败。 Calamares::JobThread Done å®Œæˆ Calamares::NamedJob Example job (%1) 示例任务 (%1) Calamares::ProcessJob Run command '%1' in target system. 在目标系统上执行 '%1'。 Run command '%1'. è¿è¡Œå‘½ä»¤ '%1'. Running command %1 %2 正在è¿è¡Œå‘½ä»¤ %1 %2 Calamares::PythonJob Running %1 operation. 正在è¿è¡Œ %1 个æ“作。 Bad working directory path 错误的工作目录路径 Working directory %1 for python job %2 is not readable. 用于 python 任务 %2 的工作目录 %1 ä¸å¯è¯»ã€‚ Bad main script file 错误的主脚本文件 Main script file %1 for python job %2 is not readable. 用于 python 任务 %2 的主脚本文件 %1 ä¸å¯è¯»ã€‚ Boost.Python error in job "%1". 任务“%1â€å‡ºçް Boost.Python 错误。 Calamares::QmlViewStep Loading ... 正在加载... QML Step <i>%1</i>. QML 步骤 <i>%1</i>. Loading failed. 加载失败。 Calamares::RequirementsChecker Waiting for %n module(s). 等待 %n 模å—。 (%n second(s)) (%n ç§’) System-requirements checking is complete. å·²ç»å®Œæˆç³»ç»Ÿéœ€æ±‚检查。 Calamares::ViewManager &Back åŽé€€(&B) &Next 下一步(&N) &Cancel å–æ¶ˆ(&C) Cancel setup without changing the system. å–æ¶ˆå®‰è£…ï¼Œä¿æŒç³»ç»Ÿä¸å˜ã€‚ Cancel installation without changing the system. å–æ¶ˆå®‰è£…,并ä¸åšä»»ä½•更改。 Setup Failed 安装失败 Would you like to paste the install log to the web? 需è¦å°†å®‰è£…日志粘贴到网页å—? Install Log Paste URL 安装日志粘贴 URL The upload was unsuccessful. No web-paste was done. 上传失败,未完æˆç½‘页粘贴。 Calamares Initialization Failed Calamares安装失败 %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. ï¼…1无法安装。 Calamares无法加载所有已é…置的模å—。这是分é…使用Calamares的方å¼çš„问题。 <br/>The following modules could not be loaded: <br/>无法加载以下模å—: Continue with installation? 继续安装? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> 为了安装%2, %1 安装程åºå³å°†å¯¹ç£ç›˜è¿›è¡Œæ›´æ”¹ã€‚<br/><strong>这些更改无法撤销。</strong> &Set up now 现在安装(&S) &Set up 安装(&S) &Install 安装(&I) Setup is complete. Close the setup program. 安装完æˆã€‚关闭安装程åºã€‚ Cancel setup? å–æ¶ˆå®‰è£…? Cancel installation? å–æ¶ˆå®‰è£…? Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. 确定è¦å–消当å‰å®‰è£…å—? 安装程åºå°†ä¼šé€€å‡ºï¼Œæ‰€æœ‰ä¿®æ”¹éƒ½ä¼šä¸¢å¤±ã€‚ Do you really want to cancel the current install process? The installer will quit and all changes will be lost. 确定è¦å–消当å‰çš„安装å—? 安装程åºå°†é€€å‡ºï¼Œæ‰€æœ‰ä¿®æ”¹éƒ½ä¼šä¸¢å¤±ã€‚ &Yes &是 &No &å¦ &Close &关闭 Continue with setup? è¦ç»§ç»­å®‰è£…å—? The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> %1 安装程åºå°†åœ¨æ‚¨çš„ç£ç›˜ä¸Šåšå‡ºå˜æ›´ä»¥å®‰è£… %2。<br/><strong>您将无法å¤åŽŸè¿™äº›å˜æ›´ã€‚</strong> &Install now 现在安装 (&I) Go &back 返回 (&B) &Done &å®Œæˆ The installation is complete. Close the installer. 安装已完æˆã€‚请关闭安装程åºã€‚ Error 错误 Installation Failed 安装失败 CalamaresPython::Helper Unknown exception type 未知异常类型 unparseable Python error 无法解æžçš„ Python 错误 unparseable Python traceback 无法解æžçš„ Python 回溯 Unfetchable Python error. 无法获å–çš„ Python 错误。 CalamaresUtils Install log posted to: %1 安装日志å‘布到: %1 CalamaresWindow %1 Setup Program %1 å®‰è£…ç¨‹åº %1 Installer %1 å®‰è£…ç¨‹åº Show debug information æ˜¾ç¤ºè°ƒè¯•ä¿¡æ¯ CheckerContainer Gathering system information... æ­£åœ¨æ”¶é›†ç³»ç»Ÿä¿¡æ¯ ... ChoicePage Form è¡¨å• After: 之åŽï¼š <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>手动分区</strong><br/>您å¯ä»¥è‡ªè¡Œåˆ›å»ºæˆ–釿–°è°ƒæ•´åˆ†åŒºå¤§å°ã€‚ Boot loader location: 引导程åºä½ç½®ï¼š Select storage de&vice: 选择存储器(&V): Current: 当å‰ï¼š Reuse %1 as home partition for %2. å°† %1 é‡ç”¨ä¸º %2 的家分区。 <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>选择è¦ç¼©å°çš„åˆ†åŒºï¼Œç„¶åŽæ‹–åŠ¨åº•æ æ”¹å˜å¤§å°</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 å°†ä¼šç¼©å‡æœª %2MiB,然åŽä¸º %4 创建一个 %3MiB 分区。 <strong>Select a partition to install on</strong> <strong>选择è¦å®‰è£…到的分区</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. 在此系统上找ä¸åˆ°ä»»ä½• EFI 系统分区。请åŽé€€åˆ°ä¸Šä¸€æ­¥å¹¶ä½¿ç”¨æ‰‹åŠ¨åˆ†åŒºé…ç½® %1。 The EFI system partition at %1 will be used for starting %2. %1 处的 EFI 系统分区将被用æ¥å¯åЍ %2。 EFI system partition: EFI 系统分区: This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. 这个存储器上似乎还没有æ“ä½œç³»ç»Ÿã€‚æ‚¨æƒ³è¦æ€Žä¹ˆåšï¼Ÿ<br/>åœ¨ä»»ä½•å˜æ›´åº”用到存储器上å‰ï¼Œæ‚¨éƒ½å¯ä»¥é‡æ–°æŸ¥çœ‹å¹¶ç¡®è®¤æ‚¨çš„选择。 <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>抹除ç£ç›˜</strong><br/>这将会<font color="red">删除</font>ç›®å‰é€‰å®šçš„存储器上所有的数æ®ã€‚ This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. è¿™ä¸ªå­˜å‚¨å™¨ä¸Šå·²ç»æœ‰ %1 äº†ã€‚æ‚¨æƒ³è¦æ€Žä¹ˆåšï¼Ÿ<br/>åœ¨ä»»ä½•å˜æ›´åº”用到存储器上å‰ï¼Œæ‚¨éƒ½å¯ä»¥é‡æ–°æŸ¥çœ‹å¹¶ç¡®è®¤æ‚¨çš„选择。 No Swap 无交æ¢åˆ†åŒº Reuse Swap é‡ç”¨äº¤æ¢åˆ†åŒº Swap (no Hibernate) 交æ¢åˆ†åŒº(无休眠) Swap (with Hibernate) 交æ¢åˆ†åŒº(带休眠) Swap to file 交æ¢åˆ°æ–‡ä»¶ <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>并存安装</strong><br/>安装程åºå°†ä¼šç¼©å°ä¸€ä¸ªåˆ†åŒºï¼Œä¸º %1 腾出空间。 <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>å–代一个分区</strong><br/>以 %1 <strong>替代</strong>一个分区。 This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. è¿™ä¸ªå­˜å‚¨å™¨ä¸Šå·²ç»æœ‰ä¸€ä¸ªæ“ä½œç³»ç»Ÿäº†ã€‚æ‚¨æƒ³è¦æ€Žä¹ˆåšï¼Ÿ<br/>åœ¨ä»»ä½•å˜æ›´åº”用到存储器上å‰ï¼Œæ‚¨éƒ½å¯ä»¥é‡æ–°æŸ¥çœ‹å¹¶ç¡®è®¤æ‚¨çš„选择。 This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. è¿™ä¸ªå­˜å‚¨å™¨ä¸Šå·²ç»æœ‰å¤šä¸ªæ“ä½œç³»ç»Ÿäº†ã€‚æ‚¨æƒ³è¦æ€Žä¹ˆåšï¼Ÿ<br/>åœ¨ä»»ä½•å˜æ›´åº”用到存储器上å‰ï¼Œæ‚¨éƒ½å¯ä»¥é‡æ–°æŸ¥çœ‹å¹¶ç¡®è®¤æ‚¨çš„选择。 ClearMountsJob Clear mounts for partitioning operations on %1 æ¸…ç†æŒ‚载了的分区以在 %1 进行分区æ“作 Clearing mounts for partitioning operations on %1. æ­£åœ¨æ¸…ç†æŒ‚载了的分区以在 %1 进行分区æ“作。 Cleared all mounts for %1 已清除 %1 的所有挂载点 ClearTempMountsJob Clear all temporary mounts. 清除所有临时挂载点。 Clearing all temporary mounts. 正在清除所有临时挂载点。 Cannot get list of temporary mounts. 无法获å–临时挂载点列表。 Cleared all temporary mounts. æ‰€æœ‰ä¸´æ—¶æŒ‚è½½ç‚¹éƒ½å·²ç»æ¸…除。 CommandList Could not run command. 无法è¿è¡Œå‘½ä»¤ The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. 该命令在主机环境中è¿è¡Œï¼Œä¸”需è¦çŸ¥é“根路径,但没有定义root挂载点。 The command needs to know the user's name, but no username is defined. 命令行需è¦çŸ¥é“用户的åå­—ï¼Œä½†ç”¨æˆ·åæ²¡æœ‰è¢«è®¾ç½® ContextualProcessJob Contextual Processes Job åŽå°ä»»åŠ¡ CreatePartitionDialog Create a Partition 创建分区 MiB MiB Partition &Type: 分区类型(&T): &Primary 主分区(&P) E&xtended 扩展分区(&E) Fi&le System: 文件系统 (&L): LVM LV name LVM 逻辑å·åç§° Flags: 标记: &Mount Point: 挂载点(&M): Si&ze: 大å°(&Z): En&crypt 加密(&C) Logical 逻辑分区 Primary 主分区 GPT GPT Mountpoint already in use. Please select another one. 挂载点已被å ç”¨ã€‚请选择å¦ä¸€ä¸ªã€‚ CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. 在 %4 (%3) 上创建新的 %2MiB 分区,文件系统为 %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Creating new %1 partition on %2. 正在 %2 上创建新的 %1 分区。 The installer failed to create partition on disk '%1'. 安装程åºåœ¨ç£ç›˜â€œ%1â€åˆ›å»ºåˆ†åŒºå¤±è´¥ã€‚ CreatePartitionTableDialog Create Partition Table 创建分区表 Creating a new partition table will delete all existing data on the disk. 创建新分区表将删除ç£ç›˜ä¸Šæ‰€æœ‰å·²æœ‰æ•°æ®ã€‚ What kind of partition table do you want to create? 您想è¦åˆ›å»ºå“ªç§åˆ†åŒºè¡¨ï¼Ÿ Master Boot Record (MBR) 主引导记录 (MBR) GUID Partition Table (GPT) GUID 分区表 (GPT) CreatePartitionTableJob Create new %1 partition table on %2. 在 %2 上创建新的 %1 分区表。 Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). 在 <strong>%2</strong> (%3) 上创建新的 <strong>%1</strong> 分区表。 Creating new %1 partition table on %2. 正在 %2 上创建新的 %1 分区表。 The installer failed to create a partition table on %1. 安装程åºäºŽ %1 创建分区表失败。 CreateUserJob Create user %1 创建用户 %1 Create user <strong>%1</strong>. 创建用户 <strong>%1</strong>。 Creating user %1. 正在创建用户 %1。 Sudoers dir is not writable. Sudoers 目录ä¸å¯å†™ã€‚ Cannot create sudoers file for writing. 无法创建è¦å†™å…¥çš„ sudoers 文件。 Cannot chmod sudoers file. 无法修改 sudoers 文件æƒé™ã€‚ Cannot open groups file for reading. 无法打开è¦è¯»å–çš„ groups 文件。 CreateVolumeGroupDialog Create Volume Group 创建存储组 CreateVolumeGroupJob Create new volume group named %1. 创建新存储组 %1. Create new volume group named <strong>%1</strong>. Creating new volume group named %1. The installer failed to create a volume group named '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Deactivate volume group named <strong>%1</strong>. The installer failed to deactivate a volume group named %1. DeletePartitionJob Delete partition %1. 删除分区 %1。 Delete partition <strong>%1</strong>. 删除分区 <strong>%1</strong>。 Deleting partition %1. 正在删除分区 %1。 The installer failed to delete partition %1. 安装程åºåˆ é™¤åˆ†åŒº %1 失败。 DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. ç›®å‰é€‰å®šå­˜å‚¨å™¨çš„<strong>分区表</strong>类型。<br><br>å˜æ›´åˆ†åŒºè¡¨ç±»åž‹çš„唯一方法就是抹除å†é‡æ–°ä»Žå¤´å»ºç«‹åˆ†åŒºè¡¨ï¼Œè¿™ä¼šç ´å在该存储器上所有的数æ®ã€‚<br>é™¤éžæ‚¨ç‰¹åˆ«é€‰æ‹©ï¼Œå¦åˆ™æœ¬å®‰è£…程åºå°†ä¼šä¿ç•™ç›®å‰çš„分区表。<br>è‹¥ä¸ç¡®å®šï¼Œåœ¨çŽ°ä»£çš„ç³»ç»Ÿä¸Šï¼Œå»ºè®®ä½¿ç”¨ GPT。 This device has a <strong>%1</strong> partition table. 此设备上有一个 <strong>%1</strong> 分区表。 This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. 选定的存储器是一个 <strong>回环</strong> 设备。<br><br>此伪设备ä¸å«ä¸€ä¸ªçœŸæ­£çš„åˆ†åŒºè¡¨ï¼Œå®ƒåªæ˜¯èƒ½è®©ä¸€ä¸ªæ–‡ä»¶å¯å¦‚å—设备那样访问。这ç§é…置一般åªåŒ…å«ä¸€ä¸ªå•独的文件系统。 This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. 本安装程åºåœ¨é€‰å®šçš„存储器上<strong>探测ä¸åˆ°åˆ†åŒºè¡¨</strong>。<br><br>此设备è¦ä¸æ˜¯æ²¡æœ‰åˆ†åŒºè¡¨ï¼Œå°±æ˜¯å…¶åˆ†åŒºè¡¨å·²æ¯æŸåˆæˆ–者是一个未知类型的分区表。<br>本安装程åºå°†ä¼šä¸ºæ‚¨å»ºç«‹ä¸€ä¸ªæ–°çš„分区表,å¯ä»¥è‡ªåŠ¨æˆ–é€šè¿‡æ‰‹åŠ¨åˆ†å‰²é¡µé¢å®Œæˆã€‚ <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>此分区表类型推è用于使用 <strong>EFI</strong> 引导环境的系统。 <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. <br><br>此分区表类型åªå»ºè®®ç”¨äºŽä½¿ç”¨ <strong>BIOS</strong> 引导环境的较旧系统,å¦åˆ™ä¸€èˆ¬å»ºè®®ä½¿ç”¨ GPT。<br> <strong>警告:</strong>MSDOS 分区表是一个有ç€é‡å¤§ç¼ºç‚¹ã€å·²è¢«å¼ƒç”¨çš„æ ‡å‡†ã€‚<br>MSDOS 分区表上åªèƒ½åˆ›å»º 4 个<u>主è¦</u>分区,其中一个å¯ä»¥æ˜¯<u>拓展</u>分区,此分区å¯ä»¥å†åˆ†ä¸ºè®¸å¤š<u>逻辑</u>分区。 DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1 - (%2) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 å°† Dracut çš„ LUKS é…置写入到 %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Dracut 的“/â€åˆ†åŒºæœªåŠ å¯†ï¼Œå› è€Œè·³è¿‡å†™å…¥ LUKS é…ç½® Failed to open %1 无法打开 %1 DummyCppJob Dummy C++ Job 虚设 C++ 任务 EditExistingPartitionDialog Edit Existing Partition 编辑已有分区 Content: 内容: &Keep ä¿ç•™ (&K) Format æ ¼å¼åŒ– Warning: Formatting the partition will erase all existing data. 警告:格å¼åŒ–分区将删除所有已有数æ®ã€‚ &Mount Point: 挂载点(&M): Si&ze: 尺寸 (&Z): MiB MiB Fi&le System: 文件系统 (&L): Flags: 标记: Mountpoint already in use. Please select another one. 挂载点已被å ç”¨ã€‚请选择å¦ä¸€ä¸ªã€‚ EncryptWidget Form è¡¨å• En&crypt system 加密系统 Passphrase å¯†ç  Confirm passphrase ç¡®è®¤å¯†ç  Please enter the same passphrase in both boxes. è¯·åœ¨ä¸¤ä¸ªè¾“å…¥æ¡†ä¸­è¾“å…¥åŒæ ·çš„密ç ã€‚ FillGlobalStorageJob Set partition information è®¾ç½®åˆ†åŒºä¿¡æ¯ Install %1 on <strong>new</strong> %2 system partition. 在 <strong>æ–°çš„</strong>系统分区 %2 上安装 %1。 Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. 设置 <strong>æ–°çš„</strong> 嫿Œ‚载点 <strong>%1</strong> çš„ %2 分区。 Install %2 on %3 system partition <strong>%1</strong>. 在 %3 系统割区 <strong>%1</strong> 上安装 %2。 Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. 为分区 %3 <strong>%1</strong> 设置挂载点 <strong>%2</strong>。 Install boot loader on <strong>%1</strong>. 在 <strong>%1</strong>上安装引导程åºã€‚ Setting up mount points. 正在设置挂载点。 FinishedPage Form è¡¨å• <Restart checkbox tooltip> <Restart checkbox tooltip> &Restart now 现在é‡å¯(&R) <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>一切都结æŸäº†ã€‚</h1><br/>%1 已安装在您的电脑上了。<br/>您现在å¯èƒ½ä¼šæƒ³è¦é‡æ–°å¯åŠ¨åˆ°æ‚¨çš„æ–°ç³»ç»Ÿä¸­ï¼Œæˆ–æ˜¯ç»§ç»­ä½¿ç”¨ %2 Live 环境。 <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>安装失败</h1><br/>%1 未在你的电脑上安装。<br/>错误信æ¯ï¼š%2。 FinishedViewStep Finish ç»“æŸ Setup Complete å®‰è£…å®Œæˆ Installation Complete å®‰è£…å®Œæˆ The setup of %1 is complete. %1 安装完æˆã€‚ The installation of %1 is complete. %1 的安装æ“作已完æˆã€‚ FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatting partition %1 with file system %2. 正在使用 %2 文件系统格å¼åŒ–分区 %1。 The installer failed to format partition %1 on disk '%2'. å®‰è£…ç¨‹åºæ ¼å¼åŒ–ç£ç›˜â€œ%2â€ä¸Šçš„分区 %1 失败。 GeneralRequirements has at least %1 GiB available drive space There is not enough drive space. At least %1 GiB is required. has at least %1 GiB working memory The system does not have enough working memory. At least %1 GiB is required. is plugged in to a power source å·²è¿žæŽ¥åˆ°ç”µæº The system is not plugged in to a power source. 系统未连接到电æºã€‚ is connected to the Internet 已连接到互è”网 The system is not connected to the Internet. 系统未连接到互è”网。 is running the installer as an administrator (root) The setup program is not running with administrator rights. The installer is not running with administrator rights. 安装器未以管ç†å‘˜æƒé™è¿è¡Œ has a screen large enough to show the whole installer The screen is too small to display the setup program. The screen is too small to display the installer. å±å¹•ä¸èƒ½å®Œæ•´æ˜¾ç¤ºå®‰è£…器。 HostInfoJob Collecting information about your machine. IDJob OEM Batch Identifier Could not create directories <code>%1</code>. Could not open file <code>%1</code>. Could not write to file <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. InteractiveTerminalPage Konsole not installed 未安装 Konsole Please install KDE Konsole and try again! 请安装 KDE Konsole åŽé‡è¯•ï¼ Executing script: &nbsp;<code>%1</code> 正在è¿è¡Œè„šæœ¬ï¼š&nbsp;<code>%1</code> InteractiveTerminalViewStep Script 脚本 KeyboardPage Set keyboard model to %1.<br/> 设置键盘型å·ä¸º %1。<br/> Set keyboard layout to %1/%2. 设置键盘布局为 %1/%2。 KeyboardViewStep Keyboard 键盘 LCLocaleDialog System locale setting 系统语区设置 The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. 系统语言区域设置会影å“部份命令行用户界é¢çš„语言åŠå­—符集。<br/>ç›®å‰çš„设置为 <strong>%1</strong>。 &Cancel å–æ¶ˆ(&C) &OK &确定 LicensePage Form è¡¨å• <h1>License Agreement</h1> I accept the terms and conditions above. æˆ‘åŒæ„å¦‚ä¸Šæ¡æ¬¾ã€‚ Please review the End User License Agreements (EULAs). This setup procedure will install proprietary software that is subject to licensing terms. If you do not agree with the terms, the setup procedure cannot continue. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. LicenseViewStep License 许å¯è¯ LicenseWidget URL: %1 URL: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 驱动程åº</strong><br/>ç”± %2 æä¾› <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 显å¡é©±åŠ¨ç¨‹åº</strong><br/><font color="Grey">ç”± %2 æä¾›</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 æµè§ˆå™¨æ’ä»¶</strong><br/><font color="Grey">ç”± %2 æä¾›</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 ç¼–è§£ç å™¨</strong><br/><font color="Grey">ç”± %2 æä¾›</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 软件包</strong><br/><font color="Grey">ç”± %2 æä¾›</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">ç”± %2 æä¾›</font> File: %1 文件:%1 Show the license text 显示å议文本 Open license agreement in browser. 在æµè§ˆå™¨ä¸­æ‰“开许å¯å议。 Hide license text éšè—å议文本 LocalePage The system language will be set to %1. 系统语言将设置为 %1。 The numbers and dates locale will be set to %1. 数字和日期地域将设置为 %1。 Region: 地区: Zone: 区域: &Change... 更改 (&C) ... Set timezone to %1/%2.<br/> 设置时区为 %1/%2。<br/> LocaleViewStep Location ä½ç½® LuksBootKeyFileJob Configuring LUKS key file. é…ç½® LUKS key 文件。 No partitions are defined. 未定义分区。 Encrypted rootfs setup error Root partition %1 is LUKS but no passphrase has been set. Could not create LUKS key file for root partition %1. Could not configure LUKS key file on partition %1. MachineIdJob Generate machine-id. ç”Ÿæˆ machine-id。 Configuration Error é…置错误 No root mount point is set for MachineId. NetInstallPage Name åç§° Description æè¿° Network Installation. (Disabled: Unable to fetch package lists, check your network connection) 网络安装。(已ç¦ç”¨ï¼šæ— æ³•获å–软件包列表,请检查网络连接) Network Installation. (Disabled: Received invalid groups data) è”网安装。(已ç¦ç”¨ï¼šæ”¶åˆ°æ— æ•ˆç»„æ•°æ®ï¼‰ Network Installation. (Disabled: Incorrect configuration) NetInstallViewStep Package selection 软件包选择 Office software 办公软件 Office package 办公软件包 Browser software æµè§ˆå™¨è½¯ä»¶ Browser package æµè§ˆå™¨å®‰è£…包 Web browser 网页æµè§ˆå™¨ Kernel 内核 Services æœåŠ¡ Login 登录 Desktop æ¡Œé¢ Applications åº”ç”¨ç¨‹åº NotesQmlViewStep Notes 备注 OEMPage Ba&tch: 批é‡(&T): <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> OEMViewStep OEM Configuration OEM é…ç½® Set the OEM Batch Identifier to <code>%1</code>. PWQ Password is too short 密ç å¤ªçŸ­ Password is too long 密ç å¤ªé•¿ Password is too weak 密ç å¼ºåº¦å¤ªå¼± Memory allocation error when setting '%1' 设置“%1â€æ—¶å‘生内存分é…错误 Memory allocation error 内存分é…错误 The password is the same as the old one 新密ç å’Œè€å¯†ç ä¸€è‡´ The password is a palindrome 新密ç ä¸ºå›žæ–‡ The password differs with case changes only 新密ç å’Œè€å¯†ç åªæœ‰å¤§å°å†™åŒºåˆ« The password is too similar to the old one 新密ç å’Œè€å¯†ç è¿‡äºŽç›¸ä¼¼ The password contains the user name in some form 新密ç åŒ…å«ç”¨æˆ·å The password contains words from the real name of the user in some form 新密ç åŒ…å«ç”¨æˆ·çœŸå®žå§“å The password contains forbidden words in some form 新密ç åŒ…å«ä¸å…许使用的è¯ç»„ The password contains less than %1 digits 新密ç åŒ…å«å°‘于 %1 个数字 The password contains too few digits 新密ç åŒ…å«å¤ªå°‘æ•°å­— The password contains less than %1 uppercase letters 新密ç åŒ…å«å°‘于 %1 ä¸ªå¤§å†™å­—æ¯ The password contains too few uppercase letters 新密ç åŒ…å«å¤ªå°‘å¤§å†™å­—æ¯ The password contains less than %1 lowercase letters 新密ç åŒ…å«å°‘于 %1 个å°å†™å­—æ¯ The password contains too few lowercase letters 新密ç åŒ…å«å¤ªå°‘å°å†™å­—æ¯ The password contains less than %1 non-alphanumeric characters 新密ç åŒ…å«å°‘于 %1 个éžå­—æ¯/数字字符 The password contains too few non-alphanumeric characters 新密ç åŒ…å«å¤ªå°‘éžå­—æ¯/数字字符 The password is shorter than %1 characters 新密ç çŸ­äºŽ %1 ä½ The password is too short 新密ç è¿‡çŸ­ The password is just rotated old one 新密ç ä»…对è€å¯†ç ä½œäº†å­—åºè°ƒæ•´ The password contains less than %1 character classes 新密ç åŒ…å«å°‘于 %1 个字符类型 The password does not contain enough character classes 新密ç åŒ…å«å¤ªå°‘字符类型 The password contains more than %1 same characters consecutively 新密ç åŒ…å«è¶…过 %1 个连续的相åŒå­—符 The password contains too many same characters consecutively 新密ç åŒ…å«è¿‡å¤šè¿žç»­çš„相åŒå­—符 The password contains more than %1 characters of the same class consecutively 新密ç åŒ…å«è¶…过 %1 个连续的åŒç±»åž‹å­—符 The password contains too many characters of the same class consecutively 新密ç åŒ…å«è¿‡å¤šè¿žç»­çš„åŒç±»åž‹å­—符 The password contains monotonic sequence longer than %1 characters 新密ç åŒ…å«è¶…过 %1 个字符长度的å•è°ƒåºåˆ— The password contains too long of a monotonic character sequence 新密ç åŒ…å«è¿‡é•¿çš„å•è°ƒåºåˆ— No password supplied æœªè¾“å…¥å¯†ç  Cannot obtain random numbers from the RNG device æ— æ³•ä»Žéšæœºæ•°ç”Ÿæˆå™¨ (RNG) 设备获å–éšæœºæ•° Password generation failed - required entropy too low for settings 无法生æˆå¯†ç  - 熵值过低 The password fails the dictionary check - %1 æ–°å¯†ç æ— æ³•通过字典检查 - %1 The password fails the dictionary check æ–°å¯†ç æ— æ³•通过字典检查 Unknown setting - %1 未知设置 - %1 Unknown setting 未知设置 Bad integer value of setting - %1 è®¾ç½®çš„æ•´æ•°å€¼éžæ³• - %1 Bad integer value è®¾ç½®çš„æ•´æ•°å€¼éžæ³• Setting %1 is not of integer type 设定值 %1 䏿˜¯æ•´æ•°ç±»åž‹ Setting is not of integer type è®¾å®šå€¼ä¸æ˜¯æ•´æ•°ç±»åž‹ Setting %1 is not of string type 设定值 %1 䏿˜¯å­—符串类型 Setting is not of string type è®¾å®šå€¼ä¸æ˜¯å­—符串类型 Opening the configuration file failed 无法打开é…置文件 The configuration file is malformed é…置文件格å¼ä¸æ­£ç¡® Fatal failure 致命错误 Unknown error 未知错误 Password is empty å¯†ç æ˜¯ç©º PackageChooserPage Form è¡¨å• Product Name 产å“åç§° TextLabel 文本标签 Long Product Description é•¿äº§å“æè¿° Package Selection 软件包选择 Please pick a product from the list. The selected product will be installed. PackageChooserViewStep Packages 软件包 Page_Keyboard Form 窗体 Keyboard Model: 键盘型å·ï¼š Type here to test your keyboard 在此处数æ®ä»¥æµ‹è¯•键盘 Page_UserSetup Form 窗体 What is your name? 您的姓å? What name do you want to use to log in? 您想è¦ä½¿ç”¨çš„ç™»å½•ç”¨æˆ·åæ˜¯ï¼Ÿ Choose a password to keep your account safe. é€‰æ‹©ä¸€ä¸ªå¯†ç æ¥ä¿è¯æ‚¨çš„账户安全。 <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>输入相åŒå¯†ç ä¸¤æ¬¡ï¼Œä»¥æ£€æŸ¥è¾“入错误。好的密ç åŒ…å«å­—æ¯ï¼Œæ•°å­—,标点的组åˆï¼Œåº”当至少为 8 个字符长,并且应按一定周期更æ¢ã€‚</small> What is the name of this computer? 计算机å称为? Your Full Name å…¨å login 登录 <small>This name will be used if you make the computer visible to others on a network.</small> <small>将计算机设置为对其他网络上计算机å¯è§æ—¶å°†ä½¿ç”¨æ­¤å称。</small> Computer Name 计算机åç§° Password å¯†ç  Repeat Password é‡å¤å¯†ç  When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. ä¸è¯¢é—®å¯†ç è‡ªåŠ¨ç™»å½•ã€‚ Use the same password for the administrator account. 为管ç†å‘˜å¸å·ä½¿ç”¨åŒæ ·çš„密ç ã€‚ Choose a password for the administrator account. 选择管ç†å‘˜è´¦æˆ·çš„密ç ã€‚ <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>输入相åŒå¯†ç ä¸¤æ¬¡ï¼Œä»¥æ£€æŸ¥è¾“入错误。</small> PartitionLabelsView Root 根目录 Home 主目录 Boot 引导 EFI system EFI 系统 Swap äº¤æ¢ New partition for %1 %1 的新分区 New partition 新建分区 %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space 空闲空间 New partition 新建分区 Name åç§° File System 文件系统 Mount Point 挂载点 Size å¤§å° PartitionPage Form 窗体 Storage de&vice: 存储器(&V): &Revert All Changes 撤销所有修改(&R) New Partition &Table 新建分区表(&T) Cre&ate 创建 &Edit 编辑(&E) &Delete 删除(&D) New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group I&nstall boot loader on: Are you sure you want to create a new partition table on %1? 您是å¦ç¡®å®šè¦åœ¨ %1 上创建新分区表? Can not create new partition 无法创建新分区 The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. ï¼…1ä¸Šçš„åˆ†åŒºè¡¨å·²ç»æœ‰ï¼…2个主分区,并且ä¸èƒ½å†æ·»åŠ ã€‚è¯·åˆ é™¤ä¸€ä¸ªä¸»åˆ†åŒºå¹¶æ·»åŠ æ‰©å±•åˆ†åŒºã€‚ PartitionViewStep Gathering system information... 正在收集系统信æ¯... Partitions 分区 Install %1 <strong>alongside</strong> another operating system. å°† %1 安装在其他æ“作系统<strong>æ—è¾¹</strong>。 <strong>Erase</strong> disk and install %1. <strong>抹除</strong>ç£ç›˜å¹¶å®‰è£… %1。 <strong>Replace</strong> a partition with %1. 以 %1 <strong>替代</strong>一个分区。 <strong>Manual</strong> partitioning. <strong>手动</strong>分区 Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). å°† %1 安装在ç£ç›˜ <strong>%2</strong> (%3) 上的å¦ä¸€ä¸ªæ“作系统<strong>æ—è¾¹</strong>。 <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>抹除</strong> ç£ç›˜ <strong>%2</strong> (%3) 并且安装 %1。 <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. 以 %1 <strong>替代</strong> 一个在ç£ç›˜ <strong>%2</strong> (%3) 上的分区。 <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). 在ç£ç›˜ <strong>%1</strong> (%2) 上<strong>手动</strong>分区。 Disk <strong>%1</strong> (%2) ç£ç›˜ <strong>%1</strong> (%2) Current: 当å‰ï¼š After: 之åŽï¼š No EFI system partition configured 未é…ç½® EFI 系统分区 An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. 必须有 EFI 系统分区æ‰èƒ½å¯åЍ %1 。<br/><br/>è¦é…ç½® EFI 系统分区,åŽé€€ä¸€æ­¥ï¼Œç„¶åŽåˆ›å»ºæˆ–选中一个 FAT32 分区并为之设置 <strong>esp</strong> æ ‡è®°åŠæŒ‚载点 <strong>%2</strong>。<br/><br/>ä½ å¯ä»¥ä¸åˆ›å»º EFI 系统分区并继续安装,但是你的系统å¯èƒ½æ— æ³•å¯åŠ¨ã€‚ EFI system partition flag not set 未设置 EFI 系统分区标记 An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. 必须有 EFI 系统分区æ‰èƒ½å¯åЍ %1 。<br/><br/>已有挂载点为 <strong>%2</strong> 的分区,但是未设置 <strong>esp</strong> 标记。<br/>è¦è®¾ç½®æ­¤æ ‡è®°ï¼ŒåŽé€€å¹¶ç¼–辑分区。<br/><br/>ä½ å¯ä»¥ä¸åˆ›å»º EFI 系统分区并继续安装,但是你的系统å¯èƒ½æ— æ³•å¯åŠ¨ã€‚ Boot partition not encrypted 引导分区未加密 A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. 您å°è¯•用å•独的引导分区é…åˆå·²åŠ å¯†çš„æ ¹åˆ†åŒºä½¿ç”¨ï¼Œä½†å¼•å¯¼åˆ†åŒºæœªåŠ å¯†ã€‚<br/><br/>è¿™ç§é…置方å¼å¯èƒ½å­˜åœ¨å®‰å…¨éšæ‚£ï¼Œå› ä¸ºé‡è¦çš„系统文件存储在了未加密的分区上。<br/>您å¯ä»¥ç»§ç»­ä¿æŒæ­¤é…置,但是系统解密将在系统å¯åŠ¨æ—¶è€Œä¸æ˜¯å¼•导时进行。<br/>è¦åŠ å¯†å¼•å¯¼åˆ†åŒºï¼Œè¯·è¿”å›žä¸Šä¸€æ­¥å¹¶é‡æ–°åˆ›å»ºæ­¤åˆ†åŒºï¼Œå¹¶åœ¨åˆ†åŒºåˆ›å»ºçª—å£é€‰ä¸­ <strong>加密</strong> 选项。 has at least one disk device available. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Plasma 外观主题任务 Could not select KDE Plasma Look-and-Feel package 无法选中 KDE Plasma 外观主题包 PlasmaLnfPage Form è¡¨å• Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. 请选择一个 KDE Plasma 桌é¢å¤–观,å¯ä»¥å¿½ç•¥æ­¤æ­¥éª¤å¹¶åœ¨ç³»ç»Ÿå®‰è£…完æˆåŽé…置外观。点击一个外观åŽå¯ä»¥å®žæ—¶é¢„览效果。 PlasmaLnfViewStep Look-and-Feel 外观主题 PreserveFiles Saving files for later ... ä¿å­˜æ–‡ä»¶ä»¥ä¾›æ—¥åŽä½¿ç”¨ No files configured to save for later. 没有已ä¿å­˜ä¸”供日åŽä½¿ç”¨çš„é…置文件。 Not all of the configured files could be preserved. 并䏿˜¯æ‰€æœ‰é…置文件都å¯ä»¥è¢«ä¿ç•™ ProcessResult There was no output from the command. 命令没有输出。 Output: 输出: External command crashed. 外部命令已崩溃。 Command <i>%1</i> crashed. 命令 <i>%1</i> 已崩溃。 External command failed to start. 无法å¯åŠ¨å¤–éƒ¨å‘½ä»¤ã€‚ Command <i>%1</i> failed to start. 无法å¯åЍ命令 <i>%1</i>。 Internal error when starting command. å¯åŠ¨å‘½ä»¤æ—¶å‡ºçŽ°å†…éƒ¨é”™è¯¯ã€‚ Bad parameters for process job call. 呼å«è¿›ç¨‹ä»»åŠ¡å‡ºçŽ°é”™è¯¯å‚æ•° External command failed to finish. 外部命令未æˆåŠŸå®Œæˆã€‚ Command <i>%1</i> failed to finish in %2 seconds. 命令 <i>%1</i> 未能在 %2 秒内完æˆã€‚ External command finished with errors. 外部命令已完æˆï¼Œä½†å‡ºçŽ°äº†é”™è¯¯ã€‚ Command <i>%1</i> finished with exit code %2. 命令 <i>%1</i> ä»¥é€€å‡ºä»£ç  %2 完æˆã€‚ QObject Default Keyboard Model é»˜è®¤é”®ç›˜åž‹å· Default 默认 unknown 未知 extended 扩展分区 unformatted 未格å¼åŒ– swap 临时存储空间 Unpartitioned space or unknown partition table 尚未分区的空间或分区表未知 (no mount point) Requirements checking for module <i>%1</i> is complete. %1 (%2) language[name] (country[name]) %1(%2) No product No description provided. File not found Path <pre>%1</pre> must be an absolute path. Could not create new random file <pre>%1</pre>. RemoveVolumeGroupJob Remove Volume Group named %1. Remove Volume Group named <strong>%1</strong>. The installer failed to remove a volume group named '%1'. ReplaceWidget Form è¡¨å• Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. <b>选择è¦å®‰è£… %1 的地方。</b><br/><font color="red">警告:</font>这将会删除所有已选å–的分区上的文件。 The selected item does not appear to be a valid partition. é€‰ä¸­é¡¹ä¼¼ä¹Žä¸æ˜¯æœ‰æ•ˆåˆ†åŒºã€‚ %1 cannot be installed on empty space. Please select an existing partition. 无法在空白空间中安装 %1。请选å–一个存在的分区。 %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. 无法在拓展分区上安装 %1。请选å–ä¸€ä¸ªå­˜åœ¨çš„ä¸»è¦æˆ–逻辑分区。 %1 cannot be installed on this partition. 无法安装 %1 到此分区。 Data partition (%1) æ•°æ®åˆ†åŒº (%1) Unknown system partition (%1) 未知系统分区 (%1) %1 system partition (%2) %1 系统分区 (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>分区 %1 对 %2 æ¥è¯´å¤ªå°äº†ã€‚请选å–一个容é‡è‡³å°‘有 %3 GiB 的分区。 <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/>在此系统上找ä¸åˆ°ä»»ä½• EFI 系统分区。请åŽé€€åˆ°ä¸Šä¸€æ­¥å¹¶ä½¿ç”¨æ‰‹åŠ¨åˆ†åŒºé…ç½® %1。 <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>å³å°†å®‰è£… %1 到 %2 上。<br/><font color="red">警告: </font>分区 %2 上的所有数æ®éƒ½å°†ä¸¢å¤±ã€‚ The EFI system partition at %1 will be used for starting %2. 将使用 %1 处的 EFI 系统分区å¯åЍ %2。 EFI system partition: EFI 系统分区: ResizeFSJob Resize Filesystem Job Invalid configuration The file-system resize job has an invalid configuration and will not run. KPMCore not Available Calamares cannot start KPMCore for the file-system resize job. Resize Failed The filesystem %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. The filesystem %1 cannot be resized. The device %1 cannot be resized. The filesystem %1 must be resized, but cannot. The device %1 must be resized, but cannot ResizePartitionJob Resize partition %1. 调整分区 %1 大å°ã€‚ Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resizing %2MiB partition %1 to %3MiB. The installer failed to resize partition %1 on disk '%2'. 安装程åºè°ƒæ•´ç£ç›˜â€œ%2â€ä¸Šçš„分区 %1 大å°å¤±è´¥ã€‚ ResizeVolumeGroupDialog Resize Volume Group ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. The installer failed to resize a volume group named '%1'. ResultsListDialog For best results, please ensure that this computer: 为了更好的体验,请确ä¿è¿™å°ç”µè„‘: System requirements 系统需求 ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> 此电脑未满足安装 %1 的最低需求。<br/>安装无法继续。<a href="#details">详细信æ¯...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. 此电脑未满足一些安装 %1 的推è需求。<br/>å¯ä»¥ç»§ç»­å®‰è£…,但一些功能å¯èƒ½ä¼šè¢«åœç”¨ã€‚ This program will ask you some questions and set up %2 on your computer. 本程åºå°†ä¼šé—®æ‚¨ä¸€äº›é—®é¢˜å¹¶åœ¨æ‚¨çš„电脑上安装åŠè®¾ç½® %2 。 ScanningDialog Scanning storage devices... 正在扫æå­˜å‚¨å™¨â€¦ Partitioning 正在分区 SetHostNameJob Set hostname %1 设置主机å %1 Set hostname <strong>%1</strong>. 设置主机å <strong>%1</strong>。 Setting hostname %1. 正在设置主机å %1。 Internal Error 内部错误 Cannot write hostname to target system 无法å‘目标系统写入主机å SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 将键盘型å·è®¾ç½®ä¸º %1,布局设置为 %2-%3 Failed to write keyboard configuration for the virtual console. 无法将键盘é…置写入到虚拟控制å°ã€‚ Failed to write to %1 写入到 %1 失败 Failed to write keyboard configuration for X11. 无法为 X11 写入键盘é…置。 Failed to write keyboard configuration to existing /etc/default directory. 无法将键盘é…置写入到现有的 /etc/default 目录。 SetPartFlagsJob Set flags on partition %1. 设置分区 %1 的标记. Set flags on %1MiB %2 partition. Set flags on new partition. 设置新分区的标记. Clear flags on partition <strong>%1</strong>. 清空分区 <strong>%1</strong> 上的标记. Clear flags on %1MiB <strong>%2</strong> partition. Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. Clearing flags on %1MiB <strong>%2</strong> partition. Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. Clear flags on new partition. 删除新分区的标记. Flag partition <strong>%1</strong> as <strong>%2</strong>. 将分区 <strong>%2</strong> 标记为 <strong>%1</strong>。 Flag new partition as <strong>%1</strong>. 将新分区标记为 <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. 正在清ç†åˆ†åŒº <strong>%1</strong> 上的标记。 Clearing flags on new partition. 正在删除新分区的标记. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. 正在为分区 <strong>%1</strong> 设置标记 <strong>%2</strong>。 Setting flags <strong>%1</strong> on new partition. 正在将新分区标记为 <strong>%1</strong>. The installer failed to set flags on partition %1. å®‰è£…ç¨‹åºæ²¡æœ‰æˆåŠŸè®¾ç½®åˆ†åŒº %1 的标记. SetPasswordJob Set password for user %1 设置用户 %1 çš„å¯†ç  Setting password for user %1. 正在为用户 %1 设置密ç ã€‚ Bad destination system path. éžæ³•的目标系统路径。 rootMountPoint is %1 根挂载点为 %1 Cannot disable root account. 无法ç¦ç”¨ root å¸å·ã€‚ passwd terminated with error code %1. passwd ä»¥é”™è¯¯ä»£ç  %1 终止。 Cannot set password for user %1. 无法设置用户 %1 的密ç ã€‚ usermod terminated with error code %1. usermod ä»¥é”™è¯¯ä»£ç  %1 中止。 SetTimezoneJob Set timezone to %1/%2 设置时区为 %1/%2 Cannot access selected timezone path. 无法访问指定的时区路径。 Bad path: %1 éžæ³•路径:%1 Cannot set timezone. 无法设置时区。 Link creation failed, target: %1; link name: %2 链接创建失败,目标:%1,链接å称:%2 Cannot set timezone, 无法设置时区, Cannot open /etc/timezone for writing 无法打开è¦å†™å…¥çš„ /etc/timezone ShellProcessJob Shell Processes Job Shell 进程任务 SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the install procedure. è¿™æ˜¯æ‚¨å¼€å§‹å®‰è£…åŽæ‰€ä¼šå‘生的事情的概览。 SummaryViewStep Summary æ‘˜è¦ TrackingInstallJob Installation feedback 安装å馈 Sending installation feedback. å‘é€å®‰è£…å馈。 Internal error in install-tracking. 在 install-tracking 步骤å‘生内部错误。 HTTP request timed out. HTTP 请求超时。 TrackingMachineNeonJob Machine feedback 机器å馈 Configuring machine feedback. 正在é…置机器å馈。 Error in machine feedback configuration. 机器å馈é…置中存在错误。 Could not configure machine feedback correctly, script error %1. 无法正确é…置机器åé¦ˆï¼Œè„šæœ¬é”™è¯¯ä»£ç  %1。 Could not configure machine feedback correctly, Calamares error %1. 无法正确é…置机器å馈,Calamares é”™è¯¯ä»£ç  %1。 TrackingPage Form è¡¨å• Placeholder å ä½ç¬¦ <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>选中此项时,ä¸ä¼šå‘é€å…³äºŽå®‰è£…çš„ <span style=" font-weight:600;">no information at all</span>。</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">点击此处以获å–关于用户å馈的详细信æ¯</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. 安装跟踪å¯å¸®åŠ© %1 获å–关于用户数é‡ï¼Œå®‰è£… %1 的硬件(选中下方最åŽä¸¤é¡¹ï¼‰åŠé•¿æœŸä»¥æ¥å—欢迎应用程åºçš„ä¿¡æ¯ã€‚请点按æ¯é¡¹æ—的帮助图标以查看å³å°†è¢«å‘é€çš„ä¿¡æ¯ã€‚ By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. 选中此项时,安装器将å‘é€å…³äºŽå®‰è£…过程和硬件的信æ¯ã€‚该信æ¯åªä¼šåœ¨å®‰è£…结æŸåŽ <b>å‘é€ä¸€æ¬¡</b>。 By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. 选中此项时,安装器将给 %1 <b>定时</b> å‘é€å…³äºŽå®‰è£…进程,硬件åŠåº”用程åºçš„ä¿¡æ¯ã€‚ By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. 选中此项时,安装器和系统将给 %1 <b>定时</b> å‘é€å…³äºŽå®‰è£…进程,硬件,应用程åºåŠä½¿ç”¨è§„律的信æ¯ã€‚ TrackingViewStep Feedback å馈 UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> Your username is too long. 用户å太长。 Your username must start with a lowercase letter or underscore. Only lowercase letters, numbers, underscore and hyphen are allowed. Only letters, numbers, underscore and hyphen are allowed. Your hostname is too short. 主机å太短。 Your hostname is too long. 主机å太长。 Your passwords do not match! 密ç ä¸åŒ¹é…ï¼ UsersViewStep Users 用户 VariantModel Key Value 值 VolumeGroupBaseDialog Create Volume Group 创建存储组 List of Physical Volumes Volume Group Name: Volume Group Type: Physical Extent Size: MiB MiB Total Size: Used Size: Total Sectors: Quantity of LVs: WelcomePage Form è¡¨å• Select application and system language Open donations website &Donate æèµ (&D) Open help and support website 打开帮助和支æŒé¡µé¢ Open issues and bug-tracking website 打开问题追踪网站 Open release notes website &Release notes å‘行注记(&R) &Known issues 已知问题(&K) &Support 支æŒä¿¡æ¯(&S) &About 关于(&A) <h1>Welcome to the %1 installer.</h1> <h1>欢迎使用 %1 安装程åºã€‚</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>欢迎使用 Calamares å®‰è£…ç¨‹åº - %1。</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Welcome to %1 setup.</h1> About %1 setup About %1 installer 关于 %1 å®‰è£…ç¨‹åº <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. %1 support %1 的支æŒä¿¡æ¯ WelcomeQmlViewStep Welcome 欢迎 WelcomeViewStep Welcome 欢迎 notesqml <h3>%1</h3> <p>These are example release notes.</p> welcomeq <h3>%1 <quote>%2</quote></h3> <h3>%1 <quote>%2</quote></h3> About 关于 Support æ”¯æŒ Known issues 已知问题 Release notes å‘行说明 Donate æèµ  calamares-3.2.20/lang/calamares_zh_TW.ts000066400000000000000000005427331362604102500200770ustar00rootroot00000000000000 BootInfoWidget The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. 這個系統的<strong>開機環境</strong>。<br><br>較舊的 x86 ç³»çµ±åªæ”¯æ´ <strong>BIOS</strong>。<br>ç¾æ™‚的系統則通常使用 <strong>EFI</strong>ï¼Œä½†è‹¥ä½¿ç”¨ç›¸å®¹æ¨¡å¼ (CSM),也å¯èƒ½é¡¯ç¤ºç‚º BIOS。 This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. 這個系統以 <strong>EFI</strong> 開機。<br><br>è¦å¾ž EFI 環境開機,本安è£ç¨‹å¼å¿…須安è£é–‹æ©Ÿè¼‰å…¥å™¨ç¨‹å¼ï¼Œåƒæ˜¯ <strong>GRUB</strong> 或 <strong>systemd-boot</strong> 在 <strong>EFI 系統分割å€</strong>。這是自動的,除éžé¸æ“‡æ‰‹å‹•分割;在這種情æ³ï¼Œæ‚¨å¿…須自行é¸å–或建立它。 This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. 這個系統以 <strong>BIOS</strong> 開機。<br><br>è¦å¾ž BIOS 環境開機,本安è£ç¨‹å¼å¿…須安è£é–‹æ©Ÿè¼‰å…¥å™¨ç¨‹å¼ï¼Œåƒæ˜¯ <strong>GRUB</strong>。而且通常安è£åœ¨åˆ†å‰²å€çš„é–‹é¦–ï¼Œåˆæˆ–最好安è£åœ¨é è¿‘分割表開首的 <strong>主è¦é–‹æ©Ÿè¨˜éŒ„ (MBR)</strong>。這是自動的,除éžé¸æ“‡æ‰‹å‹•分割;在這種情æ³ï¼Œæ‚¨å¿…須自行設定它。 BootLoaderModel Master Boot Record of %1 %1 的主è¦é–‹æ©Ÿç´€éŒ„ (MBR) Boot Partition é–‹æ©Ÿåˆ†å‰²å€ System Partition ç³»çµ±åˆ†å‰²å€ Do not install a boot loader 無法安è£é–‹æ©Ÿè¼‰å…¥å™¨ %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page ç©ºç™½é  Calamares::DebugWindow Form åž‹å¼ GlobalStorage 全域儲存 JobQueue 工作佇列 Modules 模組 Type: 類型: none ç„¡ Interface: 介é¢ï¼š Tools 工具 Reload Stylesheet 釿–°è¼‰å…¥æ¨£å¼è¡¨ Widget Tree å°å·¥å…·æ¨¹ Debug information 除錯資訊 Calamares::ExecutionViewStep Set up 設定 Install å®‰è£ Calamares::FailJob Job failed (%1) 排程失敗 (%1) Programmed job failure was explicitly requested. æ˜Žç¢ºè¦æ±‚程å¼åŒ–排程失敗。 Calamares::JobThread Done å®Œæˆ Calamares::NamedJob Example job (%1) 範例排程 (%1) Calamares::ProcessJob Run command '%1' in target system. 在目標系統中執行指令「%1ã€ã€‚ Run command '%1'. 執行指令「%1ã€ã€‚ Running command %1 %2 正在執行命令 %1 %2 Calamares::PythonJob Running %1 operation. 正在執行 %1 æ“作。 Bad working directory path ä¸è‰¯çš„工作目錄路徑 Working directory %1 for python job %2 is not readable. Python 行程 %2 作用中的目錄 %1 ä¸å…·è®€å–權é™ã€‚ Bad main script file 錯誤的主è¦è…³æœ¬æª” Main script file %1 for python job %2 is not readable. Python 行程 %2 的主è¦è…³æœ¬æª” %1 無法讀å–。 Boost.Python error in job "%1". 行程 %1 中 Boost.Python 錯誤。 Calamares::QmlViewStep Loading ... 正在載入 ... QML Step <i>%1</i>. QML 第 <i>%1</i> æ­¥ Loading failed. 載入失敗。 Calamares::RequirementsChecker Waiting for %n module(s). 正在等待 %n 個模組。 (%n second(s)) (%n 秒) System-requirements checking is complete. 系統需求檢查完æˆã€‚ Calamares::ViewManager &Back 返回 (&B) &Next 下一步 (&N) &Cancel å–æ¶ˆ(&C) Cancel setup without changing the system. å–æ¶ˆå®‰è£ï¼Œä¸æ›´æ”¹ç³»çµ±ã€‚ Cancel installation without changing the system. ä¸è®Šæ›´ç³»çµ±ä¸¦å–消安è£ã€‚ Setup Failed 設定失敗 Would you like to paste the install log to the web? 想è¦å°‡å®‰è£ç´€éŒ„檔貼到網路上嗎? Install Log Paste URL 安è£ç´€éŒ„檔張貼 URL The upload was unsuccessful. No web-paste was done. ä¸Šå‚³ä¸æˆåŠŸã€‚ä¸¦æœªå®Œæˆç¶²è·¯å¼µè²¼ã€‚ Calamares Initialization Failed Calamares åˆå§‹åŒ–失敗 %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. %1 無法安è£ã€‚Calamares 無法載入所有已設定的模組。散佈版使用 Calamares çš„æ–¹å¼æœ‰å•題。 <br/>The following modules could not be loaded: <br/>以下的模組無法載入: Continue with installation? 繼續安è£ï¼Ÿ The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> %1 設定程å¼å°‡åœ¨æ‚¨çš„ç£ç¢Ÿä¸Šåšå‡ºè®Šæ›´ä»¥è¨­å®š %2。<br/><strong>您將無法復原這些變更。</strong> &Set up now 馬上進行設定 (&S) &Set up 設定 (&S) &Install 安è£(&I) Setup is complete. Close the setup program. 設定完æˆã€‚關閉設定程å¼ã€‚ Cancel setup? å–æ¶ˆè¨­å®šï¼Ÿ Cancel installation? å–æ¶ˆå®‰è£ï¼Ÿ Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. 真的想è¦å–消目å‰çš„設定程åºå—Žï¼Ÿ 設定程å¼å°‡æœƒçµæŸï¼Œæ‰€æœ‰è®Šæ›´éƒ½å°‡æœƒéºå¤±ã€‚ Do you really want to cancel the current install process? The installer will quit and all changes will be lost. 您真的想è¦å–消目å‰çš„安è£ç¨‹åºå—Žï¼Ÿ 安è£ç¨‹å¼å°‡æœƒé€€å‡ºä¸”所有變動將會éºå¤±ã€‚ &Yes 是(&Y) &No å¦(&N) &Close 關閉(&C) Continue with setup? 繼續安è£ï¼Ÿ The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> %1 安è£ç¨‹å¼å°‡åœ¨æ‚¨çš„ç£ç¢Ÿä¸Šåšå‡ºè®Šæ›´ä»¥å®‰è£ %2。<br/><strong>您將無法復原這些變更。</strong> &Install now ç¾åœ¨å®‰è£ (&I) Go &back 上一步 (&B) &Done 完æˆ(&D) The installation is complete. Close the installer. 安è£å®Œæˆã€‚關閉安è£ç¨‹å¼ã€‚ Error 錯誤 Installation Failed 安è£å¤±æ•— CalamaresPython::Helper Unknown exception type 未知的例外型別 unparseable Python error 無法解æžçš„ Python 錯誤 unparseable Python traceback 無法解æžçš„ Python 回溯紀錄 Unfetchable Python error. 無法讀å–çš„ Python 錯誤。 CalamaresUtils Install log posted to: %1 安è£ç´€éŒ„檔已張貼到: %1 CalamaresWindow %1 Setup Program %1 è¨­å®šç¨‹å¼ %1 Installer %1 安è£ç¨‹å¼ Show debug information 顯示除錯資訊 CheckerContainer Gathering system information... 收集系統資訊中... ChoicePage Form 表單 After: 之後: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>手動分割</strong><br/>å¯ä»¥è‡ªè¡Œå»ºç«‹æˆ–釿–°èª¿æ•´åˆ†å‰²å€å¤§å°ã€‚ Boot loader location: 開機載入器ä½ç½®ï¼š Select storage de&vice: é¸å–儲存è£ç½®(&V): Current: ç›®å‰ï¼š Reuse %1 as home partition for %2. 釿–°ä½¿ç”¨ %1 作為 %2 的家目錄分割å€ã€‚ <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>é¸å–è¦ç¸®æ¸›çš„分割å€ï¼Œç„¶å¾Œæ‹–曳底部æ¢ç‹€ç‰©ä¾†èª¿æ•´å¤§å°</strong> %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 會縮減到 %2MiB,並且會為 %4 建立新的 %3MiB 分割å€ã€‚ <strong>Select a partition to install on</strong> <strong>é¸å–分割å€ä»¥å®‰è£åœ¨å…¶ä¸Š</strong> An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. 在這個系統找ä¸åˆ° EFI 系統分割å€ã€‚請回到上一步並使用手動分割以設定 %1。 The EFI system partition at %1 will be used for starting %2. 在 %1 çš„ EFI 系統分割å€å°‡æœƒåœ¨é–‹å§‹ %2 時使用。 EFI system partition: EFI 系統分割å€ï¼š This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. 這個儲存è£ç½®ä¸Šä¼¼ä¹Žé‚„æ²’æœ‰ä½œæ¥­ç³»çµ±ã€‚æ‚¨æƒ³è¦æ€Žéº¼åšï¼Ÿ<br/>在任何變更套用到儲存è£ç½®ä¸Šå‰ï¼Œæ‚¨éƒ½å¯ä»¥é‡æ–°æª¢è¦–ä¸¦ç¢ºèªæ‚¨çš„鏿“‡ã€‚ <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>抹除ç£ç¢Ÿ</strong><br/>這將會<font color="red">刪除</font>ç›®å‰é¸å–的儲存è£ç½®æ‰€æœ‰çš„資料。 This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. 這個儲存è£ç½®ä¸Šå·²ç¶“有 %1 äº†ã€‚æ‚¨æƒ³è¦æ€Žéº¼åšï¼Ÿ<br/>在任何變更套用到儲存è£ç½®ä¸Šå‰ï¼Œæ‚¨éƒ½å¯ä»¥é‡æ–°æª¢è¦–ä¸¦ç¢ºèªæ‚¨çš„鏿“‡ã€‚ No Swap 沒有 Swap Reuse Swap é‡ç”¨ Swap Swap (no Hibernate) Swap(沒有冬眠) Swap (with Hibernate) Swap(有冬眠) Swap to file Swap 到檔案 <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>並存安è£</strong><br/>安è£ç¨‹å¼æœƒç¸®å°ä¸€å€‹åˆ†å‰²å€ï¼Œä»¥è®“出空間給 %1。 <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>å–代一個分割å€</strong><br/>用 %1 å–代一個分割å€ã€‚ This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. 這個儲存è£ç½®ä¸Šå·²ç¶“æœ‰ä¸€å€‹ä½œæ¥­ç³»çµ±äº†ã€‚æ‚¨æƒ³è¦æ€Žéº¼åšï¼Ÿ<br/>在任何變更套用到儲存è£ç½®ä¸Šå‰ï¼Œæ‚¨éƒ½å¯ä»¥é‡æ–°æª¢è¦–ä¸¦ç¢ºèªæ‚¨çš„鏿“‡ã€‚ This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. 這個儲存è£ç½®ä¸Šå·²ç¶“æœ‰å¤šå€‹ä½œæ¥­ç³»çµ±äº†ã€‚æ‚¨æƒ³è¦æ€Žéº¼åšï¼Ÿ<br/>在任何變更套用到儲存è£ç½®ä¸Šå‰ï¼Œæ‚¨éƒ½å¯ä»¥é‡æ–°æª¢è¦–ä¸¦ç¢ºèªæ‚¨çš„鏿“‡ã€‚ ClearMountsJob Clear mounts for partitioning operations on %1 ç‚ºäº†æº–å‚™åˆ†å‰²å€æ“作而完全å¸è¼‰ %1 Clearing mounts for partitioning operations on %1. æ­£åœ¨ç‚ºäº†æº–å‚™åˆ†å‰²å€æ“作而完全å¸è¼‰ %1 Cleared all mounts for %1 已清除所有與 %1 相關的掛載 ClearTempMountsJob Clear all temporary mounts. 清除所有暫時掛載。 Clearing all temporary mounts. 正在清除所有暫時掛載。 Cannot get list of temporary mounts. 無法å–得暫時掛載的列表。 Cleared all temporary mounts. 已清除所有暫時掛載。 CommandList Could not run command. 無法執行指令。 The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. 指令執行於主機環境中,且需è¦çŸ¥é“根路徑,但根掛載點未定義。 The command needs to know the user's name, but no username is defined. 指令需è¦çŸ¥é“使用者å稱,但是使用者å稱未定義。 ContextualProcessJob Contextual Processes Job 情境處ç†ç¨‹åºå·¥ä½œ CreatePartitionDialog Create a Partition å»ºç«‹ä¸€å€‹åˆ†å‰²å€ MiB MiB Partition &Type: 分割å€èˆ‡é¡žåž‹ (&T): &Primary 主è¦åˆ†å‰²å€ (&P) E&xtended å»¶ä¼¸åˆ†å‰²å€ (&x) Fi&le System: 檔案系統 (&I): LVM LV name LVM LV å稱 Flags: 旗標: &Mount Point: 掛載點 (&M): Si&ze: 容é‡å¤§å° (&z) : En&crypt 加密(&C) Logical é‚輯ç£å€ Primary 主è¦ç£å€ GPT GPT Mountpoint already in use. Please select another one. æŽ›è¼‰é»žä½¿ç”¨ä¸­ã€‚è«‹é¸æ“‡å…¶ä»–的。 CreatePartitionJob Create new %2MiB partition on %4 (%3) with file system %1. 使用檔案系統 %1 在 %4 (%3) 建立新的 %2MiB 分割å€ã€‚ Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. 使用檔案系統 <strong>%1</strong> 在 <strong>%4</strong> (%3) 建立新的 <strong>%2MiB</strong> 分割å€ã€‚ Creating new %1 partition on %2. 正在於 %2 建立新的 %1 分割å€ã€‚ The installer failed to create partition on disk '%1'. 安è£ç¨‹å¼åœ¨ç£ç¢Ÿ '%1' 上建立分割å€å¤±æ•—。 CreatePartitionTableDialog Create Partition Table 建立分割å€è¡¨æ ¼ Creating a new partition table will delete all existing data on the disk. 新增一個分割å€è¡¨æ ¼å°‡æœƒåˆªé™¤ç¡¬ç¢Ÿä¸Šæ‰€æœ‰å·²å­˜åœ¨çš„資料 What kind of partition table do you want to create? 您想è¦å»ºç«‹å“ªä¸€ç¨®åˆ†å‰²å€è¡¨æ ¼ï¼Ÿ Master Boot Record (MBR) 主è¦é–‹æ©Ÿç´€éŒ„ (MBR) GUID Partition Table (GPT) GUID 分割å€è¡¨æ ¼ (GPT) CreatePartitionTableJob Create new %1 partition table on %2. 在 %2 上建立新的 %1 分割表。 Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). 在 <strong>%2</strong> (%3) 上建立新的 <strong>%1</strong> 分割表。 Creating new %1 partition table on %2. 正在於 %2 建立新的 %1 分割表。 The installer failed to create a partition table on %1. 安è£ç¨‹å¼åœ¨ %1 上建立分割å€è¡¨æ ¼å¤±æ•—。 CreateUserJob Create user %1 建立使用者 %1 Create user <strong>%1</strong>. 建立使用者 <strong>%1</strong>。 Creating user %1. 正在建立使用者 %1。 Sudoers dir is not writable. Sudoers 目錄ä¸å¯å¯«å…¥ã€‚ Cannot create sudoers file for writing. 無法建立è¦å¯«å…¥çš„ sudoers 檔案。 Cannot chmod sudoers file. 無法修改 sudoers 檔案權é™ã€‚ Cannot open groups file for reading. 無法開啟è¦è®€å–çš„ groups 檔案。 CreateVolumeGroupDialog Create Volume Group 建立å·å†Šç¾¤çµ„ CreateVolumeGroupJob Create new volume group named %1. 建立å為 %1 的新å·å†Šç¾¤çµ„。 Create new volume group named <strong>%1</strong>. 建立å為 <strong>%1</strong> 的新å·å†Šç¾¤çµ„。 Creating new volume group named %1. 正在建立å為 %1 的新å·å†Šç¾¤çµ„。 The installer failed to create a volume group named '%1'. 安è£ç¨‹å¼å»ºç«‹å為「%1ã€çš„æ–°å·å†Šç¾¤çµ„失敗。 DeactivateVolumeGroupJob Deactivate volume group named %1. åœç”¨å為 %1 的新å·å†Šç¾¤çµ„。 Deactivate volume group named <strong>%1</strong>. åœç”¨å為 <strong>%1</strong> 的新å·å†Šç¾¤çµ„。 The installer failed to deactivate a volume group named %1. 安è£ç¨‹å¼åœç”¨å為「%1ã€çš„æ–°å·å†Šç¾¤çµ„失敗。 DeletePartitionJob Delete partition %1. åˆªé™¤åˆ†å‰²å€ %1。 Delete partition <strong>%1</strong>. åˆªé™¤åˆ†å‰²å€ <strong>%1</strong>。 Deleting partition %1. æ­£åœ¨åˆªé™¤åˆ†å‰²å€ %1。 The installer failed to delete partition %1. 安è£ç¨‹å¼åˆªé™¤åˆ†å‰²å€ %1 失敗。 DeviceInfoWidget The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. é¸å®šçš„儲存è£ç½®çš„<strong>分割表</strong>類型。<br><br>變更分割表的唯一方法,就是抹除å†é‡æ–°å¾žé ­å»ºç«‹åˆ†å‰²è¡¨ï¼Œé€™æœƒç ´å£žåœ¨è©²å„²å­˜è£ç½®æ‰€æœ‰çš„資料。<br>除éžç‰¹åˆ¥é¸æ“‡ï¼Œå¦å‰‡æœ¬å®‰è£ç¨‹å¼æœƒä¿ç•™ç›®å‰çš„分割表。<br>è‹¥ä¸ç¢ºå®šï¼Œç¾æ™‚的系統建議使用 GPT。 This device has a <strong>%1</strong> partition table. æ­¤è£ç½®å·²æœ‰ <strong>%1</strong> 分割表。 This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. 這是一個 <strong>迴圈</strong> è£ç½®ã€‚<br><br>它是一個沒有分割表,但讓檔案å¯ä»¥è¢«åƒå¡Šè£ç½®ä¸€æ¨£å­˜å–çš„å½è£ç½®ã€‚此種設定通常åªåŒ…å«ä¸€å€‹å–®ä¸€çš„æª”案系統。 This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. 本安è£ç¨‹å¼åœ¨é¸å®šçš„儲存è£ç½®ä¸Š<strong>嵿¸¬ä¸åˆ°åˆ†å‰²è¡¨</strong>。<br><br>æ­¤è£ç½®è¦ä¸æ˜¯æ²’有分割表,就是其分割表已毀æåˆæˆ–者是一個未知類型的分割表。<br>本安è£ç¨‹å¼å°‡æœƒç‚ºæ‚¨å»ºç«‹ä¸€å€‹æ–°çš„分割表,ä¸è«–是自動或是é€éŽæ‰‹å‹•分割é é¢ã€‚ <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>é€™æ˜¯å° <strong>EFI</strong> 開機環境而言的ç¾ä»£ç³»çµ±å»ºè­°åˆ†å‰²è¡¨é¡žåž‹ã€‚ <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. <br><br>建議這個分割表類型åªåœ¨ä»¥ <strong>BIOS</strong> 開機的舊系統使用。其他大多數情æ³å»ºè­°ä½¿ç”¨ GPT。<br><strong>警告:</strong>MBR åˆ†å‰²è¡¨æ˜¯å·²éŽæ™‚ã€æºè‡ª MS-DOS 時代的標準。<br>最多åªèƒ½å»ºç«‹ 4 個<em>主è¦</em>分割å€ï¼›å…¶ä¸­ä¸€å€‹å¯ä»¥æ˜¯<em>延伸</em>分割å€ï¼Œå…¶å¯ä»¥åŒ…å«è¨±å¤š<em>é‚輯</em>分割å€ã€‚ DeviceModel %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) %1 - (%2) device[name] - (device-node[name]) %1 - (%2) DracutLuksCfgJob Write LUKS configuration for Dracut to %1 為 Dracut 寫入 LUKS 設定到 %1 Skip writing LUKS configuration for Dracut: "/" partition is not encrypted è·³éŽç‚º Dracut 寫入 LUKS 設定:"/" åˆ†å‰²å€æœªåР坆 Failed to open %1 開啟 %1 失敗 DummyCppJob Dummy C++ Job 虛設 C++ 排程 EditExistingPartitionDialog Edit Existing Partition ç·¨è¼¯å·²ç¶“å­˜åœ¨çš„åˆ†å‰²å€ Content: 內容: &Keep ä¿ç•™(&K) Format æ ¼å¼åŒ– Warning: Formatting the partition will erase all existing data. 警告:格å¼åŒ–è©²åˆ†å‰²å€æ›æŠ¹é™¤æ‰€æœ‰å·²å­˜åœ¨çš„資料。 &Mount Point: 掛載點 (&M): Si&ze: 容é‡å¤§å° (&Z) : MiB MiB Fi&le System: 檔案系統 (&I): Flags: 旗標: Mountpoint already in use. Please select another one. æŽ›è¼‰é»žä½¿ç”¨ä¸­ã€‚è«‹é¸æ“‡å…¶ä»–的。 EncryptWidget Form å½¢å¼ En&crypt system 加密系統(&C) Passphrase 通關密語 Confirm passphrase 確èªé€šé—œå¯†èªž Please enter the same passphrase in both boxes. 請在兩個框框中輸入相åŒçš„通關密語。 FillGlobalStorageJob Set partition information 設定分割å€è³‡è¨Š Install %1 on <strong>new</strong> %2 system partition. 在 <strong>æ–°çš„</strong>ç³»çµ±åˆ†å‰²å€ %2 ä¸Šå®‰è£ %1。 Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. 設定 <strong>æ–°çš„</strong> ä¸å«æŽ›è¼‰é»ž <strong>%1</strong> çš„ %2 分割å€ã€‚ Install %2 on %3 system partition <strong>%1</strong>. 在 %3 ç³»çµ±åˆ†å‰²å€ <strong>%1</strong> ä¸Šå®‰è£ %2。 Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. ç‚ºåˆ†å‰²å€ %3 <strong>%1</strong> 設定掛載點 <strong>%2</strong>。 Install boot loader on <strong>%1</strong>. 安è£é–‹æ©Ÿè¼‰å…¥å™¨æ–¼ <strong>%1</strong>。 Setting up mount points. 正在設定掛載點。 FinishedPage Form åž‹å¼ <Restart checkbox tooltip> <Restart checkbox tooltip> &Restart now ç¾åœ¨é‡æ–°å•Ÿå‹• (&R) <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>都完æˆäº†ã€‚</h1><br/>%1 已經在您的電腦上設定好了。<br/>您ç¾åœ¨å¯èƒ½æœƒæƒ³è¦é–‹å§‹ä½¿ç”¨æ‚¨çš„æ–°ç³»çµ±ã€‚ <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html> <html><head/><body><p>ç•¶é€™å€‹å‹¾é¸æ¡†è¢«é¸å–時,您的系統將會在按下<span style="font-style:italic;">完æˆ</span>æˆ–é—œé–‰è¨­å®šç¨‹å¼æ™‚ç«‹åˆ»é‡æ–°å•Ÿå‹•。</p></body></html> <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. <h1>都完æˆäº†ã€‚</h1><br/>%1 已經安è£åœ¨æ‚¨çš„電腦上了。<br/>您ç¾åœ¨å¯èƒ½æœƒæƒ³è¦é‡æ–°å•Ÿå‹•到您的新系統中,或是繼續使用 %2 Live 環境。 <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html> <html><head/><body><p>ç•¶é€™å€‹å‹¾é¸æ¡†è¢«é¸å–時,您的系統將會在按下<span style="font-style:italic;">完æˆ</span>或關閉安è£ç¨‹å¼æ™‚ç«‹åˆ»é‡æ–°å•Ÿå‹•。</p></body></html> <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>設定失敗</h1><br/>%1 並未在您的電腦設定好。<br/>錯誤訊æ¯ç‚ºï¼š%2。 <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>安è£å¤±æ•—</h1><br/>%1 並未安è£åˆ°æ‚¨çš„電腦上。<br/>錯誤訊æ¯ç‚ºï¼š%2。 FinishedViewStep Finish å®Œæˆ Setup Complete è¨­å®šå®Œæˆ Installation Complete 安è£å®Œæˆ The setup of %1 is complete. %1 的設定完æˆã€‚ The installation of %1 is complete. %1 的安è£å·²å®Œæˆã€‚ FormatPartitionJob Format partition %1 (file system: %2, size: %3 MiB) on %4. æ ¼å¼åŒ–åˆ†å‰²å€ %1(檔案系統:%2,大å°ï¼š%3 MiB)在 %4。 Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. æ ¼å¼åŒ– <strong>%3MiB</strong> åˆ†å‰²å€ <strong>%1</strong>,使用檔案系統 <strong>%2</strong>。 Formatting partition %1 with file system %2. 正在以 %2 檔案系統格å¼åŒ–åˆ†å‰²å€ %1。 The installer failed to format partition %1 on disk '%2'. 安è£ç¨‹å¼æ ¼å¼åŒ–在ç£ç¢Ÿ '%2' ä¸Šçš„åˆ†å‰²å€ %1 失敗。 GeneralRequirements has at least %1 GiB available drive space 有至少 %1 GiB çš„å¯ç”¨ç£ç¢Ÿç©ºé–“ There is not enough drive space. At least %1 GiB is required. 沒有足夠的ç£ç¢Ÿç©ºé–“ã€‚è‡³å°‘éœ€è¦ %1 GiB。 has at least %1 GiB working memory 有至少 %1 GiB çš„å¯ç”¨è¨˜æ†¶é«” The system does not have enough working memory. At least %1 GiB is required. ç³»çµ±æ²’æœ‰è¶³å¤ çš„è¨˜æ†¶é«”ã€‚è‡³å°‘éœ€è¦ %1 GiB。 is plugged in to a power source å·²æ’å…¥å¤–æŽ¥é›»æº The system is not plugged in to a power source. 系統未æ’入外接電æºã€‚ is connected to the Internet 已連上網際網路 The system is not connected to the Internet. 系統未連上網際網路 is running the installer as an administrator (root) 以管ç†å“¡ (root) 權é™åŸ·è¡Œå®‰è£ç¨‹å¼ The setup program is not running with administrator rights. 設定程å¼ä¸¦æœªä»¥ç®¡ç†å“¡æ¬Šé™åŸ·è¡Œã€‚ The installer is not running with administrator rights. 安è£ç¨‹å¼ä¸¦æœªä»¥ç®¡ç†å“¡æ¬Šé™åŸ·è¡Œã€‚ has a screen large enough to show the whole installer 螢幕夠大,å¯ä»¥é¡¯ç¤ºæ•´å€‹å®‰è£ç¨‹å¼ The screen is too small to display the setup program. 螢幕太å°äº†ï¼Œæ²’辦法顯示設定程å¼ã€‚ The screen is too small to display the installer. 螢幕太å°äº†ï¼Œæ²’辦法顯示安è£ç¨‹å¼ã€‚ HostInfoJob Collecting information about your machine. 正在è’集關於您機器的資訊。 IDJob OEM Batch Identifier OEM 批次識別記號 Could not create directories <code>%1</code>. 無法建立目錄 <code>%1</code>。 Could not open file <code>%1</code>. 無法開啟檔案 <code>%1</code>。 Could not write to file <code>%1</code>. 無法寫入至檔案 <code>%1</code>。 InitcpioJob Creating initramfs with mkinitcpio. 正在使用 mkinitcpio 建立 initramfs。 InitramfsJob Creating initramfs. 正在建立 initramfs。 InteractiveTerminalPage Konsole not installed æœªå®‰è£ Konsole Please install KDE Konsole and try again! è«‹å®‰è£ KDE Konsole 並å†è©¦ä¸€æ¬¡ï¼ Executing script: &nbsp;<code>%1</code> 正在執行指令稿:&nbsp;<code>%1</code> InteractiveTerminalViewStep Script 指令稿 KeyboardPage Set keyboard model to %1.<br/> 設定éµç›¤åž‹è™Ÿç‚º %1 。<br/> Set keyboard layout to %1/%2. 設定éµç›¤ä½ˆå±€ç‚º %1/%2 。 KeyboardViewStep Keyboard éµç›¤ LCLocaleDialog System locale setting 系統語系設定 The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. 系統語系設定會影響部份命令列使用者介é¢çš„語言åŠå­—元集。<br/>ç›®å‰çš„設定為 <strong>%1</strong>。 &Cancel å–æ¶ˆ(&C) &OK 確定(&O) LicensePage Form 表單 <h1>License Agreement</h1> <h1>æŽˆæ¬Šæ¢æ¬¾</h1> I accept the terms and conditions above. 我接å—ä¸Šè¿°çš„æ¢æ¬¾èˆ‡æ¢ä»¶ã€‚ Please review the End User License Agreements (EULAs). è«‹å¯©é–±çµ‚ç«¯ä½¿ç”¨è€…æŽˆæ¬Šæ¢æ¬¾ (EULAs)。 This setup procedure will install proprietary software that is subject to licensing terms. 此設定éŽç¨‹å°‡æœƒå®‰è£éœ€è¦åŒæ„å…¶æŽˆæ¬Šæ¢æ¬¾çš„專有軟體。 If you do not agree with the terms, the setup procedure cannot continue. 如果您ä¸åŒæ„æ­¤æ¢æ¬¾ï¼Œå®‰è£ç¨‹åºå°±ç„¡æ³•繼續。 This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. 此設定éŽç¨‹æœƒå®‰è£éœ€è¦åŒæ„æŽˆæ¬Šæ¢æ¬¾çš„專有軟體以æä¾›é™„加功能並強化使用者體驗。 If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. 如果您ä¸åŒæ„æ¢æ¬¾ï¼Œå°±ä¸æœƒå®‰è£å°ˆæœ‰è»Ÿé«”,而將會使用開放原始碼的替代方案。 LicenseViewStep License æŽˆæ¬Šæ¢æ¬¾ LicenseWidget URL: %1 URL:%1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 驅動程å¼</strong><br/>ç”± %2 所æä¾› <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 顯示å¡é©…動程å¼</strong><br/><font color="Grey">ç”± %2 所æä¾›</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 ç€è¦½å™¨å¤–掛程å¼</strong><br/><font color="Grey">ç”± %2 所æä¾›</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 編解碼器</strong><br/><font color="Grey">ç”± %2 所æä¾›</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 軟體包</strong><br/><font color="Grey">ç”± %2 所æä¾›</font> <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">ç”± %2 所æä¾›</font> File: %1 檔案:%1 Show the license text é¡¯ç¤ºæŽˆæ¬Šæ¢æ¬¾æ–‡å­— Open license agreement in browser. 在ç€è¦½å™¨ä¸­é–‹å•ŸæŽˆæ¬Šæ¢æ¬¾æ–‡å­—。 Hide license text éš±è—æŽˆæ¬Šæ¢æ¬¾æ–‡å­— LocalePage The system language will be set to %1. 系統語言會設定為%1。 The numbers and dates locale will be set to %1. 數字與日期語系會設定為%1。 Region: åœ°å€ Zone: æ™‚å€ &Change... 變更...(&C) Set timezone to %1/%2.<br/> 設定時å€ç‚º %1/%2 。<br/> LocaleViewStep Location ä½ç½® LuksBootKeyFileJob Configuring LUKS key file. 正在設定 LUKS 金鑰檔案。 No partitions are defined. 沒有已定義的分割å€ã€‚ Encrypted rootfs setup error 已加密的 rootfs 設定錯誤 Root partition %1 is LUKS but no passphrase has been set. æ ¹åˆ†å‰²å€ %1 為 LUKS 但沒有設定密碼。 Could not create LUKS key file for root partition %1. ç„¡æ³•ç‚ºæ ¹åˆ†å‰²å€ %1 建立 LUKS 金鑰檔。 Could not configure LUKS key file on partition %1. ç„¡æ³•æ–¼åˆ†å‰²å€ %1 設定 LUKS 金鑰檔。 MachineIdJob Generate machine-id. ç”Ÿæˆ machine-id。 Configuration Error 設定錯誤 No root mount point is set for MachineId. 未為 MachineId 設定根掛載點。 NetInstallPage Name å稱 Description æè¿° Network Installation. (Disabled: Unable to fetch package lists, check your network connection) 網路安è£ã€‚(已åœç”¨ï¼šç„¡æ³•æ“·å–軟體包清單,請檢查您的網路連線) Network Installation. (Disabled: Received invalid groups data) 網路安è£ã€‚(已åœç”¨ï¼šæ”¶åˆ°ç„¡æ•ˆçš„群組資料) Network Installation. (Disabled: Incorrect configuration) 網路安è£ã€‚(已åœç”¨ï¼šè¨­å®šä¸æ­£ç¢ºï¼‰ NetInstallViewStep Package selection è»Ÿé«”åŒ…é¸æ“‡ Office software 辦公軟體 Office package 辦公套件 Browser software ç€è¦½å™¨è»Ÿé«” Browser package ç€è¦½å™¨å¥—ä»¶ Web browser ç¶²é ç€è¦½å™¨ Kernel å…§æ ¸ Services æœå‹™ Login 登入 Desktop æ¡Œé¢ Applications æ‡‰ç”¨ç¨‹å¼ NotesQmlViewStep Notes 記事 OEMPage Ba&tch: 批次:(&T) <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>在此輸入批次識別記號。這將會儲存在目標系統中。</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>OEM 設定</h1><p>在設定目標系統時,Calamares 將會使用 OEM 設定。</p></body></html> OEMViewStep OEM Configuration OEM 設定 Set the OEM Batch Identifier to <code>%1</code>. 設定 OEM 批次識別符號為 <code>%1</code>。 PWQ Password is too short 密碼太短 Password is too long 密碼太長 Password is too weak 密碼太弱 Memory allocation error when setting '%1' 當設定「%1ã€æ™‚記憶體分é…錯誤 Memory allocation error 記憶體分é…錯誤 The password is the same as the old one å¯†ç¢¼èˆ‡èˆŠçš„ç›¸åŒ The password is a palindrome 此密碼為迴文 The password differs with case changes only 密碼僅大å°å¯«ä¸åŒ The password is too similar to the old one 密碼與舊的太éŽç›¸ä¼¼ The password contains the user name in some form å¯†ç¢¼åŒ…å«æŸç¨®å½¢å¼çš„使用者å稱 The password contains words from the real name of the user in some form 密碼包å«äº†æŸç¨®å½¢å¼çš„使用者真實姓å The password contains forbidden words in some form 密碼包å«äº†æŸç¨®å½¢å¼çš„無效文字 The password contains less than %1 digits 密碼中的數字少於 %1 個 The password contains too few digits 密碼包å«çš„æ•¸å­—太少了 The password contains less than %1 uppercase letters 密碼包å«å°‘æ–¼ %1 å€‹å¤§å¯«å­—æ¯ The password contains too few uppercase letters 密碼包å«çš„大寫字æ¯å¤ªå°‘了 The password contains less than %1 lowercase letters 密碼包å«å°‘æ–¼ %1 個å°å¯«å­—æ¯ The password contains too few lowercase letters 密碼包å«çš„å°å¯«å­—æ¯å¤ªå°‘了 The password contains less than %1 non-alphanumeric characters 密碼包å«äº†å°‘æ–¼ %1 個éžå­—æ¯èˆ‡æ•¸å­—的字元 The password contains too few non-alphanumeric characters 密碼包å«çš„éžå­—æ¯èˆ‡æ•¸å­—的字元太少了 The password is shorter than %1 characters 密碼短於 %1 個字元 The password is too short 密碼太短 The password is just rotated old one å¯†ç¢¼åªæ˜¯è¼ªæ›éŽçš„舊密碼 The password contains less than %1 character classes 密碼包å«äº†å°‘æ–¼ %1 種字元類型 The password does not contain enough character classes 密碼未包å«è¶³å¤ çš„字元類型 The password contains more than %1 same characters consecutively 密碼包å«äº†é€£çºŒè¶…éŽ %1 個相åŒå­—å…ƒ The password contains too many same characters consecutively 密碼包å«é€£çºŒå¤ªå¤šå€‹ç›¸åŒçš„å­—å…ƒ The password contains more than %1 characters of the same class consecutively 密碼包å«äº†é€£çºŒå¤šæ–¼ %1 個相åŒçš„字元類型 The password contains too many characters of the same class consecutively 密碼包å«äº†é€£çºŒå¤ªå¤šç›¸åŒé¡žåž‹çš„å­—å…ƒ The password contains monotonic sequence longer than %1 characters 密碼包å«äº†é•·åº¦è¶…éŽ %1 個字元的單調åºåˆ— The password contains too long of a monotonic character sequence 密碼包å«äº†é•·åº¦éŽé•·çš„單調字元åºåˆ— No password supplied 未æä¾›å¯†ç¢¼ Cannot obtain random numbers from the RNG device 無法從 RNG è£ç½®ä¸­å–得隨機數 Password generation failed - required entropy too low for settings 密碼生æˆå¤±æ•—,設定的必è¦ç†µå¤ªä½Ž The password fails the dictionary check - %1 密碼在字典檢查時失敗 - %1 The password fails the dictionary check 密碼在字典檢查時失敗 Unknown setting - %1 未知的設定 - %1 Unknown setting 未知的設定 Bad integer value of setting - %1 æ•´æ•¸å€¼è¨­å®šä¸æ­£ç¢º - %1 Bad integer value æ•´æ•¸å€¼ä¸æ­£ç¢º Setting %1 is not of integer type 設定 %1 䏿˜¯æ•´æ•¸é¡žåž‹ Setting is not of integer type è¨­å®šä¸æ˜¯æ•´æ•¸é¡žåž‹ Setting %1 is not of string type 設定 %1 䏿˜¯å­—串類型 Setting is not of string type è¨­å®šä¸æ˜¯å­—串類型 Opening the configuration file failed 開啟設定檔失敗 The configuration file is malformed 設定檔格å¼ä¸æ­£ç¢º Fatal failure 無法挽回的失敗 Unknown error 未知的錯誤 Password is empty 密碼為空 PackageChooserPage Form å½¢å¼ Product Name 產å“å稱 TextLabel 文字標籤 Long Product Description è¼ƒé•·çš„ç”¢å“æè¿° Package Selection è»Ÿé«”åŒ…é¸æ“‡ Please pick a product from the list. The selected product will be installed. 請從清單中挑é¸ç”¢å“。將會安è£é¸å®šçš„產å“。 PackageChooserViewStep Packages 軟體包 Page_Keyboard Form Form Keyboard Model: éµç›¤åž‹è™Ÿï¼š Type here to test your keyboard 在此輸入以測試您的éµç›¤ Page_UserSetup Form Form What is your name? 該如何稱呼您? What name do you want to use to log in? 您想使用何種登入å稱? Choose a password to keep your account safe. 輸入密碼以確ä¿å¸³è™Ÿçš„安全性。 <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> <small>輸入åŒä¸€å€‹å¯†ç¢¼å…©æ¬¡ï¼Œä»¥æª¢æŸ¥è¼¸å…¥éŒ¯èª¤ã€‚一個好的密碼包å«äº†å­—æ¯ã€æ•¸å­—åŠæ¨™é»žç¬¦è™Ÿçš„組åˆã€è‡³å°‘八個字æ¯é•·ï¼Œä¸”按一固定週期更æ›ã€‚</small> What is the name of this computer? 這部電腦的å字是? Your Full Name 您的全å login 登入 <small>This name will be used if you make the computer visible to others on a network.</small> <small>若您將此電腦設定為讓網路上的其他電腦å¯è¦‹æ™‚將會使用此å稱。</small> Computer Name 電腦å稱 Password 密碼 Repeat Password 確èªå¯†ç¢¼ When this box is checked, password-strength checking is done and you will not be able to use a weak password. ç•¶æ­¤å‹¾é¸æ¡†è¢«å‹¾é¸ï¼Œå¯†ç¢¼å¼·åº¦æª¢æŸ¥å³å®Œæˆï¼Œæ‚¨ä¹Ÿç„¡æ³•å†ä½¿ç”¨å¼±å¯†ç¢¼ã€‚ Require strong passwords. 需è¦å¼·å¯†ç¢¼ã€‚ Log in automatically without asking for the password. ä¸è©¢å•密碼自動登入。 Use the same password for the administrator account. 為管ç†å“¡å¸³è™Ÿä½¿ç”¨åŒæ¨£çš„密碼。 Choose a password for the administrator account. 替系統管ç†å“¡å¸³è™Ÿè¨­å®šä¸€çµ„密碼 <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>è¼¸å…¥åŒæ¨£çš„密碼兩次,這樣å¯ä»¥æª¢æŸ¥è¼¸å…¥éŒ¯èª¤ã€‚</small> PartitionLabelsView Root 根目錄 Home 家目錄 Boot Boot EFI system EFI 系統 Swap Swap New partition for %1 %1 çš„æ–°åˆ†å‰²å€ New partition æ–°åˆ†å‰²å€ %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space 剩餘空間 New partition æ–°åˆ†å‰²å€ Name å稱 File System 檔案系統 Mount Point 掛載點 Size å¤§å° PartitionPage Form Form Storage de&vice: 儲存è£ç½®(&V): &Revert All Changes 將所有變更æ¢å¾©åŽŸç‹€ (&R) New Partition &Table 新的分割表格 (&T) Cre&ate 建立(&A) &Edit 編輯 (&E) &Delete 刪除 (&D) New Volume Group æ–°å·å†Šç¾¤çµ„ Resize Volume Group 調整å·å†Šç¾¤çµ„å¤§å° Deactivate Volume Group åœç”¨å·å†Šç¾¤çµ„ Remove Volume Group 移除å·å†Šç¾¤çµ„ I&nstall boot loader on: 安è£é–‹æ©Ÿç®¡ç†ç¨‹å¼æ–¼ï¼š Are you sure you want to create a new partition table on %1? 您是å¦ç¢ºå®šè¦åœ¨ %1 上建立一個新的分割å€è¡¨æ ¼ï¼Ÿ Can not create new partition ç„¡æ³•å»ºç«‹æ–°åˆ†å‰²å€ The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. 在 %1 上的分割表已有 %2 個主è¦åˆ†å‰²å€ï¼Œç„¡æ³•冿–°å¢žã€‚請移除一個主è¦åˆ†å‰²å€ä¸¦æ–°å¢žä¸€å€‹å»¶ä¼¸åˆ†å‰²å€ã€‚ PartitionViewStep Gathering system information... è’集系統資訊中... Partitions åˆ†å‰²å€ Install %1 <strong>alongside</strong> another operating system. å°‡ %1 安è£åœ¨å…¶ä»–作業系統<strong>æ—邊</strong>。 <strong>Erase</strong> disk and install %1. <strong>抹除</strong>ç£ç¢Ÿä¸¦å®‰è£ %1。 <strong>Replace</strong> a partition with %1. 以 %1 <strong>å–代</strong>一個分割å€ã€‚ <strong>Manual</strong> partitioning. <strong>手動</strong>分割 Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). å°‡ %1 安è£åœ¨ç£ç¢Ÿ <strong>%2</strong> (%3) 上的å¦ä¸€å€‹ä½œæ¥­ç³»çµ±<strong>æ—邊</strong>。 <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>抹除</strong> ç£ç¢Ÿ <strong>%2</strong> (%3) ä¸¦ä¸”å®‰è£ %1。 <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. 以 %1 <strong>å–代</strong> 一個在ç£ç¢Ÿ <strong>%2</strong> (%3) 上的分割å€ã€‚ <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). 在ç£ç¢Ÿ <strong>%1</strong> (%2) 上<strong>手動</strong>分割。 Disk <strong>%1</strong> (%2) ç£ç¢Ÿ <strong>%1</strong> (%2) Current: ç›®å‰ï¼š After: 之後: No EFI system partition configured 未設定 EFI ç³»çµ±åˆ†å‰²å€ An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. éœ€è¦ EFI 系統分割å€ä»¥å•Ÿå‹• %1。<br/><br/>è¦è¨­å®š EFI 系統分割å€ï¼Œå›žåˆ°ä¸Šä¸€æ­¥ä¸¦é¸å–或建立一個包å«å•Ÿç”¨ <strong>esp</strong> æ——æ¨™ä»¥åŠæŽ›è¼‰é»žä½æ–¼ <strong>%2</strong> çš„ FAT32 檔案系統。<br/><br/>您也å¯ä»¥ä¸è¨­å®š EFI 系統分割å€ä¸¦ç¹¼çºŒï¼Œä½†æ˜¯æ‚¨çš„系統å¯èƒ½æœƒç„¡æ³•啟動。 EFI system partition flag not set 未設定 EFI ç³»çµ±åˆ†å‰²å€æ——標 An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. éœ€è¦ EFI 系統分割å€ä»¥å•Ÿå‹• %1。<br/><br/>有一個分割å€çš„æŽ›è¼‰é»žè¨­å®šç‚º <strong>%2</strong>,但未設定 <strong>esp</strong> 旗標。<br/>è¦è¨­å®šæ­¤æ——標,回到上一步並編輯分割å€ã€‚<br/><br/>您也å¯ä»¥ä¸è¨­å®šæ——標並繼續,但您的系統å¯èƒ½æœƒç„¡æ³•啟動。 Boot partition not encrypted é–‹æ©Ÿåˆ†å‰²å€æœªåР坆 A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. 設定了單ç¨çš„開機分割å€ä»¥åŠåŠ å¯†çš„æ ¹åˆ†å‰²å€ï¼Œä½†æ˜¯é–‹æ©Ÿåˆ†å‰²å€ä¸¦ä¸æœƒè¢«åŠ å¯†ã€‚<br/><br/>這種設定å¯èƒ½æœƒé€ æˆå®‰å…¨å•題,因為é‡è¦çš„系統檔案是放在未加密的分割å€ä¸­ã€‚<br/>您也å¯ä»¥ç¹¼çºŒï¼Œä½†æ˜¯æª”案系統的解鎖會在系統啟動後æ‰ç™¼ç”Ÿã€‚<br/>è¦åŠ å¯†é–‹æ©Ÿåˆ†å‰²å€ï¼Œå›žåˆ°ä¸Šä¸€é ä¸¦é‡æ–°å»ºç«‹å®ƒï¼Œä¸¦åœ¨åˆ†å‰²å€å»ºç«‹è¦–窗é¸å–<strong>加密</strong>。 has at least one disk device available. 有至少一個å¯ç”¨çš„ç£ç¢Ÿè£ç½®ã€‚ There are no partitions to install on. 沒有å¯ç”¨æ–¼å®‰è£çš„分割å€ã€‚ PlasmaLnfJob Plasma Look-and-Feel Job Plasma 外觀與感覺工作 Could not select KDE Plasma Look-and-Feel package 無法é¸å– KDE Plasma 外觀與感覺軟體包 PlasmaLnfPage Form å½¢å¼ Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. 請為 KDE Plasma 桌é¢é¸æ“‡å¤–觀與感覺。您也å¯ä»¥è·³éŽæ­¤æ­¥é©Ÿä¸¦åœ¨ç³»çµ±è¨­å®šå¥½ä¹‹å¾Œå†è¨­å®šã€‚在外觀與感覺å°ç¯€é»žæŒ‰å°‡æœƒçµ¦æ‚¨ç‰¹å®šå¤–è§€èˆ‡æ„Ÿè¦ºçš„å³æ™‚é è¦½ã€‚ Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. 請為 KDE Plasma 桌é¢é¸æ“‡å¤–觀與感覺。您也å¯ä»¥è·³éŽæ­¤æ­¥é©Ÿä¸¦åœ¨ç³»çµ±å®‰è£å¥½ä¹‹å¾Œå†è¨­å®šã€‚在外觀與感覺å°ç¯€é»žæŒ‰å°‡æœƒçµ¦æ‚¨ç‰¹å®šå¤–è§€èˆ‡æ„Ÿè¦ºçš„å³æ™‚é è¦½ã€‚ PlasmaLnfViewStep Look-and-Feel 外觀與感覺 PreserveFiles Saving files for later ... ç¨å¾Œå„²å­˜æª”案…… No files configured to save for later. 沒有檔案被設定為ç¨å¾Œå„²å­˜ã€‚ Not all of the configured files could be preserved. ä¸¦éžæ‰€æœ‰å·²è¨­å®šçš„æª”案都å¯ä»¥è¢«ä¿ç•™ã€‚ ProcessResult There was no output from the command. 指令沒有輸出。 Output: 輸出: External command crashed. 外部指令當機。 Command <i>%1</i> crashed. 指令 <i>%1</i> 已當機。 External command failed to start. 外部指令啟動失敗。 Command <i>%1</i> failed to start. 指令 <i>%1</i> 啟動失敗。 Internal error when starting command. 當啟動指令時發生內部錯誤。 Bad parameters for process job call. 呼å«ç¨‹åºçš„åƒæ•¸ç„¡æ•ˆã€‚ External command failed to finish. å¤–éƒ¨æŒ‡ä»¤çµæŸå¤±æ•—。 Command <i>%1</i> failed to finish in %2 seconds. 指令 <i>%1</i> åœ¨çµæŸ %2 秒內失敗。 External command finished with errors. å¤–éƒ¨æŒ‡ä»¤çµæŸæ™‚發生錯誤。 Command <i>%1</i> finished with exit code %2. 指令 <i>%1</i> çµæŸæ™‚有錯誤碼 %2。 QObject Default Keyboard Model é è¨­éµç›¤åž‹è™Ÿ Default é è¨­å€¼ unknown 未知 extended å»¶ä¼¸åˆ†å‰²å€ unformatted 未格å¼åŒ– swap swap Unpartitioned space or unknown partition table å°šæœªåˆ†å‰²çš„ç©ºé–“æˆ–æ˜¯ä¸æ˜Žçš„分割表 (no mount point) (沒有掛載點) Requirements checking for module <i>%1</i> is complete. 模組 <i>%1</i> 需求檢查完æˆã€‚ %1 (%2) language[name] (country[name]) %1 (%2) No product æ²’æœ‰ç”¢å“ No description provided. 未æä¾›æè¿°ã€‚ File not found 找ä¸åˆ°æª”案 Path <pre>%1</pre> must be an absolute path. 路徑 <pre>%1</pre> 必須為絕å°è·¯å¾‘。 Could not create new random file <pre>%1</pre>. 無法建立新的隨機檔案 <pre>%1</pre>。 RemoveVolumeGroupJob Remove Volume Group named %1. 移除å為 %1 çš„å·å†Šç¾¤çµ„。 Remove Volume Group named <strong>%1</strong>. 移除å為 <strong>%1</strong> çš„å·å†Šç¾¤çµ„。 The installer failed to remove a volume group named '%1'. 安è£ç¨‹å¼ç§»é™¤å為「%1ã€çš„æ–°å·å†Šç¾¤çµ„失敗。 ReplaceWidget Form 表單 Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. é¸å–è¦åœ¨å“ªè£¡å®‰è£ %1。<br/><font color="red">警告:</font>這將會刪除所有在é¸å®šåˆ†å‰²å€ä¸­çš„æª”案。 The selected item does not appear to be a valid partition. é¸å®šçš„é …ç›®ä¼¼ä¹Žä¸æ˜¯ä¸€å€‹æœ‰æ•ˆçš„分割å€ã€‚ %1 cannot be installed on empty space. Please select an existing partition. %1 無法在空白的空間中安è£ã€‚è«‹é¸å–一個存在的分割å€ã€‚ %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 無法在延伸分割å€ä¸Šå®‰è£ã€‚è«‹é¸å–ä¸€å€‹å­˜åœ¨çš„ä¸»è¦æˆ–é‚輯分割å€ã€‚ %1 cannot be installed on this partition. %1 無法在此分割å€ä¸Šå®‰è£ã€‚ Data partition (%1) è³‡æ–™åˆ†å‰²å€ (%1) Unknown system partition (%1) 䏿˜Žçš„ç³»çµ±åˆ†å‰²å€ (%1) %1 system partition (%2) %1 ç³»çµ±åˆ†å‰²å€ (%2) <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>åˆ†å‰²å€ %1 å° %2 來說太å°äº†ã€‚è«‹é¸å–一個容é‡è‡³å°‘有 %3 GiB 的分割å€ã€‚ <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. <strong>%2</strong><br/><br/>在這個系統找ä¸åˆ° EFI 系統分割å€ã€‚請回到上一步並使用手動分割以設定 %1。 <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. <strong>%3</strong><br/><br/>%1 將會安è£åœ¨ %2。<br/><font color="red">警告:</font>æ‰€æœ‰åœ¨åˆ†å‰²å€ %2 的資料都會消失。 The EFI system partition at %1 will be used for starting %2. 在 %1 çš„ EFI 系統分割å€å°‡æœƒåœ¨é–‹å§‹ %2 時使用。 EFI system partition: EFI 系統分割å€ï¼š ResizeFSJob Resize Filesystem Job 調整檔案系統大å°å·¥ä½œ Invalid configuration 無效的設定 The file-system resize job has an invalid configuration and will not run. 檔案系統調整大å°å·¥ä½œæœ‰ç„¡æ•ˆçš„è¨­å®šä¸”å°‡ä¸æœƒåŸ·è¡Œã€‚ KPMCore not Available KPMCore 未æä¾› Calamares cannot start KPMCore for the file-system resize job. Calamares 無法啟動 KPMCore 來進行調整檔案系統大å°çš„工作。 Resize Failed 調整大å°å¤±æ•— The filesystem %1 could not be found in this system, and cannot be resized. 檔案系統 %1 在此系統中找ä¸åˆ°ï¼Œä¸”無法調整大å°ã€‚ The device %1 could not be found in this system, and cannot be resized. è£ç½® %1 在此系統中找ä¸åˆ°ï¼Œä¸”無法調整大å°ã€‚ The filesystem %1 cannot be resized. 檔案系統 %1 無法調整大å°ã€‚ The device %1 cannot be resized. è£ç½® %1 無法調整大å°ã€‚ The filesystem %1 must be resized, but cannot. 檔案系統 %1 必須調整大å°ï¼Œä½†æ˜¯ç„¡æ³•調整。 The device %1 must be resized, but cannot è£ç½® %1 必須調整大å°ï¼Œä½†æ˜¯ç„¡æ³•調整。 ResizePartitionJob Resize partition %1. èª¿æ•´åˆ†å‰²å€ %1 大å°ã€‚ Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. 調整 <strong>%2MiB</strong> åˆ†å‰²å€ <strong>%1</strong> 大å°ç‚º <strong>%3MiB</strong>。 Resizing %2MiB partition %1 to %3MiB. 正在調整 %2MiB åˆ†å‰²å€ %1 大å°ç‚º %3MiB。 The installer failed to resize partition %1 on disk '%2'. 安è£ç¨‹å¼èª¿æ•´åœ¨ç£ç¢Ÿ '%2' ä¸Šçš„åˆ†å‰²å€ %1 的大å°å¤±æ•—。 ResizeVolumeGroupDialog Resize Volume Group 調整å·å†Šç¾¤çµ„å¤§å° ResizeVolumeGroupJob Resize volume group named %1 from %2 to %3. 調整å為 %1 çš„å·å†Šç¾¤çµ„從 %2 到 %3。 Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. 調整å為 <strong>%1</strong> çš„å·å†Šç¾¤çµ„從 <strong>%2</strong> 到 <strong>%3</strong>。 The installer failed to resize a volume group named '%1'. 安è£ç¨‹å¼å°å為「%1ã€çš„æ–°å·å†Šç¾¤çµ„調整大å°å¤±æ•—。 ResultsListDialog For best results, please ensure that this computer: ç‚ºäº†å¾—åˆ°æœ€ä½³çš„çµæžœï¼Œè«‹ç¢ºä¿æ­¤é›»è…¦ï¼š System requirements 系統需求 ResultsListWidget This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> æ­¤é›»è…¦æœªæ»¿è¶³å®‰è£ %1 的最低é…備。<br/>設定無法繼續。<a href="#details">詳細資訊...</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> æ­¤é›»è…¦æœªæ»¿è¶³å®‰è£ %1 的最低é…備。<br/>安è£ç„¡æ³•繼續。<a href="#details">詳細資訊...</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. æ­¤é›»è…¦æœªæ»¿è¶³ä¸€äº›å®‰è£ %1 的推薦需求。<br/>設定å¯ä»¥ç¹¼çºŒï¼Œä½†éƒ¨ä»½åŠŸèƒ½å¯èƒ½æœƒè¢«åœç”¨ã€‚ This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. æ­¤é›»è…¦æœªæ»¿è¶³ä¸€äº›å®‰è£ %1 的推薦需求。<br/>安è£å¯ä»¥ç¹¼çºŒï¼Œä½†éƒ¨ä»½åŠŸèƒ½å¯èƒ½æœƒè¢«åœç”¨ã€‚ This program will ask you some questions and set up %2 on your computer. æœ¬ç¨‹å¼æœƒå•您一些å•題,然後在您的電腦安è£åŠè¨­å®š %2。 ScanningDialog Scanning storage devices... 正在掃æå„²å­˜è£ç½®... Partitioning 分割 SetHostNameJob Set hostname %1 設定主機å %1 Set hostname <strong>%1</strong>. 設定主機å稱 <strong>%1</strong>。 Setting hostname %1. 正在設定主機å稱 %1。 Internal Error 內部錯誤 Cannot write hostname to target system 無法寫入主機å稱到目標系統 SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 å°‡éµç›¤åž‹è™Ÿè¨­å®šç‚º %1,佈局為 %2-%3 Failed to write keyboard configuration for the virtual console. 為虛擬終端機寫入éµç›¤è¨­å®šå¤±æ•—。 Failed to write to %1 寫入到 %1 失敗 Failed to write keyboard configuration for X11. 為 X11 寫入éµç›¤è¨­å®šå¤±æ•—。 Failed to write keyboard configuration to existing /etc/default directory. 寫入éµç›¤è¨­å®šåˆ°å·²å­˜åœ¨çš„ /etc/default 目錄失敗。 SetPartFlagsJob Set flags on partition %1. è¨­å®šåˆ†å‰²å€ %1 的旗標。 Set flags on %1MiB %2 partition. 設定 %1MiB %2 分割å€çš„æ——標。 Set flags on new partition. 設定新分割å€çš„æ——標。 Clear flags on partition <strong>%1</strong>. æ¸…é™¤åˆ†å‰²å€ <strong>%1</strong> 的旗標。 Clear flags on %1MiB <strong>%2</strong> partition. 清除 %1MiB <strong>%2</strong> 分割å€çš„æ——標。 Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. å°‡ %1MiB <strong>%2</strong> åˆ†å‰²å€æ¨™è¨˜ç‚º <strong>%3</strong>。 Clearing flags on %1MiB <strong>%2</strong> partition. 正在清除 %1MiB <strong>%2</strong> 分割å€çš„æ——標。 Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. 正在設定 %1MiB <strong>%2</strong> 分割å€çš„ <strong>%3</strong> 旗標。 Clear flags on new partition. 清除新分割å€çš„æ——標。 Flag partition <strong>%1</strong> as <strong>%2</strong>. è¨­å®šåˆ†å‰²å€ <strong>%1</strong> 的旗標為 <strong>%2</strong>。 Flag new partition as <strong>%1</strong>. 設定新分割å€çš„æ——標為 <strong>%1</strong>。 Clearing flags on partition <strong>%1</strong>. æ­£åœ¨æ¸…é™¤åˆ†å‰²å€ <strong>%1</strong> 的旗標。 Clearing flags on new partition. 清除新分割å€çš„æ——標。 Setting flags <strong>%2</strong> on partition <strong>%1</strong>. 正在設定 <strong>%1</strong> 分割å€çš„ <strong>%2</strong> 旗標。 Setting flags <strong>%1</strong> on new partition. 正在設定新分割å€çš„ <strong>%1</strong> 旗標。 The installer failed to set flags on partition %1. 安è£ç¨‹å¼æœªèƒ½åœ¨åˆ†å‰²å€ %1 設定旗標。 SetPasswordJob Set password for user %1 為使用者 %1 設定密碼 Setting password for user %1. 正在為使用者 %1 設定密碼。 Bad destination system path. éžæ³•的目標系統路徑。 rootMountPoint is %1 根掛載點為 %1 Cannot disable root account. 無法åœç”¨ root 帳號。 passwd terminated with error code %1. passwd 以錯誤代碼 %1 終止。 Cannot set password for user %1. 無法為使用者 %1 設定密碼。 usermod terminated with error code %1. usermod 以錯誤代碼 %1 終止。 SetTimezoneJob Set timezone to %1/%2 設定時å€ç‚º %1/%2 Cannot access selected timezone path. ç„¡æ³•å­˜å–æŒ‡å®šçš„æ™‚å€è·¯å¾‘。 Bad path: %1 éžæ³•路徑:%1 Cannot set timezone. 無法設定時å€ã€‚ Link creation failed, target: %1; link name: %2 連çµå»ºç«‹å¤±æ•—,目標:%1;連çµå稱:%2 Cannot set timezone, 無法設定時å€ã€‚ Cannot open /etc/timezone for writing 無法開啟è¦å¯«å…¥çš„ /etc/timezone ShellProcessJob Shell Processes Job 殼層處ç†ç¨‹åºå·¥ä½œ SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage This is an overview of what will happen once you start the setup procedure. 這是開始安è£å¾Œæ‰€æœƒç™¼ç”Ÿçš„事的概覽。 This is an overview of what will happen once you start the install procedure. 這是您開始安è£å¾Œæ‰€æœƒç™¼ç”Ÿçš„事的概覽。 SummaryViewStep Summary 總覽 TrackingInstallJob Installation feedback 安è£å›žé¥‹ Sending installation feedback. 傳é€å®‰è£å›žé¥‹ Internal error in install-tracking. 在安è£è¿½è¹¤è£¡çš„內部錯誤。 HTTP request timed out. HTTP 請求逾時。 TrackingMachineNeonJob Machine feedback 機器回饋 Configuring machine feedback. 設定機器回饋。 Error in machine feedback configuration. 在機器回饋設定中的錯誤。 Could not configure machine feedback correctly, script error %1. 無法正確設定機器回饋,指令稿錯誤 %1。 Could not configure machine feedback correctly, Calamares error %1. 無法正確設定機器回饋,Calamares 錯誤 %1。 TrackingPage Form å½¢å¼ Placeholder ä½”ä½ç¬¦ <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>é¸å–é€™å€‹ï¼Œæ‚¨ä¸æœƒå‚³é€ <span style=" font-weight:600;">任何關於</span> 您安è£çš„資訊。</p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">點é¸é€™è£¡ä¾†å–得更多關於使用者回饋的資訊</span></a></p></body></html> Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. 安è£è¿½è¹¤å”助 %1 çœ‹è¦‹ä»–å€‘æœ‰å¤šå°‘ä½¿ç”¨è€…ï¼Œç”¨ä»€éº¼ç¡¬é«”å®‰è£ %1 ,以åŠï¼ˆä¸‹é¢çš„æœ€å¾Œå…©å€‹é¸é …)å–å¾—æŒçºŒæ€§çš„資訊,如å好的應用程å¼ç­‰ã€‚è¦æª¢è¦–傳é€äº†å“ªäº›æ±è¥¿ï¼Œè«‹é»žé¸åœ¨æ¯å€‹å€åŸŸæ—邊的說明按鈕。 By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. é¸å–這個後,您將會傳é€é—œæ–¼æ‚¨çš„安è£èˆ‡ç¡¬é«”的資訊。這個資訊將<b>åªæœƒå‚³é€ä¸€æ¬¡</b>,且在安è£å®Œæˆå¾Œã€‚ By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. é¸å–這個後,您將會<b>週期性地</b>傳é€é—œæ–¼æ‚¨çš„安è£ã€ç¡¬é«”與應用程å¼çš„資訊給 %1。 By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. é¸å–這個後,您將會<b>經常</b>傳é€é—œæ–¼æ‚¨çš„安è£ã€ç¡¬é«”ã€æ‡‰ç”¨ç¨‹å¼èˆ‡ä½¿ç”¨æ¨¡å¼çš„資訊給 %1。 TrackingViewStep Feedback 回饋 UsersPage <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>如果將會有多於一人使用這臺電腦,您å¯ä»¥åœ¨å®‰è£å¾Œè¨­å®šå¤šå€‹å¸³è™Ÿã€‚</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>如果將會有多於一人使用這臺電腦,您å¯ä»¥åœ¨å®‰è£å¾Œè¨­å®šå¤šå€‹å¸³è™Ÿã€‚</small> Your username is too long. 您的使用者å稱太長了。 Your username must start with a lowercase letter or underscore. 您的使用者å稱必須以å°å¯«å­—æ¯æˆ–底線開頭。 Only lowercase letters, numbers, underscore and hyphen are allowed. 僅å…許å°å¯«å­—æ¯ã€æ•¸å­—ã€åº•線與連接號。 Only letters, numbers, underscore and hyphen are allowed. 僅å…許字æ¯ã€æ•¸å­—ã€åº•線與連接號。 Your hostname is too short. 您的主機å稱太短了。 Your hostname is too long. 您的主機å稱太長了。 Your passwords do not match! 密碼ä¸ç¬¦ï¼ UsersViewStep Users 使用者 VariantModel Key 金鑰 Value 值 VolumeGroupBaseDialog Create Volume Group 建立å·å†Šç¾¤çµ„ List of Physical Volumes 物ç†å·å†Šæ¸…å–® Volume Group Name: å·å†Šç¾¤çµ„å稱: Volume Group Type: å·å†Šç¾¤çµ„類型: Physical Extent Size: 物ç†å»¶å±•大å°ï¼š MiB MiB Total Size: 大å°ç¸½è¨ˆï¼š Used Size: 已使用大å°ï¼š Total Sectors: 總ç£å€æ•¸ï¼š Quantity of LVs: é‚輯å·å†Šæ•¸é‡ï¼š WelcomePage Form 表單 Select application and system language é¸å–應用程å¼èˆ‡ç³»çµ±èªžè¨€ Open donations website é–‹å•Ÿææ¬¾ç¶²é  &Donate ææ¬¾(&D) Open help and support website 開啟說明與支æ´ç¶²é  Open issues and bug-tracking website 開啟å•é¡Œèˆ‡éŒ¯èª¤è¿½è¹¤ç¶²é  Open release notes website 開啟發行手記網站 &Release notes 發行註記(&R) &Known issues 已知å•題(&K) &Support 支æ´(&S) &About 關於(&A) <h1>Welcome to the %1 installer.</h1> <h1>歡迎使用 %1 安è£ç¨‹å¼ã€‚</h1> <h1>Welcome to the Calamares installer for %1.</h1> <h1>歡迎使用 %1 çš„ Calamares 安è£ç¨‹å¼ã€‚</h1> <h1>Welcome to the Calamares setup program for %1.</h1> <h1>歡迎使用 %1 çš„ Calamares 安è£ç¨‹å¼ã€‚</h1> <h1>Welcome to %1 setup.</h1> <h1>歡迎使用 %1 安è£ç¨‹å¼ã€‚</h1> About %1 setup 關於 %1 安è£ç¨‹å¼ About %1 installer 關於 %1 安è£ç¨‹å¼ <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. <h1>%1</h1><br/><strong>%2<br/>為 %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>æ„Ÿè¬ <a href="https://calamares.io/team/">Calamares 團隊</a>與 <a href="https://www.transifex.com/calamares/calamares/">Calamares 翻譯團隊</a>。<br/><br/><a href="https://calamares.io/">Calamares</a> 開發由 <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software 贊助。 %1 support %1 æ”¯æ´ WelcomeQmlViewStep Welcome 歡迎 WelcomeViewStep Welcome 歡迎 notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>此為發行記事範本。</p> welcomeq <h3>%1 <quote>%2</quote></h3> <h3>%1 <quote>%2</quote></h3> About 關於 Support æ”¯æ´ Known issues 已知å•題 Release notes 發行記事 Donate æåŠ© calamares-3.2.20/lang/python.pot000066400000000000000000000264671362604102500165320ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: \n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "Configure GRUB." #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "Mounting partitions." #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "Configuration Error" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "No partitions are defined for
{!s}
to use." #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "Configure systemd services" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "Cannot modify service" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" "systemctl {arg!s} call in chroot returned error code {num!s}." #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "Cannot enable systemd service {name!s}." #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "Cannot enable systemd target {name!s}." #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "Cannot disable systemd target {name!s}." #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "Cannot mask systemd unit {name!s}." #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "Unmount file systems." #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "Filling up filesystems." #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "rsync failed with error code {}." #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "Failed to unpack image \"{}\"" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "No mount point for root partition" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "Bad mount point for root partition" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "rootMountPoint is \"{}\", which does not exist, doing nothing" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "Bad unsquash configuration" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "The filesystem for \"{}\" ({}) is not supported" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "The source filesystem \"{}\" does not exist" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "The destination \"{}\" in the target system is not a directory" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "Cannot write KDM configuration file" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "KDM config file {!s} does not exist" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "Cannot write LXDM configuration file" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "LXDM config file {!s} does not exist" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "Cannot write LightDM configuration file" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "LightDM config file {!s} does not exist" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "Cannot configure LightDM" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "No LightDM greeter installed." #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "Cannot write SLIM configuration file" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "SLIM config file {!s} does not exist" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "No display managers selected for the displaymanager module." #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "Display manager configuration was incomplete" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "Configuring mkinitcpio." #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "No root mount point is given for
{!s}
to use." #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "Configuring encrypted swap." #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "Installing data." #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "Configure OpenRC services" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "Cannot add service {name!s} to run-level {level!s}." #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "Cannot remove service {name!s} from run-level {level!s}." #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" "rc-update {arg!s} call in chroot returned error code {num!s}." #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "Target runlevel does not exist" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "Target service does not exist" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" "The path for service {name!s} is {path!s}, which does not " "exist." #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "Configure Plymouth theme" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Processing packages (%(count)d / %(total)d)" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "Install packages." #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Installing one package." msgstr[1] "Installing %(num)d packages." #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Removing one package." msgstr[1] "Removing %(num)d packages." #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "Install bootloader." #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "Remove live user from target system" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "Setting hardware clock." #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "Creating initramfs with dracut." #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "Failed to run dracut on the target" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "The exit code was {}" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "Configuring initramfs." #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "Configuring OpenRC dmcrypt service." #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "Writing fstab." #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "Dummy python job." #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "Dummy python step {}" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "Configuring locales." #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "Saving network configuration." calamares-3.2.20/lang/python/000077500000000000000000000000001362604102500157675ustar00rootroot00000000000000calamares-3.2.20/lang/python/ar/000077500000000000000000000000001362604102500163715ustar00rootroot00000000000000calamares-3.2.20/lang/python/ar/LC_MESSAGES/000077500000000000000000000000001362604102500201565ustar00rootroot00000000000000calamares-3.2.20/lang/python/ar/LC_MESSAGES/python.mo000066400000000000000000000060621362604102500220400ustar00rootroot00000000000000Þ• )ü ¡º#Ð$ô'$Afz,•ÂÔé#'$K'p˜­+Ë#÷$@^v•³È Þ»ÿ»%Ñ&÷'*F'q™°.Î ý- )L "v ™ (¯ )Ø , "/ R 4o G¤ )ì " /9 ,i +–  )à '      Cannot configure LightDMCannot modify serviceCannot write KDM configuration fileCannot write LXDM configuration fileCannot write LightDM configuration fileCannot write SLIM configuration fileConfiguration ErrorConfigure systemd servicesDisplay manager configuration was incompleteDummy python job.Dummy python step {}Filling up filesystems.Install bootloader.Install packages.KDM config file {!s} does not existLXDM config file {!s} does not existLightDM config file {!s} does not existMounting partitions.No LightDM greeter installed.Processing packages (%(count)d / %(total)d)Remove live user from target systemSLIM config file {!s} does not existSaving network configuration.Setting hardware clock.Target runlevel does not existTarget service does not existThe exit code was {}Unmount file systems.rsync failed with error code {}.Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Last-Translator: aboodilankaboot, 2019 Language-Team: Arabic (https://www.transifex.com/calamares/teams/20061/ar/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: ar Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5; ÙØ´Ù„ ضبط LightDMلا يمكن تعديل Ø§Ù„Ø®Ø¯Ù…Ø©ÙØ´Ù„ت كتابة مل٠ضبط KDM.ÙØ´Ù„ت كتابة مل٠ضبط LXDM.ÙØ´Ù„ت كتابة مل٠ضبط LightDM.ÙØ´Ù„ت كتابة مل٠ضبط SLIM.خطأ ÙÙŠ الضبطتعديل خدمات systemdإعداد مدير العرض لم يكتملعملية بايثون دميهعملية دميه خطوه بايثون {}جاري ملئ أنظمة Ø§Ù„Ù…Ù„ÙØ§ØªØªØ«Ø¨ÙŠØª محمل الإقلاعتثبيت الحزممل٠ضبط KDM {!s} غير موجودمل٠ضبط LXDM {!s} غير موجودمل٠ضبط LightDM {!s} غير موجودجاري تركيب الأقساملم يتم تصيب LightDMجاري تحميل الحزم (%(count)d/%(total)d)إزالة المستخدم المباشر من النظام الهدÙمل٠ضبط SLIM {!s} غير موجودجاري Ø­ÙØ¸ الإعداداتجاري إعداد ساعة الهاردويرالـ runlevel الهد٠غير موجودالخدمة الهد٠غير موجودةكود الخروج كان {}الغاء تحميل Ù…Ù„Ù Ø§Ù„Ù†Ø¸Ø§Ù…ÙØ´Ù„ rsync مع رمز الخطأ {}.calamares-3.2.20/lang/python/ar/LC_MESSAGES/python.po000066400000000000000000000237231362604102500220460ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Abubakaragoub Y , 2018 # aboodilankaboot, 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: aboodilankaboot, 2019\n" "Language-Team: Arabic (https://www.transifex.com/calamares/teams/20061/ar/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ar\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "جاري تركيب الأقسام" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "خطأ ÙÙŠ الضبط" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "تعديل خدمات systemd" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "لا يمكن تعديل الخدمة" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "الغاء تحميل مل٠النظام" #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "جاري ملئ أنظمة Ø§Ù„Ù…Ù„ÙØ§Øª" #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "ÙØ´Ù„ rsync مع رمز الخطأ {}." #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "ÙØ´Ù„ت كتابة مل٠ضبط KDM." #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "مل٠ضبط KDM {!s} غير موجود" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "ÙØ´Ù„ت كتابة مل٠ضبط LXDM." #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "مل٠ضبط LXDM {!s} غير موجود" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "ÙØ´Ù„ت كتابة مل٠ضبط LightDM." #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "مل٠ضبط LightDM {!s} غير موجود" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "ÙØ´Ù„ ضبط LightDM" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "لم يتم تصيب LightDM" #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "ÙØ´Ù„ت كتابة مل٠ضبط SLIM." #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "مل٠ضبط SLIM {!s} غير موجود" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "إعداد مدير العرض لم يكتمل" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "" #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "الـ runlevel الهد٠غير موجود" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "الخدمة الهد٠غير موجودة" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "جاري تحميل الحزم (%(count)d/%(total)d)" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "تثبيت الحزم" #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" msgstr[4] "" msgstr[5] "" #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" msgstr[4] "" msgstr[5] "" #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "تثبيت محمل الإقلاع" #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "إزالة المستخدم المباشر من النظام الهدÙ" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "جاري إعداد ساعة الهاردوير" #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "كود الخروج كان {}" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "" #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "عملية بايثون دميه" #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "عملية دميه خطوه بايثون {}" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "جاري Ø­ÙØ¸ الإعدادات" calamares-3.2.20/lang/python/as/000077500000000000000000000000001362604102500163725ustar00rootroot00000000000000calamares-3.2.20/lang/python/as/LC_MESSAGES/000077500000000000000000000000001362604102500201575ustar00rootroot00000000000000calamares-3.2.20/lang/python/as/LC_MESSAGES/python.mo000066400000000000000000000251331362604102500220410ustar00rootroot00000000000000Þ•FLa|JJL"—º3Õ 4"4W3Œ/Àð8#?$c'ˆ$°Õéù , #G k ‡ ž ³ Ë ,ë  * R? "’ µ Ñ é ý  4 #U $y 'ž Æ Û ;ù !5 5W 8 +Æ #ò 0 $G l Š ¢ Á <ß \y-ŽO¼M )ZX„`Ý>TDc;¨ äU“XébB4¥iÚ=D‚‚`yf]àO>lŽUûVQY¨V1Y'‹@³AôA6KxdÄ9)Nc7²:êi%&/¶¥æWŒ<äV!;x2´9ç_!HIÊL5aY—zñ\l •É ˜_!Wø!wP"]È"I&#Op#LÀ#Q $E_$ƒ¥$‚)%2¬%eß%‡E&mÍ&D;'›€'‘(a®()`0){‘)M *C>5B4<F 8 6?!&-'. A;*D$ 192 #@,7(3" :0+/E%)=rc-update {arg!s} call in chroot returned error code {num!s}.systemctl {arg!s} call in chroot returned error code {num!s}.Bad mount point for root partitionBad unsquash configurationCannot add service {name!s} to run-level {level!s}.Cannot configure LightDMCannot disable systemd target {name!s}.Cannot enable systemd service {name!s}.Cannot enable systemd target {name!s}.Cannot mask systemd unit {name!s}.Cannot modify serviceCannot remove service {name!s} from run-level {level!s}.Cannot write KDM configuration fileCannot write LXDM configuration fileCannot write LightDM configuration fileCannot write SLIM configuration fileConfiguration ErrorConfigure GRUB.Configure OpenRC servicesConfigure Plymouth themeConfigure systemd servicesConfiguring OpenRC dmcrypt service.Configuring encrypted swap.Configuring initramfs.Configuring locales.Configuring mkinitcpio.Creating initramfs with dracut.Display manager configuration was incompleteDummy python job.Dummy python step {}Failed to find unsquashfs, make sure you have the squashfs-tools package installedFailed to run dracut on the targetFailed to unpack image "{}"Filling up filesystems.Install bootloader.Install packages.Installing data.Installing one package.Installing %(num)d packages.KDM config file {!s} does not existLXDM config file {!s} does not existLightDM config file {!s} does not existMounting partitions.No LightDM greeter installed.No display managers selected for the displaymanager module.No mount point for root partitionNo partitions are defined for
{!s}
to use.No root mount point is given for
{!s}
to use.Processing packages (%(count)d / %(total)d)Remove live user from target systemRemoving one package.Removing %(num)d packages.SLIM config file {!s} does not existSaving network configuration.Setting hardware clock.Target runlevel does not existTarget service does not existThe destination "{}" in the target system is not a directoryThe displaymanagers list is empty or undefined in bothglobalstorage and displaymanager.conf.The exit code was {}The filesystem for "{}" ({}) is not supportedThe path for runlevel {level!s} is {path!s}, which does not exist.The path for service {name!s} is {path!s}, which does not exist.The source filesystem "{}" does not existUnknown service-action {arg!s} for service {name!s} in run-level {level!s}.Unknown systemd commands {command!s} and {suffix!s} for unit {name!s}.Unmount file systems.Writing fstab.globalstorage does not contain a "rootMountPoint" key, doing nothingrootMountPoint is "{}", which does not exist, doing nothingrsync failed with error code {}.Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Last-Translator: Deep Jyoti Choudhury , 2020 Language-Team: Assamese (https://www.transifex.com/calamares/teams/20061/as/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: as Plural-Forms: nplurals=2; plural=(n != 1); chrootত rc-update {arg!s} call কà§à§°à§à¦Ÿà¦¿ কোড {num!s}।chrootত systemctl {arg!s}à§° call কà§à§°à§à¦Ÿà¦¿ কোড {num!s}।মà§à¦² বিভাজনৰ বাবে বেয়া মাউনà§à¦Ÿà§ পইনà§à¦Ÿà§à¦¬à§‡à§Ÿà¦¾ unsquash কনফিগাৰেচনৰাণ-লেভেল {level!s}ত সেৱা {name!s} যোগ কৰিব নোৱাৰি।LightDM কনফিগাৰ কৰিব নোৱাৰিsystemd গনà§à¦¤à¦¬à§à¦¯ সà§à¦¥à¦¾à¦¨ {name!s} নিষà§à¦•à§à§°à¦¿à§Ÿ কৰিব নোৱাৰি।systemd সেৱা {name!s} সকà§à§°à¦¿à§Ÿ কৰিব নোৱাৰি।systemd গনà§à¦¤à¦¬à§à¦¯ সà§à¦¥à¦¾à¦¨ {name!s} সকà§à§°à¦¿à§Ÿ কৰিব নোৱাৰি।systemd à¦à¦•ক {name!s} মাসà§à¦•ৠকৰিব নোৱাৰি।সেৱা সমà§à¦¹à§° সংশোধন কৰিব নোৱাৰিৰাণ-লেভেল {level!s}à§° পৰা সেৱা {name!s} আতৰাব নোৱাৰি।KDM কনফিগাৰেচন ফাইলত লিখিব নোৱাৰিLXDM কনফিগাৰেচন ফাইলত লিখিব নোৱাৰিLightDM কনফিগাৰেচন ফাইলত লিখিব নোৱাৰিSLIM কনফিগাৰেচন ফাইলত লিখিব নোৱাৰিকনফিগাৰেচন তà§à§°à§à¦Ÿà¦¿GRUB কনফিগাৰ কৰক।OpenRC সেৱা সমà§à¦¹ কনফিগাৰ কৰকPlymouth theme কনà§à¦«à¦¿à¦—াৰ কৰি আছে।​systemd সেৱা সমà§à¦¹ কনফিগাৰ কৰকOpenRC dmcrypt সেৱা কনà§à¦«à¦¿à¦—াৰ কৰি আছে।à¦à¦¨à§à¦•à§à§°à¦¿à¦ªà§à¦Ÿà§‡à¦¡ সà§à§±à§‡à¦ª কনà§à¦«à¦¿à¦—াৰ কৰি আছে।initramfs কনà§à¦«à¦¿à¦—াৰ কৰি আছে।সà§à¦¥à¦¾à¦¨à§€à§Ÿà¦¬à§‹à§° কনà§à¦«à¦¿à¦—াৰ কৰি আছে।mkinitcpio কনফিগাৰ কৰি আছে।dracutà§° সৈতে initramfs বনাই আছে।ডিসà§à¦ªà§à¦²à§‡ পà§à§°à¦¬à¦¨à§à¦§à¦• কনà§à¦«à¦¿à¦—াৰেচন অসমাপà§à¦¤à¦¡à¦¾à¦®à§€ Pythonà§° কাযà§à¦¯à¦¡à¦¾à¦®à§€ Pythonà§° পদকà§à¦·à§‡à¦ª {}unsquashfs বিচৰাত বà§à¦¯à§°à§à¦¥ হ'ল, নিশà§à¦šà¦¿à¦¤ কৰক যে আপà§à¦¨à¦¿ squashfs-tools ইনà§à¦¸à§à¦¤à¦² কৰিছেগনà§à¦¤à¦¬à§à¦¯ সà§à¦¥à¦¾à¦¨à¦¤ dracut চলোৱাত বিফল হ'লইমেজ "{}" খোলাত বà§à¦¯à§°à§à¦¥ হ'লফাইল চিছটেম​বোৰ পূৰণ কৰা হৈ আছে।বà§à¦¤à¦²à§‹à¦¡à¦¾à§° ইনà§à¦¸à§à¦¤à¦² কৰক।পেকেজ ইনà§à¦¸à§à¦¤à¦² কৰক।ডাটা ইনà§à¦¸à§à¦¤à¦² কৰি আছে।Installing one package.%(num)d পেকেজবোৰ ইনসà§à¦¤à¦² হৈ আছে।KDM কনফিগৠফাইল {!s} উপসà§à¦¥à¦¿à¦¤ নাইLXDM কনফিগৠফাইল {!s} উপসà§à¦¥à¦¿à¦¤ নাইLightDM কনফিগৠফাইল {!s} উপসà§à¦¥à¦¿à¦¤ নাইবিভাজন মাউনà§à¦Ÿà§ কৰা।কোনো LightDM সà§à§±à¦¾à¦—তকৰà§à¦¤à¦¾ ইনà§à¦¸à§à¦¤à¦² নাই।displaymanager মডিউলৰ বাবে কোনো ডিসà§à¦ªà§à¦²à§‡ পà§à§°à¦¬à¦¨à§à¦§à¦• নাই।ৰà§à¦Ÿ বিভাজনত কোনো মাউণà§à¦Ÿ পইণà§à¦Ÿà§ নাই
{!s}
à§° বà§à¦¯à§±à¦¹à¦¾à§°à§° বাবে কোনো বিভাজনৰ বৰà§à¦£à¦¨à¦¾ দিয়া হোৱা নাই।বà§à¦¯à§±à¦¹à¦¾à§°à§° বাবে
{!s}
à§° কোনো মাউনà§à¦Ÿà§ পাইনà§à¦Ÿà§ দিয়া হোৱা নাই।(%(count)d / %(total)d) পেকেজবোৰ সংশোধন কৰি আছেগনà§à¦¤à¦¬à§à¦¯ চিছটেমৰ পৰা লাইভ বà§à¦¯à§±à¦¹à¦¾à§°à¦•াৰি আতৰাওকRemoving one package.%(num)d পেকেজবোৰ আতৰোৱা হৈ আছে।SLIM কনফিগৠফাইল {!s} উপসà§à¦¥à¦¿à¦¤ নাইনেটৱৰà§à¦• কনà§à¦«à¦¿à¦—াৰ জমা কৰি আছে।হাৰà§à¦¡à§±à§‡à§°à§° ঘড়ী চেতৠকৰি আছে।গনà§à¦¤à¦¬à§à¦¯ ৰাণলেভেল উপসà§à¦¥à¦¿à¦¤ নাই।গনà§à¦¤à¦¬à§à¦¯ সেৱা উপসà§à¦¥à¦¿à¦¤ নাই।লকà§à¦·à§à¦¯à§° চিছটেম গনà§à¦¤à¦¬à§à¦¯ সà§à¦¥à¦¾à¦¨ "{}" à¦à¦Ÿà¦¾ ডিৰেকà§à¦Ÿà§°à§€ নহয়bothglobalstorage আৰৠdisplaymanager.confত displaymanagers সà§à¦šà¦¿à¦–ন খালী বা অবৰà§à¦£à¦¿à¦¤à¥¤à¦à¦•à§à¦¸à¦¿à¦¡à§ কোডৠআছিল {}"{}"à§° বাবে ফাইল চিছটেম ({})টো অনà§à¦®à§‡à¦¾à¦¦à¦¿à¦¤ নহয়{level!s} ৰাণলেভেলৰ বাবে পথ হ'ল {path!s} যিটো উপসà§à¦¥à¦¿à¦¤ নাই।{name!s}à§° বাবে পথ হ'ল {path!s} যিটো উপসà§à¦¥à¦¿à¦¤ নাই।"{}" ফাইল চিছটেম উপসà§à¦¥à¦¿à¦¤ নাইৰান-লেভেল {level!s}ত সেৱা {name!s}à§° বাবে অজà§à¦žà¦¾à¦¤ সেৱা কাৰà§à¦¯à§à¦¯ {arg!s} ।à¦à¦•ক {name!s}à§° বাবে {command!s} আৰৠ{suffix!s} অজà§à¦žà¦¾à¦¤ systemd কমাণà§à¦¡à§à¥¤à¦«à¦¾à¦‡à¦² চিছটেম​বোৰ মাউণà§à¦Ÿà§° পৰা আতৰাওক।fstab লিখি আছে।globalstorage ত rootMountPoint key নাই, à¦à¦•à§‹ কৰিব পৰা নাযায়rootMountPoint হ'ল "{}", যিটো উপসà§à¦¥à¦¿à¦¤ নাই, à¦à¦•à§‹ কৰিব পৰা নাযায়rsync কà§à§°à§à¦Ÿà¦¿ কোড {}à§° সৈতে বিফল হ'ল।calamares-3.2.20/lang/python/as/LC_MESSAGES/python.po000066400000000000000000000351721362604102500220500ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Deep Jyoti Choudhury , 2020 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Deep Jyoti Choudhury , 2020\n" "Language-Team: Assamese (https://www.transifex.com/calamares/teams/20061/as/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: as\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "GRUB কনফিগাৰ কৰক।" #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "বিভাজন মাউনà§à¦Ÿà§ কৰা।" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "কনফিগাৰেচন তà§à§°à§à¦Ÿà¦¿" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "
{!s}
à§° বà§à¦¯à§±à¦¹à¦¾à§°à§° বাবে কোনো বিভাজনৰ বৰà§à¦£à¦¨à¦¾ দিয়া হোৱা নাই।" #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "systemd সেৱা সমà§à¦¹ কনফিগাৰ কৰক" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "সেৱা সমà§à¦¹à§° সংশোধন কৰিব নোৱাৰি" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "chrootত systemctl {arg!s}à§° call কà§à§°à§à¦Ÿà¦¿ কোড {num!s}।" #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "systemd সেৱা {name!s} সকà§à§°à¦¿à§Ÿ কৰিব নোৱাৰি।" #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "systemd গনà§à¦¤à¦¬à§à¦¯ সà§à¦¥à¦¾à¦¨ {name!s} সকà§à§°à¦¿à§Ÿ কৰিব নোৱাৰি।" #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "systemd গনà§à¦¤à¦¬à§à¦¯ সà§à¦¥à¦¾à¦¨ {name!s} নিষà§à¦•à§à§°à¦¿à§Ÿ কৰিব নোৱাৰি।" #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "systemd à¦à¦•ক {name!s} মাসà§à¦•ৠকৰিব নোৱাৰি।" #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "à¦à¦•ক {name!s}à§° বাবে {command!s} আৰৠ{suffix!s} " "অজà§à¦žà¦¾à¦¤ systemd কমাণà§à¦¡à§à¥¤" #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "ফাইল চিছটেম​বোৰ মাউণà§à¦Ÿà§° পৰা আতৰাওক।" #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "ফাইল চিছটেম​বোৰ পূৰণ কৰা হৈ আছে।" #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "rsync কà§à§°à§à¦Ÿà¦¿ কোড {}à§° সৈতে বিফল হ'ল।" #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "ইমেজ \"{}\" খোলাত বà§à¦¯à§°à§à¦¥ হ'ল" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "unsquashfs বিচৰাত বà§à¦¯à§°à§à¦¥ হ'ল, নিশà§à¦šà¦¿à¦¤ কৰক যে আপà§à¦¨à¦¿ squashfs-tools ইনà§à¦¸à§à¦¤à¦² " "কৰিছে" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "à§°à§à¦Ÿ বিভাজনত কোনো মাউণà§à¦Ÿ পইণà§à¦Ÿà§ নাই" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "globalstorage ত rootMountPoint key নাই, à¦à¦•à§‹ কৰিব পৰা নাযায়" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "মà§à¦² বিভাজনৰ বাবে বেয়া মাউনà§à¦Ÿà§ পইনà§à¦Ÿà§" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "rootMountPoint হ'ল \"{}\", যিটো উপসà§à¦¥à¦¿à¦¤ নাই, à¦à¦•à§‹ কৰিব পৰা নাযায়" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "বেয়া unsquash কনফিগাৰেচন" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "\"{}\"à§° বাবে ফাইল চিছটেম ({})টো অনà§à¦®à§‡à¦¾à¦¦à¦¿à¦¤ নহয়" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "\"{}\" ফাইল চিছটেম উপসà§à¦¥à¦¿à¦¤ নাই" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "লকà§à¦·à§à¦¯à§° চিছটেম গনà§à¦¤à¦¬à§à¦¯ সà§à¦¥à¦¾à¦¨ \"{}\" à¦à¦Ÿà¦¾ ডিৰেকà§à¦Ÿà§°à§€ নহয়" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "KDM কনফিগাৰেচন ফাইলত লিখিব নোৱাৰি" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "KDM কনফিগৠফাইল {!s} উপসà§à¦¥à¦¿à¦¤ নাই" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "LXDM কনফিগাৰেচন ফাইলত লিখিব নোৱাৰি" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "LXDM কনফিগৠফাইল {!s} উপসà§à¦¥à¦¿à¦¤ নাই" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "LightDM কনফিগাৰেচন ফাইলত লিখিব নোৱাৰি" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "LightDM কনফিগৠফাইল {!s} উপসà§à¦¥à¦¿à¦¤ নাই" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "LightDM কনফিগাৰ কৰিব নোৱাৰি" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "কোনো LightDM সà§à§±à¦¾à¦—তকৰà§à¦¤à¦¾ ইনà§à¦¸à§à¦¤à¦² নাই।" #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "SLIM কনফিগাৰেচন ফাইলত লিখিব নোৱাৰি" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "SLIM কনফিগৠফাইল {!s} উপসà§à¦¥à¦¿à¦¤ নাই" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "displaymanager মডিউলৰ বাবে কোনো ডিসà§à¦ªà§à¦²à§‡ পà§à§°à¦¬à¦¨à§à¦§à¦• নাই।" #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" "bothglobalstorage আৰৠdisplaymanager.confত displaymanagers সà§à¦šà¦¿à¦–ন খালী বা " "অবৰà§à¦£à¦¿à¦¤à¥¤" #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "ডিসà§à¦ªà§à¦²à§‡ পà§à§°à¦¬à¦¨à§à¦§à¦• কনà§à¦«à¦¿à¦—াৰেচন অসমাপà§à¦¤" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "mkinitcpio কনফিগাৰ কৰি আছে।" #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "বà§à¦¯à§±à¦¹à¦¾à§°à§° বাবে
{!s}
à§° কোনো মাউনà§à¦Ÿà§ পাইনà§à¦Ÿà§ দিয়া হোৱা নাই।" #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "à¦à¦¨à§à¦•à§à§°à¦¿à¦ªà§à¦Ÿà§‡à¦¡ সà§à§±à§‡à¦ª কনà§à¦«à¦¿à¦—াৰ কৰি আছে।" #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "ডাটা ইনà§à¦¸à§à¦¤à¦² কৰি আছে।" #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "OpenRC সেৱা সমà§à¦¹ কনফিগাৰ কৰক" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "ৰাণ-লেভেল {level!s}ত সেৱা {name!s} যোগ কৰিব নোৱাৰি।" #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "ৰাণ-লেভেল {level!s}à§° পৰা সেৱা {name!s} আতৰাব নোৱাৰি।" #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" "ৰান-লেভেল {level!s}ত সেৱা {name!s}à§° বাবে অজà§à¦žà¦¾à¦¤ সেৱা কাৰà§à¦¯à§à¦¯ " "{arg!s} ।" #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "chrootত rc-update {arg!s} call কà§à§°à§à¦Ÿà¦¿ কোড {num!s}।" #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "গনà§à¦¤à¦¬à§à¦¯ ৰাণলেভেল উপসà§à¦¥à¦¿à¦¤ নাই।" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" "{level!s} ৰাণলেভেলৰ বাবে পথ হ'ল {path!s} যিটো উপসà§à¦¥à¦¿à¦¤ নাই।" #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "গনà§à¦¤à¦¬à§à¦¯ সেৱা উপসà§à¦¥à¦¿à¦¤ নাই।" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "{name!s}à§° বাবে পথ হ'ল {path!s} যিটো উপসà§à¦¥à¦¿à¦¤ নাই।" #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "Plymouth theme কনà§à¦«à¦¿à¦—াৰ কৰি আছে।​" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "(%(count)d / %(total)d) পেকেজবোৰ সংশোধন কৰি আছে" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "পেকেজ ইনà§à¦¸à§à¦¤à¦² কৰক।" #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Installing one package." msgstr[1] "%(num)d পেকেজবোৰ ইনসà§à¦¤à¦² হৈ আছে।" #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Removing one package." msgstr[1] "%(num)d পেকেজবোৰ আতৰোৱা হৈ আছে।" #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "বà§à¦¤à¦²à§‹à¦¡à¦¾à§° ইনà§à¦¸à§à¦¤à¦² কৰক।" #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "গনà§à¦¤à¦¬à§à¦¯ চিছটেমৰ পৰা লাইভ বà§à¦¯à§±à¦¹à¦¾à§°à¦•াৰি আতৰাওক" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "হাৰà§à¦¡à§±à§‡à§°à§° ঘড়ী চেতৠকৰি আছে।" #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "dracutà§° সৈতে initramfs বনাই আছে।" #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "গনà§à¦¤à¦¬à§à¦¯ সà§à¦¥à¦¾à¦¨à¦¤ dracut চলোৱাত বিফল হ'ল" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "à¦à¦•à§à¦¸à¦¿à¦¡à§ কোডৠআছিল {}" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "initramfs কনà§à¦«à¦¿à¦—াৰ কৰি আছে।" #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "OpenRC dmcrypt সেৱা কনà§à¦«à¦¿à¦—াৰ কৰি আছে।" #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "fstab লিখি আছে।" #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "ডামী Pythonà§° কাযà§à¦¯" #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "ডামী Pythonà§° পদকà§à¦·à§‡à¦ª {}" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "সà§à¦¥à¦¾à¦¨à§€à§Ÿà¦¬à§‹à§° কনà§à¦«à¦¿à¦—াৰ কৰি আছে।" #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "নেটৱৰà§à¦• কনà§à¦«à¦¿à¦—াৰ জমা কৰি আছে।" calamares-3.2.20/lang/python/ast/000077500000000000000000000000001362604102500165565ustar00rootroot00000000000000calamares-3.2.20/lang/python/ast/LC_MESSAGES/000077500000000000000000000000001362604102500203435ustar00rootroot00000000000000calamares-3.2.20/lang/python/ast/LC_MESSAGES/python.mo000066400000000000000000000123601362604102500222230ustar00rootroot00000000000000Þ•/”C "<3W‹¤8º#ó$'<$d#‰­ÉÞ,ö#5RJ"ÀÜô4+#`$„'©Ñ;ï!++M0y$ªÏç <$ \a ¾ -Ó ) + DA ;†  xã ?\ /œ EÌ  . IL 4– 5Ë 85:)p$š¿Õ:î)FWb$º&ß$+Ke3w2«3Þ6,IBv9¹+ó73W!‹+­!Ù=ûa9›5·0í#KB;Ž%Ê"'!,+* %) ( &   $/#.-Bad mount point for root partitionBad unsquash configurationCannot add service {name!s} to run-level {level!s}.Cannot configure LightDMCannot modify serviceCannot remove service {name!s} from run-level {level!s}.Cannot write KDM configuration fileCannot write LXDM configuration fileCannot write LightDM configuration fileCannot write SLIM configuration fileConfiguring OpenRC dmcrypt service.Configuring encrypted swap.Configuring locales.Configuring mkinitcpio.Display manager configuration was incompleteDummy python job.Dummy python step {}Failed to find unsquashfs, make sure you have the squashfs-tools package installedFailed to run dracut on the targetFailed to unpack image "{}"Filling up filesystems.Install bootloader.Install packages.Installing data.Installing one package.Installing %(num)d packages.KDM config file {!s} does not existLXDM config file {!s} does not existLightDM config file {!s} does not existNo LightDM greeter installed.No display managers selected for the displaymanager module.No mount point for root partitionProcessing packages (%(count)d / %(total)d)Removing one package.Removing %(num)d packages.SLIM config file {!s} does not existSetting hardware clock.Target runlevel does not existTarget service does not existThe destination "{}" in the target system is not a directoryThe displaymanagers list is empty or undefined in bothglobalstorage and displaymanager.conf.The exit code was {}The filesystem for "{}" ({}) is not supportedThe source filesystem "{}" does not existUnmount file systems.globalstorage does not contain a "rootMountPoint" key, doing nothingrootMountPoint is "{}", which does not exist, doing nothingrsync failed with error code {}.Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Last-Translator: enolp , 2019 Language-Team: Asturian (https://www.transifex.com/calamares/teams/20061/ast/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: ast Plural-Forms: nplurals=2; plural=(n != 1); El puntu de montaxe ye incorreutu pa la partición del raigañuLa configuración d'espardimientu ye incorreutaNun pue amestase'l serviciu {name!s} al nivel d'execución {level!s}.Nun pue configurase LightDMNun pue modificase'l serviciuNun pue desaniciase'l serviciu {name!s} del nivel d'execución {level!s}.Nun pue escribise'l ficheru de configuración de KDMNun pue escribise'l ficheru de configuración de LXDMNun pue escribise'l ficheru de configuración de LightDMNun pue escribise'l ficheru de configuración de SLIMConfigurando'l serviciu dmcrypt d'OpenRC.Configurando l'intercambéu cifráu.Configurando locales.Configurando mkinitcpio.La configuración del xestor de pantalles nun se completóTrabayu maniquín en Python.Pasu maniquín {} en PythonFallu al alcontrar unsquashfs, asegúrate que tienes instaláu'l paquete squashfs-toolsFallu al executar dracut nel destínFallu al desempaquetar la imaxe «{}»Rellenando los sistemes de ficheros.Instalando'l xestor d'arrinque.Instalación de paquetes.Instalando datos.Instalando un paquete.Instalando %(num)d paquetes.Nun esiste'l ficheru de configuración de KDM {!s}Nun esiste'l ficheru de configuración de LXDM {!s}Nun esiste'l ficheru de configuración de LightDM {!s}Nun s'instaló dengún saludador de LightDM.Nun s'esbillaron xestores de pantalles pal módulu displaymanager.Nun hai un puntu de montaxe pa la partición del raigañuProcesando paquetes (%(count)d / %(total)d)Desaniciando un paquete.Desaniciando %(num)d paquetes.Nun esiste'l ficheru de configuración de SLIM {!s}Configurando'l reló de hardware.El nivel d'execución de destín nun esisteEl serviciu de destín nun esisteEl destín «{}» nel sistema de destín nun ye un direutoriuLa llista displaymanagers ta balera o nun se definió en bothglobalstorage y displaymanager.conf.El códigu de salida foi {}El sistema de ficheros pa «{}» ({}) nun ta sofitáuEl sistema de ficheros d'orixe «{}» nun esisteDesmontaxe de sistemes de ficheros.globalstorage nun contién una clave «rootMountPoint». Nun va facese nadarootMountPoint ye «{}» que nun esiste. Nun va facese nadarsync falló col códigu de fallu {}.calamares-3.2.20/lang/python/ast/LC_MESSAGES/python.po000066400000000000000000000254361362604102500222360ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # enolp , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: enolp , 2019\n" "Language-Team: Asturian (https://www.transifex.com/calamares/teams/20061/ast/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ast\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "Nun pue modificase'l serviciu" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "Desmontaxe de sistemes de ficheros." #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "Rellenando los sistemes de ficheros." #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "rsync falló col códigu de fallu {}." #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "Fallu al desempaquetar la imaxe «{}»" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "Fallu al alcontrar unsquashfs, asegúrate que tienes instaláu'l paquete " "squashfs-tools" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "Nun hai un puntu de montaxe pa la partición del raigañu" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" "globalstorage nun contién una clave «rootMountPoint». Nun va facese nada" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "El puntu de montaxe ye incorreutu pa la partición del raigañu" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "rootMountPoint ye «{}» que nun esiste. Nun va facese nada" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "La configuración d'espardimientu ye incorreuta" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "El sistema de ficheros pa «{}» ({}) nun ta sofitáu" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "El sistema de ficheros d'orixe «{}» nun esiste" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "El destín «{}» nel sistema de destín nun ye un direutoriu" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "Nun pue escribise'l ficheru de configuración de KDM" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "Nun esiste'l ficheru de configuración de KDM {!s}" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "Nun pue escribise'l ficheru de configuración de LXDM" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "Nun esiste'l ficheru de configuración de LXDM {!s}" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "Nun pue escribise'l ficheru de configuración de LightDM" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "Nun esiste'l ficheru de configuración de LightDM {!s}" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "Nun pue configurase LightDM" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "Nun s'instaló dengún saludador de LightDM." #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "Nun pue escribise'l ficheru de configuración de SLIM" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "Nun esiste'l ficheru de configuración de SLIM {!s}" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "Nun s'esbillaron xestores de pantalles pal módulu displaymanager." #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" "La llista displaymanagers ta balera o nun se definió en bothglobalstorage y " "displaymanager.conf." #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "La configuración del xestor de pantalles nun se completó" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "Configurando mkinitcpio." #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "Configurando l'intercambéu cifráu." #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "Instalando datos." #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "Nun pue amestase'l serviciu {name!s} al nivel d'execución {level!s}." #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" "Nun pue desaniciase'l serviciu {name!s} del nivel d'execución {level!s}." #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "El nivel d'execución de destín nun esiste" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "El serviciu de destín nun esiste" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Procesando paquetes (%(count)d / %(total)d)" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "Instalación de paquetes." #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Instalando un paquete." msgstr[1] "Instalando %(num)d paquetes." #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Desaniciando un paquete." msgstr[1] "Desaniciando %(num)d paquetes." #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "Instalando'l xestor d'arrinque." #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "Configurando'l reló de hardware." #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "Fallu al executar dracut nel destín" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "El códigu de salida foi {}" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "Configurando'l serviciu dmcrypt d'OpenRC." #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "" #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "Trabayu maniquín en Python." #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "Pasu maniquín {} en Python" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "Configurando locales." #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "" calamares-3.2.20/lang/python/be/000077500000000000000000000000001362604102500163555ustar00rootroot00000000000000calamares-3.2.20/lang/python/be/LC_MESSAGES/000077500000000000000000000000001362604102500201425ustar00rootroot00000000000000calamares-3.2.20/lang/python/be/LC_MESSAGES/python.mo000066400000000000000000000227151362604102500220270ustar00rootroot00000000000000Þ•FLa|JJL"—º3Õ 4"4W3Œ/Àð8#?$c'ˆ$°Õéù , #G k ‡ ž ³ Ë ,ë  * R? "’ µ Ñ é ý  4 #U $y 'ž Æ Û ;ù !5 5W 8 +Æ #ò 0 $G l Š ¢ Á <ß \y-ŽO¼M )ZX„`Ý>TDc;¨ ä cTuWÊ."mQ-¿FíO4K„XÐ2)l\IÉJM^J¬'÷&8$_'„¬/Ëû4'OSwËæ‡ÿZ‡Bâ3%(Y$‚§µÆ:|;·>ó(2*[Y†WàB8_{;Û]¶u;, =h 9¦ <à +!uI!¿!M"Td"\¹"K#Eb#¨#{*$7¦$Þ$gð$MX%&¦%C>5B4<F 8 6?!&-'. A;*D$ 192 #@,7(3" :0+/E%)=rc-update {arg!s} call in chroot returned error code {num!s}.systemctl {arg!s} call in chroot returned error code {num!s}.Bad mount point for root partitionBad unsquash configurationCannot add service {name!s} to run-level {level!s}.Cannot configure LightDMCannot disable systemd target {name!s}.Cannot enable systemd service {name!s}.Cannot enable systemd target {name!s}.Cannot mask systemd unit {name!s}.Cannot modify serviceCannot remove service {name!s} from run-level {level!s}.Cannot write KDM configuration fileCannot write LXDM configuration fileCannot write LightDM configuration fileCannot write SLIM configuration fileConfiguration ErrorConfigure GRUB.Configure OpenRC servicesConfigure Plymouth themeConfigure systemd servicesConfiguring OpenRC dmcrypt service.Configuring encrypted swap.Configuring initramfs.Configuring locales.Configuring mkinitcpio.Creating initramfs with dracut.Display manager configuration was incompleteDummy python job.Dummy python step {}Failed to find unsquashfs, make sure you have the squashfs-tools package installedFailed to run dracut on the targetFailed to unpack image "{}"Filling up filesystems.Install bootloader.Install packages.Installing data.Installing one package.Installing %(num)d packages.KDM config file {!s} does not existLXDM config file {!s} does not existLightDM config file {!s} does not existMounting partitions.No LightDM greeter installed.No display managers selected for the displaymanager module.No mount point for root partitionNo partitions are defined for
{!s}
to use.No root mount point is given for
{!s}
to use.Processing packages (%(count)d / %(total)d)Remove live user from target systemRemoving one package.Removing %(num)d packages.SLIM config file {!s} does not existSaving network configuration.Setting hardware clock.Target runlevel does not existTarget service does not existThe destination "{}" in the target system is not a directoryThe displaymanagers list is empty or undefined in bothglobalstorage and displaymanager.conf.The exit code was {}The filesystem for "{}" ({}) is not supportedThe path for runlevel {level!s} is {path!s}, which does not exist.The path for service {name!s} is {path!s}, which does not exist.The source filesystem "{}" does not existUnknown service-action {arg!s} for service {name!s} in run-level {level!s}.Unknown systemd commands {command!s} and {suffix!s} for unit {name!s}.Unmount file systems.Writing fstab.globalstorage does not contain a "rootMountPoint" key, doing nothingrootMountPoint is "{}", which does not exist, doing nothingrsync failed with error code {}.Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Last-Translator: Zmicer Turok , 2019 Language-Team: Belarusian (https://www.transifex.com/calamares/teams/20061/be/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: be Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3); rc-update {arg!s} пад chroot вÑрнуўÑÑ Ð· кодам памылкі {num!s}.systemctl {arg!s} у chroot вÑрнуў код памылкі {num!s}.Хібны пункт Ð¼Ð°Ð½Ñ‚Ð°Ð²Ð°Ð½Ð½Ñ Ð´Ð»Ñ ÐºÐ°Ñ€Ð°Ð½Ñ‘Ð²Ð°Ð³Ð° Ñ€Ð°Ð·Ð´Ð·ÐµÐ»Ð°Ð¥Ñ–Ð±Ð½Ð°Ñ ÐºÐ°Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ‹Ñ unsquashÐе атрымалаÑÑ Ð´Ð°Ð´Ð°Ñ†ÑŒ Ñлужбу {name!s} на ўзровень запуÑку {level!s}.Ðемагчыма наладзіць LightDMÐемагчыма выключыць мÑту systemd {name!s}.Ðемагчыма ўключыць Ñлужбу systemd {name!s}.Ðемагчыма ўключыць мÑту systemd {name!s}.Ðемагчыма замаÑкаваць адзінку systemd {name!s}. Ðемагчыма наладзіць ÑлужбуÐе атрымалаÑÑ Ð²Ñ‹Ð´Ð°Ð»Ñ–Ñ†ÑŒ Ñлужбу {name!s} з ÑƒÐ·Ñ€Ð¾ÑžÐ½Ñ Ð·Ð°Ð¿ÑƒÑку {level!s}.Ðемагчыма запіÑаць файл канфігурацыі KDMÐемагчыма запіÑаць файл канфігурацыі LXDMÐемагчыма запіÑаць файл канфігурацыі LightDMÐемагчыма запіÑаць файл канфігурацыі SLIMПамылка канфігурацыіÐаладзіць GRUB.Ðаладзіць Ñлужбы OpenRCÐаладзіць Ñ‚Ñму PlymouthÐаладзіць Ñлужбы systemdÐаладка OpenRC dmcrypt.Ðаладка зашыфраванага swap.Ðаладка initramfs.Ðаладка лакалÑÑž.Ðаладка mkinitcpio.СтварÑнне initramfs з dracut.Ðаладка дыÑплейнага кіраўніка не завершанаÑ.Задача Dummy python.Крок Dummy python {}Ðе атрымалаÑÑ Ð·Ð½Ð°Ð¹Ñці unsquashfs, праверце ці ÑžÑталÑваны Ñž Ð²Ð°Ñ Ð¿Ð°ÐºÑƒÐ½Ð°Ðº squashfs-toolsÐе атрымалаÑÑ Ð·Ð°Ð¿ÑƒÑціць dracut у пункце прызначÑннÑÐе атрымалаÑÑ Ñ€Ð°Ñпакаваць вобраз "{}"Запаўненне файлавых ÑÑ–ÑÑ‚Ñм.УÑталÑваць загрузчык.УÑталÑваць пакункі.УÑталёўка даных.УÑталёўка аднаго пакунка.УÑталёўка %(num)d пакункаў.УÑталёўка %(num)d пакункаў.УÑталёўка%(num)d пакункаў.Файл канфігурацыі KDM {!s} не Ñ–ÑнуеФайл канфігурацыі LXDM {!s} не Ñ–ÑнуеФайл канфігурацыі LightDM {!s} не Ñ–ÑнуеМантаванне раздзелаў.LightDM greeter не ÑžÑталÑваны.У модулі дыÑплейных кіраўнікоў нічога не абрана.Ð”Ð»Ñ ÐºÐ°Ñ€Ð°Ð½Ñ‘Ð²Ð°Ð³Ð° раздзела нÑма пункта мантаваннÑРаздзелы длÑ
{!s}
не вызначаныÑ.Каранёвы пункт Ð¼Ð°Ð½Ñ‚Ð°Ð²Ð°Ð½Ð½Ñ Ð´Ð»Ñ
{!s}
не пададзены.Ðпрацоўка пакункаў (%(count)d / %(total)d)Выдаліць чаÑовага карыÑтальніка з мÑтавай ÑÑ–ÑÑ‚ÑмыВыдаленне аднаго пакунка.Выдаленне %(num)d пакункаў.Выдаленне %(num)d пакункаў.Выдаленне %(num)d пакункаў.Файл канфігурацыі SLIM {!s} не Ñ–ÑнуеЗахаванне Ñеткавай канфігурацыі.Ðаладка апаратнага гадзінніка.МÑтавы ўзровень запуÑку не Ñ–ÑнуеМÑÑ‚Ð°Ð²Ð°Ñ Ñлужба не Ñ–ÑнуеПункт прызначÑÐ½Ð½Ñ "{}" у мÑтавай ÑÑ–ÑÑ‚Ñме не з’ÑўлÑецца ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð°Ð¼Ð¡Ð¿Ñ–Ñ Ð´Ñ‹Ñплейных кіраўнікоў пуÑты альбо не вызначаны Ñž bothglobalstorage Ñ– displaymanager.conf.Код выхаду {}Ð¤Ð°Ð¹Ð»Ð°Ð²Ð°Ñ ÑÑ–ÑÑ‚Ñма Ð´Ð»Ñ "{}" ({}) не падтрымліваеццаШлÑÑ… {path!s} да ÑžÐ·Ñ€Ð¾ÑžÐ½Ñ Ð·Ð°Ð¿ÑƒÑку {level!s} не Ñ–Ñнуе.ШлÑÑ… {path!s} да Ñлужбы {level!s} не Ñ–Ñнуе.Ð—Ñ‹Ñ…Ð¾Ð´Ð½Ð°Ñ Ñ„Ð°Ð¹Ð»Ð°Ð²Ð°Ñ ÑÑ–ÑÑ‚Ñма "{}" не Ñ–ÑнуеÐевÑдомае дзеÑнне {arg!s} Ð´Ð»Ñ Ñлужбы {name!s} на ўзроўні запуÑку {level!s}.ÐевÑÐ´Ð¾Ð¼Ñ‹Ñ systemd загады {command!s} Ñ– {suffix!s} Ð´Ð»Ñ Ð°Ð´Ð·Ñ–Ð½ÐºÑ– {name!s}.Ðдмантаваць Ñ„Ð°Ð¹Ð»Ð°Ð²Ñ‹Ñ ÑÑ–ÑÑ‚Ñмы.Ð—Ð°Ð¿Ñ–Ñ fstab.globalstorage не змÑшчае ключа "rootMountPoint", нічога не выконваеццаrootMountPoint "{}" не Ñ–Ñнуе, нічога не выконваеццапамылка rsync з кодам {}.calamares-3.2.20/lang/python/be/LC_MESSAGES/python.po000066400000000000000000000330201362604102500220210ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Zmicer Turok , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Zmicer Turok , 2019\n" "Language-Team: Belarusian (https://www.transifex.com/calamares/teams/20061/be/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: be\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "Ðаладзіць GRUB." #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "Мантаванне раздзелаў." #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "Памылка канфігурацыі" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "Раздзелы длÑ
{!s}
не вызначаныÑ." #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "Ðаладзіць Ñлужбы systemd" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "Ðемагчыма наладзіць Ñлужбу" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "systemctl {arg!s} у chroot вÑрнуў код памылкі {num!s}." #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "Ðемагчыма ўключыць Ñлужбу systemd {name!s}." #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "Ðемагчыма ўключыць мÑту systemd {name!s}." #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "Ðемагчыма выключыць мÑту systemd {name!s}." #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "Ðемагчыма замаÑкаваць адзінку systemd {name!s}. " #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "ÐевÑÐ´Ð¾Ð¼Ñ‹Ñ systemd загады {command!s} Ñ– {suffix!s} " "Ð´Ð»Ñ Ð°Ð´Ð·Ñ–Ð½ÐºÑ– {name!s}." #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "Ðдмантаваць Ñ„Ð°Ð¹Ð»Ð°Ð²Ñ‹Ñ ÑÑ–ÑÑ‚Ñмы." #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "Запаўненне файлавых ÑÑ–ÑÑ‚Ñм." #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "памылка rsync з кодам {}." #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "Ðе атрымалаÑÑ Ñ€Ð°Ñпакаваць вобраз \"{}\"" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "Ðе атрымалаÑÑ Ð·Ð½Ð°Ð¹Ñці unsquashfs, праверце ці ÑžÑталÑваны Ñž Ð²Ð°Ñ Ð¿Ð°ÐºÑƒÐ½Ð°Ðº " "squashfs-tools" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "Ð”Ð»Ñ ÐºÐ°Ñ€Ð°Ð½Ñ‘Ð²Ð°Ð³Ð° раздзела нÑма пункта мантаваннÑ" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "globalstorage не змÑшчае ключа \"rootMountPoint\", нічога не выконваецца" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "Хібны пункт Ð¼Ð°Ð½Ñ‚Ð°Ð²Ð°Ð½Ð½Ñ Ð´Ð»Ñ ÐºÐ°Ñ€Ð°Ð½Ñ‘Ð²Ð°Ð³Ð° раздзела" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "rootMountPoint \"{}\" не Ñ–Ñнуе, нічога не выконваецца" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "Ð¥Ñ–Ð±Ð½Ð°Ñ ÐºÐ°Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ‹Ñ unsquash" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "Ð¤Ð°Ð¹Ð»Ð°Ð²Ð°Ñ ÑÑ–ÑÑ‚Ñма Ð´Ð»Ñ \"{}\" ({}) не падтрымліваецца" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "Ð—Ñ‹Ñ…Ð¾Ð´Ð½Ð°Ñ Ñ„Ð°Ð¹Ð»Ð°Ð²Ð°Ñ ÑÑ–ÑÑ‚Ñма \"{}\" не Ñ–Ñнуе" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "Пункт прызначÑÐ½Ð½Ñ \"{}\" у мÑтавай ÑÑ–ÑÑ‚Ñме не з’ÑўлÑецца каталогам" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "Ðемагчыма запіÑаць файл канфігурацыі KDM" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "Файл канфігурацыі KDM {!s} не Ñ–Ñнуе" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "Ðемагчыма запіÑаць файл канфігурацыі LXDM" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "Файл канфігурацыі LXDM {!s} не Ñ–Ñнуе" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "Ðемагчыма запіÑаць файл канфігурацыі LightDM" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "Файл канфігурацыі LightDM {!s} не Ñ–Ñнуе" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "Ðемагчыма наладзіць LightDM" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "LightDM greeter не ÑžÑталÑваны." #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "Ðемагчыма запіÑаць файл канфігурацыі SLIM" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "Файл канфігурацыі SLIM {!s} не Ñ–Ñнуе" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "У модулі дыÑплейных кіраўнікоў нічога не абрана." #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" "Ð¡Ð¿Ñ–Ñ Ð´Ñ‹Ñплейных кіраўнікоў пуÑты альбо не вызначаны Ñž bothglobalstorage Ñ– " "displaymanager.conf." #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "Ðаладка дыÑплейнага кіраўніка не завершанаÑ." #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "Ðаладка mkinitcpio." #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "Каранёвы пункт Ð¼Ð°Ð½Ñ‚Ð°Ð²Ð°Ð½Ð½Ñ Ð´Ð»Ñ
{!s}
не пададзены." #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "Ðаладка зашыфраванага swap." #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "УÑталёўка даных." #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "Ðаладзіць Ñлужбы OpenRC" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "Ðе атрымалаÑÑ Ð´Ð°Ð´Ð°Ñ†ÑŒ Ñлужбу {name!s} на ўзровень запуÑку {level!s}." #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "Ðе атрымалаÑÑ Ð²Ñ‹Ð´Ð°Ð»Ñ–Ñ†ÑŒ Ñлужбу {name!s} з ÑƒÐ·Ñ€Ð¾ÑžÐ½Ñ Ð·Ð°Ð¿ÑƒÑку {level!s}." #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" "ÐевÑдомае дзеÑнне {arg!s} Ð´Ð»Ñ Ñлужбы {name!s} на ўзроўні " "запуÑку {level!s}." #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" "rc-update {arg!s} пад chroot вÑрнуўÑÑ Ð· кодам памылкі {num!s}." #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "МÑтавы ўзровень запуÑку не Ñ–Ñнуе" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "ШлÑÑ… {path!s} да ÑžÐ·Ñ€Ð¾ÑžÐ½Ñ Ð·Ð°Ð¿ÑƒÑку {level!s} не Ñ–Ñнуе." #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "МÑÑ‚Ð°Ð²Ð°Ñ Ñлужба не Ñ–Ñнуе" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "ШлÑÑ… {path!s} да Ñлужбы {level!s} не Ñ–Ñнуе." #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "Ðаладзіць Ñ‚Ñму Plymouth" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Ðпрацоўка пакункаў (%(count)d / %(total)d)" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "УÑталÑваць пакункі." #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "УÑталёўка аднаго пакунка." msgstr[1] "УÑталёўка %(num)d пакункаў." msgstr[2] "УÑталёўка %(num)d пакункаў." msgstr[3] "УÑталёўка%(num)d пакункаў." #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Выдаленне аднаго пакунка." msgstr[1] "Выдаленне %(num)d пакункаў." msgstr[2] "Выдаленне %(num)d пакункаў." msgstr[3] "Выдаленне %(num)d пакункаў." #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "УÑталÑваць загрузчык." #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "Выдаліць чаÑовага карыÑтальніка з мÑтавай ÑÑ–ÑÑ‚Ñмы" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "Ðаладка апаратнага гадзінніка." #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "СтварÑнне initramfs з dracut." #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "Ðе атрымалаÑÑ Ð·Ð°Ð¿ÑƒÑціць dracut у пункце прызначÑннÑ" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "Код выхаду {}" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "Ðаладка initramfs." #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "Ðаладка OpenRC dmcrypt." #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "Ð—Ð°Ð¿Ñ–Ñ fstab." #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "Задача Dummy python." #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "Крок Dummy python {}" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "Ðаладка лакалÑÑž." #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "Захаванне Ñеткавай канфігурацыі." calamares-3.2.20/lang/python/bg/000077500000000000000000000000001362604102500163575ustar00rootroot00000000000000calamares-3.2.20/lang/python/bg/LC_MESSAGES/000077500000000000000000000000001362604102500201445ustar00rootroot00000000000000calamares-3.2.20/lang/python/bg/LC_MESSAGES/python.mo000066400000000000000000000023461362604102500220270ustar00rootroot00000000000000Þ•\ œÈÉÛð4+70c”‚ª%-,S&€b§D ^O7®Dummy python job.Dummy python step {}Install packages.Installing one package.Installing %(num)d packages.Processing packages (%(count)d / %(total)d)Removing one package.Removing %(num)d packages.Unmount file systems.Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Last-Translator: Georgi Georgiev , 2018 Language-Team: Bulgarian (https://www.transifex.com/calamares/teams/20061/bg/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: bg Plural-Forms: nplurals=2; plural=(n != 1); Фиктивна задача python.Фиктивна Ñтъпка на python {}ИнÑталирай пакетите.ИнÑталиране на един пакет.ИнÑталиране на %(num)d пакети.Обработване на пакетите (%(count)d / %(total)d)Премахване на един пакет.Премахване на %(num)d пакети.Демонтирай файловите ÑиÑтеми.calamares-3.2.20/lang/python/bg/LC_MESSAGES/python.po000066400000000000000000000221551362604102500220320ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Georgi Georgiev , 2018 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Georgi Georgiev , 2018\n" "Language-Team: Bulgarian (https://www.transifex.com/calamares/teams/20061/bg/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: bg\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "Демонтирай файловите ÑиÑтеми." #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "" #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Обработване на пакетите (%(count)d / %(total)d)" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "ИнÑталирай пакетите." #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "ИнÑталиране на един пакет." msgstr[1] "ИнÑталиране на %(num)d пакети." #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Премахване на един пакет." msgstr[1] "Премахване на %(num)d пакети." #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "" #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "" #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "" #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "Фиктивна задача python." #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "Фиктивна Ñтъпка на python {}" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "" calamares-3.2.20/lang/python/ca/000077500000000000000000000000001362604102500163525ustar00rootroot00000000000000calamares-3.2.20/lang/python/ca/LC_MESSAGES/000077500000000000000000000000001362604102500201375ustar00rootroot00000000000000calamares-3.2.20/lang/python/ca/LC_MESSAGES/python.mo000066400000000000000000000201321362604102500220130ustar00rootroot00000000000000Þ•FLa|JJL"—º3Õ 4"4W3Œ/Àð8#?$c'ˆ$°Õéù , #G k ‡ ž ³ Ë ,ë  * R? "’ µ Ñ é ý  4 #U $y 'ž Æ Û ;ù !5 5W 8 +Æ #ò 0 $G l Š ¢ Á <ß \y-ŽO¼M )ZX„`Ý>TDc;¨ äuX{XÔ6-$dD‰ ÎFï?6Dv@»üG6c8š:Ó8G^q ¯%Ð$ö4Qj8‰ÂÝ\÷+T'€!¨'Êò 64V6‹8Âû0IF5<ÆG,KEx7¾6ö%-&S1z%¬BÒcy1˜ZÊM%,sh m !w™C©Dí'2 C>5B4<F 8 6?!&-'. A;*D$ 192 #@,7(3" :0+/E%)=rc-update {arg!s} call in chroot returned error code {num!s}.systemctl {arg!s} call in chroot returned error code {num!s}.Bad mount point for root partitionBad unsquash configurationCannot add service {name!s} to run-level {level!s}.Cannot configure LightDMCannot disable systemd target {name!s}.Cannot enable systemd service {name!s}.Cannot enable systemd target {name!s}.Cannot mask systemd unit {name!s}.Cannot modify serviceCannot remove service {name!s} from run-level {level!s}.Cannot write KDM configuration fileCannot write LXDM configuration fileCannot write LightDM configuration fileCannot write SLIM configuration fileConfiguration ErrorConfigure GRUB.Configure OpenRC servicesConfigure Plymouth themeConfigure systemd servicesConfiguring OpenRC dmcrypt service.Configuring encrypted swap.Configuring initramfs.Configuring locales.Configuring mkinitcpio.Creating initramfs with dracut.Display manager configuration was incompleteDummy python job.Dummy python step {}Failed to find unsquashfs, make sure you have the squashfs-tools package installedFailed to run dracut on the targetFailed to unpack image "{}"Filling up filesystems.Install bootloader.Install packages.Installing data.Installing one package.Installing %(num)d packages.KDM config file {!s} does not existLXDM config file {!s} does not existLightDM config file {!s} does not existMounting partitions.No LightDM greeter installed.No display managers selected for the displaymanager module.No mount point for root partitionNo partitions are defined for
{!s}
to use.No root mount point is given for
{!s}
to use.Processing packages (%(count)d / %(total)d)Remove live user from target systemRemoving one package.Removing %(num)d packages.SLIM config file {!s} does not existSaving network configuration.Setting hardware clock.Target runlevel does not existTarget service does not existThe destination "{}" in the target system is not a directoryThe displaymanagers list is empty or undefined in bothglobalstorage and displaymanager.conf.The exit code was {}The filesystem for "{}" ({}) is not supportedThe path for runlevel {level!s} is {path!s}, which does not exist.The path for service {name!s} is {path!s}, which does not exist.The source filesystem "{}" does not existUnknown service-action {arg!s} for service {name!s} in run-level {level!s}.Unknown systemd commands {command!s} and {suffix!s} for unit {name!s}.Unmount file systems.Writing fstab.globalstorage does not contain a "rootMountPoint" key, doing nothingrootMountPoint is "{}", which does not exist, doing nothingrsync failed with error code {}.Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Last-Translator: Davidmp , 2020 Language-Team: Catalan (https://www.transifex.com/calamares/teams/20061/ca/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: ca Plural-Forms: nplurals=2; plural=(n != 1); La crida de rc-update {arg!s} a chroot ha retornat el codi d'error {num!s}.La crida de systemctl {arg!s} a chroot ha retornat el codi d'error {num!s}.Punt de muntatge incorrecte per a la partició d'arrelConfiguració incorrecta d'unsquash.No es pot afegir el servei {name!s} al nivell d'execució {level!s}.No es pot configurar el LightDM.No es pot inhabilitar la destinació de systemd {name!s}.No es pot habilitar el servei de systemd {name!s}.No es pot habilitar la destinació de systemd {name!s}.No es pot emmascarar la unitat de systemd {name!s}.No es pot modificar el servei.No es pot suprimir el servei {name!s} del nivell d'execució {level!s}.No es pot escriure el fitxer de configuració del KDM.No es pot escriure el fitxer de configuració de l'LXDM.No es pot escriure el fitxer de configuració del LightDM.No es pot escriure el fitxer de configuració de l'SLIM.Error de configuracióConfigura el GRUB.Configura els serveis d'OpenRCConfigura el tema del PlymouthConfigura els serveis de systemdEs configura el sevei OpenRC dmcrypt.Es configura l'intercanvi encriptat.Es configuren initramfs.Es configuren les llengües.Es configura mkinitcpio.Es creen initramfs amb dracut.La configuració del gestor de pantalla no era completa.Tasca de python fictícia.Pas de python fitctici {}Ha fallat trobar unsquashfs, assegureu-vos que tingueu el paquet squashfs-tools instal·lat.Ha fallat executar dracut a la destinació.Ha fallat desempaquetar la imatge "{}".S'omplen els sistemes de fitxers.S'instal·la el carregador d'arrencada.Instal·la els paquets.S'instal·len dades.S'instal·la un paquet.S'instal·len %(num)d paquets.El fitxer de configuració del KDM {!s} no existeix.El fitxer de configuració de l'LXDM {!s} no existeix.El fitxer de configuració del LightDM {!s} no existeix.Es munten les particions.No hi ha benvinguda instal·lada per al LightDM.No hi ha cap gestor de pantalla seleccionat per al mòdul displaymanager.No hi ha punt de muntatge per a la partició d'arrel.No s'han definit particions perquè les usi
{!s}
.No s'ha proporcionat el punt de muntatge perquè l'usi
{!s}
.Es processen paquets (%(count)d / %(total)d)Suprimeix l'usuari de la sessió autònoma del sistema de destinacióSe suprimeix un paquet.Se suprimeixen %(num)d paquets.El fitxer de configuració de l'SLIM {!s} no existeix.Es desa la configuració de la xarxa.S'estableix el rellotge del maquinari.El nivell d'execució de destinació no existeix.El servei de destinació no existeix.La destinació "{}" al sistema de destinació no és un directori.La llista de gestors de pantalla és buida o no definida a bothglobalstorage i displaymanager.conf.El codi de sortida ha estat {}El sistema de fitxers per a "{}" ({}) no s'admet.El camí per al nivell d'execució {level!s} és {path!s}, però no existeix.El camí per al servei {name!s} és {path!s}, però no existeix.El sistema de fitxers font "{}" no existeix.Servei - acció desconeguda {arg!s} per al servei {name!s} al nivell d'execució {level!s}.Ordres desconegudes de systemd: {command!s} i {suffix!s}, per a la unitat {name!s}.Desmunta els sistemes de fitxers.S'escriu fstab.globalstorage no conté cap clau de "rootMountPoint". No es fa res.El punt de muntatge d'arrel és "{}", que no existeix. No es fa res.Ha fallat rsync amb el codi d'error {}.calamares-3.2.20/lang/python/ca/LC_MESSAGES/python.po000066400000000000000000000301771362604102500220300ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Davidmp , 2020 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Davidmp , 2020\n" "Language-Team: Catalan (https://www.transifex.com/calamares/teams/20061/ca/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ca\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "Configura el GRUB." #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "Es munten les particions." #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "Error de configuració" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "No s'han definit particions perquè les usi
{!s}
." #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "Configura els serveis de systemd" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "No es pot modificar el servei." #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" "La crida de systemctl {arg!s} a chroot ha retornat el codi " "d'error {num!s}." #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "No es pot habilitar el servei de systemd {name!s}." #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "No es pot habilitar la destinació de systemd {name!s}." #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "No es pot inhabilitar la destinació de systemd {name!s}." #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "No es pot emmascarar la unitat de systemd {name!s}." #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "Ordres desconegudes de systemd: {command!s} i " "{suffix!s}, per a la unitat {name!s}." #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "Desmunta els sistemes de fitxers." #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "S'omplen els sistemes de fitxers." #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "Ha fallat rsync amb el codi d'error {}." #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "Ha fallat desempaquetar la imatge \"{}\"." #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "Ha fallat trobar unsquashfs, assegureu-vos que tingueu el paquet squashfs-" "tools instal·lat." #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "No hi ha punt de muntatge per a la partició d'arrel." #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "globalstorage no conté cap clau de \"rootMountPoint\". No es fa res." #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "Punt de muntatge incorrecte per a la partició d'arrel" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "El punt de muntatge d'arrel és \"{}\", que no existeix. No es fa res." #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "Configuració incorrecta d'unsquash." #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "El sistema de fitxers per a \"{}\" ({}) no s'admet." #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "El sistema de fitxers font \"{}\" no existeix." #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "La destinació \"{}\" al sistema de destinació no és un directori." #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "No es pot escriure el fitxer de configuració del KDM." #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "El fitxer de configuració del KDM {!s} no existeix." #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "No es pot escriure el fitxer de configuració de l'LXDM." #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "El fitxer de configuració de l'LXDM {!s} no existeix." #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "No es pot escriure el fitxer de configuració del LightDM." #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "El fitxer de configuració del LightDM {!s} no existeix." #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "No es pot configurar el LightDM." #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "No hi ha benvinguda instal·lada per al LightDM." #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "No es pot escriure el fitxer de configuració de l'SLIM." #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "El fitxer de configuració de l'SLIM {!s} no existeix." #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "" "No hi ha cap gestor de pantalla seleccionat per al mòdul displaymanager." #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" "La llista de gestors de pantalla és buida o no definida a bothglobalstorage " "i displaymanager.conf." #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "La configuració del gestor de pantalla no era completa." #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "Es configura mkinitcpio." #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" "No s'ha proporcionat el punt de muntatge perquè l'usi
{!s}
." #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "Es configura l'intercanvi encriptat." #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "S'instal·len dades." #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "Configura els serveis d'OpenRC" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "No es pot afegir el servei {name!s} al nivell d'execució {level!s}." #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" "No es pot suprimir el servei {name!s} del nivell d'execució {level!s}." #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" "Servei - acció desconeguda {arg!s} per al servei {name!s} al " "nivell d'execució {level!s}." #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" "La crida de rc-update {arg!s} a chroot ha retornat el codi " "d'error {num!s}." #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "El nivell d'execució de destinació no existeix." #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" "El camí per al nivell d'execució {level!s} és {path!s}, però no" " existeix." #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "El servei de destinació no existeix." #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" "El camí per al servei {name!s} és {path!s}, però no existeix." #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "Configura el tema del Plymouth" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Es processen paquets (%(count)d / %(total)d)" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "Instal·la els paquets." #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "S'instal·la un paquet." msgstr[1] "S'instal·len %(num)d paquets." #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Se suprimeix un paquet." msgstr[1] "Se suprimeixen %(num)d paquets." #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "S'instal·la el carregador d'arrencada." #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "Suprimeix l'usuari de la sessió autònoma del sistema de destinació" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "S'estableix el rellotge del maquinari." #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "Es creen initramfs amb dracut." #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "Ha fallat executar dracut a la destinació." #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "El codi de sortida ha estat {}" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "Es configuren initramfs." #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "Es configura el sevei OpenRC dmcrypt." #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "S'escriu fstab." #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "Tasca de python fictícia." #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "Pas de python fitctici {}" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "Es configuren les llengües." #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "Es desa la configuració de la xarxa." calamares-3.2.20/lang/python/ca@valencia/000077500000000000000000000000001362604102500201555ustar00rootroot00000000000000calamares-3.2.20/lang/python/ca@valencia/LC_MESSAGES/000077500000000000000000000000001362604102500217425ustar00rootroot00000000000000calamares-3.2.20/lang/python/ca@valencia/LC_MESSAGES/python.mo000066400000000000000000000006321362604102500236210ustar00rootroot00000000000000Þ•$,8`9Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Language-Team: Catalan (Valencian) (https://www.transifex.com/calamares/teams/20061/ca@valencia/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: ca@valencia Plural-Forms: nplurals=2; plural=(n != 1); calamares-3.2.20/lang/python/ca@valencia/LC_MESSAGES/python.po000066400000000000000000000211261362604102500236250ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Catalan (Valencian) (https://www.transifex.com/calamares/teams/20061/ca@valencia/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ca@valencia\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "" #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "" #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "" #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "" #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "" calamares-3.2.20/lang/python/cs_CZ/000077500000000000000000000000001362604102500167705ustar00rootroot00000000000000calamares-3.2.20/lang/python/cs_CZ/LC_MESSAGES/000077500000000000000000000000001362604102500205555ustar00rootroot00000000000000calamares-3.2.20/lang/python/cs_CZ/LC_MESSAGES/python.mo000066400000000000000000000203371362604102500224400ustar00rootroot00000000000000Þ•FLa|JJL"—º3Õ 4"4W3Œ/Àð8#?$c'ˆ$°Õéù , #G k ‡ ž ³ Ë ,ë  * R? "’ µ Ñ é ý  4 #U $y 'ž Æ Û ;ù !5 5W 8 +Æ #ò 0 $G l Š ¢ Á <ß \y-ŽO¼M )ZX„`Ý>TDc;¨ äæMìP:-‹¹LÕ"7?:w:²<í*KF0’1Ã4õ1*\mŒ#¤È%áGO2h› µ+Öa7&™&À%ç ,BŒQ-Þ. 1;m1†E¸.þ4-:b26Ð.‰¸"×-ú(0DhuÞ2ög)S‘0åfe}ã M Pb +³ C>5B4<F 8 6?!&-'. A;*D$ 192 #@,7(3" :0+/E%)=rc-update {arg!s} call in chroot returned error code {num!s}.systemctl {arg!s} call in chroot returned error code {num!s}.Bad mount point for root partitionBad unsquash configurationCannot add service {name!s} to run-level {level!s}.Cannot configure LightDMCannot disable systemd target {name!s}.Cannot enable systemd service {name!s}.Cannot enable systemd target {name!s}.Cannot mask systemd unit {name!s}.Cannot modify serviceCannot remove service {name!s} from run-level {level!s}.Cannot write KDM configuration fileCannot write LXDM configuration fileCannot write LightDM configuration fileCannot write SLIM configuration fileConfiguration ErrorConfigure GRUB.Configure OpenRC servicesConfigure Plymouth themeConfigure systemd servicesConfiguring OpenRC dmcrypt service.Configuring encrypted swap.Configuring initramfs.Configuring locales.Configuring mkinitcpio.Creating initramfs with dracut.Display manager configuration was incompleteDummy python job.Dummy python step {}Failed to find unsquashfs, make sure you have the squashfs-tools package installedFailed to run dracut on the targetFailed to unpack image "{}"Filling up filesystems.Install bootloader.Install packages.Installing data.Installing one package.Installing %(num)d packages.KDM config file {!s} does not existLXDM config file {!s} does not existLightDM config file {!s} does not existMounting partitions.No LightDM greeter installed.No display managers selected for the displaymanager module.No mount point for root partitionNo partitions are defined for
{!s}
to use.No root mount point is given for
{!s}
to use.Processing packages (%(count)d / %(total)d)Remove live user from target systemRemoving one package.Removing %(num)d packages.SLIM config file {!s} does not existSaving network configuration.Setting hardware clock.Target runlevel does not existTarget service does not existThe destination "{}" in the target system is not a directoryThe displaymanagers list is empty or undefined in bothglobalstorage and displaymanager.conf.The exit code was {}The filesystem for "{}" ({}) is not supportedThe path for runlevel {level!s} is {path!s}, which does not exist.The path for service {name!s} is {path!s}, which does not exist.The source filesystem "{}" does not existUnknown service-action {arg!s} for service {name!s} in run-level {level!s}.Unknown systemd commands {command!s} and {suffix!s} for unit {name!s}.Unmount file systems.Writing fstab.globalstorage does not contain a "rootMountPoint" key, doing nothingrootMountPoint is "{}", which does not exist, doing nothingrsync failed with error code {}.Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Last-Translator: Pavel Borecki , 2019 Language-Team: Czech (Czech Republic) (https://www.transifex.com/calamares/teams/20061/cs_CZ/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: cs_CZ Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3; rc-update {arg!s} volání v chroot vrátilo kód chyby {num!s}.Volání systemctl {arg!s} v chroot vrátilo chybový kód {num!s}.Chybný přípojný bod pro koÅ™enový oddílChybná nastavení unsquashNedaří se pÅ™idat službu {name!s} do úrovnÄ› chodu (runlevel) {level!s}.Nedaří se nastavit LightDMNedaří se vypnout systemd cíl {name!s}.Nedaří se zapnout systemd službu {name!s}.Nedaří se zapnout systemd službu {name!s}.Nedaří se maskovat systemd jednotku {name!s}.Službu se nedaří upravitNedaří se odebrat službu {name!s} z úrovnÄ› chodu (runlevel) {level!s}.Nedaří se zapsat soubor s nastaveními pro KDMNedaří se zapsat soubor s nastaveními pro LXDMNedaří se zapsat soubor s nastaveními pro LightDMNedaří se zapsat soubor s nastaveními pro SLIMChyba nastaveníNastavování zavadÄ›Äe GRUB.Nastavit OpenRC službyNastavit téma vzhledu pro PlymouthNastavit služby systemdNastavování služby OpenRC dmcrypt.Nastavování Å¡ifrovaného prostoru pro odkládání stránek pamÄ›ti.Nastavování initramfs.Nastavování místních a jazykových nastavení.Nastavování mkinitcpio.Vytváření initramfs s dracut.Nastavení správce displeje nebylo úplnéTestovací úloha python.Testovací krok {} python.NepodaÅ™ilo se nalézt unsquashfs – ověřte, že máte nainstalovaný balíÄek squashfs-toolsNa cíli se nepodaÅ™ilo spustit dracutNepodaÅ™ilo se rozbalit obraz „{}“Naplňování souborových systémů.Instalace zavadÄ›Äe systému.Instalovat balíÄky.Instalace dat.Je instalován jeden balíÄek.Jsou instalovány %(num)d balíÄky.Je instalováno %(num)d balíÄků.Je instalováno %(num)d balíÄků.Soubor s nastaveními pro KDM {!s} neexistujeSoubor s nastaveními pro LXDM {!s} neexistujeSoubor s nastaveními pro LightDM {!s} neexistujePÅ™ipojování oddílů.Není nainstalovaný žádný LightDM pÅ™ivítaÄPro modul správce sezení nejsou vybrány žádní správci sezení.Žádný přípojný bot pro koÅ™enový oddílPro
{!s}
nejsou zadány žádné oddíly.Pro
{!s}
není zadán žádný přípojný bod.Zpracovávání balíÄků (%(count)d / %(total)d)Odebrat uživatele živé relace z cílového systémuOdebírá se jeden balíÄek.Odebírají se %(num)d balíÄky.Odebírá se %(num)d balíÄků.Odebírá se %(num)d balíÄků.Soubor s nastaveními pro SLIM {!s} neexistujeUkládání nastavení sítÄ›.Nastavování hardwarových hodin.Cílová úroveň chodu (runlevel) neexistujeCílová služba neexistujeCíl „{}“ v cílovém systému není složkaSeznam správců displejů je prázdný nebo není definován v bothglobalstorage a displaymanager.conf.Návratový kód byl {}Souborový systém „{}“ ({}) není podporovánPopis umístÄ›ní pro úroveň chodu (runlevel) {level!s} je {path!s}, keterá neexistuje.Popis umístÄ›ní pro službu {name!s} je {path!s}, která neexistuje.Zdrojový souborový systém „{}“ neexistujeNeznámá akce služby {arg!s} pro službu {name!s} v úrovni chodu (runlevel) {level!s}.Neznámé systemd příkazy {command!s} a {suffix!s} pro jednotku {name!s}.Odpojit souborové systémy.Zapisování fstab.globalstorage neobsahuje klÃ­Ä â€žrootMountPoint“ – nic se nebude dÄ›latkoÅ™enovýPřípojnýBod je „{}“, který neexistuje – nic se nebude dÄ›latrsync se nezdaÅ™ilo s chybových kódem {}.calamares-3.2.20/lang/python/cs_CZ/LC_MESSAGES/python.po000066400000000000000000000304761362604102500224500ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # pavelrz, 2017 # Pavel Borecki , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Pavel Borecki , 2019\n" "Language-Team: Czech (Czech Republic) (https://www.transifex.com/calamares/teams/20061/cs_CZ/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: cs_CZ\n" "Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "Nastavování zavadÄ›Äe GRUB." #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "PÅ™ipojování oddílů." #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "Chyba nastavení" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "Pro
{!s}
nejsou zadány žádné oddíly." #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "Nastavit služby systemd" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "Službu se nedaří upravit" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" "Volání systemctl {arg!s} v chroot vrátilo chybový kód {num!s}." #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "Nedaří se zapnout systemd službu {name!s}." #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "Nedaří se zapnout systemd službu {name!s}." #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "Nedaří se vypnout systemd cíl {name!s}." #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "Nedaří se maskovat systemd jednotku {name!s}." #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "Neznámé systemd příkazy {command!s} a {suffix!s} " "pro jednotku {name!s}." #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "Odpojit souborové systémy." #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "Naplňování souborových systémů." #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "rsync se nezdaÅ™ilo s chybových kódem {}." #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "NepodaÅ™ilo se rozbalit obraz „{}“" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "NepodaÅ™ilo se nalézt unsquashfs – ověřte, že máte nainstalovaný balíÄek " "squashfs-tools" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "Žádný přípojný bot pro koÅ™enový oddíl" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "globalstorage neobsahuje klÃ­Ä â€žrootMountPoint“ – nic se nebude dÄ›lat" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "Chybný přípojný bod pro koÅ™enový oddíl" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "koÅ™enovýPřípojnýBod je „{}“, který neexistuje – nic se nebude dÄ›lat" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "Chybná nastavení unsquash" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "Souborový systém „{}“ ({}) není podporován" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "Zdrojový souborový systém „{}“ neexistuje" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "Cíl „{}“ v cílovém systému není složka" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "Nedaří se zapsat soubor s nastaveními pro KDM" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "Soubor s nastaveními pro KDM {!s} neexistuje" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "Nedaří se zapsat soubor s nastaveními pro LXDM" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "Soubor s nastaveními pro LXDM {!s} neexistuje" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "Nedaří se zapsat soubor s nastaveními pro LightDM" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "Soubor s nastaveními pro LightDM {!s} neexistuje" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "Nedaří se nastavit LightDM" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "Není nainstalovaný žádný LightDM pÅ™ivítaÄ" #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "Nedaří se zapsat soubor s nastaveními pro SLIM" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "Soubor s nastaveními pro SLIM {!s} neexistuje" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "Pro modul správce sezení nejsou vybrány žádní správci sezení." #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" "Seznam správců displejů je prázdný nebo není definován v bothglobalstorage a" " displaymanager.conf." #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "Nastavení správce displeje nebylo úplné" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "Nastavování mkinitcpio." #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "Pro
{!s}
není zadán žádný přípojný bod." #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "Nastavování Å¡ifrovaného prostoru pro odkládání stránek pamÄ›ti." #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "Instalace dat." #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "Nastavit OpenRC služby" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" "Nedaří se pÅ™idat službu {name!s} do úrovnÄ› chodu (runlevel) {level!s}." #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" "Nedaří se odebrat službu {name!s} z úrovnÄ› chodu (runlevel) {level!s}." #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" "Neznámá akce služby {arg!s} pro službu {name!s} v úrovni chodu " "(runlevel) {level!s}." #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" "rc-update {arg!s} volání v chroot vrátilo kód chyby {num!s}." #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "Cílová úroveň chodu (runlevel) neexistuje" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" "Popis umístÄ›ní pro úroveň chodu (runlevel) {level!s} je " "{path!s}, keterá neexistuje." #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "Cílová služba neexistuje" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" "Popis umístÄ›ní pro službu {name!s} je {path!s}, která " "neexistuje." #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "Nastavit téma vzhledu pro Plymouth" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Zpracovávání balíÄků (%(count)d / %(total)d)" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "Instalovat balíÄky." #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Je instalován jeden balíÄek." msgstr[1] "Jsou instalovány %(num)d balíÄky." msgstr[2] "Je instalováno %(num)d balíÄků." msgstr[3] "Je instalováno %(num)d balíÄků." #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Odebírá se jeden balíÄek." msgstr[1] "Odebírají se %(num)d balíÄky." msgstr[2] "Odebírá se %(num)d balíÄků." msgstr[3] "Odebírá se %(num)d balíÄků." #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "Instalace zavadÄ›Äe systému." #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "Odebrat uživatele živé relace z cílového systému" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "Nastavování hardwarových hodin." #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "Vytváření initramfs s dracut." #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "Na cíli se nepodaÅ™ilo spustit dracut" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "Návratový kód byl {}" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "Nastavování initramfs." #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "Nastavování služby OpenRC dmcrypt." #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "Zapisování fstab." #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "Testovací úloha python." #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "Testovací krok {} python." #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "Nastavování místních a jazykových nastavení." #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "Ukládání nastavení sítÄ›." calamares-3.2.20/lang/python/da/000077500000000000000000000000001362604102500163535ustar00rootroot00000000000000calamares-3.2.20/lang/python/da/LC_MESSAGES/000077500000000000000000000000001362604102500201405ustar00rootroot00000000000000calamares-3.2.20/lang/python/da/LC_MESSAGES/python.mo000066400000000000000000000170421362604102500220220ustar00rootroot00000000000000Þ•FLa|JJL"—º3Õ 4"4W3Œ/Àð8#?$c'ˆ$°Õéù , #G k ‡ ž ³ Ë ,ë  * R? "’ µ Ñ é ý  4 #U $y 'ž Æ Û ;ù !5 5W 8 +Æ #ò 0 $G l Š ¢ Á <ß \y-ŽO¼M )ZX„`Ý>TDc;¨ äfKlK¸).DM’9°:ê7%7]•B°%ó&)@&j‘¨¹Õî% 1Nf€™0¸éûN"_!‚¤ºÑä2ö&)'P*x£.¹Lè&5E\L¢*ï!*<'g®Åä2þd1–,®OÛG+!sa•d÷\rD7Æ#þC>5B4<F 8 6?!&-'. A;*D$ 192 #@,7(3" :0+/E%)=rc-update {arg!s} call in chroot returned error code {num!s}.systemctl {arg!s} call in chroot returned error code {num!s}.Bad mount point for root partitionBad unsquash configurationCannot add service {name!s} to run-level {level!s}.Cannot configure LightDMCannot disable systemd target {name!s}.Cannot enable systemd service {name!s}.Cannot enable systemd target {name!s}.Cannot mask systemd unit {name!s}.Cannot modify serviceCannot remove service {name!s} from run-level {level!s}.Cannot write KDM configuration fileCannot write LXDM configuration fileCannot write LightDM configuration fileCannot write SLIM configuration fileConfiguration ErrorConfigure GRUB.Configure OpenRC servicesConfigure Plymouth themeConfigure systemd servicesConfiguring OpenRC dmcrypt service.Configuring encrypted swap.Configuring initramfs.Configuring locales.Configuring mkinitcpio.Creating initramfs with dracut.Display manager configuration was incompleteDummy python job.Dummy python step {}Failed to find unsquashfs, make sure you have the squashfs-tools package installedFailed to run dracut on the targetFailed to unpack image "{}"Filling up filesystems.Install bootloader.Install packages.Installing data.Installing one package.Installing %(num)d packages.KDM config file {!s} does not existLXDM config file {!s} does not existLightDM config file {!s} does not existMounting partitions.No LightDM greeter installed.No display managers selected for the displaymanager module.No mount point for root partitionNo partitions are defined for
{!s}
to use.No root mount point is given for
{!s}
to use.Processing packages (%(count)d / %(total)d)Remove live user from target systemRemoving one package.Removing %(num)d packages.SLIM config file {!s} does not existSaving network configuration.Setting hardware clock.Target runlevel does not existTarget service does not existThe destination "{}" in the target system is not a directoryThe displaymanagers list is empty or undefined in bothglobalstorage and displaymanager.conf.The exit code was {}The filesystem for "{}" ({}) is not supportedThe path for runlevel {level!s} is {path!s}, which does not exist.The path for service {name!s} is {path!s}, which does not exist.The source filesystem "{}" does not existUnknown service-action {arg!s} for service {name!s} in run-level {level!s}.Unknown systemd commands {command!s} and {suffix!s} for unit {name!s}.Unmount file systems.Writing fstab.globalstorage does not contain a "rootMountPoint" key, doing nothingrootMountPoint is "{}", which does not exist, doing nothingrsync failed with error code {}.Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Last-Translator: scootergrisen, 2019 Language-Team: Danish (https://www.transifex.com/calamares/teams/20061/da/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: da Plural-Forms: nplurals=2; plural=(n != 1); rc-update {arg!s}-kald i chroot returnerede fejlkoden {num!s}.systemctl {arg!s}-kald i chroot returnerede fejlkoden {num!s}.Dårligt monteringspunkt til rodpartitionDårlig unsquash-konfigurationKan ikke tilføje tjenesten {name!s} til kørselsniveauet {level!s}.Kan ikke konfigurerer LightDMKan ikke deaktivere systemd-målet {name!s}.Kan ikke aktivere systemd-tjenesten {name!s}.Kan ikke aktivere systemd-målet {name!s}.Kan ikke maskere systemd-enheden {name!s}.Kan ikke redigere tjenesteKan ikke fjerne tjenesten {name!s} fra kørselsniveauet {level!s}.Kan ikke skrive KDM-konfigurationsfilKan ikke skrive LXDM-konfigurationsfilKan ikke skrive LightDM-konfigurationsfilKan ikke skrive SLIM-konfigurationsfilFejl ved konfigurationKonfigurer GRUB.Konfigurer OpenRC-tjenesterKonfigurer Plymouth-temaKonfigurer systemd-tjenesterKonfigurerer OpenRC dmcrypt-tjeneste.Konfigurerer krypteret swap.Konfigurerer initramfs.Konfigurerer lokaliteter.Konfigurerer mkinitcpio.Opretter initramfs med dracut.Displayhåndtering-konfiguration er ikke kompletDummy python-job.Dummy python-trin {}Kunne ikke finde unsquashfs, sørg for at squashfs-tools-pakken er installeretKunne ikke køre dracut på måletKunne ikke udpakke aftrykket "{}"Udfylder filsystemer.Installér bootloader.Installér pakker.Installerer data.Installerer én pakke.Installerer %(num)d pakker.KDM-konfigurationsfil {!s} findes ikkeLXDM-konfigurationsfil {!s} findes ikkeLightDM-konfigurationsfil {!s} findes ikkeMonterer partitioner.Der er ikke installeret nogen LightDM greeter.Der er ikke valgt nogen displayhåndteringer til displayhåndtering-modulet.Intet monteringspunkt til rodpartitionDer er ikke angivet nogle partitioner som
{!s}
skal bruge.Der er ikke angivet noget rodmonteringspunkt som
{!s}
skal bruge.Forarbejder pakker (%(count)d / %(total)d)Fjern livebruger fra målsystemetFjerner én pakke.Fjerner %(num)d pakker.SLIM-konfigurationsfil {!s} findes ikkeGemmer netværkskonfiguration.Indstiller hardwareur.Målkørselsniveau findes ikkeMåltjenesten findes ikkeDestinationen "{}" i målsystemet er ikke en mappeListen over displayhåndteringer er tom eller udefineret i bothglobalstorage og displaymanager.conf.Afslutningskoden var {}Filsystemet til "{}" ({}) understøttes ikkeStien til kørselsniveauet {level!s} er {path!s}, som ikke findes.Stien til tjenesten {name!s} er {path!s}, som ikke findes.Kildefilsystemet "{}" findes ikkeUkendt tjenestehandling {arg!s} til tjenesten {name!s} i kørselsniveauet {level!s}.Ukendte systemd-kommandoer {command!s} og {suffix!s} til enheden {name!s}.Afmonter filsystemer.Skriver fstab.globalstorage indeholder ikke en "rootMountPoint"-nøgle, gør intetrootMountPoint er "{}", hvilket ikke findes, gør intetrsync mislykkedes med fejlkoden {}.calamares-3.2.20/lang/python/da/LC_MESSAGES/python.po000066400000000000000000000271051362604102500220260ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Dan Johansen, 2017 # scootergrisen, 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: scootergrisen, 2019\n" "Language-Team: Danish (https://www.transifex.com/calamares/teams/20061/da/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: da\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "Konfigurer GRUB." #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "Monterer partitioner." #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "Fejl ved konfiguration" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "Der er ikke angivet nogle partitioner som
{!s}
skal bruge." #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "Konfigurer systemd-tjenester" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "Kan ikke redigere tjeneste" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" "systemctl {arg!s}-kald i chroot returnerede fejlkoden {num!s}." #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "Kan ikke aktivere systemd-tjenesten {name!s}." #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "Kan ikke aktivere systemd-målet {name!s}." #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "Kan ikke deaktivere systemd-målet {name!s}." #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "Kan ikke maskere systemd-enheden {name!s}." #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "Ukendte systemd-kommandoer {command!s} og " "{suffix!s} til enheden {name!s}." #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "Afmonter filsystemer." #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "Udfylder filsystemer." #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "rsync mislykkedes med fejlkoden {}." #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "Kunne ikke udpakke aftrykket \"{}\"" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "Kunne ikke finde unsquashfs, sørg for at squashfs-tools-pakken er " "installeret" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "Intet monteringspunkt til rodpartition" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "globalstorage indeholder ikke en \"rootMountPoint\"-nøgle, gør intet" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "Dårligt monteringspunkt til rodpartition" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "rootMountPoint er \"{}\", hvilket ikke findes, gør intet" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "Dårlig unsquash-konfiguration" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "Filsystemet til \"{}\" ({}) understøttes ikke" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "Kildefilsystemet \"{}\" findes ikke" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "Destinationen \"{}\" i målsystemet er ikke en mappe" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "Kan ikke skrive KDM-konfigurationsfil" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "KDM-konfigurationsfil {!s} findes ikke" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "Kan ikke skrive LXDM-konfigurationsfil" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "LXDM-konfigurationsfil {!s} findes ikke" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "Kan ikke skrive LightDM-konfigurationsfil" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "LightDM-konfigurationsfil {!s} findes ikke" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "Kan ikke konfigurerer LightDM" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "Der er ikke installeret nogen LightDM greeter." #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "Kan ikke skrive SLIM-konfigurationsfil" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "SLIM-konfigurationsfil {!s} findes ikke" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "" "Der er ikke valgt nogen displayhåndteringer til displayhåndtering-modulet." #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" "Listen over displayhåndteringer er tom eller udefineret i bothglobalstorage " "og displaymanager.conf." #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "Displayhåndtering-konfiguration er ikke komplet" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "Konfigurerer mkinitcpio." #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" "Der er ikke angivet noget rodmonteringspunkt som
{!s}
skal bruge." #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "Konfigurerer krypteret swap." #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "Installerer data." #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "Konfigurer OpenRC-tjenester" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "Kan ikke tilføje tjenesten {name!s} til kørselsniveauet {level!s}." #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "Kan ikke fjerne tjenesten {name!s} fra kørselsniveauet {level!s}." #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" "Ukendt tjenestehandling {arg!s} til tjenesten {name!s} i " "kørselsniveauet {level!s}." #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" "rc-update {arg!s}-kald i chroot returnerede fejlkoden {num!s}." #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "MÃ¥lkørselsniveau findes ikke" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" "Stien til kørselsniveauet {level!s} er {path!s}, som ikke " "findes." #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "MÃ¥ltjenesten findes ikke" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" "Stien til tjenesten {name!s} er {path!s}, som ikke findes." #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "Konfigurer Plymouth-tema" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Forarbejder pakker (%(count)d / %(total)d)" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "Installér pakker." #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Installerer én pakke." msgstr[1] "Installerer %(num)d pakker." #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Fjerner én pakke." msgstr[1] "Fjerner %(num)d pakker." #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "Installér bootloader." #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "Fjern livebruger fra mÃ¥lsystemet" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "Indstiller hardwareur." #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "Opretter initramfs med dracut." #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "Kunne ikke køre dracut pÃ¥ mÃ¥let" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "Afslutningskoden var {}" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "Konfigurerer initramfs." #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "Konfigurerer OpenRC dmcrypt-tjeneste." #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "Skriver fstab." #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "Dummy python-job." #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "Dummy python-trin {}" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "Konfigurerer lokaliteter." #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "Gemmer netværkskonfiguration." calamares-3.2.20/lang/python/de/000077500000000000000000000000001362604102500163575ustar00rootroot00000000000000calamares-3.2.20/lang/python/de/LC_MESSAGES/000077500000000000000000000000001362604102500201445ustar00rootroot00000000000000calamares-3.2.20/lang/python/de/LC_MESSAGES/python.mo000066400000000000000000000176361362604102500220370ustar00rootroot00000000000000Þ•FLa|JJL"—º3Õ 4"4W3Œ/Àð8#?$c'ˆ$°Õéù , #G k ‡ ž ³ Ë ,ë  * R? "’ µ Ñ é ý  4 #U $y 'ž Æ Û ;ù !5 5W 8 +Æ #ò 0 $G l Š ¢ Á <ß \y-ŽO¼M )ZX„`Ý>TDc;¨ ähTnTÃ2!KAm,¯EÜE"ChE¬'ò@4[58Æ5ÿ5J^z–+³3ß+Ic8‚»Ìnä.S'‚ªÇßô1,9-f0”Å3Ý?+QF}QÄ))@+j-– Äå%&(0Oh€é6þT5TŠ)ßR f\ÃÜLì<9'vC>5B4<F 8 6?!&-'. A;*D$ 192 #@,7(3" :0+/E%)=rc-update {arg!s} call in chroot returned error code {num!s}.systemctl {arg!s} call in chroot returned error code {num!s}.Bad mount point for root partitionBad unsquash configurationCannot add service {name!s} to run-level {level!s}.Cannot configure LightDMCannot disable systemd target {name!s}.Cannot enable systemd service {name!s}.Cannot enable systemd target {name!s}.Cannot mask systemd unit {name!s}.Cannot modify serviceCannot remove service {name!s} from run-level {level!s}.Cannot write KDM configuration fileCannot write LXDM configuration fileCannot write LightDM configuration fileCannot write SLIM configuration fileConfiguration ErrorConfigure GRUB.Configure OpenRC servicesConfigure Plymouth themeConfigure systemd servicesConfiguring OpenRC dmcrypt service.Configuring encrypted swap.Configuring initramfs.Configuring locales.Configuring mkinitcpio.Creating initramfs with dracut.Display manager configuration was incompleteDummy python job.Dummy python step {}Failed to find unsquashfs, make sure you have the squashfs-tools package installedFailed to run dracut on the targetFailed to unpack image "{}"Filling up filesystems.Install bootloader.Install packages.Installing data.Installing one package.Installing %(num)d packages.KDM config file {!s} does not existLXDM config file {!s} does not existLightDM config file {!s} does not existMounting partitions.No LightDM greeter installed.No display managers selected for the displaymanager module.No mount point for root partitionNo partitions are defined for
{!s}
to use.No root mount point is given for
{!s}
to use.Processing packages (%(count)d / %(total)d)Remove live user from target systemRemoving one package.Removing %(num)d packages.SLIM config file {!s} does not existSaving network configuration.Setting hardware clock.Target runlevel does not existTarget service does not existThe destination "{}" in the target system is not a directoryThe displaymanagers list is empty or undefined in bothglobalstorage and displaymanager.conf.The exit code was {}The filesystem for "{}" ({}) is not supportedThe path for runlevel {level!s} is {path!s}, which does not exist.The path for service {name!s} is {path!s}, which does not exist.The source filesystem "{}" does not existUnknown service-action {arg!s} for service {name!s} in run-level {level!s}.Unknown systemd commands {command!s} and {suffix!s} for unit {name!s}.Unmount file systems.Writing fstab.globalstorage does not contain a "rootMountPoint" key, doing nothingrootMountPoint is "{}", which does not exist, doing nothingrsync failed with error code {}.Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Last-Translator: Christian Spaan, 2020 Language-Team: German (https://www.transifex.com/calamares/teams/20061/de/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: de Plural-Forms: nplurals=2; plural=(n != 1); rc-update {arg!s} Aufruf in chroot lieferte Fehlercode {num!s} zurück.systemctl {arg!s} Aufruf in chroot lieferte Fehlercode {num!s} zurück.Ungültiger Einhängepunkt für die Root-PartitionUngültige unsquash-KonfigurationKann den Dienst {name!s} nicht zu Runlevel {level!s} hinzufügen.Konfiguration von LightDM ist nicht möglichDas systemd-Ziel {name!s} kann nicht deaktiviert werden.Der systemd-Dienst {name!s} kann nicht aktiviert werden.Das systemd-Ziel {name!s} kann nicht aktiviert werden.Die systemd-Einheit {name!s} kann nicht maskiert werden.Der Dienst kann nicht geändert werden.Kann den Dienst {name!s} nicht aus Runlevel {level!s} entfernen.Schreiben der KDM-Konfigurationsdatei nicht möglichSchreiben der LXDM-Konfigurationsdatei nicht möglichSchreiben der LightDM-Konfigurationsdatei nicht möglichSchreiben der SLIM-Konfigurationsdatei nicht möglichKonfigurationsfehlerGRUB konfigurieren.Konfiguriere OpenRC-DiensteKonfiguriere Plymouth-ThemaKonfiguriere systemd-DiensteKonfiguriere den dmcrypt-Dienst von OpenRC.Konfiguriere verschlüsselten Auslagerungsspeicher.Konfiguriere initramfs.Konfiguriere Lokalisierungen.Konfiguriere mkinitcpio. Erstelle initramfs mit dracut.Die Konfiguration des Displaymanager war unvollständig.Dummy Python-JobDummy Python-Schritt {}Konnte unsquashfs nicht finden, stellen Sie sicher, dass Sie das Paket namens squashfs-tools installiert habenAusführen von dracut auf dem Ziel schlug fehlEntpacken des Image "{}" fehlgeschlagenBefüllen von Dateisystemen.Installiere Bootloader.Pakete installieren Installiere Daten.Installiere ein PaketInstalliere %(num)d Pakete.KDM-Konfigurationsdatei {!s} existiert nichtLXDM-Konfigurationsdatei {!s} existiert nichtLightDM-Konfigurationsdatei {!s} existiert nichtHänge Partitionen ein.Keine Benutzeroberfläche für LightDM installiert.Keine Displaymanager für das Displaymanager-Modul ausgewählt.Kein Einhängepunkt für die Root-PartitionFür
{!s}
sind keine zu verwendenden Partitionen definiert.Für
{!s}
wurde kein Einhängepunkt für die Root-Partition angegeben.Verarbeite Pakete (%(count)d / %(total)d)Entferne Live-Benutzer aus dem ZielsystemEntferne ein PaketEntferne %(num)d Pakete.SLIM-Konfigurationsdatei {!s} existiert nichtSpeichere Netzwerkkonfiguration.Einstellen der Hardware-Uhr.Vorgesehenes Runlevel existiert nichtDer vorgesehene Dienst existiert nichtDas Ziel "{}" im Zielsystem ist kein VerzeichnisDie Liste der Displaymanager ist leer oder weder in globalstorage noch in displaymanager.conf definiert.Der Exit-Code war {}Das Dateisystem für "{}" ({}) wird nicht unterstütztDer Pfad für Runlevel {level!s} ist {path!s}, welcher nicht existiert.Der Pfad für den Dienst {name!s} is {path!s}, welcher nicht existiert.Das Quelldateisystem "{}" existiert nichtUnbekannte Aktion {arg!s} für Dienst {name!s} in Runlevel {level!s}.Unbekannte systemd-Befehle {command!s} und {suffix!s} für Einheit {name!s}.Dateisysteme aushängen.Schreibe fstab.globalstorage enthält keinen Schlüssel namens "rootMountPoint", tue nichtsrootMountPoint ist "{}", welcher nicht existiert, tue nichtsrsync fehlgeschlagen mit Fehlercode {}.calamares-3.2.20/lang/python/de/LC_MESSAGES/python.po000066400000000000000000000300241362604102500220240ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Adriaan de Groot , 2019 # Andreas Eitel , 2019 # Christian Spaan, 2020 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Christian Spaan, 2020\n" "Language-Team: German (https://www.transifex.com/calamares/teams/20061/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "GRUB konfigurieren." #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "Hänge Partitionen ein." #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "Konfigurationsfehler" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "Für
{!s}
sind keine zu verwendenden Partitionen definiert." #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "Konfiguriere systemd-Dienste" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "Der Dienst kann nicht geändert werden." #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" "systemctl {arg!s} Aufruf in chroot lieferte Fehlercode {num!s} " "zurück." #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "Der systemd-Dienst {name!s} kann nicht aktiviert werden." #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "Das systemd-Ziel {name!s} kann nicht aktiviert werden." #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "Das systemd-Ziel {name!s} kann nicht deaktiviert werden." #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "Die systemd-Einheit {name!s} kann nicht maskiert werden." #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "Unbekannte systemd-Befehle {command!s} und " "{suffix!s} für Einheit {name!s}." #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "Dateisysteme aushängen." #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "Befüllen von Dateisystemen." #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "rsync fehlgeschlagen mit Fehlercode {}." #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "Entpacken des Image \"{}\" fehlgeschlagen" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "Konnte unsquashfs nicht finden, stellen Sie sicher, dass Sie das Paket " "namens squashfs-tools installiert haben" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "Kein Einhängepunkt für die Root-Partition" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" "globalstorage enthält keinen Schlüssel namens \"rootMountPoint\", tue nichts" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "Ungültiger Einhängepunkt für die Root-Partition" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "rootMountPoint ist \"{}\", welcher nicht existiert, tue nichts" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "Ungültige unsquash-Konfiguration" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "Das Dateisystem für \"{}\" ({}) wird nicht unterstützt" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "Das Quelldateisystem \"{}\" existiert nicht" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "Das Ziel \"{}\" im Zielsystem ist kein Verzeichnis" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "Schreiben der KDM-Konfigurationsdatei nicht möglich" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "KDM-Konfigurationsdatei {!s} existiert nicht" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "Schreiben der LXDM-Konfigurationsdatei nicht möglich" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "LXDM-Konfigurationsdatei {!s} existiert nicht" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "Schreiben der LightDM-Konfigurationsdatei nicht möglich" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "LightDM-Konfigurationsdatei {!s} existiert nicht" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "Konfiguration von LightDM ist nicht möglich" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "Keine Benutzeroberfläche für LightDM installiert." #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "Schreiben der SLIM-Konfigurationsdatei nicht möglich" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "SLIM-Konfigurationsdatei {!s} existiert nicht" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "Keine Displaymanager für das Displaymanager-Modul ausgewählt." #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" "Die Liste der Displaymanager ist leer oder weder in globalstorage noch in " "displaymanager.conf definiert." #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "Die Konfiguration des Displaymanager war unvollständig." #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "Konfiguriere mkinitcpio. " #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" "Für
{!s}
wurde kein Einhängepunkt für die Root-Partition " "angegeben." #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "Konfiguriere verschlüsselten Auslagerungsspeicher." #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "Installiere Daten." #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "Konfiguriere OpenRC-Dienste" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "Kann den Dienst {name!s} nicht zu Runlevel {level!s} hinzufügen." #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "Kann den Dienst {name!s} nicht aus Runlevel {level!s} entfernen." #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" "Unbekannte Aktion {arg!s} für Dienst {name!s} in Runlevel " "{level!s}." #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" "rc-update {arg!s} Aufruf in chroot lieferte Fehlercode {num!s} " "zurück." #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "Vorgesehenes Runlevel existiert nicht" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" "Der Pfad für Runlevel {level!s} ist {path!s}, welcher nicht " "existiert." #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "Der vorgesehene Dienst existiert nicht" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" "Der Pfad für den Dienst {name!s} is {path!s}, welcher nicht " "existiert." #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "Konfiguriere Plymouth-Thema" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Verarbeite Pakete (%(count)d / %(total)d)" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "Pakete installieren " #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Installiere ein Paket" msgstr[1] "Installiere %(num)d Pakete." #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Entferne ein Paket" msgstr[1] "Entferne %(num)d Pakete." #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "Installiere Bootloader." #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "Entferne Live-Benutzer aus dem Zielsystem" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "Einstellen der Hardware-Uhr." #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "Erstelle initramfs mit dracut." #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "Ausführen von dracut auf dem Ziel schlug fehl" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "Der Exit-Code war {}" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "Konfiguriere initramfs." #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "Konfiguriere den dmcrypt-Dienst von OpenRC." #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "Schreibe fstab." #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "Dummy Python-Job" #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "Dummy Python-Schritt {}" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "Konfiguriere Lokalisierungen." #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "Speichere Netzwerkkonfiguration." calamares-3.2.20/lang/python/el/000077500000000000000000000000001362604102500163675ustar00rootroot00000000000000calamares-3.2.20/lang/python/el/LC_MESSAGES/000077500000000000000000000000001362604102500201545ustar00rootroot00000000000000calamares-3.2.20/lang/python/el/LC_MESSAGES/python.mo000066400000000000000000000010171362604102500220310ustar00rootroot00000000000000Þ•,<PQ„c&èInstall packages.Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Last-Translator: Efstathios Iosifidis , 2017 Language-Team: Greek (https://www.transifex.com/calamares/teams/20061/el/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: el Plural-Forms: nplurals=2; plural=(n != 1); εγκατάσταση πακέτων.calamares-3.2.20/lang/python/el/LC_MESSAGES/python.po000066400000000000000000000213531362604102500220410ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Efstathios Iosifidis , 2017 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Efstathios Iosifidis , 2017\n" "Language-Team: Greek (https://www.transifex.com/calamares/teams/20061/el/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: el\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "" #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "εγκατάσταση πακέτων." #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "" #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "" #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "" #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "" calamares-3.2.20/lang/python/en_GB/000077500000000000000000000000001362604102500167415ustar00rootroot00000000000000calamares-3.2.20/lang/python/en_GB/LC_MESSAGES/000077500000000000000000000000001362604102500205265ustar00rootroot00000000000000calamares-3.2.20/lang/python/en_GB/LC_MESSAGES/python.mo000066400000000000000000000020511362604102500224020ustar00rootroot00000000000000Þ•\ œÈÉÛð4+70c”ªHZo4+¶0âDummy python job.Dummy python step {}Install packages.Installing one package.Installing %(num)d packages.Processing packages (%(count)d / %(total)d)Removing one package.Removing %(num)d packages.Unmount file systems.Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Last-Translator: Jason Collins , 2018 Language-Team: English (United Kingdom) (https://www.transifex.com/calamares/teams/20061/en_GB/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: en_GB Plural-Forms: nplurals=2; plural=(n != 1); Dummy python job.Dummy python step {}Install packages.Installing one package.Installing %(num)d packages.Processing packages (%(count)d / %(total)d)Removing one package.Removing %(num)d packages.Unmount file systems.calamares-3.2.20/lang/python/en_GB/LC_MESSAGES/python.po000066400000000000000000000216661362604102500224220ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Jason Collins , 2018 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Jason Collins , 2018\n" "Language-Team: English (United Kingdom) (https://www.transifex.com/calamares/teams/20061/en_GB/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: en_GB\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "Unmount file systems." #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "" #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Processing packages (%(count)d / %(total)d)" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "Install packages." #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Installing one package." msgstr[1] "Installing %(num)d packages." #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Removing one package." msgstr[1] "Removing %(num)d packages." #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "" #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "" #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "" #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "Dummy python job." #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "Dummy python step {}" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "" calamares-3.2.20/lang/python/eo/000077500000000000000000000000001362604102500163725ustar00rootroot00000000000000calamares-3.2.20/lang/python/eo/LC_MESSAGES/000077500000000000000000000000001362604102500201575ustar00rootroot00000000000000calamares-3.2.20/lang/python/eo/LC_MESSAGES/python.mo000066400000000000000000000020371362604102500220370ustar00rootroot00000000000000Þ•\ œÈÉÛð4+70c”ƒª.E]4o-¤2ÒDummy python job.Dummy python step {}Install packages.Installing one package.Installing %(num)d packages.Processing packages (%(count)d / %(total)d)Removing one package.Removing %(num)d packages.Unmount file systems.Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Last-Translator: Kurt Ankh Phoenix , 2018 Language-Team: Esperanto (https://www.transifex.com/calamares/teams/20061/eo/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: eo Plural-Forms: nplurals=2; plural=(n != 1); Formala python laboro.Formala python paÅo {}Instali pakaĵoj.Instalante unu pakaĵo.Instalante %(num)d pakaĵoj.Prilaborante pakaĵoj (%(count)d / %(total)d)Forigante unu pakaĵo.Forigante %(num)d pakaĵoj.Demeti dosieraj sistemoj.calamares-3.2.20/lang/python/eo/LC_MESSAGES/python.po000066400000000000000000000216471362604102500220520ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Kurt Ankh Phoenix , 2018 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Kurt Ankh Phoenix , 2018\n" "Language-Team: Esperanto (https://www.transifex.com/calamares/teams/20061/eo/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: eo\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "Demeti dosieraj sistemoj." #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "" #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Prilaborante pakaĵoj (%(count)d / %(total)d)" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "Instali pakaĵoj." #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Instalante unu pakaĵo." msgstr[1] "Instalante %(num)d pakaĵoj." #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Forigante unu pakaĵo." msgstr[1] "Forigante %(num)d pakaĵoj." #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "" #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "" #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "" #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "Formala python laboro." #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "Formala python paÅo {}" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "" calamares-3.2.20/lang/python/es/000077500000000000000000000000001362604102500163765ustar00rootroot00000000000000calamares-3.2.20/lang/python/es/LC_MESSAGES/000077500000000000000000000000001362604102500201635ustar00rootroot00000000000000calamares-3.2.20/lang/python/es/LC_MESSAGES/python.mo000066400000000000000000000210541362604102500220430ustar00rootroot00000000000000Þ•FLa|JJL"—º3Õ 4"4W3Œ/Àð8#?$c'ˆ$°Õéù , #G k ‡ ž ³ Ë ,ë  * R? "’ µ Ñ é ý  4 #U $y 'ž Æ Û ;ù !5 5W 8 +Æ #ò 0 $G l Š ¢ Á <ß \y-ŽO¼M )ZX„`Ý>TDc;¨ äz€\6]'”O¼ D+BpB³Bö!9V[5²6è<9\–1®0à4FEf;¬-è38JHƒ:Ì!X<E•)Û$*GZ3l2 2Ó6=1RN„IÓ1JO+š/Æ3ö3*$^(ƒ)¬Ö9õ“/Ã8ßJOc0³‰äsn â )!s,!D !Få!C>5B4<F 8 6?!&-'. A;*D$ 192 #@,7(3" :0+/E%)=rc-update {arg!s} call in chroot returned error code {num!s}.systemctl {arg!s} call in chroot returned error code {num!s}.Bad mount point for root partitionBad unsquash configurationCannot add service {name!s} to run-level {level!s}.Cannot configure LightDMCannot disable systemd target {name!s}.Cannot enable systemd service {name!s}.Cannot enable systemd target {name!s}.Cannot mask systemd unit {name!s}.Cannot modify serviceCannot remove service {name!s} from run-level {level!s}.Cannot write KDM configuration fileCannot write LXDM configuration fileCannot write LightDM configuration fileCannot write SLIM configuration fileConfiguration ErrorConfigure GRUB.Configure OpenRC servicesConfigure Plymouth themeConfigure systemd servicesConfiguring OpenRC dmcrypt service.Configuring encrypted swap.Configuring initramfs.Configuring locales.Configuring mkinitcpio.Creating initramfs with dracut.Display manager configuration was incompleteDummy python job.Dummy python step {}Failed to find unsquashfs, make sure you have the squashfs-tools package installedFailed to run dracut on the targetFailed to unpack image "{}"Filling up filesystems.Install bootloader.Install packages.Installing data.Installing one package.Installing %(num)d packages.KDM config file {!s} does not existLXDM config file {!s} does not existLightDM config file {!s} does not existMounting partitions.No LightDM greeter installed.No display managers selected for the displaymanager module.No mount point for root partitionNo partitions are defined for
{!s}
to use.No root mount point is given for
{!s}
to use.Processing packages (%(count)d / %(total)d)Remove live user from target systemRemoving one package.Removing %(num)d packages.SLIM config file {!s} does not existSaving network configuration.Setting hardware clock.Target runlevel does not existTarget service does not existThe destination "{}" in the target system is not a directoryThe displaymanagers list is empty or undefined in bothglobalstorage and displaymanager.conf.The exit code was {}The filesystem for "{}" ({}) is not supportedThe path for runlevel {level!s} is {path!s}, which does not exist.The path for service {name!s} is {path!s}, which does not exist.The source filesystem "{}" does not existUnknown service-action {arg!s} for service {name!s} in run-level {level!s}.Unknown systemd commands {command!s} and {suffix!s} for unit {name!s}.Unmount file systems.Writing fstab.globalstorage does not contain a "rootMountPoint" key, doing nothingrootMountPoint is "{}", which does not exist, doing nothingrsync failed with error code {}.Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Last-Translator: Miguel Mayol , 2020 Language-Team: Spanish (https://www.transifex.com/calamares/teams/20061/es/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: es Plural-Forms: nplurals=2; plural=(n != 1); rc-update {arg!s} - orden de actualización - en chroot - raíz cambiada - devolvió el código de error {num!s}.La orden systemctl {arg!s} en chroot devolvió el código de error {num!s}.Punto de montaje no válido para una partición raíz,Configuración de "unsquash" no válidaNo se puede/n añadir {name!s} de servicio/s al rango de ejecución {level!s}.No se puede configurar LightDMNo se puede desactivar el objetivo de systemd {name!s}.No se puede activar el servicio de systemd {name!s}.No se puede activar el objetivo de systemd {name!s}.No se puede enmascarar la unidad de systemd {name!s}.No se puede modificar el servicioNo se puede/n borrar el/los servicio/s {name!s} de los rangos de ejecución {level!s}.No se puede escribir el archivo de configuración KDMNo se puede escribir el archivo de configuración LXDMNo se puede escribir el archivo de configuración de LightDMNo se puede escribir el archivo de configuración de SLIMError de configuraciónConfigure GRUB - menú de arranque multisistema -Configure servicios del sistema de inicio OpenRCConfigure el tema de Plymouth - menú de bienvenida.Configurar servicios de systemdConfigurando el servicio - de arranque encriptado -. OpenRC dmcryptConfigurando la memoria de intercambio - swap - encriptada.Configurando initramfs - sistema de inicio -.Configurando especificaciones locales o regionales.Configurando mkinitcpio - sistema de arranque básico -.Creando initramfs - sistema de arranque - con dracut - su constructor -.La configuración del gestor de pantalla estaba incompletaTarea de python ficticia.Paso {} de python ficticioNo se encontró unsquashfs; cerciórese de que tenga instalado el paquete squashfs-toolsFalló en ejecutar dracut - constructor de arranques - en el objetivoNo se pudo desempaquetar la imagen «{}»Rellenando los sistemas de archivos.Instalar gestor de arranque.Instalar paquetes.Instalando datos.Instalando un paquete.Instalando %(num)d paquetes.El archivo de configuración {!s} de KDM no existeEl archivo de configuracion {!s} de LXDM no existeEl archivo de configuración {!s} de LightDM no existeMontando particionesNo está instalado el menú de bienvenida LightDMNo se ha seleccionado ningún gestor de pantalla para el modulo displaymanagerNo especificó un punto de montaje para la partición raíz - / o root -No hay definidas particiones en 1{!s}1 para usar.No se facilitó un punto de montaje raíz utilizable para
{!s}
Procesando paquetes (%(count)d / %(total)d)Borre el usuario "en vivo" del sistema objetivoEliminando un paquete.Eliminando %(num)d paquetes.El archivo de configuración {!s} de SLIM no existeGuardando la configuración de red.Configurando el reloj de la computadora.El rango de ejecución objetivo no existeEl servicio objetivo no existeEl destino "{}" en el sistema escogido no es una carpetaLa lista de gestores de ventanas está vacía o no definida en ambos, el almacenamiento y el archivo de su configuración - displaymanager.conf -El código de salida fue {}El sistema de archivos para "{}" ({}) no está incluido.La ruta hacia el rango de ejecución {level!s} es 1{path!s}1, y no existe.La ruta hacia el/los servicio/s {name!s} es {path!s}, y no existe.El sistema de archivos de origen "{}" no existeAcción desconocida d/e el/los servicio/s {arg!s} para el/los servicio/s {name!s} en el/los rango/s de ejecución {level!s}.Órdenes desconocidas de systemd {command!s} y {suffix!s} para la/s unidad /es {name!s}.Desmontar sistemas de archivos.Escribiendo la tabla de particiones fstabNo se hace nada porque el almacenamiento no contiene una clave de "rootMountPoint" punto de montaje para la raíz.Como el punto de montaje raíz es "{}", y no existe, no se hace nadaFalló la sincronización mediante rsync con el código de error {}.calamares-3.2.20/lang/python/es/LC_MESSAGES/python.po000066400000000000000000000314161362604102500220510ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # strel, 2017 # Francisco Sánchez López de Lerma , 2018 # Guido Grasso , 2018 # Adolfo Jayme-Barrientos, 2019 # Miguel Mayol , 2020 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Miguel Mayol , 2020\n" "Language-Team: Spanish (https://www.transifex.com/calamares/teams/20061/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "Configure GRUB - menú de arranque multisistema -" #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "Montando particiones" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "Error de configuración" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "No hay definidas particiones en 1{!s}1 para usar." #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "Configurar servicios de systemd" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "No se puede modificar el servicio" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" "La orden systemctl {arg!s} en chroot devolvió el código de " "error {num!s}." #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "No se puede activar el servicio de systemd {name!s}." #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "No se puede activar el objetivo de systemd {name!s}." #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "No se puede desactivar el objetivo de systemd {name!s}." #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "No se puede enmascarar la unidad de systemd {name!s}." #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "Órdenes desconocidas de systemd {command!s} y " "{suffix!s} para la/s unidad /es {name!s}." #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "Desmontar sistemas de archivos." #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "Rellenando los sistemas de archivos." #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "Falló la sincronización mediante rsync con el código de error {}." #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "No se pudo desempaquetar la imagen «{}»" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "No se encontró unsquashfs; cerciórese de que tenga instalado el paquete " "squashfs-tools" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "" "No especificó un punto de montaje para la partición raíz - / o root -" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" "No se hace nada porque el almacenamiento no contiene una clave de " "\"rootMountPoint\" punto de montaje para la raíz." #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "Punto de montaje no válido para una partición raíz," #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "Como el punto de montaje raíz es \"{}\", y no existe, no se hace nada" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "Configuración de \"unsquash\" no válida" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "El sistema de archivos para \"{}\" ({}) no está incluido." #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "El sistema de archivos de origen \"{}\" no existe" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "El destino \"{}\" en el sistema escogido no es una carpeta" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "No se puede escribir el archivo de configuración KDM" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "El archivo de configuración {!s} de KDM no existe" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "No se puede escribir el archivo de configuración LXDM" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "El archivo de configuracion {!s} de LXDM no existe" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "No se puede escribir el archivo de configuración de LightDM" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "El archivo de configuración {!s} de LightDM no existe" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "No se puede configurar LightDM" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "No está instalado el menú de bienvenida LightDM" #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "No se puede escribir el archivo de configuración de SLIM" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "El archivo de configuración {!s} de SLIM no existe" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "" "No se ha seleccionado ningún gestor de pantalla para el modulo " "displaymanager" #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" "La lista de gestores de ventanas está vacía o no definida en ambos, el " "almacenamiento y el archivo de su configuración - displaymanager.conf -" #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "La configuración del gestor de pantalla estaba incompleta" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "Configurando mkinitcpio - sistema de arranque básico -." #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" "No se facilitó un punto de montaje raíz utilizable para
{!s}
" #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "Configurando la memoria de intercambio - swap - encriptada." #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "Instalando datos." #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "Configure servicios del sistema de inicio OpenRC" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" "No se puede/n añadir {name!s} de servicio/s al rango de ejecución " "{level!s}." #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" "No se puede/n borrar el/los servicio/s {name!s} de los rangos de ejecución " "{level!s}." #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" "Acción desconocida d/e el/los servicio/s {arg!s} para el/los " "servicio/s {name!s} en el/los rango/s de ejecución {level!s}." #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" "rc-update {arg!s} - orden de actualización - en chroot - raíz " "cambiada - devolvió el código de error {num!s}." #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "El rango de ejecución objetivo no existe" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" "La ruta hacia el rango de ejecución {level!s} es 1{path!s}1, y no existe." #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "El servicio objetivo no existe" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" "La ruta hacia el/los servicio/s {name!s} es {path!s}, y no " "existe." #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "Configure el tema de Plymouth - menú de bienvenida." #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Procesando paquetes (%(count)d / %(total)d)" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "Instalar paquetes." #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Instalando un paquete." msgstr[1] "Instalando %(num)d paquetes." #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Eliminando un paquete." msgstr[1] "Eliminando %(num)d paquetes." #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "Instalar gestor de arranque." #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "Borre el usuario \"en vivo\" del sistema objetivo" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "Configurando el reloj de la computadora." #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "" "Creando initramfs - sistema de arranque - con dracut - su constructor -." #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "Falló en ejecutar dracut - constructor de arranques - en el objetivo" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "El código de salida fue {}" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "Configurando initramfs - sistema de inicio -." #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "Configurando el servicio - de arranque encriptado -. OpenRC dmcrypt" #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "Escribiendo la tabla de particiones fstab" #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "Tarea de python ficticia." #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "Paso {} de python ficticio" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "Configurando especificaciones locales o regionales." #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "Guardando la configuración de red." calamares-3.2.20/lang/python/es_MX/000077500000000000000000000000001362604102500170025ustar00rootroot00000000000000calamares-3.2.20/lang/python/es_MX/LC_MESSAGES/000077500000000000000000000000001362604102500205675ustar00rootroot00000000000000calamares-3.2.20/lang/python/es_MX/LC_MESSAGES/python.mo000066400000000000000000000036371362604102500224560ustar00rootroot00000000000000Þ•œxy#’$¶'Û$(:O4a#–$º'ß+03dŠz8$9]<—9Ô'?2R2…3¸6ì)#2M€   Cannot configure LightDMCannot write KDM configuration fileCannot write LXDM configuration fileCannot write LightDM configuration fileCannot write SLIM configuration fileDummy python job.Dummy python step {}Install packages.Installing one package.Installing %(num)d packages.KDM config file {!s} does not existLXDM config file {!s} does not existLightDM config file {!s} does not existProcessing packages (%(count)d / %(total)d)Removing one package.Removing %(num)d packages.Unmount file systems.Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Last-Translator: Logan 8192 , 2018 Language-Team: Spanish (Mexico) (https://www.transifex.com/calamares/teams/20061/es_MX/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: es_MX Plural-Forms: nplurals=2; plural=(n != 1); No se puede configurar LightDMNo se puede escribir el archivo de configuración de KDMNo se puede escribir el archivo de configuración de LXDMNo se puede escribir el archivo de configuración de LightDMNo se puede escribir el archivo de configuración de SLIMTrabajo python ficticio.Paso python ficticio {}Instalar paquetes.Instalando un paquete.Instalando%(num)d paquetes.El archivo de configuración de KDM {!s} no existeEl archivo de configuración de LXDM {!s} no existeEl archivo de configuración de LightDM {!s} no existeProcesando paquetes (%(count)d/%(total)d)Removiendo un paquete.Removiendo %(num)dpaquetes.Desmontar sistemas de archivo.calamares-3.2.20/lang/python/es_MX/LC_MESSAGES/python.po000066400000000000000000000225751362604102500224630ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # guillermo pacheco , 2018 # Logan 8192 , 2018 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Logan 8192 , 2018\n" "Language-Team: Spanish (Mexico) (https://www.transifex.com/calamares/teams/20061/es_MX/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: es_MX\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "Desmontar sistemas de archivo." #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "No se puede escribir el archivo de configuración de KDM" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "El archivo de configuración de KDM {!s} no existe" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "No se puede escribir el archivo de configuración de LXDM" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "El archivo de configuración de LXDM {!s} no existe" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "No se puede escribir el archivo de configuración de LightDM" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "El archivo de configuración de LightDM {!s} no existe" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "No se puede configurar LightDM" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "No se puede escribir el archivo de configuración de SLIM" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "" #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Procesando paquetes (%(count)d/%(total)d)" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "Instalar paquetes." #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Instalando un paquete." msgstr[1] "Instalando%(num)d paquetes." #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Removiendo un paquete." msgstr[1] "Removiendo %(num)dpaquetes." #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "" #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "" #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "" #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "Trabajo python ficticio." #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "Paso python ficticio {}" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "" calamares-3.2.20/lang/python/es_PR/000077500000000000000000000000001362604102500167775ustar00rootroot00000000000000calamares-3.2.20/lang/python/es_PR/LC_MESSAGES/000077500000000000000000000000001362604102500205645ustar00rootroot00000000000000calamares-3.2.20/lang/python/es_PR/LC_MESSAGES/python.mo000066400000000000000000000006201362604102500224400ustar00rootroot00000000000000Þ•$,8V9Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Language-Team: Spanish (Puerto Rico) (https://www.transifex.com/calamares/teams/20061/es_PR/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: es_PR Plural-Forms: nplurals=2; plural=(n != 1); calamares-3.2.20/lang/python/es_PR/LC_MESSAGES/python.po000066400000000000000000000211141362604102500224440ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Spanish (Puerto Rico) (https://www.transifex.com/calamares/teams/20061/es_PR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: es_PR\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "" #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "" #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "" #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "" #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "" calamares-3.2.20/lang/python/et/000077500000000000000000000000001362604102500163775ustar00rootroot00000000000000calamares-3.2.20/lang/python/et/LC_MESSAGES/000077500000000000000000000000001362604102500201645ustar00rootroot00000000000000calamares-3.2.20/lang/python/et/LC_MESSAGES/python.mo000066400000000000000000000035631362604102500220510ustar00rootroot00000000000000Þ•¤,ˆ‰#¢$Æ'ë$8J_4q#¦$Ê'ï+0C$t™h¯!*:+e.‘+Àì1-$_%„(ª,Ó/%0V   Cannot configure LightDMCannot write KDM configuration fileCannot write LXDM configuration fileCannot write LightDM configuration fileCannot write SLIM configuration fileDummy python job.Dummy python step {}Install packages.Installing one package.Installing %(num)d packages.KDM config file {!s} does not existLXDM config file {!s} does not existLightDM config file {!s} does not existProcessing packages (%(count)d / %(total)d)Removing one package.Removing %(num)d packages.SLIM config file {!s} does not existUnmount file systems.Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Last-Translator: Madis Otenurm, 2019 Language-Team: Estonian (https://www.transifex.com/calamares/teams/20061/et/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: et Plural-Forms: nplurals=2; plural=(n != 1); LightDM seadistamine ebaõnnestusKDM-konfiguratsioonifaili ei saa kirjutadaLXDM-konfiguratsioonifaili ei saa kirjutadaLightDM-konfiguratsioonifaili ei saa kirjutadaSLIM-konfiguratsioonifaili ei saa kirjutadaTestiv python'i töö.Testiv python'i aste {}Paigalda paketid.Paigaldan ühe paketi.Paigaldan %(num)d paketti.KDM-konfiguratsioonifail {!s} puudubLXDM-konfiguratsioonifail {!s} puudubLightDM-konfiguratsioonifail {!s} puudubPakkide töötlemine (%(count)d / %(total)d)Eemaldan ühe paketi.Eemaldan %(num)d paketti.SLIM-konfiguratsioonifail {!s} puudubHaagi failisüsteemid lahti.calamares-3.2.20/lang/python/et/LC_MESSAGES/python.po000066400000000000000000000223231362604102500220470ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Madis Otenurm, 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Madis Otenurm, 2019\n" "Language-Team: Estonian (https://www.transifex.com/calamares/teams/20061/et/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: et\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "Haagi failisüsteemid lahti." #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "KDM-konfiguratsioonifaili ei saa kirjutada" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "KDM-konfiguratsioonifail {!s} puudub" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "LXDM-konfiguratsioonifaili ei saa kirjutada" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "LXDM-konfiguratsioonifail {!s} puudub" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "LightDM-konfiguratsioonifaili ei saa kirjutada" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "LightDM-konfiguratsioonifail {!s} puudub" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "LightDM seadistamine ebaõnnestus" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "SLIM-konfiguratsioonifaili ei saa kirjutada" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "SLIM-konfiguratsioonifail {!s} puudub" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "" #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Pakkide töötlemine (%(count)d / %(total)d)" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "Paigalda paketid." #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Paigaldan ühe paketi." msgstr[1] "Paigaldan %(num)d paketti." #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Eemaldan ühe paketi." msgstr[1] "Eemaldan %(num)d paketti." #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "" #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "" #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "" #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "Testiv python'i töö." #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "Testiv python'i aste {}" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "" calamares-3.2.20/lang/python/eu/000077500000000000000000000000001362604102500164005ustar00rootroot00000000000000calamares-3.2.20/lang/python/eu/LC_MESSAGES/000077500000000000000000000000001362604102500201655ustar00rootroot00000000000000calamares-3.2.20/lang/python/eu/LC_MESSAGES/python.mo000066400000000000000000000047261362604102500220540ustar00rootroot00000000000000Þ•Älàá#ú$'C$k,½Ïä4ö#+$O'tœ;º+ö0"$S\xÕhëT*p+›.Ç+ö-"Pc{2Ž1Á2ó5&#\G€,È*õ2 cS ·     Cannot configure LightDMCannot write KDM configuration fileCannot write LXDM configuration fileCannot write LightDM configuration fileCannot write SLIM configuration fileDisplay manager configuration was incompleteDummy python job.Dummy python step {}Install packages.Installing one package.Installing %(num)d packages.KDM config file {!s} does not existLXDM config file {!s} does not existLightDM config file {!s} does not existNo LightDM greeter installed.No display managers selected for the displaymanager module.Processing packages (%(count)d / %(total)d)Removing one package.Removing %(num)d packages.SLIM config file {!s} does not existThe displaymanagers list is empty or undefined in bothglobalstorage and displaymanager.conf.Unmount file systems.Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Last-Translator: Ander Elortondo, 2019 Language-Team: Basque (https://www.transifex.com/calamares/teams/20061/eu/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: eu Plural-Forms: nplurals=2; plural=(n != 1); Ezin da LightDM konfiguratuEzin da KDM konfigurazio fitxategia idatziEzin da LXDM konfigurazio fitxategia idatziEzin da LightDM konfigurazio fitxategia idatziEzin da SLIM konfigurazio fitxategia idatziPantaila kudeatzaile konfigurazioa osotu gabeDummy python lana.Dummy python urratsa {}Instalatu paketeakPakete bat instalatzen.%(num)dpakete instalatzen.KDM konfigurazio fitxategia {!s} ez da existitzenLXDM konfigurazio fitxategia {!s} ez da existitzenLightDM konfigurazio fitxategia {!s} ez da existitzenEz dago LightDM harrera instalatua.Ez da pantaila kudeatzailerik aukeratu pantaila-kudeatzaile modulurako.Paketeak prozesatzen (%(count)d/ %(total)d) Pakete bat kentzen.%(num)dpakete kentzen.SLIM konfigurazio fitxategia {!s} ez da existitzenPantaila-kudeatzaile-zerrenda hutsik dago edo definitzeke bothglobalstorage eta displaymanager.confFitxategi sistemak desmuntatu.calamares-3.2.20/lang/python/eu/LC_MESSAGES/python.po000066400000000000000000000230011362604102500220420ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Ander Elortondo, 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Ander Elortondo, 2019\n" "Language-Team: Basque (https://www.transifex.com/calamares/teams/20061/eu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: eu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "Fitxategi sistemak desmuntatu." #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "Ezin da KDM konfigurazio fitxategia idatzi" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "KDM konfigurazio fitxategia {!s} ez da existitzen" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "Ezin da LXDM konfigurazio fitxategia idatzi" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "LXDM konfigurazio fitxategia {!s} ez da existitzen" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "Ezin da LightDM konfigurazio fitxategia idatzi" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "LightDM konfigurazio fitxategia {!s} ez da existitzen" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "Ezin da LightDM konfiguratu" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "Ez dago LightDM harrera instalatua." #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "Ezin da SLIM konfigurazio fitxategia idatzi" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "SLIM konfigurazio fitxategia {!s} ez da existitzen" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "" "Ez da pantaila kudeatzailerik aukeratu pantaila-kudeatzaile modulurako." #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" "Pantaila-kudeatzaile-zerrenda hutsik dago edo definitzeke bothglobalstorage " "eta displaymanager.conf" #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "Pantaila kudeatzaile konfigurazioa osotu gabe" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "" #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Paketeak prozesatzen (%(count)d/ %(total)d) " #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "Instalatu paketeak" #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Pakete bat instalatzen." msgstr[1] "%(num)dpakete instalatzen." #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Pakete bat kentzen." msgstr[1] "%(num)dpakete kentzen." #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "" #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "" #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "" #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "Dummy python lana." #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "Dummy python urratsa {}" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "" calamares-3.2.20/lang/python/fa/000077500000000000000000000000001362604102500163555ustar00rootroot00000000000000calamares-3.2.20/lang/python/fa/LC_MESSAGES/000077500000000000000000000000001362604102500201425ustar00rootroot00000000000000calamares-3.2.20/lang/python/fa/LC_MESSAGES/python.mo000066400000000000000000000005731362604102500220250ustar00rootroot00000000000000Þ•$,8A9Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Language-Team: Persian (https://www.transifex.com/calamares/teams/20061/fa/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: fa Plural-Forms: nplurals=2; plural=(n > 1); calamares-3.2.20/lang/python/fa/LC_MESSAGES/python.po000066400000000000000000000210671362604102500220310ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Persian (https://www.transifex.com/calamares/teams/20061/fa/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fa\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "" #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "" #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "" #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "" #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "" calamares-3.2.20/lang/python/fi_FI/000077500000000000000000000000001362604102500167435ustar00rootroot00000000000000calamares-3.2.20/lang/python/fi_FI/LC_MESSAGES/000077500000000000000000000000001362604102500205305ustar00rootroot00000000000000calamares-3.2.20/lang/python/fi_FI/LC_MESSAGES/python.mo000066400000000000000000000172071362604102500224150ustar00rootroot00000000000000Þ•FLa|JJL"—º3Õ 4"4W3Œ/Àð8#?$c'ˆ$°Õéù , #G k ‡ ž ³ Ë ,ë  * R? "’ µ Ñ é ý  4 #U $y 'ž Æ Û ;ù !5 5W 8 +Æ #ò 0 $G l Š ¢ Á <ß \y-ŽO¼M )ZX„`Ý>TDc;¨ äG•DÝ "C@_ B¸:û:6:q¬7Ä)ü*&-Q*ªºËæ) Hi„¹.ØV8+"»$Þ(#<,`-0»ìüA"X<{O¸,.50d-•#Ãç&/;vkâ*ø?#Hc3¬[àd<*¡ÌGâ7*$bC>5B4<F 8 6?!&-'. A;*D$ 192 #@,7(3" :0+/E%)=rc-update {arg!s} call in chroot returned error code {num!s}.systemctl {arg!s} call in chroot returned error code {num!s}.Bad mount point for root partitionBad unsquash configurationCannot add service {name!s} to run-level {level!s}.Cannot configure LightDMCannot disable systemd target {name!s}.Cannot enable systemd service {name!s}.Cannot enable systemd target {name!s}.Cannot mask systemd unit {name!s}.Cannot modify serviceCannot remove service {name!s} from run-level {level!s}.Cannot write KDM configuration fileCannot write LXDM configuration fileCannot write LightDM configuration fileCannot write SLIM configuration fileConfiguration ErrorConfigure GRUB.Configure OpenRC servicesConfigure Plymouth themeConfigure systemd servicesConfiguring OpenRC dmcrypt service.Configuring encrypted swap.Configuring initramfs.Configuring locales.Configuring mkinitcpio.Creating initramfs with dracut.Display manager configuration was incompleteDummy python job.Dummy python step {}Failed to find unsquashfs, make sure you have the squashfs-tools package installedFailed to run dracut on the targetFailed to unpack image "{}"Filling up filesystems.Install bootloader.Install packages.Installing data.Installing one package.Installing %(num)d packages.KDM config file {!s} does not existLXDM config file {!s} does not existLightDM config file {!s} does not existMounting partitions.No LightDM greeter installed.No display managers selected for the displaymanager module.No mount point for root partitionNo partitions are defined for
{!s}
to use.No root mount point is given for
{!s}
to use.Processing packages (%(count)d / %(total)d)Remove live user from target systemRemoving one package.Removing %(num)d packages.SLIM config file {!s} does not existSaving network configuration.Setting hardware clock.Target runlevel does not existTarget service does not existThe destination "{}" in the target system is not a directoryThe displaymanagers list is empty or undefined in bothglobalstorage and displaymanager.conf.The exit code was {}The filesystem for "{}" ({}) is not supportedThe path for runlevel {level!s} is {path!s}, which does not exist.The path for service {name!s} is {path!s}, which does not exist.The source filesystem "{}" does not existUnknown service-action {arg!s} for service {name!s} in run-level {level!s}.Unknown systemd commands {command!s} and {suffix!s} for unit {name!s}.Unmount file systems.Writing fstab.globalstorage does not contain a "rootMountPoint" key, doing nothingrootMountPoint is "{}", which does not exist, doing nothingrsync failed with error code {}.Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Last-Translator: Kimmo Kujansuu , 2019 Language-Team: Finnish (Finland) (https://www.transifex.com/calamares/teams/20061/fi_FI/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: fi_FI Plural-Forms: nplurals=2; plural=(n != 1); rc-update {arg!s} palautti chrootissa virhekoodin {num!s}.systemctl {arg!s} chroot palautti virhe koodin {num!s}.Huono kiinnityspiste root-osioonHuono epäpuhdas kokoonpanoPalvelua {name!s} ei-voi lisätä suorituksen tasolle {level!s}.LightDM määritysvirheSystemd-kohdetta ei-voi poistaa käytöstä {name!s}.Systemd-palvelua ei saa käyttöön {name!s}.Systemd-kohdetta ei saa käyttöön {name!s}.Ei voi peittää systemd-yksikköä {name!s}.Palvelua ei voi muokataEi voi poistaa palvelua {name!s} ajo-tasolla {level!s}.KDM-määritystiedostoa ei voi kirjoittaaLXDM-määritystiedostoa ei voi kirjoittaaLightDM-määritystiedostoa ei voi kirjoittaaSLIM-määritystiedostoa ei voi kirjoittaaMääritysvirheMääritä GRUB.Määritä OpenRC-palvelutMääritä Plymouthin teemaMääritä systemd palvelutOpenRC dmcrypt-palvelun määrittäminen.Salatun swapin määrittäminen.Määritetään initramfs.Määritetään locales.Määritetään mkinitcpio.Initramfs luominen dracut:lla.Näytönhallinnan kokoonpano oli puutteellinenHarjoitus python-työ.Harjoitus python-vaihe {}Ei löytynyt unsquashfs, varmista, että sinulla on squashfs-tools paketti asennettunaDracut-ohjelman suorittaminen ei onnistunutKuvan purkaminen epäonnistui "{}"Paikannetaan tiedostojärjestelmiä.Asenna bootloader.Asenna paketteja.Asennetaan tietoja.Asentaa Asentaa %(num)d paketteja.KDM-määritystiedostoa {!s} ei ole olemassaLXDM-määritystiedostoa {!s} ei ole olemassaLightDM-määritystiedostoa {!s} ei ole olemassaYhdistä osiot.LightDM ei ole asennettu.Displaymanager-moduulia varten ei ole valittu näyttönhallintaa.Ei liitoskohtaa juuri root-osiolleEi ole määritetty käyttämään osioita
{!s}
.Root-juuri kiinnityspistettä
{!s}
ei ole annettu käytettäväksi.Pakettien käsittely (%(count)d / %(total)d)Poista Live-käyttäjä kohdejärjestelmästäRemoving one package.Poistaa %(num)d paketteja.SLIM-määritystiedostoa {!s} ei ole olemassaTallennetaan verkon määrityksiä.Laitteiston kellon asettaminen.Kohde runlevel ei ole olemassaKohdepalvelua ei oleKohdejärjestelmän "{}" kohde ei ole hakemistoDisplaymanager-luettelo on tyhjä tai määrittelemätön, sekä globalstorage, että displaymanager.conf tiedostossa.Poistumiskoodi oli {}Tiedostojärjestelmää "{}" ({}) ei tuetaAjotason polku {level!s} on {path!s}, jota ei ole.Palvelun polku {name!s} on {path!s}, jota ei ole olemassa.Lähde tiedostojärjestelmää "{}" ei ole olemassaTuntematon huoltotoiminto{arg!s} palvelun {name!s} palvelutasolle {level!s}.Tuntematon systemd-komennot {command!s} ja {suffix!s} yksikölle {name!s}.Irrota tiedostojärjestelmät käytöstä.Fstab kirjoittaminen.globalstorage ei sisällä "rootMountPoint" avainta, eikä tee mitäänrootMountPoint on "{}", jota ei ole, eikä tee mitäänrsync epäonnistui virhekoodilla {}.calamares-3.2.20/lang/python/fi_FI/LC_MESSAGES/python.po000066400000000000000000000272411362604102500224170ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Kimmo Kujansuu , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Kimmo Kujansuu , 2019\n" "Language-Team: Finnish (Finland) (https://www.transifex.com/calamares/teams/20061/fi_FI/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fi_FI\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "Määritä GRUB." #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "Yhdistä osiot." #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "Määritysvirhe" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "Ei ole määritetty käyttämään osioita
{!s}
." #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "Määritä systemd palvelut" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "Palvelua ei voi muokata" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "systemctl {arg!s} chroot palautti virhe koodin {num!s}." #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "Systemd-palvelua ei saa käyttöön {name!s}." #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "Systemd-kohdetta ei saa käyttöön {name!s}." #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "Systemd-kohdetta ei-voi poistaa käytöstä {name!s}." #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "Ei voi peittää systemd-yksikköä {name!s}." #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "Tuntematon systemd-komennot {command!s} ja " "{suffix!s} yksikölle {name!s}." #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "Irrota tiedostojärjestelmät käytöstä." #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "Paikannetaan tiedostojärjestelmiä." #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "rsync epäonnistui virhekoodilla {}." #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "Kuvan purkaminen epäonnistui \"{}\"" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "Ei löytynyt unsquashfs, varmista, että sinulla on squashfs-tools paketti " "asennettuna" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "Ei liitoskohtaa juuri root-osiolle" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "globalstorage ei sisällä \"rootMountPoint\" avainta, eikä tee mitään" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "Huono kiinnityspiste root-osioon" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "rootMountPoint on \"{}\", jota ei ole, eikä tee mitään" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "Huono epäpuhdas kokoonpano" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "Tiedostojärjestelmää \"{}\" ({}) ei tueta" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "Lähde tiedostojärjestelmää \"{}\" ei ole olemassa" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "Kohdejärjestelmän \"{}\" kohde ei ole hakemisto" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "KDM-määritystiedostoa ei voi kirjoittaa" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "KDM-määritystiedostoa {!s} ei ole olemassa" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "LXDM-määritystiedostoa ei voi kirjoittaa" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "LXDM-määritystiedostoa {!s} ei ole olemassa" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "LightDM-määritystiedostoa ei voi kirjoittaa" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "LightDM-määritystiedostoa {!s} ei ole olemassa" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "LightDM määritysvirhe" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "LightDM ei ole asennettu." #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "SLIM-määritystiedostoa ei voi kirjoittaa" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "SLIM-määritystiedostoa {!s} ei ole olemassa" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "Displaymanager-moduulia varten ei ole valittu näyttönhallintaa." #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" "Displaymanager-luettelo on tyhjä tai määrittelemätön, sekä globalstorage, " "että displaymanager.conf tiedostossa." #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "Näytönhallinnan kokoonpano oli puutteellinen" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "Määritetään mkinitcpio." #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" "Root-juuri kiinnityspistettä
{!s}
ei ole annettu käytettäväksi." #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "Salatun swapin määrittäminen." #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "Asennetaan tietoja." #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "Määritä OpenRC-palvelut" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "Palvelua {name!s} ei-voi lisätä suorituksen tasolle {level!s}." #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "Ei voi poistaa palvelua {name!s} ajo-tasolla {level!s}." #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" "Tuntematon huoltotoiminto{arg!s} palvelun {name!s} " "palvelutasolle {level!s}." #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" "rc-update {arg!s} palautti chrootissa virhekoodin {num!s}." #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "Kohde runlevel ei ole olemassa" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "Ajotason polku {level!s} on {path!s}, jota ei ole." #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "Kohdepalvelua ei ole" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" "Palvelun polku {name!s} on {path!s}, jota ei ole olemassa." #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "Määritä Plymouthin teema" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Pakettien käsittely (%(count)d / %(total)d)" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "Asenna paketteja." #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Asentaa " msgstr[1] "Asentaa %(num)d paketteja." #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Removing one package." msgstr[1] "Poistaa %(num)d paketteja." #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "Asenna bootloader." #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "Poista Live-käyttäjä kohdejärjestelmästä" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "Laitteiston kellon asettaminen." #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "Initramfs luominen dracut:lla." #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "Dracut-ohjelman suorittaminen ei onnistunut" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "Poistumiskoodi oli {}" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "Määritetään initramfs." #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "OpenRC dmcrypt-palvelun määrittäminen." #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "Fstab kirjoittaminen." #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "Harjoitus python-työ." #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "Harjoitus python-vaihe {}" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "Määritetään locales." #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "Tallennetaan verkon määrityksiä." calamares-3.2.20/lang/python/fr/000077500000000000000000000000001362604102500163765ustar00rootroot00000000000000calamares-3.2.20/lang/python/fr/LC_MESSAGES/000077500000000000000000000000001362604102500201635ustar00rootroot00000000000000calamares-3.2.20/lang/python/fr/LC_MESSAGES/python.mo000066400000000000000000000200401362604102500220350ustar00rootroot00000000000000Þ•FLa|JJL"—º3Õ 4"4W3Œ/Àð8#?$c'ˆ$°Õéù , #G k ‡ ž ³ Ë ,ë  * R? "’ µ Ñ é ý  4 #U $y 'ž Æ Û ;ù !5 5W 8 +Æ #ò 0 $G l Š ¢ Á <ß \y-ŽO¼M )ZX„`Ý>TDc;¨ äƒX‰Tâ17i@‰ ÊAë>-<l;©!åA4I5~8´5í#;Rq(¯ Øù0'M?uµËaä+F(r"›¾Úñ: ,F-s5¡×!ïa0sI¤Wî.F.u8¤2Ý%%6\{C™lÝJ:fQ¡Oó0Cbte×#=aDu:º*õC>5B4<F 8 6?!&-'. A;*D$ 192 #@,7(3" :0+/E%)=rc-update {arg!s} call in chroot returned error code {num!s}.systemctl {arg!s} call in chroot returned error code {num!s}.Bad mount point for root partitionBad unsquash configurationCannot add service {name!s} to run-level {level!s}.Cannot configure LightDMCannot disable systemd target {name!s}.Cannot enable systemd service {name!s}.Cannot enable systemd target {name!s}.Cannot mask systemd unit {name!s}.Cannot modify serviceCannot remove service {name!s} from run-level {level!s}.Cannot write KDM configuration fileCannot write LXDM configuration fileCannot write LightDM configuration fileCannot write SLIM configuration fileConfiguration ErrorConfigure GRUB.Configure OpenRC servicesConfigure Plymouth themeConfigure systemd servicesConfiguring OpenRC dmcrypt service.Configuring encrypted swap.Configuring initramfs.Configuring locales.Configuring mkinitcpio.Creating initramfs with dracut.Display manager configuration was incompleteDummy python job.Dummy python step {}Failed to find unsquashfs, make sure you have the squashfs-tools package installedFailed to run dracut on the targetFailed to unpack image "{}"Filling up filesystems.Install bootloader.Install packages.Installing data.Installing one package.Installing %(num)d packages.KDM config file {!s} does not existLXDM config file {!s} does not existLightDM config file {!s} does not existMounting partitions.No LightDM greeter installed.No display managers selected for the displaymanager module.No mount point for root partitionNo partitions are defined for
{!s}
to use.No root mount point is given for
{!s}
to use.Processing packages (%(count)d / %(total)d)Remove live user from target systemRemoving one package.Removing %(num)d packages.SLIM config file {!s} does not existSaving network configuration.Setting hardware clock.Target runlevel does not existTarget service does not existThe destination "{}" in the target system is not a directoryThe displaymanagers list is empty or undefined in bothglobalstorage and displaymanager.conf.The exit code was {}The filesystem for "{}" ({}) is not supportedThe path for runlevel {level!s} is {path!s}, which does not exist.The path for service {name!s} is {path!s}, which does not exist.The source filesystem "{}" does not existUnknown service-action {arg!s} for service {name!s} in run-level {level!s}.Unknown systemd commands {command!s} and {suffix!s} for unit {name!s}.Unmount file systems.Writing fstab.globalstorage does not contain a "rootMountPoint" key, doing nothingrootMountPoint is "{}", which does not exist, doing nothingrsync failed with error code {}.Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Last-Translator: Arnaud Ferraris , 2019 Language-Team: French (https://www.transifex.com/calamares/teams/20061/fr/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: fr Plural-Forms: nplurals=2; plural=(n > 1); L'appel rc-update {arg!s} dans chroot a renvoyé le code d'erreur {num!s}.L'appel systemctl {arg!s} en chroot a renvoyé le code d'erreur {num!s}Mauvais point de montage pour la partition racineMauvaise configuration unsquashImpossible d'ajouter le service {name!s} au run-level {level!s}.Impossible de configurer LightDMImpossible de désactiver la cible systemd {name!s}.Impossible d'activer le service systemd {name!s}.Impossible d'activer la cible systemd {name!s}.Impossible de masquer l'unit systemd {name!s}.Impossible de modifier le serviceImpossible de retirer le service {name!s} du run-level {level!s}.Impossible d'écrire le fichier de configuration KDMImpossible d'écrire le fichier de configuration LXDMImpossible d'écrire le fichier de configuration LightDMImpossible d'écrire le fichier de configuration SLIMErreur de configurationConfiguration du GRUB.Configurer les services OpenRCConfigurer le thème PlymouthConfigurer les services systemdConfiguration du service OpenRC dmcrypt.Configuration du swap chiffrée.Configuration du initramfs.Configuration des locales.Configuration de mkinitcpio.Configuration du initramfs avec dracut.La configuration du gestionnaire d'affichage était incomplèteTâche factice pythonÉtape factice python {}Échec de la recherche de unsquashfs, assurez-vous que le paquetage squashfs-tools est installé.Erreur d'exécution de dracut sur la cible.Impossible de décompresser l'image "{}"Remplir les systèmes de fichiers.Installation du bootloader.Installer les paquets.Installation de données.Installation d'un paquet.Installation de %(num)d paquets.Le fichier de configuration KDM n'existe pasLe fichier de configuration LXDM n'existe pasLe fichier de configuration LightDM {!S} n'existe pasMontage des partitions.Aucun hôte LightDM est installéAucun gestionnaire d'affichage n'a été sélectionné pour le module de gestionnaire d'affichagePas de point de montage pour la partition racineAucune partition n'est définie pour être utilisée par
{!s}
.Aucun point de montage racine n'a été donné pour être utilisé par
{!s}
.Traitement des paquets (%(count)d / %(total)d)Supprimer l'utilisateur live du système cibleSuppression d'un paquet.Suppression de %(num)d paquets.Le fichier de configuration SLIM {!S} n'existe pasSauvegarde des configuration réseau.Configuration de l'horloge matériel.Le runlevel cible n'existe pasLe service cible n'existe pasLa destination "{}" dans le système cible n'est pas un répertoireLa liste des gestionnaires d'affichage est vide ou indéfinie dans bothglobalstorage et displaymanager.conf.Le code de sortie était {}Le système de fichiers pour "{}" ({}) n'est pas supportéLe chemin pour le runlevel {level!s} est {path!s}, qui n'existe pas.Le chemin pour le service {name!s} est {path!s}, qui n'existe pas.Le système de fichiers source "{}" n'existe pasService-action {arg!s} inconnue pour le service {name!s} dans le run-level {level!s}.Commandes systemd {command!s} et {suffix!s} inconnues pour l'unit {name!s}.Démonter les systèmes de fichiersÉcriture du fstab.globalstorage ne contient pas de clé "rootMountPoint", ne fait rienrootMountPoint est "{}", ce qui n'existe pas, ne fait rienrsync a échoué avec le code d'erreur {}.calamares-3.2.20/lang/python/fr/LC_MESSAGES/python.po000066400000000000000000000307141362604102500220510ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Paul Combal , 2017 # Abdellah B , 2017 # Aestan , 2018 # Jeremy Gourmel , 2018 # Aurnytoraink , 2018 # a270031086f2a0d3514bc0cb507b48f6, 2019 # Seboss666 , 2019 # Florian B , 2019 # Arnaud Ferraris , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Arnaud Ferraris , 2019\n" "Language-Team: French (https://www.transifex.com/calamares/teams/20061/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "Configuration du GRUB." #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "Montage des partitions." #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "Erreur de configuration" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "" "Aucune partition n'est définie pour être utilisée par
{!s}
." #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "Configurer les services systemd" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "Impossible de modifier le service" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" "L'appel systemctl {arg!s} en chroot a renvoyé le code d'erreur " "{num!s}" #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "Impossible d'activer le service systemd {name!s}." #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "Impossible d'activer la cible systemd {name!s}." #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "Impossible de désactiver la cible systemd {name!s}." #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "Impossible de masquer l'unit systemd {name!s}." #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "Commandes systemd {command!s} et {suffix!s} " "inconnues pour l'unit {name!s}." #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "Démonter les systèmes de fichiers" #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "Remplir les systèmes de fichiers." #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "rsync a échoué avec le code d'erreur {}." #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "Impossible de décompresser l'image \"{}\"" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "Échec de la recherche de unsquashfs, assurez-vous que le paquetage squashfs-" "tools est installé." #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "Pas de point de montage pour la partition racine" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "globalstorage ne contient pas de clé \"rootMountPoint\", ne fait rien" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "Mauvais point de montage pour la partition racine" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "rootMountPoint est \"{}\", ce qui n'existe pas, ne fait rien" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "Mauvaise configuration unsquash" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "Le système de fichiers pour \"{}\" ({}) n'est pas supporté" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "Le système de fichiers source \"{}\" n'existe pas" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "La destination \"{}\" dans le système cible n'est pas un répertoire" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "Impossible d'écrire le fichier de configuration KDM" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "Le fichier de configuration KDM n'existe pas" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "Impossible d'écrire le fichier de configuration LXDM" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "Le fichier de configuration LXDM n'existe pas" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "Impossible d'écrire le fichier de configuration LightDM" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "Le fichier de configuration LightDM {!S} n'existe pas" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "Impossible de configurer LightDM" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "Aucun hôte LightDM est installé" #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "Impossible d'écrire le fichier de configuration SLIM" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "Le fichier de configuration SLIM {!S} n'existe pas" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "" "Aucun gestionnaire d'affichage n'a été sélectionné pour le module de " "gestionnaire d'affichage" #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" "La liste des gestionnaires d'affichage est vide ou indéfinie dans " "bothglobalstorage et displaymanager.conf." #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "La configuration du gestionnaire d'affichage était incomplète" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "Configuration de mkinitcpio." #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" "Aucun point de montage racine n'a été donné pour être utilisé par " "
{!s}
." #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "Configuration du swap chiffrée." #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "Installation de données." #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "Configurer les services OpenRC" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "Impossible d'ajouter le service {name!s} au run-level {level!s}." #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "Impossible de retirer le service {name!s} du run-level {level!s}." #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" "Service-action {arg!s} inconnue pour le service {name!s} dans " "le run-level {level!s}." #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" "L'appel rc-update {arg!s} dans chroot a renvoyé le code " "d'erreur {num!s}." #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "Le runlevel cible n'existe pas" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" "Le chemin pour le runlevel {level!s} est {path!s}, qui n'existe" " pas." #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "Le service cible n'existe pas" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" "Le chemin pour le service {name!s} est {path!s}, qui n'existe " "pas." #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "Configurer le thème Plymouth" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Traitement des paquets (%(count)d / %(total)d)" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "Installer les paquets." #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Installation d'un paquet." msgstr[1] "Installation de %(num)d paquets." #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Suppression d'un paquet." msgstr[1] "Suppression de %(num)d paquets." #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "Installation du bootloader." #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "Supprimer l'utilisateur live du système cible" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "Configuration de l'horloge matériel." #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "Configuration du initramfs avec dracut." #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "Erreur d'exécution de dracut sur la cible." #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "Le code de sortie était {}" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "Configuration du initramfs." #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "Configuration du service OpenRC dmcrypt." #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "Écriture du fstab." #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "Tâche factice python" #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "Étape factice python {}" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "Configuration des locales." #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "Sauvegarde des configuration réseau." calamares-3.2.20/lang/python/fr_CH/000077500000000000000000000000001362604102500167505ustar00rootroot00000000000000calamares-3.2.20/lang/python/fr_CH/LC_MESSAGES/000077500000000000000000000000001362604102500205355ustar00rootroot00000000000000calamares-3.2.20/lang/python/fr_CH/LC_MESSAGES/python.mo000066400000000000000000000006161362604102500224160ustar00rootroot00000000000000Þ•$,8T9Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Language-Team: French (Switzerland) (https://www.transifex.com/calamares/teams/20061/fr_CH/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: fr_CH Plural-Forms: nplurals=2; plural=(n > 1); calamares-3.2.20/lang/python/fr_CH/LC_MESSAGES/python.po000066400000000000000000000211121362604102500224130ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: French (Switzerland) (https://www.transifex.com/calamares/teams/20061/fr_CH/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fr_CH\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "" #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "" #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "" #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "" #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "" calamares-3.2.20/lang/python/gl/000077500000000000000000000000001362604102500163715ustar00rootroot00000000000000calamares-3.2.20/lang/python/gl/LC_MESSAGES/000077500000000000000000000000001362604102500201565ustar00rootroot00000000000000calamares-3.2.20/lang/python/gl/LC_MESSAGES/python.mo000066400000000000000000000051041362604102500220340ustar00rootroot00000000000000Þ•Älàá#ú$'C$k,½Ïä4ö#+$O'tœ;º+ö0"$S\xÕ`ë"L<o=¬@ê=+5iŸ·Ï3â34J7&·IÞ*( 1S 4… hº #     Cannot configure LightDMCannot write KDM configuration fileCannot write LXDM configuration fileCannot write LightDM configuration fileCannot write SLIM configuration fileDisplay manager configuration was incompleteDummy python job.Dummy python step {}Install packages.Installing one package.Installing %(num)d packages.KDM config file {!s} does not existLXDM config file {!s} does not existLightDM config file {!s} does not existNo LightDM greeter installed.No display managers selected for the displaymanager module.Processing packages (%(count)d / %(total)d)Removing one package.Removing %(num)d packages.SLIM config file {!s} does not existThe displaymanagers list is empty or undefined in bothglobalstorage and displaymanager.conf.Unmount file systems.Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Last-Translator: Xosé, 2018 Language-Team: Galician (https://www.transifex.com/calamares/teams/20061/gl/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: gl Plural-Forms: nplurals=2; plural=(n != 1); Non é posíbel configurar LightDMNon é posíbel escribir o ficheiro de configuración de KDMNon é posíbel escribir o ficheiro de configuración de LXDMNon é posíbel escribir o ficheiro de configuración de LightDMNon é posíbel escribir o ficheiro de configuración de SLIMA configuración do xestor de pantalla foi incompletaTarefa parva de python.Paso parvo de python {}Instalar paquetes.A instalar un paquete.A instalar %(num)d paquetes.O ficheiro de configuración de KDM {!s} non existeO ficheiro de configuración de LXDM {!s} non existeO ficheiro de configuración de LightDM {!s} non existeNon se instalou o saudador de LightDM.Non hai xestores de pantalla seleccionados para o módulo displaymanager.A procesar paquetes (%(count)d/%(total)d)A retirar un paquete.A retirar %(num)d paquetes.O ficheiro de configuración de SLIM {!s} non existeA lista de xestores de pantalla está baleira ou sen definir en bothglobalstorage e displaymanager.conf.Desmontar sistemas de ficheiros.calamares-3.2.20/lang/python/gl/LC_MESSAGES/python.po000066400000000000000000000231451362604102500220440ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Xosé, 2018 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Xosé, 2018\n" "Language-Team: Galician (https://www.transifex.com/calamares/teams/20061/gl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: gl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "Desmontar sistemas de ficheiros." #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "Non é posíbel escribir o ficheiro de configuración de KDM" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "O ficheiro de configuración de KDM {!s} non existe" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "Non é posíbel escribir o ficheiro de configuración de LXDM" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "O ficheiro de configuración de LXDM {!s} non existe" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "Non é posíbel escribir o ficheiro de configuración de LightDM" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "O ficheiro de configuración de LightDM {!s} non existe" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "Non é posíbel configurar LightDM" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "Non se instalou o saudador de LightDM." #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "Non é posíbel escribir o ficheiro de configuración de SLIM" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "O ficheiro de configuración de SLIM {!s} non existe" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "" "Non hai xestores de pantalla seleccionados para o módulo displaymanager." #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" "A lista de xestores de pantalla está baleira ou sen definir en " "bothglobalstorage e displaymanager.conf." #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "A configuración do xestor de pantalla foi incompleta" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "" #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "A procesar paquetes (%(count)d/%(total)d)" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "Instalar paquetes." #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "A instalar un paquete." msgstr[1] "A instalar %(num)d paquetes." #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "A retirar un paquete." msgstr[1] "A retirar %(num)d paquetes." #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "" #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "" #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "" #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "Tarefa parva de python." #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "Paso parvo de python {}" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "" calamares-3.2.20/lang/python/gu/000077500000000000000000000000001362604102500164025ustar00rootroot00000000000000calamares-3.2.20/lang/python/gu/LC_MESSAGES/000077500000000000000000000000001362604102500201675ustar00rootroot00000000000000calamares-3.2.20/lang/python/gu/LC_MESSAGES/python.mo000066400000000000000000000005751362604102500220540ustar00rootroot00000000000000Þ•$,8C9Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Language-Team: Gujarati (https://www.transifex.com/calamares/teams/20061/gu/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: gu Plural-Forms: nplurals=2; plural=(n != 1); calamares-3.2.20/lang/python/gu/LC_MESSAGES/python.po000066400000000000000000000210711362604102500220510ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Gujarati (https://www.transifex.com/calamares/teams/20061/gu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: gu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "" #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "" #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "" #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "" #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "" calamares-3.2.20/lang/python/he/000077500000000000000000000000001362604102500163635ustar00rootroot00000000000000calamares-3.2.20/lang/python/he/LC_MESSAGES/000077500000000000000000000000001362604102500201505ustar00rootroot00000000000000calamares-3.2.20/lang/python/he/LC_MESSAGES/python.mo000066400000000000000000000215421362604102500220320ustar00rootroot00000000000000Þ•FLa|JJL"—º3Õ 4"4W3Œ/Àð8#?$c'ˆ$°Õéù , #G k ‡ ž ³ Ë ,ë  * R? "’ µ Ñ é ý  4 #U $y 'ž Æ Û ;ù !5 5W 8 +Æ #ò 0 $G l Š ¢ Á <ß \y-ŽO¼M )ZX„`Ý>TDc;¨ äÜjâeM=³ñX'iT‘[æSBT–*ëV<m=ª@è7)ayŠ,©Ö)ö( I_z‘2±ä] (~+§)Óý6ŽU8ä9<W”3±Bå0(AYQ›3í.!ÀP6#H!l.Ž%½Pã4¶EÔl S‡ ?Û ”!ƒ°!.4"c"^s"cÒ"+6#C>5B4<F 8 6?!&-'. A;*D$ 192 #@,7(3" :0+/E%)=rc-update {arg!s} call in chroot returned error code {num!s}.systemctl {arg!s} call in chroot returned error code {num!s}.Bad mount point for root partitionBad unsquash configurationCannot add service {name!s} to run-level {level!s}.Cannot configure LightDMCannot disable systemd target {name!s}.Cannot enable systemd service {name!s}.Cannot enable systemd target {name!s}.Cannot mask systemd unit {name!s}.Cannot modify serviceCannot remove service {name!s} from run-level {level!s}.Cannot write KDM configuration fileCannot write LXDM configuration fileCannot write LightDM configuration fileCannot write SLIM configuration fileConfiguration ErrorConfigure GRUB.Configure OpenRC servicesConfigure Plymouth themeConfigure systemd servicesConfiguring OpenRC dmcrypt service.Configuring encrypted swap.Configuring initramfs.Configuring locales.Configuring mkinitcpio.Creating initramfs with dracut.Display manager configuration was incompleteDummy python job.Dummy python step {}Failed to find unsquashfs, make sure you have the squashfs-tools package installedFailed to run dracut on the targetFailed to unpack image "{}"Filling up filesystems.Install bootloader.Install packages.Installing data.Installing one package.Installing %(num)d packages.KDM config file {!s} does not existLXDM config file {!s} does not existLightDM config file {!s} does not existMounting partitions.No LightDM greeter installed.No display managers selected for the displaymanager module.No mount point for root partitionNo partitions are defined for
{!s}
to use.No root mount point is given for
{!s}
to use.Processing packages (%(count)d / %(total)d)Remove live user from target systemRemoving one package.Removing %(num)d packages.SLIM config file {!s} does not existSaving network configuration.Setting hardware clock.Target runlevel does not existTarget service does not existThe destination "{}" in the target system is not a directoryThe displaymanagers list is empty or undefined in bothglobalstorage and displaymanager.conf.The exit code was {}The filesystem for "{}" ({}) is not supportedThe path for runlevel {level!s} is {path!s}, which does not exist.The path for service {name!s} is {path!s}, which does not exist.The source filesystem "{}" does not existUnknown service-action {arg!s} for service {name!s} in run-level {level!s}.Unknown systemd commands {command!s} and {suffix!s} for unit {name!s}.Unmount file systems.Writing fstab.globalstorage does not contain a "rootMountPoint" key, doing nothingrootMountPoint is "{}", which does not exist, doing nothingrsync failed with error code {}.Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Last-Translator: Yaron Shahrabani , 2019 Language-Team: Hebrew (https://www.transifex.com/calamares/teams/20061/he/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: he Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3; הקרי××” rc-update {arg!s} במצב chroot החזירה ×ת קוד השגי××” {num!s}.systemctl {arg!s} הקרי××” ב־chroot החזירה ×ת קוד השגי××” {num!s}.נקודת ×”×¢×’×™× ×” של מחיצת השורה שגויהתצורת unsquash ×©×’×•×™×”×œ× × ×™×ª×Ÿ להוסיף ×ת השירות {name!s} לשכבת ההפעלה {level!s}.×œ× × ×™×ª×Ÿ להגדיר ×ת LightDM×œ× × ×™×ª×Ÿ להשבית ×ת היעד של systemd ×‘×©× {name!s}.×œ× × ×™×ª×Ÿ להפעיל ×ת השירות ×”×‘× ×©×œ systemd:†{name!s}.×œ× × ×™×ª×Ÿ להפעיל ×ת היעד של systemd ×‘×©× {name!s}.×œ× × ×™×ª×Ÿ למסך ×ת היחידה של systemd ×‘×©× {name!s}.×œ× × ×™×ª×Ÿ לשנות ×ת ×”×©×™×¨×•×ª×œ× × ×™×ª×Ÿ להסיר ×ת השירות {name!s} משכבת ההפעלה {level!s}.×œ× × ×™×ª×Ÿ לכתוב ×ת קובץ התצורה של KDM×œ× × ×™×ª×Ÿ לכתוב ×ת קובץ התצורה של LXDM×œ× × ×™×ª×Ÿ לכתוב ×ת קובץ התצורה של LightDM×œ× × ×™×ª×Ÿ לכתוב קובץ תצורה של SLIM.שגי×ת הגדרותהגדרת GRUB.הגדרת שירותי OpenRCהגדרת ערכת עיצוב של Plymouthהגדרת שירותי systemdשירות dmcrypt ל־OpenRC מוגדר.מוגדר שטח החלפה מוצפן.initramfs מוגדר.השפות מוגדרות.mkinitcpio מותקן.נוצר initramfs ×¢× dracut.תצורת מנהל התצוגה ××™× ×” שלמהמשימת דמה של Python.צעד דמה של Python {}×יתור unsquashfs ×œ× ×¦×œ×—, × × ×œ×•×•×“× ×©×”×—×‘×™×œ×” squashfs-tools מותקנתהרצת dracut על היעד נכשלהפריסת התמונה „{}†נכשלהמערכות ×”×§×‘×¦×™× ×ž×ª×ž×œ×ות.התקנת מנהל ×תחול.התקנת חבילות.×”× ×ª×•× ×™× ×ž×•×ª×§× ×™×.מותקנת חבילה ×חת.מותקנות %(num)d חבילות.מותקנות %(num)d חבילות.מותקנות %(num)d חבילות.קובץ התצורה של KDM â€{!s} ×ינו ×§×™×™×קובץ התצורה של LXDM â€{!s} ×ינו ×§×™×™×קובץ התצורה של LightDM â€{!s} ×ינו ×§×™×™×מחיצות מעוגנות.×œ× ×ž×•×ª×§×Ÿ מקבל ×¤× ×™× ×ž×¡×•×’ LightDM.×œ× × ×‘×—×¨×• מנהלי תצוגה למודול displaymanager.×ין נקודת ×¢×’×™× ×” למחיצת ×”×¢×œ×œ× ×”×•×’×“×¨×• מחיצות לשימוש של
{!s}
.×œ× ×¡×•×¤×§×” נקודת עגינת שורש לשימוש של
{!s}
.החבילות מעובדות (%(count)d/%(total)d)הסרת משתמש ×—×™ ממערכת היעדמתבצעת הסרה של חבילה ×חת.מתבצעת הסרה של %(num)d חבילות.מתבצעת הסרה של %(num)d חבילות.מתבצעת הסרה של %(num)d חבילות.קובץ התצורה {!s} של SLIM ×ינו ×§×™×™×הגדרות הרשת נשמרות.שעון החומרה מוגדר.יעד שכבת ההפעלה ×ינו ×§×™×™×שירות היעד ×ינו ×§×™×™×היעד „{}†במערכת ×”×§×‘×¦×™× ×”×ž×™×•×¢×“×ª ×ינו תיקייההרשימה של מנהלי התצוגה ריקה ×ו ש××™× ×” מוגדרת תחת bothglobalstorage ו־displaymanager.conf.קוד היצי××” ×”×™×” {}מערכת ×”×§×‘×¦×™× ×¢×‘×•×¨ „{}†â€({}) ××™× ×” נתמכתהנתיב לשכבת ההפעלה {level!s} ×”×•× {path!s} ונתיב ×–×” ×ינו ×§×™×™×.הנתיב לשירות {name!s} ×”×•× {path!s}, ש×ינו ×§×™×™×.מערכת ×”×§×‘×¦×™× ×‘×ž×§×•×¨ „{}†××™× ×” קיימתservice-action†(פעולת שירות) {arg!s} בלתי ידועה עבור השירות {name!s} בשכבת ההפעלה {level!s}.פקודות ×œ× ×™×“×•×¢×•×ª של systemd†{command!s} ו־{suffix!s} עבור היחידה {name!s}.ניתוק עיגון מערכות קבצי×.fstab נכתב.ב־globalstorage ×ין ×ת המפתח „rootMountPointâ€, ×œ× ×ª×ª×‘×¦×¢ ××£ פעולהrootMountPoint מוגדרת בתור „{}â€, ש×ינו ×§×™×™×, ×œ× ×ª×ª×‘×¦×¢ ××£ פעולהrsync נכשל ×¢× ×§×•×“ השגי××” {}.calamares-3.2.20/lang/python/he/LC_MESSAGES/python.po000066400000000000000000000317071362604102500220410ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Eli Shleifer , 2017 # Yaron Shahrabani , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Yaron Shahrabani , 2019\n" "Language-Team: Hebrew (https://www.transifex.com/calamares/teams/20061/he/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: he\n" "Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "הגדרת GRUB." #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "מחיצות מעוגנות." #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "שגי×ת הגדרות" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "×œ× ×”×•×’×“×¨×• מחיצות לשימוש של
{!s}
." #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "הגדרת שירותי systemd" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "×œ× × ×™×ª×Ÿ לשנות ×ת השירות" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" "systemctl {arg!s} הקרי××” ב־chroot החזירה ×ת קוד השגי××” {num!s}." #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "×œ× × ×™×ª×Ÿ להפעיל ×ת השירות ×”×‘× ×©×œ systemd:†{name!s}." #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "×œ× × ×™×ª×Ÿ להפעיל ×ת היעד של systemd ×‘×©× {name!s}." #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "×œ× × ×™×ª×Ÿ להשבית ×ת היעד של systemd ×‘×©× {name!s}." #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "×œ× × ×™×ª×Ÿ למסך ×ת היחידה של systemd ×‘×©× {name!s}." #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "פקודות ×œ× ×™×“×•×¢×•×ª של systemd†{command!s} " "ו־{suffix!s} עבור היחידה {name!s}." #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "ניתוק עיגון מערכות קבצי×." #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "מערכות ×”×§×‘×¦×™× ×ž×ª×ž×œ×ות." #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "rsync נכשל ×¢× ×§×•×“ השגי××” {}." #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "פריסת התמונה „{}†נכשלה" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "×יתור unsquashfs ×œ× ×¦×œ×—, × × ×œ×•×•×“× ×©×”×—×‘×™×œ×” squashfs-tools מותקנת" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "×ין נקודת ×¢×’×™× ×” למחיצת העל" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "ב־globalstorage ×ין ×ת המפתח „rootMountPointâ€, ×œ× ×ª×ª×‘×¦×¢ ××£ פעולה" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "נקודת ×”×¢×’×™× ×” של מחיצת השורה שגויה" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "rootMountPoint מוגדרת בתור „{}â€, ש×ינו ×§×™×™×, ×œ× ×ª×ª×‘×¦×¢ ××£ פעולה" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "תצורת unsquash שגויה" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "מערכת ×”×§×‘×¦×™× ×¢×‘×•×¨ „{}†â€({}) ××™× ×” נתמכת" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "מערכת ×”×§×‘×¦×™× ×‘×ž×§×•×¨ „{}†××™× ×” קיימת" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "היעד „{}†במערכת ×”×§×‘×¦×™× ×”×ž×™×•×¢×“×ª ×ינו תיקייה" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "×œ× × ×™×ª×Ÿ לכתוב ×ת קובץ התצורה של KDM" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "קובץ התצורה של KDM â€{!s} ×ינו ×§×™×™×" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "×œ× × ×™×ª×Ÿ לכתוב ×ת קובץ התצורה של LXDM" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "קובץ התצורה של LXDM â€{!s} ×ינו ×§×™×™×" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "×œ× × ×™×ª×Ÿ לכתוב ×ת קובץ התצורה של LightDM" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "קובץ התצורה של LightDM â€{!s} ×ינו ×§×™×™×" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "×œ× × ×™×ª×Ÿ להגדיר ×ת LightDM" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "×œ× ×ž×•×ª×§×Ÿ מקבל ×¤× ×™× ×ž×¡×•×’ LightDM." #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "×œ× × ×™×ª×Ÿ לכתוב קובץ תצורה של SLIM." #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "קובץ התצורה {!s} של SLIM ×ינו ×§×™×™×" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "×œ× × ×‘×—×¨×• מנהלי תצוגה למודול displaymanager." #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" "הרשימה של מנהלי התצוגה ריקה ×ו ש××™× ×” מוגדרת תחת bothglobalstorage " "ו־displaymanager.conf." #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "תצורת מנהל התצוגה ××™× ×” שלמה" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "mkinitcpio מותקן." #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "×œ× ×¡×•×¤×§×” נקודת עגינת שורש לשימוש של
{!s}
." #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "מוגדר שטח החלפה מוצפן." #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "×”× ×ª×•× ×™× ×ž×•×ª×§× ×™×." #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "הגדרת שירותי OpenRC" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "×œ× × ×™×ª×Ÿ להוסיף ×ת השירות {name!s} לשכבת ההפעלה {level!s}." #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "×œ× × ×™×ª×Ÿ להסיר ×ת השירות {name!s} משכבת ההפעלה {level!s}." #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" "service-action†(פעולת שירות) {arg!s} בלתי ידועה עבור השירות " "{name!s} בשכבת ההפעלה {level!s}." #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" "הקרי××” rc-update {arg!s} במצב chroot החזירה ×ת קוד השגי××” " "{num!s}." #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "יעד שכבת ההפעלה ×ינו ×§×™×™×" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" "הנתיב לשכבת ההפעלה {level!s} ×”×•× {path!s} ונתיב ×–×” ×ינו ×§×™×™×." #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "שירות היעד ×ינו ×§×™×™×" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "הנתיב לשירות {name!s} ×”×•× {path!s}, ש×ינו ×§×™×™×." #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "הגדרת ערכת עיצוב של Plymouth" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "החבילות מעובדות (%(count)d/%(total)d)" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "התקנת חבילות." #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "מותקנת חבילה ×חת." msgstr[1] "מותקנות %(num)d חבילות." msgstr[2] "מותקנות %(num)d חבילות." msgstr[3] "מותקנות %(num)d חבילות." #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "מתבצעת הסרה של חבילה ×חת." msgstr[1] "מתבצעת הסרה של %(num)d חבילות." msgstr[2] "מתבצעת הסרה של %(num)d חבילות." msgstr[3] "מתבצעת הסרה של %(num)d חבילות." #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "התקנת מנהל ×תחול." #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "הסרת משתמש ×—×™ ממערכת היעד" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "שעון החומרה מוגדר." #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "נוצר initramfs ×¢× dracut." #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "הרצת dracut על היעד נכשלה" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "קוד היצי××” ×”×™×” {}" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "initramfs מוגדר." #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "שירות dmcrypt ל־OpenRC מוגדר." #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "fstab נכתב." #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "משימת דמה של Python." #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "צעד דמה של Python {}" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "השפות מוגדרות." #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "הגדרות הרשת נשמרות." calamares-3.2.20/lang/python/hi/000077500000000000000000000000001362604102500163675ustar00rootroot00000000000000calamares-3.2.20/lang/python/hi/LC_MESSAGES/000077500000000000000000000000001362604102500201545ustar00rootroot00000000000000calamares-3.2.20/lang/python/hi/LC_MESSAGES/python.mo000066400000000000000000000257561362604102500220510ustar00rootroot00000000000000Þ•FLa|JJL"—º3Õ 4"4W3Œ/Àð8#?$c'ˆ$°Õéù , #G k ‡ ž ³ Ë ,ë  * R? "’ µ Ñ é ý  4 #U $y 'ž Æ Û ;ù !5 5W 8 +Æ #ò 0 $G l Š ¢ Á <ß \y-ŽO¼M )ZX„`Ý>TDc;¨ äzb€aãVEDœuáUW„­u2{¨u$Wšuò[h\Ä_!\(Þ-?59u@¯Kðd<:¡HÜ:%4`[•9ñ\+žˆG'Lo/¼<ì5)2_ª’O=PSÞ22 de ·Ê g‚!ƒê!¡n"b#is#„Ý#Pb$d³$?%IX%C¢%æ%²h& '`<'ƒ'|!(Xž(’÷(ˆŠ)I*)]*‡* +F§+C>5B4<F 8 6?!&-'. A;*D$ 192 #@,7(3" :0+/E%)=rc-update {arg!s} call in chroot returned error code {num!s}.systemctl {arg!s} call in chroot returned error code {num!s}.Bad mount point for root partitionBad unsquash configurationCannot add service {name!s} to run-level {level!s}.Cannot configure LightDMCannot disable systemd target {name!s}.Cannot enable systemd service {name!s}.Cannot enable systemd target {name!s}.Cannot mask systemd unit {name!s}.Cannot modify serviceCannot remove service {name!s} from run-level {level!s}.Cannot write KDM configuration fileCannot write LXDM configuration fileCannot write LightDM configuration fileCannot write SLIM configuration fileConfiguration ErrorConfigure GRUB.Configure OpenRC servicesConfigure Plymouth themeConfigure systemd servicesConfiguring OpenRC dmcrypt service.Configuring encrypted swap.Configuring initramfs.Configuring locales.Configuring mkinitcpio.Creating initramfs with dracut.Display manager configuration was incompleteDummy python job.Dummy python step {}Failed to find unsquashfs, make sure you have the squashfs-tools package installedFailed to run dracut on the targetFailed to unpack image "{}"Filling up filesystems.Install bootloader.Install packages.Installing data.Installing one package.Installing %(num)d packages.KDM config file {!s} does not existLXDM config file {!s} does not existLightDM config file {!s} does not existMounting partitions.No LightDM greeter installed.No display managers selected for the displaymanager module.No mount point for root partitionNo partitions are defined for
{!s}
to use.No root mount point is given for
{!s}
to use.Processing packages (%(count)d / %(total)d)Remove live user from target systemRemoving one package.Removing %(num)d packages.SLIM config file {!s} does not existSaving network configuration.Setting hardware clock.Target runlevel does not existTarget service does not existThe destination "{}" in the target system is not a directoryThe displaymanagers list is empty or undefined in bothglobalstorage and displaymanager.conf.The exit code was {}The filesystem for "{}" ({}) is not supportedThe path for runlevel {level!s} is {path!s}, which does not exist.The path for service {name!s} is {path!s}, which does not exist.The source filesystem "{}" does not existUnknown service-action {arg!s} for service {name!s} in run-level {level!s}.Unknown systemd commands {command!s} and {suffix!s} for unit {name!s}.Unmount file systems.Writing fstab.globalstorage does not contain a "rootMountPoint" key, doing nothingrootMountPoint is "{}", which does not exist, doing nothingrsync failed with error code {}.Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Last-Translator: Panwar108 , 2019 Language-Team: Hindi (https://www.transifex.com/calamares/teams/20061/hi/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: hi Plural-Forms: nplurals=2; plural=(n != 1); chroot में rc-update {arg!s} कॉल तà¥à¤°à¥à¤Ÿà¤¿ कोड {num!s}।chroot में systemctl {arg!s} कॉल तà¥à¤°à¥à¤Ÿà¤¿ कोड {num!s}।रà¥à¤Ÿ विभाजन हेतॠख़राब माउंट पॉइंटख़राब unsquash विनà¥à¤¯à¤¾à¤¸ सेटिंगà¥à¤¸à¤°à¤¨-लेवल {level!s} में सेवा {name!s} को जोड़ा नहीं जा सका।LightDM को विनà¥à¤¯à¤¸à¥à¤¤ नहीं किया जा सकताsystemd टारगेट {name!s} को निषà¥à¤•à¥à¤°à¤¿à¤¯ नहीं किया जा सकता।systemd सेवा {name!s} को सकà¥à¤°à¤¿à¤¯ नहीं किया जा सकता।systemd टारगेट {name!s} को सकà¥à¤°à¤¿à¤¯ नहीं किया जा सकता।systemd यूनिट {name!s} को मासà¥à¤• नहीं किया जा सकता।सेवा को संशोधित नहीं किया जा सकतारन-लेवल {level!s} में सेवा {name!s} को हटाया नहीं जा सका।KDM विनà¥à¤¯à¤¾à¤¸ फ़ाइल राइट नहीं की जा सकतीLXDM विनà¥à¤¯à¤¾à¤¸ फ़ाइल राइट नहीं की जा सकतीLightDM विनà¥à¤¯à¤¾à¤¸ फ़ाइल राइट नहीं की जा सकतीSLIM विनà¥à¤¯à¤¾à¤¸ फ़ाइल राइट नहीं की जा सकतीविनà¥à¤¯à¤¾à¤¸ तà¥à¤°à¥à¤Ÿà¤¿GRUB विनà¥à¤¯à¤¸à¥à¤¤ करना।OpenRC सेवाà¤à¤ विनà¥à¤¯à¤¸à¥à¤¤ करनाPlymouth थीम विनà¥à¤¯à¤¸à¥à¤¤ करना systemd सेवाà¤à¤ विनà¥à¤¯à¤¸à¥à¤¤ करनाOpenRC dmcrypt सेवा को विनà¥à¤¯à¤¸à¥à¤¤ करना।à¤à¤¨à¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿà¥‡à¤¡ सà¥à¤µà¥ˆà¤ª को विनà¥à¤¯à¤¸à¥à¤¤ करना।initramfs को विनà¥à¤¯à¤¸à¥à¤¤ करना। सà¥à¤¥à¤¾à¤¨à¤¿à¤•ी को विनà¥à¤¯à¤¸à¥à¤¤ करना।mkinitcpio को विनà¥à¤¯à¤¸à¥à¤¤ करना।dracut के साथ initramfs बनाना।डिसà¥à¤ªà¥à¤²à¥‡ पà¥à¤°à¤¬à¤‚धक विनà¥à¤¯à¤¾à¤¸ अधूरा थाडमी पाइथन पà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ ।डमी पाइथन पà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ की चरण संखà¥à¤¯à¤¾ {}unsqaushfs खोजने में विफल, सà¥à¤¨à¤¿à¤¶à¥à¤šà¤¿à¤¤ करें कि squashfs-tools पैकेज इंसà¥à¤Ÿà¥‰à¤² हैटारगेट पर dracut चलाने में विफलइमेज फ़ाइल "{}" को खोलने में विफलफाइल सिसà¥à¤Ÿà¤® भरना।बूट लोडर इंसà¥à¤Ÿà¥‰à¤² करना।पैकेज इंसà¥à¤Ÿà¥‰à¤² करना।डाटा इंसà¥à¤Ÿà¥‰à¤² करना।à¤à¤• पैकेज इंसà¥à¤Ÿà¥‰à¤² किया जा रहा है।%(num)d पैकेज इंसà¥à¤Ÿà¥‰à¤² किठजा रहे हैं।KDM विनà¥à¤¯à¤¾à¤¸ फ़ाइल {!s} मौजूद नहीं हैLXDM विनà¥à¤¯à¤¾à¤¸ फ़ाइल {!s} मौजूद नहीं हैLightDM विनà¥à¤¯à¤¾à¤¸ फ़ाइल {!s} मौजूद नहीं हैविभाजन माउंट करना।कोई LightDM लॉगिन सà¥à¤•à¥à¤°à¥€à¤¨ इंसà¥à¤Ÿà¥‰à¤² नहीं है।चयनित डिसà¥à¤ªà¥à¤²à¥‡ पà¥à¤°à¤¬à¤‚धक मॉडà¥à¤¯à¥‚ल हेतॠकोई डिसà¥à¤ªà¥à¤²à¥‡ पà¥à¤°à¤¬à¤‚धक नहीं मिला।रà¥à¤Ÿ विभाजन हेतॠकोई माउंट पॉइंट नहीं है
{!s}
के उपयोग हेतॠकोई विभाजन परिभाषित नहीं हैं।
{!s}
के उपयोग हेतॠकोई रà¥à¤Ÿ माउंट पॉइंट पà¥à¤°à¤¦à¤¾à¤¨ नहीं किया गया।पैकेज (%(count)d / %(total)d) संसाधित किठजा रहे हैंलकà¥à¤·à¤¿à¤¤ सिसà¥à¤Ÿà¤® से लाइव उपयोकà¥à¤¤à¤¾ को हटानाà¤à¤• पैकेज हटाया जा रहा है।%(num)d पैकेज हटाठजा रहे हैं।SLIM विनà¥à¤¯à¤¾à¤¸ फ़ाइल {!s} मौजूद नहीं हैनेटवरà¥à¤• विनà¥à¤¯à¤¾à¤¸ सेटिंगà¥à¤¸ संचित करना।हारà¥à¤¡à¤µà¥‡à¤¯à¤° घड़ी सेट करना।लकà¥à¤·à¤¿à¤¤ रनलेवल मौजूद नहीं हैलकà¥à¤·à¤¿à¤¤ सेवा मौजूद नहीं हैलकà¥à¤·à¤¿à¤¤ सिसà¥à¤Ÿà¤® में "{}" सà¥à¤¥à¤¾à¤¨ कोई डायरेकà¥à¤Ÿà¤°à¥€ नहीं हैbothglobalstorage à¤à¤µà¤‚ displaymanager.conf में डिसà¥à¤ªà¥à¤²à¥‡ पà¥à¤°à¤¬à¤‚धक सूची रिकà¥à¤¤ या अपरिभाषित है।तà¥à¤°à¥à¤Ÿà¤¿ कोड {}"{}" ({}) हेतॠफ़ाइल सिसà¥à¤Ÿà¤® समरà¥à¤¥à¤¿à¤¤ नहीं हैरनलेवल {level!s} हेतॠपथ {path!s} है, जो कि मौजूद नहीं है।सेवा {name!s} हेतॠपथ {path!s} है, जो कि मौजूद नहीं है।"{}" सà¥à¤°à¥‹à¤¤ फ़ाइल सिसà¥à¤Ÿà¤® मौजूद नहीं हैरन-लेवल {level!s} में सेवा {name!s} हेतॠअजà¥à¤žà¤¾à¤¤ सेवा-कारà¥à¤¯ {arg!s}।यूनिट {name!s} हेतॠअजà¥à¤žà¤¾à¤¤ systemd कमांड {command!s} व {suffix!s}।फ़ाइल सिसà¥à¤Ÿà¤® माउंट से हटाना।fstab पर राइट करना।globalstorage में "rootMountPoint" कà¥à¤‚जी नहीं है, कà¥à¤› नहीं किया जाà¤à¤—ारà¥à¤Ÿ माउंट पॉइंट "{}" है, जो कि मौजूद नहीं है, कà¥à¤› नहीं किया जाà¤à¤—ाrsync तà¥à¤°à¥à¤Ÿà¤¿ कोड {} के साथ विफल।calamares-3.2.20/lang/python/hi/LC_MESSAGES/python.po000066400000000000000000000357771362604102500220600ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Panwar108 , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Panwar108 , 2019\n" "Language-Team: Hindi (https://www.transifex.com/calamares/teams/20061/hi/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: hi\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "GRUB विनà¥à¤¯à¤¸à¥à¤¤ करना।" #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "विभाजन माउंट करना।" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "विनà¥à¤¯à¤¾à¤¸ तà¥à¤°à¥à¤Ÿà¤¿" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "
{!s}
के उपयोग हेतॠकोई विभाजन परिभाषित नहीं हैं।" #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "systemd सेवाà¤à¤ विनà¥à¤¯à¤¸à¥à¤¤ करना" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "सेवा को संशोधित नहीं किया जा सकता" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "chroot में systemctl {arg!s} कॉल तà¥à¤°à¥à¤Ÿà¤¿ कोड {num!s}।" #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "systemd सेवा {name!s} को सकà¥à¤°à¤¿à¤¯ नहीं किया जा सकता।" #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "systemd टारगेट {name!s} को सकà¥à¤°à¤¿à¤¯ नहीं किया जा सकता।" #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "systemd टारगेट {name!s} को निषà¥à¤•à¥à¤°à¤¿à¤¯ नहीं किया जा सकता।" #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "systemd यूनिट {name!s} को मासà¥à¤• नहीं किया जा सकता।" #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "यूनिट {name!s} हेतॠअजà¥à¤žà¤¾à¤¤ systemd कमांड {command!s} व " "{suffix!s}।" #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "फ़ाइल सिसà¥à¤Ÿà¤® माउंट से हटाना।" #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "फाइल सिसà¥à¤Ÿà¤® भरना।" #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "rsync तà¥à¤°à¥à¤Ÿà¤¿ कोड {} के साथ विफल।" #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "इमेज फ़ाइल \"{}\" को खोलने में विफल" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "unsqaushfs खोजने में विफल, सà¥à¤¨à¤¿à¤¶à¥à¤šà¤¿à¤¤ करें कि squashfs-tools पैकेज इंसà¥à¤Ÿà¥‰à¤² है" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "रà¥à¤Ÿ विभाजन हेतॠकोई माउंट पॉइंट नहीं है" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "globalstorage में \"rootMountPoint\" कà¥à¤‚जी नहीं है, कà¥à¤› नहीं किया जाà¤à¤—ा" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "रà¥à¤Ÿ विभाजन हेतॠख़राब माउंट पॉइंट" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "रà¥à¤Ÿ माउंट पॉइंट \"{}\" है, जो कि मौजूद नहीं है, कà¥à¤› नहीं किया जाà¤à¤—ा" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "ख़राब unsquash विनà¥à¤¯à¤¾à¤¸ सेटिंगà¥à¤¸" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "\"{}\" ({}) हेतॠफ़ाइल सिसà¥à¤Ÿà¤® समरà¥à¤¥à¤¿à¤¤ नहीं है" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "\"{}\" सà¥à¤°à¥‹à¤¤ फ़ाइल सिसà¥à¤Ÿà¤® मौजूद नहीं है" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "लकà¥à¤·à¤¿à¤¤ सिसà¥à¤Ÿà¤® में \"{}\" सà¥à¤¥à¤¾à¤¨ कोई डायरेकà¥à¤Ÿà¤°à¥€ नहीं है" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "KDM विनà¥à¤¯à¤¾à¤¸ फ़ाइल राइट नहीं की जा सकती" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "KDM विनà¥à¤¯à¤¾à¤¸ फ़ाइल {!s} मौजूद नहीं है" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "LXDM विनà¥à¤¯à¤¾à¤¸ फ़ाइल राइट नहीं की जा सकती" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "LXDM विनà¥à¤¯à¤¾à¤¸ फ़ाइल {!s} मौजूद नहीं है" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "LightDM विनà¥à¤¯à¤¾à¤¸ फ़ाइल राइट नहीं की जा सकती" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "LightDM विनà¥à¤¯à¤¾à¤¸ फ़ाइल {!s} मौजूद नहीं है" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "LightDM को विनà¥à¤¯à¤¸à¥à¤¤ नहीं किया जा सकता" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "कोई LightDM लॉगिन सà¥à¤•à¥à¤°à¥€à¤¨ इंसà¥à¤Ÿà¥‰à¤² नहीं है।" #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "SLIM विनà¥à¤¯à¤¾à¤¸ फ़ाइल राइट नहीं की जा सकती" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "SLIM विनà¥à¤¯à¤¾à¤¸ फ़ाइल {!s} मौजूद नहीं है" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "चयनित डिसà¥à¤ªà¥à¤²à¥‡ पà¥à¤°à¤¬à¤‚धक मॉडà¥à¤¯à¥‚ल हेतॠकोई डिसà¥à¤ªà¥à¤²à¥‡ पà¥à¤°à¤¬à¤‚धक नहीं मिला।" #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" "bothglobalstorage à¤à¤µà¤‚ displaymanager.conf में डिसà¥à¤ªà¥à¤²à¥‡ पà¥à¤°à¤¬à¤‚धक सूची रिकà¥à¤¤ या" " अपरिभाषित है।" #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "डिसà¥à¤ªà¥à¤²à¥‡ पà¥à¤°à¤¬à¤‚धक विनà¥à¤¯à¤¾à¤¸ अधूरा था" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "mkinitcpio को विनà¥à¤¯à¤¸à¥à¤¤ करना।" #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" "
{!s}
के उपयोग हेतॠकोई रà¥à¤Ÿ माउंट पॉइंट पà¥à¤°à¤¦à¤¾à¤¨ नहीं किया गया।" #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "à¤à¤¨à¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿà¥‡à¤¡ सà¥à¤µà¥ˆà¤ª को विनà¥à¤¯à¤¸à¥à¤¤ करना।" #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "डाटा इंसà¥à¤Ÿà¥‰à¤² करना।" #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "OpenRC सेवाà¤à¤ विनà¥à¤¯à¤¸à¥à¤¤ करना" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "रन-लेवल {level!s} में सेवा {name!s} को जोड़ा नहीं जा सका।" #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "रन-लेवल {level!s} में सेवा {name!s} को हटाया नहीं जा सका।" #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" "रन-लेवल {level!s} में सेवा {name!s} हेतॠअजà¥à¤žà¤¾à¤¤ सेवा-कारà¥à¤¯ " "{arg!s}।" #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "chroot में rc-update {arg!s} कॉल तà¥à¤°à¥à¤Ÿà¤¿ कोड {num!s}।" #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "लकà¥à¤·à¤¿à¤¤ रनलेवल मौजूद नहीं है" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" "रनलेवल {level!s} हेतॠपथ {path!s} है, जो कि मौजूद नहीं है।" #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "लकà¥à¤·à¤¿à¤¤ सेवा मौजूद नहीं है" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "सेवा {name!s} हेतॠपथ {path!s} है, जो कि मौजूद नहीं है।" #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "Plymouth थीम विनà¥à¤¯à¤¸à¥à¤¤ करना " #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "पैकेज (%(count)d / %(total)d) संसाधित किठजा रहे हैं" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "पैकेज इंसà¥à¤Ÿà¥‰à¤² करना।" #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "à¤à¤• पैकेज इंसà¥à¤Ÿà¥‰à¤² किया जा रहा है।" msgstr[1] "%(num)d पैकेज इंसà¥à¤Ÿà¥‰à¤² किठजा रहे हैं।" #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "à¤à¤• पैकेज हटाया जा रहा है।" msgstr[1] "%(num)d पैकेज हटाठजा रहे हैं।" #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "बूट लोडर इंसà¥à¤Ÿà¥‰à¤² करना।" #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "लकà¥à¤·à¤¿à¤¤ सिसà¥à¤Ÿà¤® से लाइव उपयोकà¥à¤¤à¤¾ को हटाना" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "हारà¥à¤¡à¤µà¥‡à¤¯à¤° घड़ी सेट करना।" #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "dracut के साथ initramfs बनाना।" #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "टारगेट पर dracut चलाने में विफल" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "तà¥à¤°à¥à¤Ÿà¤¿ कोड {}" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "initramfs को विनà¥à¤¯à¤¸à¥à¤¤ करना। " #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "OpenRC dmcrypt सेवा को विनà¥à¤¯à¤¸à¥à¤¤ करना।" #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "fstab पर राइट करना।" #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "डमी पाइथन पà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ ।" #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "डमी पाइथन पà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ की चरण संखà¥à¤¯à¤¾ {}" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "सà¥à¤¥à¤¾à¤¨à¤¿à¤•ी को विनà¥à¤¯à¤¸à¥à¤¤ करना।" #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "नेटवरà¥à¤• विनà¥à¤¯à¤¾à¤¸ सेटिंगà¥à¤¸ संचित करना।" calamares-3.2.20/lang/python/hr/000077500000000000000000000000001362604102500164005ustar00rootroot00000000000000calamares-3.2.20/lang/python/hr/LC_MESSAGES/000077500000000000000000000000001362604102500201655ustar00rootroot00000000000000calamares-3.2.20/lang/python/hr/LC_MESSAGES/python.mo000066400000000000000000000174371362604102500220570ustar00rootroot00000000000000Þ•FLa|JJL"—º3Õ 4"4W3Œ/Àð8#?$c'ˆ$°Õéù , #G k ‡ ž ³ Ë ,ë  * R? "’ µ Ñ é ý  4 #U $y 'ž Æ Û ;ù !5 5W 8 +Æ #ò 0 $G l Š ¢ Á <ß \y-ŽO¼M )ZX„`Ý>TDc;¨ äÍPÓP$.u!¤5Æü88S6Œ9Ãý:-T.‚1±.ã(=[x&•!¼Þø03N‚—Y®3$<!aƒš­GÄ, -90g˜#®:Ò( :6Nq)À*êA-W …¦Åà1ù^+Š, PÍL)kV•bìOn@7À&øC>5B4<F 8 6?!&-'. A;*D$ 192 #@,7(3" :0+/E%)=rc-update {arg!s} call in chroot returned error code {num!s}.systemctl {arg!s} call in chroot returned error code {num!s}.Bad mount point for root partitionBad unsquash configurationCannot add service {name!s} to run-level {level!s}.Cannot configure LightDMCannot disable systemd target {name!s}.Cannot enable systemd service {name!s}.Cannot enable systemd target {name!s}.Cannot mask systemd unit {name!s}.Cannot modify serviceCannot remove service {name!s} from run-level {level!s}.Cannot write KDM configuration fileCannot write LXDM configuration fileCannot write LightDM configuration fileCannot write SLIM configuration fileConfiguration ErrorConfigure GRUB.Configure OpenRC servicesConfigure Plymouth themeConfigure systemd servicesConfiguring OpenRC dmcrypt service.Configuring encrypted swap.Configuring initramfs.Configuring locales.Configuring mkinitcpio.Creating initramfs with dracut.Display manager configuration was incompleteDummy python job.Dummy python step {}Failed to find unsquashfs, make sure you have the squashfs-tools package installedFailed to run dracut on the targetFailed to unpack image "{}"Filling up filesystems.Install bootloader.Install packages.Installing data.Installing one package.Installing %(num)d packages.KDM config file {!s} does not existLXDM config file {!s} does not existLightDM config file {!s} does not existMounting partitions.No LightDM greeter installed.No display managers selected for the displaymanager module.No mount point for root partitionNo partitions are defined for
{!s}
to use.No root mount point is given for
{!s}
to use.Processing packages (%(count)d / %(total)d)Remove live user from target systemRemoving one package.Removing %(num)d packages.SLIM config file {!s} does not existSaving network configuration.Setting hardware clock.Target runlevel does not existTarget service does not existThe destination "{}" in the target system is not a directoryThe displaymanagers list is empty or undefined in bothglobalstorage and displaymanager.conf.The exit code was {}The filesystem for "{}" ({}) is not supportedThe path for runlevel {level!s} is {path!s}, which does not exist.The path for service {name!s} is {path!s}, which does not exist.The source filesystem "{}" does not existUnknown service-action {arg!s} for service {name!s} in run-level {level!s}.Unknown systemd commands {command!s} and {suffix!s} for unit {name!s}.Unmount file systems.Writing fstab.globalstorage does not contain a "rootMountPoint" key, doing nothingrootMountPoint is "{}", which does not exist, doing nothingrsync failed with error code {}.Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Last-Translator: Lovro Kudelić , 2019 Language-Team: Croatian (https://www.transifex.com/calamares/teams/20061/hr/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: hr Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2; rc-update {arg!s} poziv u chroot-u vratio je kod pogreÅ¡ke {num!s}.systemctl {arg!s} poziv u chroot-u vratio je kod pogreÅ¡ke {num!s}.Neispravna toÄka montiranja za root particijuNeispravna unsquash konfiguracijaNe mogu dodati servis {name!s} u run-level {level!s}.Ne mogu konfigurirati LightDMNe mogu onemogućiti systemd cilj {name!s}.Ne mogu omogućiti systemd servis {name!s}.Ne mogu omogućiti systemd cilj {name!s}.Ne mogu maskirati systemd jedinicu {name!s}.Ne mogu modificirati servisNe mogu ukloniti servis {name!s} iz run-level-a {level!s}.Ne mogu zapisati KDM konfiguracijsku datotekuNe mogu zapisati LXDM konfiguracijsku datotekuNe moku zapisati LightDM konfiguracijsku datotekuNe mogu zapisati SLIM konfiguracijsku datotekuGreÅ¡ka konfiguracijeKonfigurirajte GRUB.Konfigurirajte OpneRC serviseKonfigurirajte Plymouth temuKonfiguriraj systemd serviseKonfiguriranje servisa OpenRC dmcrypt.Konfiguriranje Å¡ifriranog swapa.Konfiguriranje initramfs.Konfiguriranje lokalizacije.Konfiguriranje mkinitcpio.Stvaranje initramfs s dracut.Konfiguracija upravitelja zaslona nije bila potpunaTestni python posao.Testni python korak {}NeuspjeÅ¡no pronalaženje unsquashfs, provjerite imate li instaliran paket squashfs-toolsNije uspjelo pokretanje dracuta na ciljanom sustavuOtpakiravnje slike nije uspjelo "{}"Popunjavanje datoteÄnih sustava.Instaliram bootloader.Instaliraj pakete.Instaliranje podataka.Instaliram paket.Instaliram %(num)d pakete.Instaliram %(num)d pakete.KDM konfiguracijska datoteka {!s} ne postojiLXDM konfiguracijska datoteka {!s} ne postojiLightDM konfiguracijska datoteka {!s} ne postojiMontiranje particija.Nije instaliran LightDM pozdravnik.Nisu odabrani upravitelji zaslona za modul displaymanager.Nema toÄke montiranja za root particijuNema definiranih particija za
{!s}
koriÅ¡tenje.Nijedna root toÄka montiranja nije definirana za
{!s}
koriÅ¡tenje.ObraÄ‘ujem pakete (%(count)d / %(total)d)Uklonite live korisnika iz ciljnog sustavaUklanjam paket.Uklanjam %(num)d pakete.Uklanjam %(num)d pakete.SLIM konfiguracijska datoteka {!s} ne postojiSpremanje mrežne konfiguracije.Postavljanje hardverskog sata.Ciljni runlevel ne postojiCiljni servis ne postojiOdrediÅ¡te "{}" u ciljnom sustavu nije direktorijPopis upravitelja zaslona je prazan ili nedefiniran u bothglobalstorage i displaymanager.conf.Izlazni kod bio je {}DatoteÄni sustav za "{}" ({}) nije podržanPutanja za runlevel {level!s} je {path!s}, meÄ‘utim ona ne postoji.Putanja servisa {name!s} je {path!s}, meÄ‘utim ona ne postoji.Izvorni datoteÄni sustav "{}" ne postojiNepoznat service-action {arg!s} za servis {name!s} u run-level {level!s}.Nepoznata systemd naredba {command!s} i {suffix!s} za jedinicu {name!s}.Odmontiraj datoteÄne sustave.Zapisujem fstab.globalstorage ne sadrži kljuÄ "rootMountPoint", ne radi niÅ¡tarootMountPoint je "{}", Å¡to ne postoji, ne radi niÅ¡tarsync nije uspio s kodom pogreÅ¡ke {}.calamares-3.2.20/lang/python/hr/LC_MESSAGES/python.po000066400000000000000000000275451362604102500220630ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Lovro Kudelić , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Lovro Kudelić , 2019\n" "Language-Team: Croatian (https://www.transifex.com/calamares/teams/20061/hr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: hr\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "Konfigurirajte GRUB." #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "Montiranje particija." #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "GreÅ¡ka konfiguracije" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "Nema definiranih particija za
{!s}
koriÅ¡tenje." #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "Konfiguriraj systemd servise" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "Ne mogu modificirati servis" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" "systemctl {arg!s} poziv u chroot-u vratio je kod pogreÅ¡ke " "{num!s}." #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "Ne mogu omogućiti systemd servis {name!s}." #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "Ne mogu omogućiti systemd cilj {name!s}." #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "Ne mogu onemogućiti systemd cilj {name!s}." #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "Ne mogu maskirati systemd jedinicu {name!s}." #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "Nepoznata systemd naredba {command!s} i {suffix!s}" " za jedinicu {name!s}." #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "Odmontiraj datoteÄne sustave." #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "Popunjavanje datoteÄnih sustava." #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "rsync nije uspio s kodom pogreÅ¡ke {}." #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "Otpakiravnje slike nije uspjelo \"{}\"" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "NeuspjeÅ¡no pronalaženje unsquashfs, provjerite imate li instaliran paket " "squashfs-tools" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "Nema toÄke montiranja za root particiju" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "globalstorage ne sadrži kljuÄ \"rootMountPoint\", ne radi niÅ¡ta" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "Neispravna toÄka montiranja za root particiju" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "rootMountPoint je \"{}\", Å¡to ne postoji, ne radi niÅ¡ta" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "Neispravna unsquash konfiguracija" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "DatoteÄni sustav za \"{}\" ({}) nije podržan" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "Izvorni datoteÄni sustav \"{}\" ne postoji" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "OdrediÅ¡te \"{}\" u ciljnom sustavu nije direktorij" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "Ne mogu zapisati KDM konfiguracijsku datoteku" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "KDM konfiguracijska datoteka {!s} ne postoji" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "Ne mogu zapisati LXDM konfiguracijsku datoteku" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "LXDM konfiguracijska datoteka {!s} ne postoji" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "Ne moku zapisati LightDM konfiguracijsku datoteku" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "LightDM konfiguracijska datoteka {!s} ne postoji" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "Ne mogu konfigurirati LightDM" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "Nije instaliran LightDM pozdravnik." #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "Ne mogu zapisati SLIM konfiguracijsku datoteku" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "SLIM konfiguracijska datoteka {!s} ne postoji" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "Nisu odabrani upravitelji zaslona za modul displaymanager." #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" "Popis upravitelja zaslona je prazan ili nedefiniran u bothglobalstorage i " "displaymanager.conf." #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "Konfiguracija upravitelja zaslona nije bila potpuna" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "Konfiguriranje mkinitcpio." #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" "Nijedna root toÄka montiranja nije definirana za
{!s}
koriÅ¡tenje." #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "Konfiguriranje Å¡ifriranog swapa." #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "Instaliranje podataka." #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "Konfigurirajte OpneRC servise" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "Ne mogu dodati servis {name!s} u run-level {level!s}." #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "Ne mogu ukloniti servis {name!s} iz run-level-a {level!s}." #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" "Nepoznat service-action {arg!s} za servis {name!s} u run-level " "{level!s}." #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" "rc-update {arg!s} poziv u chroot-u vratio je kod pogreÅ¡ke " "{num!s}." #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "Ciljni runlevel ne postoji" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" "Putanja za runlevel {level!s} je {path!s}, meÄ‘utim ona ne " "postoji." #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "Ciljni servis ne postoji" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" "Putanja servisa {name!s} je {path!s}, meÄ‘utim ona ne postoji." #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "Konfigurirajte Plymouth temu" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "ObraÄ‘ujem pakete (%(count)d / %(total)d)" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "Instaliraj pakete." #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Instaliram paket." msgstr[1] "Instaliram %(num)d pakete." msgstr[2] "Instaliram %(num)d pakete." #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Uklanjam paket." msgstr[1] "Uklanjam %(num)d pakete." msgstr[2] "Uklanjam %(num)d pakete." #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "Instaliram bootloader." #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "Uklonite live korisnika iz ciljnog sustava" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "Postavljanje hardverskog sata." #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "Stvaranje initramfs s dracut." #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "Nije uspjelo pokretanje dracuta na ciljanom sustavu" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "Izlazni kod bio je {}" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "Konfiguriranje initramfs." #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "Konfiguriranje servisa OpenRC dmcrypt." #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "Zapisujem fstab." #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "Testni python posao." #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "Testni python korak {}" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "Konfiguriranje lokalizacije." #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "Spremanje mrežne konfiguracije." calamares-3.2.20/lang/python/hu/000077500000000000000000000000001362604102500164035ustar00rootroot00000000000000calamares-3.2.20/lang/python/hu/LC_MESSAGES/000077500000000000000000000000001362604102500201705ustar00rootroot00000000000000calamares-3.2.20/lang/python/hu/LC_MESSAGES/python.mo000066400000000000000000000176621362604102500220620ustar00rootroot00000000000000Þ•FLa|JJL"—º3Õ 4"4W3Œ/Àð8#?$c'ˆ$°Õéù , #G k ‡ ž ³ Ë ,ë  * R? "’ µ Ñ é ý  4 #U $y 'ž Æ Û ;ù !5 5W 8 +Æ #ò 0 $G l Š ¢ Á <ß \y-ŽO¼M )ZX„`Ý>TDc;¨ ä}NƒOÒ,"OEm³>ÑMC^8¢(ÛK(P*y,¤)Ñû%&L&i."¿â!ý&;0b“©WÂ)&Dkˆ¨¿5Ô0 1;4m¢$º>ß,FKE’.Ø7;?1{#­Ñ!í";2qnà?ûR;NŽ)ÝcikÕõJ>O#ŽC>5B4<F 8 6?!&-'. A;*D$ 192 #@,7(3" :0+/E%)=rc-update {arg!s} call in chroot returned error code {num!s}.systemctl {arg!s} call in chroot returned error code {num!s}.Bad mount point for root partitionBad unsquash configurationCannot add service {name!s} to run-level {level!s}.Cannot configure LightDMCannot disable systemd target {name!s}.Cannot enable systemd service {name!s}.Cannot enable systemd target {name!s}.Cannot mask systemd unit {name!s}.Cannot modify serviceCannot remove service {name!s} from run-level {level!s}.Cannot write KDM configuration fileCannot write LXDM configuration fileCannot write LightDM configuration fileCannot write SLIM configuration fileConfiguration ErrorConfigure GRUB.Configure OpenRC servicesConfigure Plymouth themeConfigure systemd servicesConfiguring OpenRC dmcrypt service.Configuring encrypted swap.Configuring initramfs.Configuring locales.Configuring mkinitcpio.Creating initramfs with dracut.Display manager configuration was incompleteDummy python job.Dummy python step {}Failed to find unsquashfs, make sure you have the squashfs-tools package installedFailed to run dracut on the targetFailed to unpack image "{}"Filling up filesystems.Install bootloader.Install packages.Installing data.Installing one package.Installing %(num)d packages.KDM config file {!s} does not existLXDM config file {!s} does not existLightDM config file {!s} does not existMounting partitions.No LightDM greeter installed.No display managers selected for the displaymanager module.No mount point for root partitionNo partitions are defined for
{!s}
to use.No root mount point is given for
{!s}
to use.Processing packages (%(count)d / %(total)d)Remove live user from target systemRemoving one package.Removing %(num)d packages.SLIM config file {!s} does not existSaving network configuration.Setting hardware clock.Target runlevel does not existTarget service does not existThe destination "{}" in the target system is not a directoryThe displaymanagers list is empty or undefined in bothglobalstorage and displaymanager.conf.The exit code was {}The filesystem for "{}" ({}) is not supportedThe path for runlevel {level!s} is {path!s}, which does not exist.The path for service {name!s} is {path!s}, which does not exist.The source filesystem "{}" does not existUnknown service-action {arg!s} for service {name!s} in run-level {level!s}.Unknown systemd commands {command!s} and {suffix!s} for unit {name!s}.Unmount file systems.Writing fstab.globalstorage does not contain a "rootMountPoint" key, doing nothingrootMountPoint is "{}", which does not exist, doing nothingrsync failed with error code {}.Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Last-Translator: Lajos Pasztor , 2019 Language-Team: Hungarian (https://www.transifex.com/calamares/teams/20061/hu/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: hu Plural-Forms: nplurals=2; plural=(n != 1); rc-update {arg!s} hívás a chroot-ban hibakódot adott: {num!s}.systemctl {arg!s} hívás a chroot-ban hibakódot okozott {num!s}.Rossz betöltési pont a root partíciónálRossz unsquash konfigurációNem lehet {name!s} szolgáltatást hozzáadni a run-level {level!s}.A LightDM nem állítható beNem sikerült a systemd cél {name!s} letiltása.Nem sikerült a systemd szolgáltatást engedélyezni: {name!s}.Nem sikerült a systemd célt engedélyezni: {name!s}.Nem maszkolható systemd egység: {name!s}.a szolgáltatást nem lehet módosítaniNem lehet törölni a {name!s} szolgáltatást a {level!s} futás-szintbőlA KDM konfigurációs fájl nem írhatóAz LXDM konfigurációs fájl nem írhatóA LightDM konfigurációs fájl nem írhatóA SLIM konfigurációs fájl nem írhatóKonfigurációs hibaGRUB konfigurálása.OpenRC szolgáltatások beállításaPlymouth téma beállításasystemd szolgáltatások beállításaOpenRC dmcrypt szolgáltatás konfigurálása.Titkosított swap konfigurálása.initramfs konfigurálása.nyelvi értékek konfigurálása.mkinitcpio konfigurálása.initramfs létrehozása ezzel: dracut.A kijelzőkezelő konfigurációja hiányos voltHamis Python feladat.Hamis {}. Python lépésunsquashfs nem található, győződj meg róla a squashfs-tools csomag telepítve van.dracut futtatása nem sikerült a célon."{}" kép kicsomagolása nem sikerültFájlrendszerek betöltése.Rendszerbetöltő telepítése.Csomagok telepítése.Adatok telepítése.Egy csomag telepítése.%(num)d csomag telepítése.A(z) {!s} KDM konfigurációs fájl nem létezikA(z) {!s} LXDM konfigurációs fájl nem létezikA(z) {!s} LightDM konfigurációs fájl nem létezikPartíciók csatolása.Nincs LightDM üdvözlő telepítve.Nincs kijelzőkezelő kiválasztva a kijelzőkezelő modulhoz.Nincs betöltési pont a root partíciónálNincsenek partíciók meghatározva a
{!s}
használatához.Nincs root csatolási pont megadva a
{!s}
használatához.Csomagok feldolgozása (%(count)d / %(total)d)Éles felhasználó eltávolítása a cél rendszerbőlEgy csomag eltávolítása.%(num)d csomag eltávolítása.A(z) {!s} SLIM konfigurációs fájl nem létezikHálózati konfiguráció mentése.Rendszeridő beállítása.A cél futási szint nem létezikA cél szolgáltatás nem létezikAz elérés "{}" nem létező könyvtár a cél rendszerbenA kijelzőkezelők listája üres vagy nincs megadva a bothglobalstorage-ben és a displaymanager.conf fájlban.A kilépési kód {} volt.A(z) ({}) fájlrendszer nem támogatott a következőhöz: "{}"A futási-szint elérési útja {level!s} ami {path!s}, nem létezik.A szolgáltatás {name!s} elérési útja {path!s}, nem létezik.A forrás fájlrendszer "{}" nem létezikIsmeretlen service-action {arg!s} a szolgáltatáshoz {name!s} in run-level {level!s}.Ismeretlen systemd parancsok {command!s} és {suffix!s} a {name!s} egységhez. Fájlrendszerek leválasztása.fstab írása.globalstorage nem tartalmaz "rootMountPoint" kulcsot, semmi nem történikrootMountPoint is "{}", ami nem létezik, semmi nem történikaz rsync elhalt a(z) {} hibakóddalcalamares-3.2.20/lang/python/hu/LC_MESSAGES/python.po000066400000000000000000000300731362604102500220540ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Adriaan de Groot , 2018 # Balázs Meskó , 2018 # miku84, 2019 # Lajos Pasztor , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Lajos Pasztor , 2019\n" "Language-Team: Hungarian (https://www.transifex.com/calamares/teams/20061/hu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: hu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "GRUB konfigurálása." #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "Partíciók csatolása." #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "Konfigurációs hiba" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "Nincsenek partíciók meghatározva a
{!s}
használatához." #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "systemd szolgáltatások beállítása" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "a szolgáltatást nem lehet módosítani" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" "systemctl {arg!s} hívás a chroot-ban hibakódot okozott {num!s}." #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "" "Nem sikerült a systemd szolgáltatást engedélyezni: {name!s}." #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "Nem sikerült a systemd célt engedélyezni: {name!s}." #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "Nem sikerült a systemd cél {name!s} letiltása." #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "Nem maszkolható systemd egység: {name!s}." #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "Ismeretlen systemd parancsok {command!s} és " "{suffix!s} a {name!s} egységhez. " #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "Fájlrendszerek leválasztása." #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "Fájlrendszerek betöltése." #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "az rsync elhalt a(z) {} hibakóddal" #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "\"{}\" kép kicsomagolása nem sikerült" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "unsquashfs nem található, győződj meg róla a squashfs-tools csomag telepítve" " van." #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "Nincs betöltési pont a root partíciónál" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" "globalstorage nem tartalmaz \"rootMountPoint\" kulcsot, semmi nem történik" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "Rossz betöltési pont a root partíciónál" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "rootMountPoint is \"{}\", ami nem létezik, semmi nem történik" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "Rossz unsquash konfiguráció" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "A(z) ({}) fájlrendszer nem támogatott a következőhöz: \"{}\"" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "A forrás fájlrendszer \"{}\" nem létezik" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "Az elérés \"{}\" nem létező könyvtár a cél rendszerben" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "A KDM konfigurációs fájl nem írható" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "A(z) {!s} KDM konfigurációs fájl nem létezik" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "Az LXDM konfigurációs fájl nem írható" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "A(z) {!s} LXDM konfigurációs fájl nem létezik" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "A LightDM konfigurációs fájl nem írható" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "A(z) {!s} LightDM konfigurációs fájl nem létezik" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "A LightDM nem állítható be" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "Nincs LightDM üdvözlő telepítve." #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "A SLIM konfigurációs fájl nem írható" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "A(z) {!s} SLIM konfigurációs fájl nem létezik" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "Nincs kijelzőkezelő kiválasztva a kijelzőkezelő modulhoz." #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" "A kijelzőkezelők listája üres vagy nincs megadva a bothglobalstorage-ben és" " a displaymanager.conf fájlban." #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "A kijelzőkezelő konfigurációja hiányos volt" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "mkinitcpio konfigurálása." #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "Nincs root csatolási pont megadva a
{!s}
használatához." #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "Titkosított swap konfigurálása." #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "Adatok telepítése." #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "OpenRC szolgáltatások beállítása" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "Nem lehet {name!s} szolgáltatást hozzáadni a run-level {level!s}." #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "Nem lehet törölni a {name!s} szolgáltatást a {level!s} futás-szintbÅ‘l" #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" "Ismeretlen service-action {arg!s} a szolgáltatáshoz {name!s} in" " run-level {level!s}." #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" "rc-update {arg!s} hívás a chroot-ban hibakódot adott: {num!s}." #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "A cél futási szint nem létezik" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" "A futási-szint elérési útja {level!s} ami {path!s}, nem " "létezik." #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "A cél szolgáltatás nem létezik" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" "A szolgáltatás {name!s} elérési útja {path!s}, nem létezik." #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "Plymouth téma beállítása" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Csomagok feldolgozása (%(count)d / %(total)d)" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "Csomagok telepítése." #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Egy csomag telepítése." msgstr[1] "%(num)d csomag telepítése." #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Egy csomag eltávolítása." msgstr[1] "%(num)d csomag eltávolítása." #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "RendszerbetöltÅ‘ telepítése." #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "Éles felhasználó eltávolítása a cél rendszerbÅ‘l" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "RendszeridÅ‘ beállítása." #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "initramfs létrehozása ezzel: dracut." #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "dracut futtatása nem sikerült a célon." #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "A kilépési kód {} volt." #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "initramfs konfigurálása." #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "OpenRC dmcrypt szolgáltatás konfigurálása." #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "fstab írása." #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "Hamis Python feladat." #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "Hamis {}. Python lépés" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "nyelvi értékek konfigurálása." #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "Hálózati konfiguráció mentése." calamares-3.2.20/lang/python/id/000077500000000000000000000000001362604102500163635ustar00rootroot00000000000000calamares-3.2.20/lang/python/id/LC_MESSAGES/000077500000000000000000000000001362604102500201505ustar00rootroot00000000000000calamares-3.2.20/lang/python/id/LC_MESSAGES/python.mo000066400000000000000000000045061362604102500220330ustar00rootroot00000000000000Þ•Älàá#ú$'C$k,½Ïä4ö#+$O'tœ;º+ö0"$S\xÕrë ^%&¥)Ì&ö)GZq…ž ½"Þ%>'&f¤iÄ.     Cannot configure LightDMCannot write KDM configuration fileCannot write LXDM configuration fileCannot write LightDM configuration fileCannot write SLIM configuration fileDisplay manager configuration was incompleteDummy python job.Dummy python step {}Install packages.Installing one package.Installing %(num)d packages.KDM config file {!s} does not existLXDM config file {!s} does not existLightDM config file {!s} does not existNo LightDM greeter installed.No display managers selected for the displaymanager module.Processing packages (%(count)d / %(total)d)Removing one package.Removing %(num)d packages.SLIM config file {!s} does not existThe displaymanagers list is empty or undefined in bothglobalstorage and displaymanager.conf.Unmount file systems.Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Last-Translator: Wantoyo , 2018 Language-Team: Indonesian (https://www.transifex.com/calamares/teams/20061/id/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: id Plural-Forms: nplurals=1; plural=0; Gak bisa mengkonfigurasi LightDMGak bisa menulis file konfigurasi KDMGak bisa menulis file konfigurasi LXDMGak bisa menulis file konfigurasi LightDMGak bisa menulis file konfigurasi SLIMKonfigurasi display manager belum rampungTugas dumi python.Langkah {} dumi pythonInstal paket-paket.Menginstal paket %(num)dFile {!s} config KDM belum adaFile {!s} config LXDM enggak adaFile {!s} config LightDM belum adaTiada LightDM greeter yang terinstal.Tiada display manager yang dipilih untuk modul displaymanager.Paket pemrosesan (%(count)d/%(total)d)mencopot %(num)d paketFile {!s} config SLIM belum adaDaftar displaymanager telah kosong atau takdidefinisikan dalam bothglobalstorage dan displaymanager.conf.Lepaskan sistem berkas.calamares-3.2.20/lang/python/id/LC_MESSAGES/python.po000066400000000000000000000226501362604102500220360ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Choiril Abdul, 2018 # Harry Suryapambagya , 2018 # Wantoyo , 2018 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Wantoyo , 2018\n" "Language-Team: Indonesian (https://www.transifex.com/calamares/teams/20061/id/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: id\n" "Plural-Forms: nplurals=1; plural=0;\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "Lepaskan sistem berkas." #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "Gak bisa menulis file konfigurasi KDM" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "File {!s} config KDM belum ada" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "Gak bisa menulis file konfigurasi LXDM" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "File {!s} config LXDM enggak ada" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "Gak bisa menulis file konfigurasi LightDM" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "File {!s} config LightDM belum ada" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "Gak bisa mengkonfigurasi LightDM" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "Tiada LightDM greeter yang terinstal." #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "Gak bisa menulis file konfigurasi SLIM" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "File {!s} config SLIM belum ada" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "Tiada display manager yang dipilih untuk modul displaymanager." #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" "Daftar displaymanager telah kosong atau takdidefinisikan dalam " "bothglobalstorage dan displaymanager.conf." #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "Konfigurasi display manager belum rampung" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "" #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Paket pemrosesan (%(count)d/%(total)d)" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "Instal paket-paket." #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Menginstal paket %(num)d" #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "mencopot %(num)d paket" #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "" #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "" #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "" #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "Tugas dumi python." #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "Langkah {} dumi python" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "" calamares-3.2.20/lang/python/is/000077500000000000000000000000001362604102500164025ustar00rootroot00000000000000calamares-3.2.20/lang/python/is/LC_MESSAGES/000077500000000000000000000000001362604102500201675ustar00rootroot00000000000000calamares-3.2.20/lang/python/is/LC_MESSAGES/python.mo000066400000000000000000000016261362604102500220520ustar00rootroot00000000000000Þ•L |¨©4»+ð0M†cê.û%*.PInstall packages.Installing one package.Installing %(num)d packages.Processing packages (%(count)d / %(total)d)Removing one package.Removing %(num)d packages.Unmount file systems.Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Last-Translator: Kristján Magnússon, 2018 Language-Team: Icelandic (https://www.transifex.com/calamares/teams/20061/is/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: is Plural-Forms: nplurals=2; plural=(n % 10 != 1 || n % 100 == 11); Setja upp pakka.Setja upp einn pakka.Setur upp %(num)d pakka.Vinnslupakkar (%(count)d / %(total)d)Fjarlægi einn pakka.Fjarlægi %(num)d pakka.Aftengja skráarkerfi.calamares-3.2.20/lang/python/is/LC_MESSAGES/python.po000066400000000000000000000215241362604102500220540ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Kristján Magnússon, 2018 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Kristján Magnússon, 2018\n" "Language-Team: Icelandic (https://www.transifex.com/calamares/teams/20061/is/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: is\n" "Plural-Forms: nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "Aftengja skráarkerfi." #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "" #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Vinnslupakkar (%(count)d / %(total)d)" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "Setja upp pakka." #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Setja upp einn pakka." msgstr[1] "Setur upp %(num)d pakka." #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Fjarlægi einn pakka." msgstr[1] "Fjarlægi %(num)d pakka." #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "" #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "" #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "" #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "" calamares-3.2.20/lang/python/it_IT/000077500000000000000000000000001362604102500167775ustar00rootroot00000000000000calamares-3.2.20/lang/python/it_IT/LC_MESSAGES/000077500000000000000000000000001362604102500205645ustar00rootroot00000000000000calamares-3.2.20/lang/python/it_IT/LC_MESSAGES/python.mo000066400000000000000000000126221362604102500224450ustar00rootroot00000000000000Þ•/”C "<3W‹4¤4Ù3/Br8ˆ#Á$å' $2Wk…ž,¹æøR `|Ž4Ÿ#Ô$ø'E;c!Ÿ+Á#í0 $B g † <¤ \á -> Ol M¼ ) 4 J yk 3å  C8 | >œ <Û ;:T"C²5ö6,9c6Ôí#3>r‡YŸ%ù3=B0€1±4ã.KG3“2Ç1ú8,1e—µ5Ó` -jK˜Jä&/V%l$( .-*&#!)  '  / ",%+Bad mount point for root partitionBad unsquash configurationCannot add service {name!s} to run-level {level!s}.Cannot configure LightDMCannot disable systemd target {name!s}.Cannot enable systemd service {name!s}.Cannot enable systemd target {name!s}.Cannot mask systemd unit {name!s}.Cannot modify serviceCannot remove service {name!s} from run-level {level!s}.Cannot write KDM configuration fileCannot write LXDM configuration fileCannot write LightDM configuration fileCannot write SLIM configuration fileConfiguration ErrorConfigure OpenRC servicesConfigure Plymouth themeConfigure systemd servicesDisplay manager configuration was incompleteDummy python job.Dummy python step {}Failed to find unsquashfs, make sure you have the squashfs-tools package installedFailed to unpack image "{}"Install packages.Installing data.Installing one package.Installing %(num)d packages.KDM config file {!s} does not existLXDM config file {!s} does not existLightDM config file {!s} does not existNo LightDM greeter installed.No display managers selected for the displaymanager module.No mount point for root partitionProcessing packages (%(count)d / %(total)d)Remove live user from target systemRemoving one package.Removing %(num)d packages.SLIM config file {!s} does not existTarget runlevel does not existTarget service does not existThe destination "{}" in the target system is not a directoryThe displaymanagers list is empty or undefined in bothglobalstorage and displaymanager.conf.The filesystem for "{}" ({}) is not supportedThe path for runlevel {level!s} is {path!s}, which does not exist.The path for service {name!s} is {path!s}, which does not exist.The source filesystem "{}" does not existUnmount file systems.rsync failed with error code {}.Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Last-Translator: Pietro F. Fontana, 2020 Language-Team: Italian (Italy) (https://www.transifex.com/calamares/teams/20061/it_IT/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: it_IT Plural-Forms: nplurals=2; plural=(n != 1); Punto di montaggio per la partizione di root erratoConfigurazione unsquash errataImpossibile aggiungere il servizio {name!s} al run-level {level!s}.Impossibile configurare LightDMImpossibile disabilitare systemd target {name!s}.Impossibile abilitare systemd service {name!s}.Impossibile abilitare systemd target {name!s}.Impossibile mascherare systemd unit {name!s}.Impossibile modificare il servizioImpossibile rimuovere il servizio {name!s} dal run-level {level!s}.Impossibile scrivere il file di configurazione di KDMImpossibile scrivere il file di configurazione di LXDMImpossibile scrivere il file di configurazione di LightDMImpossibile scrivere il file di configurazione di SLIMErrore di ConfigurazioneConfigura i servizi OpenRCConfigura il tema PlymouthConfigura systemd servicesLa configurazione del display manager è incompletaJob python fittizio.Python step {} fittizioImpossibile trovare unsquashfs, assicurati di aver installato il pacchetto squashfs-toolsEstrazione dell'immagine "{}" fallitaInstalla pacchetti.Installazione.Installando un pacchetto.Installazione di %(num)d pacchetti.Il file di configurazione di KDM {!s} non esisteIl file di configurazione di LXDM {!s} non esisteIl file di configurazione di LightDM {!s} non esisteNon è stato installato nessun LightDM greeterNon è stato selezionato alcun display manager per il modulo displaymanagerNessun punto di montaggio per la partizione di rootElaborazione dei pacchetti (%(count)d / %(total)d)Rimuovi l'utente live dal sistema di destinazioneRimuovendo un pacchetto.Rimozione di %(num)d pacchetti.Il file di configurazione di SLIM {!s} non esisteIl runlevel target non esisteIl servizio target non esisteLa destinazione del sistema "{}" non è una directoryLa lista displaymanagers è vuota o non definita sia in globalstorage che in displaymanager.confIl filesystem per "{}" ({}) non è supportatoIl percorso del runlevel {level!s} è {path!s}, ma non esiste.Il percorso del servizio {name!s} è {path!s}, ma non esiste.Il filesystem sorgente "{}" non esisteSmonta i file system.rsync fallita con codice d'errore {}.calamares-3.2.20/lang/python/it_IT/LC_MESSAGES/python.po000066400000000000000000000256401362604102500224540ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Saverio , 2018 # Pierfrancesco Passerini , 2019 # Pietro F. Fontana, 2020 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Pietro F. Fontana, 2020\n" "Language-Team: Italian (Italy) (https://www.transifex.com/calamares/teams/20061/it_IT/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: it_IT\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "Errore di Configurazione" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "Configura systemd services" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "Impossibile modificare il servizio" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "Impossibile abilitare systemd service {name!s}." #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "Impossibile abilitare systemd target {name!s}." #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "Impossibile disabilitare systemd target {name!s}." #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "Impossibile mascherare systemd unit {name!s}." #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "Smonta i file system." #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "rsync fallita con codice d'errore {}." #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "Estrazione dell'immagine \"{}\" fallita" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "Impossibile trovare unsquashfs, assicurati di aver installato il pacchetto " "squashfs-tools" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "Nessun punto di montaggio per la partizione di root" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "Punto di montaggio per la partizione di root errato" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "Configurazione unsquash errata" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "Il filesystem per \"{}\" ({}) non è supportato" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "Il filesystem sorgente \"{}\" non esiste" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "La destinazione del sistema \"{}\" non è una directory" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "Impossibile scrivere il file di configurazione di KDM" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "Il file di configurazione di KDM {!s} non esiste" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "Impossibile scrivere il file di configurazione di LXDM" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "Il file di configurazione di LXDM {!s} non esiste" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "Impossibile scrivere il file di configurazione di LightDM" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "Il file di configurazione di LightDM {!s} non esiste" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "Impossibile configurare LightDM" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "Non è stato installato nessun LightDM greeter" #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "Impossibile scrivere il file di configurazione di SLIM" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "Il file di configurazione di SLIM {!s} non esiste" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "" "Non è stato selezionato alcun display manager per il modulo displaymanager" #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" "La lista displaymanagers è vuota o non definita sia in globalstorage che in " "displaymanager.conf" #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "La configurazione del display manager è incompleta" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "" #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "Installazione." #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "Configura i servizi OpenRC" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "Impossibile aggiungere il servizio {name!s} al run-level {level!s}." #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "Impossibile rimuovere il servizio {name!s} dal run-level {level!s}." #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "Il runlevel target non esiste" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" "Il percorso del runlevel {level!s} è {path!s}, ma non esiste." #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "Il servizio target non esiste" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" "Il percorso del servizio {name!s} è {path!s}, ma non esiste." #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "Configura il tema Plymouth" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Elaborazione dei pacchetti (%(count)d / %(total)d)" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "Installa pacchetti." #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Installando un pacchetto." msgstr[1] "Installazione di %(num)d pacchetti." #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Rimuovendo un pacchetto." msgstr[1] "Rimozione di %(num)d pacchetti." #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "" #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "Rimuovi l'utente live dal sistema di destinazione" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "" #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "" #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "Job python fittizio." #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "Python step {} fittizio" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "" calamares-3.2.20/lang/python/ja/000077500000000000000000000000001362604102500163615ustar00rootroot00000000000000calamares-3.2.20/lang/python/ja/LC_MESSAGES/000077500000000000000000000000001362604102500201465ustar00rootroot00000000000000calamares-3.2.20/lang/python/ja/LC_MESSAGES/python.mo000066400000000000000000000214771362604102500220370ustar00rootroot00000000000000Þ•FLa|JJL"—º3Õ 4"4W3Œ/Àð8#?$c'ˆ$°Õéù , #G k ‡ ž ³ Ë ,ë  * R? "’ µ Ñ é ý  4 #U $y 'ž Æ Û ;ù !5 5W 8 +Æ #ò 0 $G l Š ¢ Á <ß \y-ŽO¼M )ZX„`Ý>TDc;¨ äxn~ríQ`!²OÔ"$KG[“KïI;$…Rª9ý:7=r:°'ë0Lg5„.º$é'%6-\<ŠÇÙƒî/r%¢6È*ÿ$*!O?q1±2ã5'L=tB²TõUJh ? :I3„2¸3ë'<G9„T¾“G³dûa` = ~!x!0ø!#)"\M"cª"0#C>5B4<F 8 6?!&-'. A;*D$ 192 #@,7(3" :0+/E%)=rc-update {arg!s} call in chroot returned error code {num!s}.systemctl {arg!s} call in chroot returned error code {num!s}.Bad mount point for root partitionBad unsquash configurationCannot add service {name!s} to run-level {level!s}.Cannot configure LightDMCannot disable systemd target {name!s}.Cannot enable systemd service {name!s}.Cannot enable systemd target {name!s}.Cannot mask systemd unit {name!s}.Cannot modify serviceCannot remove service {name!s} from run-level {level!s}.Cannot write KDM configuration fileCannot write LXDM configuration fileCannot write LightDM configuration fileCannot write SLIM configuration fileConfiguration ErrorConfigure GRUB.Configure OpenRC servicesConfigure Plymouth themeConfigure systemd servicesConfiguring OpenRC dmcrypt service.Configuring encrypted swap.Configuring initramfs.Configuring locales.Configuring mkinitcpio.Creating initramfs with dracut.Display manager configuration was incompleteDummy python job.Dummy python step {}Failed to find unsquashfs, make sure you have the squashfs-tools package installedFailed to run dracut on the targetFailed to unpack image "{}"Filling up filesystems.Install bootloader.Install packages.Installing data.Installing one package.Installing %(num)d packages.KDM config file {!s} does not existLXDM config file {!s} does not existLightDM config file {!s} does not existMounting partitions.No LightDM greeter installed.No display managers selected for the displaymanager module.No mount point for root partitionNo partitions are defined for
{!s}
to use.No root mount point is given for
{!s}
to use.Processing packages (%(count)d / %(total)d)Remove live user from target systemRemoving one package.Removing %(num)d packages.SLIM config file {!s} does not existSaving network configuration.Setting hardware clock.Target runlevel does not existTarget service does not existThe destination "{}" in the target system is not a directoryThe displaymanagers list is empty or undefined in bothglobalstorage and displaymanager.conf.The exit code was {}The filesystem for "{}" ({}) is not supportedThe path for runlevel {level!s} is {path!s}, which does not exist.The path for service {name!s} is {path!s}, which does not exist.The source filesystem "{}" does not existUnknown service-action {arg!s} for service {name!s} in run-level {level!s}.Unknown systemd commands {command!s} and {suffix!s} for unit {name!s}.Unmount file systems.Writing fstab.globalstorage does not contain a "rootMountPoint" key, doing nothingrootMountPoint is "{}", which does not exist, doing nothingrsync failed with error code {}.Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Last-Translator: UTUMI Hirosi , 2019 Language-Team: Japanese (https://www.transifex.com/calamares/teams/20061/ja/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: ja Plural-Forms: nplurals=1; plural=0; chrootã§ rc-update {arg!s} を呼ã³å‡ºã™ã¨ã‚¨ãƒ©ãƒ¼ã‚³ãƒ¼ãƒ‰ {num!s} ãŒè¿”ã•れã¾ã—ãŸã€‚chroot ã§ systemctl {arg!s} を呼ã³å‡ºã™ã¨ã€ã‚¨ãƒ©ãƒ¼ã‚³ãƒ¼ãƒ‰ {num!s} ãŒè¿”ã•れã¾ã—ãŸã€‚ルートパーティションã®ãŸã‚ã®ãƒžã‚¦ãƒ³ãƒˆãƒã‚¤ãƒ³ãƒˆãŒä¸æ­£ã§ã™unsquash ã®è¨­å®šãŒä¸æ­£ã§ã™ãƒ©ãƒ³ãƒ¬ãƒ™ãƒ« {level!s} ã«ã‚µãƒ¼ãƒ“ス {name!s} ãŒè¿½åŠ ã§ãã¾ã›ã‚“。LightDMã®è¨­å®šãŒã§ãã¾ã›ã‚“systemd ã§ã‚¿ãƒ¼ã‚²ãƒƒãƒˆ {name!s}ãŒåœæ­¢ã§ãã¾ã›ã‚“。{name!s}ã¨ã„ã†systemdサービスãŒå¯èƒ½ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“systemd ã§ã‚¿ãƒ¼ã‚²ãƒƒãƒˆ {name!s}ãŒé–‹å§‹ã§ãã¾ã›ã‚“。systemd ユニット {name!s} をマスクã§ãã¾ã›ã‚“。サービスãŒå¤‰æ›´ã§ãã¾ã›ã‚“ランレベル {level!s} ã‹ã‚‰ã‚µãƒ¼ãƒ“ス {name!s} ãŒå‰Šé™¤ã§ãã¾ã›ã‚“。KDMã®è¨­å®šãƒ•ã‚¡ã‚¤ãƒ«ã«æ›¸ãè¾¼ã¿ãŒã§ãã¾ã›ã‚“LXDMã®è¨­å®šãƒ•ã‚¡ã‚¤ãƒ«ã«æ›¸ãè¾¼ã¿ãŒã§ãã¾ã›ã‚“LightDMã®è¨­å®šãƒ•ã‚¡ã‚¤ãƒ«ã«æ›¸ãè¾¼ã¿ãŒã§ãã¾ã›ã‚“SLIMã®è¨­å®šãƒ•ã‚¡ã‚¤ãƒ«ã«æ›¸ãè¾¼ã¿ãŒã§ãã¾ã›ã‚“コンフィグレーションエラーGRUBを設定ã«ã—ã¾ã™ã€‚OpenRCサービスを設定Plymouthテーマを設定systemdサービスを設定OpenRC dmcryptサービスを設定ã—ã¦ã„ã¾ã™ã€‚æš—å·åŒ–ã—ãŸswapを設定ã—ã¦ã„ã¾ã™ã€‚initramfsを設定ã—ã¦ã„ã¾ã™ã€‚ロケールを設定ã—ã¦ã„ã¾ã™ã€‚mkinitcpioを設定ã—ã¦ã„ã¾ã™ã€‚dracutã¨initramfsを作æˆã—ã¦ã„ã¾ã™ã€‚ディスプレイマãƒãƒ¼ã‚¸ãƒ£ã®è¨­å®šãŒä¸å®Œå…¨ã§ã™Dummy python job.Dummy python step {}unsquashfs ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ squashfs-toolsãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ã‹ã€ç¢ºèªã—ã¦ãã ã•ã„。ターゲット上㧠dracut ã®å®Ÿè¡Œã«å¤±æ•—イメージ "{}" ã®å±•é–‹ã«å¤±æ•—ãƒ•ã‚¡ã‚¤ãƒ«ã‚·ã‚¹ãƒ†ãƒ ã«æ›¸ã込んã§ã„ã¾ã™ã€‚ブートローダーをインストールパッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ãƒ‡ãƒ¼ã‚¿ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã€‚ %(num)d パッケージをインストールã—ã¦ã„ã¾ã™ã€‚KDM 設定ファイル {!s} ãŒå­˜åœ¨ã—ã¾ã›ã‚“LXDM 設定ファイル {!s} ãŒå­˜åœ¨ã—ã¾ã›ã‚“LightDM 設定ファイル {!s} ãŒå­˜åœ¨ã—ã¾ã›ã‚“パーティションã®ãƒžã‚¦ãƒ³ãƒˆã€‚LightDM greeter ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã¾ã›ã‚“。ディスプレイマãƒãƒ¼ã‚¸ãƒ£ãŒé¸æŠžã•れã¦ã„ã¾ã›ã‚“。ルートパーティションã®ãŸã‚ã®ãƒžã‚¦ãƒ³ãƒˆãƒã‚¤ãƒ³ãƒˆãŒã‚りã¾ã›ã‚“
{!s}
ã«ä½¿ç”¨ã™ã‚‹ãƒ‘ーティションãŒå®šç¾©ã•れã¦ã„ã¾ã›ã‚“。
{!s}
を使用ã™ã‚‹ã®ã«ãƒ«ãƒ¼ãƒˆãƒžã‚¦ãƒ³ãƒˆãƒã‚¤ãƒ³ãƒˆãŒä¸Žãˆã‚‰ã‚Œã¦ã„ã¾ã›ã‚“。パッケージを処ç†ã—ã¦ã„ã¾ã™ (%(count)d / %(total)d)ターゲットシステムã‹ã‚‰liveユーザーを消去 %(num)d パッケージを削除ã—ã¦ã„ã¾ã™ã€‚SLIM 設定ファイル {!s} ãŒå­˜åœ¨ã—ã¾ã›ã‚“ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯è¨­å®šã‚’ä¿å­˜ã—ã¦ã„ã¾ã™ã€‚ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚¯ãƒ­ãƒƒã‚¯ã®è¨­å®šã‚¿ãƒ¼ã‚²ãƒƒãƒˆã¨ã™ã‚‹ãƒ©ãƒ³ãƒ¬ãƒ™ãƒ«ã¯å­˜åœ¨ã—ã¾ã›ã‚“ターゲットã¨ã™ã‚‹ã‚µãƒ¼ãƒ“スã¯å­˜åœ¨ã—ã¾ã›ã‚“ターゲットシステムã®å®›å…ˆ "{}" ã¯ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã§ã¯ã‚りã¾ã›ã‚“ディスプレイマãƒãƒ¼ã‚¸ãƒ£ã®ãƒªã‚¹ãƒˆãŒ bothglobalstorage åŠã³ displaymanager.conf 内ã§ç©ºç™½ã‹æœªå®šç¾©ã§ã™ã€‚åœæ­¢ã‚³ãƒ¼ãƒ‰ã¯ {} ã§ã—ãŸãƒ•ァイルシステム "{}" ({}) ã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“ランレベル {level!s} ã®ãƒ‘ス㌠{path!s} ã§ã™ã€‚ã“れã¯å­˜åœ¨ã—ã¾ã›ã‚“。サービス {name!s} ã®ãƒ‘ス㌠{path!s} ã§ã™ã€‚ã“れã¯å­˜åœ¨ã—ã¾ã›ã‚“。ソースファイルシステム "{}" ã¯å­˜åœ¨ã—ã¾ã›ã‚“ランレベル {level!s} 内ã®ã‚µãƒ¼ãƒ“ス {name!s} ã«å¯¾ã™ã‚‹æœªçŸ¥ã®ã‚µãƒ¼ãƒ“スアクション {arg!s}。ユニット {name!s} ã«å¯¾ã™ã‚‹æœªçŸ¥ã® systemd コマンド {command!s} 㨠{suffix!s}。ファイルシステムをアンマウント。fstabを書ã込んã§ã„ã¾ã™ã€‚globalstorage ã« "rootMountPoint" キーãŒå«ã¾ã‚Œã¦ã„ã¾ã›ã‚“。何もã—ã¾ã›ã‚“。ルートマウントãƒã‚¤ãƒ³ãƒˆã¯ "{}" ã§ã™ãŒã€å­˜åœ¨ã—ã¾ã›ã‚“。何もã§ãã¾ã›ã‚“。エラーコード {} ã«ã‚ˆã‚Šrsyncを失敗。calamares-3.2.20/lang/python/ja/LC_MESSAGES/python.po000066400000000000000000000315521362604102500220350ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # ブラシックデービッド, 2019 # Takefumi Nagata, 2019 # UTUMI Hirosi , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: UTUMI Hirosi , 2019\n" "Language-Team: Japanese (https://www.transifex.com/calamares/teams/20061/ja/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ja\n" "Plural-Forms: nplurals=1; plural=0;\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "GRUBを設定ã«ã—ã¾ã™ã€‚" #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "パーティションã®ãƒžã‚¦ãƒ³ãƒˆã€‚" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "コンフィグレーションエラー" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "
{!s}
ã«ä½¿ç”¨ã™ã‚‹ãƒ‘ーティションãŒå®šç¾©ã•れã¦ã„ã¾ã›ã‚“。" #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "systemdサービスを設定" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "サービスãŒå¤‰æ›´ã§ãã¾ã›ã‚“" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" "chroot ã§ systemctl {arg!s} を呼ã³å‡ºã™ã¨ã€ã‚¨ãƒ©ãƒ¼ã‚³ãƒ¼ãƒ‰ {num!s} ãŒè¿”ã•れã¾ã—ãŸã€‚" #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "{name!s}ã¨ã„ã†systemdサービスãŒå¯èƒ½ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“" #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "systemd ã§ã‚¿ãƒ¼ã‚²ãƒƒãƒˆ {name!s}ãŒé–‹å§‹ã§ãã¾ã›ã‚“。" #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "systemd ã§ã‚¿ãƒ¼ã‚²ãƒƒãƒˆ {name!s}ãŒåœæ­¢ã§ãã¾ã›ã‚“。" #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "systemd ユニット {name!s} をマスクã§ãã¾ã›ã‚“。" #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "ユニット {name!s} ã«å¯¾ã™ã‚‹æœªçŸ¥ã® systemd コマンド {command!s} 㨠" "{suffix!s}。" #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "ファイルシステムをアンマウント。" #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "ãƒ•ã‚¡ã‚¤ãƒ«ã‚·ã‚¹ãƒ†ãƒ ã«æ›¸ã込んã§ã„ã¾ã™ã€‚" #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "エラーコード {} ã«ã‚ˆã‚Šrsyncを失敗。" #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "イメージ \"{}\" ã®å±•é–‹ã«å¤±æ•—" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "unsquashfs ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ squashfs-toolsãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ã‹ã€ç¢ºèªã—ã¦ãã ã•ã„。" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "ルートパーティションã®ãŸã‚ã®ãƒžã‚¦ãƒ³ãƒˆãƒã‚¤ãƒ³ãƒˆãŒã‚りã¾ã›ã‚“" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "globalstorage ã« \"rootMountPoint\" キーãŒå«ã¾ã‚Œã¦ã„ã¾ã›ã‚“。何もã—ã¾ã›ã‚“。" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "ルートパーティションã®ãŸã‚ã®ãƒžã‚¦ãƒ³ãƒˆãƒã‚¤ãƒ³ãƒˆãŒä¸æ­£ã§ã™" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "ルートマウントãƒã‚¤ãƒ³ãƒˆã¯ \"{}\" ã§ã™ãŒã€å­˜åœ¨ã—ã¾ã›ã‚“。何もã§ãã¾ã›ã‚“。" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "unsquash ã®è¨­å®šãŒä¸æ­£ã§ã™" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "ファイルシステム \"{}\" ({}) ã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "ソースファイルシステム \"{}\" ã¯å­˜åœ¨ã—ã¾ã›ã‚“" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "ターゲットシステムã®å®›å…ˆ \"{}\" ã¯ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã§ã¯ã‚りã¾ã›ã‚“" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "KDMã®è¨­å®šãƒ•ã‚¡ã‚¤ãƒ«ã«æ›¸ãè¾¼ã¿ãŒã§ãã¾ã›ã‚“" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "KDM 設定ファイル {!s} ãŒå­˜åœ¨ã—ã¾ã›ã‚“" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "LXDMã®è¨­å®šãƒ•ã‚¡ã‚¤ãƒ«ã«æ›¸ãè¾¼ã¿ãŒã§ãã¾ã›ã‚“" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "LXDM 設定ファイル {!s} ãŒå­˜åœ¨ã—ã¾ã›ã‚“" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "LightDMã®è¨­å®šãƒ•ã‚¡ã‚¤ãƒ«ã«æ›¸ãè¾¼ã¿ãŒã§ãã¾ã›ã‚“" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "LightDM 設定ファイル {!s} ãŒå­˜åœ¨ã—ã¾ã›ã‚“" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "LightDMã®è¨­å®šãŒã§ãã¾ã›ã‚“" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "LightDM greeter ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã¾ã›ã‚“。" #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "SLIMã®è¨­å®šãƒ•ã‚¡ã‚¤ãƒ«ã«æ›¸ãè¾¼ã¿ãŒã§ãã¾ã›ã‚“" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "SLIM 設定ファイル {!s} ãŒå­˜åœ¨ã—ã¾ã›ã‚“" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "ディスプレイマãƒãƒ¼ã‚¸ãƒ£ãŒé¸æŠžã•れã¦ã„ã¾ã›ã‚“。" #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "ディスプレイマãƒãƒ¼ã‚¸ãƒ£ã®ãƒªã‚¹ãƒˆãŒ bothglobalstorage åŠã³ displaymanager.conf 内ã§ç©ºç™½ã‹æœªå®šç¾©ã§ã™ã€‚" #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "ディスプレイマãƒãƒ¼ã‚¸ãƒ£ã®è¨­å®šãŒä¸å®Œå…¨ã§ã™" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "mkinitcpioを設定ã—ã¦ã„ã¾ã™ã€‚" #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "
{!s}
を使用ã™ã‚‹ã®ã«ãƒ«ãƒ¼ãƒˆãƒžã‚¦ãƒ³ãƒˆãƒã‚¤ãƒ³ãƒˆãŒä¸Žãˆã‚‰ã‚Œã¦ã„ã¾ã›ã‚“。" #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "æš—å·åŒ–ã—ãŸswapを設定ã—ã¦ã„ã¾ã™ã€‚" #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "データã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã€‚" #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "OpenRCサービスを設定" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "ランレベル {level!s} ã«ã‚µãƒ¼ãƒ“ス {name!s} ãŒè¿½åŠ ã§ãã¾ã›ã‚“。" #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "ランレベル {level!s} ã‹ã‚‰ã‚µãƒ¼ãƒ“ス {name!s} ãŒå‰Šé™¤ã§ãã¾ã›ã‚“。" #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" "ランレベル {level!s} 内ã®ã‚µãƒ¼ãƒ“ス {name!s} ã«å¯¾ã™ã‚‹æœªçŸ¥ã®ã‚µãƒ¼ãƒ“スアクション {arg!s}。" #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "chrootã§ rc-update {arg!s} を呼ã³å‡ºã™ã¨ã‚¨ãƒ©ãƒ¼ã‚³ãƒ¼ãƒ‰ {num!s} ãŒè¿”ã•れã¾ã—ãŸã€‚" #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "ターゲットã¨ã™ã‚‹ãƒ©ãƒ³ãƒ¬ãƒ™ãƒ«ã¯å­˜åœ¨ã—ã¾ã›ã‚“" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "ランレベル {level!s} ã®ãƒ‘ス㌠{path!s} ã§ã™ã€‚ã“れã¯å­˜åœ¨ã—ã¾ã›ã‚“。" #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "ターゲットã¨ã™ã‚‹ã‚µãƒ¼ãƒ“スã¯å­˜åœ¨ã—ã¾ã›ã‚“" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "サービス {name!s} ã®ãƒ‘ス㌠{path!s} ã§ã™ã€‚ã“れã¯å­˜åœ¨ã—ã¾ã›ã‚“。" #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "Plymouthテーマを設定" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "パッケージを処ç†ã—ã¦ã„ã¾ã™ (%(count)d / %(total)d)" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "パッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] " %(num)d パッケージをインストールã—ã¦ã„ã¾ã™ã€‚" #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] " %(num)d パッケージを削除ã—ã¦ã„ã¾ã™ã€‚" #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "ブートローダーをインストール" #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "ターゲットシステムã‹ã‚‰liveユーザーを消去" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚¯ãƒ­ãƒƒã‚¯ã®è¨­å®š" #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "dracutã¨initramfsを作æˆã—ã¦ã„ã¾ã™ã€‚" #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "ターゲット上㧠dracut ã®å®Ÿè¡Œã«å¤±æ•—" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "åœæ­¢ã‚³ãƒ¼ãƒ‰ã¯ {} ã§ã—ãŸ" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "initramfsを設定ã—ã¦ã„ã¾ã™ã€‚" #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "OpenRC dmcryptサービスを設定ã—ã¦ã„ã¾ã™ã€‚" #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "fstabを書ã込んã§ã„ã¾ã™ã€‚" #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "Dummy python job." #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "Dummy python step {}" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "ロケールを設定ã—ã¦ã„ã¾ã™ã€‚" #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯è¨­å®šã‚’ä¿å­˜ã—ã¦ã„ã¾ã™ã€‚" calamares-3.2.20/lang/python/kk/000077500000000000000000000000001362604102500163745ustar00rootroot00000000000000calamares-3.2.20/lang/python/kk/LC_MESSAGES/000077500000000000000000000000001362604102500201615ustar00rootroot00000000000000calamares-3.2.20/lang/python/kk/LC_MESSAGES/python.mo000066400000000000000000000005711362604102500220420ustar00rootroot00000000000000Þ•$,8?9Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Language-Team: Kazakh (https://www.transifex.com/calamares/teams/20061/kk/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: kk Plural-Forms: nplurals=2; plural=(n!=1); calamares-3.2.20/lang/python/kk/LC_MESSAGES/python.po000066400000000000000000000210651362604102500220460ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Kazakh (https://www.transifex.com/calamares/teams/20061/kk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: kk\n" "Plural-Forms: nplurals=2; plural=(n!=1);\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "" #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "" #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "" #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "" #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "" calamares-3.2.20/lang/python/kn/000077500000000000000000000000001362604102500163775ustar00rootroot00000000000000calamares-3.2.20/lang/python/kn/LC_MESSAGES/000077500000000000000000000000001362604102500201645ustar00rootroot00000000000000calamares-3.2.20/lang/python/kn/LC_MESSAGES/python.mo000066400000000000000000000005731362604102500220470ustar00rootroot00000000000000Þ•$,8A9Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Language-Team: Kannada (https://www.transifex.com/calamares/teams/20061/kn/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: kn Plural-Forms: nplurals=2; plural=(n > 1); calamares-3.2.20/lang/python/kn/LC_MESSAGES/python.po000066400000000000000000000210671362604102500220530ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Kannada (https://www.transifex.com/calamares/teams/20061/kn/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: kn\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "" #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "" #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "" #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "" #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "" calamares-3.2.20/lang/python/ko/000077500000000000000000000000001362604102500164005ustar00rootroot00000000000000calamares-3.2.20/lang/python/ko/LC_MESSAGES/000077500000000000000000000000001362604102500201655ustar00rootroot00000000000000calamares-3.2.20/lang/python/ko/LC_MESSAGES/python.mo000066400000000000000000000202121362604102500220400ustar00rootroot00000000000000Þ•FLa|JJL"—º3Õ 4"4W3Œ/Àð8#?$c'ˆ$°Õéù , #G k ‡ ž ³ Ë ,ë  * R? "’ µ Ñ é ý  4 #U $y 'ž Æ Û ;ù !5 5W 8 +Æ #ò 0 $G l Š ¢ Á <ß \y-ŽO¼M )ZX„`Ý>TDc;¨ är`xcÙ5=sH&ÖKýMIH—Ià!*QL*ž,É.ö$% J Xd|—$°Õõ +5Aa£¼l×*D3o"£ÆÛù8'G(o+˜Ä0ÝT2cB–OÙ+)1U8‡!Àâ-".PCqÃ5:FF^È9'narÐ.C rv€a÷0Y C>5B4<F 8 6?!&-'. A;*D$ 192 #@,7(3" :0+/E%)=rc-update {arg!s} call in chroot returned error code {num!s}.systemctl {arg!s} call in chroot returned error code {num!s}.Bad mount point for root partitionBad unsquash configurationCannot add service {name!s} to run-level {level!s}.Cannot configure LightDMCannot disable systemd target {name!s}.Cannot enable systemd service {name!s}.Cannot enable systemd target {name!s}.Cannot mask systemd unit {name!s}.Cannot modify serviceCannot remove service {name!s} from run-level {level!s}.Cannot write KDM configuration fileCannot write LXDM configuration fileCannot write LightDM configuration fileCannot write SLIM configuration fileConfiguration ErrorConfigure GRUB.Configure OpenRC servicesConfigure Plymouth themeConfigure systemd servicesConfiguring OpenRC dmcrypt service.Configuring encrypted swap.Configuring initramfs.Configuring locales.Configuring mkinitcpio.Creating initramfs with dracut.Display manager configuration was incompleteDummy python job.Dummy python step {}Failed to find unsquashfs, make sure you have the squashfs-tools package installedFailed to run dracut on the targetFailed to unpack image "{}"Filling up filesystems.Install bootloader.Install packages.Installing data.Installing one package.Installing %(num)d packages.KDM config file {!s} does not existLXDM config file {!s} does not existLightDM config file {!s} does not existMounting partitions.No LightDM greeter installed.No display managers selected for the displaymanager module.No mount point for root partitionNo partitions are defined for
{!s}
to use.No root mount point is given for
{!s}
to use.Processing packages (%(count)d / %(total)d)Remove live user from target systemRemoving one package.Removing %(num)d packages.SLIM config file {!s} does not existSaving network configuration.Setting hardware clock.Target runlevel does not existTarget service does not existThe destination "{}" in the target system is not a directoryThe displaymanagers list is empty or undefined in bothglobalstorage and displaymanager.conf.The exit code was {}The filesystem for "{}" ({}) is not supportedThe path for runlevel {level!s} is {path!s}, which does not exist.The path for service {name!s} is {path!s}, which does not exist.The source filesystem "{}" does not existUnknown service-action {arg!s} for service {name!s} in run-level {level!s}.Unknown systemd commands {command!s} and {suffix!s} for unit {name!s}.Unmount file systems.Writing fstab.globalstorage does not contain a "rootMountPoint" key, doing nothingrootMountPoint is "{}", which does not exist, doing nothingrsync failed with error code {}.Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Last-Translator: MarongHappy , 2019 Language-Team: Korean (https://www.transifex.com/calamares/teams/20061/ko/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: ko Plural-Forms: nplurals=1; plural=0; chrootì˜ rc-update {arg!s} í˜¸ì¶œì´ ì˜¤ë¥˜ 코드 {num!s}를 반환 했습니다.chrootì—서 systemctl {arg!s} 호출ì—서오류 코드 {num}를 반환 했습니다.루트 íŒŒí‹°ì…˜ì— ëŒ€í•œ ìž˜ëª»ëœ ë§ˆìš´íŠ¸ ìœ„ì¹˜ìž˜ëª»ëœ unsquash 구성run-level {level!s}ì— {name!s} 서비스를 추가할 수 없습니다.LightDMì„ êµ¬ì„±í•  수 없습니다.systemd ëŒ€ìƒ {name! s}를 비활성화 í•  수 없습니다.{name! s} 시스템 서비스를 활성화 í•  수 없습니다.systemd ëŒ€ìƒ {name! s}를 활성화 í•  수 없습니다.시스템 유닛 {name! s}를 마스í¬í•  수 없습니다.서비스를 수정할 수 ì—†ìŒì‹¤í–‰-수준 {level! s}ì—서 서비스 {name! s}를 제거할 수 없습니다.KDM 구성 파ì¼ì„ 쓸 수 없습니다.LMLDM 구성 파ì¼ì„ 쓸 수 없습니다.LightDM 구성 파ì¼ì„ 쓸 수 없습니다.SLIM 구성 파ì¼ì„ 쓸 수 ì—†ìŒêµ¬ì„± 오류GRUB 구성OpenRC 서비스 구성플리머스 테마 구성systemd 서비스 구성OpenRC dmcrypt 서비스 구성 중.ì•”í˜¸í™”ëœ ìŠ¤ì™‘ 구성 중.initramfs 구성 중.로컬 구성 중.mkinitcpio 구성 중.dracutì„ ì‚¬ìš©í•˜ì—¬ initramfs 만들기.ë””ìŠ¤í”Œë ˆì´ ê´€ë¦¬ìž êµ¬ì„±ì´ ì™„ë£Œë˜ì§€ 않았습니다.ë”미 파ì´ì¬ 작업.ë”미 파ì´ì¬ 단계 {}unsquashfs를 찾지 못했습니다. squashfs-tools 패키지가 설치ë˜ì–´ 있는지 확ì¸í•˜ì‹­ì‹œì˜¤.대ìƒì—서 dracutì„ ì‹¤í–‰í•˜ì§€ 못함"{}" ì´ë¯¸ì§€ì˜ ì••ì¶•ì„ í’€ì§€ 못했습니다.íŒŒì¼ ì‹œìŠ¤í…œì„ ì±„ìš°ëŠ” 중.ë¶€íŠ¸ë¡œë” ì„¤ì¹˜.패키지를 설치합니다.ë°ì´í„° 설치중.%(num)dê°œì˜ íŒ¨í‚¤ì§€ë“¤ì„ ì„¤ì¹˜í•˜ëŠ” 중입니다.KDM 구성 íŒŒì¼ {! s}ê°€ 없습니다LXDM 구성 íŒŒì¼ {!s}ì´ ì—†ìŠµë‹ˆë‹¤.LightDM 구성 íŒŒì¼ {!s}ê°€ 없습니다.파티션 마운트 중.LightDM greeterê°€ 설치ë˜ì§€ 않았습니다.displaymanager ëª¨ë“ˆì— ëŒ€í•´ ì„ íƒëœ ë””ìŠ¤í”Œë ˆì´ ê´€ë¦¬ìžê°€ 없습니다.루트 íŒŒí‹°ì…˜ì— ëŒ€í•œ 마운트 위치 ì—†ìŒì‚¬ìš©í• 
{!s}
ì— ëŒ€í•´ ì •ì˜ëœ íŒŒí‹°ì…˜ì´ ì—†ìŒ.
{!s}
ì—서 사용할 루트 마운트 ì§€ì ì´ 제공ë˜ì§€ 않ìŒ.패키지 처리중 (%(count)d / %(total)d)ëŒ€ìƒ ì‹œìŠ¤í…œì—서 ë¼ì´ë¸Œ ì‚¬ìš©ìž ì œê±°%(num)dê°œì˜ íŒ¨í‚¤ì§€ë“¤ì„ ì œê±°í•˜ëŠ” 중입니다.SLIM 구성 íŒŒì¼ {!s}ê°€ ì—†ìŒë„¤íŠ¸ì›Œí¬ êµ¬ì„± 저장 중.하드웨어 í´ëŸ­ 설정 중.runlevel 대ìƒì´ 존재하지 않습니다.ëŒ€ìƒ ì„œë¹„ìŠ¤ê°€ 존재하지 않습니다.ëŒ€ìƒ ì‹œìŠ¤í…œì˜ "{}" 목ì ì§€ê°€ 디렉토리가 아닙니다.displaymanagers 목ë¡ì€ globalstorage ë° displaymanager.confì—서 비어 있거나 ì •ì˜ë˜ì§€ 않습니다.종료 코드 {}"{}" ({})ì˜ íŒŒì¼ì‹œìŠ¤í…œì€ ì§€ì›ë˜ì§€ 않습니다.runlevel {level!s}ì˜ ê²½ë¡œëŠ” 존재하지 않는 {path!s}입니다.{name!s} ì„œë¹„ìŠ¤ì— ëŒ€í•œ 경로는 {path!s}ì´ê³ , 존재하지 않습니다."{}" 소스 파ì¼ì‹œìŠ¤í…œì€ ì¡´ìž¬í•˜ì§€ 않습니다.run-level {level!s}ì˜ service {name!s}ì— ëŒ€í•´ 알 수 없는 service-action {arg!s}입니다.유닛 {name! s}ì— ëŒ€í•´ 알 수 없는 시스템 명령 {command! s} ë° {suffix! s}.íŒŒì¼ ì‹œìŠ¤í…œ 마운트를 해제합니다.fstab 쓰기.globalstorageì—는 "rootMountPoint " 키가 í¬í•¨ë˜ì–´ 있지 않으며 아무 ìž‘ì—…ë„ ìˆ˜í–‰í•˜ì§€ 않습니다.rootMountPoint는 "{}"ì´ê³ , 존재하지 않으며, 아무 ìž‘ì—…ë„ ìˆ˜í–‰í•˜ì§€ 않습니다.rsyncê°€ {} 오류 코드로 실패했습니다.calamares-3.2.20/lang/python/ko/LC_MESSAGES/python.po000066400000000000000000000302411362604102500220460ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # 김지현 , 2018 # MarongHappy , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: MarongHappy , 2019\n" "Language-Team: Korean (https://www.transifex.com/calamares/teams/20061/ko/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ko\n" "Plural-Forms: nplurals=1; plural=0;\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "GRUB 구성" #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "파티션 마운트 중." #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "구성 오류" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "사용할
{!s}
ì— ëŒ€í•´ ì •ì˜ëœ íŒŒí‹°ì…˜ì´ ì—†ìŒ." #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "systemd 서비스 구성" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "서비스를 수정할 수 ì—†ìŒ" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "chrootì—서 systemctl {arg!s} 호출ì—서오류 코드 {num}를 반환 했습니다." #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "{name! s} 시스템 서비스를 활성화 í•  수 없습니다." #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "systemd ëŒ€ìƒ {name! s}를 활성화 í•  수 없습니다." #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "systemd ëŒ€ìƒ {name! s}를 비활성화 í•  수 없습니다." #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "시스템 유닛 {name! s}를 마스í¬í•  수 없습니다." #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "유닛 {name! s}ì— ëŒ€í•´ 알 수 없는 시스템 명령 {command! s} ë° {suffix! " "s}." #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "íŒŒì¼ ì‹œìŠ¤í…œ 마운트를 해제합니다." #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "íŒŒì¼ ì‹œìŠ¤í…œì„ ì±„ìš°ëŠ” 중." #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "rsyncê°€ {} 오류 코드로 실패했습니다." #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "\"{}\" ì´ë¯¸ì§€ì˜ ì••ì¶•ì„ í’€ì§€ 못했습니다." #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "unsquashfs를 찾지 못했습니다. squashfs-tools 패키지가 설치ë˜ì–´ 있는지 확ì¸í•˜ì‹­ì‹œì˜¤." #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "루트 íŒŒí‹°ì…˜ì— ëŒ€í•œ 마운트 위치 ì—†ìŒ" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "globalstorageì—는 \"rootMountPoint \" 키가 í¬í•¨ë˜ì–´ 있지 않으며 아무 ìž‘ì—…ë„ ìˆ˜í–‰í•˜ì§€ 않습니다." #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "루트 íŒŒí‹°ì…˜ì— ëŒ€í•œ ìž˜ëª»ëœ ë§ˆìš´íŠ¸ 위치" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "rootMountPoint는 \"{}\"ì´ê³ , 존재하지 않으며, 아무 ìž‘ì—…ë„ ìˆ˜í–‰í•˜ì§€ 않습니다." #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "ìž˜ëª»ëœ unsquash 구성" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "\"{}\" ({})ì˜ íŒŒì¼ì‹œìŠ¤í…œì€ ì§€ì›ë˜ì§€ 않습니다." #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "\"{}\" 소스 파ì¼ì‹œìŠ¤í…œì€ ì¡´ìž¬í•˜ì§€ 않습니다." #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "ëŒ€ìƒ ì‹œìŠ¤í…œì˜ \"{}\" 목ì ì§€ê°€ 디렉토리가 아닙니다." #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "KDM 구성 파ì¼ì„ 쓸 수 없습니다." #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "KDM 구성 íŒŒì¼ {! s}ê°€ 없습니다" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "LMLDM 구성 파ì¼ì„ 쓸 수 없습니다." #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "LXDM 구성 íŒŒì¼ {!s}ì´ ì—†ìŠµë‹ˆë‹¤." #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "LightDM 구성 파ì¼ì„ 쓸 수 없습니다." #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "LightDM 구성 íŒŒì¼ {!s}ê°€ 없습니다." #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "LightDMì„ êµ¬ì„±í•  수 없습니다." #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "LightDM greeterê°€ 설치ë˜ì§€ 않았습니다." #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "SLIM 구성 파ì¼ì„ 쓸 수 ì—†ìŒ" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "SLIM 구성 íŒŒì¼ {!s}ê°€ ì—†ìŒ" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "displaymanager ëª¨ë“ˆì— ëŒ€í•´ ì„ íƒëœ ë””ìŠ¤í”Œë ˆì´ ê´€ë¦¬ìžê°€ 없습니다." #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" "displaymanagers 목ë¡ì€ globalstorage ë° displaymanager.confì—서 비어 있거나 ì •ì˜ë˜ì§€ 않습니다." #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "ë””ìŠ¤í”Œë ˆì´ ê´€ë¦¬ìž êµ¬ì„±ì´ ì™„ë£Œë˜ì§€ 않았습니다." #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "mkinitcpio 구성 중." #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "
{!s}
ì—서 사용할 루트 마운트 ì§€ì ì´ 제공ë˜ì§€ 않ìŒ." #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "ì•”í˜¸í™”ëœ ìŠ¤ì™‘ 구성 중." #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "ë°ì´í„° 설치중." #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "OpenRC 서비스 구성" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "run-level {level!s}ì— {name!s} 서비스를 추가할 수 없습니다." #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "실행-수준 {level! s}ì—서 서비스 {name! s}를 제거할 수 없습니다." #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" "run-level {level!s}ì˜ service {name!s}ì— ëŒ€í•´ 알 수 없는 service-action " "{arg!s}입니다." #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "chrootì˜ rc-update {arg!s} í˜¸ì¶œì´ ì˜¤ë¥˜ 코드 {num!s}를 반환 했습니다." #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "runlevel 대ìƒì´ 존재하지 않습니다." #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "runlevel {level!s}ì˜ ê²½ë¡œëŠ” 존재하지 않는 {path!s}입니다." #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "ëŒ€ìƒ ì„œë¹„ìŠ¤ê°€ 존재하지 않습니다." #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "{name!s} ì„œë¹„ìŠ¤ì— ëŒ€í•œ 경로는 {path!s}ì´ê³ , 존재하지 않습니다." #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "플리머스 테마 구성" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "패키지 처리중 (%(count)d / %(total)d)" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "패키지를 설치합니다." #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "%(num)dê°œì˜ íŒ¨í‚¤ì§€ë“¤ì„ ì„¤ì¹˜í•˜ëŠ” 중입니다." #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "%(num)dê°œì˜ íŒ¨í‚¤ì§€ë“¤ì„ ì œê±°í•˜ëŠ” 중입니다." #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "ë¶€íŠ¸ë¡œë” ì„¤ì¹˜." #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "ëŒ€ìƒ ì‹œìŠ¤í…œì—서 ë¼ì´ë¸Œ ì‚¬ìš©ìž ì œê±°" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "하드웨어 í´ëŸ­ 설정 중." #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "dracutì„ ì‚¬ìš©í•˜ì—¬ initramfs 만들기." #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "대ìƒì—서 dracutì„ ì‹¤í–‰í•˜ì§€ 못함" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "종료 코드 {}" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "initramfs 구성 중." #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "OpenRC dmcrypt 서비스 구성 중." #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "fstab 쓰기." #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "ë”미 파ì´ì¬ 작업." #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "ë”미 파ì´ì¬ 단계 {}" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "로컬 구성 중." #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "ë„¤íŠ¸ì›Œí¬ êµ¬ì„± 저장 중." calamares-3.2.20/lang/python/lo/000077500000000000000000000000001362604102500164015ustar00rootroot00000000000000calamares-3.2.20/lang/python/lo/LC_MESSAGES/000077500000000000000000000000001362604102500201665ustar00rootroot00000000000000calamares-3.2.20/lang/python/lo/LC_MESSAGES/python.mo000066400000000000000000000005611362604102500220460ustar00rootroot00000000000000Þ•$,879Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Language-Team: Lao (https://www.transifex.com/calamares/teams/20061/lo/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: lo Plural-Forms: nplurals=1; plural=0; calamares-3.2.20/lang/python/lo/LC_MESSAGES/python.po000066400000000000000000000210231362604102500220450ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Lao (https://www.transifex.com/calamares/teams/20061/lo/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: lo\n" "Plural-Forms: nplurals=1; plural=0;\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "" #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "" #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "" #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "" #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "" calamares-3.2.20/lang/python/lt/000077500000000000000000000000001362604102500164065ustar00rootroot00000000000000calamares-3.2.20/lang/python/lt/LC_MESSAGES/000077500000000000000000000000001362604102500201735ustar00rootroot00000000000000calamares-3.2.20/lang/python/lt/LC_MESSAGES/python.mo000066400000000000000000000202041362604102500220470ustar00rootroot00000000000000Þ•FLa|JJL"—º3Õ 4"4W3Œ/Àð8#?$c'ˆ$°Õéù , #G k ‡ ž ³ Ë ,ë  * R? "’ µ Ñ é ý  4 #U $y 'ž Æ Û ;ù !5 5W 8 +Æ #ò 0 $G l Š ¢ Á <ß \y-ŽO¼M )ZX„`Ý>TDc;¨ ä YYm,ÇôD W>x;·=ó:1lFŒ/Ó0340h™°Äâÿ'1Fx“®%Ê/ð :SW+«&×þ1CpX$É%î(=)UF+ÆHòV;*’:½lø%e ‹*¬ ×øGvZÑ,éUMl(ºiãbM°ÊEÙ8 +X C>5B4<F 8 6?!&-'. A;*D$ 192 #@,7(3" :0+/E%)=rc-update {arg!s} call in chroot returned error code {num!s}.systemctl {arg!s} call in chroot returned error code {num!s}.Bad mount point for root partitionBad unsquash configurationCannot add service {name!s} to run-level {level!s}.Cannot configure LightDMCannot disable systemd target {name!s}.Cannot enable systemd service {name!s}.Cannot enable systemd target {name!s}.Cannot mask systemd unit {name!s}.Cannot modify serviceCannot remove service {name!s} from run-level {level!s}.Cannot write KDM configuration fileCannot write LXDM configuration fileCannot write LightDM configuration fileCannot write SLIM configuration fileConfiguration ErrorConfigure GRUB.Configure OpenRC servicesConfigure Plymouth themeConfigure systemd servicesConfiguring OpenRC dmcrypt service.Configuring encrypted swap.Configuring initramfs.Configuring locales.Configuring mkinitcpio.Creating initramfs with dracut.Display manager configuration was incompleteDummy python job.Dummy python step {}Failed to find unsquashfs, make sure you have the squashfs-tools package installedFailed to run dracut on the targetFailed to unpack image "{}"Filling up filesystems.Install bootloader.Install packages.Installing data.Installing one package.Installing %(num)d packages.KDM config file {!s} does not existLXDM config file {!s} does not existLightDM config file {!s} does not existMounting partitions.No LightDM greeter installed.No display managers selected for the displaymanager module.No mount point for root partitionNo partitions are defined for
{!s}
to use.No root mount point is given for
{!s}
to use.Processing packages (%(count)d / %(total)d)Remove live user from target systemRemoving one package.Removing %(num)d packages.SLIM config file {!s} does not existSaving network configuration.Setting hardware clock.Target runlevel does not existTarget service does not existThe destination "{}" in the target system is not a directoryThe displaymanagers list is empty or undefined in bothglobalstorage and displaymanager.conf.The exit code was {}The filesystem for "{}" ({}) is not supportedThe path for runlevel {level!s} is {path!s}, which does not exist.The path for service {name!s} is {path!s}, which does not exist.The source filesystem "{}" does not existUnknown service-action {arg!s} for service {name!s} in run-level {level!s}.Unknown systemd commands {command!s} and {suffix!s} for unit {name!s}.Unmount file systems.Writing fstab.globalstorage does not contain a "rootMountPoint" key, doing nothingrootMountPoint is "{}", which does not exist, doing nothingrsync failed with error code {}.Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Last-Translator: Mindaugas , 2019 Language-Team: Lithuanian (https://www.transifex.com/calamares/teams/20061/lt/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: lt Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3); rc-update {arg!s} iškvieta, esanti chroot, grąžino klaidos kodą {num!s}.systemctl {arg!s} iškvieta, esanti chroot, grąžino klaidos kodą {num!s}.Blogas šaknies skaidinio prijungimo taškasBloga unsquash konfigūracijaNepavyksta pridėti tarnybą {name!s} į vykdymo lygmenį {level!s}.Nepavyksta konfigūruoti LightDMNepavyksta išjungti systemd paskirties {name!s}.Nepavyksta įjungti systemd tarnybos {name!s}.Nepavyksta įjungti systemd paskirties {name!s}.Nepavyksta maskuoti systemd įtaiso {name!s}.Nepavyksta modifikuoti tarnybosNepavyksta pašalinti tarnybą {name!s} iš vykdymo lygmens {level!s}.Nepavyksta įrašyti KDM konfigūracijos failąNepavyksta įrašyti LXDM konfigūracijos failąNepavyksta įrašyti LightDM konfigūracijos failąNepavyksta įrašyti SLIM konfigūracijos failąKonfigūracijos klaidaKonfigūruoti GRUB.Konfigūruoti OpenRC tarnybasKonfigūruoti Plymouth temąKonfigūruoti systemd tarnybasKonfigūruojama OpenRC dmcrypt tarnyba.Konfigūruojamas šifruotas sukeitimų skaidinys.Konfigūruojama initramfs.Konfigūruojamos lokalės.Konfigūruojama mkinitcpio.Sukuriama initramfs naudojant dracut.Ekranų tvarkytuvės konfigūracija yra nepilnaFiktyvi python užduotis.Fiktyvus python žingsnis {}Nepavyko rasti unsquashfs, įsitikinkite, kad esate įdiegę squashfs-tools paketąNepavyko paskirties vietoje paleisti dracutNepavyko išpakuoti atvaizdį „{}“Užpildomos failų sistemos.Įdiegti paleidyklę.Įdiegti paketus.Įdiegiami duomenys.Įdiegiamas %(num)d paketas.Įdiegiami %(num)d paketai.Įdiegiama %(num)d paketų.Įdiegiama %(num)d paketų.KDM konfigūracijos failo {!s} nėraLXDM konfigūracijos failo {!s} nėraLightDM konfigūracijos failo {!s} nėraPrijungiami skaidiniai.Neįdiegtas joks LightDM pasisveikinimas.Displaymanagers moduliui nėra pasirinkta jokių ekranų tvarkytuvių.Nėra prijungimo taško šaknies skaidiniuiNėra apibrėžta jokių skaidinių, skirtų
{!s}
naudojimui.Nėra nurodyta jokių šaknies prijungimo taškų, skirtų
{!s}
naudojimui.Apdorojami paketai (%(count)d / %(total)d)Å alinti demonstracinį naudotojÄ… iÅ¡ paskirties sistemosÅ alinamas %(num)d paketas.Å alinami %(num)d paketai.Å alinama %(num)d paketų.Å alinama %(num)d paketų.SLIM konfigÅ«racijos failo {!s} nÄ—raÄ®raÅ¡oma tinklo konfigÅ«racija.Nustatomas aparatinÄ—s įrangos laikrodis.Paskirties vykdymo lygmens nÄ—raPaskirties tarnybos nÄ—raPaskirties vieta „{}“, esanti paskirties sistemoje, nÄ—ra katalogasDisplaymanagers sÄ…raÅ¡as yra tuÅ¡Äias arba neapibrėžtas tiek bothglobalstorage, tiek ir displaymanager.conf faile.Išėjimo kodas buvo {}„{}“ ({}) failų sistema yra nepalaikomaVykdymo lygmens {level!s} kelias yra {path!s}, kurio savo ruožtu nÄ—ra.Tarnybos {name!s} kelias yra {path!s}, kurio savo ruožtu nÄ—ra.Å altinio failų sistemos „{}“ nÄ—raNežinomas tarnybos veiksmas {arg!s}, skirtas tarnybai {name!s} vykdymo lygmenyje {level!s}.Nežinomos systemd komandos {command!s} ir {suffix!s} įtaisui {name!s}.Atjungti failų sistemas.RaÅ¡oma fstab.globalstorage viduje nÄ—ra „rootMountPoint“ rakto, nieko nedaromarootMountPoint yra „{}“, kurio nÄ—ra, nieko nedaromarsync patyrÄ— nesÄ—kmÄ™ su klaidos kodu {}.calamares-3.2.20/lang/python/lt/LC_MESSAGES/python.po000066400000000000000000000303501362604102500220550ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Moo, 2019 # Mindaugas , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Mindaugas , 2019\n" "Language-Team: Lithuanian (https://www.transifex.com/calamares/teams/20061/lt/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: lt\n" "Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "KonfigÅ«ruoti GRUB." #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "Prijungiami skaidiniai." #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "KonfigÅ«racijos klaida" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "Nėra apibrėžta jokių skaidinių, skirtų
{!s}
naudojimui." #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "KonfigÅ«ruoti systemd tarnybas" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "Nepavyksta modifikuoti tarnybos" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" "systemctl {arg!s} iÅ¡kvieta, esanti chroot, grąžino klaidos kodÄ…" " {num!s}." #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "Nepavyksta įjungti systemd tarnybos {name!s}." #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "Nepavyksta įjungti systemd paskirties {name!s}." #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "Nepavyksta iÅ¡jungti systemd paskirties {name!s}." #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "Nepavyksta maskuoti systemd įtaiso {name!s}." #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "Nežinomos systemd komandos {command!s} ir " "{suffix!s} įtaisui {name!s}." #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "Atjungti failų sistemas." #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "Užpildomos failų sistemos." #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "rsync patyrÄ— nesÄ—kmÄ™ su klaidos kodu {}." #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "Nepavyko iÅ¡pakuoti atvaizdį „{}“" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "Nepavyko rasti unsquashfs, įsitikinkite, kad esate įdiegÄ™ squashfs-tools " "paketÄ…" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "NÄ—ra prijungimo taÅ¡ko Å¡aknies skaidiniui" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "globalstorage viduje nÄ—ra „rootMountPoint“ rakto, nieko nedaroma" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "Blogas Å¡aknies skaidinio prijungimo taÅ¡kas" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "rootMountPoint yra „{}“, kurio nÄ—ra, nieko nedaroma" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "Bloga unsquash konfigÅ«racija" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "„{}“ ({}) failų sistema yra nepalaikoma" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "Å altinio failų sistemos „{}“ nÄ—ra" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "Paskirties vieta „{}“, esanti paskirties sistemoje, nÄ—ra katalogas" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "Nepavyksta įraÅ¡yti KDM konfigÅ«racijos failÄ…" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "KDM konfigÅ«racijos failo {!s} nÄ—ra" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "Nepavyksta įraÅ¡yti LXDM konfigÅ«racijos failÄ…" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "LXDM konfigÅ«racijos failo {!s} nÄ—ra" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "Nepavyksta įraÅ¡yti LightDM konfigÅ«racijos failÄ…" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "LightDM konfigÅ«racijos failo {!s} nÄ—ra" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "Nepavyksta konfigÅ«ruoti LightDM" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "Neįdiegtas joks LightDM pasisveikinimas." #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "Nepavyksta įraÅ¡yti SLIM konfigÅ«racijos failÄ…" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "SLIM konfigÅ«racijos failo {!s} nÄ—ra" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "Displaymanagers moduliui nÄ—ra pasirinkta jokių ekranų tvarkytuvių." #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" "Displaymanagers sÄ…raÅ¡as yra tuÅ¡Äias arba neapibrėžtas tiek " "bothglobalstorage, tiek ir displaymanager.conf faile." #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "Ekranų tvarkytuvÄ—s konfigÅ«racija yra nepilna" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "KonfigÅ«ruojama mkinitcpio." #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" "Nėra nurodyta jokių šaknies prijungimo taškų, skirtų
{!s}
" "naudojimui." #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "KonfigÅ«ruojamas Å¡ifruotas sukeitimų skaidinys." #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "Ä®diegiami duomenys." #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "KonfigÅ«ruoti OpenRC tarnybas" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "Nepavyksta pridÄ—ti tarnybÄ… {name!s} į vykdymo lygmenį {level!s}." #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "Nepavyksta paÅ¡alinti tarnybÄ… {name!s} iÅ¡ vykdymo lygmens {level!s}." #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" "Nežinomas tarnybos veiksmas {arg!s}, skirtas tarnybai {name!s} " "vykdymo lygmenyje {level!s}." #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" "rc-update {arg!s} iÅ¡kvieta, esanti chroot, grąžino klaidos kodÄ…" " {num!s}." #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "Paskirties vykdymo lygmens nÄ—ra" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" "Vykdymo lygmens {level!s} kelias yra {path!s}, kurio savo " "ruožtu nÄ—ra." #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "Paskirties tarnybos nÄ—ra" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" "Tarnybos {name!s} kelias yra {path!s}, kurio savo ruožtu nÄ—ra." #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "KonfigÅ«ruoti Plymouth temÄ…" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Apdorojami paketai (%(count)d / %(total)d)" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "Ä®diegti paketus." #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Ä®diegiamas %(num)d paketas." msgstr[1] "Ä®diegiami %(num)d paketai." msgstr[2] "Ä®diegiama %(num)d paketų." msgstr[3] "Ä®diegiama %(num)d paketų." #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Å alinamas %(num)d paketas." msgstr[1] "Å alinami %(num)d paketai." msgstr[2] "Å alinama %(num)d paketų." msgstr[3] "Å alinama %(num)d paketų." #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "Ä®diegti paleidyklÄ™." #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "Å alinti demonstracinį naudotojÄ… iÅ¡ paskirties sistemos" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "Nustatomas aparatinÄ—s įrangos laikrodis." #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "Sukuriama initramfs naudojant dracut." #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "Nepavyko paskirties vietoje paleisti dracut" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "Išėjimo kodas buvo {}" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "KonfigÅ«ruojama initramfs." #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "KonfigÅ«ruojama OpenRC dmcrypt tarnyba." #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "RaÅ¡oma fstab." #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "Fiktyvi python užduotis." #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "Fiktyvus python žingsnis {}" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "KonfigÅ«ruojamos lokalÄ—s." #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "Ä®raÅ¡oma tinklo konfigÅ«racija." calamares-3.2.20/lang/python/mk/000077500000000000000000000000001362604102500163765ustar00rootroot00000000000000calamares-3.2.20/lang/python/mk/LC_MESSAGES/000077500000000000000000000000001362604102500201635ustar00rootroot00000000000000calamares-3.2.20/lang/python/mk/LC_MESSAGES/python.mo000066400000000000000000000036541362604102500220510ustar00rootroot00000000000000Þ• |Ü !#:$^'ƒ$«#Ð$ô'A;_$›¬À,mTšUïXEUžDôE9I>É]Ef   Cannot configure LightDMCannot write KDM configuration fileCannot write LXDM configuration fileCannot write LightDM configuration fileCannot write SLIM configuration fileKDM config file {!s} does not existLXDM config file {!s} does not existLightDM config file {!s} does not existNo LightDM greeter installed.No display managers selected for the displaymanager module.SLIM config file {!s} does not existProject-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Last-Translator: Martin Ristovski , 2018 Language-Team: Macedonian (https://www.transifex.com/calamares/teams/20061/mk/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: mk Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1; Ðе може да Ñе подеÑи LightDMKDM конфигурациониот фајл не може да Ñе ÑоздадеLXDM конфигурациониот фајл не може да Ñе ÑоздадеLightDM конфигурациониот фајл не може да Ñе ÑоздадеSLIM конфигурациониот фајл не може да Ñе ÑоздадеKDM конфигурациониот фајл {!s} не поÑтоиLXDM конфигурациониот фајл {!s} не поÑтоиLightDM конфигурациониот фајл {!s} не поÑтоиÐема инÑталирано LightDM поздравувачÐемате избрано диÑплеј менаџер за displaymanager модулот.SLIM конфигурациониот фајл {!s} не поÑтоиcalamares-3.2.20/lang/python/mk/LC_MESSAGES/python.po000066400000000000000000000230461362604102500220510ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Martin Ristovski , 2018 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Martin Ristovski , 2018\n" "Language-Team: Macedonian (https://www.transifex.com/calamares/teams/20061/mk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: mk\n" "Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "KDM конфигурациониот фајл не може да Ñе Ñоздаде" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "KDM конфигурациониот фајл {!s} не поÑтои" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "LXDM конфигурациониот фајл не може да Ñе Ñоздаде" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "LXDM конфигурациониот фајл {!s} не поÑтои" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "LightDM конфигурациониот фајл не може да Ñе Ñоздаде" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "LightDM конфигурациониот фајл {!s} не поÑтои" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "Ðе може да Ñе подеÑи LightDM" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "Ðема инÑталирано LightDM поздравувач" #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "SLIM конфигурациониот фајл не може да Ñе Ñоздаде" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "SLIM конфигурациониот фајл {!s} не поÑтои" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "Ðемате избрано диÑплеј менаџер за displaymanager модулот." #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "" #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "" #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "" #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "" #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "" calamares-3.2.20/lang/python/ml/000077500000000000000000000000001362604102500163775ustar00rootroot00000000000000calamares-3.2.20/lang/python/ml/LC_MESSAGES/000077500000000000000000000000001362604102500201645ustar00rootroot00000000000000calamares-3.2.20/lang/python/ml/LC_MESSAGES/python.mo000066400000000000000000000012311362604102500220370ustar00rootroot00000000000000Þ•4L`au„‰7RFConfiguration ErrorInstall bootloader.Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Last-Translator: Balasankar C , 2019 Language-Team: Malayalam (https://www.transifex.com/calamares/teams/20061/ml/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: ml Plural-Forms: nplurals=2; plural=(n != 1); à´•àµà´°à´®àµ€à´•രണതàµà´¤à´¿àµ½ പിഴവàµà´¬àµ‚à´Ÿàµà´Ÿàµâ€Œà´²àµ‹à´Ÿàµ¼ ഇൻസàµà´±àµà´±à´¾àµ¾ ചെയàµà´¯àµ‚ .calamares-3.2.20/lang/python/ml/LC_MESSAGES/python.po000066400000000000000000000215771362604102500220610ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Abhijith Sheheer , 2019 # Balasankar C , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Balasankar C , 2019\n" "Language-Team: Malayalam (https://www.transifex.com/calamares/teams/20061/ml/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ml\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "à´•àµà´°à´®àµ€à´•രണതàµà´¤à´¿àµ½ പിഴവàµ" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "" #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "ബൂടàµà´Ÿàµâ€Œà´²àµ‹à´Ÿàµ¼ ഇൻസàµà´±àµà´±à´¾àµ¾ ചെയàµà´¯àµ‚ ." #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "" #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "" #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "" calamares-3.2.20/lang/python/mr/000077500000000000000000000000001362604102500164055ustar00rootroot00000000000000calamares-3.2.20/lang/python/mr/LC_MESSAGES/000077500000000000000000000000001362604102500201725ustar00rootroot00000000000000calamares-3.2.20/lang/python/mr/LC_MESSAGES/python.mo000066400000000000000000000005741362604102500220560ustar00rootroot00000000000000Þ•$,8B9Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Language-Team: Marathi (https://www.transifex.com/calamares/teams/20061/mr/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: mr Plural-Forms: nplurals=2; plural=(n != 1); calamares-3.2.20/lang/python/mr/LC_MESSAGES/python.po000066400000000000000000000210701362604102500220530ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Marathi (https://www.transifex.com/calamares/teams/20061/mr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: mr\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "" #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "" #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "" #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "" #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "" calamares-3.2.20/lang/python/nb/000077500000000000000000000000001362604102500163665ustar00rootroot00000000000000calamares-3.2.20/lang/python/nb/LC_MESSAGES/000077500000000000000000000000001362604102500201535ustar00rootroot00000000000000calamares-3.2.20/lang/python/nb/LC_MESSAGES/python.mo000066400000000000000000000010071362604102500220270ustar00rootroot00000000000000Þ•,<PQ‘cõInstall packages.Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Last-Translator: Tyler Moss , 2017 Language-Team: Norwegian BokmÃ¥l (https://www.transifex.com/calamares/teams/20061/nb/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: nb Plural-Forms: nplurals=2; plural=(n != 1); Installer pakker.calamares-3.2.20/lang/python/nb/LC_MESSAGES/python.po000066400000000000000000000213441362604102500220400ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Tyler Moss , 2017 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Tyler Moss , 2017\n" "Language-Team: Norwegian BokmÃ¥l (https://www.transifex.com/calamares/teams/20061/nb/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: nb\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "" #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "Installer pakker." #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "" #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "" #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "" #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "" calamares-3.2.20/lang/python/ne_NP/000077500000000000000000000000001362604102500167665ustar00rootroot00000000000000calamares-3.2.20/lang/python/ne_NP/LC_MESSAGES/000077500000000000000000000000001362604102500205535ustar00rootroot00000000000000calamares-3.2.20/lang/python/ne_NP/LC_MESSAGES/python.mo000066400000000000000000000006111362604102500224270ustar00rootroot00000000000000Þ•$,8O9Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Language-Team: Nepali (Nepal) (https://www.transifex.com/calamares/teams/20061/ne_NP/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: ne_NP Plural-Forms: nplurals=2; plural=(n != 1); calamares-3.2.20/lang/python/ne_NP/LC_MESSAGES/python.po000066400000000000000000000211051362604102500224330ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Nepali (Nepal) (https://www.transifex.com/calamares/teams/20061/ne_NP/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ne_NP\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "" #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "" #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "" #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "" #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "" calamares-3.2.20/lang/python/nl/000077500000000000000000000000001362604102500164005ustar00rootroot00000000000000calamares-3.2.20/lang/python/nl/LC_MESSAGES/000077500000000000000000000000001362604102500201655ustar00rootroot00000000000000calamares-3.2.20/lang/python/nl/LC_MESSAGES/python.mo000066400000000000000000000020631362604102500220440ustar00rootroot00000000000000Þ•T Œ¸"¹Üî!D%;jx¦(H^%wGMåBad mount point for root partitionDummy python job.Dummy python step {}No mount point for root partitionglobalstorage does not contain a "rootMountPoint" key, doing nothingrootMountPoint is "{}", which does not exist, doing nothingProject-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Last-Translator: Adriaan de Groot , 2019 Language-Team: Dutch (https://www.transifex.com/calamares/teams/20061/nl/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: nl Plural-Forms: nplurals=2; plural=(n != 1); Onjuist mount-punt voor de root-partitieVoorbeeld Python-taakVoorbeeld Python-stap {}Geen mount-punt voor de root-partitieglobalstorage bevat geen sleutel "rootMountPoint", er wordt niks gedaanrootMountPoint is ingesteld op "{}", welke niet bestaat, er wordt niks gedaancalamares-3.2.20/lang/python/nl/LC_MESSAGES/python.po000066400000000000000000000217051362604102500220530ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Adriaan de Groot , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Adriaan de Groot , 2019\n" "Language-Team: Dutch (https://www.transifex.com/calamares/teams/20061/nl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: nl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "Geen mount-punt voor de root-partitie" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "globalstorage bevat geen sleutel \"rootMountPoint\", er wordt niks gedaan" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "Onjuist mount-punt voor de root-partitie" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" "rootMountPoint is ingesteld op \"{}\", welke niet bestaat, er wordt niks " "gedaan" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "" #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "" #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "" #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "" #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "Voorbeeld Python-taak" #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "Voorbeeld Python-stap {}" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "" calamares-3.2.20/lang/python/pl/000077500000000000000000000000001362604102500164025ustar00rootroot00000000000000calamares-3.2.20/lang/python/pl/LC_MESSAGES/000077500000000000000000000000001362604102500201675ustar00rootroot00000000000000calamares-3.2.20/lang/python/pl/LC_MESSAGES/python.mo000066400000000000000000000123471362604102500220540ustar00rootroot00000000000000Þ•0œC(")Lg€#–$º'ß$,@PjƒžµÊâ,/ARV©ÅÙë4ü#1$U'z¢·;Õ!+30_$µÓ<ñ\. -‹ )¹ ã ù D ;M ‰ ª 'º â ! # *C +n .š +É õ  7Tp#Š®É8ç 9\Q!®!Ðò|)˜(Â+ë-,EZ$ /Åmõ(cŒ¬>Êi 2s,¦ÓíLiM/·$ (#,+/*")&'!   0%-.Bad mount point for root partitionBad unsquash configurationCannot configure LightDMCannot modify serviceCannot write KDM configuration fileCannot write LXDM configuration fileCannot write LightDM configuration fileCannot write SLIM configuration fileConfiguration ErrorConfigure GRUB.Configure OpenRC servicesConfigure Plymouth themeConfigure systemd servicesConfiguring initramfs.Configuring locales.Configuring mkinitcpio.Creating initramfs with dracut.Display manager configuration was incompleteDummy python job.Dummy python step {}Failed to find unsquashfs, make sure you have the squashfs-tools package installedFailed to unpack image "{}"Install bootloader.Install packages.Installing data.Installing one package.Installing %(num)d packages.KDM config file {!s} does not existLXDM config file {!s} does not existLightDM config file {!s} does not existMounting partitions.No LightDM greeter installed.No display managers selected for the displaymanager module.No mount point for root partitionProcessing packages (%(count)d / %(total)d)Removing one package.Removing %(num)d packages.SLIM config file {!s} does not existSaving network configuration.Target service does not existThe destination "{}" in the target system is not a directoryThe displaymanagers list is empty or undefined in bothglobalstorage and displaymanager.conf.The filesystem for "{}" ({}) is not supportedThe source filesystem "{}" does not existUnmount file systems.Writing fstab.globalstorage does not contain a "rootMountPoint" key, doing nothingrootMountPoint is "{}", which does not exist, doing nothingrsync failed with error code {}.Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Last-Translator: Piotr StrÄ™bski , 2019 Language-Team: Polish (https://www.transifex.com/calamares/teams/20061/pl/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: pl Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3); Błędny punkt montowania partycji rootBłędna konfiguracja unsquashNie można skonfigurować LightDMNie można zmodyfikować usÅ‚ugNie można zapisać pliku konfiguracji KDMNie można zapisać pliku konfiguracji LXDMNie można zapisać pliku konfiguracji LightDMNie można zapisać pliku konfiguracji SLIMBłąd konfiguracjiKonfiguracja GRUB.Konfiguracja usÅ‚ug OpenRCKonfiguracja motywu PlymouthKonfiguracja usÅ‚ug systemdKonfigurowanie initramfs.Konfigurowanie ustawieÅ„ lokalnych.Konfigurowanie mkinitcpio.Tworzenie initramfs z dracut.Konfiguracja menedżera wyÅ›wietlania byÅ‚a niekompletnaZadanie fikcyjne Python.Krok fikcyjny Python {}Nie można odnaleźć unsquashfs, upewnij siÄ™, że masz zainstalowany pakiet squashfs-toolsBłąd rozpakowywania obrazu "{}"Instalacja programu rozruchowego.Zainstaluj pakiety.Instalowanie danych.Instalowanie jednego pakietu.Instalowanie %(num)d pakietów.Instalowanie %(num)d pakietów.Instalowanie%(num)d pakietów.Plik konfiguracyjny KDM {!s} nie istniejePlik konfiguracji LXDM {!s} nie istniejePlik konfiguracji LightDM {!s} nie istniejeMontowanie partycji.Nie zainstalowano ekranu powitalnego LightDM.Brak wybranych menedżerów wyÅ›wietlania dla moduÅ‚u displaymanager.Brak punktu montowania partycji rootPrzetwarzanie pakietów (%(count)d / %(total)d)Usuwanie jednego pakietu.Usuwanie %(num)d pakietów.Usuwanie %(num)d pakietów.Usuwanie %(num)d pakietów.Plik konfiguracji SLIM {!s} nie istniejeZapisywanie konfiguracji sieci.Docelowa usÅ‚uga nie istniejeMiejsce docelowe "{}" w docelowym systemie nie jest katalogiemLista menedżerów wyÅ›wietlania jest pusta lub niezdefiniowana w bothglobalstorage i displaymanager.confSystem plików dla "{}" ({}) nie jest obsÅ‚ugiwanyŹródÅ‚owy system plików "{}" nie istniejeOdmontuj systemy plików.Zapisywanie fstab.globalstorage nie zawiera klucza "rootMountPoint", nic nie zostanie zrobionePunkt montowania partycji root (rootMountPoint) jest "{}", które nie istnieje; nic nie zostanie zrobionersync zakoÅ„czyÅ‚o dziaÅ‚anie kodem błędu {}.calamares-3.2.20/lang/python/pl/LC_MESSAGES/python.po000066400000000000000000000257251362604102500220630ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Marcin MikoÅ‚ajczak , 2017 # KagiSame, 2018 # Piotr StrÄ™bski , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Piotr StrÄ™bski , 2019\n" "Language-Team: Polish (https://www.transifex.com/calamares/teams/20061/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "Konfiguracja GRUB." #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "Montowanie partycji." #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "Błąd konfiguracji" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "Konfiguracja usług systemd" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "Nie można zmodyfikować usług" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "Odmontuj systemy plików." #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "rsync zakończyło działanie kodem błędu {}." #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "Błąd rozpakowywania obrazu \"{}\"" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "Nie można odnaleźć unsquashfs, upewnij się, że masz zainstalowany pakiet " "squashfs-tools" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "Brak punktu montowania partycji root" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" "globalstorage nie zawiera klucza \"rootMountPoint\", nic nie zostanie " "zrobione" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "Błędny punkt montowania partycji root" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" "Punkt montowania partycji root (rootMountPoint) jest \"{}\", które nie " "istnieje; nic nie zostanie zrobione" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "Błędna konfiguracja unsquash" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "System plików dla \"{}\" ({}) nie jest obsługiwany" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "Źródłowy system plików \"{}\" nie istnieje" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "Miejsce docelowe \"{}\" w docelowym systemie nie jest katalogiem" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "Nie można zapisać pliku konfiguracji KDM" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "Plik konfiguracyjny KDM {!s} nie istnieje" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "Nie można zapisać pliku konfiguracji LXDM" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "Plik konfiguracji LXDM {!s} nie istnieje" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "Nie można zapisać pliku konfiguracji LightDM" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "Plik konfiguracji LightDM {!s} nie istnieje" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "Nie można skonfigurować LightDM" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "Nie zainstalowano ekranu powitalnego LightDM." #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "Nie można zapisać pliku konfiguracji SLIM" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "Plik konfiguracji SLIM {!s} nie istnieje" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "Brak wybranych menedżerów wyświetlania dla modułu displaymanager." #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" "Lista menedżerów wyświetlania jest pusta lub niezdefiniowana w " "bothglobalstorage i displaymanager.conf" #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "Konfiguracja menedżera wyświetlania była niekompletna" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "Konfigurowanie mkinitcpio." #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "" #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "Instalowanie danych." #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "Konfiguracja usÅ‚ug OpenRC" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "Docelowa usÅ‚uga nie istnieje" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "Konfiguracja motywu Plymouth" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Przetwarzanie pakietów (%(count)d / %(total)d)" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "Zainstaluj pakiety." #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Instalowanie jednego pakietu." msgstr[1] "Instalowanie %(num)d pakietów." msgstr[2] "Instalowanie %(num)d pakietów." msgstr[3] "Instalowanie%(num)d pakietów." #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Usuwanie jednego pakietu." msgstr[1] "Usuwanie %(num)d pakietów." msgstr[2] "Usuwanie %(num)d pakietów." msgstr[3] "Usuwanie %(num)d pakietów." #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "Instalacja programu rozruchowego." #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "" #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "Tworzenie initramfs z dracut." #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "Konfigurowanie initramfs." #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "Zapisywanie fstab." #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "Zadanie fikcyjne Python." #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "Krok fikcyjny Python {}" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "Konfigurowanie ustawieÅ„ lokalnych." #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "Zapisywanie konfiguracji sieci." calamares-3.2.20/lang/python/pt_BR/000077500000000000000000000000001362604102500167755ustar00rootroot00000000000000calamares-3.2.20/lang/python/pt_BR/LC_MESSAGES/000077500000000000000000000000001362604102500205625ustar00rootroot00000000000000calamares-3.2.20/lang/python/pt_BR/LC_MESSAGES/python.mo000066400000000000000000000201041362604102500224350ustar00rootroot00000000000000Þ•FLa|JJL"—º3Õ 4"4W3Œ/Àð8#?$c'ˆ$°Õéù , #G k ‡ ž ³ Ë ,ë  * R? "’ µ Ñ é ý  4 #U $y 'ž Æ Û ;ù !5 5W 8 +Æ #ò 0 $G l Š ¢ Á <ß \y-ŽO¼M )ZX„`Ý>TDc;¨ ätTzVÏ2&$YP~&ÏFöH=D†FË&N9<ˆ=Å@=D‚š«Êæ(/Mez“>±ðjˆ/¨!Øú!163h4œ7Ñ 4NT/£7ÓL +X+„/°4à "6-Y!‡?©céM6h]ŸPý0Npmð"^H“>Ü( C>5B4<F 8 6?!&-'. A;*D$ 192 #@,7(3" :0+/E%)=rc-update {arg!s} call in chroot returned error code {num!s}.systemctl {arg!s} call in chroot returned error code {num!s}.Bad mount point for root partitionBad unsquash configurationCannot add service {name!s} to run-level {level!s}.Cannot configure LightDMCannot disable systemd target {name!s}.Cannot enable systemd service {name!s}.Cannot enable systemd target {name!s}.Cannot mask systemd unit {name!s}.Cannot modify serviceCannot remove service {name!s} from run-level {level!s}.Cannot write KDM configuration fileCannot write LXDM configuration fileCannot write LightDM configuration fileCannot write SLIM configuration fileConfiguration ErrorConfigure GRUB.Configure OpenRC servicesConfigure Plymouth themeConfigure systemd servicesConfiguring OpenRC dmcrypt service.Configuring encrypted swap.Configuring initramfs.Configuring locales.Configuring mkinitcpio.Creating initramfs with dracut.Display manager configuration was incompleteDummy python job.Dummy python step {}Failed to find unsquashfs, make sure you have the squashfs-tools package installedFailed to run dracut on the targetFailed to unpack image "{}"Filling up filesystems.Install bootloader.Install packages.Installing data.Installing one package.Installing %(num)d packages.KDM config file {!s} does not existLXDM config file {!s} does not existLightDM config file {!s} does not existMounting partitions.No LightDM greeter installed.No display managers selected for the displaymanager module.No mount point for root partitionNo partitions are defined for
{!s}
to use.No root mount point is given for
{!s}
to use.Processing packages (%(count)d / %(total)d)Remove live user from target systemRemoving one package.Removing %(num)d packages.SLIM config file {!s} does not existSaving network configuration.Setting hardware clock.Target runlevel does not existTarget service does not existThe destination "{}" in the target system is not a directoryThe displaymanagers list is empty or undefined in bothglobalstorage and displaymanager.conf.The exit code was {}The filesystem for "{}" ({}) is not supportedThe path for runlevel {level!s} is {path!s}, which does not exist.The path for service {name!s} is {path!s}, which does not exist.The source filesystem "{}" does not existUnknown service-action {arg!s} for service {name!s} in run-level {level!s}.Unknown systemd commands {command!s} and {suffix!s} for unit {name!s}.Unmount file systems.Writing fstab.globalstorage does not contain a "rootMountPoint" key, doing nothingrootMountPoint is "{}", which does not exist, doing nothingrsync failed with error code {}.Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Last-Translator: Guilherme, 2019 Language-Team: Portuguese (Brazil) (https://www.transifex.com/calamares/teams/20061/pt_BR/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: pt_BR Plural-Forms: nplurals=2; plural=(n > 1); Chamada rc-update {arg!s} no chroot retornou o código de erro {num!s}.A chamada systemctl {arg!s} no chroot retornou o código de erro {num!s}.Ponto de montagem incorreto para a partição rootConfiguração incorreta do unsquashNão é possível adicionar serviço {name!s} ao nível de execução {level!s}.Não é possível configurar o LightDMNão é possível desabilitar o alvo {name!s} do systemd.Não é possível habilitar o serviço {name!s} do systemd.Não é possível habilitar o alvo {name!s} do systemd.Não é possível mascarar a unidade {name!s} do systemd.Não é possível modificar o serviçoNão é possível remover serviço {name!s} do nível de execução {level!s}.Não foi possível gravar o arquivo de configuração do KDMNão foi possível gravar o arquivo de configuração do LXDMNão foi possível gravar o arquivo de configuração do LightDMNão foi possível gravar o arquivo de configuração do SLIMErro de Configuração.Configurar GRUB.Configurar serviços do OpenRCConfigurar tema do PlymouthConfigurar serviços do systemdConfigurando serviço dmcrypt do OpenRC.Configurando swap encriptada.Configurando initramfs.Configurando locais.Configurando mkinitcpio.Criando initramfs com dracut.A configuração do gerenciador de exibição está incompletaTarefa modelo python.Etapa modelo python {}Ocorreu uma falha ao localizar o unsquashfs, certifique-se de que o pacote squashfs-tools esteja instaladoErro ao executar dracut no alvoOcorreu uma falha ao descompactar a imagem "{}"Preenchendo sistemas de arquivos.Instalar bootloader.Instalar pacotes.Instalando os dados.Instalando um pacote.Instalando %(num)d pacotes.O arquivo de configuração {!s} do KDM não existeO arquivo de configuração {!s} do LXDM não existeO arquivo de configuração {!s} do LightDM não existeMontando partições.Não há nenhuma tela de login do LightDM instalada.Nenhum gerenciador de exibição selecionado para o módulo do displaymanager.Nenhum ponto de montagem para a partição rootSem partições definidas para uso por
{!s}
.Nenhum ponto de montagem para o root fornecido para uso por
{!s}
.Processando pacotes (%(count)d / %(total)d)Remover usuário live do sistema de destinoRemovendo um pacote.Removendo %(num)d pacotes.O arquivo de configuração {!s} do SLIM não existeSalvando configuração de rede.Configurando relógio de hardware.O nível de execução de destino não existeO serviço de destino não existeA destinação "{}" no sistema de destino não é um diretórioA lista de displaymanagers está vazia ou indefinida no bothglobalstorage e no displaymanager.conf.O código de saída foi {}O sistema de arquivos para "{}" ({}) não é suportadoO caminho para o nível de execução {level!s} é {path!s}, o qual não existe.O caminho para o serviço {name!s} é {path!s}, o qual não existe.O sistema de arquivos de origem "{}" não existeServiço de ação {arg!s} desconhecido para o serviço {name!s} no nível de execução {level!s}.Comandos desconhecidos do systemd {command!s} e {suffix!s} para a unidade {name!s}.Desmontar os sistemas de arquivos.Escrevendo fstab.O globalstorage não contém uma chave "rootMountPoint". Nada foi feito.O rootMountPoint é "{}", mas ele não existe. Nada foi feito.O rsync falhou com o código de erro {}.calamares-3.2.20/lang/python/pt_BR/LC_MESSAGES/python.po000066400000000000000000000302221362604102500224420ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # André Marcelo Alvarenga , 2019 # Guilherme, 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Guilherme, 2019\n" "Language-Team: Portuguese (Brazil) (https://www.transifex.com/calamares/teams/20061/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "Configurar GRUB." #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "Montando partições." #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "Erro de Configuração." #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "Sem partições definidas para uso por
{!s}
." #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "Configurar serviços do systemd" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "Não é possível modificar o serviço" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" "A chamada systemctl {arg!s} no chroot retornou o código de erro" " {num!s}." #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "Não é possível habilitar o serviço {name!s} do systemd." #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "Não é possível habilitar o alvo {name!s} do systemd." #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "Não é possível desabilitar o alvo {name!s} do systemd." #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "Não é possível mascarar a unidade {name!s} do systemd." #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "Comandos desconhecidos do systemd {command!s} e " "{suffix!s} para a unidade {name!s}." #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "Desmontar os sistemas de arquivos." #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "Preenchendo sistemas de arquivos." #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "O rsync falhou com o código de erro {}." #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "Ocorreu uma falha ao descompactar a imagem \"{}\"" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "Ocorreu uma falha ao localizar o unsquashfs, certifique-se de que o pacote " "squashfs-tools esteja instalado" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "Nenhum ponto de montagem para a partição root" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "O globalstorage não contém uma chave \"rootMountPoint\". Nada foi feito." #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "Ponto de montagem incorreto para a partição root" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "O rootMountPoint é \"{}\", mas ele não existe. Nada foi feito." #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "Configuração incorreta do unsquash" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "O sistema de arquivos para \"{}\" ({}) não é suportado" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "O sistema de arquivos de origem \"{}\" não existe" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "A destinação \"{}\" no sistema de destino não é um diretório" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "Não foi possível gravar o arquivo de configuração do KDM" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "O arquivo de configuração {!s} do KDM não existe" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "Não foi possível gravar o arquivo de configuração do LXDM" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "O arquivo de configuração {!s} do LXDM não existe" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "Não foi possível gravar o arquivo de configuração do LightDM" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "O arquivo de configuração {!s} do LightDM não existe" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "Não é possível configurar o LightDM" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "Não há nenhuma tela de login do LightDM instalada." #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "Não foi possível gravar o arquivo de configuração do SLIM" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "O arquivo de configuração {!s} do SLIM não existe" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "" "Nenhum gerenciador de exibição selecionado para o módulo do displaymanager." #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" "A lista de displaymanagers está vazia ou indefinida no bothglobalstorage e " "no displaymanager.conf." #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "A configuração do gerenciador de exibição está incompleta" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "Configurando mkinitcpio." #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" "Nenhum ponto de montagem para o root fornecido para uso por
{!s}
." #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "Configurando swap encriptada." #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "Instalando os dados." #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "Configurar serviços do OpenRC" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" "Não é possível adicionar serviço {name!s} ao nível de execução {level!s}." #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" "Não é possível remover serviço {name!s} do nível de execução {level!s}." #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" "Serviço de ação {arg!s} desconhecido para o serviço {name!s} no" " nível de execução {level!s}." #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" "Chamada rc-update {arg!s} no chroot retornou o código de erro " "{num!s}." #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "O nível de execução de destino não existe" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" "O caminho para o nível de execução {level!s} é {path!s}, o qual" " não existe." #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "O serviço de destino não existe" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" "O caminho para o serviço {name!s} é {path!s}, o qual não " "existe." #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "Configurar tema do Plymouth" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Processando pacotes (%(count)d / %(total)d)" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "Instalar pacotes." #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Instalando um pacote." msgstr[1] "Instalando %(num)d pacotes." #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Removendo um pacote." msgstr[1] "Removendo %(num)d pacotes." #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "Instalar bootloader." #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "Remover usuário live do sistema de destino" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "Configurando relógio de hardware." #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "Criando initramfs com dracut." #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "Erro ao executar dracut no alvo" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "O código de saída foi {}" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "Configurando initramfs." #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "Configurando serviço dmcrypt do OpenRC." #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "Escrevendo fstab." #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "Tarefa modelo python." #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "Etapa modelo python {}" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "Configurando locais." #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "Salvando configuração de rede." calamares-3.2.20/lang/python/pt_PT/000077500000000000000000000000001362604102500170155ustar00rootroot00000000000000calamares-3.2.20/lang/python/pt_PT/LC_MESSAGES/000077500000000000000000000000001362604102500206025ustar00rootroot00000000000000calamares-3.2.20/lang/python/pt_PT/LC_MESSAGES/python.mo000066400000000000000000000200401362604102500224540ustar00rootroot00000000000000Þ•FLa|JJL"—º3Õ 4"4W3Œ/Àð8#?$c'ˆ$°Õéù , #G k ‡ ž ³ Ë ,ë  * R? "’ µ Ñ é ý  4 #U $y 'ž Æ Û ;ù !5 5W 8 +Æ #ò 0 $G l Š ¢ Á <ß \y-ŽO¼M )ZX„`Ý>TDc;¨ ä–WœWô*LwR“&æG BUD˜FÝ$$PI9š:Ô=:MˆŸ²Îê'"/RlŠ!¤:ÆU,%‚!¨%Ê"ð%174i5ž8Ô .#OR/¢<ÒE+U./°5à#!:-\!Š:¬fçN2iZœM÷-Ensjâ MnB‚5Å$ûC>5B4<F 8 6?!&-'. A;*D$ 192 #@,7(3" :0+/E%)=rc-update {arg!s} call in chroot returned error code {num!s}.systemctl {arg!s} call in chroot returned error code {num!s}.Bad mount point for root partitionBad unsquash configurationCannot add service {name!s} to run-level {level!s}.Cannot configure LightDMCannot disable systemd target {name!s}.Cannot enable systemd service {name!s}.Cannot enable systemd target {name!s}.Cannot mask systemd unit {name!s}.Cannot modify serviceCannot remove service {name!s} from run-level {level!s}.Cannot write KDM configuration fileCannot write LXDM configuration fileCannot write LightDM configuration fileCannot write SLIM configuration fileConfiguration ErrorConfigure GRUB.Configure OpenRC servicesConfigure Plymouth themeConfigure systemd servicesConfiguring OpenRC dmcrypt service.Configuring encrypted swap.Configuring initramfs.Configuring locales.Configuring mkinitcpio.Creating initramfs with dracut.Display manager configuration was incompleteDummy python job.Dummy python step {}Failed to find unsquashfs, make sure you have the squashfs-tools package installedFailed to run dracut on the targetFailed to unpack image "{}"Filling up filesystems.Install bootloader.Install packages.Installing data.Installing one package.Installing %(num)d packages.KDM config file {!s} does not existLXDM config file {!s} does not existLightDM config file {!s} does not existMounting partitions.No LightDM greeter installed.No display managers selected for the displaymanager module.No mount point for root partitionNo partitions are defined for
{!s}
to use.No root mount point is given for
{!s}
to use.Processing packages (%(count)d / %(total)d)Remove live user from target systemRemoving one package.Removing %(num)d packages.SLIM config file {!s} does not existSaving network configuration.Setting hardware clock.Target runlevel does not existTarget service does not existThe destination "{}" in the target system is not a directoryThe displaymanagers list is empty or undefined in bothglobalstorage and displaymanager.conf.The exit code was {}The filesystem for "{}" ({}) is not supportedThe path for runlevel {level!s} is {path!s}, which does not exist.The path for service {name!s} is {path!s}, which does not exist.The source filesystem "{}" does not existUnknown service-action {arg!s} for service {name!s} in run-level {level!s}.Unknown systemd commands {command!s} and {suffix!s} for unit {name!s}.Unmount file systems.Writing fstab.globalstorage does not contain a "rootMountPoint" key, doing nothingrootMountPoint is "{}", which does not exist, doing nothingrsync failed with error code {}.Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Last-Translator: Hugo Carvalho , 2019 Language-Team: Portuguese (Portugal) (https://www.transifex.com/calamares/teams/20061/pt_PT/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: pt_PT Plural-Forms: nplurals=2; plural=(n != 1); rc-update {arg!s} chamar pelo chroot retornou com código de erro {num!s}.systemctl {arg!s} chamar pelo chroot retornou com código de erro {num!s}.Ponto de montagem mau para partição rootMá configuração unsquashNão é possível adicionar o serviço {name!s} ao nível de execução {level!s}.Não é possível configurar o LightDMNão é possível desativar o destino do systemd {name!s}.Não é possível ativar o serviço systemd {name!s}.Não é possível ativar o destino do systemd {name!s}.Não é possível mascarar a unidade do systemd {name!s}.Não é possível modificar serviçoNão é possível remover o serviço {name!s} do nível de execução {level!s}.Não é possível gravar o ficheiro de configuração KDMNão é possível gravar o ficheiro de configuração LXDMNão é possível gravar o ficheiro de configuração LightDMNão é possível gravar o ficheiro de configuração SLIMErro de configuraçãoConfigurar o GRUB.Configurar serviços OpenRCConfigurar tema do PlymouthConfigurar serviços systemdA configurar o serviço OpenRC dmcrypt.Configurando a swap criptografada.A configurar o initramfs.A configurar a localização.A configurar o mkintcpio.Criando o initramfs com o dracut.A configuração do gestor de exibição estava incompletaTarefa Dummy python.Passo Dummy python {}Falha ao procurar unsquashfs, certifique-se que tem o pacote squashfs-tools instaladoFalha ao executar o dracut no destinoFalha ao descompactar imagem "{}"A preencher os sistemas de ficheiros.Instalar o carregador de arranque.Instalar pacotes.A instalar dados.A instalar um pacote.A instalar %(num)d pacotes.O ficheiro de configuração do KDM {!s} não existeO ficheiro de configuração do LXDM {!s} não existeO ficheiro de configuração do LightDM {!s} não existeA montar partições.Nenhum ecrã de boas-vindas LightDM instalado.Nenhum gestor de exibição selecionado para o módulo de gestor de exibição.Nenhum ponto de montagem para a partição rootNenhuma partição está definida para
{!s}
usar.Nenhum ponto de montagem root é fornecido para
{!s}
usar.A processar pacotes (%(count)d / %(total)d)Remover utilizador ativo do sistema de destinoA remover um pacote.A remover %(num)d pacotes.O ficheiro de configuração do SLIM {!s} não existeA guardar a configuração de rede.A definir o relógio do hardware.O nível de execução do destino não existeO serviço do destino não existeO destino "{}" no sistema de destino não é um diretórioA lista de gestores de exibição está vazia ou indefinida no globalstorage e no displaymanager.conf.O código de saída foi {}O sistema de ficheiros "{}" ({}) não é suportadoO caminho para o nível de execução {level!s} é {path!s}, que não existe.O caminho para o serviço {name!s} é {path!s}, que não existe.O sistema de ficheiros fonte "{}" não existeServiço de ação desconhecido {arg!s} para serviço {name!s} em nível de execução {level!s}.Comandos do systemd desconhecidos {command!s} e {suffix!s} por unidade {name!s}.Desmontar sistemas de ficheiros.A escrever o fstab.globalstorage não contém um "rootMountPoint" chave, nada a fazerrootMountPoint é "{}", que não existe, nada a fazerrsync falhou com código de erro {}.calamares-3.2.20/lang/python/pt_PT/LC_MESSAGES/python.po000066400000000000000000000302541362604102500224670ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Nuno Amorim , 2018 # Ricardo Simões , 2019 # Hugo Carvalho , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Hugo Carvalho , 2019\n" "Language-Team: Portuguese (Portugal) (https://www.transifex.com/calamares/teams/20061/pt_PT/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pt_PT\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "Configurar o GRUB." #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "A montar partições." #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "Erro de configuração" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "Nenhuma partição está definida para
{!s}
usar." #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "Configurar serviços systemd" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "Não é possível modificar serviço" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" "systemctl {arg!s} chamar pelo chroot retornou com código de " "erro {num!s}." #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "Não é possível ativar o serviço systemd {name!s}." #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "Não é possível ativar o destino do systemd {name!s}." #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "Não é possível desativar o destino do systemd {name!s}." #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "Não é possível mascarar a unidade do systemd {name!s}." #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "Comandos do systemd desconhecidos {command!s} e " "{suffix!s} por unidade {name!s}." #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "Desmontar sistemas de ficheiros." #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "A preencher os sistemas de ficheiros." #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "rsync falhou com código de erro {}." #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "Falha ao descompactar imagem \"{}\"" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "Falha ao procurar unsquashfs, certifique-se que tem o pacote squashfs-tools " "instalado" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "Nenhum ponto de montagem para a partição root" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "globalstorage não contém um \"rootMountPoint\" chave, nada a fazer" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "Ponto de montagem mau para partição root" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "rootMountPoint é \"{}\", que não existe, nada a fazer" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "Má configuração unsquash" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "O sistema de ficheiros \"{}\" ({}) não é suportado" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "O sistema de ficheiros fonte \"{}\" não existe" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "O destino \"{}\" no sistema de destino não é um diretório" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "Não é possível gravar o ficheiro de configuração KDM" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "O ficheiro de configuração do KDM {!s} não existe" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "Não é possível gravar o ficheiro de configuração LXDM" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "O ficheiro de configuração do LXDM {!s} não existe" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "Não é possível gravar o ficheiro de configuração LightDM" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "O ficheiro de configuração do LightDM {!s} não existe" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "Não é possível configurar o LightDM" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "Nenhum ecrã de boas-vindas LightDM instalado." #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "Não é possível gravar o ficheiro de configuração SLIM" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "O ficheiro de configuração do SLIM {!s} não existe" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "" "Nenhum gestor de exibição selecionado para o módulo de gestor de exibição." #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" "A lista de gestores de exibição está vazia ou indefinida no globalstorage e " "no displaymanager.conf." #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "A configuração do gestor de exibição estava incompleta" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "A configurar o mkintcpio." #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "Nenhum ponto de montagem root é fornecido para
{!s}
usar." #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "Configurando a swap criptografada." #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "A instalar dados." #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "Configurar serviços OpenRC" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" "Não é possível adicionar o serviço {name!s} ao nível de execução {level!s}." #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" "Não é possível remover o serviço {name!s} do nível de execução {level!s}." #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" "Serviço de ação desconhecido {arg!s} para serviço {name!s} em " "nível de execução {level!s}." #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" "rc-update {arg!s} chamar pelo chroot retornou com código de " "erro {num!s}." #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "O nível de execução do destino não existe" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" "O caminho para o nível de execução {level!s} é {path!s}, que " "não existe." #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "O serviço do destino não existe" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" "O caminho para o serviço {name!s} é {path!s}, que não existe." #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "Configurar tema do Plymouth" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "A processar pacotes (%(count)d / %(total)d)" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "Instalar pacotes." #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "A instalar um pacote." msgstr[1] "A instalar %(num)d pacotes." #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "A remover um pacote." msgstr[1] "A remover %(num)d pacotes." #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "Instalar o carregador de arranque." #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "Remover utilizador ativo do sistema de destino" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "A definir o relógio do hardware." #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "Criando o initramfs com o dracut." #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "Falha ao executar o dracut no destino" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "O código de saída foi {}" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "A configurar o initramfs." #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "A configurar o serviço OpenRC dmcrypt." #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "A escrever o fstab." #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "Tarefa Dummy python." #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "Passo Dummy python {}" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "A configurar a localização." #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "A guardar a configuração de rede." calamares-3.2.20/lang/python/ro/000077500000000000000000000000001362604102500164075ustar00rootroot00000000000000calamares-3.2.20/lang/python/ro/LC_MESSAGES/000077500000000000000000000000001362604102500201745ustar00rootroot00000000000000calamares-3.2.20/lang/python/ro/LC_MESSAGES/python.mo000066400000000000000000000022261362604102500220540ustar00rootroot00000000000000Þ•\ œÈÉÛð4+70c”®ªYlZ˜0óR$wDummy python job.Dummy python step {}Install packages.Installing one package.Installing %(num)d packages.Processing packages (%(count)d / %(total)d)Removing one package.Removing %(num)d packages.Unmount file systems.Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Last-Translator: Sebastian Brici , 2018 Language-Team: Romanian (https://www.transifex.com/calamares/teams/20061/ro/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: ro Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1)); Job python fictiv.Dummy python step {}Instalează pachetele.Instalează un pachet.Se instalează %(num)d pachete.Se instalează %(num)d din pachete.Se procesează pachetele (%(count)d / %(total)d)Se elimină un pachet.Se elimină %(num)d pachet.Se elimină %(num)d de pachete.Demonteaza sistemul de fisierecalamares-3.2.20/lang/python/ro/LC_MESSAGES/python.po000066400000000000000000000221461362604102500220620ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Baadur Jobava , 2018 # Sebastian Brici , 2018 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Sebastian Brici , 2018\n" "Language-Team: Romanian (https://www.transifex.com/calamares/teams/20061/ro/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ro\n" "Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "Demonteaza sistemul de fisiere" #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "" #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Se procesează pachetele (%(count)d / %(total)d)" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "Instalează pachetele." #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Instalează un pachet." msgstr[1] "Se instalează %(num)d pachete." msgstr[2] "Se instalează %(num)d din pachete." #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Se elimină un pachet." msgstr[1] "Se elimină %(num)d pachet." msgstr[2] "Se elimină %(num)d de pachete." #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "" #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "" #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "" #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "Job python fictiv." #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "Dummy python step {}" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "" calamares-3.2.20/lang/python/ru/000077500000000000000000000000001362604102500164155ustar00rootroot00000000000000calamares-3.2.20/lang/python/ru/LC_MESSAGES/000077500000000000000000000000001362604102500202025ustar00rootroot00000000000000calamares-3.2.20/lang/python/ru/LC_MESSAGES/python.mo000066400000000000000000000012731362604102500220630ustar00rootroot00000000000000Þ•,<P+Q}9Processing packages (%(count)d / %(total)d)Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Last-Translator: Aleksey Kabanov , 2018 Language-Team: Russian (https://www.transifex.com/calamares/teams/20061/ru/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: ru Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3); Обработка пакетов (%(count)d / %(total)d)calamares-3.2.20/lang/python/ru/LC_MESSAGES/python.po000066400000000000000000000216441362604102500220720ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Aleksey Kabanov , 2018 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Aleksey Kabanov , 2018\n" "Language-Team: Russian (https://www.transifex.com/calamares/teams/20061/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ru\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "" #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Обработка пакетов (%(count)d / %(total)d)" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "" #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "" #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "" #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "" calamares-3.2.20/lang/python/sk/000077500000000000000000000000001362604102500164045ustar00rootroot00000000000000calamares-3.2.20/lang/python/sk/LC_MESSAGES/000077500000000000000000000000001362604102500201715ustar00rootroot00000000000000calamares-3.2.20/lang/python/sk/LC_MESSAGES/python.mo000066400000000000000000000051121362604102500220460ustar00rootroot00000000000000Þ•¼\ÐÑ#ê$'3$[€,”ÁÓè4ú#/$S'x; +Ü0$9^Çt(<5e6›9Ò6 C0Wˆ¨È{ß2[3Ž6ÂHù1B t 3ô !(     Cannot configure LightDMCannot write KDM configuration fileCannot write LXDM configuration fileCannot write LightDM configuration fileCannot write SLIM configuration fileConfiguration ErrorDisplay manager configuration was incompleteDummy python job.Dummy python step {}Install packages.Installing one package.Installing %(num)d packages.KDM config file {!s} does not existLXDM config file {!s} does not existLightDM config file {!s} does not existNo display managers selected for the displaymanager module.Processing packages (%(count)d / %(total)d)Removing one package.Removing %(num)d packages.SLIM config file {!s} does not existUnmount file systems.Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Last-Translator: DuÅ¡an Kazik , 2019 Language-Team: Slovak (https://www.transifex.com/calamares/teams/20061/sk/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: sk Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3); Nedá s nakonfigurovaÅ¥ správca LightDMNedá sa zapísaÅ¥ konfiguraÄný súbor správcu KDMNedá sa zapísaÅ¥ konfiguraÄný súbor správcu LXDMNedá sa zapísaÅ¥ konfiguraÄný súbor správcu LightDMNedá sa zapísaÅ¥ konfiguraÄný súbor správcu SLIMChyba konfigurácieKonfigurácia správcu zobrazenia nebola úplnáFiktívna úloha jazyka python.Fiktívny krok {} jazyka pythonInÅ¡talácia balíkov.InÅ¡taluje sa jeden balík.InÅ¡talujú sa %(num)d balíky.InÅ¡taluje sa %(num)d balíkov.InÅ¡taluje sa %(num)d balíkov.KonfiguraÄný súbor správcu KDM {!s} neexistujeKonfiguraÄný súbor správcu LXDM {!s} neexistujeKonfiguraÄný súbor správcu LightDM {!s} neexistujeNeboli vybraní žiadni správcovia zobrazenia pre modul displaymanager.Spracovávajú sa balíky (%(count)d / %(total)d)Odstraňuje sa jeden balík.Odstraňujú sa %(num)d balíky.Odstraňuje sa %(num)d balíkov.Odstraňuje sa %(num)d balíkov.KonfiguraÄný súbor správcu SLIM {!s} neexistujeOdpojenie súborových systémov.calamares-3.2.20/lang/python/sk/LC_MESSAGES/python.po000066400000000000000000000234501362604102500220560ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # DuÅ¡an Kazik , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: DuÅ¡an Kazik , 2019\n" "Language-Team: Slovak (https://www.transifex.com/calamares/teams/20061/sk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: sk\n" "Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "Chyba konfigurácie" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "Odpojenie súborových systémov." #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "Nedá sa zapísaÅ¥ konfiguraÄný súbor správcu KDM" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "KonfiguraÄný súbor správcu KDM {!s} neexistuje" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "Nedá sa zapísaÅ¥ konfiguraÄný súbor správcu LXDM" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "KonfiguraÄný súbor správcu LXDM {!s} neexistuje" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "Nedá sa zapísaÅ¥ konfiguraÄný súbor správcu LightDM" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "KonfiguraÄný súbor správcu LightDM {!s} neexistuje" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "Nedá s nakonfigurovaÅ¥ správca LightDM" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "Nedá sa zapísaÅ¥ konfiguraÄný súbor správcu SLIM" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "KonfiguraÄný súbor správcu SLIM {!s} neexistuje" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "Neboli vybraní žiadni správcovia zobrazenia pre modul displaymanager." #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "Konfigurácia správcu zobrazenia nebola úplná" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "" #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Spracovávajú sa balíky (%(count)d / %(total)d)" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "InÅ¡talácia balíkov." #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "InÅ¡taluje sa jeden balík." msgstr[1] "InÅ¡talujú sa %(num)d balíky." msgstr[2] "InÅ¡taluje sa %(num)d balíkov." msgstr[3] "InÅ¡taluje sa %(num)d balíkov." #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Odstraňuje sa jeden balík." msgstr[1] "Odstraňujú sa %(num)d balíky." msgstr[2] "Odstraňuje sa %(num)d balíkov." msgstr[3] "Odstraňuje sa %(num)d balíkov." #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "" #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "" #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "" #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "Fiktívna úloha jazyka python." #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "Fiktívny krok {} jazyka python" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "" calamares-3.2.20/lang/python/sl/000077500000000000000000000000001362604102500164055ustar00rootroot00000000000000calamares-3.2.20/lang/python/sl/LC_MESSAGES/000077500000000000000000000000001362604102500201725ustar00rootroot00000000000000calamares-3.2.20/lang/python/sl/LC_MESSAGES/python.mo000066400000000000000000000006621362604102500220540ustar00rootroot00000000000000Þ•$,8x9Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Language-Team: Slovenian (https://www.transifex.com/calamares/teams/20061/sl/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: sl Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3); calamares-3.2.20/lang/python/sl/LC_MESSAGES/python.po000066400000000000000000000212421362604102500220540ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Slovenian (https://www.transifex.com/calamares/teams/20061/sl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: sl\n" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "" #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "" #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "" #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "" #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "" calamares-3.2.20/lang/python/sq/000077500000000000000000000000001362604102500164125ustar00rootroot00000000000000calamares-3.2.20/lang/python/sq/LC_MESSAGES/000077500000000000000000000000001362604102500201775ustar00rootroot00000000000000calamares-3.2.20/lang/python/sq/LC_MESSAGES/python.mo000066400000000000000000000174331362604102500220650ustar00rootroot00000000000000Þ•FLa|JJL"—º3Õ 4"4W3Œ/Àð8#?$c'ˆ$°Õéù , #G k ‡ ž ³ Ë ,ë  * R? "’ µ Ñ é ý  4 #U $y 'ž Æ Û ;ù !5 5W 8 +Æ #ò 0 $G l Š ¢ Á <ß \y-ŽO¼M )ZX„`Ý>TDc;¨ ä|T‚T×,,Y:w²>Î< <J7‡¿9Ý()@,j)—ÁÒæ'9*aŒ¦¿ Ú7û3E^Y.¸#ç )CS9m)§*Ñ-ü*->Gl*´JßU*.€*¯/Ú* 5T n:¯tê_/sR£Sö*J_ufÕ<YKlA¸ úC>5B4<F 8 6?!&-'. A;*D$ 192 #@,7(3" :0+/E%)=rc-update {arg!s} call in chroot returned error code {num!s}.systemctl {arg!s} call in chroot returned error code {num!s}.Bad mount point for root partitionBad unsquash configurationCannot add service {name!s} to run-level {level!s}.Cannot configure LightDMCannot disable systemd target {name!s}.Cannot enable systemd service {name!s}.Cannot enable systemd target {name!s}.Cannot mask systemd unit {name!s}.Cannot modify serviceCannot remove service {name!s} from run-level {level!s}.Cannot write KDM configuration fileCannot write LXDM configuration fileCannot write LightDM configuration fileCannot write SLIM configuration fileConfiguration ErrorConfigure GRUB.Configure OpenRC servicesConfigure Plymouth themeConfigure systemd servicesConfiguring OpenRC dmcrypt service.Configuring encrypted swap.Configuring initramfs.Configuring locales.Configuring mkinitcpio.Creating initramfs with dracut.Display manager configuration was incompleteDummy python job.Dummy python step {}Failed to find unsquashfs, make sure you have the squashfs-tools package installedFailed to run dracut on the targetFailed to unpack image "{}"Filling up filesystems.Install bootloader.Install packages.Installing data.Installing one package.Installing %(num)d packages.KDM config file {!s} does not existLXDM config file {!s} does not existLightDM config file {!s} does not existMounting partitions.No LightDM greeter installed.No display managers selected for the displaymanager module.No mount point for root partitionNo partitions are defined for
{!s}
to use.No root mount point is given for
{!s}
to use.Processing packages (%(count)d / %(total)d)Remove live user from target systemRemoving one package.Removing %(num)d packages.SLIM config file {!s} does not existSaving network configuration.Setting hardware clock.Target runlevel does not existTarget service does not existThe destination "{}" in the target system is not a directoryThe displaymanagers list is empty or undefined in bothglobalstorage and displaymanager.conf.The exit code was {}The filesystem for "{}" ({}) is not supportedThe path for runlevel {level!s} is {path!s}, which does not exist.The path for service {name!s} is {path!s}, which does not exist.The source filesystem "{}" does not existUnknown service-action {arg!s} for service {name!s} in run-level {level!s}.Unknown systemd commands {command!s} and {suffix!s} for unit {name!s}.Unmount file systems.Writing fstab.globalstorage does not contain a "rootMountPoint" key, doing nothingrootMountPoint is "{}", which does not exist, doing nothingrsync failed with error code {}.Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Last-Translator: Besnik , 2019 Language-Team: Albanian (https://www.transifex.com/calamares/teams/20061/sq/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: sq Plural-Forms: nplurals=2; plural=(n != 1); Thirrje rc-update {arg!s} në chroot u përgjigj me kod gabimi {num!s}.Thirrja systemctl {arg!s} në chroot u përgjigj me kod gabimi {num!s}.Pikë e gabuar montimi për ndarjen rrënjëFormësim i keq i unsquash-itS’shtohet dot shërbimi {name!s} te run-level {level!s}.S’formësohet dot LightDMS’çaktivizohet dot objektivi systemd {name!s}.S’aktivizohet dot shërbimi systemd {name!s}.S’aktivizohet dot objektivi systemd {name!s}.S’maskohet dot njësia systemd {name!s}.S’modifikohet dot shërbimiS’hiqet dot shërbimi {name!s} nga run-level {level!s}.S’shkruhet dot kartelë formësimi KDMS’shkruhet dot kartelë formësimi LXDMS’shkruhet dot kartelë formësimi LightDMS’shkruhet dot kartelë formësimi SLIMGabim FormësimiFormësoni GRUB-in.Formësoni shërbime OpenRCFormësoni temën PlimuthFormësoni shërbime systemdPo formësohet shërbim OpenRC dmcrypt.Po formësohet pjesë swap e fshehtëzuar.Po formësohet initramfs.Po formësohen vendoret.Po formësohet mkinitcpio.Po krijohet initramfs me dracut.Formësimi i përgjegjësit të ekranit s’qe i plotëAkt python dummy.Hap python {} dummyS’u arrit të gjendej unsquashfs, sigurohuni se e keni të instaluar paketën squashfs-toolsS’u arrit të xhirohej dracut mbi objektivinDështoi shpaketimi i figurës "{}"Po mbushen sisteme kartelash.Instalo ngarkues nisjesh.Instalo paketa.Po instalohen të dhëna.Po instalohet një paketë.Po instalohen %(num)d paketa.S’ekziston kartelë formësimi KDM {!s}S’ekziston kartelë formësimi LXDM {!s}S’ekziston kartelë formësimi LightDM {!s}Po montohen pjesë.S’ka të instaluar përshëndetës LightDM.S’janë përzgjedhur përgjegjës ekrani për modulin displaymanager.S’ka pikë montimi për ndarjen rrënjëS’ka pjesë të përkufizuara për
{!s}
për t’u përdorur.S’është dhënë pikë montimi rrënjë për
{!s}
për t’u përdorur.Po përpunohen paketat (%(count)d / %(total)d)Hiq përdoruesin live nga sistemi i synuarPo hiqet një paketë.Po hiqen %(num)d paketa.S’ekziston kartelë formësimi SLIM {!s}Po ruhet formësimi i rrjetit.Po caktohet ora hardware.Runlevel-i i synuar nuk ekzistonShërbimi i synuar nuk ekzistonDestinacioni "{}" te sistemi i synuar s’është drejtoriLista displaymanagers është e zbrazët ose e papërcaktuar si te globalstorage, ashtu edhe te displaymanager.conf.Kodi i daljes qe {}Sistemi i kartelave për "{}" ({}) nuk mbulohetShtegu për runlevel {level!s} është {path!s}, i cili nuk ekziston.Shtegu për shërbimin {name!s} është {path!s}, i cili nuk ekziston.Sistemi i kartelave "{}" ({}) s’ekzistonService-action {arg!s} i panjohur për shërbimin {name!s} te run-level {level!s}.Urdhra të panjohur systemd {command!s} dhe {suffix!s} për njësi {name!s}.Çmontoni sisteme kartelash.Po shkruhet fstab.globalstorage nuk përmban një vlerë "rootMountPoint", s’po bëhet gjërootMountPoint është "{}", që s’ekziston, s’po bëhet gjërsync dështoi me kod gabimi {}.calamares-3.2.20/lang/python/sq/LC_MESSAGES/python.po000066400000000000000000000275031362604102500220670ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Besnik , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Besnik , 2019\n" "Language-Team: Albanian (https://www.transifex.com/calamares/teams/20061/sq/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: sq\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "Formësoni GRUB-in." #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "Po montohen pjesë." #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "Gabim Formësimi" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "S’ka pjesë të përkufizuara për
{!s}
për t’u përdorur." #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "Formësoni shërbime systemd" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "S’modifikohet dot shërbimi" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" "Thirrja systemctl {arg!s} në chroot u përgjigj me kod gabimi " "{num!s}." #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "S’aktivizohet dot shërbimi systemd {name!s}." #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "S’aktivizohet dot objektivi systemd {name!s}." #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "S’çaktivizohet dot objektivi systemd {name!s}." #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "S’maskohet dot njësia systemd {name!s}." #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "Urdhra të panjohur systemd {command!s} dhe " "{suffix!s} për njësi {name!s}." #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "Çmontoni sisteme kartelash." #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "Po mbushen sisteme kartelash." #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "rsync dështoi me kod gabimi {}." #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "Dështoi shpaketimi i figurës \"{}\"" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "S’u arrit të gjendej unsquashfs, sigurohuni se e keni të instaluar paketën " "squashfs-tools" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "S’ka pikë montimi për ndarjen rrënjë" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "globalstorage nuk përmban një vlerë \"rootMountPoint\", s’po bëhet gjë" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "Pikë e gabuar montimi për ndarjen rrënjë" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "rootMountPoint është \"{}\", që s’ekziston, s’po bëhet gjë" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "Formësim i keq i unsquash-it" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "Sistemi i kartelave për \"{}\" ({}) nuk mbulohet" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "Sistemi i kartelave \"{}\" ({}) s’ekziston" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "Destinacioni \"{}\" te sistemi i synuar s’është drejtori" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "S’shkruhet dot kartelë formësimi KDM" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "S’ekziston kartelë formësimi KDM {!s}" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "S’shkruhet dot kartelë formësimi LXDM" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "S’ekziston kartelë formësimi LXDM {!s}" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "S’shkruhet dot kartelë formësimi LightDM" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "S’ekziston kartelë formësimi LightDM {!s}" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "S’formësohet dot LightDM" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "S’ka të instaluar përshëndetës LightDM." #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "S’shkruhet dot kartelë formësimi SLIM" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "S’ekziston kartelë formësimi SLIM {!s}" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "S’janë përzgjedhur përgjegjës ekrani për modulin displaymanager." #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" "Lista displaymanagers është e zbrazët ose e papërcaktuar si te " "globalstorage, ashtu edhe te displaymanager.conf." #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "Formësimi i përgjegjësit të ekranit s’qe i plotë" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "Po formësohet mkinitcpio." #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" "S’është dhënë pikë montimi rrënjë për
{!s}
për t’u përdorur." #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "Po formësohet pjesë swap e fshehtëzuar." #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "Po instalohen të dhëna." #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "Formësoni shërbime OpenRC" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "S’shtohet dot shërbimi {name!s} te run-level {level!s}." #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "S’hiqet dot shërbimi {name!s} nga run-level {level!s}." #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" "Service-action {arg!s} i panjohur për shërbimin {name!s} te " "run-level {level!s}." #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" "Thirrje rc-update {arg!s} në chroot u përgjigj me kod gabimi " "{num!s}." #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "Runlevel-i i synuar nuk ekziston" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" "Shtegu për runlevel {level!s} është {path!s}, i cili nuk " "ekziston." #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "Shërbimi i synuar nuk ekziston" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" "Shtegu për shërbimin {name!s} është {path!s}, i cili nuk " "ekziston." #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "Formësoni temën Plimuth" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Po përpunohen paketat (%(count)d / %(total)d)" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "Instalo paketa." #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Po instalohet një paketë." msgstr[1] "Po instalohen %(num)d paketa." #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Po hiqet një paketë." msgstr[1] "Po hiqen %(num)d paketa." #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "Instalo ngarkues nisjesh." #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "Hiq përdoruesin live nga sistemi i synuar" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "Po caktohet ora hardware." #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "Po krijohet initramfs me dracut." #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "S’u arrit të xhirohej dracut mbi objektivin" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "Kodi i daljes qe {}" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "Po formësohet initramfs." #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "Po formësohet shërbim OpenRC dmcrypt." #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "Po shkruhet fstab." #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "Akt python dummy." #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "Hap python {} dummy" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "Po formësohen vendoret." #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "Po ruhet formësimi i rrjetit." calamares-3.2.20/lang/python/sr/000077500000000000000000000000001362604102500164135ustar00rootroot00000000000000calamares-3.2.20/lang/python/sr/LC_MESSAGES/000077500000000000000000000000001362604102500202005ustar00rootroot00000000000000calamares-3.2.20/lang/python/sr/LC_MESSAGES/python.mo000066400000000000000000000030211362604102500220520ustar00rootroot00000000000000Þ• „ì01EUj†ž¯!Äæ )ÇJ.*D9o-©(×&A'#i/½9×   Configuration ErrorConfigure GRUB.Configuring locales.Failed to unpack image "{}"Filling up filesystems.Installing data.Mounting partitions.No mount point for root partitionSaving network configuration.Unmount file systems.Writing fstab.rsync failed with error code {}.Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Last-Translator: Slobodan Simić , 2019 Language-Team: Serbian (https://www.transifex.com/calamares/teams/20061/sr/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: sr Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); Грешка поÑтавеПодеÑи ГРУБПодешавање локалитета.ÐеуÑпело раÑпакивање одраза "{}"Попуњавање фајл-ÑиÑтема.ИнÑталирање података.Монтирање партиција.Ðема тачке мотирања за root Ð¿Ð°Ñ€Ñ‚Ð¸Ñ†Ð¸Ñ˜ÑƒÐ£Ð¿Ð¸Ñ Ð¿Ð¾Ñтаве мреже.Демонтирање фајл-ÑиÑтема.УпиÑивање fstab.rsync неуÑпешан Ñа кодом грешке {}.calamares-3.2.20/lang/python/sr/LC_MESSAGES/python.po000066400000000000000000000224161362604102500220660ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Slobodan Simić , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Slobodan Simić , 2019\n" "Language-Team: Serbian (https://www.transifex.com/calamares/teams/20061/sr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: sr\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "ПодеÑи ГРУБ" #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "Монтирање партиција." #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "Грешка поÑтаве" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "Демонтирање фајл-ÑиÑтема." #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "Попуњавање фајл-ÑиÑтема." #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "rsync неуÑпешан Ñа кодом грешке {}." #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "ÐеуÑпело раÑпакивање одраза \"{}\"" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "Ðема тачке мотирања за root партицију" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "" #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "ИнÑталирање података." #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" msgstr[2] "" #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" msgstr[2] "" #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "" #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "" #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "УпиÑивање fstab." #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "Подешавање локалитета." #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "Ð£Ð¿Ð¸Ñ Ð¿Ð¾Ñтаве мреже." calamares-3.2.20/lang/python/sr@latin/000077500000000000000000000000001362604102500175435ustar00rootroot00000000000000calamares-3.2.20/lang/python/sr@latin/LC_MESSAGES/000077500000000000000000000000001362604102500213305ustar00rootroot00000000000000calamares-3.2.20/lang/python/sr@latin/LC_MESSAGES/python.mo000066400000000000000000000007321362604102500232100ustar00rootroot00000000000000Þ•$,8 9Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Language-Team: Serbian (Latin) (https://www.transifex.com/calamares/teams/20061/sr@latin/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: sr@latin Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); calamares-3.2.20/lang/python/sr@latin/LC_MESSAGES/python.po000066400000000000000000000212601362604102500232120ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Serbian (Latin) (https://www.transifex.com/calamares/teams/20061/sr@latin/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: sr@latin\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "" #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" msgstr[2] "" #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" msgstr[2] "" #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "" #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "" #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "" #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "" calamares-3.2.20/lang/python/sv/000077500000000000000000000000001362604102500164175ustar00rootroot00000000000000calamares-3.2.20/lang/python/sv/LC_MESSAGES/000077500000000000000000000000001362604102500202045ustar00rootroot00000000000000calamares-3.2.20/lang/python/sv/LC_MESSAGES/python.mo000066400000000000000000000073371362604102500220740ustar00rootroot00000000000000Þ•(\5œp"q”¯4Èý#$7'\$„©½Íç#?[r‡Ÿ¿×ëý4#C$g'Œ´!É5ë0!$Rw•-­Ûñ ~!*  Ë é : C 1` 2’ 5Å +û ' 9 K h ‚ $  Å â !ú  5 R h ƒ • 1§ )Ù * -. \ )r Bœ +ß * 6U(p™®!½&!$ %    ('"# Bad mount point for root partitionBad unsquash configurationCannot configure LightDMCannot enable systemd service {name!s}.Cannot modify serviceCannot write KDM configuration fileCannot write LXDM configuration fileCannot write LightDM configuration fileCannot write SLIM configuration fileConfiguration ErrorConfigure GRUB.Configure OpenRC servicesConfigure Plymouth themeConfigure systemd servicesConfiguring OpenRC dmcrypt service.Configuring encrypted swap.Configuring initramfs.Configuring locales.Configuring mkinitcpio.Creating initramfs with dracut.Filling up filesystems.Install bootloader.Install packages.Installing data.Installing one package.Installing %(num)d packages.KDM config file {!s} does not existLXDM config file {!s} does not existLightDM config file {!s} does not existMounting partitions.No mount point for root partitionNo partitions are defined for
{!s}
to use.Removing one package.Removing %(num)d packages.SLIM config file {!s} does not existSaving network configuration.Setting hardware clock.The filesystem for "{}" ({}) is not supportedUnmount file systems.Writing fstab.rsync failed with error code {}.Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Last-Translator: Luna Jernberg , 2020 Language-Team: Swedish (https://www.transifex.com/calamares/teams/20061/sv/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: sv Plural-Forms: nplurals=2; plural=(n != 1); Dålig monteringspunkt för root partitionDålig unsquash konfigurationKunde inte konfigurera LightDMKunde inte aktivera systemd tjänst {name!s}.Kunde inte modifiera tjänstMisslyckades med att skriva KDM konfigurationsfilMisslyckades med att skriva LXDM konfigurationsfilMisslyckades med att skriva LightDM konfigurationsfilMisslyckades med att SLIM konfigurationsfilKonfigurationsfelKonfigurera GRUB.Konfigurera OpenRC tjänsterKonfigurera Plymouth temaKonfigurera systemd tjänsterKonfigurerar OpenRC dmcrypt tjänst.Konfigurerar krypterad swap.Konfigurerar initramfs.Konfigurerar språkinställningarKonfigurerar mkinitcpio.Skapar initramfs med dracut.Packar upp filsystem.Installera starthanterare.Installera paket.Installerar data.Installerar ett paket.Installerar %(num)d paket.KDM konfigurationsfil {!s} existerar inteLXDM konfigurationsfil {!s} existerar inteLightDM konfigurationsfil {!s} existerar inteMonterar partitioner.Ingen monteringspunkt för root partitionInga partitioner är definerade för
{!s}
att använda.Tar bort ett paket.Tar bort %(num)d paket.SLIM konfigurationsfil {!s} existerar inteSparar nätverkskonfiguration.Ställer hårdvaruklockan.Filsystemet för "{}" ({})  stöds inteAvmontera filsystem.Skriver fstab.rsync misslyckades med felkod {}.calamares-3.2.20/lang/python/sv/LC_MESSAGES/python.po000066400000000000000000000237511362604102500220750ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Jan-Olof Svensson, 2019 # Luna Jernberg , 2020 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Luna Jernberg , 2020\n" "Language-Team: Swedish (https://www.transifex.com/calamares/teams/20061/sv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: sv\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "Konfigurera GRUB." #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "Monterar partitioner." #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "Konfigurationsfel" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "Inga partitioner är definerade för
{!s}
att använda." #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "Konfigurera systemd tjänster" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "Kunde inte modifiera tjänst" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "Kunde inte aktivera systemd tjänst {name!s}." #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "Avmontera filsystem." #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "Packar upp filsystem." #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "rsync misslyckades med felkod {}." #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "Ingen monteringspunkt för root partition" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "Dålig monteringspunkt för root partition" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "Dålig unsquash konfiguration" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "Filsystemet för \"{}\" ({})  stöds inte" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "Misslyckades med att skriva KDM konfigurationsfil" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "KDM konfigurationsfil {!s} existerar inte" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "Misslyckades med att skriva LXDM konfigurationsfil" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "LXDM konfigurationsfil {!s} existerar inte" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "Misslyckades med att skriva LightDM konfigurationsfil" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "LightDM konfigurationsfil {!s} existerar inte" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "Kunde inte konfigurera LightDM" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "Misslyckades med att SLIM konfigurationsfil" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "SLIM konfigurationsfil {!s} existerar inte" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "Konfigurerar mkinitcpio." #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "Konfigurerar krypterad swap." #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "Installerar data." #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "Konfigurera OpenRC tjänster" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "Konfigurera Plymouth tema" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "Installera paket." #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Installerar ett paket." msgstr[1] "Installerar %(num)d paket." #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Tar bort ett paket." msgstr[1] "Tar bort %(num)d paket." #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "Installera starthanterare." #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "Ställer hÃ¥rdvaruklockan." #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "Skapar initramfs med dracut." #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "Konfigurerar initramfs." #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "Konfigurerar OpenRC dmcrypt tjänst." #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "Skriver fstab." #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "Konfigurerar sprÃ¥kinställningar" #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "Sparar nätverkskonfiguration." calamares-3.2.20/lang/python/th/000077500000000000000000000000001362604102500164025ustar00rootroot00000000000000calamares-3.2.20/lang/python/th/LC_MESSAGES/000077500000000000000000000000001362604102500201675ustar00rootroot00000000000000calamares-3.2.20/lang/python/th/LC_MESSAGES/python.mo000066400000000000000000000005621362604102500220500ustar00rootroot00000000000000Þ•$,889Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Language-Team: Thai (https://www.transifex.com/calamares/teams/20061/th/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: th Plural-Forms: nplurals=1; plural=0; calamares-3.2.20/lang/python/th/LC_MESSAGES/python.po000066400000000000000000000210241362604102500220470ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Thai (https://www.transifex.com/calamares/teams/20061/th/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: th\n" "Plural-Forms: nplurals=1; plural=0;\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "" #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "" #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "" #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "" #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "" calamares-3.2.20/lang/python/tr_TR/000077500000000000000000000000001362604102500170215ustar00rootroot00000000000000calamares-3.2.20/lang/python/tr_TR/LC_MESSAGES/000077500000000000000000000000001362604102500206065ustar00rootroot00000000000000calamares-3.2.20/lang/python/tr_TR/LC_MESSAGES/python.mo000066400000000000000000000175231362604102500224740ustar00rootroot00000000000000Þ•FLa|JJL"—º3Õ 4"4W3Œ/Àð8#?$c'ˆ$°Õéù , #G k ‡ ž ³ Ë ,ë  * R? "’ µ Ñ é ý  4 #U $y 'ž Æ Û ;ù !5 5W 8 +Æ #ò 0 $G l Š ¢ Á <ß \y-ŽO¼M )ZX„`Ý>TDc;¨ ä‹W‘Vé3@t=”ÒDñ;6:r4­âDü)A*k-–*Äï! =!^,€+­Ù#ù $>4c˜ªN¿,$;`’£3µ.é/2H{#š>¾/ýA-Co+³5ß=/S#ƒ§'Äì-k6¢&¸Dß;$'`pˆhùbP;î(*C>5B4<F 8 6?!&-'. A;*D$ 192 #@,7(3" :0+/E%)=rc-update {arg!s} call in chroot returned error code {num!s}.systemctl {arg!s} call in chroot returned error code {num!s}.Bad mount point for root partitionBad unsquash configurationCannot add service {name!s} to run-level {level!s}.Cannot configure LightDMCannot disable systemd target {name!s}.Cannot enable systemd service {name!s}.Cannot enable systemd target {name!s}.Cannot mask systemd unit {name!s}.Cannot modify serviceCannot remove service {name!s} from run-level {level!s}.Cannot write KDM configuration fileCannot write LXDM configuration fileCannot write LightDM configuration fileCannot write SLIM configuration fileConfiguration ErrorConfigure GRUB.Configure OpenRC servicesConfigure Plymouth themeConfigure systemd servicesConfiguring OpenRC dmcrypt service.Configuring encrypted swap.Configuring initramfs.Configuring locales.Configuring mkinitcpio.Creating initramfs with dracut.Display manager configuration was incompleteDummy python job.Dummy python step {}Failed to find unsquashfs, make sure you have the squashfs-tools package installedFailed to run dracut on the targetFailed to unpack image "{}"Filling up filesystems.Install bootloader.Install packages.Installing data.Installing one package.Installing %(num)d packages.KDM config file {!s} does not existLXDM config file {!s} does not existLightDM config file {!s} does not existMounting partitions.No LightDM greeter installed.No display managers selected for the displaymanager module.No mount point for root partitionNo partitions are defined for
{!s}
to use.No root mount point is given for
{!s}
to use.Processing packages (%(count)d / %(total)d)Remove live user from target systemRemoving one package.Removing %(num)d packages.SLIM config file {!s} does not existSaving network configuration.Setting hardware clock.Target runlevel does not existTarget service does not existThe destination "{}" in the target system is not a directoryThe displaymanagers list is empty or undefined in bothglobalstorage and displaymanager.conf.The exit code was {}The filesystem for "{}" ({}) is not supportedThe path for runlevel {level!s} is {path!s}, which does not exist.The path for service {name!s} is {path!s}, which does not exist.The source filesystem "{}" does not existUnknown service-action {arg!s} for service {name!s} in run-level {level!s}.Unknown systemd commands {command!s} and {suffix!s} for unit {name!s}.Unmount file systems.Writing fstab.globalstorage does not contain a "rootMountPoint" key, doing nothingrootMountPoint is "{}", which does not exist, doing nothingrsync failed with error code {}.Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Last-Translator: Demiray Muhterem , 2019 Language-Team: Turkish (Turkey) (https://www.transifex.com/calamares/teams/20061/tr_TR/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: tr_TR Plural-Forms: nplurals=2; plural=(n > 1); rc-update {arg!s} çağrısında chroot, {num!s} hata kodunu döndürdü.systemctl {arg!s} chroot çağrısında hata kodu döndürüldü {num!s}.Kök disk bölümü için hatalı bağlama noktasıUnsquash yapılandırma sorunlu{name!s} hizmeti, {level!s} çalışma düzeyine ekleyemiyor.LightDM yapılandırılamıyorSystemd hedefi devre dışı bırakılamıyor {name!s}.Systemd hizmeti etkinleştirilemiyor {name!s}.Systemd hedefi etkinleştirilemiyor {name!s}.Systemd birimi maskeleyemiyor {name!s}.Hizmet değiştirilemiyor{name!s} hizmeti {level!s} çalışma düzeyinden kaldırılamıyor.KDM yapılandırma dosyası yazılamıyorLXDM yapılandırma dosyası yazılamıyorLightDM yapılandırma dosyası yazılamıyorSLIM yapılandırma dosyası yazılamıyorYapılandırma HatasıGRUB'u yapılandır. OpenRC hizmetlerini yapılandırPlymouth temasını yapılandırSystemd hizmetlerini yapılandırOpenRC dmcrypt servisi yapılandırılıyor.Şifreli takas alanı yapılandırılıyor.Initramfs yapılandırılıyor.Sistem yereli yapılandırılıyor.Mkinitcpio yapılandırılıyor.Dracut ile initramfs oluşturuluyor.Ekran yöneticisi yapılandırma işi tamamlanamadıDummy python job.Dummy python step {}Unsquashfs bulunamadı, squashfs-tools paketinin kurulu olduğundan emin olun.Hedef üzerinde dracut çalıştırılamadı"{}" kurulum medyası aktarılamadıDosya sistemi genişletiliyor.Önyükleyici kur.Paketleri yükleVeri yükleniyor.%(num)d paket yükleniyor%(num)d paket yükleniyorKDM yapılandırma dosyası {!s} mevcut değilLXDM yapılandırma dosyası {!s} mevcut değilLightDM yapılandırma dosyası {!s} mevcut değilDisk bölümleri bağlanıyor.LightDM karşılama yüklü değil.Ekran yöneticisi modülü için ekran yöneticisi seçilmedi.kök disk bölümü için bağlama noktası yok
{!s}
kullanması için hiçbir bölüm tanımlanmadı.
{!s}
kullanması için kök bağlama noktası verilmedi.Paketler işleniyor (%(count)d / %(total)d)Liveuser kullanıcısını hedef sistemden kaldırın%(num)d paket kaldırılıyor.%(num)d paket kaldırılıyor.SLIM yapılandırma dosyası {!s} mevcut değilAğ yapılandırması kaydediliyor.Donanım saati ayarlanıyor.Hedef çalışma seviyesi mevcut değilHedef servisi mevcut değilHedef sistemdeki "{}" hedefi bir dizin değilGörüntüleyiciler listesi, her iki bölgedeki ve displaymanager.conf öğesinde boş veya tanımsızdır.Çıkış kodu {} idi"{}" ({}) Dosya sistemi desteklenmiyorRunlevel {level!s} yolu, mevcut olmayan {path!s} 'dir.{name!s} hizmetinin yolu, bulunmayan {path!s}."{}" Kaynak dosya sistemi mevcut değilÇalışma düzeyinde {level!s} hizmetinde {name!s} servisi için bilinmeyen hizmet eylemi {arg!s}.Bilinmeyen sistem komutları {command!s} ve {suffix!s} {name!s} birimi için.Dosya sistemlerini ayırın.Fstab dosyasına yazılıyor.globalstorage bir "rootMountPoint" anahtarı içermiyor, hiçbirşey yapılmadırootMountPoint "{}", mevcut değil, hiçbirşey yapılmadırsync {} hata koduyla başarısız oldu.calamares-3.2.20/lang/python/tr_TR/LC_MESSAGES/python.po000066400000000000000000000275561362604102500225060ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Demiray Muhterem , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Demiray Muhterem , 2019\n" "Language-Team: Turkish (Turkey) (https://www.transifex.com/calamares/teams/20061/tr_TR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: tr_TR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "GRUB'u yapılandır." #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "Disk bölümleri bağlanıyor." #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "Yapılandırma Hatası" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "
{!s}
kullanması için hiçbir bölüm tanımlanmadı." #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "Systemd hizmetlerini yapılandır" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "Hizmet değiştirilemiyor" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" "systemctl {arg!s} chroot çağrısında hata kodu döndürüldü " "{num!s}." #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "Systemd hizmeti etkinleştirilemiyor {name!s}." #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "Systemd hedefi etkinleştirilemiyor {name!s}." #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "Systemd hedefi devre dışı bırakılamıyor {name!s}." #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "Systemd birimi maskeleyemiyor {name!s}." #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "Bilinmeyen sistem komutları {command!s} ve " "{suffix!s} {name!s} birimi için." #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "Dosya sistemlerini ayırın." #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "Dosya sistemi genişletiliyor." #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "rsync {} hata koduyla başarısız oldu." #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "\"{}\" kurulum medyası aktarılamadı" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "Unsquashfs bulunamadı, squashfs-tools paketinin kurulu olduğundan emin olun." #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "kök disk bölümü için bağlama noktası yok" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" "globalstorage bir \"rootMountPoint\" anahtarı içermiyor, hiçbirşey yapılmadı" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "Kök disk bölümü için hatalı bağlama noktası" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "rootMountPoint \"{}\", mevcut değil, hiçbirşey yapılmadı" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "Unsquash yapılandırma sorunlu" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "\"{}\" ({}) Dosya sistemi desteklenmiyor" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "\"{}\" Kaynak dosya sistemi mevcut değil" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "Hedef sistemdeki \"{}\" hedefi bir dizin değil" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "KDM yapılandırma dosyası yazılamıyor" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "KDM yapılandırma dosyası {!s} mevcut değil" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "LXDM yapılandırma dosyası yazılamıyor" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "LXDM yapılandırma dosyası {!s} mevcut değil" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "LightDM yapılandırma dosyası yazılamıyor" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "LightDM yapılandırma dosyası {!s} mevcut değil" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "LightDM yapılandırılamıyor" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "LightDM karşılama yüklü değil." #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "SLIM yapılandırma dosyası yazılamıyor" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "SLIM yapılandırma dosyası {!s} mevcut değil" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "Ekran yöneticisi modülü için ekran yöneticisi seçilmedi." #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" "Görüntüleyiciler listesi, her iki bölgedeki ve displaymanager.conf öğesinde " "boş veya tanımsızdır." #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "Ekran yöneticisi yapılandırma işi tamamlanamadı" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "Mkinitcpio yapılandırılıyor." #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "
{!s}
kullanması için kök baÄŸlama noktası verilmedi." #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "Åžifreli takas alanı yapılandırılıyor." #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "Veri yükleniyor." #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr " OpenRC hizmetlerini yapılandır" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "{name!s} hizmeti, {level!s} çalışma düzeyine ekleyemiyor." #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "{name!s} hizmeti {level!s} çalışma düzeyinden kaldırılamıyor." #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" "Çalışma düzeyinde {level!s} hizmetinde {name!s} servisi için bilinmeyen " "hizmet eylemi {arg!s}." #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" " rc-update {arg!s} çaÄŸrısında chroot, {num!s} hata kodunu " "döndürdü." #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "Hedef çalışma seviyesi mevcut deÄŸil" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "Runlevel {level!s} yolu, mevcut olmayan {path!s} 'dir." #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "Hedef servisi mevcut deÄŸil" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "{name!s} hizmetinin yolu, bulunmayan {path!s}." #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "Plymouth temasını yapılandır" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Paketler iÅŸleniyor (%(count)d / %(total)d)" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "Paketleri yükle" #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "%(num)d paket yükleniyor" msgstr[1] "%(num)d paket yükleniyor" #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "%(num)d paket kaldırılıyor." msgstr[1] "%(num)d paket kaldırılıyor." #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "Önyükleyici kur." #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "Liveuser kullanıcısını hedef sistemden kaldırın" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "Donanım saati ayarlanıyor." #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "Dracut ile initramfs oluÅŸturuluyor." #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "Hedef üzerinde dracut çalıştırılamadı" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "Çıkış kodu {} idi" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "Initramfs yapılandırılıyor." #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "OpenRC dmcrypt servisi yapılandırılıyor." #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "Fstab dosyasına yazılıyor." #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "Dummy python job." #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "Dummy python step {}" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "Sistem yereli yapılandırılıyor." #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "AÄŸ yapılandırması kaydediliyor." calamares-3.2.20/lang/python/uk/000077500000000000000000000000001362604102500164065ustar00rootroot00000000000000calamares-3.2.20/lang/python/uk/LC_MESSAGES/000077500000000000000000000000001362604102500201735ustar00rootroot00000000000000calamares-3.2.20/lang/python/uk/LC_MESSAGES/python.mo000066400000000000000000000245421362604102500220600ustar00rootroot00000000000000Þ•FLa|JJL"—º3Õ 4"4W3Œ/Àð8#?$c'ˆ$°Õéù , #G k ‡ ž ³ Ë ,ë  * R? "’ µ Ñ é ý  4 #U $y 'ž Æ Û ;ù !5 5W 8 +Æ #ò 0 $G l Š ¢ Á <ß \y-ŽO¼M )ZX„`Ý>TDc;¨ ä[µa¦]¾4`Q2²TåR:VTä/9biHÌ[^q[Ð+,"X*{(¦)Ï5ù`/#&´$Û<_=)%Ç~íKl<¸3õ.)"X"{Æž:e; >Ü&NBh‘UúYP zª <%!xb!®Û!;Š";Æ"Y#9\#3–#[Ê#¢&$É$aä$„F%vË%GB&‡Š&'5’'È'~â'a(bÿ(C>5B4<F 8 6?!&-'. A;*D$ 192 #@,7(3" :0+/E%)=rc-update {arg!s} call in chroot returned error code {num!s}.systemctl {arg!s} call in chroot returned error code {num!s}.Bad mount point for root partitionBad unsquash configurationCannot add service {name!s} to run-level {level!s}.Cannot configure LightDMCannot disable systemd target {name!s}.Cannot enable systemd service {name!s}.Cannot enable systemd target {name!s}.Cannot mask systemd unit {name!s}.Cannot modify serviceCannot remove service {name!s} from run-level {level!s}.Cannot write KDM configuration fileCannot write LXDM configuration fileCannot write LightDM configuration fileCannot write SLIM configuration fileConfiguration ErrorConfigure GRUB.Configure OpenRC servicesConfigure Plymouth themeConfigure systemd servicesConfiguring OpenRC dmcrypt service.Configuring encrypted swap.Configuring initramfs.Configuring locales.Configuring mkinitcpio.Creating initramfs with dracut.Display manager configuration was incompleteDummy python job.Dummy python step {}Failed to find unsquashfs, make sure you have the squashfs-tools package installedFailed to run dracut on the targetFailed to unpack image "{}"Filling up filesystems.Install bootloader.Install packages.Installing data.Installing one package.Installing %(num)d packages.KDM config file {!s} does not existLXDM config file {!s} does not existLightDM config file {!s} does not existMounting partitions.No LightDM greeter installed.No display managers selected for the displaymanager module.No mount point for root partitionNo partitions are defined for
{!s}
to use.No root mount point is given for
{!s}
to use.Processing packages (%(count)d / %(total)d)Remove live user from target systemRemoving one package.Removing %(num)d packages.SLIM config file {!s} does not existSaving network configuration.Setting hardware clock.Target runlevel does not existTarget service does not existThe destination "{}" in the target system is not a directoryThe displaymanagers list is empty or undefined in bothglobalstorage and displaymanager.conf.The exit code was {}The filesystem for "{}" ({}) is not supportedThe path for runlevel {level!s} is {path!s}, which does not exist.The path for service {name!s} is {path!s}, which does not exist.The source filesystem "{}" does not existUnknown service-action {arg!s} for service {name!s} in run-level {level!s}.Unknown systemd commands {command!s} and {suffix!s} for unit {name!s}.Unmount file systems.Writing fstab.globalstorage does not contain a "rootMountPoint" key, doing nothingrootMountPoint is "{}", which does not exist, doing nothingrsync failed with error code {}.Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Last-Translator: Yuri Chornoivan , 2020 Language-Team: Ukrainian (https://www.transifex.com/calamares/teams/20061/uk/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: uk Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3); УнаÑлідок Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÑƒ rc-update {arg!s} chroot повернуто Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ помилку із кодом {num!s}.ВнаÑлідок виклику systemctl {arg!s} у chroot було повернуто Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð· кодом помилки {num! s}.Помилкова точна Ð¼Ð¾Ð½Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ ÐºÐ¾Ñ€ÐµÐ½ÐµÐ²Ð¾Ð³Ð¾ розділуПомилкові Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ unsquashÐе вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ Ñлужбу {name!s} до Ñ€Ñ–Ð²Ð½Ñ Ð·Ð°Ð¿ÑƒÑку {level!s}.Ðе вдалоÑÑ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ñ‚Ð¸ LightDMÐе вдалоÑÑ Ð²Ð¸Ð¼ÐºÐ½ÑƒÑ‚Ð¸ Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ systemd {name!s}.Ðе вдалоÑÑ Ð²Ð²Ñ–Ð¼ÐºÐ½ÑƒÑ‚Ð¸ Ñлужбу systemd {name!s}.Ðе вдалоÑÑ Ð²Ð²Ñ–Ð¼ÐºÐ½ÑƒÑ‚Ð¸ Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ systemd {name!s}.Ðе вдалоÑÑ Ð·Ð°Ð¼Ð°Ñкувати вузол systemd {name!s}.Ðе вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ ÑлужбуÐе вдалоÑÑ Ð²Ð¸Ð»ÑƒÑ‡Ð¸Ñ‚Ð¸ Ñлужбу {name!s} з Ñ€Ñ–Ð²Ð½Ñ Ð·Ð°Ð¿ÑƒÑку {level!s}.Ðе вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати файл налаштувань KDMÐе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ Ð´Ð¾ файла налаштувань LXDMÐе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ Ð´Ð¾ файла налаштувань LightDMÐе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ Ð´Ð¾ файла налаштувань SLIMПомилка налаштовуваннÑÐÐ°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ GRUB.Ðалаштувати Ñлужби OpenRCÐалаштувати тему PlymouthÐалаштуйте Ñлужби systemdÐалаштовуємо Ñлужбу dmcrypt OpenRC.Ðалаштовуємо зашифрований розділ резервної пам'Ñті.Ðалаштовуємо initramfs.Ðалаштовуємо локалі.Ðалаштовуємо mkinitcpio.Створюємо initramfs за допомогою dracut.ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ñобу ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¸Ñплеєм Ñ” неповнимиФіктивне Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ python.Фіктивний крок python {}Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ unsquashfs; переконайтеÑÑ, що вÑтановлено пакет squashfs-toolsÐе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ dracut над призначеннÑмÐе вдалоÑÑ Ñ€Ð¾Ð·Ð¿Ð°ÐºÑƒÐ²Ð°Ñ‚Ð¸ образ «{}Â»Ð—Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¸Ñ… ÑиÑтем.Ð’Ñтановити завантажувач.Ð’Ñтановити пакети.Ð’Ñтановлюємо дані.Ð’Ñтановлюємо %(num)d пакунок.Ð’Ñтановлюємо %(num)d пакунки.Ð’Ñтановлюємо %(num)d пакунків.Ð’Ñтановлюємо один пакунок.Файла налаштувань KDM {!s} не Ñ–ÑнуєФайла налаштувань LXDM {!s} не Ñ–ÑнуєФайла налаштувань LightDM {!s} не Ñ–ÑÐ½ÑƒÑ”ÐœÐ¾Ð½Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð².ЗаÑіб входу до ÑиÑтеми LightDM не вÑтановлено.Ðе вибрано заÑобу ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¸Ñплеєм Ð´Ð»Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ displaymanager.Ðемає точки Ð¼Ð¾Ð½Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ ÐºÐ¾Ñ€ÐµÐ½ÐµÐ²Ð¾Ð³Ð¾ розділуÐе визначено розділів Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾Ñ€Ð¸ÑтаннÑ
{!s}
.Ðе вказано кореневої точки Ð¼Ð¾Ð½Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾Ñ€Ð¸ÑÑ‚Ð°Ð½Ð½Ñ Ñƒ
{!s}
.ОброблÑємо пакунки (%(count)d з %(total)d)Вилучити кориÑтувача портативної ÑиÑтеми із ÑиÑтеми призначеннÑВилучаємо %(num)d пакунок.Вилучаємо %(num)d пакунки.Вилучаємо %(num)d пакунків.Вилучаємо один пакунок.Файла налаштувань SLIM {!s} не Ñ–ÑнуєЗберігаємо Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼ÐµÑ€ÐµÐ¶Ñ–.Ð’Ñтановлюємо Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð°Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð¾Ð³Ð¾ годинника.ШлÑху до Ñ€Ñ–Ð²Ð½Ñ Ð·Ð°Ð¿ÑƒÑку не Ñ–ÑнуєСлужби Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½Ðµ Ñ–ÑÐ½ÑƒÑ”ÐŸÑ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«{}» у цільовій ÑиÑтемі не Ñ” каталогомСпиÑок заÑобів ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¸Ñплеєм Ñ” порожнім або невизначеним у bothglobalstorage та displaymanager.conf.Код виходу — {}Підтримки файлової ÑиÑтеми Ð´Ð»Ñ Â«{}» ({}) не передбаченоШлÑхом до Ñ€Ñ–Ð²Ð½Ñ Ð·Ð°Ð¿ÑƒÑку {level!s} вказано {path!s}. Такого шлÑху не Ñ–Ñнує.ШлÑхом до Ñлужби {name!s} вказано {path!s}. Такого шлÑху не Ñ–Ñнує.Вихідної файлової ÑиÑтеми «{}» не Ñ–ÑнуєÐевідома Ð´Ñ–Ñ Ð·Ñ– Ñлужбою {arg!s} Ð´Ð»Ñ Ñлужби {name!s} на рівні запуÑку {level!s}.Ðевідомі команди systemd {command!s} та {suffix!s} Ð´Ð»Ñ Ð¿Ñ€Ð¸Ñтрою {name!s}.Демонтувати файлові ÑиÑтеми.ЗапиÑуємо fstab.У globalstorage не міÑтитьÑÑ ÐºÐ»ÑŽÑ‡Ð° «rootMountPoint». Ðе виконуватимемо ніÑких дій.Ð”Ð»Ñ rootMountPoint вказано Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«{}». Такого шлÑху не Ñ–Ñнує. Ðе виконуватимемо ніÑких дій.Спроба виконати rsync зазнала невдачі з кодом помилки {}.calamares-3.2.20/lang/python/uk/LC_MESSAGES/python.po000066400000000000000000000350371362604102500220640ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Володимир Братко , 2018 # Paul S , 2019 # Yuri Chornoivan , 2020 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Yuri Chornoivan , 2020\n" "Language-Team: Ukrainian (https://www.transifex.com/calamares/teams/20061/uk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: uk\n" "Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ GRUB." #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "ÐœÐ¾Ð½Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð²." #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "Помилка налаштовуваннÑ" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "Ðе визначено розділів Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾Ñ€Ð¸ÑтаннÑ
{!s}
." #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "Ðалаштуйте Ñлужби systemd" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "Ðе вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ Ñлужбу" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" "ВнаÑлідок виклику systemctl {arg!s} у chroot було повернуто " "Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð· кодом помилки {num! s}." #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "Ðе вдалоÑÑ Ð²Ð²Ñ–Ð¼ÐºÐ½ÑƒÑ‚Ð¸ Ñлужбу systemd {name!s}." #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "Ðе вдалоÑÑ Ð²Ð²Ñ–Ð¼ÐºÐ½ÑƒÑ‚Ð¸ Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ systemd {name!s}." #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð¼ÐºÐ½ÑƒÑ‚Ð¸ Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ systemd {name!s}." #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "Ðе вдалоÑÑ Ð·Ð°Ð¼Ð°Ñкувати вузол systemd {name!s}." #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "Ðевідомі команди systemd {command!s} та {suffix!s}" " Ð´Ð»Ñ Ð¿Ñ€Ð¸Ñтрою {name!s}." #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "Демонтувати файлові ÑиÑтеми." #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "Ð—Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¸Ñ… ÑиÑтем." #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "Спроба виконати rsync зазнала невдачі з кодом помилки {}." #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "Ðе вдалоÑÑ Ñ€Ð¾Ð·Ð¿Ð°ÐºÑƒÐ²Ð°Ñ‚Ð¸ образ «{}»" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ unsquashfs; переконайтеÑÑ, що вÑтановлено пакет squashfs-" "tools" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "Ðемає точки Ð¼Ð¾Ð½Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ ÐºÐ¾Ñ€ÐµÐ½ÐµÐ²Ð¾Ð³Ð¾ розділу" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" "У globalstorage не міÑтитьÑÑ ÐºÐ»ÑŽÑ‡Ð° «rootMountPoint». Ðе виконуватимемо " "ніÑких дій." #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "Помилкова точна Ð¼Ð¾Ð½Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ ÐºÐ¾Ñ€ÐµÐ½ÐµÐ²Ð¾Ð³Ð¾ розділу" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" "Ð”Ð»Ñ rootMountPoint вказано Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«{}». Такого шлÑху не Ñ–Ñнує. Ðе " "виконуватимемо ніÑких дій." #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "Помилкові Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ unsquash" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "Підтримки файлової ÑиÑтеми Ð´Ð»Ñ Â«{}» ({}) не передбачено" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "Вихідної файлової ÑиÑтеми «{}» не Ñ–Ñнує" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "ÐŸÑ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«{}» у цільовій ÑиÑтемі не Ñ” каталогом" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "Ðе вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати файл налаштувань KDM" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "Файла налаштувань KDM {!s} не Ñ–Ñнує" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ Ð´Ð¾ файла налаштувань LXDM" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "Файла налаштувань LXDM {!s} не Ñ–Ñнує" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ Ð´Ð¾ файла налаштувань LightDM" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "Файла налаштувань LightDM {!s} не Ñ–Ñнує" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "Ðе вдалоÑÑ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ñ‚Ð¸ LightDM" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "ЗаÑіб входу до ÑиÑтеми LightDM не вÑтановлено." #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ Ð´Ð¾ файла налаштувань SLIM" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "Файла налаштувань SLIM {!s} не Ñ–Ñнує" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "Ðе вибрано заÑобу ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¸Ñплеєм Ð´Ð»Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ displaymanager." #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" "СпиÑок заÑобів ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¸Ñплеєм Ñ” порожнім або невизначеним у " "bothglobalstorage та displaymanager.conf." #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ñобу ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¸Ñплеєм Ñ” неповними" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "Ðалаштовуємо mkinitcpio." #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" "Ðе вказано кореневої точки Ð¼Ð¾Ð½Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾Ñ€Ð¸ÑÑ‚Ð°Ð½Ð½Ñ Ñƒ
{!s}
." #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "Ðалаштовуємо зашифрований розділ резервної пам'Ñті." #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "Ð’Ñтановлюємо дані." #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "Ðалаштувати Ñлужби OpenRC" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "Ðе вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ Ñлужбу {name!s} до Ñ€Ñ–Ð²Ð½Ñ Ð·Ð°Ð¿ÑƒÑку {level!s}." #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð»ÑƒÑ‡Ð¸Ñ‚Ð¸ Ñлужбу {name!s} з Ñ€Ñ–Ð²Ð½Ñ Ð·Ð°Ð¿ÑƒÑку {level!s}." #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" "Ðевідома Ð´Ñ–Ñ Ð·Ñ– Ñлужбою {arg!s} Ð´Ð»Ñ Ñлужби {name!s} на рівні " "запуÑку {level!s}." #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" "УнаÑлідок Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÑƒ rc-update {arg!s} chroot повернуто " "Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ помилку із кодом {num!s}." #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "ШлÑху до Ñ€Ñ–Ð²Ð½Ñ Ð·Ð°Ð¿ÑƒÑку не Ñ–Ñнує" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" "ШлÑхом до Ñ€Ñ–Ð²Ð½Ñ Ð·Ð°Ð¿ÑƒÑку {level!s} вказано {path!s}. Такого " "шлÑху не Ñ–Ñнує." #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "Служби Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½Ðµ Ñ–Ñнує" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" "ШлÑхом до Ñлужби {name!s} вказано {path!s}. Такого шлÑху не " "Ñ–Ñнує." #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "Ðалаштувати тему Plymouth" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "ОброблÑємо пакунки (%(count)d з %(total)d)" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "Ð’Ñтановити пакети." #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Ð’Ñтановлюємо %(num)d пакунок." msgstr[1] "Ð’Ñтановлюємо %(num)d пакунки." msgstr[2] "Ð’Ñтановлюємо %(num)d пакунків." msgstr[3] "Ð’Ñтановлюємо один пакунок." #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Вилучаємо %(num)d пакунок." msgstr[1] "Вилучаємо %(num)d пакунки." msgstr[2] "Вилучаємо %(num)d пакунків." msgstr[3] "Вилучаємо один пакунок." #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "Ð’Ñтановити завантажувач." #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "Вилучити кориÑтувача портативної ÑиÑтеми із ÑиÑтеми призначеннÑ" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "Ð’Ñтановлюємо Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð°Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð¾Ð³Ð¾ годинника." #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "Створюємо initramfs за допомогою dracut." #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ dracut над призначеннÑм" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "Код виходу — {}" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "Ðалаштовуємо initramfs." #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "Ðалаштовуємо Ñлужбу dmcrypt OpenRC." #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "ЗапиÑуємо fstab." #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "Фіктивне Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ python." #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "Фіктивний крок python {}" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "Ðалаштовуємо локалі." #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "Зберігаємо Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼ÐµÑ€ÐµÐ¶Ñ–." calamares-3.2.20/lang/python/ur/000077500000000000000000000000001362604102500164155ustar00rootroot00000000000000calamares-3.2.20/lang/python/ur/LC_MESSAGES/000077500000000000000000000000001362604102500202025ustar00rootroot00000000000000calamares-3.2.20/lang/python/ur/LC_MESSAGES/python.mo000066400000000000000000000005711362604102500220630ustar00rootroot00000000000000Þ•$,8?9Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Language-Team: Urdu (https://www.transifex.com/calamares/teams/20061/ur/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: ur Plural-Forms: nplurals=2; plural=(n != 1); calamares-3.2.20/lang/python/ur/LC_MESSAGES/python.po000066400000000000000000000210651362604102500220670ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Urdu (https://www.transifex.com/calamares/teams/20061/ur/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ur\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "" #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "" #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "" #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "" #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "" calamares-3.2.20/lang/python/uz/000077500000000000000000000000001362604102500164255ustar00rootroot00000000000000calamares-3.2.20/lang/python/uz/LC_MESSAGES/000077500000000000000000000000001362604102500202125ustar00rootroot00000000000000calamares-3.2.20/lang/python/uz/LC_MESSAGES/python.mo000066400000000000000000000005631362604102500220740ustar00rootroot00000000000000Þ•$,899Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Language-Team: Uzbek (https://www.transifex.com/calamares/teams/20061/uz/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: uz Plural-Forms: nplurals=1; plural=0; calamares-3.2.20/lang/python/uz/LC_MESSAGES/python.po000066400000000000000000000210251362604102500220730ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Uzbek (https://www.transifex.com/calamares/teams/20061/uz/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: uz\n" "Plural-Forms: nplurals=1; plural=0;\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "" #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "" #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "" #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "" #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "" #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "" #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "" #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "" #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "" #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "" #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "" calamares-3.2.20/lang/python/zh_CN/000077500000000000000000000000001362604102500167705ustar00rootroot00000000000000calamares-3.2.20/lang/python/zh_CN/LC_MESSAGES/000077500000000000000000000000001362604102500205555ustar00rootroot00000000000000calamares-3.2.20/lang/python/zh_CN/LC_MESSAGES/python.mo000066400000000000000000000161711362604102500224410ustar00rootroot00000000000000Þ•FLa|JJL"—º3Õ 4"4W3Œ/Àð8#?$c'ˆ$°Õéù , #G k ‡ ž ³ Ë ,ë  * R? "’ µ Ñ é ý  4 #U $y 'ž Æ Û ;ù !5 5W 8 +Æ #ò 0 $G l Š ¢ Á <ß \y-ŽO¼M )ZX„`Ý>TDc;¨ äH…HÎ67Pˆ22Ð226i;|¸Ö!õ 6 CPh•µ'Ñù+HgB— Úû)B Uc} #¾â!ò3H(a6Š+Á!í )Jf|›*±VÜ3CFc<ªç[ebÈÞ1ô5&\C>5B4<F 8 6?!&-'. A;*D$ 192 #@,7(3" :0+/E%)=rc-update {arg!s} call in chroot returned error code {num!s}.systemctl {arg!s} call in chroot returned error code {num!s}.Bad mount point for root partitionBad unsquash configurationCannot add service {name!s} to run-level {level!s}.Cannot configure LightDMCannot disable systemd target {name!s}.Cannot enable systemd service {name!s}.Cannot enable systemd target {name!s}.Cannot mask systemd unit {name!s}.Cannot modify serviceCannot remove service {name!s} from run-level {level!s}.Cannot write KDM configuration fileCannot write LXDM configuration fileCannot write LightDM configuration fileCannot write SLIM configuration fileConfiguration ErrorConfigure GRUB.Configure OpenRC servicesConfigure Plymouth themeConfigure systemd servicesConfiguring OpenRC dmcrypt service.Configuring encrypted swap.Configuring initramfs.Configuring locales.Configuring mkinitcpio.Creating initramfs with dracut.Display manager configuration was incompleteDummy python job.Dummy python step {}Failed to find unsquashfs, make sure you have the squashfs-tools package installedFailed to run dracut on the targetFailed to unpack image "{}"Filling up filesystems.Install bootloader.Install packages.Installing data.Installing one package.Installing %(num)d packages.KDM config file {!s} does not existLXDM config file {!s} does not existLightDM config file {!s} does not existMounting partitions.No LightDM greeter installed.No display managers selected for the displaymanager module.No mount point for root partitionNo partitions are defined for
{!s}
to use.No root mount point is given for
{!s}
to use.Processing packages (%(count)d / %(total)d)Remove live user from target systemRemoving one package.Removing %(num)d packages.SLIM config file {!s} does not existSaving network configuration.Setting hardware clock.Target runlevel does not existTarget service does not existThe destination "{}" in the target system is not a directoryThe displaymanagers list is empty or undefined in bothglobalstorage and displaymanager.conf.The exit code was {}The filesystem for "{}" ({}) is not supportedThe path for runlevel {level!s} is {path!s}, which does not exist.The path for service {name!s} is {path!s}, which does not exist.The source filesystem "{}" does not existUnknown service-action {arg!s} for service {name!s} in run-level {level!s}.Unknown systemd commands {command!s} and {suffix!s} for unit {name!s}.Unmount file systems.Writing fstab.globalstorage does not contain a "rootMountPoint" key, doing nothingrootMountPoint is "{}", which does not exist, doing nothingrsync failed with error code {}.Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Last-Translator: Feng Chao , 2020 Language-Team: Chinese (China) (https://www.transifex.com/calamares/teams/20061/zh_CN/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: zh_CN Plural-Forms: nplurals=1; plural=0; chroot 中è¿è¡Œçš„ rc-update {arg!s} 返回错误 {num!s}.chroot 中的 systemctl {arg!s} 命令返回错误 {num!s}.错误的 root 分区挂载点错误的 unsquash é…置无法将æœåŠ¡ {name!s} 加入 {level!s} è¿è¡Œçº§åˆ«.无法é…ç½® LightDM无法ç¦ç”¨ systemd 目标 {name!s}.无法å¯ç”¨ systemd æœåŠ¡ {name!s}.无法å¯ç”¨ systemd 目标 {name!s}.无法å±è”½ systemd å•å…ƒ {name!s}.无法修改æœåŠ¡æ— æ³•ä»Ž {level!s} è¿è¡Œçº§åˆ«ä¸­åˆ é™¤æœåŠ¡ {name!s}。无法写入 KDM é…置文件无法写入 LXDM é…置文件无法写入 LightDM é…置文件无法写入 SLIM é…置文件é…置错误é…ç½® GRUB.é…ç½® OpenRC æœåŠ¡ã€‚é…ç½® Plymouth 主题é…ç½® systemd æœåŠ¡é…ç½® OpenRC dmcrypt æœåŠ¡ã€‚é…置加密交æ¢åˆ†åŒºã€‚正在é…ç½®åˆå§‹å†…存文件系统。正在进行本地化é…置。é…ç½® mkinitcpio.用 dracut 创建 initramfs.显示管ç†å™¨é…ç½®ä¸å®Œå…¨å ä½ Python 任务。å ä½ Python 步骤 {}未找到 unsquashfs,请确ä¿å®‰è£…了 squashfs-tools 软件包无法在目标中è¿è¡Œ dracut 解压镜åƒå¤±è´¥ "{}"写入文件系统。安装å¯åŠ¨åŠ è½½å™¨ã€‚å®‰è£…è½¯ä»¶åŒ…ã€‚å®‰è£…æ•°æ®.安装%(num)d软件包。KDM é…置文件 {!s} ä¸å­˜åœ¨LXDM é…置文件 {!s} ä¸å­˜åœ¨LightDM é…置文件 {!s} ä¸å­˜åœ¨æŒ‚载分区。未安装 LightDM 欢迎程åºã€‚显示管ç†å™¨æ¨¡å—中未选择显示管ç†å™¨ã€‚æ—  root 分区挂载点没有分é…分区给
{!s}
。 未设置
{!s}
è¦ä½¿ç”¨çš„æ ¹æŒ‚载点。软件包处ç†ä¸­ï¼ˆ%(count)d/%(total)d)从目标系统删除 live 用户移除%(num)d软件包。SLIM é…置文件 {!s} ä¸å­˜åœ¨æ­£åœ¨ä¿å­˜ç½‘络é…置。设置硬件时钟。目标è¿è¡Œçº§åˆ«ä¸å­˜åœ¨ã€‚目标æœåŠ¡ä¸å­˜åœ¨ç›®æ ‡ç³»ç»Ÿä¸­çš„ "{}" 䏿˜¯ä¸€ä¸ªç›®å½•globalstorage å’Œ displaymanager.conf é…置文件中都没有é…置显示管ç†å™¨ã€‚é€€å‡ºç æ˜¯ {}䏿”¯æŒæ–‡ä»¶ç³»ç»Ÿ "{}" ({})è¿è¡Œçº§åˆ« {level!s} 所在目录 {path!s} ä¸å­˜åœ¨ã€‚æœåŠ¡ {name!s} 的路径 {path!s} ä¸å­˜åœ¨ã€‚æºæ–‡ä»¶ç³»ç»Ÿ "{}" ä¸å­˜åœ¨æœªçŸ¥çš„æœåŠ¡åŠ¨ä½œ {arg!s},æœåŠ¡å: {name!s},è¿è¡Œçº§åˆ«: {level!s}.未知的 systemd 命令 {command!s} å’Œ {name!s} å•å…ƒå‰ç¼€ {suffix!s}.å¸è½½æ–‡ä»¶ç³»ç»Ÿã€‚正在写入 fstab。globalstorage æœªåŒ…å« "rootMountPoint",跳过rootMountPoint 是 "{}",ä¸å­˜åœ¨æ­¤ä½ç½®ï¼Œè·³è¿‡rsync æŠ¥é”™ï¼Œé”™è¯¯ç  {}.calamares-3.2.20/lang/python/zh_CN/LC_MESSAGES/python.po000066400000000000000000000262471362604102500224510ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Mingcong Bai , 2017 # plantman , 2017 # Feng Chao , 2020 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Feng Chao , 2020\n" "Language-Team: Chinese (China) (https://www.transifex.com/calamares/teams/20061/zh_CN/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: zh_CN\n" "Plural-Forms: nplurals=1; plural=0;\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "é…ç½® GRUB." #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "挂载分区。" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "é…置错误" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "没有分é…分区给
{!s}
。" #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "é…ç½® systemd æœåŠ¡" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "无法修改æœåŠ¡" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "chroot 中的 systemctl {arg!s} 命令返回错误 {num!s}." #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "无法å¯ç”¨ systemd æœåŠ¡ {name!s}." #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "无法å¯ç”¨ systemd 目标 {name!s}." #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "无法ç¦ç”¨ systemd 目标 {name!s}." #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "无法å±è”½ systemd å•å…ƒ {name!s}." #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "未知的 systemd 命令 {command!s} å’Œ {name!s} å•å…ƒå‰ç¼€ " "{suffix!s}." #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "å¸è½½æ–‡ä»¶ç³»ç»Ÿã€‚" #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "写入文件系统。" #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "rsync æŠ¥é”™ï¼Œé”™è¯¯ç  {}." #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "解压镜åƒå¤±è´¥ \"{}\"" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "未找到 unsquashfs,请确ä¿å®‰è£…了 squashfs-tools 软件包" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "æ—  root 分区挂载点" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "globalstorage æœªåŒ…å« \"rootMountPoint\",跳过" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "错误的 root 分区挂载点" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "rootMountPoint 是 \"{}\",ä¸å­˜åœ¨æ­¤ä½ç½®ï¼Œè·³è¿‡" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "错误的 unsquash é…ç½®" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "䏿”¯æŒæ–‡ä»¶ç³»ç»Ÿ \"{}\" ({})" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "æºæ–‡ä»¶ç³»ç»Ÿ \"{}\" ä¸å­˜åœ¨" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "目标系统中的 \"{}\" 䏿˜¯ä¸€ä¸ªç›®å½•" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "无法写入 KDM é…置文件" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "KDM é…置文件 {!s} ä¸å­˜åœ¨" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "无法写入 LXDM é…置文件" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "LXDM é…置文件 {!s} ä¸å­˜åœ¨" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "无法写入 LightDM é…置文件" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "LightDM é…置文件 {!s} ä¸å­˜åœ¨" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "无法é…ç½® LightDM" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "未安装 LightDM 欢迎程åºã€‚" #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "无法写入 SLIM é…置文件" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "SLIM é…置文件 {!s} ä¸å­˜åœ¨" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "显示管ç†å™¨æ¨¡å—中未选择显示管ç†å™¨ã€‚" #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "globalstorage å’Œ displaymanager.conf é…置文件中都没有é…置显示管ç†å™¨ã€‚" #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "显示管ç†å™¨é…ç½®ä¸å®Œå…¨" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "é…ç½® mkinitcpio." #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr " 未设置
{!s}
è¦ä½¿ç”¨çš„æ ¹æŒ‚载点。" #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "é…置加密交æ¢åˆ†åŒºã€‚" #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "安装数æ®." #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "é…ç½® OpenRC æœåŠ¡ã€‚" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "无法将æœåŠ¡ {name!s} 加入 {level!s} è¿è¡Œçº§åˆ«." #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "无法从 {level!s} è¿è¡Œçº§åˆ«ä¸­åˆ é™¤æœåŠ¡ {name!s}。" #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "未知的æœåŠ¡åŠ¨ä½œ {arg!s},æœåŠ¡å: {name!s},è¿è¡Œçº§åˆ«: {level!s}." #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "chroot 中è¿è¡Œçš„ rc-update {arg!s} 返回错误 {num!s}." #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "目标è¿è¡Œçº§åˆ«ä¸å­˜åœ¨ã€‚" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "è¿è¡Œçº§åˆ« {level!s} 所在目录 {path!s} ä¸å­˜åœ¨ã€‚" #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "目标æœåŠ¡ä¸å­˜åœ¨" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "æœåŠ¡ {name!s} 的路径 {path!s} ä¸å­˜åœ¨ã€‚" #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "é…ç½® Plymouth 主题" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "软件包处ç†ä¸­ï¼ˆ%(count)d/%(total)d)" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "安装软件包。" #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "安装%(num)d软件包。" #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "移除%(num)d软件包。" #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "安装å¯åŠ¨åŠ è½½å™¨ã€‚" #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "从目标系统删除 live 用户" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "设置硬件时钟。" #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "用 dracut 创建 initramfs." #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "无法在目标中è¿è¡Œ dracut " #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "é€€å‡ºç æ˜¯ {}" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "正在é…ç½®åˆå§‹å†…存文件系统。" #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "é…ç½® OpenRC dmcrypt æœåŠ¡ã€‚" #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "正在写入 fstab。" #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "å ä½ Python 任务。" #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "å ä½ Python 步骤 {}" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "正在进行本地化é…置。" #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "正在ä¿å­˜ç½‘络é…置。" calamares-3.2.20/lang/python/zh_TW/000077500000000000000000000000001362604102500170225ustar00rootroot00000000000000calamares-3.2.20/lang/python/zh_TW/LC_MESSAGES/000077500000000000000000000000001362604102500206075ustar00rootroot00000000000000calamares-3.2.20/lang/python/zh_TW/LC_MESSAGES/python.mo000066400000000000000000000164011362604102500224670ustar00rootroot00000000000000Þ•FLa|JJL"—º3Õ 4"4W3Œ/Àð8#?$c'ˆ$°Õéù , #G k ‡ ž ³ Ë ,ë  * R? "’ µ Ñ é ý  4 #U $y 'ž Æ Û ;ù !5 5W 8 +Æ #ò 0 $G l Š ¢ Á <ß \y-ŽO¼M )ZX„`Ý>TDc;¨ ä€W†WÞ6T8n§4¼4ñ4&3[8¢Ûö1 MZi~•%« Ñò "'=e„œE² ø4Jfy!±Î ì &6C!z;œ;Ø-$B!g‰§Ãßû-W?—#§HËA!VZxcÓ7S>i8¨áC>5B4<F 8 6?!&-'. A;*D$ 192 #@,7(3" :0+/E%)=rc-update {arg!s} call in chroot returned error code {num!s}.systemctl {arg!s} call in chroot returned error code {num!s}.Bad mount point for root partitionBad unsquash configurationCannot add service {name!s} to run-level {level!s}.Cannot configure LightDMCannot disable systemd target {name!s}.Cannot enable systemd service {name!s}.Cannot enable systemd target {name!s}.Cannot mask systemd unit {name!s}.Cannot modify serviceCannot remove service {name!s} from run-level {level!s}.Cannot write KDM configuration fileCannot write LXDM configuration fileCannot write LightDM configuration fileCannot write SLIM configuration fileConfiguration ErrorConfigure GRUB.Configure OpenRC servicesConfigure Plymouth themeConfigure systemd servicesConfiguring OpenRC dmcrypt service.Configuring encrypted swap.Configuring initramfs.Configuring locales.Configuring mkinitcpio.Creating initramfs with dracut.Display manager configuration was incompleteDummy python job.Dummy python step {}Failed to find unsquashfs, make sure you have the squashfs-tools package installedFailed to run dracut on the targetFailed to unpack image "{}"Filling up filesystems.Install bootloader.Install packages.Installing data.Installing one package.Installing %(num)d packages.KDM config file {!s} does not existLXDM config file {!s} does not existLightDM config file {!s} does not existMounting partitions.No LightDM greeter installed.No display managers selected for the displaymanager module.No mount point for root partitionNo partitions are defined for
{!s}
to use.No root mount point is given for
{!s}
to use.Processing packages (%(count)d / %(total)d)Remove live user from target systemRemoving one package.Removing %(num)d packages.SLIM config file {!s} does not existSaving network configuration.Setting hardware clock.Target runlevel does not existTarget service does not existThe destination "{}" in the target system is not a directoryThe displaymanagers list is empty or undefined in bothglobalstorage and displaymanager.conf.The exit code was {}The filesystem for "{}" ({}) is not supportedThe path for runlevel {level!s} is {path!s}, which does not exist.The path for service {name!s} is {path!s}, which does not exist.The source filesystem "{}" does not existUnknown service-action {arg!s} for service {name!s} in run-level {level!s}.Unknown systemd commands {command!s} and {suffix!s} for unit {name!s}.Unmount file systems.Writing fstab.globalstorage does not contain a "rootMountPoint" key, doing nothingrootMountPoint is "{}", which does not exist, doing nothingrsync failed with error code {}.Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2017-08-09 10:34+0000 Last-Translator: 黃æŸè«º , 2019 Language-Team: Chinese (Taiwan) (https://www.transifex.com/calamares/teams/20061/zh_TW/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: zh_TW Plural-Forms: nplurals=1; plural=0; 在 chroot 中呼å«çš„ rc-update {arg!s} 回傳了錯誤代碼 {num!s}。在 chroot 中呼å«çš„ systemctl {arg!s} 回傳了錯誤代碼 {num!s}。root åˆ†å‰²å€æŽ›è¼‰é»žéŒ¯èª¤éŒ¯èª¤çš„ unsquash 設定無法新增æœå‹™ {name!s} 到執行層級 {level!s}。無法設定 LightDM無法åœç”¨ systemd 目標 {name!s}。無法啟用 systemd æœå‹™ {name!s}。無法啟用 systemd 目標 {name!s}。無法 mask systemd å–®ä½ {name!s}。無法修改æœå‹™ç„¡æ³•移除æœå‹™ {name!s} 從執行層級 {level!s}。無法寫入 KDM 設定檔無法寫入 LXDM 設定檔無法寫入 LightDM 設定檔無法寫入 SLIM 設定檔設定錯誤設定 GRUB。設定 OpenRC æœå‹™è¨­å®š Plymouth 主題設定 systemd æœå‹™æ­£åœ¨è¨­å®š OpenRC dmcrypt æœå‹™ã€‚正在設定已加密的 swap。正在設定 initramfs。正在設定語系。正在設定 mkinitcpio。正在使用 dracut 建立 initramfs。顯示管ç†å™¨è¨­å®šä¸å®Œæ•´å‡çš„ python 工作。å‡çš„ python step {}找ä¸åˆ° unsquashfsï¼Œè«‹ç¢ºå®šæ‚¨å·²å®‰è£ squashfs-tools 軟體包在目標上執行 dracut å¤±æ•—ç„¡æ³•è§£é–‹æ˜ åƒæª” "{}"填滿檔案系統。安è£é–‹æ©Ÿè¼‰å…¥ç¨‹å¼ã€‚安è£è»Ÿé«”包。正在安è£è³‡æ–™ã€‚æ­£åœ¨å®‰è£ %(num)d 軟體包。KDM 設定檔 {!s} ä¸å­˜åœ¨LXDM 設定檔 {!s} ä¸å­˜åœ¨LightDM 設定檔 {!s} ä¸å­˜åœ¨æ­£åœ¨æŽ›è¼‰åˆ†å‰²å€ã€‚æœªå®‰è£ LightDM greeter。未在顯示管ç†å™¨æ¨¡çµ„中é¸å–顯示管ç†å™¨ã€‚沒有 root 分割å€çš„æŽ›è¼‰é»žæ²’有分割å€è¢«å®šç¾©ç‚º
{!s}
以供使用。沒有給定的根掛載點
{!s}
以供使用。正在處ç†è»Ÿé«”包 (%(count)d / %(total)d)從目標系統移除 live 使用者正在移除 %(num)d 軟體包。SLIM 設定檔 {!s} ä¸å­˜åœ¨æ­£åœ¨å„²å­˜ç¶²è·¯è¨­å®šã€‚正在設定硬體時é˜ã€‚目標執行層級ä¸å­˜åœ¨ç›®æ¨™æœå‹™ä¸å­˜åœ¨ç›®æ¨™ç³»çµ±ä¸­çš„目的地 "{}" 䏿˜¯ç›®éŒ„顯示管ç†å™¨æ¸…單為空或在全域儲存與 displaymanager.conf ä¸­çš†æœªå®šç¾©ã€‚çµæŸç¢¼ç‚º {}䏿”¯æ´ "{}" ({}) 的檔案系統執行層級 {level!s} 的路徑為 {path!s},ä¸å­˜åœ¨ã€‚æœå‹™ {name!s} 的路徑為 {path!s},ä¸å­˜åœ¨ã€‚ä¾†æºæª”案系統 "{}" ä¸å­˜åœ¨æœªçŸ¥çš„æœå‹™å‹•ä½œ {arg!s} 給æœå‹™ {name!s} 在執行層級 {level!s}。未知的 systemd 指令 {command!s} 與 {suffix!s} çµ¦å–®ä½ {name!s}。解除掛載檔案系統。正在寫入 fstab。globalstorage ä¸åŒ…å« "rootMountPoint" éµï¼Œä¸åšä»»ä½•事rootMountPoint 為 "{}",其ä¸å­˜åœ¨ï¼Œä¸åšä»»ä½•事rsync 失敗,錯誤碼 {} 。calamares-3.2.20/lang/python/zh_TW/LC_MESSAGES/python.po000066400000000000000000000263411362604102500224760ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # 黃æŸè«º , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: 黃æŸè«º , 2019\n" "Language-Team: Chinese (Taiwan) (https://www.transifex.com/calamares/teams/20061/zh_TW/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: zh_TW\n" "Plural-Forms: nplurals=1; plural=0;\n" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." msgstr "設定 GRUB。" #: src/modules/mount/main.py:38 msgid "Mounting partitions." msgstr "正在掛載分割å€ã€‚" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:201 #: src/modules/initcpiocfg/main.py:205 #: src/modules/luksopenswaphookcfg/main.py:95 #: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 #: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 #: src/modules/openrcdmcryptcfg/main.py:78 #: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:322 #: src/modules/fstab/main.py:328 src/modules/localecfg/main.py:144 #: src/modules/networkcfg/main.py:48 msgid "Configuration Error" msgstr "設定錯誤" #: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 #: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/fstab/main.py:323 msgid "No partitions are defined for
{!s}
to use." msgstr "沒有分割å€è¢«å®šç¾©ç‚º
{!s}
以供使用。" #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" msgstr "設定 systemd æœå‹™" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" msgstr "無法修改æœå‹™" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "在 chroot 中呼å«çš„ systemctl {arg!s} 回傳了錯誤代碼 {num!s}。" #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." msgstr "無法啟用 systemd æœå‹™ {name!s}。" #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." msgstr "無法啟用 systemd 目標 {name!s}。" #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." msgstr "無法åœç”¨ systemd 目標 {name!s}。" #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." msgstr "無法 mask systemd å–®ä½ {name!s}。" #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "未知的 systemd 指令 {command!s} 與 {suffix!s} çµ¦å–®ä½ " "{name!s}。" #: src/modules/umount/main.py:40 msgid "Unmount file systems." msgstr "解除掛載檔案系統。" #: src/modules/unpackfs/main.py:41 msgid "Filling up filesystems." msgstr "填滿檔案系統。" #: src/modules/unpackfs/main.py:184 msgid "rsync failed with error code {}." msgstr "rsync 失敗,錯誤碼 {} 。" #: src/modules/unpackfs/main.py:245 src/modules/unpackfs/main.py:268 msgid "Failed to unpack image \"{}\"" msgstr "ç„¡æ³•è§£é–‹æ˜ åƒæª” \"{}\"" #: src/modules/unpackfs/main.py:246 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "找ä¸åˆ° unsquashfsï¼Œè«‹ç¢ºå®šæ‚¨å·²å®‰è£ squashfs-tools 軟體包" #: src/modules/unpackfs/main.py:370 msgid "No mount point for root partition" msgstr "沒有 root 分割å€çš„æŽ›è¼‰é»ž" #: src/modules/unpackfs/main.py:371 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "globalstorage ä¸åŒ…å« \"rootMountPoint\" éµï¼Œä¸åšä»»ä½•事" #: src/modules/unpackfs/main.py:376 msgid "Bad mount point for root partition" msgstr "root åˆ†å‰²å€æŽ›è¼‰é»žéŒ¯èª¤" #: src/modules/unpackfs/main.py:377 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "rootMountPoint 為 \"{}\",其ä¸å­˜åœ¨ï¼Œä¸åšä»»ä½•事" #: src/modules/unpackfs/main.py:389 src/modules/unpackfs/main.py:393 #: src/modules/unpackfs/main.py:407 msgid "Bad unsquash configuration" msgstr "錯誤的 unsquash 設定" #: src/modules/unpackfs/main.py:390 msgid "The filesystem for \"{}\" ({}) is not supported" msgstr "䏿”¯æ´ \"{}\" ({}) 的檔案系統" #: src/modules/unpackfs/main.py:394 msgid "The source filesystem \"{}\" does not exist" msgstr "ä¾†æºæª”案系統 \"{}\" ä¸å­˜åœ¨" #: src/modules/unpackfs/main.py:408 msgid "The destination \"{}\" in the target system is not a directory" msgstr "目標系統中的目的地 \"{}\" 䏿˜¯ç›®éŒ„" #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" msgstr "無法寫入 KDM 設定檔" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" msgstr "KDM 設定檔 {!s} ä¸å­˜åœ¨" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" msgstr "無法寫入 LXDM 設定檔" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" msgstr "LXDM 設定檔 {!s} ä¸å­˜åœ¨" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" msgstr "無法寫入 LightDM 設定檔" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" msgstr "LightDM 設定檔 {!s} ä¸å­˜åœ¨" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" msgstr "無法設定 LightDM" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." msgstr "æœªå®‰è£ LightDM greeter。" #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" msgstr "無法寫入 SLIM 設定檔" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" msgstr "SLIM 設定檔 {!s} ä¸å­˜åœ¨" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." msgstr "未在顯示管ç†å™¨æ¨¡çµ„中é¸å–顯示管ç†å™¨ã€‚" #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "顯示管ç†å™¨æ¸…單為空或在全域儲存與 displaymanager.conf 中皆未定義。" #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" msgstr "顯示管ç†å™¨è¨­å®šä¸å®Œæ•´" #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." msgstr "正在設定 mkinitcpio。" #: src/modules/initcpiocfg/main.py:206 #: src/modules/luksopenswaphookcfg/main.py:100 #: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 #: src/modules/fstab/main.py:329 src/modules/localecfg/main.py:145 #: src/modules/networkcfg/main.py:49 msgid "No root mount point is given for
{!s}
to use." msgstr "沒有給定的根掛載點
{!s}
以供使用。" #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." msgstr "正在設定已加密的 swap。" #: src/modules/rawfs/main.py:35 msgid "Installing data." msgstr "正在安è£è³‡æ–™ã€‚" #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" msgstr "設定 OpenRC æœå‹™" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "無法新增æœå‹™ {name!s} 到執行層級 {level!s}。" #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "無法移除æœå‹™ {name!s} 從執行層級 {level!s}。" #: src/modules/services-openrc/main.py:70 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "未知的æœå‹™å‹•作 {arg!s} 給æœå‹™ {name!s} 在執行層級 {level!s}。" #: src/modules/services-openrc/main.py:103 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "在 chroot 中呼å«çš„ rc-update {arg!s} 回傳了錯誤代碼 {num!s}。" #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" msgstr "目標執行層級ä¸å­˜åœ¨" #: src/modules/services-openrc/main.py:111 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "執行層級 {level!s} 的路徑為 {path!s},ä¸å­˜åœ¨ã€‚" #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" msgstr "目標æœå‹™ä¸å­˜åœ¨" #: src/modules/services-openrc/main.py:120 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "æœå‹™ {name!s} 的路徑為 {path!s},ä¸å­˜åœ¨ã€‚" #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" msgstr "設定 Plymouth 主題" #: src/modules/packages/main.py:62 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "正在處ç†è»Ÿé«”包 (%(count)d / %(total)d)" #: src/modules/packages/main.py:64 src/modules/packages/main.py:74 msgid "Install packages." msgstr "安è£è»Ÿé«”包。" #: src/modules/packages/main.py:67 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "æ­£åœ¨å®‰è£ %(num)d 軟體包。" #: src/modules/packages/main.py:70 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "正在移除 %(num)d 軟體包。" #: src/modules/bootloader/main.py:51 msgid "Install bootloader." msgstr "安è£é–‹æ©Ÿè¼‰å…¥ç¨‹å¼ã€‚" #: src/modules/removeuser/main.py:34 msgid "Remove live user from target system" msgstr "從目標系統移除 live 使用者" #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." msgstr "正在設定硬體時é˜ã€‚" #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." msgstr "正在使用 dracut 建立 initramfs。" #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" msgstr "在目標上執行 dracut 失敗" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" msgstr "çµæŸç¢¼ç‚º {}" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." msgstr "正在設定 initramfs。" #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." msgstr "正在設定 OpenRC dmcrypt æœå‹™ã€‚" #: src/modules/fstab/main.py:38 msgid "Writing fstab." msgstr "正在寫入 fstab。" #: src/modules/dummypython/main.py:44 msgid "Dummy python job." msgstr "å‡çš„ python 工作。" #: src/modules/dummypython/main.py:97 msgid "Dummy python step {}" msgstr "å‡çš„ python step {}" #: src/modules/localecfg/main.py:39 msgid "Configuring locales." msgstr "正在設定語系。" #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." msgstr "正在儲存網路設定。" calamares-3.2.20/lang/txload.cpp000066400000000000000000000140151362604102500164460ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ /* * Tool to find differences between translations (can be used to help * merging them into one). See usage string, below, for details. */ #include #include #include #include #include static const char usage[] = "Usage: txload [ ...]\n" "\n" "Reads a .ts source file and zero or more .ts \n" "files, and does a comparison between the translations. Source (English)\n" "strings that are untranslated are flagged in each of the translation\n" "files, while differences in the translations are themselves also shown.\n" "\n" "Outputs to stdout a human-readable list of differences between the\n" "translations.\n"; bool load_file(const char* filename, QDomDocument& doc) { QFile file(filename); QString err; int err_line, err_column; if (!file.open(QIODevice::ReadOnly)) { qDebug() << "Could not open" << filename; return false; } QByteArray ba( file.read(1024 * 1024) ); qDebug() << "Read" << ba.length() << "bytes from" << filename; if (!doc.setContent(ba, &err, &err_line, &err_column)) { qDebug() << "Could not read" << filename << ':' << err_line << ':' << err_column << ' ' << err; file.close(); return false; } file.close(); return true; } QDomElement find_context(QDomDocument& doc, const QString& name) { QDomElement top = doc.documentElement(); QDomNode n = top.firstChild(); while (!n.isNull()) { if (n.isElement()) { QDomElement e = n.toElement(); if ( ( e.tagName() == "context" ) && ( e.firstChildElement( "name" ).text() == name ) ) return e; } n = n.nextSibling(); } return QDomElement(); } QDomElement find_message(QDomElement& context, const QString& source) { QDomNode n = context.firstChild(); while (!n.isNull()) { if (n.isElement()) { QDomElement e = n.toElement(); if ( e.tagName() == "message" ) { QString msource = e.firstChildElement( "source" ).text(); if ( msource == source ) return e; } } n = n.nextSibling(); } return QDomElement(); } bool merge_into(QDomElement& master, QDomElement& sub) { QDomNode n = sub.firstChild(); while (!n.isNull()) { if (n.isElement()) { QDomElement e = n.toElement(); if ( e.tagName() == "message" ) { QString source = e.firstChildElement( "source" ).text(); QString translation = e.firstChildElement( "translation" ).text(); QDomElement masterTranslation = find_message( master, source ); if ( masterTranslation.isNull() ) { qDebug() << "No master translation for" << source; return false; } QString msource = masterTranslation.firstChildElement( "source" ).text(); QString mtranslation = masterTranslation.firstChildElement( "translation" ).text(); if ( source != msource ) { qDebug() << "Mismatch for messages\n" << source << '\n' << msource; return false; } if ( !translation.isEmpty() && ( translation != mtranslation ) ) { qDebug() << "\n\n\nSource:" << source << "\nTL1:" << mtranslation << "\nTL2:" << translation; } } } n = n.nextSibling(); } return true; } bool merge_into(QDomDocument& master, QDomElement& context) { QDomElement name = context.firstChildElement( "name" ); if ( name.isNull() ) return false; QString contextname = name.text(); QDomElement masterContext = find_context( master, contextname ); if ( masterContext.isNull() ) { qDebug() << "Master document has no context" << contextname; return false; } return merge_into( masterContext, context ); } bool merge_into(QDomDocument& master, QDomDocument& sub) { QDomElement top = sub.documentElement(); QDomNode n = top.firstChild(); while (!n.isNull()) { if (n.isElement()) { QDomElement e = n.toElement(); if ( e.tagName() == "context" ) if ( !merge_into( master, e ) ) return false; } n = n.nextSibling(); } return true; } int main(int argc, char** argv) { QCoreApplication a(argc, argv); if (argc < 2) { qWarning() << usage; return 1; } QDomDocument doc("master"); if ( !load_file(argv[1], doc) ) return 1; for (int i = 2; i < argc; ++i) { QDomDocument subdoc("sub"); if ( !load_file(argv[i], subdoc) ) return 1; if ( !merge_into( doc, subdoc ) ) return 1; } QString outfilename( argv[1] ); outfilename.append( ".new" ); QFile outfile(outfilename); if (!outfile.open(QIODevice::WriteOnly)) { qDebug() << "Could not open" << outfilename; return 1; } outfile.write( doc.toString(4).toUtf8() ); outfile.close(); return 0; } calamares-3.2.20/lang/tz_en.ts000066400000000000000000003133121362604102500161400ustar00rootroot00000000000000 QObject Africa tz_regions America tz_regions Antarctica tz_regions Arctic tz_regions Asia tz_regions Atlantic tz_regions Australia tz_regions Europe tz_regions Indian tz_regions Pacific tz_regions Abidjan tz_names Accra tz_names Adak tz_names Addis Ababa tz_names Adelaide tz_names Aden tz_names Algiers tz_names Almaty tz_names Amman tz_names Amsterdam tz_names Anadyr tz_names Anchorage tz_names Andorra tz_names Anguilla tz_names Antananarivo tz_names Antigua tz_names Apia tz_names Aqtau tz_names Aqtobe tz_names Araguaina tz_names Argentina/Buenos Aires tz_names Argentina/Catamarca tz_names Argentina/Cordoba tz_names Argentina/Jujuy tz_names Argentina/La Rioja tz_names Argentina/Mendoza tz_names Argentina/Rio Gallegos tz_names Argentina/Salta tz_names Argentina/San Juan tz_names Argentina/San Luis tz_names Argentina/Tucuman tz_names Argentina/Ushuaia tz_names Aruba tz_names Ashgabat tz_names Asmara tz_names Astrakhan tz_names Asuncion tz_names Athens tz_names Atikokan tz_names Atyrau tz_names Auckland tz_names Azores tz_names Baghdad tz_names Bahia tz_names Bahia Banderas tz_names Bahrain tz_names Baku tz_names Bamako tz_names Bangkok tz_names Bangui tz_names Banjul tz_names Barbados tz_names Barnaul tz_names Beirut tz_names Belem tz_names Belgrade tz_names Belize tz_names Berlin tz_names Bermuda tz_names Bishkek tz_names Bissau tz_names Blanc-Sablon tz_names Blantyre tz_names Boa Vista tz_names Bogota tz_names Boise tz_names Bougainville tz_names Bratislava tz_names Brazzaville tz_names Brisbane tz_names Broken Hill tz_names Brunei tz_names Brussels tz_names Bucharest tz_names Budapest tz_names Bujumbura tz_names Busingen tz_names Cairo tz_names Cambridge Bay tz_names Campo Grande tz_names Canary tz_names Cancun tz_names Cape Verde tz_names Caracas tz_names Casablanca tz_names Casey tz_names Cayenne tz_names Cayman tz_names Ceuta tz_names Chagos tz_names Chatham tz_names Chicago tz_names Chihuahua tz_names Chisinau tz_names Chita tz_names Choibalsan tz_names Christmas tz_names Chuuk tz_names Cocos tz_names Colombo tz_names Comoro tz_names Conakry tz_names Copenhagen tz_names Costa Rica tz_names Creston tz_names Cuiaba tz_names Curacao tz_names Currie tz_names Dakar tz_names Damascus tz_names Danmarkshavn tz_names Dar es Salaam tz_names Darwin tz_names Davis tz_names Dawson tz_names Dawson Creek tz_names Denver tz_names Detroit tz_names Dhaka tz_names Dili tz_names Djibouti tz_names Dominica tz_names Douala tz_names Dubai tz_names Dublin tz_names DumontDUrville tz_names Dushanbe tz_names Easter tz_names Edmonton tz_names Efate tz_names Eirunepe tz_names El Aaiun tz_names El Salvador tz_names Enderbury tz_names Eucla tz_names Fakaofo tz_names Famagusta tz_names Faroe tz_names Fiji tz_names Fort Nelson tz_names Fortaleza tz_names Freetown tz_names Funafuti tz_names Gaborone tz_names Galapagos tz_names Gambier tz_names Gaza tz_names Gibraltar tz_names Glace Bay tz_names Godthab tz_names Goose Bay tz_names Grand Turk tz_names Grenada tz_names Guadalcanal tz_names Guadeloupe tz_names Guam tz_names Guatemala tz_names Guayaquil tz_names Guernsey tz_names Guyana tz_names Halifax tz_names Harare tz_names Havana tz_names Hebron tz_names Helsinki tz_names Hermosillo tz_names Ho Chi Minh tz_names Hobart tz_names Hong Kong tz_names Honolulu tz_names Hovd tz_names Indiana/Indianapolis tz_names Indiana/Knox tz_names Indiana/Marengo tz_names Indiana/Petersburg tz_names Indiana/Tell City tz_names Indiana/Vevay tz_names Indiana/Vincennes tz_names Indiana/Winamac tz_names Inuvik tz_names Iqaluit tz_names Irkutsk tz_names Isle of Man tz_names Istanbul tz_names Jakarta tz_names Jamaica tz_names Jayapura tz_names Jersey tz_names Jerusalem tz_names Johannesburg tz_names Juba tz_names Juneau tz_names Kabul tz_names Kaliningrad tz_names Kamchatka tz_names Kampala tz_names Karachi tz_names Kathmandu tz_names Kentucky/Louisville tz_names Kentucky/Monticello tz_names Kerguelen tz_names Khandyga tz_names Khartoum tz_names Kiev tz_names Kyiv Kigali tz_names Kinshasa tz_names Kiritimati tz_names Kirov tz_names Kolkata tz_names Kosrae tz_names Kralendijk tz_names Krasnoyarsk tz_names Kuala Lumpur tz_names Kuching tz_names Kuwait tz_names Kwajalein tz_names La Paz tz_names Lagos tz_names Libreville tz_names Lima tz_names Lindeman tz_names Lisbon tz_names Ljubljana tz_names Lome tz_names London tz_names Longyearbyen tz_names Lord Howe tz_names Los Angeles tz_names Lower Princes tz_names Luanda tz_names Lubumbashi tz_names Lusaka tz_names Luxembourg tz_names Macau tz_names Maceio tz_names Macquarie tz_names Madeira tz_names Madrid tz_names Magadan tz_names Mahe tz_names Majuro tz_names Makassar tz_names Malabo tz_names Maldives tz_names Malta tz_names Managua tz_names Manaus tz_names Manila tz_names Maputo tz_names Mariehamn tz_names Marigot tz_names Marquesas tz_names Martinique tz_names Maseru tz_names Matamoros tz_names Mauritius tz_names Mawson tz_names Mayotte tz_names Mazatlan tz_names Mbabane tz_names McMurdo tz_names Melbourne tz_names Menominee tz_names Merida tz_names Metlakatla tz_names Mexico City tz_names Midway tz_names Minsk tz_names Miquelon tz_names Mogadishu tz_names Monaco tz_names Moncton tz_names Monrovia tz_names Monterrey tz_names Montevideo tz_names Montserrat tz_names Moscow tz_names Muscat tz_names Nairobi tz_names Nassau tz_names Nauru tz_names Ndjamena tz_names New York tz_names Niamey tz_names Nicosia tz_names Nipigon tz_names Niue tz_names Nome tz_names Norfolk tz_names Noronha tz_names North Dakota/Beulah tz_names North Dakota/Center tz_names North Dakota/New Salem tz_names Nouakchott tz_names Noumea tz_names Novokuznetsk tz_names Novosibirsk tz_names Ojinaga tz_names Omsk tz_names Oral tz_names Oslo tz_names Ouagadougou tz_names Pago Pago tz_names Palau tz_names Palmer tz_names Panama tz_names Pangnirtung tz_names Paramaribo tz_names Paris tz_names Perth tz_names Phnom Penh tz_names Phoenix tz_names Pitcairn tz_names Podgorica tz_names Pohnpei tz_names Pontianak tz_names Port Moresby tz_names Port of Spain tz_names Port-au-Prince tz_names Porto Velho tz_names Porto-Novo tz_names Prague tz_names Puerto Rico tz_names Punta Arenas tz_names Pyongyang tz_names Qatar tz_names Qostanay tz_names Qyzylorda tz_names Rainy River tz_names Rankin Inlet tz_names Rarotonga tz_names Recife tz_names Regina tz_names Resolute tz_names Reunion tz_names Reykjavik tz_names Riga tz_names Rio Branco tz_names Riyadh tz_names Rome tz_names Rothera tz_names Saipan tz_names Sakhalin tz_names Samara tz_names Samarkand tz_names San Marino tz_names Santarem tz_names Santiago tz_names Santo Domingo tz_names Sao Paulo tz_names Sao Tome tz_names Sarajevo tz_names Saratov tz_names Scoresbysund tz_names Seoul tz_names Shanghai tz_names Simferopol tz_names Singapore tz_names Sitka tz_names Skopje tz_names Sofia tz_names South Georgia tz_names Srednekolymsk tz_names St Barthelemy tz_names St Helena tz_names St Johns tz_names St Kitts tz_names St Lucia tz_names St Thomas tz_names St Vincent tz_names Stanley tz_names Stockholm tz_names Swift Current tz_names Sydney tz_names Syowa tz_names Tahiti tz_names Taipei tz_names Tallinn tz_names Tarawa tz_names Tashkent tz_names Tbilisi tz_names Tegucigalpa tz_names Tehran tz_names Thimphu tz_names Thule tz_names Thunder Bay tz_names Tijuana tz_names Tirane tz_names Tokyo tz_names Tomsk tz_names Tongatapu tz_names Toronto tz_names Tortola tz_names Tripoli tz_names Troll tz_names Tunis tz_names Ulaanbaatar tz_names Ulyanovsk tz_names Urumqi tz_names Ust-Nera tz_names Uzhgorod tz_names Vaduz tz_names Vancouver tz_names Vatican tz_names Vienna tz_names Vientiane tz_names Vilnius tz_names Vladivostok tz_names Volgograd tz_names Vostok tz_names Wake tz_names Wallis tz_names Warsaw tz_names Whitehorse tz_names Windhoek tz_names Winnipeg tz_names Yakutat tz_names Yakutsk tz_names Yangon tz_names Yekaterinburg tz_names Yellowknife tz_names Yerevan tz_names Zagreb tz_names Zaporozhye tz_names Zurich tz_names calamares-3.2.20/lang/tz_nl.ts000066400000000000000000003131711362604102500161520ustar00rootroot00000000000000 QObject Africa tz_regions Afrika America tz_regions Amerika Antarctica tz_regions Arctic tz_regions Asia tz_regions Azië Atlantic tz_regions Atlantisch Australia tz_regions Australië Europe tz_regions Europa Indian tz_regions Pacific tz_regions Stille Oceaan Abidjan tz_names Accra tz_names Adak tz_names Addis Ababa tz_names Adelaide tz_names Aden tz_names Algiers tz_names Almaty tz_names Amman tz_names Amsterdam tz_names Anadyr tz_names Anchorage tz_names Andorra tz_names Anguilla tz_names Antananarivo tz_names Antigua tz_names Apia tz_names Aqtau tz_names Aqtobe tz_names Araguaina tz_names Argentina/Buenos Aires tz_names Argentina/Catamarca tz_names Argentina/Cordoba tz_names Argentina/Jujuy tz_names Argentina/La Rioja tz_names Argentina/Mendoza tz_names Argentina/Rio Gallegos tz_names Argentina/Salta tz_names Argentina/San Juan tz_names Argentina/San Luis tz_names Argentina/Tucuman tz_names Argentina/Ushuaia tz_names Aruba tz_names Ashgabat tz_names Asmara tz_names Astrakhan tz_names Asuncion tz_names Athens tz_names Atikokan tz_names Atyrau tz_names Auckland tz_names Azores tz_names Baghdad tz_names Bahia tz_names Bahia Banderas tz_names Bahrain tz_names Baku tz_names Bamako tz_names Bangkok tz_names Bangui tz_names Banjul tz_names Barbados tz_names Barnaul tz_names Beirut tz_names Belem tz_names Belgrade tz_names Belize tz_names Berlin tz_names Berlijn Bermuda tz_names Bishkek tz_names Bissau tz_names Blanc-Sablon tz_names Blantyre tz_names Boa Vista tz_names Bogota tz_names Boise tz_names Bougainville tz_names Bratislava tz_names Brazzaville tz_names Brisbane tz_names Broken Hill tz_names Brunei tz_names Brussels tz_names Bucharest tz_names Budapest tz_names Bujumbura tz_names Busingen tz_names Cairo tz_names Cambridge Bay tz_names Campo Grande tz_names Canary tz_names Cancun tz_names Cape Verde tz_names Caracas tz_names Casablanca tz_names Casey tz_names Cayenne tz_names Cayman tz_names Ceuta tz_names Chagos tz_names Chatham tz_names Chicago tz_names Chihuahua tz_names Chisinau tz_names Chita tz_names Choibalsan tz_names Christmas tz_names Chuuk tz_names Cocos tz_names Colombo tz_names Comoro tz_names Conakry tz_names Copenhagen tz_names Costa Rica tz_names Creston tz_names Cuiaba tz_names Curacao tz_names Currie tz_names Dakar tz_names Damascus tz_names Danmarkshavn tz_names Dar es Salaam tz_names Darwin tz_names Davis tz_names Dawson tz_names Dawson Creek tz_names Denver tz_names Detroit tz_names Dhaka tz_names Dili tz_names Djibouti tz_names Dominica tz_names Douala tz_names Dubai tz_names Dublin tz_names DumontDUrville tz_names Dushanbe tz_names Easter tz_names Edmonton tz_names Efate tz_names Eirunepe tz_names El Aaiun tz_names El Salvador tz_names Enderbury tz_names Eucla tz_names Fakaofo tz_names Famagusta tz_names Faroe tz_names Fiji tz_names Fort Nelson tz_names Fortaleza tz_names Freetown tz_names Funafuti tz_names Gaborone tz_names Galapagos tz_names Gambier tz_names Gaza tz_names Gibraltar tz_names Glace Bay tz_names Godthab tz_names Goose Bay tz_names Grand Turk tz_names Grenada tz_names Guadalcanal tz_names Guadeloupe tz_names Guam tz_names Guatemala tz_names Guayaquil tz_names Guernsey tz_names Guyana tz_names Halifax tz_names Harare tz_names Havana tz_names Hebron tz_names Helsinki tz_names Hermosillo tz_names Ho Chi Minh tz_names Hobart tz_names Hong Kong tz_names Honolulu tz_names Hovd tz_names Indiana/Indianapolis tz_names Indiana/Knox tz_names Indiana/Marengo tz_names Indiana/Petersburg tz_names Indiana/Tell City tz_names Indiana/Vevay tz_names Indiana/Vincennes tz_names Indiana/Winamac tz_names Inuvik tz_names Iqaluit tz_names Irkutsk tz_names Isle of Man tz_names Istanbul tz_names Jakarta tz_names Jamaica tz_names Jayapura tz_names Jersey tz_names Jerusalem tz_names Johannesburg tz_names Juba tz_names Juneau tz_names Kabul tz_names Kaliningrad tz_names Kamchatka tz_names Kampala tz_names Karachi tz_names Kathmandu tz_names Kentucky/Louisville tz_names Kentucky/Monticello tz_names Kerguelen tz_names Khandyga tz_names Khartoum tz_names Kiev tz_names Kigali tz_names Kinshasa tz_names Kiritimati tz_names Kirov tz_names Kolkata tz_names Kosrae tz_names Kralendijk tz_names Krasnoyarsk tz_names Kuala Lumpur tz_names Kuching tz_names Kuwait tz_names Kwajalein tz_names La Paz tz_names Lagos tz_names Libreville tz_names Lima tz_names Lindeman tz_names Lisbon tz_names Ljubljana tz_names Lome tz_names London tz_names Longyearbyen tz_names Lord Howe tz_names Los Angeles tz_names Lower Princes tz_names Luanda tz_names Lubumbashi tz_names Lusaka tz_names Luxembourg tz_names Macau tz_names Maceio tz_names Macquarie tz_names Madeira tz_names Madrid tz_names Magadan tz_names Mahe tz_names Majuro tz_names Makassar tz_names Malabo tz_names Maldives tz_names Malta tz_names Managua tz_names Manaus tz_names Manila tz_names Maputo tz_names Mariehamn tz_names Marigot tz_names Marquesas tz_names Martinique tz_names Maseru tz_names Matamoros tz_names Mauritius tz_names Mawson tz_names Mayotte tz_names Mazatlan tz_names Mbabane tz_names McMurdo tz_names Melbourne tz_names Menominee tz_names Merida tz_names Metlakatla tz_names Mexico City tz_names Midway tz_names Minsk tz_names Miquelon tz_names Mogadishu tz_names Monaco tz_names Moncton tz_names Monrovia tz_names Monterrey tz_names Montevideo tz_names Montserrat tz_names Moscow tz_names Muscat tz_names Nairobi tz_names Nassau tz_names Nauru tz_names Ndjamena tz_names New York tz_names Niamey tz_names Nicosia tz_names Nipigon tz_names Niue tz_names Nome tz_names Norfolk tz_names Noronha tz_names North Dakota/Beulah tz_names North Dakota/Center tz_names North Dakota/New Salem tz_names Nouakchott tz_names Noumea tz_names Novokuznetsk tz_names Novosibirsk tz_names Ojinaga tz_names Omsk tz_names Oral tz_names Oslo tz_names Ouagadougou tz_names Pago Pago tz_names Palau tz_names Palmer tz_names Panama tz_names Pangnirtung tz_names Paramaribo tz_names Paris tz_names Parijs Perth tz_names Phnom Penh tz_names Phoenix tz_names Pitcairn tz_names Podgorica tz_names Pohnpei tz_names Pontianak tz_names Port Moresby tz_names Port of Spain tz_names Port-au-Prince tz_names Porto Velho tz_names Porto-Novo tz_names Prague tz_names Puerto Rico tz_names Punta Arenas tz_names Pyongyang tz_names Qatar tz_names Qostanay tz_names Qyzylorda tz_names Rainy River tz_names Rankin Inlet tz_names Rarotonga tz_names Recife tz_names Regina tz_names Resolute tz_names Reunion tz_names Reykjavik tz_names Riga tz_names Rio Branco tz_names Riyadh tz_names Rome tz_names Rothera tz_names Saipan tz_names Sakhalin tz_names Samara tz_names Samarkand tz_names San Marino tz_names Santarem tz_names Santiago tz_names Santo Domingo tz_names Sao Paulo tz_names Sao Tome tz_names Sarajevo tz_names Saratov tz_names Scoresbysund tz_names Seoul tz_names Shanghai tz_names Simferopol tz_names Singapore tz_names Sitka tz_names Skopje tz_names Sofia tz_names South Georgia tz_names Srednekolymsk tz_names St Barthelemy tz_names St Helena tz_names St Johns tz_names St Kitts tz_names St Lucia tz_names St Thomas tz_names St Vincent tz_names Stanley tz_names Stockholm tz_names Swift Current tz_names Sydney tz_names Syowa tz_names Tahiti tz_names Taipei tz_names Tallinn tz_names Tarawa tz_names Tashkent tz_names Tbilisi tz_names Tegucigalpa tz_names Tehran tz_names Thimphu tz_names Thule tz_names Thunder Bay tz_names Tijuana tz_names Tirane tz_names Tokyo tz_names Tomsk tz_names Tongatapu tz_names Toronto tz_names Tortola tz_names Tripoli tz_names Troll tz_names Tunis tz_names Ulaanbaatar tz_names Ulyanovsk tz_names Urumqi tz_names Ust-Nera tz_names Uzhgorod tz_names Vaduz tz_names Vancouver tz_names Vatican tz_names Vienna tz_names Vientiane tz_names Vilnius tz_names Vladivostok tz_names Volgograd tz_names Vostok tz_names Wake tz_names Wallis tz_names Warsaw tz_names Whitehorse tz_names Windhoek tz_names Winnipeg tz_names Yakutat tz_names Yakutsk tz_names Yangon tz_names Yekaterinburg tz_names Yellowknife tz_names Yerevan tz_names Zagreb tz_names Zaporozhye tz_names Zurich tz_names calamares-3.2.20/lang/tz_uk.ts000066400000000000000000003133131362604102500161560ustar00rootroot00000000000000 QObject Africa tz_regions America tz_regions Antarctica tz_regions Arctic tz_regions Asia tz_regions Atlantic tz_regions Australia tz_regions Europe tz_regions Indian tz_regions Pacific tz_regions Abidjan tz_names Accra tz_names Adak tz_names Addis Ababa tz_names Adelaide tz_names Aden tz_names Algiers tz_names Almaty tz_names Amman tz_names Amsterdam tz_names Anadyr tz_names Anchorage tz_names Andorra tz_names Anguilla tz_names Antananarivo tz_names Antigua tz_names Apia tz_names Aqtau tz_names Aqtobe tz_names Araguaina tz_names Argentina/Buenos Aires tz_names Argentina/Catamarca tz_names Argentina/Cordoba tz_names Argentina/Jujuy tz_names Argentina/La Rioja tz_names Argentina/Mendoza tz_names Argentina/Rio Gallegos tz_names Argentina/Salta tz_names Argentina/San Juan tz_names Argentina/San Luis tz_names Argentina/Tucuman tz_names Argentina/Ushuaia tz_names Aruba tz_names Ashgabat tz_names Asmara tz_names Astrakhan tz_names Asuncion tz_names Athens tz_names Atikokan tz_names Atyrau tz_names Auckland tz_names Azores tz_names Baghdad tz_names Bahia tz_names Bahia Banderas tz_names Bahrain tz_names Baku tz_names Bamako tz_names Bangkok tz_names Bangui tz_names Banjul tz_names Barbados tz_names Barnaul tz_names Beirut tz_names Belem tz_names Belgrade tz_names Belize tz_names Berlin tz_names Bermuda tz_names Bishkek tz_names Bissau tz_names Blanc-Sablon tz_names Blantyre tz_names Boa Vista tz_names Bogota tz_names Boise tz_names Bougainville tz_names Bratislava tz_names Brazzaville tz_names Brisbane tz_names Broken Hill tz_names Brunei tz_names Brussels tz_names Bucharest tz_names Budapest tz_names Bujumbura tz_names Busingen tz_names Cairo tz_names Cambridge Bay tz_names Campo Grande tz_names Canary tz_names Cancun tz_names Cape Verde tz_names Caracas tz_names Casablanca tz_names Casey tz_names Cayenne tz_names Cayman tz_names Ceuta tz_names Chagos tz_names Chatham tz_names Chicago tz_names Chihuahua tz_names Chisinau tz_names Chita tz_names Choibalsan tz_names Christmas tz_names Chuuk tz_names Cocos tz_names Colombo tz_names Comoro tz_names Conakry tz_names Copenhagen tz_names Costa Rica tz_names Creston tz_names Cuiaba tz_names Curacao tz_names Currie tz_names Dakar tz_names Damascus tz_names Danmarkshavn tz_names Dar es Salaam tz_names Darwin tz_names Davis tz_names Dawson tz_names Dawson Creek tz_names Denver tz_names Detroit tz_names Dhaka tz_names Dili tz_names Djibouti tz_names Dominica tz_names Douala tz_names Dubai tz_names Dublin tz_names DumontDUrville tz_names Dushanbe tz_names Easter tz_names Edmonton tz_names Efate tz_names Eirunepe tz_names El Aaiun tz_names El Salvador tz_names Enderbury tz_names Eucla tz_names Fakaofo tz_names Famagusta tz_names Faroe tz_names Fiji tz_names Fort Nelson tz_names Fortaleza tz_names Freetown tz_names Funafuti tz_names Gaborone tz_names Galapagos tz_names Gambier tz_names Gaza tz_names Gibraltar tz_names Glace Bay tz_names Godthab tz_names Goose Bay tz_names Grand Turk tz_names Grenada tz_names Guadalcanal tz_names Guadeloupe tz_names Guam tz_names Guatemala tz_names Guayaquil tz_names Guernsey tz_names Guyana tz_names Halifax tz_names Harare tz_names Havana tz_names Hebron tz_names Helsinki tz_names Hermosillo tz_names Ho Chi Minh tz_names Hobart tz_names Hong Kong tz_names Honolulu tz_names Hovd tz_names Indiana/Indianapolis tz_names Indiana/Knox tz_names Indiana/Marengo tz_names Indiana/Petersburg tz_names Indiana/Tell City tz_names Indiana/Vevay tz_names Indiana/Vincennes tz_names Indiana/Winamac tz_names Inuvik tz_names Iqaluit tz_names Irkutsk tz_names Isle of Man tz_names Istanbul tz_names Jakarta tz_names Jamaica tz_names Jayapura tz_names Jersey tz_names Jerusalem tz_names Johannesburg tz_names Juba tz_names Juneau tz_names Kabul tz_names Kaliningrad tz_names Kamchatka tz_names Kampala tz_names Karachi tz_names Kathmandu tz_names Kentucky/Louisville tz_names Kentucky/Monticello tz_names Kerguelen tz_names Khandyga tz_names Khartoum tz_names Kiev tz_names Київ Kigali tz_names Kinshasa tz_names Kiritimati tz_names Kirov tz_names Kolkata tz_names Kosrae tz_names Kralendijk tz_names Krasnoyarsk tz_names Kuala Lumpur tz_names Kuching tz_names Kuwait tz_names Kwajalein tz_names La Paz tz_names Lagos tz_names Libreville tz_names Lima tz_names Lindeman tz_names Lisbon tz_names Ljubljana tz_names Lome tz_names London tz_names Longyearbyen tz_names Lord Howe tz_names Los Angeles tz_names Lower Princes tz_names Luanda tz_names Lubumbashi tz_names Lusaka tz_names Luxembourg tz_names Macau tz_names Maceio tz_names Macquarie tz_names Madeira tz_names Madrid tz_names Magadan tz_names Mahe tz_names Majuro tz_names Makassar tz_names Malabo tz_names Maldives tz_names Malta tz_names Managua tz_names Manaus tz_names Manila tz_names Maputo tz_names Mariehamn tz_names Marigot tz_names Marquesas tz_names Martinique tz_names Maseru tz_names Matamoros tz_names Mauritius tz_names Mawson tz_names Mayotte tz_names Mazatlan tz_names Mbabane tz_names McMurdo tz_names Melbourne tz_names Menominee tz_names Merida tz_names Metlakatla tz_names Mexico City tz_names Midway tz_names Minsk tz_names Miquelon tz_names Mogadishu tz_names Monaco tz_names Moncton tz_names Monrovia tz_names Monterrey tz_names Montevideo tz_names Montserrat tz_names Moscow tz_names Muscat tz_names Nairobi tz_names Nassau tz_names Nauru tz_names Ndjamena tz_names New York tz_names Niamey tz_names Nicosia tz_names Nipigon tz_names Niue tz_names Nome tz_names Norfolk tz_names Noronha tz_names North Dakota/Beulah tz_names North Dakota/Center tz_names North Dakota/New Salem tz_names Nouakchott tz_names Noumea tz_names Novokuznetsk tz_names Novosibirsk tz_names Ojinaga tz_names Omsk tz_names Oral tz_names Oslo tz_names Ouagadougou tz_names Pago Pago tz_names Palau tz_names Palmer tz_names Panama tz_names Pangnirtung tz_names Paramaribo tz_names Paris tz_names Perth tz_names Phnom Penh tz_names Phoenix tz_names Pitcairn tz_names Podgorica tz_names Pohnpei tz_names Pontianak tz_names Port Moresby tz_names Port of Spain tz_names Port-au-Prince tz_names Porto Velho tz_names Porto-Novo tz_names Prague tz_names Puerto Rico tz_names Punta Arenas tz_names Pyongyang tz_names Qatar tz_names Qostanay tz_names Qyzylorda tz_names Rainy River tz_names Rankin Inlet tz_names Rarotonga tz_names Recife tz_names Regina tz_names Resolute tz_names Reunion tz_names Reykjavik tz_names Riga tz_names Rio Branco tz_names Riyadh tz_names Rome tz_names Rothera tz_names Saipan tz_names Sakhalin tz_names Samara tz_names Samarkand tz_names San Marino tz_names Santarem tz_names Santiago tz_names Santo Domingo tz_names Sao Paulo tz_names Sao Tome tz_names Sarajevo tz_names Saratov tz_names Scoresbysund tz_names Seoul tz_names Shanghai tz_names Simferopol tz_names Singapore tz_names Sitka tz_names Skopje tz_names Sofia tz_names South Georgia tz_names Srednekolymsk tz_names St Barthelemy tz_names St Helena tz_names St Johns tz_names St Kitts tz_names St Lucia tz_names St Thomas tz_names St Vincent tz_names Stanley tz_names Stockholm tz_names Swift Current tz_names Sydney tz_names Syowa tz_names Tahiti tz_names Taipei tz_names Tallinn tz_names Tarawa tz_names Tashkent tz_names Tbilisi tz_names Tegucigalpa tz_names Tehran tz_names Thimphu tz_names Thule tz_names Thunder Bay tz_names Tijuana tz_names Tirane tz_names Tokyo tz_names Tomsk tz_names Tongatapu tz_names Toronto tz_names Tortola tz_names Tripoli tz_names Troll tz_names Tunis tz_names Ulaanbaatar tz_names Ulyanovsk tz_names Urumqi tz_names Ust-Nera tz_names Uzhgorod tz_names Vaduz tz_names Vancouver tz_names Vatican tz_names Vienna tz_names Vientiane tz_names Vilnius tz_names Vladivostok tz_names Volgograd tz_names Vostok tz_names Wake tz_names Wallis tz_names Warsaw tz_names Whitehorse tz_names Windhoek tz_names Winnipeg tz_names Yakutat tz_names Yakutsk tz_names Yangon tz_names Yekaterinburg tz_names Yellowknife tz_names Yerevan tz_names Zagreb tz_names Zaporozhye tz_names Zurich tz_names calamares-3.2.20/man/000077500000000000000000000000001362604102500143005ustar00rootroot00000000000000calamares-3.2.20/man/calamares.8000066400000000000000000000023531362604102500163240ustar00rootroot00000000000000.TH CALAMARES "8" .SH NAME calamares \- distribution-independent system installer .SH SYNOPSIS .B calamares [\fI\,options\/\fR] .SH DESCRIPTION .B calamares is a distribution-independent system installer, with an advanced partitioning feature for both manual and automated partitioning operations. It is the first installer with an automated “Replace Partition†option, which makes it easy to reuse a partition over and over for distribution testing. Calamares is designed to be customizable by distribution maintainers without need for cumbersome patching, thanks to third party branding and external modules support. .SH OPTIONS .TP \fB\-h\fR, \fB\-\-help\fR Displays this help. .TP \fB\-v\fR, \fB\-\-version\fR Displays version information. .TP \fB\-d\fR, \fB\-\-debug\fR Verbose output for debugging purposes. .TP \fB\-c\fR, \fB\-\-config\fR Configuration directory to use, for testing purposes. .SH "SEE ALSO" The .B calamares website: https://calamares.io .SH "BUGS" Please report any bugs to https://calamares.io/issues .SH AUTHORS .B calamares is written by Teo Mrnjavac , Adriaan de Groot and an international group of contributors. .LP This man page is written by Jonathan Carter calamares-3.2.20/settings.conf000066400000000000000000000161151362604102500162400ustar00rootroot00000000000000# Configuration file for Calamares # Syntax is YAML 1.2 --- # Modules can be job modules (with different interfaces) and QtWidgets view # modules. They could all be placed in a number of different paths. # "modules-search" is a list of strings, each of these can either be a full # path to a directory or the keyword "local". # # "local" means: # - modules in $LIBDIR/calamares/modules, with # - settings in SHARE/calamares/modules or /etc/calamares/modules. # In debug-mode (e.g. calamares -d) "local" also adds some paths # that make sense from inside the build-directory, so that you # can build-and-run with the latest modules immediately. # # Strings other than "local" are taken as paths and interpreted # relative to wherever Calamares is started. It is therefore **strongly** # recommended to use only absolute paths here. This is mostly useful # if your distro has forks of standard Calamares modules, but also # uses some form of upstream packaging which might overwrite those # forked modules -- then you can keep modules somewhere outside of # the "regular" module tree. # # # YAML: list of strings. modules-search: [ local ] # Instances section. This section is optional, and it defines custom instances # for modules of any kind. An instance entry has an module name, an instance # name, and a configuration file name. The primary goal of this mechanism is # to allow loading multiple instances of the same module, with different # configuration. If you don't need this, the instances section can safely be # left empty. # # Module name plus instance name makes an instance key, e.g. # "webview@owncloud", where "webview" is the module name (for the webview # viewmodule) and "owncloud" is the instance name. In the *sequence* # section below, use instance-keys to name instances (instead of just # a module name, for modules which have only a single instance). # # Every module implicitly has an instance with the instance name equal # to its module name, e.g. "welcome@welcome". In the *sequence* section, # mentioning a module without a full instance key (e.g. "welcome") # means that implicit module. # # An instance must specify its configuration file (e.g. `webview-home.conf`). # The implicit instances all have configuration files named `.conf`. # This (implict) way matches the source examples, where the welcome # module contains an example `welcome.conf`. # # For more information on running module instances, run Calamares in debug # mode and check the Modules page in the Debug information interface. # # A module that is often used with instances is shellprocess, which will # run shell commands specified in the configuration file. By configuring # more than one instance of the module, multiple shell sessions can be run # during install. # # YAML: list of maps of string:string key-value pairs. #instances: #- id: owncloud # module: webview # config: owncloud.conf # Sequence section. This section describes the sequence of modules, both # viewmodules and jobmodules, as they should appear and/or run. # # A jobmodule instance key (or name) can only appear in an exec phase, whereas # a viewmodule instance key (or name) can appear in both exec and show phases. # There is no limit to the number of show or exec phases. However, the same # module instance key should not appear more than once per phase, and # deployers should take notice that the global storage structure is persistent # throughout the application lifetime, possibly influencing behavior across # phases. A show phase defines a sequence of viewmodules (and therefore # pages). These viewmodules can offer up jobs for the execution queue. # # An exec phase displays a progress page (with brandable slideshow). This # progress page iterates over the modules listed in the *immediately # preceding* show phase, and enqueues their jobs, as well as any other jobs # from jobmodules, in the order defined in the current exec phase. # # It then executes the job queue and clears it. If a viewmodule offers up a # job for execution, but the module name (or instance key) isn't listed in the # immediately following exec phase, this job will not be executed. # # YAML: list of lists of strings. sequence: - show: - welcome # - notesqml - locale - keyboard - partition - users # - tracking - summary - exec: # - dummycpp # - dummyprocess # - dummypython - partition - mount - unpackfs - machineid - fstab - locale - keyboard - localecfg # - luksbootkeyfile # - luksopenswaphookcfg # - dracutlukscfg # - plymouthcfg - initcpiocfg - initcpio - users - displaymanager - networkcfg - hwclock - services-systemd # - dracut - initramfs # - grubcfg - bootloader - umount - show: # - webview@owncloud - finished # A branding component is a directory, either in SHARE/calamares/branding or # in /etc/calamares/branding (the latter takes precedence). The directory must # contain a YAML file branding.desc which may reference additional resources # (such as images) as paths relative to the current directory. # # A branding component can also ship a QML slideshow for execution pages, # along with translation files. # # Only the name of the branding component (directory) should be specified # here, Calamares then takes care of finding it and loading the contents. # # YAML: string. branding: default # If this is set to true, Calamares will show an "Are you sure?" prompt right # before each execution phase, i.e. at points of no return. If this is set to # false, no prompt is shown. Default is false, but Calamares will complain if # this is not explicitly set. # # YAML: boolean. prompt-install: false # If this is set to true, Calamares will execute all target environment # commands in the current environment, without chroot. This setting should # only be used when setting up Calamares as a post-install configuration tool, # as opposed to a full operating system installer. # # Some official Calamares modules are not expected to function with this # setting. (e.g. partitioning seems like a bad idea, since that is expected to # have been done already) # # Default is false (for a normal installer), but Calamares will complain if # this is not explicitly set. # # YAML: boolean. dont-chroot: false # If this is set to true, Calamares refers to itself as a "setup program" # rather than an "installer". Defaults to the value of dont-chroot, but # Calamares will complain if this is not explicitly set. # oem-setup: true # If this is set to true, the "Cancel" button will be disabled entirely. # The button is also hidden from view. # # This can be useful if when e.g. Calamares is used as a post-install # configuration tool and you require the user to go through all the # configuration steps. # # Default is false, but Calamares will complain if this is not explicitly set. # # YAML: boolean. disable-cancel: false # If this is set to true, the "Cancel" button will be disabled once # you start the 'Installation', meaning there won't be a way to cancel # the Installation until it has finished or installation has failed. # # Default is false, but Calamares will complain if this is not explicitly set. # # YAML: boolean. disable-cancel-during-exec: false calamares-3.2.20/src/000077500000000000000000000000001362604102500143145ustar00rootroot00000000000000calamares-3.2.20/src/CMakeLists.txt000066400000000000000000000006611362604102500170570ustar00rootroot00000000000000include( CalamaresAddPlugin ) include( CalamaresAddModuleSubdirectory ) include( CalamaresAddLibrary ) include( CalamaresAddBrandingSubdirectory ) include( CalamaresAddTest ) # library add_subdirectory( libcalamares ) add_subdirectory( libcalamaresui ) # all things qml add_subdirectory( qml ) # application add_subdirectory( calamares ) # plugins add_subdirectory( modules ) # branding components add_subdirectory( branding ) calamares-3.2.20/src/branding/000077500000000000000000000000001362604102500161005ustar00rootroot00000000000000calamares-3.2.20/src/branding/CMakeLists.txt000066400000000000000000000000571362604102500206420ustar00rootroot00000000000000calamares_add_branding_subdirectory( default ) calamares-3.2.20/src/branding/README.md000066400000000000000000000211751362604102500173650ustar00rootroot00000000000000# Branding directory Branding components can go here, or they can be installed separately. A branding component is a subdirectory with a `branding.desc` descriptor file, containing brand-specific strings in a key-value structure, plus brand-specific images or QML. Such a subdirectory, when placed here, is automatically picked up by CMake and made available to Calamares. It is recommended to package branding separately, so as to avoid forking Calamares just for adding some files. Calamares installs CMake support macros to help create branding packages. See the calamares-branding repository for examples of stand-alone branding. ## Examples There is one example of a branding component included with Calamares, so that it can be run directly from the build directory for testing purposes: - `default/` is a sample brand for the Generic Linux distribution. It uses the default Calamares icons and a as start-page splash it provides a tag-cloud view of languages. The slideshow is a basic one with a few slides of text and a single image. Translations (done by hand, not via the usual mechanism of Calamares translations) in English, Arabic, Dutch and French are available. Since the slideshow can be **any** QML, it is limited only by your designers imagination and your QML experience. For straightforward presentations, see the documentation below. There are more examples in the [calamares-branding][1] repository. [1] https://github.com/calamares/calamares-branding ## API Versions In Calamares versions prior to 3.2.10, the QML slideshow was loaded synchronously when the installation page is shown. This can lead to noticeable lag when showing that page. The QML is written start when it is loaded, by responding to the `onComplete` signal. Calamares 3.2.10 introduces an API versioning scheme which uses different loading mechanisms. - **API version 1** Loads the QML slideshow synchronously, as before. - The QML can use `onComplete` to start timers, etc. for progress or animation. - Translations are supported through `qsTr()` and the language that is in use when the installation slideshow is loaded, will be used (once the installation part is running, it can't change anyway). - **API version 2** Loads the QML slideshow **a**synchronously, on startup (generally during the requirements-checking phase of Calamares) so that no compilation lag is seen. - The QML should **not** use `onComplete`, since the QML is loaded and instantiated at startup. Instead, - The QML should provide functions `onActivate()` and `onLeave()` in the root object of the slideshow. These are called when the slideshow should start (e.g. becomes visible) and stop. - Translations are supported through `qsTr()`. However, since the language can change after the QML is loaded, code should count on the bindings being re-evaluated on language change. Translation updates (e.g. change of language) is **only supported** with Qt 5.10 and later. The setting *slideshowAPI* in `branding.desc` indicates which one to use for a given branding slideshow. Which API to use is really a function of the QML. Expect the version 1 API to be deprecated in the course of Calamares 3.3. In Calamares 3.2.13 support for activation notification to the QML parts is improved: - If the root object has a property *activatedInCalamares* (the examples do), then that property is set to *true* when the slideshow becomes visible (activated) and is set to *false* when the slideshow is hidden (e.g. when the installation phase is done). - The *actvatedInCalamares* property can be used to set up timers also in V1. - The keyboard shortcuts in the example slideshow are enabled only while the slideshow is visible. ## Translations QML files in a branding component can be translated. Translations should be placed in a subdirectory `lang/` of the branding component directory. Qt translation files are supported (`.ts` sources which get compiled into `.qm`). Inside the `lang` subdirectory all translation files must be named according to the scheme `calamares-_.ts`. The example branding component, called *default*, therefore has translation files names `calamares-default_nl.ts` (similar for other languages than Dutch). Text in your `show.qml` (or whatever *slideshow* is set to in the descriptor file) should be enclosed in this form for translations ``` text: qsTr("This is an example text.") ``` If you use CMake for preparing branding for packaging, the macro `calamares_add_branding_subdirectory()`` (see also *Project Layout*, below) will convert the source `.ts` files to their compiled form). If you are packaging the branding by hand, use ``` lrelease file_en.ts [file_en_GB.ts ..] ``` with all the language suffixes to *file*. ## Presentation The default QML classes provided by Calamares can be used for a simple and straightforward "slideshow" presentation with static text and pictures. To use the default slideshow classes, start with a `show.qml` file with the following content: ``` import QtQuick 2.5; import calamares.slideshow 1.0; Presentation { id: presentation } ``` After the *id*, set properties of the presentation as a whole. These include: - *loopSlides* (default true) When set, clicking past the last slide returns to the very first slide. - *mouseNavigation*, *arrowNavigation*, *keyShortcutsEnabled* (all default true) enable different ways to navigate the slideshow. - *titleColor*, *textColor* change the look of the presentation. - *fontFamily*, *codeFontFamily* change the look of text in the presentation. After setting properties, you can add elements to the presentation. Generally, you will add a few presentation-level elements first, then slides. - For visible navigation arrows, add elements of class *ForwardButton* and *BackwardButton*. Set the *source* property of each to a suitable image. See the `fancy/` example in the external branding-examples repository. It is recommended to turn off other kinds of navigation when visible navigation is used. - To indicate where the user is, add an element of class *SlideCounter*. This indicates in "n / total" form where the user is in the slideshow. - To automatically advance the presentation (for a fully passive slideshow), add a timer that calls the `goToNextSlide()` function of the presentation. See the `default/` example -- remember to start the timer when the presentation is completely loaded. After setting the presentation elements, add one or more Slide elements. The presentation framework will make a slideshow out of the Slide elements, displaying only one at a time. Each slide is an element in itself, so you can put whatever visual elements you like in the slide. They have standard properties for a boring "static text" slideshow, though: - *title* is text to show as slide title - *centeredText* is displayed in a large-ish font - *writeInText* is displayed by "writing it in" to the slide, one letter at a time. - *content* is a list of things which are displayed as a bulleted list. The presentation classes can be used to produce a fairly dry slideshow for the installation process; it is recommended to experiment with the visual effects and classes available in QtQuick. ## Project Layout A branding component that is created and installed outside of Calamares will have a top-level `CMakeLists.txt` that includes some boilerplate to find Calamares, and then adds a subdirectory which contains the actual branding component. The file layout in a typical branding component repository is: ``` / - CMakeLists.txt - componentname/ - show.qml - image1.png ... - lang/ - calamares-componentname_en.ts - calamares-componentname_de.ts ... ``` Adding the subdirectory can be done as follows: - If the directory contains files only, and optionally has a single subdirectory lang/ which contains the translation files for the component, then `calamares_add_branding_subdirectory()` can be used, which takes only the name of the subdirectory. - If the branding component has many files which are organized into subdirectories, use the SUBDIRECTORIES argument to the CMake function to additionally install files from those subdirectories. For example, if the component places all of its images in an `img/` subdirectory, then call `calamares_add_branding_subdirectory( ... SUBDIRECTORIES img)`. It is a bad idea to include `lang/` in the SUBDIRECTORIES list. - The `.ts` files from the `lang/` subdirectory need be be compiled to `.qm` files before being installed. The CMake macro's do this automatically. For manual packaging, use `lrelease` to compile the files. calamares-3.2.20/src/branding/default/000077500000000000000000000000001362604102500175245ustar00rootroot00000000000000calamares-3.2.20/src/branding/default/branding.desc000066400000000000000000000134231362604102500221530ustar00rootroot00000000000000# Product branding information. This influences some global # user-visible aspects of Calamares, such as the product # name, window behavior, and the slideshow during installation. # # Additional styling can be done using the stylesheet.qss # file, also in the branding directory. --- componentName: default # This selects between different welcome texts. When false, uses # the traditional "Welcome to the %1 installer.", and when true, # uses "Welcome to the Calamares installer for %1." This allows # to distinguish this installer from other installers for the # same distribution. welcomeStyleCalamares: false # Should the welcome image (productWelcome, below) be scaled # up beyond its natural size? If false, the image does not grow # with the window but remains the same size throughout (this # may have surprising effects on HiDPI monitors). welcomeExpandingLogo: true # Size and expansion policy for Calamares. # - "normal" or unset, expand as needed, use *windowSize* # - "fullscreen", start as large as possible, ignore *windowSize* # - "noexpand", don't expand automatically, use *windowSize* windowExpanding: normal # Size of Calamares window, expressed as w,h. Both w and h # may be either pixels (suffix px) or font-units (suffix em). # e.g. "800px,600px" # "60em,480px" # This setting is ignored if "fullscreen" is selected for # *windowExpanding*, above. If not set, use constants defined # in CalamaresUtilsGui, 800x520. windowSize: 800px,520px # Placement of Calamares window. Either "center" or "free". # Whether "center" actually works does depend on the window # manager in use (and only makes sense if you're not using # *windowExpanding* set to "fullscreen"). windowPlacement: center # These are strings shown to the user in the user interface. # There is no provision for translating them -- since they # are names, the string is included as-is. # # The four Url strings are the Urls used by the buttons in # the welcome screen, and are not shown to the user. Clicking # on the "Support" button, for instance, opens the link supportUrl. # If a Url is empty, the corresponding button is not shown. # # bootloaderEntryName is how this installation / distro is named # in the boot loader (e.g. in the GRUB menu). # # These strings support substitution from /etc/os-release # if KDE Frameworks 5.58 are available at build-time. When # enabled, @{var-name} is replaced by the equivalent value # from os-release. All the supported var-names are in all-caps, # and are listed on the FreeDesktop.org site, # https://www.freedesktop.org/software/systemd/man/os-release.html # Note that ANSI_COLOR and CPE_NAME don't make sense here, and # are not supported (the rest are). Remember to quote the string # if it contains substitutions, or you'll get YAML exceptions. # # The *Url* entries are used on the welcome page, and they # are visible as buttons there if the corresponding *show* keys # are set to "true" (they can also be overridden). strings: productName: "@{NAME}" shortProductName: Generic version: 2020.2 LTS shortVersion: 2020.2 versionedName: Fancy GNU/Linux 2020.2 LTS "Turgid Tuba" shortVersionedName: FancyGL 2020.2 bootloaderEntryName: FancyGL productUrl: https://calamares.io/ supportUrl: https://github.com/calamares/calamares/issues knownIssuesUrl: https://calamares.io/about/ releaseNotesUrl: https://calamares.io/about/ # These images are loaded from the branding module directory. # # productIcon is used as the window icon, and will (usually) be used # by the window manager to represent the application. This image # should be square, and may be displayed by the window manager # as small as 16x16 (but possibly larger). # productLogo is used as the logo at the top of the left-hand column # which shows the steps to be taken. The image should be square, # and is displayed at 80x80 pixels (also on HiDPI). # productWelcome is shown on the welcome page of the application in # the middle of the window, below the welcome text. It can be # any size and proportion, and will be scaled to fit inside # the window. Use `welcomeExpandingLogo` to make it non-scaled. # Recommended size is 320x150. # # These filenames can also use substitutions from os-release (see above). images: productLogo: "squid.png" productIcon: "squid.png" productWelcome: "languages.png" # The slideshow is displayed during execution steps (e.g. when the # installer is actually writing to disk and doing other slow things). slideshow: "show.qml" # There are two available APIs for the slideshow: # - 1 (the default) loads the entire slideshow when the installation- # slideshow page is shown and starts the QML then. The QML # is never stopped (after installation is done, times etc. # continue to fire). # - 2 loads the slideshow on startup and calls onActivate() and # onLeave() in the root object. After the installation is done, # the show is stopped (first by calling onLeave(), then destroying # the QML components). slideshowAPI: 2 # Colors for text and background components. # # - sidebarBackground is the background of the sidebar # - sidebarText is the (foreground) text color # - sidebarTextHighlight sets the background of the selected (current) step. # Optional, and defaults to the application palette. # - sidebarSelect is the text color of the selected step. # # These colors can **also** be set through the stylesheet, if the # branding component also ships a stylesheet.qss. Then they are # the corresponding CSS attributes of #sidebarApp. style: sidebarBackground: "#292F34" sidebarText: "#FFFFFF" sidebarTextSelect: "#292F34" sidebarTextHighlight: "#D35400" calamares-3.2.20/src/branding/default/lang/000077500000000000000000000000001362604102500204455ustar00rootroot00000000000000calamares-3.2.20/src/branding/default/lang/calamares-default_ar.ts000066400000000000000000000010121362604102500250430ustar00rootroot00000000000000 show This is a second Slide element. عرض الثاني This is a third Slide element. عرض الثالث calamares-3.2.20/src/branding/default/lang/calamares-default_en.ts000066400000000000000000000010101362604102500250410ustar00rootroot00000000000000 show This is a second Slide element. This is a third Slide element. calamares-3.2.20/src/branding/default/lang/calamares-default_eo.ts000066400000000000000000000010371362604102500250530ustar00rootroot00000000000000 show This is a second Slide element. Ĉi tio estas la dua gliteja. This is a third Slide element. Ĉi tio estas la tria gliteja. calamares-3.2.20/src/branding/default/lang/calamares-default_fr.ts000066400000000000000000000010441362604102500250550ustar00rootroot00000000000000 show This is a second Slide element. Ceci est la deuxieme affiche. This is a third Slide element. La troisième affice ce trouve ici. calamares-3.2.20/src/branding/default/lang/calamares-default_nl.ts000066400000000000000000000010371362604102500250610ustar00rootroot00000000000000 show This is a second Slide element. Dit is het tweede Dia element. This is a third Slide element. Dit is het derde Dia element. calamares-3.2.20/src/branding/default/languages.png000066400000000000000000002477621362604102500222220ustar00rootroot00000000000000‰PNG  IHDR@•)#‚bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEÞ‘e£iTXtCommentCreated with GIMPd.e IDATxÚì]gXÉÖ>Ý=y†!ç$¨ A,Š9ç,&ÌQלbÌ †Å5cB‘ J ’s†É¡»¿WW÷†½»÷»aÞ癇ªêêîªêÃÛçœ:U€ *ü›‚$I¸úª©i‘`¹ß9Ý‘TŠ $PÕ¨ð¯@jÒÕïÊ.ŸúWÏA^}hìÿâ}Ch]›ÌB5Š*¨P…ÿ8-îðV?ðôŸùݱ¹ËoÀ+kÿêù±’+“ˆ¶4ð$ÖªÑTáE5*ü™@6\y¿6£„7 LéT&”ÈÅÎVZÛÆ¹\Š˜³—Es^ME›;ƒDާa4¦R«¬_T  ÿ¡Zà07Ãr¹m,N¿»ÕϘŠF¼NËŠŽÌèÕI~8N ¾¡ik.å²2ëuÎÓœ ’$aÔîdæÖè< @TÄ ˆË©G§Jeo»þúõ=C/æ°¦Je%ç7}#ç+ÎeÓƒ#3˜$©"Uª ÂŸL~‚€_Ýjƒ®’T<Ü䛉Ë%²’:! pâq eå…œ) 6wgi½0&êe¹ïÝÔêNÄ hÃv&Ïä‹ä·òêCl‡®Âf/»k.åD½,_!‘ãщùMGN<.јs<×/V\H×7]Í™7d{‹$I¾3yPC›ôxI0zþ‰ÌþmTAE€*¨ð§™ÀJ‚þS¦†ú®Œ9ÐÓÙãAž~Ù1)Uáyü©\&åycsk5O¤X›YGë (&ìIdÖFÚìL¹¨-ØcàÇc‹tÓ>ÖÞgÒ1›v‰ò˜¨©bqQ`êî[9%UM{ N,'.³™t¿ædÀÆø |~ÛyDy…À•jŸkwþº*¨Pþ4>” [@$UÈI——”–]•; `ùp›;ýõ¦Ä¬ózÃ`s«I’¤Ôó¤†I(dL¿åÑ ã½Uõ-Çi,õ6m5š®w]éX_«ùçCÜ—®Õ-£22%¡=ÆÓ˜¡” ‹kÚ:ê¥>Úì;{F€¹dÙÛwÕé¿ØÇnõK±2T¯–‹ZU>pª Â¿HØÀH’Hy°Ù/"íä´~ùôerÚz€WšŠÞ¶ìî¿%á(LÂ哆'”Jçkië&lžÜ]Ž+d2‹¸Xk 2ŠyìAÛ£.½(ߣ Õ¨Bö4WoÖ72™'ñ¼îÅ¿+¾ëõ'0.‹zÍÜwfèÄýon7´I¨T?ª Âˆ°u.í0 $Ù¥uaTÆQ*K³×ÇJ¾Öû2Þe±Tó«óWR1ä…ÎÂZ…|™!q‚DH\ÑQŠàÈ ›ªº¦"ÿòæIK©Lõ6œ Éæv¥§™ú‡×GÆ9йº+Zë+Ö Þ‘ÜkÇÕôW 6úæÏIæzì»$ÑÙ–Ö– ÕÃS  *üsx—ýÃr' êFѪk•pæŸÈ4ÙDc©Çk35e‚f'…¤½DÛܱ›Xª˜¡” üzZêrél’ 4h„  £oÄm †jÖµJ»)eb ƒÃßS0U!æiñE “u—ß;d”´ž]x*Ë´§¥v"«Ûêí5-ôÔu;næ;|,oéZî~2ÇqÑÒ6W=¼ÿA`ª!Pá÷‚$IÐõ˜A3ö™µŠf=p¢¾ãÀ¬„ÇÅ?ª‹ØO_Ó"±!Qñì=ÏÇÉ©"‰üÝ8‹µŽzõVý¨£Ú, …Ò“JAã£ÙYê³kqk*´MtXÒUk7&$Ìm*Í´84=5åR]S[O‹3'È2„®^.S’ÖÞöÚoÞ—Ô[òDøt‚„Á8`w^ììû³ýˆuú Õ%vmJVM#NÐ.Ð75ÔeôÔKÙ¹s‡êª ‚ ßã—+«»Ò Of²Fïy­5tG’úŠsÙ¡Dúÿô|„sPÄ;§©,ëþ?=§¯8—M›z0•n?r³ßæ@pdFïUrÖì¸ñA$I I¢ ݑČŒ-¦.:•ÅØÇZù=uܾÖÎîPÙ$¢îùù#àVr%5!¯‘Ö¡q"ë¢rµ]fE2¿ÒB‘¡;’áw>a}7ÆÓºLàÖÜŽ>3ÿ›üµ³óU¢‚ ÿ­Xx2ÓeBØ›ØÉáo[ýzÞ4ýPj€û‚¨îÎ3ŽÆ;M ·øÑy)/Îþæ5ÝDõXxå!ŽÓ‰Í¬¥EÆSÿV½“{‡}“ß}ë#ånj5õ¯i²®ž˜ó]™óÌcHB^#³°¦ª’ÿ<¨|€*üݨn–ܨ­oˆ¶7QëMàŠ¥Ð€ ¨BÒN¤wÌA’$”}‡ŒúÿôüѶw |WßÛ6jw2mèÄ-RЬë¿>îFJvqê´­726½º²ðd–OdlñÔòÊêû9emSqœ`ŒÚ|ÙcÁù«.äxx.½yïdôãwÂÞœ8ì\¡ð¥ ¼ß?Òfcmæg^CO.jíYVU÷»û>sIÌ?‘Ù C‘#½zõ:4ù@j_ ­’ìÆçµª$DE€*üC.“Ík¯ý´×7ôaΓ™}/¼(£N (†T7‹ËÔØÌ¬I#×`êÔ6DcèŽ$úúK™a¶&moO0öôè½AÔT>ººEŒ,fsƒÊàÔ´K”&†J½tNà2±KVQcØÜQî±6ÝÝv—æÎ ½˜3*@JþÊ^}p}<ŽÙù]{ ó^Àœ–Å2AÓ@PÊï]òöºÃ„Ï+ø<žNEŸ4ð¤7šøO¤¨b0è|£ü©1…—#fu™ëG!1—WCø®ãWNÌR ¨ŠUø3ðôÎHÚ?(zô~ce‚–úì÷q±™uI’@Ô’AÅöÆnõÛö¶°9 £±ø I;¤¤…TNlxñàz¼B*LmÌç!ŠUSPhU¢´5Õ|·`°õ¹Ûë½#8zÖ™/’{cÚÉ^$À¨ÝÉf—^”qGMÛ1—–ð‰[!¯¼1tG’epd†!I’`ç8zN܃ ¨- §JÕpŠàŽØ•Ì¿óI#!¯‘:d{kÄ®d‹+ñåt€àÈ ½àÈ #€…#¿˜ð Çx\+­iÂeQ-Î,uÑiAÿ¯ŠEí¿ëÌZvâß70×F½t/­fÜÉâQœuûÒaBØ­5—r5‚–^†+‘A*aU  4†ŒÛ·.,€ÓzÞK=4œ¡®¿ˆ×T·qà¶$£‚©ÎMø9 @IeŠbTRÔÞf¨´“E……2Ž-(T&·sÒ£kò ž'¥‚‚G7­¦Î2.‡™ŒÑ˜]³µt*Æê»áåb_øü샬K1¯«¬'Î9 Ofj-?ŸÁ¦SÎUñú®~ @e©a)A?Äl"u¸ô5 uƒ ýôüÖEå®»Ÿ{í̳ҡJ‚<Äãñn\~U¾!èHÚð²Ñ•‚Òº'3§äK^ä60~N©š¦¥Á}SYÓ`» "uɲ³ï¾™øÀqâ;-°srÇ Ç ”ÅæþîçPP-`µ‰äÞ‚úâ}­eï8R9N¯©­Mͯ>r?­šrE%¬*TáÏÀäyÇaêÁÔ#†â$IüLãh¡T a’Nã uúWZ‰+¤ÀÕÐ"Õhh_W€úÜÇA(dÇ" ò/‹1í M6 ï,kã·kšÛ5‘$ ŠUUU= 4Y¢Á½ÍgaTúèÃ?§ÍøXÞ+ä)j,ÊtS=î\.95h[â€ìË!$ ¢” [6]Í]Ò´ÆÜÔäøo“WT Æå⡵-¢ÝöÆj1*c§˜ß¼­‘/[g¦Ë ‘òë‹ÚÅòC‡îƈÄR‹6$£³^aTÚÔºV)»³®ÄsÊÚÔƒ#3â}×ÄfNÜÿæzlf-kþɬuþ?=|"óÎÝÔæd}æµ~øTz—K uáÀÍq7Xê:Ejjjá7³f®‹ÊEn[¬VªðgàsIq°ÿOϧy†ÜÒ‘µ7-`1è)6ûV15¸€b uSG5 Eè$Ó{Ú[éR1¤$p"!¯!tŹì^ÞzL¸5¤ò‹f†Ò•‰$8ñèSÿ%§³ìvÞÌŸBâJÿG[üöÉ I¥q´rn­óº²yr÷4+½õxð^¡;x¸âÁ¥åÑ¡žÇq…ô™¨½­ËJêúÓóëŸ%íĸµÎ+ÙL—-Û3Ó±A0‚$ð_"º>¶0Po¢²Ôeb©,èÒr¹ ¥HOƒaðd›ÿȤýƒf{w7`IÊ1Á¨´ëÿÅ(˜›V[jÂÓ`¥D`f É¸8¼·‘¸¤š×L8ÿüÒÞA|LmKDvßúˆ’$ Î3!›^!áw>¡$I‚ç²dktJ’$Ì8œ†í¼™vú-‡ïLFZÚe…T …±©ù8 úrWÀ,nZ«-M <ÊDZ“çŸR ªŠUø3ÀÔ2WÊD+( N4CÃÀÝÛ^{楗夋n€š¾M‹­áPXAå0)€ 4 :ûî)F¥/‹ùî%uÂR~Êä–(¤B¿ó©ƒAG uÓÕ¼ !ÅH }®^IðF\VåjŒÆ èjI€ž[Þ™mj—åêéèeµ+ebEKIš¬“00*£TÔRùEÈiL*Ò_Gõ¹Ïâhão:… „‡½~=€'1AE,€ X×ÿ‡oèÃîC¶'­hÿ¤ ½I’¤¡?˜öàزA”Zš¬ßæ„9•b¢¯9ÃPÁ©'%ú œ—[?Ž Hj@_5úü)ÅþA2LŒ‡$¼¯›¹ü\¶Su‹x׋ìšyAbÛ®ÐÉ”³PÂ\½É@’C“-ô9+|CÎ(¬Ø_^á¾ÀRŸÝ¦’RªðãtØHHÜÛSM3ÐÝÁ8øH°ÛÌ­SzT±è.’)OÛ[èÎhÈÏU4‰qAnë¨ÍÌ-¬Þ’”ãބNrÑ.öyÿøäY…T¨¤28¨D¦¬â2©!,jH|FaqG8ÙÏQïg‚ï±¾V}“öªúZ^)¢ḭ̀é‘ k¨Å¨%q…Ñ ác:cúè\ÝV½p™ˆ w4·‰)dÂø;oªz|Ý?…’ t˜à8P Ê&;~€+Ç%reKæ‹›ëŒ î1¨^TøIF’Ð9B¸P êÛ¤³TtySî„k<ú;éILµ™ÛùUy ó´Õ–·‰üêüq†J1qµTF”Ö‹Ö¸ÒŒPÊ"0 Åß¶œà2)NŠfQèl[B)G2žFµ÷4ã2•r鎚ƶц’á³{á{«ö€j?4þ&­5å9`lá /w_t›Öל~GV Sb¬£âÓ&’$Á%¨ˆ  cp(Û¦ö”€´ó>ü&ÐøbõÅξҠør¦ëœS†Ò¶z%ð1*SXü)Ïþ‰Ì  +Í-oÛI’dŸCsz5û¯©|÷&#÷DÈ™wÓÞ—6÷PHÚq’`G?Ï®×Øpâ‘!+dIû­:’6zç©;[N?ý¼ÂT‡Ù²ýìs°äJB‹PÊ©:šêÀC)4®D†Ópœ`{-¶Pb”7ÇÌôίh;-¶¶-œà?¨ ºýµ'Ø(•¡‰ãÅ;ä¡”hùŸëæ©«k¸G.t-¾~z>8¹;cnû†+ï9 Ú"#SüÍÜæ½QCtÕéÏ e¢0©¯zµ'ðì¨=)ûnŒ.•Êtžï4ÀgÕýD”ÆìGWÓ¥Ìhõ©ï†—mèË6=S ¬JTᆱ…ó߬³â\62ãpæ:çæ½ò.æ2+ss ´-È*á©9¹z®¥2ÔxN.3ß/ìZ§+•ãœsqe“© µøÄ‘±Å:å"i[}&‚ 1€z¹õCckÍûT¶&«°v“†$îí߈a(±x´ó,GëÓ‡Jþ}¾£®µ0iÿ æô¢ÖáT:G‡ÆÖ’-;ûN=ûm|w 3'¼¢Q|!®,HÖÞx óc¥ìVr¥}uM­+¿*/‚/Vøî¾õ±FgµäçfD®¾˜ë¥gl±—K|(kÙìj£ÂT×Í¿ÿ™¬çIÝÚëŠÞ*¥B˧Ùõ–r1§0ÕdZšZjâO=)ñš¶èôtþåúuà Ù¹-!A’$Fg“N¯1 -Ýê—£”ü”2ÑçÎÊâÖ*…JU  ÿfxs FNt!×_~?.»½ÉNÖÞD¡q´PB)Gjó“FìJ¾ì`ÊU4‰ŠšÊDtGVm«´KûË,i•ää~Ë8;[Š,¼B¯6æa³œ^8M=+µzl¾K)¬ëøÀ¾ŽÌ0¯€o¢;¾G ÑoÿrhzB‡°“ŒR¾hªaï@ëH–uaÁ6€œ¿D—ÜHú’ŽùêVO†ð\zÓ‘À•ˆ—ξ$œÄ/Ý3åÀ[·›k½:HR[FPYšL¥DÐiÖ#…ޏYkv­‹ÆR)J¡éuæý}}h‰II€ËE„JêT  ÿ&9ñËF¦º¬|…„ﬔ = ´™ÊÖì×ÖÖ¦ÅfPˆÄ½ý…ù¿l%Ï-í-:8§W—&äÛ]Ï8;[ ~&H6ËI€Ñ˜‚bȯ´¦.l8öÛmú;Öøþfó•U}ðß3$@Ôú6)ëò © uý’òŠÊ‡ûb ŒšÚe©(…fv?­FoBØ›Á\-½Ý€ Œ•|*CeÄÝÕ.+‹<¥D0`Ôîä‰Ëi‘œe˜ömÑÑI¬³úñ݃T‚øBµ  2R^˜ÀÞÍÚݼ{ÐXš‚sÆí=»fHêÔå{ßLïgÝTÎôhê9y„^÷~…/b˜‰­–CôÜíG¬ûTñú Þkúáá¾A{X:fÆ£—¯ËyrŽoèÿ(G×kùmYfa}ýá¹½”Gèô/K¼´BÓÒí©¡&£QÞÞ4”W‘3VÔXã89¬/‚bh­‹(…6þíó;<¸Ü¡V‘†Š{NصNÒV§Å×6¹zG°¾Û¬ã …4I.n«UVçߘ´ µrv´Ó£²4o|.þøI!VÒXšé™ç» ^a¢mãµ­åsêv¿a!Ç ›aJAóBùßÓ·‹÷ÀÜ1k›üîíƒA.Røõn5µ8N †¡-矗vã‰äÚkÇÚ—¥µPJê„1Óúš·À=€x—OχYcì„8N, ¿£³¬—qS\Nƒ¸°FPÂÊë#¸VuŽQúi€_¯†¾òð\¡Lªð/3)hlR!æÉ \9L)á룺¡R*Ü HlVIë/“RÙ+AÃÐVuS§p¶ž¥;SË3Qc)¥2r>Þ»QÚ ¢v3 ûb塘šû‚¨#¸B’õáö–€}ú…HÚjï> ßz1ÇëÉû³åb—FAÓ±¼²,w]û¾þƒFõmÈkKpÅ`¥\Ô§øéÑf‡Ñ›=¥Ì:£¸õï¶€Pê·û»õì,L¼ÙðÛc‚¡]šæÃ›`ä «vè˜)÷°ÕV@닇`À¨PÜ’À’ ùšZZ%³ùÉåR1t¬ƒþ¼6_Ëü&-#Š®¦ûôVrå¢É~f²¯ïµ.*×4)«ˆ™rt|ñWë§UP  ÿ à2  Å(wxåïV³´Íèy·6Hª[ÄLøò‘# q´˜€àr ¦iév_.jɯÌMµî?ÿ¤–Uï]®<\.öWHê9W–uME_[Ý'ÒséM»žv{‘oF(d\@P\®$(@tŒÆ|D¡³ZÏ,ù²eŽ|WÝYßcüN=Ÿ"ãù&Üìá+!ì—‚>’?-&2’£mo©Ï¾9ypï¿:+»ðd&• a>I’9çCÜߌœºç‡õŒ íLãW½ß,™ €:ƒÕUgÜšÞàe¯§¸B¡1eŠïçArÊÚRÄMe/`>à*‰ü/6Õ¨ðGáuüãÎÝ•@ { ƒ÷7ÖŠˆ/_r †R”R!€Ë%"@ … K:0B¬×½ÿLKïÉ3êbþ&€/†ZФ¥Râ8iߥ.s{Á¥I-%o㜽=Ò52ÛÑY-ð•O›ÆÒŒñ³€»’¹Žv\ÔPMÂeí71 ƒ!W°÷Ú®öï½zà›¿¿FwSn®¤­.G«ßÓŒû¹÷®`Ùþ±°!bö7õW˜¯Ý ç|ÞØÄ—™þ=cX™~7£±öbTfÓ¯Ý9˜ ×+ÅH@R®üžEþVŒÎ:Ù*ü`çlØïÝ÷íÏnWgúß­}|ûŽ-$‚Q%²ö&ŠÓÔ”^Óè9qO?¾HQ'koÂØ:šš®Û€õéQXÛ´Ci+Å-•~϶ùýÌ5²?Ap\.iˆØº†_õ~’Û¼³çH’„æâ·KEÍåy—W¸?jn¬w”‹Zõ$ *†Â—:‚Nù"Þe9¯L '•£}´¥¶´\”rŸ$ºqÆZ IvßúˆÕI©Á‘ÈÆ™ñõíºÖ•åa,åWæ£TºÜÚ€#X7ó‹6ñÓ]x™Hé·9a“Û¼³·§xëwtm ø›Ò[ÒZÍ*ûðÖJÓ²wÀÑE“õz³±~¢ëœSzÖ–P¬÷·\<ÎyÆQæÉýì4-]¹+'{kL=˜è:çÔÝ»’­¹”«Ž}Y‡Ì ´À{ó±ðŸ3Ì ×Ð^>«î3»[µsômôUæïÿž ßÔ•î4­³ï]Ýž‹‘»¾Éܱì¿Bž=¸c‡ôõáèÛô•¶Õ —´ÕžB1êi\.9ÌÔ4Öa3°| ó^™-ŸSoôœ¸'SÃÂ¥”©iŒ{,º]×*Ôl)~{`bøÛ« ¼ºI»KNg™‘¸Ò‘ÆÖ4¢SÑâCÏkøðr¬ÿº§!4¶Æ3 ÓÏkÉ5±¬½a2d­¶¹c6•‚J¹>…ÎvŽI.³0îÙ—'j,-D¤ŠÀåùŠ‚BÌŸRмÀkùm_ž$l(¬Dq'¿Ö·ÌZ&4 €bTäG/7¯å·MP*£º­ú£¦R"Päg$œ·/…ÝÄ—¸B¥c1Û²ßüÃ×§eÚ ™«fd·m҈ؿcfæ5y†Ž­ï˜Í‹Ç »rºµ4sµ‡ŠÎ>–n_VVþÈÂÖéUUAú OÕí‹;ÃsU~Pļ鸺IÏÃçÏ_°°0Ñ?•ðàjtUê-[µýø¯Û.³"Õé\}óOö²¬¹6ä>M«Lÿ%ÃPiÖÛpó øo§ëÜ3ÌkÛ§°º›©·à8nºöA§Y kYâþ_᧯ >™¿¾FÖ…o°K‹º¾~¼»#à-@-|ì,ß4lç,jAÇr£ ±5'Êbæ õ»¯£W7‹1ŒÂÇ5r¨"òöú5åÀ[äæZ¯ó+Ïg 08)Lµ¦R$M='s¤üªH†w-û³³2)z—úåèY;÷õè‘”UdêÙËæ} (¦ „X¦¤õ4Siæt¡µ4óÉ’]¯NìûiÒÎèl)‚bJR)ïÏ+ÍtÈûyƒi*ÌÝ>.n¹ E†üÉÛó«ðß oOHÖ0s~kí5^ÿévÿÃï^?!*éòùcà´™×TL˺¹Äµ•8‘¥ˆšÊPŽ-é­¼Kœˆ~ ~kQÚk P£.¾Ê¨äž- à¹r2¥¥$¥ÐÙÄäуñk7cP)¿XÚfdÞ­õ„ïšXLʯG­»udz⢥Lºöþä­×Äå÷¨\؊йº$ÇÀ–|}d\FŸE—M=Æ6©Ú©À1†ºA»ÿOÏѤýƒþ‡uÇÒ¯ïÒÐ €,"ÿa×@¯BÎU!@ŽÝûÚ´¦²ÌŸ®¦S¹~è«Õ4bò¯³ñìvØ»`;¬kw >éÍf~U^IyÒ¥k®sN5òʳo[Xrôó‹“í¾¡1Qs—‰I=Û>Š;û–Á踠VÌù2Ó>“ˆ”#£qÏe1GS†"@fdL“^Ý|Ž?caåé÷¢'G”OÉáÏeÓ¨ö6抧ñ“”G—„}+1_FNæ[…½“‡²Ã§Öå·/…RUV„R˜êxßžºòŸ¼Ç`'¦€ÍÀ®áîLÜ\ëEú¯ÛÿäÞ9õ™àÀÖ5?‰Ñ˜ß øí¸s0a G›Ã˜­1rïBRFÓ0@±ê£Á.5_×#HK}‘|p·u/¿K~ü|ó™—{ÓNM_à2+325X.æõð[ûäqò¡Ã.nëTIIò¿Õɬòþµž`¢ãÁ¯cW/n.ÿ™¥mÖsÉé¬A(…¾“ÊRŸðž=Ó0ëe‹Ñ˜Ûi,±W_ cö¦x($‚}uY)üò¹ºÅà^ƒ·'.¡ÐÙ—å"Þ…Šf±'£5S)î€S¼U“µ7í&”ò'|±b$FcÎG)´Ýt®ž/궆FciÌ€p[kpoWçž¶ƒC64~xñ¼*ý®ÝÇûaZí5ß6$ld1ÞD÷ïÇGuœßÚ'v¶&ú»/ˆê¶óf>ŠŸ_ô§kužÅŸÞÏYvöêb¥9TØPrµ,ñ¢É?z½ ¶@a€SËPJ*ƒ]4fÚ—onø†>ÔSˆÛ÷ÉÚ›ÎJùuw›Ë߯Áqs›w–¥nÒsÙ«×i'YÚf—å"Þ\ç™Ç,å¢Ö-õ“Ž•¾½}ËBo“Oæ@ øë \yÐmÞYg\&:À¯Ì}‘ôt¹6e.åÔK- *K}sî»ôSR^Ý}’„Y†~ÊÒ.QîPÊ%RX#psœv½ßæ„U8NP0:K —Kè)ͦÞ+ïZ¹Ÿït$mv㇗#uíüÞÙ Y®gä:r$ ¨††™³UŸîFT\!A›+?j{­¸ã“ßìeÐËg蓦‚*•­q — ¯uú©tŽ&®”S«›ÅŠUíËzŸÛê™cí6ð+:ö÷G¹ M­ÃöÙ^óÑÕyæ±Ýk.åjã8"(¦b–ŠÚþ×°ã­ 0jw2‹¥cá‡Rh¯[ÚåhM¥Ldm¢Ã$z˜kP)4öpºšNù±GÅf…Ù¿Jy1£sAÑ"Y{Í}AT¥L¸K!Ä3µLN“$ù©¼A$ghËE­Ku…uù™‰ËH”ÆÖJ ø•LMc]*K=hr€méºqv8®TLÆhÌÕæÎ~ÝuË™šÆý´l<û¿.hæy/»ÉÅe¢]ló±[|ÓÿÍotÿÙà½òîaB)?$ò×Iùõcs"pœø]š~i½p9.…÷2ÑÙ:¥ÇYW>¥²5·Ì(ð/;?359ŒÙzUÔ\¥kðâÐ\çv^Ù»£ÐÛ®fäð„Wš±¿ßÆó¨,Í>$IêëµkÜý"®”µ0µL )aå°WÈPWoÙÌ~rqK¥‚$ð †ËÄ/Aï ê =ZJÞÒ?&8ëKFôrõ؉+$×y"¹ Ë‡b·àóæ-•ù(F‰ÑÑщÏ)nh·T²¤íÍÝî§ÕXsú“¸òcYié A7Q¨Ì …ÅŸÕÔMoKÚêrM#™šÆ¶®%ÛÀÄ|ø`}>…ÎI& |3IàA œ¤vhïôzÖÊ…­uégf'ÜM­éAãh &qEubnµ•XŠ·‘$9ËkŸ¶¶6SrgøO}Ó'2®‡&P7sšBâÊaïËÛæMGSÓÑÔ°pÕÙvýƒJü1”2¡„MÇ'‡EV•äù¢Úmºšî©—¢=z0i%1.Ö„®aP’|`hV{íáÓ2AˇœËÎì¼™ÿn‚· :ï`Ü~aci©¯÷Ȯʃ÷ _¯c‡»Î9e@’¤ˆkä0š¥kifbl¼êô7™—®t_pÉS.âµ/j]°þY¨š¾_!6‹U?½¯™ààyv •É­íÛSOÚwÃË…,ms5*K]ˆa¨ü;“õDçy½¦zˆ (3°·ÕÔÄü&œ¥mÖÍØÔÜÃPåo»öðt8°:úÇ/\¹ˆ®¦Kñë®ÃëðôÿSψŠ} áÀeâç+«Ër–ze]îã¥Ãw&?­ÈKªWJ½)t–Kþ/[Û ¢ç„]sKãÏôÓ㤉j·¢"£,|¦­zµ;à•©6âuÔ²zßUw|@£1;÷!ü„Rh*‹žwjC¼Eßy®ÐC.lEõºðërbm3“Ÿ[±}Èl¯Î·ci›” tÖG"¾˜Ôx‡é (¦&j*[‹ Ø]06&u¸tå#Pø¯yè)n­Þ£—ûôÊìI"A"$I (F“8EL‘‹xv…öFüšÄ~/zÏ¿0_ÖÞ40åÈhFÊ_5íë:c÷¾îS[U±¾½®°§N7¯Ÿº™íØ:¥‡|BØÃêšš¼² w[ßÊ^ÝÆöÒ3_y2i–R.vzžÓ0¾!Ѹœzµ«¯*¼{ó›ÆÑâ³u,â(tæHs]ÖP' uelfÝöêw±^fÎâ‘.‹6Oî^Øá7#Û*rŠÊ“£Š`“Ø­.%é—p"„Š2JSar×Ò.QKU ŽË_\æ^½ùZÞˆ_bn]ù.Õ~ÄúUŸ…E’îà<-<•©a£nÒC—$ðâŽÉ”ÆÖŒñ³­|}¨ck{’ºº>š°§ßÇ‘»©ƒ?Ä]úÕ@ÀöËiûŠËªÔFŽ9•À•ïxe™;¿8ÅÏ”÷ô]ý~as$`øä©€ ¥¿¦PèìŽ÷†IÅ€TÊå$IJµ²¾ëãŒõ4µåI—¼¸&=Îe¿¸¾Ç WÊ£Ò³ ©ÉºqÀÖD/€OÂp¡š’EÇÈ©ÛgÿCÏæÈš˜–Ϲò›|𘟾Ÿ<š÷—½¾œ¦ ôÛœ ;çxúßíßÛ}ë#5èHšŽˆ¹a7(® Ù[\+ðl®«Ïl_¡òþ‡ãQF­.[ÏÒ¡¥¶Ôäí§fËN2éÔªVŒ´åiX¸ÄT¥ÅÌBP¬&÷zh=[Ïz›BÌ·µ˜{ÁÐuÔÜë÷ã/ $JC*ƒsQ!øZ÷Ÿ¿Ï2 xáñkOérivú6n>(…f¬ëÐ×ÊÂkÒæ–¢”õ6Cæâ8¡£THœäBžº§ÿ¡™ý,ªÚøíÝä"°è˜Ulf-G.l¶”¶Õk~¸³sШL®¹´­^Ç jÈOáÿ”~§A’¸¦½‰ZKgÙü™gÝn3hÙÿõqþ„BZäíîܨ›a‘¸µÊP)ò>= “Nž41°½®0ˆ$pÿºÏ¹ë@ £1õ3ÿäÞÃ,Hò×qŠ$ލ\ÔêÕ×Íöî¾ §|+×C45÷$Ç5¶Éœê Ó(¤íŽééé[p…ÄA1»—¹ l¿Ðû®¢ÆÏt®q÷Qþëã–Ù Ù‰Ë%£uìý.g_©¢²µ®×dÝ{j¸xuñ;#XÚfjs‚¦í»ŸV3>'éîÞó/KZ«ŒÙÚ¦ålSÚV¯TˆÚæ9M ¢sõ´¿è·ö‰Ià}$¼£èG©öÂÞ }ë@Å›ûÌôÅÒÞ)Ïbn»ÌŠœ¡” m9ú6/ò+Û5q™ÈZÔPj»oýü$:GûIùÛ˜{Výï»1Þ HÂ_PWØcðŽdîíQÿ/2nãä=±6çñƒ´W±ŽÂÞhZ.^lè2"Ô¸÷¸åfÞÓç»]mì66´×´Cs*…Ì;Oä¤%^u€•ç³µõÅ'ä¢ÖÙ¥¼%n½ì×Ì`)ßzr¾Šÿ“±%òŽ[×2Wžõbùá‡þ_“I'¾ÿyóB)•Y9ùþÜy,5bbŽëÐà‘jFö¾ŽƒÂ4M. ügç$ô¶RMßf ׸ûf³nN¬ 85•ÙÏíé\ýpY{“ñ“­~/õº÷«×#pû´Ci³E %<ŒÆ<œ‘™ÅvsŠÓø1E)´Ã’n÷º‘TåƒË¥R~ýuïe7­§…ë‚dHÛj¬6íŸí¿ow’ÎÕÃ'dviÓýÍé\½ sç¥>Ýõ?'†/Î,¨º|áNÒm«îº†&j.—æ–óý(4æM‡¸LtTÔT>†Bc÷Ã0”*~8y‚`JÈE¼üW©yá³¥[ÖÖÖŽ¤±4ëóãkD2¥¯LØ\ÁP7WJÚ÷KyµKIó“w»•±ƒ–µça ³^-ÅoM œKsN;=ç CÃ`Éà¡Ç´m¼–ª9´êZ8Ž\7ξu¤»Ñ]MK÷D5}ë}’Öª"gïAkf˜çº]¹‰©cÖC·›ÇMŽže(ÇÐþRß^&åvŽB+ßi‘¶vvºc<©ƒG˜ZÌ{2`ÈÈþ(…§çÐ/…¥m¶ÃÒeÀ#¦–ɪ}¿|2é>háskáÑu<™}aìÁyZÖ}Œ 6žàmÚ×Úfª½“G®«•†Îÿ—ŒÏêo~_X_ÂÔªä%ßínÜ{ìÂM»h žµÁSÇÞËôeÛ̓Cw3Ô †øŒœÇ±²ëÅ4vðbÚš[ò‚ÁÕ[ó2r~_¹°UMª \v.9÷Ã{ººî¯¶éØõͪY”W´4×C€^Ëo¯r³µä'?ñý"Œ”—±¹ï{sÄnøZ¦û‚(ûàÈ ³?£½9)¿ë¼c7¾xl‡….sœ´Ì*iÕí<æ¹ôæ…W$¥õ ×9§.8M=ðÀaÌÖÞ6Câ4-{³×E宲úiÀÖDc€Û)U”›I•º‹Ne%Z.~‹ãÀ~ä†'–Á³N=)±tšz ±×ôÃî .]»÷µ1@Ä£âö£65¹/¸äý™‡í‹)P[y>û‡þæ—öv¥O?ýü\ÛR÷Ã~Ÿ¾áïŸÈØâo®¹ðdæ7ùkq7¿;geôž?ôÙÆ?¹óc·Ío¸=6/›úÃr3¯©éf^S\ˆ+é·ö‰#€ÏêÎA)ƽǩѹzȸ})½7]Í3÷XtUwâþ7næî[ûù­}bç³úÁ´«¯Êí§xk›×Ȱ5ÑaÉé,£«¯Ê©žËbúO9ðvÔœãéô/î6½2î»áå¬À- ýÇíKÑõYuße]T®–JüÄܰÅõ¸¶Ž$ =ÇïÑ{þ…í‚Ú‚åý†Œûµà¡è÷ÛÁù‡ ûícCýÆöæ•g=O¸yéŸÑgwŸ–ÿ} –NëÿMÙŒá.]éÛ+< SÝÊ=èÐÈzžôSÈï/ ·ð›_~0*¾|ŽŒ6¡œ œ˜”jí%§³Ø † ˜ŽHüûF A5˜Z¦Ï4 ­bk«*Œpœ`ž‰º™¢nÜ ”³þsú{T¼÷~Ò‡yÈoØøÛæl€Û ÷`Ñkòv·+LŒ´ ¿ÉÏ ÿâÙ_4z^WYصƒñí‹ëNâ=Þ¼“øåš{¯„3Kz“{;êÌ8’^<„C;¿lºççz˜l¸:€ïšØ>«ôè³8šëµü¶¡û‚K†3§i ØšÈî³8ÚÀkùmƒ¹ŒÍ×ò #›ôÝo5!ìÀñ}k¡ÿÐq_4õЇݽWÞõ¾3™Õé¢Áq™q8͸‰/eø­}â;7"ÃrwÄ Xt*«›û‚K÷¿1ûqž¸—Ò^[Ð8|g²…Îf BÕë9@MÖÞHÞÙà“YR'ÔB1jRq~V§#QqëÎ_¥LtHrôÁówî6ðeÈ©'Ÿý$‚¶øÜÂêУÑ/.á2Ñú‚œ·çŠ+f¾þØ„z­ºm'áÕ]$”rŸö†²ÓŸóRS)LµõšlÚÅnòÿ‘Kf:CFüÖ=íÆd2×±éH„B,SJ5Ø4Ž'Ñv¡èÍË=£Ý¦‡· JJÌ<'oI x§êQ,,M€ã+þÃ÷Õëx—¥mVVžtiõ¿ºÏ¶ÃBi&õʈÿÅ ðQøÃ]ëæÁ–ð/ZPø°ní1ÀqB×mvD…Á ¢0¸LY{ùS†œY<Ô¦Úÿ§ç£õE‡P*£ÂÉÉérqEà ¥\z'5bâ™À- mµE‡AÍP”räâÆ1‡n½®êù"íÓr…˜‡öqw{R×*Ak«*‚ð¦ íù<»Á¦¡ªh‚ %â–*}GË“­c~#1|xðä©ÎåŸ #ê*i­>¡iÙûHò¡M"fþeßúÐFm˜ö}?Q0s÷<¸ºùÇZžïšXJÓ§Du;Ï‘.æzì숮-ÄI÷öéõuÖ^ãÏ5”  ë‹B”2±¶¶MŸ…Þ½ËïÝ8„®¦+ZÞÍH­dÞÆ§q™Ówxºö݃ͮSJ2žF§2¹'IBijè<"8q_à­­{C]o©R*4ÔDZuÌW>?»†8gÏ*S £q´jD ¥+0ó![ÏjIà%­U’$»)¥‚¡…±Jͼ¦¦“$¹©<åzºçâËçEMåúý‡Œ>š[ÒÐ*lü¼Æd_©(˜},=:õÅ]£O÷õs_5AÐég‚Lqœ@\fz…RyÙ—C–ÜýúeUAº‡–•ÛäW»{,¼ íég‚{†ÜÊm+ϾúéQØÁ«¯ÊÍ÷ŸŒ~E¡³‡ç\[Y0e£7ÜÜûF¥þËY»s×›ÒÖPIgÑ)ùUy‰ZÍ…¯W±è”B~{{«´­nÔ„ýo˜ê¦=»©w÷MÚ?è‚ °"O9¾â €ß_™LóþÖZ›ö¦óEÑõ¡l€Ý—÷ÿØ_³;øwõkÞøß^2w^°QêÓk'Ú*r¶„_€!Û“zû­}bºní1xþö6`Ú”suÅ67g¯žv½³/‡lY<Ô¦ iÿ Ýzû-›8îÒr«S¦§à宀„în..ggïu´Ðížá˜•1qVÖ…3O.r»~gƒÏµÔ“ÓfŽ tYŸœßlÑÒTPÊ'¥žš5WÍÈa8×Èa¡ ®hBa€s{½wvŸÞcÜ]n Þœ|`hÓ¬-ß‘Àƒ}1àr‹i7bSÁ…>ìõ[ä0±o7 m¯#ïŸ]ˆ)kýQre Éˆ§sõ„5S¶I˜·~NLWÓòʲ¦œÓ+—c`[(n­v™ÙÏ"ÙÓN»NÔ\á2dÌä;ñ»û%Jù ¢‚wÉ#ÔM'ª›: 5U< [ôš~8ˆ$ðÁ 1¢B"pçèZ˜ârÉžø÷õ@àׄ %\©0t²œ©mÒÒ^?EØPòöÃí-£h­ÕÚݼ;}5(‰+>Ë…+¤Ú(…¶ÌÅJã ‚Q˜_÷ãìî}Ò%¯²öÆ‘$I´û¬ºÎ/ôþEG £1Õ?I#I…¤ýü8Oãçë¢réƒCÂ_6Sµ§²ÔÍLuX@e©SšÆJ€Eã6üÇk€J`úëPðð=ô]ùë—sÀ7ðÒožwñÀÜ¥ÍPηFÝl4‰ä¸ià?è|.º Ö¶3»þØšhD›9ÕoÒC¬cë;ÙÔ{Úäk<­<ŸMç2ͬÌõØB6Ý\pëµf_ÆâèU–VV¿Ü\ëå»|0¼>þ ¼VÜ­”ðç3µLN,f×ù Ïqˆ»åÍ“» ¼–ß"qåŒ>Îv›Íwùájͳ~‚‰ûßl«,/s´´²:xcg*‚ pyóyð[ûÄMÊoØbjÙ-wÞ@˱™u㨚ýìþ­=r1Odé3µi¤»Ñò÷|ãŒ×/EMew/ürF¹o„lÿæ>û~‚eãÊÍ}f¾FtH§OǪïì{çgX=Às|Wý“‹ÜêÒS^€‡Ï€®òèPÏúÎçò{k›±awaÑ”8}3Íun€Ö.ÿᲘµ 1¯ (F(åt×9§P Ubck¿¾E(a}‘©WÀàþ\«Kíõ¥t…ý4,\^t7S„ÏîÅþ™Ô´\ á»1 Ü’ÀñnÀÇIû^S˜jr’ @îÆüðϰb¤mó£ŒÚKÒo¡bȶñç¾™ŽüçñI€K…ùÙ—CÖØ XŠ7|ˆS„ιsÓ¦Ôyþ?=-j.o·T7 v¹xhÁ¡«éâÖªò’çKìF¬¸ÂР×PTÖÞ´@ÒZ}²"åê'ï•wµ¿ Ù²m‡TÔTVËÖ±¨¤1Õ¯¼Ú‡ãæ6ëøôÖÏiÛÆlíu'|öZK}NE‡å#¤²5VKÚj™M?ÙÏŒ7/fø¯û¦ ÆoøÎÇHåhéâ É”#³·8NÚÇeh(ÒÏI²B‡³i„$”òÆw¥þ Æl= ¬/ZCWÓ!Ê.\ß°mwúc ò IDAT:¯,Ë$6å#ÛqrØ=@Ð…’¶ZÛ§w&¾Èm°ùu»û,ŽVwžqôCöË~íu…ÚoîF¾qœ¸;ÀeVäxaãçh¦–1™ù rÒâe¡ ɯâÔ¶JŠÇLœ¶‰Êä´Õ•[9ÊV{vS¿Ö’´‘¥ñg”OÞønŒ–ýÅ'Iét[`*Ñîæõbìô…7º>¸ý ¾&¿_ãÀÙ/›xž¾™ðÃã)GÇGñʲ7¼¦!j(>Ì+Ë:)å×÷“Ê•z¯v<çØn÷ ÔmÞ¹ª€õÏ ém4~W@Я¯c<Æ Fn˜‘«ÿð>݌Դe‚¦»ï‡1$¼šJ “rdôÄ— ÿÇÞ{GE±líû»'2à 9'‰’“dÄŒ9bN¨˜³"&—Ë}’xwªRÂ× Xx‚Áâ4=Š Þ²ôT¶Îûì‚Éù/Œ8†ößòn¬?ÞSÉ.ËuÔÅÏ~×ÏLWúù¨w_´%)´æók/¹¨™mì5îÚëí!y³d…~H~lÒËcÀåÚÊâ­%ïhš»|8·è¼Ý°U²’§‡H§‰»‡‰KCPŒªÒw =šv`d ˆ  ¥Ðʾ>9ø 0òi~«@R«mŒ©dÂol]Ë·¢†yÿ`ÿÓ8AâþËn¬¾òöÛþÃ×ÞøË aûZÎÅ%¯ŸÜ„Ý·‹è7Ÿ¤“´T9ÓX•SÇ ½”ÿM€dçøÒ9z•ç_U’êFIÍÅ)ÚC~Iv}úKPîöÔ-}5—ø<)BÙÑnIei>üpnÑ3 Cå8ñ¯d‚€ëŒ8%|(F%HWbJ0yÆ;ÅMe¯Q*=GP× 8+qÿ-HIà Añ’g‡Öƒ—QÕ4&@<€‘Çh[™°QÁÕÇó¢$\SgBP§Ùô–Bà¸Ç¦‰½ÏöÛqõ’è¨ÛÍ“ £1˜Õ { ݆‡µW~<·òlî +Mþég¥3H•B_ÏÎoUÀº%¶Ã¢_?:åW¶õ¦±y¬È Ÿ¼šòÓÓ^ .ÉMyæ7ÿs[¯ Eèû—žÎéÛÔÒfÉ6°VépéJêÄj¤JáŽRh¢âRíaA.´‡o³G·–d¼Ø[S°ß}ö KÛülÊÞÐ}CÀmÖqª¤¥ÒT×>¤=eohÛ®sËÿoK€n–8N¨DŽŸ--uš ÀTGMä4‚$ýu94¹¾&ƒ¥Î¤:\ºAhâˬ˜4Š‹»¥¦»žãšį×ò««ª[%;þž AwZ}.Y1Òæý©ƒ1ñwïÞ=ÚoóÛ]@!¥¬CÚVC”––¨db-EG{梓ÙhƱÉoô~v™zàzìÜU Ä0ä‡Ð‰oóš¸\â¡’Šz˜3õm¼÷¡š©Pªì¥’‰I…¨Õ ½¨Y“Àå­R…ª€ÆÖê¶ž‘|9:@&µ¶«p¢ÉjÀ"FjZúm\%ghYû– jòc¶Æç‡ü\¿FŒ#6í!Hr€õš+óŽ;÷ËÁhL¯ºìK/¼®¤V6 M:šÊ—¥ÜÚŠ+¤³x–žÒöÊœýî3–<=Dú,¾¾XÔP2ŸÊTųò_þæÔ«í …ÖÐS’è±öœç]ùfç•Ýðȵ2~Ã8’ÄÊÚëú¿IËâ5ñe.-_S×í9¿Y%/'T ½†¼çwfÎcê;™}öôÉû$;¡%GÚVu9á^'s.[ʯ[%k¯]<þÙq•Th©®o=»4íÆ®»5€;wïÝÇå.•­U×”ÿê¢ÏÂKûÿÕ}õnü©NÝÙ³2mW:cT†O_ÆÃqB_ʯ3¢±yΙ_[tÌ?ÑØ¼"IË·FŽqïv’$¡ªEbAa°M•-ŽÚï¾´èb4–»LÐ`Ó&’›ê:ô;#å×°¼ü´SØ®eí•b4æ™÷ǧH'옄b4»ÑKöùá8ñ«óцÏO'®Ü~:ÁÅíËŨÉqKÌI’47ò=âSÂÆ=$¡â'^?s¯/hvyôðÁ‹Çû÷ð'úÙi«B=Œ£'¾ÚÆP]xa¹w-ÇÈa…Á^G’d¼½©æò««}’ìµÛBûôZ1exÀQ_[-éoCñè~î[Æ pß‘7I|ïyên*“³?tèÐXu}›”Bc‹›ÊÎí»Wl 𹂱u-—ãrI¦°¶ð1ŽÌ sŽüß–[›?†¡"'œÙ&RXa]Qïß}i•Ñ(¨¾\IìëgÒ¸ëfQ‹G/Í© %¡ä¦_ÇfPVJüÊY6ÌúC £€AÅ̀㫽C©‹ HÅ"z×Rp¸+y7£ÆfáÚí¹T5Y¯·õ-1~r`$‚ Hêþ9žóÎî¯ÿôø‘ÏÒ›*¿î­qr‘§"çÓ¥áüªœ‹æÞ£G/jE[œOÆÚ ¯+•R~È©·Mà{€«T U Z«X¦ª£0ØsÄMå¼".,5–6Øùý`S`Ý÷Ï ©kQ¯¬êSªcß÷MMÓïëÓCè«ynÏÓ ®d›tºM$W÷W¸þk¸' Òåºs~™÷SSßÉÍ U§(¤iîÑ1ªŸÇÈÍSÜ =F*%í~ë–Î&Ù:×A¶³t,l‡ê;îØæÙt:Wo¼²£Šã„¾‰÷˜“oí¿?Ü5Ç ;ûùÕÏŸ [?þÀ ~óÀYçé±W“«|´˜%’Ö*«Ž–oZ:+ÙÐy€R¡_]íƒë»„.WÓ6ëûáÜ"_ CIÛá‘M¯‡Y‘ò.ë=­½KÛÄŽÙ^_¾QTW¬µvŒ]cÀêĵى‹B¦¯}¸o˵|Ñù¸aêLª"`uâ¥æâ²øáæõ]î%†%ÏÏ“ò+ƒ†ý!Á× ¨,¦ŒØƒÞ{_ ‰ï«A1˜h fœD¨_XíÞë 0ºß,3¹“Ž+«´=ÀØÖ+A@_Ы]¤04±óºàñ)Õ8NÔõ³¹A©·< ›¥&[|2m*ŒmýÇ%uÅÙܾ4 Ú`å1°J—Îí“vpÔiÞ‹2_Þ˜H’„»¾sèŠä=ƒ VžÍå•Õ‹œtV&IåxÀг¹I9—ÈV'm+ÿ°¬õkê0C÷‘»’võšìâ;ÓeØâGŠÆ=*Usï6­¼´dubf­fÒÎ~=Šõ¯U@*°57ë!€JÛ`ÛÉ%m{^{ s ´ªz™š}€?5ã-€Oû3~‘4UŒH>îÆfRK» Tm qûQ=.]pöe…ysáÛ-*…”-jøÚ'hMb4¬Húø‚=†ýß@-èÒg/çÝoïPŽýR#Œ³3æHØLŠI›Hü ¶HØ·Òk.ß_ç¢Èhh)©é׊b™4LûìË ›:ï×§eÔ¢jáðÒz1wÓÕüPPÑ(žm¡ÇîÙŽÒÔ$®‚[é54èÚ¸¿rÝ–era£¼æÃƒô›i5®€‘$ÉÀ(ŒJ S©¥éðòÆÇ¨Iøð¢ÆÒ˜Ž¦Êä'ÑïÆïIDСèòÛB)@½°Ü·‰øœüèÚEûQ›^ê9öokøVA¡³SW²¬y$Áå!Fg- öu{yaϲ?eæÀ¨ *‚Q°yÇ>`$Iâ‚äø,IèðŠ89`Ù¹…¨ÅJùÍ…üŽ‘…$ÉÅŸ§«Ã©Ä”‚q^çW´W~,” ^c¸epuetuÃÛ§9ÉuB˜] ÷]t%œÀUxìLçšýᆪ\¦¸¯·y@gP"”Æâ¥V¦\ˆÀqb†¡òƒsÆîJ;ÕÑT~]XWTPh+Nn˜xÇ{ˆh,ž®¨¡dpw@®±ÓQ}ñ¬CsÝr½"ηILâ7V‹›*l 徭T)î?ŠÜ×]'’$ÉG|næí>;ÀgI’´³_„yà¬yõ•…æ ªÝñpfÕ¡—ß|3ßyéƒ6Fs×-æ{6ðe:â¦rø·ªq3?ýÀ³äò/5ÂB;cŽ|t…ØÝøSÐÖÚs{Þƒ®àäߥžã}³ÌÀy ‘ ¶h¨R"XòdKP·¥ôE×ß6¿îþ.jpeUŸ'ðÄyR¬G_gƒÚd88ǵ ÆŸéð¶¥°|óˆrXPòì0®}‚Ü\çwº‚ ÇÛ² jy ý'LÓÞØÏ8Ìßû-÷ú“{»SX€q|v -ÜΑ}]ûU.l’"(%šÊÒØ;=ļîzrk÷é»·p¥”iä>òh[yÖ–’´¨E¿~|u|ÇËÿîà÷_ºn¨K 6õ1AÖwßÕú´‰+q‚|íj©)1ÖV[²#€-ìP*JêD T ùáÐË€½«®]vzÞ@‹u&å^/vÓö©Ž>!Nº3,ôØÂúê+ó^±½¹ÿôQ€ ‚7yMsq¼sÙ¦iá‘ÆÒ6ÇÆo=p0>Å¥mÞ€ H0Žj ©À[ÒZ%ÌÉx³’ÿ-÷ʺÝg~u¿Í E±+4ŽŽ‹ÇÌ#—ù•E+¨«þæµëfÑ0mÛ@ 3WûSÏÊœGM]xX.ly šØTøv/.—˜»Ú µêËÅ-ꢺ¢éO?<®kß÷ŠÛÌ£Cœøˆv)¬é ïEàJ’ÀŠ3K¼pAÀ{þ%amáE¥TH†°’¡¡ß"Wèozª?Y7Ç^òËǧÛÊ2ˆê‹ÏÀ!B%Ç[¾¦uƨD)$M]K­K„@PHhlM’PÊÐ繚= Š«0Åš@̢֥vMfr'°/5Bµ›‘¾ec'NP7°=Ø^žµÁî[ÝV/R]¯WÏö††>—BgK‚׿2– ›_¶•gê£TƯl]‹¯„RŠôíZŒÐí3*9† ˜@ÆÑ‰]ÞëPê­RÞÙ~d§±AÀôÛ·o‡qyÇnY{]bÖÓK[š¿¤x);Ú $Í•Æù/JÛjoÕ$½ž¿ËsÞÙÝé˜É0gÉæ?íË8N .SÌð˜wª¥$㌴½þYîµÈì¿:Ò>I ‰/£ø,½ù‹\ÔüáͧZŸ?»wùæ¸ßKÙú7õ=»߀þ&ÿKÇïåÇG`TãâÅó¦÷WÉÄOÅ¥>T5nPGkÕÊ´#¯ŒO9¤·¹j˜¹E¥µÔÙØ8*“[šòæÅåE¿~´(©)ú¿ €ú†ÁîLj…'²¥ Õ„¥mf 1‚IÃz”ú7ÓjÚQ!p‚P%¤TTµH]E2Ü5êâç›e b5:åER•T…“8†¡üAnú•%!jé4¨m•6ÿÂ1rè«P¯ßä7“§7Nº¥iá9@%îÝÏ}ŸV/ßÁµÙqÜ/„RfLa¨C)´_( õ=ra[ÜX¶ó➥ÇÔxÆí;^n ZË1°ˆÒ˜'ÊÅù½ƒçéZº®ÍøÚÖ²¶ËgcïñÓ(tµå„R~‘ÁÕ_¿Æ§âaVƒ”_·ž­oQ‘:ë I’y¢úâÍïÒuq•B„Qé qC©€ÊàЙšF&8NèE½Ø(4ø¨dBÊÇ K÷_yš;SÒRÍ vÔéä $TR’Àß)èUVz¬6ž¥·¶°¶°ÿ•C.äÝÚRªµNV7´×PHÅXUú5)‚R”„RÎh*xÕA¸”’b‡íå9Ð,‹\Ø5Ði⦲‘(…vÃPŠQ @ÐI+úZÉÔ_n õ]teùÝ›ñzŸ®®ŠQ7°}ÝVòΗKÚeÂÆsocþ‹5aó"·”›Ai€uj<“e*™¨žÊäÏÒkƒGð$Ž‘Ã$žUŸA\§!®jåWf¯$pÕ·™Giy¥þn_.®a„J!çW}®A)´ÓV·aJœ<¸å/‡‘ïqø')¥BIGs…ü¿»d4}è28z} ,f]RpgËþ–â”u'f®Ï>7ÿ@ŸE×ft4—ÏÒ²ö Ï<9s@B¤ïg}û€¡T–fã›'w·ø,½É°6¶‡ÿóiÍùOá N|ü¼ûvÑ⨋Ÿ³¾¿6ïØð¸,ñÄØw®óŽ}4ûH¦<ók«ÕÏÏXq&çDì/UߟûZpDŽúÃwFŸÝkoüÝù%'³ÕÜgŸHvš¸ûҬÙ ÷‘€WÄ…D›Ð•GÿÙºšúMk8«hø¶m›ä£‹à<)vBï±[_-úõ£¡ËÔ†£ä>‹¯ï»™ZMóŠ8ßOßuiê;™ô[q7bÈ/ÉnÆÞDzŽIÏyg_Û„®üh4»cé©ì –ýæ÷™( Ýš¼*tkr¤¾Kh«ë´C3¾°¼üž¾K(i0CØgѵ{î#U.SXgì5wŸ}âiàÚ'XðúWWL|&‘^ç? ˆNâ]KúÖ×jÀ"ÒfèjÒÈs,¹ôTö$€ñ»Ó§{o2ö¯t™z€t?IšÍ&]§Ú{\Ì «þ e^Þ[Y!Ì)kwì´nŽyï8~[ºûHÒÔo*é6ëø8ï—ÇyŽ™úM%&î.s¿-Õ"$‚Üq£p¬ýèè\ó ÙÍ1× æœYá`?jSšyà,þ -I“z \’hA:OÞKÚÚTRÐlä1çÔI}×a ¨gpœèñj^ÿJÇvxd­Ýˆõ¤ÿª#ö^ú-Ê[ßoú„·`ìwØt,¾|ËéyÞã´ëÿlú·l…KH©r{WÜz—‚¡šf:jk–·î¡Ÿµ#•«É¦Õ4òeþ§{âÛoåj²¨íujç­"š·5Ïoz_³ç«Ï:ÀcÓF,ÚËúzJ•~ƒN•³…Æ_ )yõÉQ˜º¤{9Ã4õçÄä]UÓ6{"n,Íѱ ²–´U;N?jéú öß¾ggŽ>1‹Ou祧¶(û:éþ©óí©geV{Æ]gpõ[UrÉ#W€ QÝ—CƒÆÍÎrбœào,}žÛH õ0(.®ª%¤T÷ïgœë`Ê­éZÒÖ·Ia¸kÊʳ¹Áûf9¬»”§Z:ÌJßXKM±ãfÅD[ b¦Ì,iƒÔ¢©¯­VÇ™3/,÷>rà~±!‚.fýáZÒ7·‰&ü;ïjÙ¹ü[#u»©Á¦Ò¤‚fê×:qÝ‚!VâÜòvîÒ£ßîüÃÐ*§‰»{õ ìO²<-3QJ0 ¹i‚}‹:“¢¾=ulMaºnîµÈk†6˜Ì(ãWf{ì>}Ïïm^³fgªaCCƒÿ[.©eB2¹úµçÖ„”Ùq”SãáÆÓ_áÒö¤î{5Ú;”\5jÓýµÅ­Ôµg³ÜÚ+>r5ÍÝ⦲Ùw„žsûœ|÷†R*4Öw2ÇÉÆ$'H:AÔ´H„64¦i¡î¾ý…&¶¦²Œ¸ ­ÝåÂq]9÷M -ä·ë³8_žo îq\Ÿ3ÎD?‡gr4Sßg›‹ê‹yjZ¦(SÓ¨nú`§ GS._ÀÆ• #£t¼ÞÖ·lÕ¹OÜŒìB &ÏÐÀÁ„“}|‡¬ßä5Ñ£/fª“¡ TŒ®–Ÿ¼{ °çüjX7»Ó7£†}8±Ä¦±à Ê`ƒ¡OKÝ‚µcìz8C—ô‚'GKaäö­úª2QC‰[Ï’€jcëº'[‚Ú¢ŽÌ‚ÝË.üï@€õ—>ßR¨ˆÐYýÌMÌ5ZÊD¼g9¿׊–i1­i³&öNñ†F,C‘RMMiª£vkF?óØÝ·‹¢ŠkE»,tYÉ\õÁÌó8 6Mw=–NŠù›ïù©Ñhý±'óâV†µ³ï®êªJ-Q}±£”_s íä}û†¼?<ÏMp/ùŒùCÞí …:·½ Sã{‡uY?weݽ£¤º¬M,`ò¾ ÜÔÇ^ÊŽ6»S'–›{eÅ̾O>ÖFŸ|:Z%ïÀS~¿‹Í¤¶ÿü¼óÎÁì‘áÿÖqåí7dÚ>g þržîAjê7µ°£¹bHkIz¤~ýÕ-˜Ôÿ=?¸LÙ¯ÍÔ2ŸvhÜI CIŸ¥7´Wd½åYz‡ÕfÝåõòŸ{yyíÿK¹qœ@0 %ÿnO(dÝ~üú¼¸±t‚ë°ØäÝ×]~t¦ëô] Ýš<£2ûùr’$•Œ $!C1z%×ÄéÅ•Í#£¬ Õ%]·sYnÒl\!µAPÌ VÞÝzÍsÞÙ âú’U*EÊäâ\S—í¸¼ƒ-j( WÉ„ú„JA¡±xM)'T %Fc,mó'ý|Þ=¸o«ôÀœ$ðe6–·ï<8ô&í}·ºàCÒH\!ÕĨ  3×Ù){CLÝàWw¦Á -Iƒkó“–"(ˆRhIkN¡±*iêZ©$+”=¤¹®cÿCоލ®¨®òh,M”¥köîÈø"€'>Úg}ÌÙØÑTa ®¯¦cömôà éÑ“:CÌ.‹ G"ïÀÖø|ç;‰Ï6*¥ÂÁT&‡+4J©fë÷zhmÛ;:~OÛÔ pug*ø.»å,¬-ÜbÔ>$IT“n£·Vªi™~Õ¶òØðj[ßOÿ«t€?'[#õ5,:æâd®Ñû˜C‘Sš,ª+›A9~+½¬ Ù»\-4Bƒzkïb3)sgô3æap8ÄQw”¡úîV¡üX7ø”×~ò¿£le3(­LMÃû(¹´8'Yëýñ)¥…w·Þ«xs*ñÓÕUÏÏsÀïÀ`ýx»VŽ¡!m¯!UàtÚÚÄâ×ø4Ý‹y\úâè½Ü++»ÁoûùßöS)h­uC),{×dòGÏ›=2NŒî9þþwzaÞÈ?üÝ%˜šÌ0vžk1iï;Þ÷Ë×qýœ&îþ2ä—äž>ðòñM˜Ö׌|¹èÌÀ²ütçēҿ9Y.9™=£³,̓fíJ+jÔ ŒÝà‡ãÕyRl–{øÉÈO×V·ˆêŠúxÍ;}³ÿæ·$-•³ ïï®TÉDw¾3 (÷¯ö«ð¸,ý^ƒ–æô³yä_¹ÿÉûRPv´ÓI\¸BúàH|çä9÷hÖÂò¬‡ç™Z&jf®#Çöãš8?U):ìš‹“—ÎÚûº'.ðä@S¥«ï€ZŒÆÔ“´VéhZxôËš%ª/Þ¡¦cT&• ¸t6OwpGž…Çà;É€t’ IDAT•®CÈS 3×Ú¶|Åx.vø²}ú†§2Õý¤íµ†ÊŽ6Æ·ºòžrKøu¶^¯k„R´ \ÉX;®îLƒ uÏ}+3ïǨŒÀ¡ÓU2±MЈ1$FâÆÒ™J‰`¦¦…‡ƒ¦•÷sk«ãÇÈ¡^)8ËEÍ\…„Oëþfßš:ªBü½âèlž¦BÒnË%Z5* öâ8yVœÉ±ºqóö=EGû('ß!›I’°ÑíÝ?A13AuÞâò²²•sfQ®îL…ÀµOôÕyÇp…4„׫O ‰¶žýg¢Tº…´½fR¡0„ÿPú· I’0«¿EeÌT§R’$!²+*Œ¥¾º"b°Uþ–ÉŽŸ†ö*™hŠ÷7Q‰¤ªÊw_Úüì´Ú'í}7Íeê+ '¹Íègþ`Ré¡Teí~2ÎiâîK/ç…\},R¶^{Ü©Î;}·t|lµd~úMt¶EÆï䘻ÿæâß-w—”ð³×Ëœè:wäÚVÃ_o퀂²ß ƒköLøáú›‰°iö:8u§S·3ÀE¯WÊ+©j\ŠPòÇ1‹®=9óWþ&Ù~ÿ»Ç5ãôƒ?ü  Å¡ehèW*ù[ =–í÷×dmµ(‚ -O êYÎ:á‡ÿö#ÖNJÏÊ}1È’ñó»7œÞÒ­ÆÀÚeø„™‹Ø÷vIÙ_ ë´Ìþ†™ñ)Õ(®”Q¨tv3Àç›æ‰ë¿ô®Ê¼».lô°Ù†Ê”ÒŠÿQð¥è³Ûþ°‚ÔF1ŠXMÛô/1Âhñ4mH‚Éàê}Uˆ[ß/‹YWZaì®4¿Ôç÷ÐÙÚ/²Ïͷψ›ðìÎzÿ7 1ã'چĨ hÌ:hKÒ,€IA¦EWVõÙÇ5vœÁàêK;èݫijš^—³Ï/ÔÖ±ž@çèrqÛ«íÓœn½:¿WH@)¬/>•v`äá”Ø!žy QÚÇx¼rÕyÐzn©×+B¥Øv6ÿ^+wc@mêÁ±×1ºÚ;’GÞ‚MWòXí×ÓØÚ9W׸ÄE¸?8¸Ö±äÜR¯˜±aÓBèê:JÅhR~½õ»ÃcçœãÚºD¹BÂ? X÷R•ìþf£;öÍvyÏÔ2=‹bTA:¯GÎÜw3jÔß&§žWÊ„¼Á#Æ9'DúÆ-+/I‰rÑÌmP¡R€¸©l\}›L@){(¥7 s÷¤¤ý²æŒ–ÖßYï­ÿð‰Á\—´æâÔd€+ŽüïÀïÂ_¡~KUÖr1\ Qjˆeª(…f'i¯Ÿ°']àÐ\·Ÿÿª6¦~S½{Ýjý­IŒ½Ík¢#j+6csŽ~è¼áµÃ˜©ZΓbíÆlámI2¬.ùd-UàO3KÚ’ª¯9LJíì#™´5ç?Y­{î:vWšUM«„Ccó†—½9uàþûZŒ×Ë/‚¥c±è惧í]Vn¢ó?NœzVÆí»ñSPÔ ­ñù†1s6ƒÇœSš½ÇÅøšÍvôY’À IêÚ¤Un#¦ˆ¾~ü]ç¦ÐÔ·'êâ8A{4K{þñc*òÒî+¥üޱãÒŒ3EG"ïÂì:fqÖË\.fèÛöÙ°ÿRTÏ$ín©¥¦eš¢RH¡¹2ïd¦º†]]ÊÓoz¢(ö5#n €7;úä9Ø3?ø=ÏÊ›b´«\=“Éž ÌjË'wJ4um¿±Ë‰ŽRh´Ÿ£äVðdÂÆ>¦Î¯0 ­$¤ ¼xwÒ >²t-nHùõàèê½öû|-_’;H\¥ø³ñÊáé²à§ñŠãºïFö¼ŽÆÒ@M3÷#‡æº}X0¡³YÚ«qŒ@!nµjøVdÚééÀæb]Pç9ïØ÷•Ó:Ip/ðHË:5«oѽ˜Ž^#¦ [öoÀÿ–Qá{k§ó;”^]õ[ýVÜeÒÔ4K¥ü:÷²/Ÿá81 ÃP9W*hGжî=šþ+ï{Ê„Sw\ÉpõЏ8|ÐÉIƒ,;pœ ¯{²keÜK…TÐŽË;øLMcàVZµáþY‘Gn¼³u?™ïà躹· ÇøÎ‹ŒÉ(…^ˆ ¨IÄžÄ™Þ .ïÐdÑÊ¿Ÿ”çÍÒþRѰô~r¾Í­§)÷Ù'6EÎ&?ý¢|IKÙÇ6M ÷[2~ãêe‡_ôYtíÔûãSÎ š8NP|]‰]~è©=+ø*©P¨ÆÀH'è}×?ߟü­÷Ù;)bÿUv¼80òó?Ò~t½gÙé0*ІtMãÝéÂëJæ×¢Ïû”â6WpðžiŠJ*šCci‚‰ˆ]6lÔ8šš¶Ù|…¨•YZݧìàgãj¦‰’Öªó§5pUÔÞ<^!n‹jm¬ëÒ»—ßÛÇ7~Çw";ÎK)h1ÁÒ›õ âùt .ªû²MÝÀvfcÁ›DÏ9¿îPI…LWrŒºòyNà Ç;c«©¤"ÅçJSË×ôD3§ gFZj»Ìü§ÛÀ2ª·Bgˆê‹7ùH*•.k.|»Š®®/¿¯'F¥û=L-XŸpûþW*KÃNÚVkNa°óu{ˆIÝ7ì9Öµ“wû¥4W¥LèŠRéµO¢s°­«gì†ã7c`Ñ„hˆ™êÄ÷^pù¥¹Â[T÷EïÌórǹƒ,ó»V D÷þlmÛ€U+öN C`mð‰žÕÄ÷¨Öó{ݬI"H\ù÷69ÿîzs]•¡R¨«ä=€¸G¥Èò3É.$¹ïrm€D®’þ0øé,äo A´Ý:híC†¸¡d ‚Q€ÎÑÑ XŽ`Tj§”ˆ"@UÊ„@’Bc™ %¡Ð¾HÛkSŸß{ê2eÿ±~ý.šëVð8=„‚v˜ô`Áÿ^à_M—O² ÀAG>Ü˰µgBB1ÜÔÁ'\.lç=ÿ\€'Ñîò¯e«1 ŽÞmAÕ§µ¸J¾ìxü³P€ /Ó•Zû·ìzföU q†1ØŽ”½W’ï^¡¥g´ŠP)æeo™3ТEÚ^‡ÈÅ­ (•®ÍÐÐOSJ~tªÀP„ô[q—›•žü@)å+:ÚöÉø n€ #&ø ä&6.UÉÄ×zŸ1ºÚQ}ñjŸ¥7õ\§Ä&©”ÒF\%[A’D™J.¡8˜päÞg*Äm>¢†’ELžQKkð_ÕÆç—yKHÕ Œîá'”rñ§Þ6k‹Ÿ‰bòŒ“¾¾¶UúIÜXº‹ªÆýlg®;®µô݆ª¯¹9¸J¡A¥³Ù8N ÂÚ»@È;Ú¸'y@m©~“ân Ü1Ý)‰_õ‰éfovåâr¯“Ò¶ÚF n¿Qh ª-œ8rø°ÂO §c4æÂþκ|AH´m,Þü¼$ðù½M9ó>”µWè9Œ¢«ë˹´l‘Œß¨m0¨½Œy)J™CºÅúï’¢ƒÿœÊT_£”‰¯àrI4CÓ0ØÀÎwxê¾al $I.›IhQ™Ü†ü¢ Ñpóe§>Ô±·ÝW[ ' O©2ÿQUB£[$i­JŽ<4¢#Žþ[Ç CÓ …Bgµ¶•g:~®à-aÓS¬Òv I‹¡®5ê­ö]ZØTð:¶£©œà9dj˜f$ïXª×;dÇЮJ.jÖ7–nyr/>9xý«ƒ8N0‡úM„Ï¥ÿ¼ùo'NŸßñ“8Ž ½¾²è›oH訌·OïF>½GÅ~ ­(¬/HW×ašêjꆪʊj™°±ÏŒƒï5Ó_¶,~zÄæS§ÍÜ×Þì´ª>ç¡¢ßfë)J™Ðd@°_vm«Ô¬‰Áþ"4€_€$Jq™¸N[[û‚5O 5*oëvvv*“C é×o/‚>y“ž)¥‚'ŸpÎX_;»å+¶Y͉y¾5øªÝˆõ•Réó#2ïù—¢å¢f‡ìsóý‚¢^ìÃÒ¨ú6àJy›\ØhãÞwÀõþK °áè,Ø¹ä¿Æ-€ÆäJeJI’$ØXoCàrœ\Ú>Ÿ…¤\ØlD¨d¥¥_¿ðq…T‚`òäB6l‰—Ì&t%†QhIà$€–µ¯¢µäÞ½lÒ²ö]P—ûèBàÚ'®ÜÔü%éÍñ­Ç軄ŠPC·Lv¬³}ób\ÌчO|Ü"¦Ú‰a(áqÅ„uEH’<kóQãáážÛCvÜ(ôuŸ}b6•ͬF§´âmÍ“¤t…ýÝìŽQ %vȳïϹ» žw«6=†5ãRAÚ^G!pU÷.›Ö|túÖÕµJ«Trq è¨T8ù“²hl^­Ä®˜ ±+®þ[ÇŒ›¥fÉ›Jý¯ÂúbãÉkŽ<³3uðœ–9š bÕÙœ0qCé(®©óM6­ì{wŸ$¼GHǨj\éžÍK¦ ÷4¬W¨ˆ&U@!†¡â¸ë›¡]Ð ÑóC2pœ°ñ_qûŒ êÓ¹¨Ù¨úýžáEž'ž”†. í%þ_mþgí((FeœYâõ„­g}TXSpRIÕ&I‚Àq‚Â5²Û^ž)/ü˜âñ%;ÙK&hx;jèÀó9o°t,øÝ{SÅ2$p 0Øx[é{KIó·Ö§Ïž‡äe%JZ«Ë8†ö1º 9 (EMË´TO“)¼å§Z0Äê[w[$‰$íêßúæõëꔜ²Ë=‹Ã•鈤 H…ŠÀèêÚ5>6¼³³! AP0õ›mYön~=\.¡‘$ µ­RF—˜š†[Kr’w¹‡ŸÌY÷Ñé_~$ÀŒ¿s"Q7´³$TÊ¢ÂÛ[">][=§äé¡1¶-u\FÜ„›q±¿xáJ©Þû·O\ \©’ 5ÌÝã”|ÅëÄkÇqœ@œÃ¶[IZ«¦pM]–¦Ä9!n,­#I € uE*9þ´‚ €QM€ b\)5 Y÷h €±žåÀ™ÿ+5£ê†ö%#½²þ)pÕ¿+«gÔw“=Š]]‡néþxûáaϧý~òÈ*J€„HߤO××Ó²ò©‚b©*©è¨‹è”ìsóçŒõ3©ûí9ÿÍaÃÑÙà€ü& wO%îîî2[K®” ¦hýíö \ûDwbì;Ó˜ëH`þpzÎdßÑû •’hâË(ÿ?þ”v.½ÂÚBº\ØÈSÉ;tŽ%¬‡ƒs\›9†v+…õÅIà€LÐpA±÷ð“ó†ü’<80òé®Y‡3GMÕ÷4FahzÍ;}Ö+â|hRAóõÖ²ŒvË~ÃÜ<û$â ‰©ã„q‘OV'n˜u8s‡‘çXŒP)ôâ®HªêÙ0Ÿ]Î×Qvð±»µºT–¦¡”iQèL®ÿÊû‹(tv¿Cé°úü'ãšú&m¥DÀÎû&ÀºÜM Tò­ºìj†Œ¸!µðÇoÛ´îùHš÷Ž\ÔŠÞ{_ëþâMÊR¯ˆóQYÙyººv Fc íÕÿ!‘‚ÖeYsá³/¨9¡Rx:OŠ]å4q÷’¦Â×'U8in¸Bjì=ÿR¿K'*eæó×_ø,¾~}ûéÇšK³´1 %Ù:b¹¸-ÈoI|SÃ`Óæ³%l»‚öÊœyŽvìá··­GDNSÓœwìq©AÚÁQ•ÉÉå(:Úgvc°1;S0¸úÆj<㞆:»:ïíZ¯ˆ Ç·ž~¾Ž®®S0kZX.ƒ«?‚¦¦ÁPˆÛlŒ›K¨~^sO>Ѷ 0A“4Wì÷Yzó!×ÄiXí×öã÷¤J)lq@PŒÃ6°ó~ù©‘JÁ~XÆþ¥µ^/ûbÅ* •„5ËËDš;Î.ï‘Å¥ƒc¨ñŒ7ì<·âÿi ó T= g‡Ÿ-«ºÈÒÙºVjC{íS‘c7¶A_Ïáà5÷äTi{­(àJ9 àe%u" ÿå7/·–¾Óeë[ÿ’sqÉèÜ++¢¯¯õ} z¿çÐdéX FAH’PSIôžq·ä<ì¸QèØT–3Ÿè4#².ÌÖ×`ðÕ lß# ÂÚÂáqYžíÉùS:—þw3j´üWÞßÐóÛ^ qÛ¨oÕ5ë£'õ&çÍêù&§{nféX€\ØÜ®¥NÃÿG`Ué½?½öµèâ?]Ày3&DðLéý‚¦aܹê]JÕWl=Ë™CûVwŸÀT–æz‹w ½±ú¸²ƒ_TVÓúdÕ(Û÷ê†vƒPŒÂàêïíhkXªï4è ®”œ^ä‘oâ<¥Ð¼q…ô™J.!¯o½ÿÀ¡½}ç™8¨œÍ¹“º\hô,ôXÁ\Sç—Wðí#ŸžpŸ~ðØ®›EœNö–$ 6­>þFãÒKäÀýb÷Ù'♆»éê:•¢$Íd}›ÔHMË” 03öePó—$gŘ2~Ãøþ›ß Ýšìƒã„3Àø•éÈëì‡?”©ÿÀÁr*“«$”r-5‹±»oÑÊDØØ]i#¯%ÜzLcñ$(…ŠŽvIm«´£ÿæ·îÛ§9)t LRì …¸U=ýÙí;ÃbRà8Á8b®Dür$!U%O2ÕQë0×D _傪O ¦x¿áÌ/²¶U‚Œßö|¶Œ_™Ò­¦úw§éV¸ç9 Tw+MR›CW\þ•ÓüãÄןŸ„Iƒæÿ<¨ÑGÿ~þ‰Q>°ûï[—>”´in‰/XÜ\[ajdfyäüîkg_”#_•Ëø 3ôÍsl ŒûGëÓg2ÞÇÿõ-fÑ'æÁŒ%ÐËÎåÇú#ÿ¹h¦> úBƯoÿôzøž…pn݉žãk/oÀ”aÿ–²ù­¸ëdd ·*?ýñ,¥„ZÖ~‰4–æn6›U÷8:°òÏÚÍq" ù E½¸^›ug,IT5-S¥ÐΪëÛLkÌÁдð|œqbÆÄnÝVÌõÄ×Y–\}‹C•·Q ­ÅoðÄ|YŠ·5/ëÇßu|§°]'$mÕ HŒÊ’ÀBgsð±åÎzÿ‹ÃbRk¾df ë‹™t´mý¡µô=@ÝÔ)SœnÞ/jø:ˆªÆ -÷ë7täéÅžÏqœàxÍ;/ª-J¨=Ĺ®¶^/PÓ6¿Ž È7‹Üã <¤æÃ*¸LÙOÜX: tì‚A%ƒ°&ØvëûæÞºzúFc‚š–éÇœ‹K<–ŸÎ‰|r÷Ê\!å’(…‚+©iô~ÔÈ‘SwLw*»+ )ˢ å×Áåu­^¾Eýý]_æ”ó]Êßß bp 2—Ì7"b°UÓÒØ1y÷Þø×§e/çÍøXÚ¾ûøãÒÃ+ÏæŽ‰½ó…ñÏ€€Ž†ÞêV¬ým§Âº#ÓaÍÁßs¡ÍÞÒï/_§M£C àg4|~2·(ýá[.¾,eÔ~¸»RP“7»¹©1«K/ÖF?K8N`8N`Ý¢~77!Àûxàøo3ýž<Žhפ;OÌÂÓ=à‡ã­»þ$IB×ýØwù°®?` ›ö÷e¢t—·ë~ôç%ØweG®K÷ñ’Ù¡p>ê䟶ãµ 0سÏq«[0e@\~ö{¦•q¿)½æï[/>¼úáúÇ/`íñM¿Ë{íñ¿5‰9T&gÕ×Oï8L-“sænçdüz ®”m`Ò°Aþi_Ÿ1d%t­,&¸]Ìàê'(%ü,™ ¡OË×Ô7zŽ7„…úLÆ0TÜý½Q±¥±y›¿¤×h˜¹žcëÛ<Îýø¾/‹NYÏbP´ÿè=ƽý±u­žRìwT5ûLžñŠÅ æÜYïqÄòNrÒ]ÓŠ¸¦Î Õõ­“UŠŽô¦¢·IT&'vÍ’ð~›&:´9y\¢sô>ªi™þ:`ÈÓ‹=Ÿø,¼hB¥³+ØúÖ% ®þ6 s·CLM£stu q[qSÁËIš‚ôŒÌGÏÂæI’`Ò'ŒÇ5qª¥st<Ó—1ÁÕÖCVÌ¢2¹ Å _ýÇ-ßue¥÷‡¯n·§âZ½| Sö†nt?¹±­ä—[èÜ}w7¤ºÍ<!n(Y ” Ë) öÚÒçqÓ¼÷üúõëAaM„ÊÒà);øB¦–1jëèqiœ¯ñÅ &„Ø-×Ú*>Xk˜8—ÜÛ1iÝ¥‡Îq}³ôT¶{╸ý2AMÓÜ#uBØÄKO“sHÛkež}Ÿ&Dúž°²â‚²ƒßn×?¼ù[Îs7›Çtï Á¢•¾MI_§’ Q­^}Þ¼Š >ôŸZ¦üÕä8~mñœÉ‚PápÕ¨TÐ Š'zÈÿVù¼¹#C:ƒÚÜž¢ÞX[ÅR):ÀÀÜ^~ƒ¿ÃÐtT±w¾P¿Ö‰¨A:ÐÞ¡ †‚TCþ7ÒßYW6=Äÿ~¢Lß̲ IDATôšÆ…W…—Åû˜‘BãÚKSö† ¢Í…˜Ågz¤{•Š@GìHåÕeP¸¦ÎøÆI.íCÜ TÝ“eߨgúËF9¶M0‘“$ sŽ~’•ú*žªÆ}F¡±V½;>­±¨FD‰ºôkoo§Iª3ØÜqß2níÆhL„cÔ{|Ö©Y‰Ç¶Â¢‰[àØãRÖù»IlŒÊDMÍÌÅ7×ùõ0˜Ú‘ª)–©ÐWÛú¶~¯F@ô€&€È ŸÔ“Þç³äm ®×Kõv÷`>†¡ª˜S‹ :âøm< :‰-—IÕÅ¥„º­âÍŽþ| CÉÈÃÓ!vùåÿHŸù‡°¥%´µ æzÁ¹’ðß>Íq ‚ VÔ‚È•8'HÝš)AÑáÒ[éTŒ_Ý,±ÀP1Ôb6¶ä™G¥ ¼©¡]fÛ,” u8ôº`Gú­ô+gs–y-šjۤػ/­úµmÒvCuÎÃõšNfܪÅC{‰+Ŭ£J-*B1ÒÛ°v «¾¸[rYw)ÏT¦ÀÕ…Z•9˜r{œ c®86ðe0#ļ>¥°™ÆcÓ¨sZViÛëZZš"¬)h•´U×V¼=3 ÿæ··ŠŸ£èöî ®oãYÿéq‚ +¸&Î9WÒZ'n(Q”½:1«÷¸O~eN2®”ê˜Î,¬+ŠC» ±-Å©6ê¶ûr./³²¼<£1]8†öãO/÷—[~h:xò+s¢Xºæóâöà1³VL<8ÇUnºò!KϺxþ¤Á÷îÝw¥Ð:Jž6¼ðÉýÞK™6¾£nü‚ㄉ‘Lj"ÿ¹ëŽŠ"Ùú·»'3ÃsŽ’1 渠¨««®9'0'ÌsÆœsÀÅ5 ¨ Hœs“ót÷÷aݧ»o÷…ó¾>ÇãÐ]UÝ]ÕuëÖïÞû»ÎA—râ6,ßs;ð­;îé;øÑç2\+‹¿ÀÕ kÏd’ òóú‚'{{LرŸÐ¨8…†‘Æ3ï‘RŸù$¥&%v €Ç¤}¿4ç½Ò ^¸wèåðÞÒÿB®°VL©oWüÜ"R¨µ‚$ípÃ!íLØ—{~(+Š{玅°¢$l'ý«8j7äþ~5ôêwø?G|¯î{?††üúÝ{ù-‰Ñ•·UhdBÛØnðçK EÊvà1¾¥Àwúau%„±Ž©Ë¬ŒË ãò* !üøJxý!¡ƒÿ[ ¿ž!åÌ›¿ôn§¾.û¯ô]MSļˆƒv®Àe选5X›Xýo¶À ÒylêUA@Жý\ ÈÁžÆ+CVLý²ªY–æSœ¹"*-ñ¨Q¨|ǤaŠêÄy íÊ[íõ1{C£ ÙleZjQ{*E}Sß&OÛs§@çCA›Q¤F­%n¥µ%R1ä}M‹|Ô7•ƒ®¾ª¼ÏcQwc(òùcaÛ®¸¤jJ|Z=ïx|Éy*†\`а+ç~-Ï{”ZëRT'ÖÛ›÷'ÈsLvóÎûš‰\“d(‹o†(EŠÀ¡ÁÇjDÐÚ¿¸¤jÝÊ·ÇëÙ÷¹¬‘‹@-cˆ± m›`{ýçGZy[uŠRÔ$íÜžJAH={?kµ\0k_Ä‚1ùvXéqèå(•¾6ŽÙô°cP¬’´ *Ò¹Ž¦:$ƒo¦KãH«?Ý“µ•|,!´*åѹÞ*çu#é\c×Ì«KV/iÿ¦_Ȭ1’¦R çu¡Ü e€Ó(¨EÿõÏ­$ ­‚ (…¡£¸pêàA—¿‹’t?¢ßù´‹ m³£W‰(t6Ž 1xó›1L=s¬0~ß䂇;'>ÞÓ„RéDv¸úÉ¥¨Ñ¡ÐðÞÆj€ü/iÿsH£ x›XÑ821¿uàÕוâ’k^'æ·¸½Ëmé `ŰwžÚ-Pl'Á±È¿~.Èàk7'^ýÿBø«¸ ®øG(ç{ðÎWu¨¯BÃuè¾ö6§™*”ª»ŸozpoE{­ …ÉaÚ9¹óà»Â¯ªYjNâZ.ŠÑ¥6Žî…µ!] îi¢5Èš;c ñÜ6ÌÙEµþ>ARþ™éïôÁ•ýºÝ‡ÉûòóO.àe#ºÿ°46‡az=‰ç~æÅ2·¢à»mý¼Äÿ–ïH¦î³üb– 'Èd¾~Ž‘”ׂ8›s_\yY1¬ºEþîaj]á@#å¦9%ú\ÚÙ~®ñǯl–ýàlι»x”ƒÉŠ‹™¯dJíÑö&:Xnµè³'™u튕†8`Ä£‡™ë3}lÙÖ: JK]»b:Ú:ÙíÅŽ[¹ U"äIZôràÏ•*´~S‚¬f¸Yqë·ÝÊkˆOoüéMN ÝKïµu²Ÿ$IXs%;ÕÇx¸`„}—Q•6–HÏ- »í:vëAEúÀm7p-Üï´—|,еöfäÄmÐøÎ>óB-k_Ä5ï‚ôWr¿Ò¨8 âàž¦¥†°QKÛtôìû,Tip9ÏÌ¡Òun€dÅ¥,L%l°¤ëš¶aJ{ § hˆJÔì¥g×§ÛÜs}¥ßG·wÊ4 ‘‡Ÿ™§·ÈZ’mŠ W^Îb‚2H’$gŸøäøèJO¿A_r:S(c*èòýÒ*¥¦­EÉ›YÖg¬ HGPŒJ,»;A«”éÒuôH d³ã3éáÙû.íL8$ŽůrškMué –özܩٷ9˜êÔT+=,rÚ“7CÁ âú—S+fxã8¡sà~Ñäòf™ˆEÜ 58)¶1dI‚{™&{Xó´‡OßëµùfNáôAÖ7*œó"»iÔ·UgŸ• öÜ)˜«Ò +.fžëgÞçúÛ*+;#¶ÔÏY/'Hõ§âöá€ôw3|;ÐèqglÞð­1yC`óÍœ+.\Ó—ÙM†Îfu/Gþs¹JKÏ(†óØÔÄU¡Îo>·Y—~?9¿µŒ¥oÕ.m.³©*/½0éÀÇMqë’¾î³c‹ CW_:Q™|}§¾{îGôËÀ;„œ‹Ž±ÃM–žå]&ß¼D£’òT¢&3øñï:çiÞPx#ó›rÛ/í‚ís·|Wî¼ù»òcCàÚ³h˜9²ÂòxsâY÷õ#¡¤Ð +÷Uˆ9»öVÍ÷žAZ:O½ø§ÏýoA48i T㤅³;Ø>ÿËIr3ìˆ<d]ˆ¡H¾!—>çd|‰5ðWŽqŠÀP„®ÅÉ—‹FÚGE\ÿÂdÒ0›A‰Ø6Å=› I>†"j‚$¡M¬‚ A­%ÎÒ©XÙ¬Á6¯{;òs–‡8F0¨˜ÃžÛùWY§Ôà’›«ü´…u’Q5m 饗³–_ÌÚ$’kòXÔ †šÕµ+0'X‚›ŽQq‚üšë•·V èýcJQÓ2’ÐŽ9·qÒR*‹Çïr>¹=‘©6îR ”3—3Íy¯¢P´CmêPëQàZ¸¯–6õš{vZ'`®Ñªdêö²OK˜4Ê83>#4õÌÔ©g¦ÊžÝ»†á h«©é\¾~[:Zqmž€ßâh@£!ºNeM›¥s Ù†|ΠɥGçxo’Pèsè*\«&Ë«j¾·âR:-ÎÛ…ÕYáQ¿”zv³—"(Nar´JÉ(]C³í*I«¾ ðÿà ¦ÁI6À7•ú›&º>Ÿd•Û9á{JäšËt*Z¢«C)5ă5W²­;7yK}æ2?'=#o[]O »beÈâ{Xó(7r>ã8ÀeRS¥JíÆó¿–ûpé:¹fLa­äb³PyT­%ê48±Ö"4Ú²†µIÕs 8tÕ@w#Š ãÀ)¨‡AÓÎØ¼ æbÁ©¤bˆ›NYÄeQêÍ8aM"¥ß0oÙçRA,‚ÎP©‰>gJƒb«ßóØÔvœ Ù9U¢ó8Nè&åµð>— Îãi¢Páw+šdÆíR5ßÚ¥Tªµ­6îËÙ†¶Úæ‚7AY‰xý|øyŸE7Ž­M8à3óÔ¹s—®&qíxž•çÜË«î8÷ð$ôs5!(–Àà™J¡]ûpjÊ–_Î\7hxÈa C '¨f=CûÌ)‰Qjð9æúÌõ:LÊ& cÈ•ZÔ˜Gy|¾Ï²@êðpdиC³½žïŸá±…Ç¢JçE¥×­¸˜Y§Ï¥×9˜êüÒ=£Ø|´k¹àYz$âeÏÂ#ª“~+…Á¡Róå¾F.ì (VÈâê© ]ú¯Öªå4'PA€ü{ÛÒ) î1qmîùy§ÒìD"a!´ª$-Ë*+ÊÙ)¯Ø«ŸÜZ÷Œoè:Ћ p_†®I)Ž(FgQI’ I’¾mÏ·¢šÿ°¸Õ©g¦’ý7¼˜®·Hòì¸Yצ ¡(¥QÐÚÄýë9LJ%I’‚ È¡Ù^@ ‚ŠÏgÒKÚíæJcø/=íõóaNgØšöõîA (…öþÐ}o¿ZA •¸…µüçÁŸmï/èúˆŸI¼ýõáÿ ˆ" ’*µ#NÆ—ˆR‹Û«öÜ)ÈLøÜ ãM%S$SoeP±‡Eu’{p€MÇTt :4U­ò÷õeú‡Â¶s-"UŠ"<[cvýž;Æ&|Æóuã#"&ºÞ–©ð±B«caÀ*o•¨+58ÛÒ€µp÷4“(‚¬fP±Ñ¯²›šà ‚º>I«gnº™ƒ+Ô¸“ŽÝŽO¯÷o—ª× ó6^6}Íé©­Gù9ëmw2ãTó94­H®)Ýs;CÛ7ýÔÃ>b¢ëþªf¹A «ÁåU¡Î—% 핆षÓâ’kŒÛ¤jw EîÝ‘’¦PáÍb…¶(¤·Y̓äãÍA7½üYûŒœ› $I•4h-N^T÷ùárykÕTž•׳9SFÛ¤DM¹ìdÆ‘,Þµ b@€k”°îÚlst.~j¡o2€kÈê¤^ãÖLVi'pÍ­¸äj]EÁÞ–‚w‘AkbI\{DPñyÕ•³Go-9û™]ÿ  l-ˆR+Dóè\Ã[÷¯ÆqÂúÙ“ûþÕcÎ캿·)ïÍAeúZaU–oŸE7zß{ü¬Ð{@¨YSÞËÍ=gGEÄD_G’_ý²OXé5õÈ܆Ì'TÒÖi•I×Oóm{QS²KP‰›X*Q³­sÐ QMŽ5€ûÛ_°ô,CÔ’6˪19}^úñÌëÿžìÚgó׫[äK=,òZö0ˆy§Àöø“âQ§ž–èX°’HÌ›„ÊéMBe·N(A†ã"Uj‚´kKŽ$‚$F£ Ô–\h$IR½ít±Îí€oy£t0M=˜U!©Bk¯ÅIZÂç=S’±*øÈ£"Û|úƒ îGŸûjbZ«Pãë ¹ô: îÏa?8Låk¢Ø£¯ï0…Á3æ ÝúnÄ»½ƒÛum|ï(u—¤Ô28¦ÎCT’æf׎:jŒ£±¾È[Ê··V~I#pm¾žm¯¡?N ×1u‡Ré•Þ3ŽÏ¹»í6J¡%$%ÜŽš4ÈÅÇwØ´µ*qK°&»T«³C‘Æf‘ÊÖÖ˜í‡  Y;Î¥ðõ—–>2žàbPYðå$8˜r´ƒ=€à‰3iØ‚v©zýÖÉn“»ÞißLÏñé ÑG-2âÑ»`±S }‹¸ô»™úÌ”à¾á:LŠ/AÝd ÛÏ-„›«üêl ô.zz¹cÓ¶¡mÀè)‹óï7H99qÁòÑNU‚|³%ìr«Â¨Œµo’S¯fåÅ(Õ¸®S $I·¦ºê³.šìžSÎ¥±u‡¥_Zä·uñØÅŠöºº> /ɽ·ýµŽ±CÑËW¯çì^;ÏÊÔgôˆù3'ˆë Oi•Òñ±k¦± mŸkd§¢øZ¾Ï&\d Ø‚â„£º žÉX¾]o7ÿYG\~Ù;f…‘ÛЕ´õ`Ê©IÜœ¸ ÑžSƨôÒOçf λ¿-˜É7QëO…îIæü×0À®ŽìåÈ_'ÊÖœJÕwûºÐi¨V¡ÆŸ0¨˜²³hŠ~Q¨q#+CVI’ð$­Þ1¯JÌÕaP 2yÚèŠkZä˜ðøS]fU³Ü•‚¡#ÖtgsÎ'±BëKA;& k€©¥QÐå^=Úà€»B¥ °4`íÉ5ÑB©:‘I£Ôjpâ5…‚>êüc(¢jhW,[=‡KÅ·å’Ó‘÷Š” A]<‚Qîj;îéã†Zâˆï¹S€!(vWÞ^Â(`š,ù~icS³§°*+;çî6éà-oÎö,øig­kx£µ(™Žaô‘w ~gXÏ•ÔØ¸Û\ ÷Ñ„V͸ñ¦J½Ú¿ôæÛªà±‰=hl]IòáÑYzþì¶ÒÔý4OÝ,T"aÁŽõáç3†<¸ɪ³pc(Úª§SY<¬¨N‚$hämÕ;Ù6J•¨™¼“\ã¸ûÌç.GKsîn;8yþâ,I‚6€‡nsعŒƒ-bÕö#ìŒ j%Lcý¹>óN¨©£q¤¯©¸Cp’¶Zœ”{Ûñ•’ß…&6±Ú+µ¤=Ɣϸ®Páe*¼ÿW  Xã–L¡Qé0(r.“BV·È›e*m¦‰.#D‹“î$ ÷¨”J'HkׯvEÚ+Eƒ“™flZå’³ŸŸœïó†¡ÊÈ;á™z¬+®—–S0d †"$@O{ݧï Ûf©ÁIá×ÛþÞ7sRÕÛN¼ŽÏÿçWA@%m¿ª5&êZy2h˜€cæ²JÞV}ûêùÄ·¦ÞÁ; JªÔè"€ÖÓ˜¼=ôÒÜ~Üj®QHÆ¡Fmïyç6‚R™|Ó •÷ôs³sŽßײjÞul[ƒzÎŽZ°ü~°*ËE±\£â$ÙÂÐ5×1Ð8ÔªE8AjŽ=.æjUrFeèvº,ñ‹Rž A)ŒnbE¬ý¢¬¹lxfMõ¿j)-¸ ®&MqIÕsª[å ΤbhóPçŠ.Ê!7K.Ù*Ri„rÍíe!ŽŠN ¯‘NCgëëÐP‚$|6U-PÆ2é¨ÔD Š"wùlês& Ã@lÄ£/Äq’„΀ûP?‹æm1¹³µ8iÏcSuQ‹XeÖ T•/ýÁAqäQÑx©Bë@¡ ¤‡œ1}Ì+.fî3Óc¦$¹ªM¬Æ{;ð=>µÝ8ô°¸öÂÒ^×  ôùIؾf¬ uÖ¬êT6àwæ¦ûýð®c›¿ Ϫƒäöw‰]"&º* ÷JÒUx¶½|â55ë›ÙõK;·ºF‚Ö&ܲ2á?œ1ØF rrb>äg^8¹o„¯ Ð@7ÉÀ¶w—ºÝTòîm…½óaÚ@ë6èÄ÷ “@1@ÑÓƒpro@í§;ÝÏ]òëñ®Ÿ]?ÆŸ ˜{ÎSµ¸Z>½ßò;þ× `§pêÆ'xô 5ž«§C«ÕâÄû&‘ræºñÎç1 ÅO=-~&¡”¾x”éB»_¦Ò^êÄ¡qAP‹ª¾[\;E¦ÂõW‡:¼ó¾Ö¾²Eæ«Ò]¡tˆ‘.cÀèÞÞÌäà QkI? †J·Lê¡ÝûZ SŸn•¨`×Ïî³öLp·â¾}›Û²÷úëÊ3Û,»ñ¦Ò\‹“ MùŒ‚$IæÎbsñÐâ¶u׾̀³µâ ÞvºÂU¡Î¿îŒÍ;^Ú Ep‚Ô¤·¯CäÔªPç3ަ£hwWIÁptý·­¯ßXN ¼¾âÍù2(ëºVñöâ… µ ´jÅ:QMΟ™§ì$¡Ð4,}sè½à*ª’´Hhl=L#XKê cèýýŠöZk¬N=ý³âSßk ”kæú;:×ÕÏ1:§n̈Ë·Uû¨e¤óYºŽžTX™!@1*ÚÉUö[¡%‚Ü éÅ©‡Bg±»=tôéT–.£Ò‘ÿªtpÕµâH óëk •–•U!¤},j³‘*µ¶~Žz¿I翯¯˜Êàk'ênáP^ ? œ ;~vo€–¯ÊtgU[êÜÝ9"V^Êr*µ³D2uÿmSÜ‹;AÓ’7¹-{¸´o@þ퇮ÿm¿§¿â×ôu™½óacätUÄõ/E}¢s\”Â[‡A É5?òXÔ‘['»%~¯Ýð MölŒ¼ðßÕÅc;`þÊíàçEhÕK‚:”Bs@)´xCåÏw |¯= C}W<¨RKZ±”Sß§îù“X>zò¹ñ¶ªNjœ ÝvÆæ-dÒ±Ð&¡ÊÈÓš7ÃPÍÎØ¼=mõýM7s[ÂÎe¤KäZ1ŸC›wåeE⻼nO{þ 'èÛnå WiðÆ×9Ͷ޶ºY‹ÚX[cò èT´˜IÃJl ÙÑ/²{=J­WJ•jÓœ*aíº«Ù™ Ñk«~8½¨§zëd€ØÄê´g™mvÆìt‹Ú0kˆmúñ'ŧ_ç4ÏYw5{xiƒ7àÒg?J­¬m•Ó 8t§¬ !îlΙ[Ñ$;sñyyUe³,³ V²dgl^ †"‰(Š`i%í‡.½(¯.¨•ôô²á­O«·MÌkéË ¢ñiõï]ÍJÿ•~Üyí l¹¶#dAÁ3bà8AÉ5Ø®ÛCË$ÊæÆú>IGí6r²Í¢Ï„a•ICP”$´JŽ 2ËljÒIS *JÔ–æ;>e<6¤óŒ6ÍôCô’Qöµ}Ãnù/¿ie®Ï| ¥Ò»©'ìûðSʽ#ýæ¬ØööÉnÂ;wîpQŒ¢Âq \õ@0Š£1»„³ ¥Òµl:¦‘©p‚Ð(Õ\s7–yŸ‰¬Û )T­RòN«”Ì;—7o˜­`zÄ9šŽ^BP@oiîÝ-ÿ=#ÈŸÇ—lºû¡ö}U³ü¼ Ÿqxb eé­î¾èCßøòtýmç4Òÿا±>ñÛ‰’û›úüa¶õ–ú̧íRÍ»ˆë_.yTtbGlÞ/Nf:/·Mvû[ì•“OíËlŒìHlmĦèqè£PÙ_\/Ö(P 5Nÿ«íÖVfuÿ¾“\Ûv$Õà{uù+·C³P‰ô]ñ DÖ\~IP‘¯7MUËÐ5òXÔß}!»’ô¾TY¿­ºß'ìØ“kØåç6mxÇ '×PƒÖ&ð»Bø8ŽC™k®dw…¢³O|ÒïÓµ ÇAZò«¿ÔÿÎæ¥d«D]ß,Tþìm«»ÂH—¡ÐjÉÈý3<úÌlÓðùã:Ø:Ù-k€›AŠÎ0Ñe슘è:È´Òö¥“-Ç…‡8~Ϋcð¤]¢öm—¨³g ±õ°æ D˜½i¢ëh_;þ& æmÒ€¡A8 –‚w4ã 9½¨gm×3é0)`Êg Ü #J /ÁÆËG;­ð±ÓõgÓ± †<úÐðÇOÐð¥R8ÍH—~CtÁp»8!¾ï IDATw+Þp¡\SºcŠÛ*w+îh‘\ºé§s=mxc-ô™¤Jí-{vÐôA6¹8AHÛ¥êyj-¹'á?K›÷üÖ™káÊË :]G®¢½V­’´mé5÷ì£!aþÿ`µH¦&…UYóœƒ×^3t°Êà>20·wÑè¸F¹Ï%xÕƒ¼”gÕ’¶CwÖ÷­œ¾á ®V;zä­[èÆ_`‹‰.£ìZ|º;¡U3Äõ…sÇìNêà笗Caè”߸xr_Ÿ£<#šJÒÒ7tï{… n¢¢­ÖÆ1‰Kª¦Ñ¹FsämÕ¦î^:,l/ÿ”q¥4ÖÎÁÙÇÔ'dJ¡ÏÞøeÜÜõg) ¶Íæcó|þi,î-ª~glÞ`*†Ž€˜ˆ‰®Yímy ×é+øgÇ…'—aþèŽ|¸óN¥é\ ëˆB¨(½¶¿)Ÿš~'¡0' \<:²Þåg·ß)ħÕH+i÷ÕãÐØðxùh§/ I`bô¿²:µ´¸¤j‡—_šß«Ô¸Ž¥+tÏt—ÃqÝ—?ìeZÙR C§þ]äï&W8l;œÍ6f«Ä-©¸JU¿ïÌ÷ÊõßðÂLÚT:_ÞZÝ £2„|»^›’W,»;KT“³>ÿÁŽ@zXdqõæíe¸FåMÓÑ+=jØ®ÝÓ<šƒw&ÙÕ¥…ÉšËtL…$®©àš¹búÛo{—Ûb[”ör%®QºZeŠç€‰{ïnè+x”Zkñ"«9°E¤RX±ê¸Lj¦1›¨j–¹”6J]H¨nVÜäµã\êÿ¬?’^Í€ !×ÿccv.cºT©õ¼ºü÷I…â’ªÙuí V»D½„M§˜ÈTÚe»¦ºk‰¬8lóßµS]z¬~ü~?ewÁÖþ·¼Ëw®„+÷SG­óÉ5”W»~ü£ºïr›©Eu’þ8AÒUSk AT¬5<ÄñýÍ·U»EyÓØz‚+§½ço¡ñjPsÁ» ޽†M/IanàPtpÔ§®6?·éÏÝr¡·F.‚1Û_éqèš³ÏÊ\us¥gé0(Å“û[LÜÿÁ!ûí¯!SSY4 yóú¥YæÍÕé—^V„àIb(ÒjkÌN­j–Ri 6—I‘LdóÚvÐ#c·! ­úå§³ÓÛ;Ζ}QC0: :rôËãó}zÁfÐþ´þÏ·À¶u»ýú>ü4xüßâ¢k°hÄLØ:Ùí5tÛ¡³soÿ%á0ôˆú¥4èô¥˜9ß$8á81ÃÐv[‡‰ð4½Þ¨Y¨ SjpAÂÆˆõØÏ×4ýyf#ââaÒ­6:»-„YþÕ-òé 5.`Ò0Mm›±1b3 yô³!½Í*ò³OüÏ„ß×ZZ£PÙ¨ÑJÐùW䨗žBeqïÊ[kÞýQ¡+¶ƒÏ¬Óv²ær¶©OÈwËù-Ž6”4–Ä)Újî¶•~\kàÜÿ­°*+ö}¿9'Óx×bîߣq ®ˆëòo’~õádzBv%©/ÏÝ„«ùÒ–Š«$IlF1êD¦®Ù¬g:µùRÙº§t mµ•|¼žùâ†=Ž1 ų+DÊÏù•ŽÍ¹/VÚΚ?mÜgcýNH­øüëv&ßôoÛ៿^8j«ÊÀÂÚþwï4ä:¼~vì6µ¨4\<¾æ-ßú·:6¥¨Í>>­~†"ü‹ÏËSç ·»ûÕvü~“HådÀ¡•Ñièüˆ‰šÝÓ:®ý£ð€o„ß¿Ëìó0öâï„ÀÄ™á0õpŠoê³›W¹nu0ô{u_e¼…îFøCÕ{Ú@ëR(·¡SÛ¥)[Q Ç h-x¸³[¸®:¹Ž„ï‡e'^†2uÍ(9qÎû7öó[³`ÑHû™¾³ÏL’4]*yv¬fäöÄ2™¬áÎú¾O–_Ȭ~tý8¥2éªj°[kýãt+'œ‚ðqaÍoÎßî:7wϘh)€‡]8Àá¥û`öÓÿÄ AÇ æóÌF_·ñ;y–ž¼§(ª³<ŽÝŽú[ƒâä<^W̉\Ô¥èÆ%U£^îiéI†Nž¼½Öùk¡€¡!VhèUÍò%)Em[¤Ô=­n‘ù ÷1!5šßçÁPÉ5ªêùŒ¤üÖí™å‚ÙmRµB©þm+×ÃëÆÆýÏú/Ár©0 %ÃCE¦|¦Š 4øŸÝº=zQYþÃû‡ ûæÜ¥M—¿[vö3þéûPL}Ç ~‹®Œj+M=Qéä%gRsïê]zÈ­çÜóS–Oœÿ|,ý§ ™Ž¶††'UÝ_Ž8 ËîZû/¾ž:¤7ÔýQ]ë‰ÎPu§è›óŠöšR ‰}míékÚ ë#ïœk)3Är­Ñ‘GÅû:µÄnÌâüËàÔÃ8 Ò6\û’¢Tãq³Ûèat 3eøøïÿ/G'“ñ_>Ro€_ÿéÀdëBàê'²¶1 _H8N Ö=µäpyô]qùÕ "IR¬QJ9RR¹Þ¶º²6±òKß*d24´ÔU8,»ûÎuôZFeZѹ†ß$§ Ðu<´ å:ý°z ‰k¨J¡êq÷Wf™ V%iã3ë´VÞ^;£³>__é§ö˜´oªRÔø¶«×û~Èsr¿¢éËs `ûñX8¿KzæRÎ?`ÝÓ˜C‹d×n=NhÕyTO²36Ïö~ü‹+ª¬~£îÏK{}ûÇUgÞhbnÿc—½}·^%iMó_+L¸{eÒ£«íz³ŽÚ6{iŸ#þaqîþ‹¯_j/K%pµÂ+>mÎògÛ']˜Ò;“PjÞð¤ Ü'ì¢ ØøÚàÊË s'¨ ™ñ|is¹Î›ÜfŽ‘Û.ß¶‚ãº'ÙòÁý–_Èd’$Ù-ü¦Jñö[ÝktŽ)‚Q»„ŸjÀÆ×f"^tê­•‚ÒIo$”i†nÉ[ý¹C¨9õèÀ<*BÄ ñFŸ¯…_òËéØAeûŸv`Ò‹0¨çwð•çÿÜRš—õçÅ5UOþðš_ÿŽgñ2£±ÎsMïTTÕð¨Œß|?GìHÚ†ÑÙ§Å"ág)Å箼¬Ð£QÐŒBcKê Glì†ësit®¡HÖR‘×oÅ=GqCÑ5B«>RüËá1T&7H’ÚéŽ@BgnEÕ¸ZQ“t`dhòáÑ?$5´U({qu©£³×£TúB£Œ@)4)®V¬ ´ê ­JÞP~!S‡Á5¦¹éVÝÃC x…«$=dm5ögN§ZõB«Nɸ²X»u²[… âs¡U}üy€åq ½—É7ßnä68ìä|ŸŒÆz:N%m-Ízt¤¾c@â³+;~Î,èK‹+EÊ^ ´ªGY÷÷vS‰Ä^>ËG; ÌìÜ£è<#ÉîÅÁ»0 mI=ýólŒJ¯oÊ}qxÑHûVQMÎ@PMþãý½ç‡­í¯g×ûù¡Yž ­ºmh›“|xt·Ѷ)îB¾ï¶µrDO‹ë…™G¨:zÛÌ{†N2*´ÂÐ9«d×+Þ^ôcÙehd‚Q ÷Àµ´*éË—;\ɸ²xý“‹;zaÚö.B«¶…ãOŠ9}ÝXa0e­ßâè1áç3GnO\>>òýÒ°sÎ+6†Ð=ÉkC÷$/^rö³%@ÏyÝ]C7oó™yjΪ1NØõ}n $ŠÜÊêZQä O‰÷´c!¶ƒl¹=Ñ«‹‹R«’á ]“XB£ô¸ô¢Üè~D¿—•ÁÛx–ž÷ÛË>Ùø‡Å¹zX¤§gß§ÆÖËîܸô^puÉ­„è·òQuàŒˆ¯&@·ðó}f¨Ë˜MÛ¼gœüqÜÞä;H—@ ¥2ºUÚ‚‡;ÒtøRQõ—ÅþKcíÞ%|*¬ÊZòâ~lïWgÝxSi£Qˆ_ºxÇ Æ´)†JKÞoÛºyí³ÌÆ`Gÿ ¢­šZóùÉ)C—±ûÏÆé÷YxùLIú‹u¯oŸI|ÿñAÈ‘GE:=çž,ÌI?&¬É>{óò½áÛÞ™I’ŠBäÝÂ) ™OÎ7dÅ'8Z¾€FA–@MÙ퀶IÕÛã’ª=¼zn‚û·~ËÒ¤aЙ°ˆ?`‰ÚÁEv2¾dК+ÙS6ÝÈùùØãâ¾T†äeþÆ*}õU…ûÙge#‚†]‡7Ÿ¢~)uØt#gÊ¡‡ESn¼©40<Ò?®€/Bó±yùüó‘GE“n¼©ìàæ½>¾]ø‡ƒci=>·9¼þÒPT'ö,o”x¾/hõ}‘Õè 0të»Ýº:Œ‰T*e>‹AI¡1¤9`äöÄ-ÈcQ[™­$´ê¡qÉ5‡žïP§kÛs?kvÙYq3…ÁŽÏ¸²¸öë÷ÿã„"µ\\ª•‹ÖØö¤§UI¬<¦tmå \ƒ¨bƒû/Ý¥éè7¤ž™zóÝÞÁ·iTLDcó¥,=‹¼Ìkaçu˜Ô&c[Ïe:Fvãf¯²Ð1q õòô²ÏÂ뫨,]?ò+³öä99>ÔZ‚‰«z+¶]l;pÞ›þ³—«b&ŠR!`Ù]]q}áÐ+ƯÇ0T¾é§UiçgoJ¡JÜÔ#põ“Sž“¬Ÿv$Õ@£sµ*)+öî£+ ȸ¼ðNò¡à×j-Q¸~ÉÔÐ=õYx}-®Q9•òoÁ&tÖU•´}¶Ó«£gÿäîlÎ-ù^¹)‡RŒ®Ýu¼P‹ÑZòþŠ÷ôãóýœô˳ççüeÙ¤@Ë_2±Ü¸¾ªdêÉù>uËî®’5•]bðͤÍy¯÷ ½¦ÁI^{Ù§-âºü#~KbŽâårŒJ]ýêtàÊû,ÿ¥±}ÚËRqÍ\óåmÕ{®¾(öpŸ°k]ZFN¤´¹¢ˆÊÖ›¡’´LËÔ#ë3ïPêæÔÕT-iÎ}Àgæ©Qâºü5ºV^£j?Ý=×à ['hÎ!ëÓXü9•®•·”_ÈKº§ûŸ€Ý‹ÊïzŒz|qœÐ×£2¸— ã÷gZï×çÿ¸bþäZAcP*Ý kÇ:'xyû¤jUR& {Íà™¬Ó1¶Wž0})ß¶çä‚Z‰§´¡hfä†ù܆Nàš¹ÄaJÆ=K_ k*7X8eÔO&MÕsè{8ÔÏ\j™ÿðåG?µT0ß-èDz֪‰ÞÓŽ1˜4Œ$3ÓgýjeÀ¼$‘køŸËÆOIüËX€¨_J=ÃÎe¼K+iÙ.UÇ”7É¢³*„/×\ÉN~—Ûìâæ³:ñÖÎØ¼+.f~x_Øö®ë~GÍÈ,|¨i•ßÌ«E¿Ém‰Ú—Ïèp.½(Ÿ•Pš[/PÆ0iXtV¹ðVb~kʦ9g<*b <÷§Ïø6·ÅëEVÓ±£K’vß)üøKzëœ*Ñ'¨2aË#]ÆÜ—;Ô%lëßhij¨Á5 Ç ý¶ú²I ©hÇãÍA5·Öø¤ÐYgÛêËúÞÿPÃ{qtú!=»ÞKè\£M9/®‚LÒµöž6öÇŸêASõÒ¹f®Q:»AÇØaŠÑÐV‰ÚSÜPä k.$97õìì}ǀфV݇Î5¼¡‘ C>ç4ŽÇÌ…dé[QZн¨L^ôŠõÛ³‚Ö&LIÜ7ìW}¿é0á×ø—<1KßzÅ?¾óîi2×è–¸¾`¬´½ñ¶V)}–°­ÝWãFRè:T­Jš'ªÍsÿC ÷·kŠQxר [$\ódkɇvRrêÓËÛWìs5raîð&‘(…–¾ÁZÇÓëÀé$…®ƒ’$¹w6£*q1ØÃè{õ ƒ+m/O¿Darz~N|úÞeÌ&nG|6†P˜œF­B2Õã§H&À¹%½Tû£nÎx»¯—[1ŠQêàoD>_Zð«¹ï˜)øöîé/¾³Ï|ÓÉM{;I#5Ó9‹ÓGíep÷ +3ž¼ýž1°àyK¹Yxd4 @)j.o­Žœt0ÅP\—¿;ïáž%é—w¹ìyUòõñaÖg<>+k.wfèšprâ6 còÍ•EÅÛ‹$k8Q«’Ùñ2ù€Qno#‡¿v ÙÐK«”MôóžVðpçI‡Þ#G¹yõŽÚ9Õ#†ÂàÜC© €¤¡è„V!Á5rÑBŸ€Á ²cV÷—µU#•ï.ÓoykÍ2°)I‰šü3Kßò”¬¥ª^ÒX‚ýÛÐÓŸ W€¶ßò;ýÔÒ¶•´Ô9dƒBÐà@cñíwŸ¼itíégŠQP N" F†ŸÏP:ÀÍP*o­’2xÆàcÇžã-~‡YOïÝÈ^±ë=ÏÊk~ØÔ‘ñòÖ«º²–ò¥tžÑÆE#í»žï¥œpYFU­˜:ôà´s•ØF¶›[‹’IÖ±EÕ¤™>+¢]ªñ«n‘»ï¹oÓO=~ÈNß Z¾}/±°ÒÞ¯AàÆ›Ê~饂d NÔûÚóg©%ôw3ØZÜþSm«¼_LbuÊ£ÔÚ~¡~y†Ê/½(¶KÕR•ç$àÕ-²é»nbP19E4 ”N•1ÁwN®qLÈl¼hÀ¡•Oh=ÆÃF·(6±zï³ÌÆ `ÆgÒ@ñgc°:ÔéÁŽØ<_•ïceÀ:3s°õj;Ž‚ÿ²Â¸ºlšüª÷?ÖÙat[>Ÿß­á(„ 镹°^ ¤éqè"¸×qœ ua§ÉE[qœÑéüÜ=Ñ íî.R™t°¨ÉñãÃPMNÀÀö„Aõõ ]è½zƒÇ Ì~àœÈ¦ÜçW?y|xôM¸‰ãŠa(°síLØzðœÜ»Â7vD¨ä=ÜóÌ6pê†ê1^ŸX<íåiÈJKAÀ*` ]-Ôå?Þ¿ÙmÜ¿QwîÀ°îЪi©Åí PZµ£¤¾0oìÚë½_^Ý6÷Ìù‹CÆù[¼¶ ˜²A»S—Bܵ“0if8$ ‚ˆ­ YÑ—Ã{WÍÄ;x…®C=zí|ßÁ#HÀ’›+pœØníÿê¼ÌZCP¬>ïÞÖÌùQé»Þ>¾1L-ðôìz‘(…¦\0yäšcQç÷rÍ\SÀËkê‘!Ù ê³É^/Ù@Ä_‚NçâÞÀû£¡±8NÜï·ìöæª1[†n}GÇ0týÐ%ð4½Ûx4v2¡Q=|»o„ÃP"xgRAaâ-„ĵ6ï?egóíz·*>û–7JÚ†ÏØhVúüäS¥¸)D%nQ: _úA1L«’aöü®ˆ)£³±w{NØ÷a/7âÕxQmîTŒJwÃÕrò?­þn Ò*¥ù©>ã1M-h© N»ž½?ªg׫ØÑ§ÿôÅ£j*ÖQ•Ϧ*;ÛACA¡+¾ÃÐö77v§±õˆks¯»xû0«$I;”ÊP~³ “$B¡1eS‚,›˜|³,Šò»?dÑHûs=æ ÓÕIÆyT´À«×æï¾4W׆?…­Æ©Å피lB_‹+Æ8]¿Þ»eñ(‡…®aU*Uhyos[w”ÔKØ.Ìf·—Ç¢.§Ó°:äî‡Ú6ËÞ3ÍÝíÀLO.½I‡A)Á0Tó¹L°@­!(zÚ%Ý"€Éý­6zÛê."HrG\rµ¸¬èýÕ’ó[L×\ýr®Y¬ÞhÆgnÚ:©G¸ G0cu…Z.lÉ«Më4xÐÚ$*FaãÌ‹ ²Z(vƒ›L¾ù`ŒÎ~ìØô²ƒ|²Kø‘$ ó'ôï:Gþ}ü›Øß³ðbÚ˜¯·Œ& \¯ 7sch°äf?c{G]+Ÿw;göÑ|U§;–xëÁkðìQL·ðë¼^Cçð,½§ ´Îñ1ðîûî°uLœ|s›~uÔwðÛ%®Ëwñ™uzŽl I\)nê³dßíc®c·nÖ(DQ\ ·­yÙieÕº#ê^˜ÏÌSë)L®ÇÔyØÊKYA“f†C£@JZël´*9‘_Xæ‚ãÝwö?ÇМoãã1o¸ˆmdw¸­,e™çO»1ø¦K*Mä­¤;\£\£2ë9ïbŸÄ„Û#¨,ÝäÁ?…ÉåmÕZ¥~UdaÝ3xSCÖ/¼€ew÷ ªÅÕŠ"ÿÅ×&{NÜ5WÒX‚I‹ívÜÊíÿW&7¼3ɳk S¢&oÕ³éù¬øÅÙiÝs™$ ¡]Iâj¸†²;™ìð8£1Q@qÚùY2B«ŽdÚ ^tpÇÔù4€ž]o{&ßL]ü<ªoѳÊÞ\Xôô GÇü£!€ › Y EHA IÐ*ÅäÁùúÅ¿žêÇ1q\•÷ìÌò çO«e‚¹ žïjÁUÿ™?r'/éfÅýG¬“ð‹3/ÉIy_õ!&À®G¯h£–¨e ¬(ï?"B«îÖFœF­œ€bT¿1'L½~£íáâõñøøïŒÙ#Vhé“ö¡:‹‰kT*èŒE}œðj ŠÑ†â¸F $k¦wĤB¿•|OÆ—ú>‰œ‡ XˆJÜ4^ÚX‚#(–'o­ôë²EýRêv.À$ ¢³s0Ae†ÈöÊŒo&çºñÎ×,ô™ÇT)mn=_â÷G/]Vr že4®“*µ®Æ<úÅaÞ&¥MQ%ó†ÛEph—@ªÔö¾•Xí0tùì*5.%HÀª[䯶Æìu<6M†a¨œÇ¢,v³ä^*µ8@m«bÆÓôz€s; ¸ôK= âNª"íoª'H™J+—Ûì›TóC‘#.mÈΟÝöcÚ½µÃ0TäãíÕÖPµÙ?,.a\äû•áZåÈãñ%C÷k’E=ç]¼êwF—Çý¡Ÿ·}$À‡—ç!hhÈ7þˆî&þ‘ëãì³2‹ùQéa6æêš\ÝŶü õ0ƒo©cìpVÙ]r„Î3ZHÕÑñòìqq°§1pñyùïÚìO»`dèÏpüI1ÈìŸ;ý°úF×ñÓ³ëµ`Md‡uR¥ÆÎ5|$Áãê ‰Cõ…Mq IDATæÐÙzÍÐ#Œ°ô,sP í…Î’sL—¾´àuúå%9FnƒgH›J_kd‚§f,¹ÌÐ5ªl’æá8ÁøXØj}åe%E%iIVË„‹ÔrA•ÉS“NãäœI(eŒ ¾‡Ðª 2¹`í÷ãÇæùÎßu(*OP–ºÒØmð +磃]œ{›ßËAO¤UJ+Ä Åcuy\'3Îèçoœ õ‹¦öš³1ªÈÚÎ9hxphÏq³V›½ÆIW‡V÷W'oÕ—·«{ŒÛ¶á7-¿¾§UߟÏvjÁr*“'Ÿ7ÜŽ€'âºü9~tq¨Èyß“mdŸÔÇ£€Ð¨’ÔÒVgŦ¼:5ÿßÔ.^ÒTªÓsæ‰Õ†΋J'W?y  –¶+@Y™tU‰ (E-©ªM½#‹yôzQð®äñ¹w·}(¬þ2ÄÀ9¨ ½ä£ñÚ}—wâÓný7¼˜Û)ôZP MܹnEÅ1éÇD1ŠVÚ\ÖÐRøn¤¢½Æ òÝ¥µb…V¡’¶Ù>xô„QÑ$5±wvû· Aâ5KÏÒ¯¼Q²lø¶wWŒzgä„9ÁO·奞™úŠgåùìUìñ8ÿð;‘¾sÎ=l­ü¢UJ¡½<=EÞZé>÷Tú.çàµ5Ž}Ô(…6,tOòCçþ¼ž3Oì÷}&ƒÃã{ܽ3õpŠ]þ?¢skòï—#(‰«äÞÓŽ]î³èÆþ“§/nm“¨ÅM' í²<®‰zåƒJ¼OÕâùZ±{šÇº–œÆ6±Ú¬ªE¾õiz=·¬QöÍKÛ;N't[Ī Zœ”1i”D€–¦T06ëŸ?nìÀ¢¦ºï¤SQÐh c E|µÚn*t¤Kk¢QÐçËG;uÇAÓ©ØÃ~¦/¾Œêiòš‚!¤@ªvKøÜ˜qþײY ·Lh÷2SsßqÌÒÅ‚ë“Xý”‚!è8sŸS=^w%åé¢/¸Ö{÷ð@ïat®a³‘.c׺ñ.Ó`ÝòÇÑ«ý¯÷÷êadéÄ2ø?öÞ2<Šu[%íÝéî¸7Hˆ4‚»Î‰{p¸{ ¸w'‚k$âîîÚn%çG„ sµ×½{¯uî=õ<ý$]ý•ßw¼Ãļjчþûƒ<’º÷4MÃðNm@µ×Vý­¬»šÂþZsëKÔÛ­"+wCŸ ãsü–ÝËßr#UÜ2îľõ¹»_iû€Í ް?‚ AL{ZÂ¥ágvRäd^†YýíèKo f„ÜN¯{ø¥ÔÍ£sS½æ’aNôÆk)k….=A“Ä*}»NC?^0iVS,ˆQôÆ_DZVÝ|Þœ…a(½Ú_õÊÐÔâ:†¡ªæ¢yIì™w)B{(l¡Ý‡ùH¸¼è٥ÛcGŽ™Àf ! ¦~ìßÁhÀŠ‹Iªû1e£mMx„Cù£Ï¥_n½Ž¿8?I.ÍÓ|91ñKѧ«/âÎÍúìÎKU¯é¬iß{Zo™ó²šœ¯–íÿ}s»èÌͧÝërcžT¦ódY#ŠrÓ.¿N¬dÝ4+ÞeÈÊI õõ/>FE†FÇ¥ÞŒ>:ú¸˜Ç(«–hºº[ë9v´Nw±Ô›¬#){Sþ?dñüúñ;NoæRZ_ðm—e—qJ›€ ZÏ¢ýµ†mí»ùC Š1k²¢z‡¥Í¼{xñY¡•{å„i³Ó<&PÀŸ3F÷›q`†§àÝ…5ÅI(pŽ`¿¾€%x¹-0¯ÓŸkU$=]däÚSûêú¯ †wÜ6$8ÊIJóèm4MúݵÆgÖ9& ÈFYE¦£ÇÄãqŸ—þâä­Îó®ÊfÎSbonš¾!Gdãuµ6ûã÷þªÜÏáïœ,EéC·GuÕ)·+ª †O>ø¥ƒ¹×°S„V!î¹öÅæ×IUâÀõoÃHÒØÌsÈÑNý§ ŠêBž™÷pyiü³½‡Â ÓfMÙûÎ`É´ÿ[e÷1ñ;»ô_{F5Mü‡e£W¼V›ñ¾§ZR©ÕHk ôºªŸ¿ëÄ<Ÿ²gÑ/`P·@’ßuتmòª\¡•G‘- 6ô÷2Uî ÏàÞzøâ@mö'ÛÀë¢ö Šé8~ïÅVß?8§bȼ}»tÊ/›®£—¾ØâŸç3íèIYúHA2&-Z2ŽÀmLÈŒ†üoãØ"SÅä™ g—7¨;¿¸~h¬º±¼Ü²ëø†1ƒrŽïßú'¡––[tU=aXà䂯_GýÇ‹‡:Nl¹°+o c²ëR”’ál.X¼nŒë±§âF×Ë´ásØ­ìÝÑäÀ©çyqy u‹;ôïä¨ý;”~ÈíôšÄ‚FŸƒÏr—Ïò¢æŒsQª‰û .¾ŽâÉK†9]ÿÕŸ· :ú¬ƒc9ë —ÈU„1G#!+ÇÂÖšp?Ìh¯¹}ÉÆN/‡SÏóô>gÔ¦ (biiÀÑV+ÙÄ;—wÚ°û ÀÚå?‘ßœ…}f·~ïº8\deiÑY¥%½HŠæ4ÖU¿ˆ>:ºõºâ?ßïîcÛZvØ€mQœÌùßNÌó©þÐ\?5&Íkª[öšv¬Z+«ëžvoK.IR¿e÷>Š ŒŸm ˜Ùv›×R0 ŽGYÊš‰£,6Ëlk“wMíH5»ö¢‘Å…\FÁŽInó1 m¥ä*QŸå·-VN HãgE†îZ ‹×ýsYeRÎèå'ŽÓ¤®}¯þCFãZvh¦'}øQ¶‚ÀIX»d˜SþêKIÃ…\Æe}ÓaN»†#Or.W7j²œ-;åj‚+WWMÅìð ¾¶7¢Òj:Äd×írÍ`Ÿ»ájJÿˆWïw%^YÜ$)GÇ~óSÄv¾þz¦ž:•ÌñãaKV\Ht~ÿéëgœÉsÕ7µr¯.Î ùzfVï…g_Ý9›øøèX—ñ`ê¡/9½;¿ŸÞÇv6@Èíô3þÜw©5eö¦×nD«¬¸%ôñŠ \-Þ#ºXDï½—eŒãÊgã¹ó9hŸÇWøÜøPÌzY'ÕN•«‰ÙÅ5J/—ñŒ¢aë©çy»Ç °ÓÁô¦mQ‚¤Õ°ÃÂæ%4®K+Ù<¾Ã)#÷|ÀÜVù-9›àó-½x¿FG&°XfUÄ–%0X­ÅÓm•À¤ƒ_ŒêŠÓî3Ü]ÿN`Z”ßÏñ CUj-ÙôžÏGV^LrÜä‘sçòr í–"Ye²À‰fj½\ûÑTÄ*Qèdfüy   9õ"o¤>Ÿ¹c²û†]?õùF ÔŒi®Rn«üÊJžƒJQ .?nôþÅXè9à6„,mÏ7uªÕ)ž€o_ãŠC$†"üʵT¡!ÔÍý`XÍ4Sô“oå¸FK‚(µ$88+¯RŽB3›‚€IQµ²Â@ДljPh“]Ü;fλ:qÝÕ”.4M«Qà ÌS=:;;¨Ïlýú5Glñ–Ô©¤½MÓ³Lx³º/º9‰¥gä‹1Ùdyƒªž (îŒÐXLKP­Ig ÁæÝ—^–ïÓµsTÄea’z¹Ö•ÏÆQ §(:µ©Áf ö‰ù+˜8&íïeú-³T:ú}JM )o˜Çt—)u3øÆG>“VkÉå§žç­’«‰L#n×'ß*¶×J5õ2í¼®†åJ ¹6¥HBd•É»¨´„ƒVIû(Õľ”ÂÆË®–zñ…ÕJïÌ2Ù4AÄ4MÛ8™ þTjÉQ*-ÙÑDÄ–ø¹V”Ö*÷p˜X»·)Õ:ðîåf„Üù\jzñuAyA•|ÞáGÙ½Fv±X=ÈÇlƒJûa¡÷ŒÓn ß¾ǪåY ®pwüÅùÒGU?MuU-¥›™”Ÿ6àÀ ÏëfÜŠ*FÆù·£—LG.?ÿß*À䤄/μý. òÃrkkS€~r¿ñ¿E œZ~Š*‹ÿbÒv›ßmÿ%õ+ÌÑX»ýîÁ/cÇo›ö“Ô?¯pójrfôµ½"æ3¯*Ô$¤•H/qY˜÷ÏÙVW£EÑèçÌZ€’‚‡¿¤½•Þp-AÉÍÅìÊ#œ~&¥•jò·Ø…7àG¯sM@ÔÎqÁ;¬´2âvöko©PhT\ݨý¦”FxÝÕI @~•bï­¨â™3ûÙÑoŸøí8ù,—õ%){—»“åãGý—ßYÛýL@GË…½Ý[IúoùÀ¾#*$`í«c«/%™T4¨FPZ[Àa̹¾ûXDŽÀŽ[é6}78°æe0IR¶÷ =Íí@Ó@UÔ«–\}WÈ=í ¼M©Fåj¢|91Ï眳…`ŠˆÏX¯Ça¨p¥Éq·V½L¨Ôk±Dß§T›?‰-ç\}W8øUb¥#@LV/ücɘ˜¬:‘…ÕÀVå7h[¤ðVTñ_áK¸=4•…n×>nÁHï³f¨œÒÓ:v¨¯¼Nªê¿x¨c‘—è@_“Š¢‘¦¹¦õÆ#M4 ¡¾æ’¡¾æ!½MKI’bäW*¢Fvµ¸4ª«…`œŸ« ??APÓ!Ì’›²¿8¾¦;‘Z,‘ZÚµ¯ÃØüLUC™/ߨÖôÁ—r2æë·ÓLŸËaÇ#ƒnÁ¥€¦¸F9hÃÕ”Áai_e*BïÛÙ™”±ˆíhcÂûJÔ.©Š KëTïûz˜¤´MLMïcÃaáL=£@£#¯10ÄVGRŸÇù·+¬’¨«p íI’ôU…†8¡%¨È™V\Ù ÞÇaa)óÚ‘(u’ÊFuKCn‰RK¾oPèæªu¤Ä@µ\GR7¥*béÈbÞÕ÷EÃs+äãQv=ÛTÌ­•iêÄ<†V©%Û õ5ÿXV§ZHÑpŸÏÁwÒ4D•7¨Ëó«â·)Õ•S{YÓ Ý0&މ(šN·7zPceÑh[p‰olÓØ©ë`ž‘­Q[¹rõ£|¿ýú–üµ°`Ý‘i0ο ÿ”òàÙþ…â¬cÿ æwÑ/elÓ—ówÔÛ¿T3¸unýl¯‘¿Œ Ûrù_ lZrU¿”†<üZÑ[¥!-ËÔëp å mΡ‡«aƧ̺:Š«âeoxleû]ÁÄ~^ ¾Ý÷CqÒŒÏÁó8,,ÿ¿Úÿ4ävº‡‡­¨f¨¯y9†¡ºW‰•iõê¶&¼ƒ…ÕŠyC:™ý›~Š"$¬™ýì.‡¥yf—Ë—¾N®Þ~äqvbïANq¿;ÞÍ÷ùí\¡IV™¬õ†…Lq'[¬˜¡Û£üHо"Qh÷«êK;ÇdÐa$IµëSïFhThý>fÔjD<&½àTÜè×ÉUÁ|6~º¡¬pSϵ/¼`hœ 0~_tÈý™ž¡øY^AѺë2m!IR‡6^O¥UZäjbãEIö¦ü/Í|‘PÙ b_|]¸G¦ÒT)LPVÆdÕy^ÿPÜ7¡ ñ‚·èâ–©Ýãò¬ cËÔ•¯«>—7¨*õùÌÏ'ŸåN5×gk «•KꤚÉ…¥\Ml:‘°hˆcÆáGÙ!¥µª m¡\MìÙz# Ï)—½½ò¶ÐûmJõz©’è8¤“Yáß=·9ì)ùìM%µª­ŠŒ!)+U•D}7*£–”)uC@ò×Ϋ¡LNã·óó@?š" icrÑ®NÖ³úÛ&I õ¿«¿¿«Áð×±¹¤Z^µwà¡Q;?öšFølœjNx1 õX1‹‡8Œ[~!iv~•âÕ™yÓæ °¿vða#x’».èèWËè½îJ²¾ƒ?wzo›¤EXR«Ô ¹ŒOÛ&t…„gh ¥c`(Éçà~í k®‰xLÉéyî&fxçSɯ’ªL ²UŸ*’~Q#ÕœÞ6ÑMr;ýfT36­XB rV¢ÔíØäQY{¥›‹!}çS‰E€q,"ç„JK¯å²<7ã*8¸NÙÇ¿©)ŠVœ^ÐIål‘õ C‘ Cûy˜¨6¾Ý™ÁÖG‡NNÀ0ôËìãßœYHŒ5ø¬/ä1&T6¨#žlò/œu,Ö¬F¢Y°l¸Ó©žîÆe³ŽÅöÈ)“ΦH]†‡½ñÙ]s½ëÇíÉÕDo3}vjF~…†"´+x"£¯ƒ#Fïþ<²A¡c*b¯»¾¢k±}Ÿù¼v&B ÏZßçK31ðà÷¢Ö‘Ðò«%ø%r!Œèb™ÝÃÅ`+Ž!´L©ãkÚp|~;\,õ$&BÖg’¢-AM=‘3 í>|»ï‡SÏóVÕJ5`"d¿Y>Ü)»-·ÅýÝñ[¥LEú˜^» e}?OSzR`;ˆÏÈf31`âhf—œúÙªÝ0Æu£©˜ýQ¥!ÍŠk”§?Ê6HO>úÃñµ…zb=íj)øÅ•¿SÊjgÄØP[ôaWŸÖvÎ7u*© ° S£—€ÖÃF4öÙ–€>7Wv­UjÈYÝÜ'›ü¸vðHSÖ—’$Åþ¡ü/­F_¢Ô±'ôm¿déy@л Õ¥âÅg]S;R}=LÂ(ÒߥÖ|ºSölWx†WSì¯v¬T¥óXû§«×¦±®#:«¨ô穽mn›ˆX/²Êd‹\-õ¶ªu”=˜Ð4ýp¨¯™»µpAÒ6Ye2,¥Pj_/ÓŽ47àŽ™âÞYÀÁ¿åVÈ·Ÿy‘×¾²A=wõÎ{§{tó˜×µýlþ ‡á/«®)5d$ŠüãwÝ–ÜCü\ ¯Ñ4­`3P¼“£~¾—x¬JCêYr© µN^g¸:bS¯ o‚˜<Ž29]þØþzãá3×?ŽÛýWïC,x’ûqÅ€Ð(Üz,´©¦®a'MS°úRrÿS/òD8†›‰É1 U™íuÄXÈz—×Üì5蚎 ààÞ<Þ3¥HòîÈ“œ[ÍV³˜ÃÄÜ}ÄÉ…’¿™ý;Q~ír\-µ¦"öΉæsN¹¼Eg§i𖫉º¢j%@R´’‰£ŠNúTµT#f`ˆàuÄPèæbH0p„Öè(Qf©ÌL®"8g^ä‰\§´îÅÄØ®¦„30ô (š•R$Á,}RäUyú-¸vqÒ˜N}Ü›(ùuääȈ»2Þß°$I Ë)“.H ߈ ÐŒ ™ûe;Eêê$%)b¾%<Ø}7ƒ«ÐCŠÓ>ÝÎ)“n!Ôò[ÊÚ"½êì/'{,t´0/cnuvŒSRÌ›;$I œ&}{ÿ(,1%Ëëïp€ÿÑK~ÖÕÖÿûz˜%©ïŒtsŸ˜.ÇaIÀÌ~vçíLxÛ8Ú¶Û$tï}š‰¶˜µuR­~f©,tÇ­ô?óôŸÅUˆw…gŒËkØl*fÇyÚŠvaJ´–¨p)E˜(¨ˆÏlÝoô‡¹m ,‚¢ñ…vE蓜)$I H’â¾M©×(ýEH”:C¿ë“Ð'9 8†€ŽhŠ~øö>„sE·µEdP_‡iFÎGÉèmz€oâ8#íëk[iy†9“#œ$›§·‰¦È¤N#ìäj9gñ7ç”$L´VPMã(Òzo•²ŠÃÄ?6fM\^ÃÊãÚ/²5ámÌ(•Ø÷ ËYGÒ"+n.IÑ€¡IR´¼¹œZ®"Zq—Gžä ©hP¯ço5nÝ×í@©µ¤ì;z5 ãÉlV€†&VÊÀP™ˆ•¥#éÞ}‡<ð%Î!·Ó…@±hþ±¹Þ£’•].ßÐÊ¥ä2±Q&ö~ñPÇRa€£ˆ®^®Ežlò¿Ï7qR5–Û§Æ}z³ëTøöŠ6úM$ -‚a(IÚ“ƒ£¦iÐúÌEÕŠ©j5ÙΔ߽e²Í,•ºí½ŸåÞ¡0hÀ£ìÄâå+Ι„¼ç o ÎðXxJ'G}Ùóø ‰Rgd®Ï/ølÜ¢N®Åz›$a(!W¨\M·¢Jö‡¥QRá¤ÇÁ÷œ{™ŸœZ,Qq˜XàþÙïöÝÏ,®“j-ÌôÙ¡K†9‘§žç-RhÈwKÎ&˜ ¹¸4± Q»úç¹w>—:€SA•Üìü«‚Ý2ñàÔó<åì~¶—V_NîUÝ] ~L¯Á#¾U8×Ë4ŽL5€ÜØ3Ó¯÷ßòá©´¾ºMhï>u;—¦éóÎCV¶ÊŠ3¹-®Æàt#´J“É” ô6ÍMúPóþy{‘µÂSÕ— žTî1é >K`¤šœБ”ä°0ªyÿ¡àãÿ8XÄgè1}lMx™þŒîxÛ‰Ÿ›ŠÙ\!—añ­ùÙ çßNa Ç\"à2"Q©°µÿj’`á`‡H_±‹µ÷<G³5ZRÇea·v•Ú ‡,æTñæéð¥F0pÔÞÙBßÙIÿN7ƒ;í­ôrx,ÌÒL̲ÿù\7ï0¾¯‡ñ2ñM­%Q…†déqƒ¼L¦ïò¸½r¤3­%(”ËÆLlMxÅôïúµ7¼koÊÏä³q›¹˜7Ðþ»µp–—qßH•bkÂKpðVÀìí5~ù†Úxæ]Ä®ð c€ÙǿΠàeâ\ZV6B#©Žx¼Á/W®ÒÚS$€r Úa4E‡‰éí Ï0yø¥TŸÐ(æ—¤|8rp†G}µD­ßÜóÓr[µŠzõÌïÚ#êfgÊ ™+Ø"ó.@Ó WK=<*­†wñuÁ…»X»¯ IDATs¤èz!Qø8¶|>MÓ…{§{ÜUhHŠ*à0ÈfH¢¢kZZ‡¡‰¡Mß1Ñ¡¢“« ÚLÄVâj…":Ç» ³£¾:±™˜Ö×A|ÃDÈõ÷0Ù¹aŒk¯yíÓ›]2tZ‚Ò5ËÑ܉fâ @Ð4h>ììM«µ¤Aª»LERô/]ð¦nìñ= úkc¢y!C~+ÃObËYeuªž ßó9xyE½z­±ˆ­°0àˆæ°k…-ÅæÔÏêîlPjiÀq!(zŒ)?(£T6ïCZ­ƒ¿ÖÑœP#Ñtò¶—˜N·¢ŠÿìæbàÝÉ^ü¨¢^µàÉ·r‹fY|è먾¼A]ckÂ[m"b-7°Íêol…†¼ê`Æ?’W©À…\ƱEƒ®Lléa# E”Á;L~_iÍcᆽÝc¿f×Ú1ÙýuGáV¥†p¹ó¹ô_}ûÎŽúÅ5c£B'ò±wv4|«lPÏëö×ñ¾û™Ü—ÛbBÇ<‘VdÍâˆÌ)ŠÆCQ oy‡uÍ÷Aq&M‰ëK3±æj3:÷•6% „F©m.ßA) oÛÑï— ðÿH °¤ð XÙ˜æÀ?Í+º`ñç,’¤zÖ˵­¾Ø¨cSAyôZðéÖ®f‘$ŹUü­4mKµú ~•åÅ`jÞvø[ø}àîýPœ»¼|íÀáêF5×@ÀD1 •€˜ÈEÐÅ?ÑBÛòžŸ÷—‘ÒDFûâa?0ØáÜiû{bì6¨¯‚©˜£8ÿ*ùùˆ¤‹O>g§u]tëKv©7ÓçÞ•X•mhlšYW[³{XÈÇé ^£¡)ƒ¹'ãFEŸt¦Ç’pyEuííTúÕʈ;›"‰÷s×Û#v~úÀf`ù2ï‘;kåÅ$ÎÇøl…kGßb>cG\RfULFÕ==>§„É!@ÓÖ˵[+ÓpHоtôë…¬2™?”¬éü~gxÆ…5Ê¡Ûn¦ÞN,hÔêHZ¡Ñ‘KnEŸJ+–ØÝ?³Túô~tY×:¹–¯ÇeŒ­•j®¼+ôSh—í„C3K¥q M.­WÝK+Í,•1\, *«LÞ«Q¡ã|H«™—×0qÇ­ôH ÎÍZ™¦KV™ÌÝÖ„71&«îÚã¯åÝåjÂÀ€3€¤èT™’h¡ˆé•·…OT²£Ž 8ïøèkÙ»ÄüÆqŵJ±¹˜ãû6¹êEïŽ&­rqeǧÖg±kñÅ_Q"~Y—»<}Í5¿{ÞKšÿ^}WˆLéeó QDNæpt™óž·I¸ýc€»?à#SNÂõÓóaá`‡y§šVÿPÓçÔ©S7²Ÿº°îû¾)xÜü-š ¥mßÁû7]aT?»¶Ün?󼵂»=& ¾~¿™~äëñ/ïžßØv(‚á1 %=':öðêÞ‚®~ßSï‹'÷ƒÐk¯~»ÿÔ„àæµâ·¿ÕÕă‘÷o³Ä?/‡@ÐÂÉ sÃÁæ7}Pþ¦d _q1©#Ÿ›e–Ê¢ï¬í^OÓ4œ~‘ϯ¨Wu‹ÎªKz¹-°zßýÌ.·ŸEÇÇž Ò­»’ldoÊïV\£x<É]>ëX,×Ê€PP­Œ½ø—oÝ©çyC®4Ó“ºó©D—×ÀÄQ_𦣷Œïð ÃPÝý˜R<¹ q¦JK5úµ7|œ^"f `fz؈˜õr­+Š"\1q£A¡sUjw>§Ìõ9áåõªJ Éå³ñüžîƯï|*ÑO.lS%ѽݿŽóo—|ãCQ¢jåVGn˜ŠØò¢j¥sIr1G,îø)½DæÂfb´½)/*¯Rá£Ö’\Q¡HŠLE „ÇÆßÓ4m®ÔÖz\F•·(åcFm?•–Y&`ão;ÚŠˆ¶÷|ëŠi°õÀåÿWå5áëfðêüÇ,˜ØNÜhê8ñ1½¦½_{£ôvÿ·^œ‚q¾·Ù{/sn~•b”‡pÒüAu¹™—ÀÁezëï{®Áš©!â[¹ß¥7… ákºÿËÅ·fŸ­S4žb MqgÒ¤FqéÂú‘«ÝmDº®‹Ã·*k 6 Ûu,F1ÆåÆ¢ÄÙz–Ê—Œè0úäó¼.µùñgPœ™ƒ`Œj‹èËÉI¯×]I™XxƒÍÓ‹æk>½°Z±<&)wŽw»WmD3Þ$U=/.,pðêè²ÕƘK>xŸºŸ'2ŠÓÃj¼öyÿvØ(×¢;ïd8¾þðYcp¸Š1 ­’[8+]-õbÍõ&þ]ç&Qhõ¼G,½häÚëbLè˜'ÿÇ \ÿ–'-K71²q—¿ØP l^6‚]ûeìíËg`ì´9ЮÛƒNÉøÌì ‹}ÿé†åWߺžy–¹FZš¦ÅØü5ñæ6üw]WÔë©àß÷G⇠£_Ǧ¤¤<ývv¦|ú‘¯íëeêÑFÿÌ´Ÿ‚ì›`ë4áW…p*.ŒÏÆk÷N÷håL_t:þ—…ïþ_ë{àÂM¹µöoÃkÚ1=´f‚ ]0wRòÍUuÿ.ù·7Ú8þí­g&ú„}<0l_VZ§´%£i`3p×èHªF¢I [ÕMòowQjH+EMÁŒÁI`p…y„JÆ«'u#bkÅ] þßun_sêÝHÒ(Rö?uÌÞîÆn&¿<¯³r{KQôbß9µÁ‡‚~ ß;m,>ωù–’—ú¥‹oØ$?¸Ñy àjß”õ\÷fšª¡Ü²Ow¸“ÜÞcš±ô\Â×Çqg™ûŒøo V~õj3ŒÁy–üä]Ü& k»ÙBK7Äeغ9(“#ˆ ö¿ÜøÃø;å×”ÅÄh êÊÒs &8†&$ån(`ñ{u4Þýs!ÝÅ×ÜG_˦XrE…Ž®—k!¨ ¿êÐLÏ‹.݆÷Ì{“¤¨)Ø9~_ôŸa«ºµº”~=ºwúðîVV™ÓÁÂ{X_¸õ?-—ëO€¡7!þMØ6&ß ÿãaûœ;4=ç°Èbökoþ”W¸0¹B©V)aMq˜<±ÚέË[«ºå¸Zww¹dÀsUCùZvΧ“ïo£°pT}o]+^ÓŽ!T²YNÚ¸ÔéYûÛþê <޼'æù¨à´Ð­¥ÆžØp,¨ÅcJÈ|ÒÔoåXØX4Þ+š1}-síO‡ýÛ&a{..ÿ÷'A0 %‹kŸPœ-Ó)¯']_¾…oâ°™«oµŸÁÕÓxäuYpC4a ÛÂg”¹çÔPqóL‚øÎ¹hlÕu¼UŸMï…žSŽ0<§õÙôž³+<wè¿ØÜeèZÓ‚*y+Ö m‘¨Ûèí¦–]ÆYù­ŒÐo¡ñöœÊv»ËÊmLˆÅ³¸ ¬Û_w~ž¦_FN[Ò;æø„(€-7RÙîãv[¹Þnét’× rââ2|ƒ³Ûèí.n£·»¸ ]ëÜËýÍJz»æõRÖ½à±03@q¶@Ð~Ô–Ûž³fµœk[ 0tŽ·J«¨-I¨yž®ö^ð>¥Ú´ë¢[‘(†…°…&sïݺz¯çÚA$I¡7¯cp„B£ü—Ÿá˜Õ>ÿÒvÏ·š.¾våÂ#–ÐøÒýõ~IN=Pyuž…FVÃ5ÒcýÃíËk¾W!šé6Ô×¼«‘«Ø€Ïôìêdðvλ=\ Ës3.µŽ{|ç2õµUvs1¬Œ;½5==uŸÏWi©ù®ÛE’”øá¿;i÷¶ì×)%‡³RãÖ·=æá™žï“o® apçêó¿ÍnÂÇÝ‚ÝæýÓ×½añß7ˆßº|ò1ì=k~ø¾}õ Øzº-¹g+¶ñq[·xÚÄŸ÷qáM#Löë7\Ñ£ï0%¡–/°ñêëßkШz=˃+++;a(Ö>C8ðEßÔáŠ-Ò³ŠëŠ~wNH3,ij‰ðËb9ð ¯UF]~ªè@ænÿ•´`L¿9peûß“‡,ºøÛõ‹Æoû¤{ÖüÏH‚p˜8JS$Åäéóçžø&íéNŸ|–˽ôX,«ÈrÉHçXÐÊjóæŒ›ç1.d:S`hÍ5lçPšðTá;çÒ4Žº|xr}-¡’Þ½Sa†3¸â:E½ëè a«àIRˆÏ´£+išnÏØJJRh€A#,±A1| …bb´6pÕ®s›“nmëAÝZô2âÁ÷q»¦§ÜZùøUÔAš"IØè”’pÈšÚÙAñ4MÉ1w°J© €ß¶ÓÛ³q¬ÙqíXË6úÉJö} „J¦ƒ&j'(þtâè[äòí‹âò~±tJ‰–É×'›ùÔ~Yo?ßCÏ¢=önGOK€!ÁQƒd U6†¡”ãÀ¥ŒŸÇÚé*•4:ê EI϶í¾›¡WQ¯¶2ÒcáB£zñPÇŠm7Síëå:aã’á-j–žK¦K»Ö—¤7Äž››ð(¶VnÜÉ;užÙ®©ÓýW?7VÔµÔ«{nÈ÷Rû¡yOœÖg”éñyÙë®$ó8LŒÅçàamD²^nFdeã{3[ïÜ"ßÜnKî4Æ;úöVzeY—Rs£¦*¤>›ÞÛ«d ›/~Nÿ|xÔÁØg÷ÁÁõ{ £wæ–ö\û­ßÁÝz ú|n‘o}ÈítÁ㨴¡Zy-ßÕÍëõé] Ö ‚£Ôþ§—ÿŒµ´ÁðE‰©Ù—SsÊž Úi3§¿š"´É„Z:D-©dØw]Ê›§åVÈûP$Ñ•PÉö±…¦Ëµ|(‚ ^c{X%€¾F^·p®å"œ-¨,þt-ÀoÙ½Pµ¤ª7M‘«;ôÇÕ·zþ5§žÐ³rŸE‘D [d6_§’}U5V,æžy½j³?Zs Ú1Æìùì]“ñ!hòø?Nk¤Õ3™|ý8/{q$EÇ &åöºñ©áfq Ú ÷t4yFÓ4®;¨ç†wÖ$I1=&˜Ôwó‡kvœ¿‘eÁâ3ñîö}¬ösqܳ¸ k÷q»'mß´Æ‚$´-n]üõ.Ë%`ÜU}ûÎÅ>öMÌSÌt¸ty×…aM3+ @Ó¨¤8Y=ïdœ±Ûèí+&ì±i¹¿\Ck¬"ËÝoÅãí$I‰#6û?‹ÜÓ?o×…eß¡YyößòáÏúÊ’c¤N3³ öé»AÛ"W­éÌü–^¼ïÞ‹¨+rað6¥zÊ—¤ì}-Å~ä«]t|ÆYYmÙ`GxÎíÍÁC¯CÏ »Ü»s­ïæ3µ²º3Î<ýôõ‡{»Â3Œóžt]tË5##}/¡U(+ ÓϾx=E€ë£Â6ž}?1¹áó›'‡½¦­•×^˜9ŸJNø°æ¥ÀwÎ¥Y$E£izª¬"ëM@i‹»0hÔ¯PK c°ÙŒæøÀ“~?ô¤D0†/Š¢¬®ó/Oèàõ½tÅ™îªúèµþuÛFÃý*#.çU*ÖsÄfdå*“ŸßÞžá©!¨AµYQÜÆìp#²˜«¨-:Oj•0±ªÍùt=ûóÝqŠÚÂîõ9Ñ7TÝÏɇç*k‹>MÙ™y E•uŵE~%ß{N92¾°°èrYq¡ó”žÖ4ÀçÃ£Šš•ØqEY8Ê%I =<Ë+ËÒ›§ª/[Jjp 1ÔÊêª4äz Cé†òœÁ¤Ns#ü}æ@ÐþŠÚµç_ås€¦)’"I ‘T—E0|¸•W±øL¼^iYÙE”Éé¥j,ç¡8s[BbR IRfawÞa°ùÞLž~ä/ïîyœ­÷Ÿ¢üþc`T ŽP¤‘VŸ””¤Ì×)%‹0©À0”BP¬c dƸsbâ»yãúnŸÞÛæAÊ-Shš‰¬=§P„–dòŬþ^¦uήšþwnÖ¡¸ós 5²šXJ§¦H’2,ýz'ÈÂsÀÕôûÛª£ü‘ѽS‡½_sê났Bqæc–À°7[ÏØ³9;Žû¹¡8“¢I _Ó=^hÙ¡îØîMom{ŒŸðõ̬¤æÓg3¸Bœ$)6IR¬Ø3Ó¿…Îñΰ5r]aä¥ÇåñºøÎ:}—PË÷g½¾yZ UÔ¯ýöêæG—¡k…ŸCÇ?ãÙž¯Íþ¼ÑkòÔ1{>X7ã»JêÔÔ£¯eüÚ’ÌÓ½\Ç„ŽÑÎgÐÃü¯·®»šbàe{BY[l›[ß ¬-BA¯‘]–™[´Š"4O¿œ˜¸ÄÆÆv$ÇÀjÑŠ½×mî¯ë±Åp/yCõ—?úu¦ª/ó¼tù¢ˆ$)±ZZý cpNÄŸ³ÖÑ¥ãXooï¸ÜJy†1?aLŽÅÙW¨BC˜œMýeÖtïä6—PI9Å1·8}6½wDPl«)Í£àÁÓµò:ñ3–Nm«äþÑ‚`8™ðþÎב›Ó<&¨ê<÷7&òtûëŽ-Æ`µïõº6': mæ¾ëÂ0S¢A߯oZtö‹#­ Îowô çZkc>\Ì7q¸º}Óš…8‹Ç éðnGϳZyý~B-? ÇÅqšÐºMíÎ=\ߣŒÁÖj90ax¯tœÍ§išâØøOwV5–:ûM¼±ò͵{=eÙÃFé½L`PIÏ(j *?›ðÃP²AZÝzžôß4ÛäÑ ¬+þHjU,€mÝŠµòú`XÛ»~QTç‰1;Nlá<ÅÕÍkëÌ~vJ )„¥gÄí¹öÅYŠÔ]õ²7 Zý‡sNÌ·¤é€˜™šlãˆÌƒyÆöƒºuzØqìŽÃÆÎÝÌ£ö ZslÜtŠÐ¶»•¿ü? !ò¡)šÅPE™w•==5ýÉ&MóSDp&§¾Sç®u‚ÀœöÚ{Ñ¥6ž÷~À9z»¥eéÙ“ƒ4ƒ{ DÖ^ÚŸ‚TTz­¥Ó0¬ ¹d›¸•R$ABÎ<Oªå_tJ‰¯N%)ïm‘¶&CÒ­ Ž‹öû³_Úî=õð¡z™JY_âí;ëtŒÏ´£þ«žýðr[à.œÅ{Îàˆn` öô{[ÌPœ™p}÷ƒ]áR§epE]¾œ˜¸ÂÂg䙳¬¡(ÞÃoÅc|n²”uÅ[ø&h ýwqôM/¸ùíü¼¾ŽÝ†aJ3yú¤º±Ò6ûÛ›}©w6ñhŠ®•×-_<»…2Œ ³lÐÈqn8G/-õóÓ‡C‚£V×Ë4­>3“'Víº½J#©* ãÞ| ËX#Ý£{·]wMíøD`ê .ÌI!WéPœ-ðµ¶²Œ:pí­@#­гcÖ¾ºZQ'ÛFªåez殆jQœ ŽàÀ‰y>±Ûf÷N$µJt«žÌ'5 å§£c#n­î{n‘oL^iMQ:%‚bŠTäÄ+1"Ôòà;{gÞ¿t(—PË«YæË­…ÑÇ'9ÇùT¿îjJš¦8<Æù§ƒò$zþù:õîÖNãG ¹db_Y×€¦Î”„Z¨j,/š>ªW0Mê¼FîüÔÊX¢‘×:R$í˜Ûg-ŠáV^Lòhª`AQTç‡FîîwœŸ  Aj4@ïq‹_4–$óŽÚv걋¡³?ïupàC`£ÁY¼æ€ $‚ –s—¡…ÛÑ裣ßÈ+²¨ˆOéhšÌ_û§‹2îüœ7òª<)Eêâ1 •¦&DƒXÏøK÷o2­îlóàïqyÁPŒ¡"uêýo¶÷$®¯èú´ù="äÕysø|žeì™éŽÌöRÏ>ÇÆXüþÒÒÔ{÷ÖõPDíDńީÑÙÜŒÔiº4”f ]†%t™=gó%,6§üÿ*À_b€˜†¦iÅXj¯é'ó¡;Z~V‚€ËÐ4õ&Îøòb‹N)‘&\Z0P§”ÄÂà [ÆE´%ÐÑ$Aû·7Ì`ðõU#®vo¹­zÖ=»´Ñ\Q·MQS0.æøø`š$QŒÐTÿª¦)PŒ¡ì<÷ŠSàêˆ.‚ƒ…í»·c“+€PbÛNU:òG ìâ_¿±…¦)a§†keµ½™|ýåߤ` Òæ¾kj2#Gh¤UIòê¼Õ®¦X¨+,kíÙ‚àLƒ+Ìpóê™)q¿½Nù©"gqñïcH¢¥ÚEKP“¯¯ÕÊë~„TÑÊÒ3ùTU˜fÔeþõ©Íʃ£÷¥U­Tʺºy]9>ÞëËÉIžI7Vؾ<Ó¾íÿU€m²F¸ÇCS¤ÇÀrSåþL¸´€ž¹x#ŒÛÍ¥ir©UYͬœ1no4£´VIc8C--Ooï£4FÒì)£EçΜ>¡aÕŸ§­«ïË+¸ YÏ2™*Z;>^]óÒÔã—ç.“ƒ™Êê: Ÿãmsîíè4çè —ïäh/xê—D—Å3› ONñ]åhžãU‚ c÷$­*ûçCçðˆ#Gm84Ï1eÞñÔy¥¿²Tu$jJô×rœ:|«ÝÙ÷Ä9i[]ŸñSf9èëxaêwÈÍî‚ àµ!ÎGW“×+fSÿ_¸ö÷¿½¦)ïÕ53纴sóf†ÆL¹Ÿµ„©¬ÞF§ÓZǹèÆ¥×߉DUÊÊJŒa½uÖûµ*ëïwãj[ù53—°÷§~‰^þé@bZŽ “«Éõê©·¤¸Nx¹²º¦˜ÃÓly{b梻bËró Ò¬¬¬ì®¬î×·ÿʨズ“ÕKç¬;?ŽÄåòÌ++ÿlÜÎ<)Q‰ÏlØ©¡Â0 H ZrARˆ¶*«Q™E{‘^Øè1ÙÓô€ßhË: C)—ÅáZ„BºÉÅÅ%¤¤^t­‡‘Šè|Ç< C)¯ qLŠÄ7««©>”*Èt™‚ØM*d·CFeJå„~Ÿi»RJªþŸ"×ÞðXË (òŠ$’’O)æó[ÇS‡þ«ïÎ5• ùxeõÊ›Ÿq0:3€Ç¡Ÿ\±Å£üöét«Ìì‚'ÖŒ ég­Qè¹î» ¾hËÜic–÷4æ±ÖíX?bä¨]‡æ9Ö~wºbG¼(n¬Å× 9½ÍTËÜm5»ÝØöÞÌ™UÎx}ëiçy'åA~>½Æ÷3xzô~áО&<"¯ªÃpŒ»àj[›)')¯ÙÉÑT•QÕ,&’òšÓÏ.ï+<ó¤d¨µ¾rÕà^:EçÚû‘¸T¨òþô¬q_·cù™ôý6ÜÿqÖç'íKBînñü¡væäX±iÿïê߾Уþž ðÖÛ*‹Åma`ËeÓNR`$ETfÓ×N°IÌü°z•¿÷ý? 3UÁÉuÏïÞ™í_Ù,qŽðï7çËÂ[{éÓ>Š¢JÏsŒÀ0¿ò¢Ü¸¼Q´E,#:ÚDrÌ@=ž§D¿°j¬ÕA`ÞñT½¼‚ÒíMoøÒ¶º‰Q3eæVÓ~Ú‡ôäÀfëƒ}ïo}Ó3JÚ,æí¼â"n.Ç™\mmW·T+™àµ¶ý`ÔõjàÀAiõmR•üOÉ–S‰ÃRÑ®‘ [úS„m-~ŸEQ¤¹’–™¨©Œõàêñ¾»£{ë %zŽ£ @­1ïµ®²¶¹"íœïÃÞsN ’Ics;X*Úg’ksYî)j*×á9IG| xêÕÏP3q"ߟžõìG}š²ÿz+ ÿ¿t›ó;û [âD…ìôƒ ;þÖ(x›ù<û ÿ¦ÎiÞéë¤\RðéúºËRuúÁd$z£û- ¸œ…ìŸÛëO%¿ù#ë;‘çÀgÖâ?ݦ1­àÑ«"°›¨¡ï0Ø0a÷ÀîJEY!˜˜Yÿ~¾·*yZªrqQÏ S"ׯ‰X1{œ¼Ö)n[9öœˆ7¿h$%lú7ýšúÞäeäþ¥æƒßJ Õ ì] Ûóý¶ü°­Gö¬†5Û:9ZùM ÎÓúÝ=eµ`ªg ˆñûwEå 3zü[ Ç^Û«gž ÔÆl_2ÁÛ§¿QNFJ×ÎÎþ¬¦glYt›¾íäسââÏ`1†Ý¸ x†=é)§çÆwúoS(Š‚û7]àÊ‹rlõ…ŒCÛ®e'_}YÎö=–ŠD$”ÙG'Vv{KD$”™†ÆìIÎoVýЬ­W³×„ÜÍ_L¤j¼³ôtzòç þäìòv€v¡¼ÇÅç¥3¾À´ÍW²Vî¸þ™çü–{æIÉØý·ó¾†õÝWÝ2ÿwúò}ÛÿmÑí=f’ã¬Ð$‚øíxl5ÂŒÝÄ@âßyOpLž¡ßÙ‹¶]Ëž±1â“›D†#KN}à­<÷qbPTŽÏ¶kÙÓÛ¥Ø×&$IþËqë^,5n¹ag·}ùXéRÖ Äþ蹋ӂ·ôñ=3 à9绉¸¯ºuÈlàÂku­åo¤iQ§ßîó?vÛ=¹õ›ßŸµûOmÌWOÿ[sÙvlÀÅžSvgý«o]}YNs]¹ÍeqÄÉVLÏvÜf±ëòëkþÝ92õÀ»–Ãü¨ðø²¡+þÞzD,ýcïËq×~úþY{æÀÝ—¿IÆ·÷üáý×/„þvBÛ¼äGíÕž´/é³×†¸õÕÍâî(Á6=ãÚOÚqÇvüÖî«n©ü¬M{A˜×†¸˜“ƒZM½|©à˜¼á÷#0-¥°%X™E`¨É­ÀIRK…)1ÀX°>üÓ|:†ì“*ȉœðœìn`_R/R”7ˆbõÔY95sM.£N‹Çz’WݱGª i,:Z¯Â¦g»Ûªß{œ^µ]¨¸½Ñ}á•åS [üN,êcòu‚ ѰÇÅ6|‘"B‹ÇüˆTfs‡ìARù#úèŽÌ©êЩjï$)JUG•¥ )Šjé3zh½ÞG7l}ø'C ö©‚°o*ò´8‹Z:dc„RÜÛ\WùñÒ‘÷ßλ(”à>ÆZœ¥5-’Árœ´²1àÆŽuÑŽxQÐÌ—9i¨0>µ=ÿàìU%mób–ªn8ÍÓ‘´Õø«èÛù&†ŒzógiÛwÑE.!—\løü|¢n¯‘K¬ìz_®¬®awÔäžm-û0Ëz„ÿú×ÁCºƒgì€%kvýTBú™4e71pWÇrgò©Ù–_‡ ûº¸,GdM‹iÞ@% ãù‰!£¾IFe71p\ØÌ*‰?µþï²™û¿Õüw!†ÄåO é?ÖE?`èš1äXZ£®nÙŸz{trû¼ãiXFÊË“4–²ÚôñCæ;˜ð˜ëvo6~+é]Šìcø2<¥ …~:®„aªÍ‘Ír Ÿ|¬cÜ|[M­m 3üƒ•¼FN]ðsQ,?“Î>±¨ôË\Þ{3—~>,„§né&N¿¸Xü%GôÐÀ×J »м6ıË^_¢G^:)ñî©­ ’>*(‘!ÇIÉ«½ƒÈ[o«è'2ZKRÅÙ77ÿ!÷Þœ€ ê ÍeüF5WƒTÑ·+<¤åÊ‹rÝðåðrÏÀz5±zÂÆ#@Jj•içæÕŽÝ¨¤ÅcJÂWõ#Ãï‡À¼ñ€ HÄÙ÷Ä\B.YÊâéŒH;7ÿ³9æ¶"jkõ‡»žïnŒ?ÿ¼ÌüúË’¢7†“ÕØþåZ` (PH䄵@¢8"‘OøÒ)[¯f»À}tÍŽ,èíMTú“õ m¹¡ '¡¨VpbQwm¥M+ÇZVSbœ€¸SKmöÏí5e‚«á5{BÃ:üfUðG0hès C©ÆúwßÐW…M¯ÁPÄ&»‚?Ž )ãüjAßV¡ÜôvrõÞ¥#-r¹ƒ/V(™ë*mTWf¬oìµðÅŠwCziŸŒÌÀ¢£g¹–ACí8LìŽLArœ0gJÁlÆnÔ2õ^`xâa“¢(è37LÓiÞé¡Î Îõ°ñ ÇI¦¨¡ˆ¥ eç«› Z¬ à¹îF¿¥W½û¯¾ë>ý`²šeí¹olË,†.gôõ1tšwZÛfìFWÇòø’嫺ÝÙé gîý–zsÇ¥=ÿ×1À¼÷O{jÙz—`L¥¼-¡‘Ý®O=À¦²xz7µy).‹Îoâ°h0— G>L.Mß}ùí 3—ÑÓ^¿ˆOfrµ†æUu ëϾ]šùþõËg)ù&KO§÷Þ~æÉ»Üü’µóv\¾)m¯ÿ˜WZ·­ßÒ«{ãc¯¥öšº[ ÀmE”kl‡K,3¢Æ’xççì.<+µvœÞX˜>vwâQsù#º’ZòÊ=ýWFm¬ËO~g¨Áé]PÓ¡qèúÛ}u™ãÇkø³þ¾Ú7˜T3´35•½BiŒS쀰›‰×ªRo¯èdN'd¢¢¦²Õ6¶ö€‡Û½Dá«ú‘óÆwÆÅlÊè€Pù>ѹ×g?bØwR6†¡Š¥#- míGþ•cû—3@Š@ ±X!AR«å rr_v€¤¨Y479M÷ÞÌÆPDŒ¡H‚af¥Ð1"soLÞ%­3qv‹P_Ì!¾Zc4‚¤(‚ iE鱘@Kǽ{gÁ0”š7Ô¬CG•…wˆñw«Ç[oÞè^`¤ÁÙ¿tÙ"â(‚Ôïgã;Ä,Ÿ ©JAÕ¢("#)˜BQðdÃ$Û—k'Ø”Îè±kí›–zÊB†@‹P>](Á|‡˜.:4ÏqÇ(g½|6Ã1i2Ðà.>/[CQ”>”ꩳë'ÚäզǞJ99cNʉ©þ1›ú˜¿bûŸ¢ë‘‹Á6U {h ‚9™ÿf/ÈVÕcƒ«gC·ÐW±­Ê~uýÊqkÕýÆœ‘Oߟ`ò´O“Å ¡z~c,¹pZIÃøŒ ' í'n‡KGùUÙ3øUÙ[KR'}X4cq—tT6`(«…³xº[ýÏg·•}¼%4-i.Lº\Y]³òÆÃî€ÆhâÁ‘us—É,UÝ·IL÷1µ§¤½öé#ûºV;#`éÄE0;ô½ À®ùÇí‘;ß0wGìû?ÎüfNAiLŽ£LÐôDÛnàUQSÙ×¹Z½›ò_oïÑw€GÃx‚bM‹†™åÀSŒÁ~)n©[÷ñþj‡ž)å×é"¢ooÌ#EMe)„BÊ“¶×rØ ¬šPH[Û+?SùÀØ}f.H¢Š:jóMyƽÐ1A‰zR~}ˆB&¼9xìÔ¹JÚjÙÏûÌbZ¡ ó…¥ãÚZ[—À% £õ2aó\·QêÂú¢»²Ž†4 Ѱ1Pi‘ šž (ÍU†“¼?êï͈€ $ìøŒÄe©¸T¨5ÊY¯™ HÍšw=QŒ6€ HÎÞ_*Iç+i™Å\[ëZÜuÒ¢÷ðÙ5¢ï¢‹¾v¶i$Š/˜Á7§ÍØ6n~Ñ+L<ç¸Iï:FÛáR!¯¥8Y8óPŠ×¡{L®Šêÿ/ìÜX“#Ý6ݾzÏl€DN°4$ëÔþ¾IyÍþ¹­“ú:ÎÕVeUOtÕ_¤ÍcþÒÈ—ÙæTvœ'’Ñ”âGYØ Cqœ ª»2Šuï(_óp’Bq‚ì!RÕ"~Çf`JA¢]°ö—C ¡Ðî&W34ÔL†“õW_–sf”ã$Ú•¯bN&(‚tï¬$I¡ >ö p1ôlì’ß%`?²ó7hÈÍûŸî0$!©^¸ñà¸Ãôý±½f¸×Z’º‚$I„Îæ!ç—;çK¯‘¸|5‰Ëƒûÿ²UUMýFgF£MçÄb§òm‘Ÿ Žšºš™ÓÖ[ñ™MMãI,UÝ3%ñ§šºM)k)Ié»~¢ÍS¦’úE53级»9aCy£h¨¨¥ràË3+êô6œ¡¬ÝEt£1šú-¹2F.j[£aá6'ã²ß‰óË Øj¸\¢ö}7r²Ò×ymˆ›Û…žðÛm›»ùwÝà7ì[4ÿ/űs2RX$.ØQ“k$¬/*!dbm¯ q_´œïµíCÊ£K·˜\ Aú……Cc )hEPL´jöÈòŠ·WG:銌.‚®L®V;Fg‰ƒÉڹ8Þ±¯GäÜa6‡û¸Ÿé¨ÍË•SR!ìíÒÑÈÁžùéŸò§ãb¾†ÊZ ?(„­íRAÓ¾áËÒ9&,ž.Ùª™95‚Š¿¬:‹[‹ÒÙ„ÿc xšïÊîkž±cV[iZo§9G—)ëX40”5Ù½¦í±'’‰Ë„Ú#† ©Ø;OÉeáÙ{0CXW4ž‹û-½jg®Ëý-ú2‚IQàºüúlGí 6ߊÉÕˆîýËÁ=¥E¹.¸\¬ÌTÑžVR\´H$QpÿjÆô—2ÀæÆ ’áNPr ´UY@hlá•åôT˜Ÿø2·­{ŽjÆíP8³—zØ£¢M'»× ]gôx¬¥Â˜ `”Vܦ(—CWøPÔjØÍ׺,Ø 5ÙÑB)>0:±Òõëv<úPëð•DÚ-Bšë*÷•ȉ¸.< ùš¹’@:[ª)„R¼–Ã@«)30¾HNÿ\Ág¶‹C;Cî\A5„=*îãKÉ‚ Ýe Òw£/AR²ï™÷š¿ùâ¦ÿíAP³ƒgä°½¹è/[Í`®²¶E8‚ Tׯ  R9¥ò‰¥ªÿb¤›õ•G^OœO{+¬/ÔÞñitõ‡{& ãKcªÊ°é©ç.G qœÀ¯/í]Iå¥üz1EQ¤©¶Ré¥ÎÒ;ý¯atf‚ÓØåïH…ì×';”ÙM D Ë&uÔä>üxeuÿÔ³s¾D$ÓXʲmb¦Ö½¢ÚÊ>¶¼(·¥è-ëÍ¡q/„Q¾ {Ö£×Ñ<çD^‚!Û_Ñ\—ErmÇüÔì·dÀ¿KZ R‚bà úNrײ0ÉÓ.®J‰ ЙµO˪Ÿ‹§›ZúêÂS¯ONF®sSt­+4³¬íÚè‘?ZwM2„ÆàÐb~Jʳ(|ápsñ‚aæmt¶J·M_Âî‚ôw/ÆÝ½Er:[ÝPBàR¥³0’TTAWL<Š"°N@ ’À¿ù.Ë?ƒû~Qòh[»=ÁåbõÐØçöŠL/—!S6Š_#2ÈcÕM#&W ;èëø êÞ³#âæÊšœ;;æyž2‡"É*aCñ†o¾¯Rã÷$YÊ:7Ò•T÷æÜÙ±†­n4OÜ\1§ß’+RÏÎD¤ª­,=(ù䬹 ‚jù[3@Mí¾`©§l¥¥ÂðɈžïòšEåjÊ£ùb…GÀdÛ \6=½ Fð)(*çyZaës‚¤Þg–µc5‚ÐÐØ‚C\ý$Š Ýl4š{™ª–2ièÈ»ùÉÓëVT7‹­•˜4{mŽMzq«á†I¶uxÌw‰¹ÍwBc æÇä {TWÞ(žÐ%Õál&6+änþú=ѹãÛò-}-ÕHd A@](ŕ˄,%&¦"ˆ¡‚ Øê\ÆS¾Ÿ’œß²}ëÕìaãËN'æ69kpÆRIÖ´HTG;ëm“á䬰GEË ‚äÉ$WAP4ms&†¡¸ÓÆ0D7)·Éð/ZIS•Žº÷Û’OÎê‘ Èo™Þp¹4¬Ü›g¹R3zQÜ«Qóöý;7ÏhX¸é ê ß¼‰½È7Yu‹ÕkÚžrq[¤µê3‹§›Åøús$I!s¥Q…OÃÆpÔ ÷Ö¤ßÛá¹"â`Þ½ — Qu3ç)¿¾ÑqFðùŸ5ýêÓÚÈ-žy ®æ¦²z⹃›ÚßDü‘¶5ïAÚVú!ÌcM¬Ÿ÷æ=~}É”Îÿp?uè^{hàënæá¼ð½×Œƒ^¶c4SÏþ9ýÒó´„îkŽºÑFAmþù·¡ã§½Ú;h–‰ó˜½ƒ=nÀ¦gægž”ôVbb½óîÍײõÞX’pzA4 (Š¢(rÛ4{bæ¡.CŠP‰Ë …LÈ%R:Jg‘Š ‚R€b µSËCWìIŒÎĦï!å×o¿¸oÅøi£Üo *îÊM Ñåöù¾F‚P.'él($2‚Ð1±3Å¥„ºrg"ª˜—wŠÇ=Û9 ÆàpÎ]¼2NYÛ‚þ&æè#Ucǹ¨u  ˜›´½.àÜÓ5~U¶3KU÷ÀÙå}…’Öš“ eõo2E‘ ÙTWå ¨+À)’ø Jg}@iŒÚ¦‚7&§Ÿ”`€âRÃPjÏlêoÍêÛ¤‡EÛ­ÉeNÀPä†"Ï8,ÚN©‚8Ža¨øÀ‡á&ÚœU :z·—¯Ÿÿ8ëW+FY|”ãä\:†JÛ…ò _zlp±T»ØÃXe)Cwmj·íÕç&¶—1OWµ3³¬~<`×Ì#ôÔXáí2Aú$u~ÅhË=]R† Þ.TèˆdøRX>{ É›c -*šÅ/üÑýÔÚž÷Sku0ÉJqAqÐqÃD›XmΑ ·dÐ98AÝóî¡•QT+t­i‘ì%¯Ziæ:J‹q‚ò<ÿ¼l`YƒèLNìlÊ­Ê„@hzùYFý@‚ ™ÿ[º†Ÿìô²!ä€FC¿šÀ(HG]!Þµ£$¡#Î@BAgÈ»3ýbÚÊÒŒP:3XIË´¨ôÅY¢1÷…±\ÔºÌÐÚiCÁãЇra+ ÐΔ‚€b‰Ë»ýP+êÛ¦m¼œ5*÷<#‡%-EÉ=h,eš¤½6ÕuÜW\"n;6`C—ÄDu¥%ìžØ¿Ž˜ A¢.‹#f(Ä|¶šå’͇bJêkû¯¾KNˆù]ß1 •Í›åãǯþ¼¬¹ðm!—àÉǧDɾõ<㋎v§k7WªË„ÍoAú~ýŽA«FóÎÔüß|µ9,™ IDATh‡¹ ‚ QŸà·® ¹/÷ÿ%“ HzÏÉ@éL½¦‚$»Oqçn¹­Œ™F¸£¦µg †¡8Ímk¯Ètp9߯©C¶kÞÓhl.Hk9|årÅ‚…õEJI,¦c¨¹¨¹\Æ`Û¹NÓ;µö(ICi Gàà¿*›¡µ+Í\ºÙ7æIê™Ö²4.‹§;2ìQ‘ ‹§Û EéÚL®–QAM‡¢Ho¹¨]CYÇB/zc1Èß?8ëã4ïôÖ¶æ†@™ …x–V:Ž HÖÔA“þØÇÃÐfûB\Ú1OIÛ<Ãjè9“«õ–"Ici[CYã#À¹[¯0…D@)Ä¿E˜'I…A±æ¯­M:jóH-=# …¤µïÕ— ¨É%p™¨…ÆRÆéNÕúß*Y@TŠ¢àùÃa0Ü˸Š~tOöÇÀ0T 7¾Ôe¼ß½ÍÕ¤ÙõA³r>–êœèJÆ ðéë÷Þݹ8`Û;‹"ˆXJîýÕaã—ºè+f0}œu ˆøÊ,)4¶`Ô¾èìÀÀ³Ï£BýG½ºvïEߺOqºj&}Z7úì’ÀÕ¯@݇ìõr»øj̦þݺ®@—×õ/uÉÇþç4ýbú€ ¬<÷‘÷.õã”–‚$¥ü’jƒ ¨œ,ÿ ™l¹¸ÍAiùG=†÷ÑÉ={)Ò[ÔT¦¶ÿv¾#Aé_r0œZâôäÝ«AÕÕïoVC—d` ¶œKÐâ÷öôœò’ db>ϰǜ©Ëwß{›’Æ5ÛÙŒÙpQݵŽ"-qîîq_uk—”_ï­c?8é횣üNºr‰SNÚ‹F5ó¾ ÚÊÒ¯÷[rE´ÐÇãÕéëqÚ,ž¶ÎÁ;ùÆ&ÙT¸.½:]ÜR¹˜ÁÕÜáàè\—™ÖÆTVÈ…Íäô!ÝFËA€a(ÕkÆAdíþ¤}I³*KóîÏÜh|Ù*šDZ­eiÓMLLîE¯·QnRASö×öˆ_›Iô³uŸí3áÎîÈ•—, Elx†=B,6yõU…Šï³–Y‡S¬šõív+k›+Yé)Ç—x̺&ëhÚÀTÑŠ_1}à^߀ÁQ» jÒ»P¤¾°¥î"†¡âñ{·W}Úڎј[4m½FÈ…­¥I¹Í¸’¦ék&O‡´0Ô°K¨Ùq#‡ÇÕµf!(¶©¢e:xºÿýOSO!}4E‘ÁªFޱ2a³yA€Ðî1„Àåâ :ÚZZ1IÕ­LeM-B.9eÓÓÙ@Wã±&v¹¨¹|‚b{Û›O‹®j–èË-ŒöŒ¡¬CúÙÄß*Ï-l,Ñ(kè­!¨+ØÍVÕGÓŠZÙ$I!f^¿rYªºûóϹø&£“^Å7«L‘J– ÏÅž~¨XÚZšæc;f-×}Õ­cÉǧDŽÚõƨ$;y/©J‡ÍÛuÉuYäú5?“¶×³+ªªº.‹ »;iõÀ­/§Ö~¼ÏåhšîÝv-[?îeòsoß³®Ë";$íµø•Y"›¡ ?Ûå}÷Îîàæ=UÚ^÷Kph˜“«u:;: húÁd¬´^Hàu×ÃÍå.Š ÈÖiöxu³xõ¤-7i£¼û*|‡˜gî=uÕ²K‰&“<ì4ñ>¶ÀÝÍÏGì"ߨ°iøÍø¢“2ίè‹kXº"^®½ö´䔚r'ÒÐÀ—µZ™êëém %m¾Ê…˜Ö…^Yã*›u8³7êKmfOÎ:œÂ²3Tɨm“ÈJ„—§¶Ï½—)¥¦D‡ ɲˆYy>ã~o3Uù‘½Ißc©«ÂW¹(˜—wágR`îûŒ£i¼¥1rÎ.ïK)è“úæ¡´½Ö[Sϸ K"'lz¶£îÓãW–C§[^WNWRE`ÙÌC)ܒ⢹R~½‡õ¨µk/êwjÎÚóÂú¢ÛúÎ"¥üGus—˜ÄQÓ&¯ý˜ÕWÛ~ðîÙ›Ï);[¨Ýõbö—&Eû[¥Å -ȸó¦Ð€¥¤R«¡ÌH)+-žimmrm­ëˆŸ=G$zõUÅ¡V¡|"IS_usº§ÑÚ鹿1A‰g›jËÏÕoâÚ 69½f†„Ó9¼ºô‹‹·8þrxCYýN[ùÇd®ž_Æe¿#>Ñbc®íQ·pý¥¥è­0ïáa' C¥3B’•k[„g*’®C´ZÝÒuîÇðeŸ¯¾,g¾xo]{UvKE»^ËvÀ]¹¨m<ÍEõE˜žU߆GÛ=gßûvouAš·ƒ³Gµµ®s¼6Ä ¨Ï~&ëh2дñ<ù1|Yàüi>ï_>^«nÑï~Õû›ö$.¿%0¨ÿÒ‘?ͬ&—IÁdÁ•3Á0géæßI˜ÿÍ24ðõôÊ´{ûW,_6Ô¿S€c1'Áê ´íÕĦüÄ&½Ž6ÓQwçÜ®ã‹Öíõˆ ?scræÆî?î±úö¹¨5pÄ@w¥˜k瘸N¨úûXÃÊ£‰µ;jr‹Xªºv­œ’³~ǡŠ1²ª©A±Å4ûtuÚmY]ÆÃ ^ŸÌoÌ}±uИé©©©¾Âú y{c*ÿQÛYCTAšÐ©…-ÈÂÀ‹µ‘X¶ŽúüKéö0­Vi{ؘ†ÏÏGlÚ2Ñœõƒ¿â;ïä«Ô´H¬Ž-êÓèõ˱¼D“ÎæV¿ØíM~™3–n¬1+ŽýÚÔ!kxyý“ÖÒTùÈohüÖFsqK%¥¢oG½Ú?¢ÃPrvèû!†ìñûçö $²EjÜž$“ÚÒÏtÀ¬ìz ÇõÓ¯Ýåúo'þ§KpLºv‚Mµ÷IÅBFtИU'G¿ñ(áÚ«Š¾/²Ó%2BC“´©†a÷s¬z[é´žXìÔÔ‰ ûÔô­ÎÄyB—ñßÐÀ×ʆìž|‘¼}ápóŠGêÈƼ:¦o¹x„ENž†vƒñÝÄV3È5•y‡Ædœ=wAƒÆâö¦sxQ0ÈÕ28Ïß¿„ËEy¥¯#v[𻨵/€•'ï¤PH:ìÏÝ;rE@ðì²W7X ]6§‡‰ê»Ø×áŸÙêFK1 -;ö pÞÅ\¼àÓû—‹¼7' o¯ü´kûÆÕK}¨sú˜µuaXÚ…œÂ 9¿*ÛAQ5û§-…ï$ªú¿T'3˜¬NümIÌYº¹›ñ}-qÿˆ!~/•ÿÑýûºÇwûßNûÀÔ$èçùP“•ÀB0:î7Úÿ:×¢ÿÔÒPÎË£,5ýW$E (©VóŒ™^¾· EGYs›Ë³i–LÀ0”<¶®Éìö ¡®Ì¨Iˆ;RqGÀqV(“¡¬N‚`\ ÛlÇm®FUv–½Ýz•é8 ¿€1ØK:!NºÔ²ß8ß™9ô–Âw 6žæ Íß÷uÝÉ8¼b?8/¼`±òÈ“‘rQôœº·MÝÜåñQ¿áíÿ‰9ìÎIð÷YÑýû¥l9·ƺè‹`´å0?q»PÎøK˜ìíË0ÖǶº’¨ï£ Zº÷P\—ñ°ÙPUQ F&–ÐRœ"½²Æõ¥×“pø*kÖßäÚZ×Hè’ ¿üwwR¦ðßI·‡þ˜ß‹GG`óT»/˜…2Hâ3ëéÊÚæ`ªÍiX4ÌL©¶E´«´àÓÞGê6ãrÉëܪ?€ ûÞú*k›¯AØâ¶2&&än¾Šçº¹LªÀÉ õõõ'ÃOòq7T~]zè·˲ÊÚ—Ù —¤CP_t‹ÉÕšu0p5]Y×jJcä2ŒR’ÀQ‚¤ ºYBg¨híÏÝê²ðì Š$€­f  PŸùh•”_cxÝ·EO-c©éñ ùÔRçU“ÞIM¹/¶„G?Æe¢ÛÙÑ2E˽ œqñy +åþiŒÎ§§½Ç’Oyˆ+$%2AsAÖ kÕ-]ÇMõ0,ýwaН™Ö]ÿÑýÿ ö@Æø$CJA‹ÆÕ—åNý<}ãKËäjÈI\Î[‘¥ò)GTÈLh ŽEžà©¢g³®4áìÓ¶²ôrQÛqaCñ~›QþÏÝVƘðÅ € )ì7T ¥(²ÛÁèCI=ãþVâ.›<Ηÿ;ççW–?› ä¿*ëZ9‘ )þÅvïûrxÅ~¸œeÑZ’Nc)cƒMCtW‰m°ô°ßidèc [Îíü¦®¦¹.>ü*¹zßN:úû¬€ÍW²Ÿpäæo(ö-îtgŒzS©‰Òè@þ@Fò;ìÿ;àĬ·ÿÖº;yî7ÿ~–Ñ ‘qŸ~wŸ‘‰%ü]Ëß‚³æk‘‚är¹ë¦ìW^]^ôx¼‡Õ.O{­*w[M¡ýA±Y­B¹Ë°~VÇÔ•‚¾‹.¶··ïµ3â]n«+]-µÚߌKÖbr¸cŒæ¹ÎmóÔ!F;ë•uÔièc©E#p©#ƒþ{ÒÈE­€ ÚcˆoZGM®æ²€¾¸T8”"‰d5%:N‘´ åp+ ?ŸÆàØö˜°¥ÌÄÊ¡WÏFLàR@·×ÈB…¨mˬÞø=‰Q4†Råëà!‹‘§³— =¶]ËîÛ^•í®eç}`é þóû7ÂÚ+?­œ8w6Bc$.ïŠn@àŠfdG|Ä0”øW2Ò~¤¥±.í?6v|‘‹N¬\ñ¢¼°¬A´ç{F9aÔ\…¨]39£`à÷íå¤Ë—´×V Iñ£@¯í`ûûÓ³B›ŠRdÑwZ=eŸ’–™‚ ê9ñÃU•è_â3þ”(@g ¾o4ÒÓ7_¾KQ”rú……ûZË>D!‘ÁÿPYð6§6TÖÑÀ{{dÂq~uÎq +·ñÚ)-YöÃgªïäþÅ;Áÿ|†•OðÛ5AjhêÁ‚±sáyf½Ne“È>P0ëpÊÐØ‚ÁszQ}æ†!k¦ùAØ£¢±]Ϩÿ&`ÿ¸«aëŽÁÜQ³!4¶`Æ’SæÉöêåÿ”¿éø·Ešª‹î T´÷ðtÍzøz›÷æ„ò×ÁC®iq„şŨž:{oÐ,‡4Š¢€$ÝèÐwoLClgïž•‘J¢ÆãÐ3Ë‹>ë |Ÿ[Õ±ú‚ŸËçNÅMöÇZX’…G^|óÁKb£oÆÄ@Vå»ÈU.^Ã|€ÒRa’.‹Ãí[KS÷õ:{à­€þY=§ì¾ÊPR£{PÈZ?Í¥‡±Ç¬O¾K×6°xÚ·óvŰÎhiçõžÙš}íâ> +÷*\*¬¸öª :rq GËŒ“±|“{Õž¡¤:A±/\„BPñï( ú¸ì€Ðئ6å˜UÞ®ÂãÐU˜ A(4Õâ”hë‰÷lÛÿ¿/žƒ€S›¯d¹ÊqÒäûãñ„½IŸ¹ú¶! 9 A®Ëäe=§îÍR·è7HC…=½¬Q4]ÃÚ#‰_•½Ásý£Oêª*í®Ë"}æMMü˜ø8ÀÜiX²¶E!.“¸\fk¨‚ã21Qúù½‘÷–õÕ9õ…yYR\*DI\N'’ÑsòNEôä‚AR«aËÔI…Œ ¶:(Ämã÷$:¤¬®Ub²xMàR.Ùå¶2fÎÛ{gF½·õèã{Ê<#bù>·•1ŽŸ<3NÚ^_ÜãÝõ#w¾É !u *›’<6íÉ•e]«V#[—¹ÕéµF‹9z ¨Š$ðþ=ŸÙØm»–½mÏlâ¶÷7“¿[4Gø*éð¸ôø ïÕÚÆv’¶ÚÝ×_Wèµ åÀÑ4Á 5+ýÂbÞV« ØðÐÿuNÓ:A¹I(PŒA»³Ù£ÐÙÙyb[mQKNaÅËÏ ©ß)†è2JEÔJÚ^«ºíZ6}¬e‘í•™*õZØP,+ªh°Ä¥B!¯-’] (vAÆ›þ޳B` ”ß`—^¯eàâÃB1:ÊV7eªèÄØßÔ³ºYÌíÂBdt%Õ£¸L<ŒÄåQoCÇK]¼Ç”u4ö7•¡ý–^õ— šü…õElems·!Û_™P©Iâr£ý·óØÿNH(6];«¼=¨‘/{ÚÓD¥¿H¢èß*G,m?ÿ©AmÛ~€²Â¨ÿظa(BC‘ßïoó"ÎöÙÅQ7<À¯ÊÚAçð"ÚÊÒëëë—Zêq‹¦YÁPRÞR”|¨ôÓ›ýrq[fä:·'„LU•›¼ÎatVñ‚9ÓŸhª0«JêgdMsøUÙ#˜tTÆâéŽÆ%‚8Ay§âJÆbtfAKvFån‹üÜCÍ̹'ϸWÍœ#ï{¨šöÙ‡b4ïÒÌW›•u,“+¿t÷­Íúãwö#4Ë!ÈtÀüÝ핟¦6æ¿~›™øp“PŠ#¯ƒ‡¬¤±”o‰šË“ 59m¯žå²Tu’O™3bWâЖâäõ4&gZõûè@Q7âï„oŠÝêy•"/éJª¿(ÄmEå‰=UôìV¥D4|~îÄäjE—%^­Ósè˜WG¦dç\mÈmJŠ F²Tõ|?E®58¹¤O"‰Ë—08jÇ*ßEŽ´º4ŒÄ¥vq/“éÿ°¼¿!LKŠ„êªÏ_N|2 ¨î¥d¨É.•‹Ûñ¦‰ G‘ʉnÉöÞûš¸DÐïÙÎkœ-ÕBAèMù¯Cc †wÔ©H¿°p:Æ`‡E­v^x¡¤¦ ³ó8E2—ËãÒë¬ ]&2UtˆdÄ€# z§êö¹¥¯çSÁ1yöL—©eçýÜÙBm‚§§W&KUï2E(ÆÑØ*BÞǀ¢Ò„BA«†µ‡'SEUÖµÖ ä”ÆŒ¹ôpHpL €«g“ÀVÕûÀ`ó2Žmš)U5ísR~½!—D0¸Z7e‚f¾wŒ‘Ûô:Ã¥õmRÓö¶æIË„Çã 1Þ7¯êàñ$IÉÇöÕ?¾cfÏuöF*“¥ rÜˬÆuA¢fÖ3€ H¥×?Ï -˜@$õ¦]}!C5êMeo€c ÕBc ÜyWeúåñŸ´Þ/Ütô~á0‘ÿÑ÷•åºc‚õCîæÛU6‰0ÿqÖâœÛûµìŽÓ2u˜¼~ÎúäãS*·„ïe£,[³o혧m?hâá£gf\ö‹(Œ;r†Äe“A–§_^µuí›F€¥‹æí³që“yÕs„¿2S)räÄé3¹ú¶ù"E‚¾½çÖ~ÞËP ¤ ²È̪ç†1ã&,#HªômèøÃ=¼&7u¸(ýâⓣnjšzvN˜Ú]˜³wá7}Ø9ØH>æ¤ßgÜH¦²Æ>\Âß~Û€«oûPÒZ½:än¾>‰Ë')$/€l©ÈÞ¬ʺÖÎ /Ä(ëZp4M¾„‰'¹úv‚ô‹‹ÏÈD­e(ÖiáÎ3r“u4¬±á÷— Í¥üz¹‚ A,1%}mGMNmÎíÀh€QKB‘ë×r4  ÷œÍI(B!î†Mþ)¯#°‹ç,è4g±+±§TÔ!þ\Á÷8ö°ÈæcFf€«›{¸ÿ8ë†ù'ÒÌ’ ')hPç2l‹ä"‡ÁÛ^†hñØ‹1[Ôk˜ïîܪæGɦI¹Më÷ÆäÙ$õêÍ……ò¾NØEñî¥Ô(@;ÆäXИJòá½uŠßæ5o$Hu`3:=#fO|pÍxkâêËŠ†~VêPk ÊP“,i!ó̯Ú*j*ÃôLläªJ ôÚÑI¸ûª[ãë2„W¥Þµ»'©­ZÐŒÊM}I\vCª B PØXêŒb´œwa3˱ӳÀ»§6µ>üÓ«„Wòd ²nlP¸¯º•.4áf:J4­A®’:†à­M ÿ’–CFÿf-AC ídøL€_¼MòÖ]ÊÜÇ+~Ùt%û@bNSÿm‘Ÿ©°é)yÕ‚±¡÷ ¯ù6ÝQÙ,Žx“Û¤zìAáÅ–Ù™êViQe“xatbåh‡¬òö×5-’[IÝ ¾•—Ô¥ï.5‚ÉΪaŠÌ€RèÌÀI‡ÆÔ<ë‚(÷ún…}ó¶A—ávÅë.ík«Þ0{ø ø|k{34cÖŸÚ |¡V·–@Í—o½Âÿ∜ԥ<ëõ;¾‰Wxw‹gõ—냾Žõ>^>p1àÔ7tÔäiAn†¦¤œœQœ“5ç'þ?\Z~ÍbЂӱIE3™<7=SûœÛâ–JE(Þ'…Nœï¾"’¤18 Àâ®ã ÊQ7þH@ɼ²2ÖkCœuSAÒúºO/÷™6LË(¢(ŠÐ2´º#m«]8;ôýÝkk]ó²oíÀzMÛsN!n³\³jÅÌÈ„‚U¹/Œàofööü®„'”ßQ(p ÀÂ'ÁL-ræX¯éë'ÚmÇ€ÆÆZœŠŒÒvúH']µ[ïª9LìØæ©v§—ŸI¿ó¡¨M{Ã$[þ®Ÿw2hè£V< h–ƒÒÖ«Ù½›² ïò[TE2\¨Ì¢i:˜ðnø6=·7&ÏàË»I ÈWÙ^Éù- Z„rÓ  6kÿ„–ú{íëÊ¡åÁÿ²oëCgÀçŽåˆX*3f1ø‰ª5^EÃÚ9vËs¾6PJó°«/7’¿2¥Bc hk'ØàŽÓ÷ž~0ùAôF÷@C—).sõmºà ÂeqÄÕšy†=> ôz`î26=/þÒLÏ5wœJ_œMqœ¾GKÐTeY] ¯›é¡(Æø¢èøú˜ß2tÌä]>— çWeãU è°Þ: gRZ±”¸«!{¢sg9ûž0k+O÷Ù´3dJăT!Eàº$.§i˜8°á»Màø7)ž•¢ ‡›Oü¾þ5øŸÏ@¦z=ÿ¬>‰ñçÀkh_xvïú»¼Üït–›@$ ÃP¼Kñ¦ëï7ß¼¯ÊÞÿíQþü¢c}fñU^džOV1ìé©¶4ЕÔû¾Ïd½‹;(¨ÉA)’\VôôØ3€‡1á0vê¼ÿ* ’B™t½ú²Bz}ëÄ­×>;{P¸ ªYbÉÇY ;ÆdÐÌ@ƒ= ±C¦À ’Ï¢c”– S¢ ¨œ¢Zá£åg?-fþ °óÕ8Š€Mü§†ì›§ÚU<0 †‹ƒ»)ÕÌèÄ*ƒÏïãY5é±lž‘y`ﮢé^ÆÂówöÃ"Ÿ€ÿHß­‚~KÇpq™0Jˆ p­Çл[ö‰~fnëô)ªépkæKåVÑ(T™’ø Ž“=×ܾ“þFŠK¥{oæjÕ 5Râïš±Õ øÓëú·V~v!qyð»÷-¥„L”ÇVÓ{t!Þ—‰+î&•‡íÛ¸dmà½»Ï’î›Ø: jó³ÎEDm§³U²p™ˆ‡b4s}5ÖÈ?˜Úÿ0Àÿ»1Àëàâiþ‡æÇõùÛxwZ ^CÿÃ^ü¿áñä~$`*%rÛ€ ÕåÂ5†¶…èý©_êˆi,žöt®ž—âÍþaw¯Ÿû¯mO;ÞIDAT3?¾HáÉf`µ§Ö9 vÜÈ9Ëab&<}E!ªÿŠI"Ê,šP]™Á cJQ^ìÁsz #³GÊqj4‚ ‘‘o*½À— )”ÁÀä8ɯlû™úÅÃ"9¿Å²º¾9®¤ÖsòºÓ™…Umª.=2^þiê"ÇüÝÆ#³áàš?Î{q;þL:ÿû±mÓ ÙIñ$.W44j_€é?û ~.ÔŒdVÁçôÖ£×e Ÿdmâ<æ†* j:BflmºC*¤æ,ž®¥1RSNÎhqYäiçáÚš~yžUµãH¹$ë«6t¸­Œ™Õ^–îÀÖ0T–‹Û>g\ö«VÒz¤‹ ØÒöªl2»Â•lÊÛu‹¥âÒëJZf¿ ê zЙʨBÔvöã•ÕÍN¿Á©`,¿ú3>¤×ˆŽºá$5׊üô }ç óÚ+2{"­˜gäÐ(¶Ú´‹äÙÿ°¼Êÿ±rëêÉ?ußæeSþ²6ÔV<‡Ô7A/ýÎ~\ë{,UL¤)@x|™Ëê ThlÁÔë¯+ú-9õAñ<³Þ `õ…ŒÇ³Cß_ŽÉë•Sû¾Z`ù™t»E'?$øKÕ}›×lræIÉ>€ÒzÁüE'?´ÉÙv-ûJ`dö“Ø÷Õ†þç3*·^Íþ&ŸÛʘ±}憕Ì:œÂˆlûI;N¹ùE·\¸÷›[™Ó¼ÓŒ/Únv¯ßžžY,:ùöµ6üÄâo¼$\GÜêþ¦_ô¾>¾§¸_ðånOAßpÅÍW²¦x®”³æbæOcöG¿èöö\9ðM½þD‹îëÕ2ØžO]w)sk¾þïÞ³õj¶©×Æ'£f‡¾_ðŸÿÝ—ƒÿYˆ_Ã,ÿàÿÍò6¯Y'æmUD«@îâd¡öXAX1´C‚‡]ØçLx|™Ù»‚–·Ê,Z¾š=WŽ“#šrödwƒ/²ûJäÄZc-NÀ’Wß+X_Ó*Y¥¥Â œ?Ô”[´‘ÅÀªr賊ë…V³ºñ¢<A‹ùCLßM©ñìàa:ªÌ=½ÍT#†õÖmv[5V&l>.ëh²É½»Ká4ïôZ…˜¿%;:@³‹!<޽\EßΣ£® ‘ÉÕ:”rbjêí¯F¶V~žÌQ7º„K…ƒHB> £³_ú é}=6©0PÒVczæã¥%16=3Çe¢mrQ«5ŠÒCRÏΉøzP[MÁêë'o:¯AâòÕ¸LXkdå¸åþ6¯¯ q\)¿aeFàr{¶ªÞ•·¡ãŸ†ÜÍg$|jä1hmXo]Ýwù-mºj¬–# z ’žŸÏa¿Ï v:®Øòƫҧ¸L”ûîè¤q?Ÿ¨7•#ŽÜH¼)n©ŒÈ¾¹Ùÿ˜‚ QïF (­<1dTÞ?³ù^ÐHðÿf)­J`-Iû‡â¶ƒíBžïwtaŸ3cÜæ 5+ëo£á£¡Ìx¦­ÊŠp¶T›j®£´^¦ “) bjZ$î29™ ‘8Š ÑB î­Ä¤Ås˜´‹æºJ Ít”´ÚÅ ÿÿ~ûÒKÚ‘ŒXÞ&”έêÎèqÍÅRíW‰Œxò%ß IQÝcè8¯ qÃA—8÷|`aX7þ]Ö1} G>‚¢KqIG«\Ôš|ñy©-ärÉd’$®1yÚ’ š¶Ý}{MUUí6CY³J!j;ðús£ÞØÝ‰Óõ…ï”yꇕ4MŸã É=‚ M.£YÜ\Ù÷Fbå>&Ws KU7P!æ÷UÔÌðø2D.l݉ÒTtÌ.0Ø<-a}ÑZ‚ iõmÒ^jÊŒ§õÕåq‘O3××4 î|,nyº÷f®;üù,n^Â`2ßИJ"¿ß"Qƒmf 0~*å×_¦+©þÎvoí¥OêraÛq”ÆýÏLþü§üçJ]Õ (È;™òà‡) #î¼ùÿÚ;ó (î,Ž¿>æž0\"`„("¨àÀ"(Ѹ1&Æ+&ºRã&Zx.µh0$ºFŨ1†D4ÙÙ­¸QFÔ‰*r)‡ À sß=}ï ƨ1Uf+[©êÏóúý¦ºû×õ~¯û÷~ßhNçÀ¬ÉQZÐÞwÈ7© €rðiÉÜÓ{ôý>÷ªLÞH6€àg½Å¬ñý~©^‚ ,ÏPþ7ê›×ºMm)þ‘C7¿3#f×çËÛ ã Ðj1Ÿß6“X½¿¦¸¢üàKG.Å¿æèn+Àe~´×ÖuâÂö7ßòòÆ`†ôX0‘dßÑí/}—½ùB`]wsz«Þ-æyp+‚£¦ SvÝ1z¼ŽåKO µ5\ °W_«•<7vÄ´¢Ãl£ÚJ³¼táä(>³@sX­wˆpTÖä–;yŽ} díպĄ¡¥þ¡ùš÷3\h4Eå•\Þtä\ãVíMsFÒ @'@òòC¢áƒŸævåŒì­@yþçõÊ;¿b€çyˆN],k>µ×{ŸJÚ+k¿çX‹dqz;ÛE|ëë æWLžÙJ)Þþ¨ï£B(ð+„E¦Á¤Œ¯ëÜw M|ô^ÞçÏ,yl[­féožCgûyGE£Hî?_®Ž¼AØt¢Mß4P w\Dœ]a¸T‰‡‡…â…s‡´#¨è&Aq£9ŽáQ çåêÈ–å—± 8–jÇ%Jí}ƒ<ï hÉÑüñGhýoÕu­{œjXï' Šážc%cÇ$”-fëIHQ|ë„-ÝÖ–Ö¶m÷_ÂÄó piïB¢ËLèOœ»M•Ô4b`hϱ}7•×dh^ÇpÑéêÚæ«“ó+su?Ö¸ü—ª½á£f˜´ú?×çüS;ùÞ¸à lÍ:ךì-Úê11êUÙ[´³E‘q÷ûPàDLüâGÚS&}üØvI~{¢'üéÌG™{dü;ë†rožË3:ÈÁŸ½5†—ö£[W¨ÑAÊŠ6ã? H%YÜvsÁôžT! üÉaYE0QG“ªÑ)¢/î]Tåµé+­ û’–•I•çI‡‘ò:Leh&”¬y' j´½¥©þ«Á±YŠp,â~ɳû#(¦Æ$ò@–å0““ áXZ$—àᎮ†,é1%-+Ÿ|õfç\†pà3 Ï÷Rl_Ž¥Å: ̲v®Á$c(Ÿ¦™ÐÄ!1re凞M\sjŽÛ¢ÏähoÀºƒµP@!—FúGÕÖí^e²¹3¦<;`-pV£n[DDävMQúíoV§ìñ: Ÿ€oK‡ûñxIC8S*ksr¦D—œÜ0qGOðæ8±Bð͹ޱýCv—å%oÅ0”Üøj¼N$UZ8áé ÀŸœ´õ§ý\ú[Òam©<$JÁQDVHºL⬑K°„òÓ rÊm9Xw¹’\ñÙõ~jë6´œ±µ_s5v8XT,û‡²OÌl¯M½CòT˜ÑàËF9€ X3ÇÒN‡ítƈˆùùÙñ•s?¼ªtoµŽ\QKÓLôƒ×¿ò¥¸bU`±ÍbZ¶¹ìRÕŸó%µŠ‹‡Ü¾« ‰‹ô»Úëo°‘½+F„wß߉0 "ð§íì~;‚bû€÷:º/ýýýúqMÙ›µ/$«VŠ©k¥Ë,Ó7žv§îŠK•TɲÑTaVvÃ)¯½û$é4!§kG1Ž»7JiÂÁ“önè0¼S«“(x{g=wí˼úÔup‚´˜CkÆz§m8ûCrl Y¸o%¯ TE¹,Èö$–aدµKC¹maí R¦Î.l¼Em êîÉÍ|†_ÑiÙ—‘ê-ñ%C{\ú¦Úë_®°öJŽæÍäZ´©†×ÔC{¯“öØúÊýÔGL@(š‹xûÅø¯ ¢¨ôÌŠ†¦öУ–,&]æ/ÂúÇ©þuôÂÁ¢oÒVÏì¦}5м mð»F'¤þŽY]Z3Ñæ$v ž±;g¤!®Ÿÿ½×Òq+¾ÿÚcíJ}>-eÜ•+åt:¿cirZÕÖ;§œ-¥HKx&h~uÃÝ·q©Ò¦ú¢áfë±R½Hó~ÆŒa³7ïÄÄ2ärIyG+¥ ¿N—E¿ $oª:磟N„ª>.ËK.zâÉÁ„[ ðdø 5Âh'ß5w5[Æ8C‘ª¼×GÑϧ=eçáÚñϺbÙ¦·od›å§”ýýÇ÷¦j›ü2£ ºÎцǨ2»Ùæjã9fƒJ!ŸëðP±¹/įÅgÅzyé+Ò§Âx;ÁžQÈe?¶Þn9(´ï@ƒ7·ÞÄârÿyKVVU~»Ë#ô† ü¡$/?$‘(SGô¡u¯"P%6ægdzGÊòazÖ`YN¼xוAj©iÜ¡:Œ\u\2$*PŽ¡ÝnpK¯oÚúÝÍðk­¶ðÏÞ]ƒa¨7ëƒ û*i†åñ½Ë]¾*…žñîYizbå–¢Ž×ród—›­¨ÙÐåÒîÌ¢…ÞøÃØ^öí̱_îâ%]ùìû0û7ÿ{͇lK³~Ý[AªÐ!OÈÈf¨¾¨ÌÄIEND®B`‚calamares-3.2.20/src/branding/default/show.qml000066400000000000000000000054261362604102500212260ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2015, Teo Mrnjavac * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ import QtQuick 2.0; import calamares.slideshow 1.0; Presentation { id: presentation function nextSlide() { console.log("QML Component (default slideshow) Next slide"); presentation.goToNextSlide(); } Timer { id: advanceTimer interval: 1000 running: presentation.activatedInCalamares repeat: true onTriggered: nextSlide() } Slide { Image { id: background source: "squid.png" width: 200; height: 200 fillMode: Image.PreserveAspectFit anchors.centerIn: parent } Text { anchors.horizontalCenter: background.horizontalCenter anchors.top: background.bottom text: "This is a customizable QML slideshow.
"+ "Distributions should provide their own slideshow and list it in
"+ "their custom branding.desc file.
"+ "To create a Calamares presentation in QML, import calamares.slideshow,
"+ "define a Presentation element with as many Slide elements as needed." wrapMode: Text.WordWrap width: presentation.width horizontalAlignment: Text.Center } } Slide { centeredText: qsTr("This is a second Slide element.") } Slide { centeredText: qsTr("This is a third Slide element.") } // When this slideshow is loaded as a V1 slideshow, only // activatedInCalamares is set, which starts the timer (see above). // // In V2, also the onActivate() and onLeave() methods are called. // These example functions log a message (and re-start the slides // from the first). function onActivate() { console.log("QML Component (default slideshow) activated"); presentation.currentSlide = 0; } function onLeave() { console.log("QML Component (default slideshow) deactivated"); } } calamares-3.2.20/src/branding/default/squid.png000066400000000000000000000201711362604102500213600ustar00rootroot00000000000000‰PNG  IHDR\r¨fsBIT|dˆ pHYsX•X•Ùm7ÓtEXtSoftwarewww.inkscape.org›î<öIDATxœíy°%U}Ç¿§»ï½oófcö•e`†d ¥¢(Á}IÔ²RV“*£–eEC”XFMR©TÊŠ•ABÀ2„RRj©,ƒÂà 0ÌÀ0ÀÀlo7ïݵoŸüÑ}ºÏ½·û¾»ôÞ¿õxsÏí{úÜÓçûíßYÞi†xö#¸qü[ç"ˆ4Àn¿è>|/èó(AŸ€ ˆøB@† € 2 Ad2‚È0d‘aÈ"ÃD†! ˆ C@† € 2 Ad2‚È0d‘aÈ"ÃD†! ˆ C@† € 2 Ad2‚È0d‘aÈ"ÃD†! ˆ C@† € 2 Ad2‚È0d‘aÈ"ÃD†! ˆ C@† € 2 Ad2‚È0ZÔ ‚ghÇu»þ]}fæ‘ zðÑ€JDÄ2€ PX>&Þþ']}fîå§qú¹Ç1ž«T*"P€ðdÁP0¯«Qƒ2Â`A'H3d„7Üüeš5•4BW•èˆ]%H!tE‰Ž`ÉR]MÂ.ý›I©‹ÔHt% WXÃoÙugÈR]EÂGüMé X¬“ ¤º‚DÜÅ/ H>tõˆŽ‘Å/ H6t刎p?`Í $ºjÄ’´¿è$,Ö, $ºb„;–²;¿`L qÐÕ"<éFü""dAWŠèŠvâÌ7u2¤@W‰è˜NÄ/ Ht…ˆŽèFüâ êĺ:Ä’ô"~ñÆba±NÍ,®Ð•!ÚÒø :™@\¡«BxÀ}¿H^ÔÈb]¿Ä/(’ ĺDÇô#~™@¼ +At„âé%a‘fb]bIü¿ X'ˆtˆ¶!~™@ôPíî0K´»™‰>ˆ0ÿÖ d0,ê^GAC@xãy×o|“5¿åõ99¹ …L "ȈÎh#~¯ÃÝÞc¬Qü2h  –¦ñ»¦KÂwëU”êdaC@´'ñ»o½A&.d„;¡‹_Pª+(ÖÉ€ €pÅhsxâuš-êñ„Kÿ„%~ñFÉŠ†5ω>¡ dògmSsQcIŒ&Í-~¦æ0¸f[ËeZ'(d!RX>6ÿíÃØðù‚å Q§cÂÿùŸ¿»¿ù†7ïjɧl02€(lÚ…ÍwüÚ²5¹äfløÜ}‰0°Ä¿âê÷!7¾ ÝùsŒl¿´eGâRL ÈB °i6ågPGWÚiI00Å/ÐF&°ëއ0²íÒ–üËd¾C0nâ$Áš Rümd6™€È‡LÀ_ȤøI20Ä/M ù¼dþAˆ_SüaÃ.ÝJÙÓ„Dï@7âÄÙ¢¿ÀÍäî™@øL/âÄÑ¢¿@6·î™@ïøH?âÄÉâ ~AÛî€A&Ð+d>2rñ»ú¿Ï%7cýgïŠtÅ Ÿâßñù»ú¿@™À²Ýos-™@oøÈôÿ~“÷|Ù—¼F¯ü@ìV özç_yõû}9ÿÑ{¿Ž7ô–òÊd]Cà3S|Ë7ˆUw ‚°_æè½_ÇÑ{¿ÞRžæÓW †2™@Ç@ÚL )â·gÈ:† ÒbI¿H,×É: @’n‰ÓfƒdKC0I5¶âoÞÕ1 å:ÈÚ@I5Oñ7§ÇNüU®›ƒƒD+d!‘4p}PbÄß ™€;d!’4Ú‡ØI¿½³™@ d!“$H“ødD@L *ñËk.B¿âTÈlÈ"" &…øÝŠ`A¸–©;ñ‹äJ¨’ DI¬MÀUüZ$â÷.Sk!Ý"û½¦×e22€¨‰µ H˜âÿAìÅïFCÑDÖ#2€wSübßOñ{¥ËÝ¬Ž Ä„¸š@ØâÂ3ÕŒš@Œˆ› dEü"Ÿšan6š%ÈbF\L€iÙ¿ Æ³eôtà2õÀ·€ÜV}ø«}ç5rÉÍ<ûÊ®?·é¾‚ÜXÿۛɿ ÆÔ‚êñ¡A@L™ºÿk¾E½ìS˜Uñ‹ãuÎP©{|0EÄ?»QTñ ²`d1'©&tñ Ònd i&ñ Òld !)&6ñ tÎP5:80a$ˆ¸›@ZÅ/¨é32€„WH»øE>i‹ÈHÜL +â¤ÉÈJ\L +ñ»ì&œ4ñ j)12€µ t-þ’)~ñ׊:g¨%Üh)p™zà[€UûF¨çíOü½íâÓqzâ/jœàÈ%ôVšÐb2aG$~H_ƒ£f ±‘@JËHüh¿È_O¨ ¤ˆ M€ÄWñ ’h42‚â÷mñ tË’2&bÝàw$°”øHür>uîAÜ!H)~™@'âoHh9¢‘n¶í^2=†âè 12€Ó¯ !~7"—÷\Óc,~AL€ÆRN¯c^âëÒÞvŸñ<>@ñ‹ãë€h1½ÕÆ´X„Ÿt $Müí"/¿ Îcd¡SH¢ø»Ák "(ñ êÜŠb@†Xʲ ~Ï÷Ä?¿@7âg41¼Æ²,~IüAAèP»ýA@iŽ2/þ†?Sî^üÝŽAÄ)  £ˆ‡”ëŒÄ/½«<¢ŽÈ2ÌÔý_C¹ÎÀšZ7‰?œòÄÁ¨ qTŽ!ÕQ‰?ÜòÜü‰ 2y¥ÑHüá”G$×#42€0ƒÄRyš“£22Â&¯ÃªµdÄXy¼ò‰¢;@@4S€µyÝ*‰?hñ‹ô°M€ €hAS€ÑœÆ&Èm’ ~îúÂü>q¿Àà@Í»˜¾B@¸¢2`TãPššaRÄÏäÒ?â.~¯ƒ!}’ž( ‘L€Äß}yÚžwé|¬Q2¢-¼«ø{˧‹òjdÄ’( v1oùt[ë#h• €èašèxGâoŸOâ—gú®W2¢c€!ÉÜÞwM'ñ÷T´NÁ°6ÙôѶ (­é®Ç“ø{*OeújdD×0Cªó@Lû||,ÜðÅȈžT9ò-ˆÄ¿Dzïâ—íÛȈ¾P9òªóÚkÓM€ÄßGyÚ-îËhC¢o Š)K¯cöÒBIü6^â—ÓY›ãÚB@øBAáj¼±)û%4Gé]C]Â7 ª¹¯€À/¡5ä•ñ3¼øŠŸÉ+GÕèNjqÙ¶»“¼B¸ó{á»)P@øNNã·m»—Ê««ô‹ €s¡Ge‰H )y´Ë+©â( DSÌiB/’"þvD’Å£2Óš‘$ñ{¥»½çç:Ð,‘T (Ž ¤AüÝæÓm™Tï·|  BA±L y‹±R(þnËÓÅ_ö  3g<Û7‰ß ÷ÝY}€ €a- ÄïE ›„“¡£0  r(¢m'lÛî°Êƒ€ÅÁ`.Ví6žî¥½Ý–Gñ^ ì+dDd0yP‰¿Ÿ|ú €ˆÇ<Þ'ñ 9¢;ÐïSˆ<ó'ñ{B@Ć‚ ¨bŸA(±"¯ eÇa‰ßȈؑSZÇHüÁ@@Ä’œ‚%ŸB䉿s؉ɩŸE¯æy¥8øyˆÔ¡×uÔªµV­xüQó•ç|»â¾s óø€ÒÑÖEr>î÷X¯üí÷ CEhùjW'ë6;w:”Ñ+º®C×kök/‘{©ÜKlqKÚˆˆ=š¦1½Vó>(fbN‚ø ‚ªªÐr9÷7c&椈  „ªªÈåó‰1s’Ä CQÓÚìœ7‘ÇUü ÕôzÔe ˆîaJÃÀ ô†ûá$~W´™Ù¹¨Ë@=Á9‡®ëàÜúk€ř6ñ€žŒš¦B×u+¥µ-›"ì<Ýû\ÝåÓmþQ¡Å¿ˆÑÆ jêõº ˜ÉæÝ·¹}{¥·?…ûîݦÇ-1%%TEµM€1æªp¯ô¶yw™W/çˆê©@tš#çý^B~´|Æ+½—sÄê©BQ[M Û¼—HšôM¨ @¤ŽNº^¤=äo†©DUUšæë'Ù¾¢ Šª ^ïl¡›Þ»÷ë»IO©¦“H ‹w~©Ga nxÏd¨Ïß Í™€) À9¸aH‰é]àÓ)´€È ŒÁ|æ–aX/Ò·´·[¨ @d 0Å—î@ .‘=Ä ¥1ì—¡.‘IÄ@¾½X(Ca¿ uˆÌÂÀÌ;|Ý´A]‚h2´‡ý2´ˆ à,îIÓ"ŸNˆ~ `q8ü8Ø«OŸzlæ5 Zô 0¸ šÆV›.ß|°q7ˆ¶ÌIdê0pd/ØkOS¯ ³@i¨ë@~X¶|ù`ãÅÀÖ«€uD]âÐ1µß»t]ÇÉ'pìÍ7pâÄq‹ETÊ”JEhš†|¾€ññq,›˜ÀÚuë±aãF úVþ^`Ï<ÿbøÀ9Ø¡_í½8¼0ºØ˜t`üâ÷ƒ_ñq`åÖàʘªE°g{ònàä¡®>ÊWl.ùø ŒTÀt07;‹çö?‹—DµZéøsŒ)ظi3v^x!6nÚIôº°#O€=ô àäÁ>3bÀ®[`¼ëKÀð  —¸öÛûÀ~þ@étYF€ko¿öV@Ë/ý ±¸¸ˆ_ïy ¯~Éu ±V¬\…k¯»k×­÷©tžÔJ`?¹lßýÍw` õw|ìòø›oR™~ʾ}Úß|Wn…þÁoƒ­Û™¹~²/x¿ÞóXWwü¥`ŒaÇù;ñ–k¯CÎë)H>Þ~î@ð0÷&”»o›<Ø)Ê—|¹÷~`j`çˆ;ìÈo Üû—@y>ü¹šÃÜ ŸÃèõ”YàÜÀžGÅ ÏïìËWà]7ß‚ÑÑÑÀÎ!ÜØÔa°ÿøØ™SAžPÛþ{P>ñ¯€’½gž²ý?6ïü†¾ôÁ}ˆaþ-ŸÁÐ;>›90 ?ý¿Ÿàõ×^ ü\ÃÃ#øý÷¼Ë&&=O°Ó€ó'Àîº-ñ@îð#à÷}è³?–4Øk{¡<ðåàÅœcìñï¢øËï®Á9ÇÿüE(â€ÅÅüøÁpæÌ™@Ï£Þþ§vG 9ëUhß¿lò•@²÷B™zºa€m»2ÔóF›zê~ ¨–B=oáè^Ì-ßÂY[B=oTìÛ÷ö?ûL¨ç¬Öª8yâ8Îݱ#°hK‚øQ~þOÀ±)ôRä÷|úëÏò½bõcPþç¯r°w WŒ:ƺ³ÇŽF_ÿLMNbßÞ½‘œûÔÉSØûÄoË?˜.À©CPž¼+¬;¨Cyà˨UÊÑ•!ØS÷€½áóhhÅIäû.æfg#+CÐpnàÑ_ý †¼‘HÈìæLOM’·„±(?ûNw‹{ ?ý Šß½^úÌOµõÿâkõÂø‹bñøK˜›‹¾Nø9tð &'ÃÃòÂ0 <ùäoù~ 8‡Ÿ?ìØóP^~,Ô òbtÿý8uò¤¹3¬Ïß3êåé6Ý×FûïÇÂü<ÎÌŸŽ¼^üüá†ýÏDaɼñú똞šôý;ú>_¦ø½Ð§ò³G0øâC8=s&–M@QÒ3m¥<ñý¨‹`3røxùÜcvn££cŽºH¾033™™™¨‹àœãà¸æºë}Í×ß?æu°ò3ǾYõè?D]„Ô£ÔŠ8õðam Àòy ¹-ö›Ã/¿„«¯½Î×_Ù±`}®='’É6œ²7Ú¬ÖjÐõÖ$dŒr¹Œ™i}PŽîóµpDrX[=ÀyVN¥R%€Çû;àk`ꈟ¹ b¸26hL8GµZhZö–fÅìì,üÔ¬¿]€ÓÇüÌŽHŠ¡c„—lñ‹]7©;à/‹ ¾æ§ûè'ÕEÿò"G:œ‡npŒÕjŒ™Ïé#ú£Z­ÀOÍúÛˆxñ-*¯ÖT+‡õ˜~P­VQ( (´ e?†ß.rÑîoFDKU1§þšÅ/¨T«‘.©M~oâësøÐrÿ2#’c(¡Î›Äoµ/Ó€j¥Š|¡%c{ øÅÀÀ üÔ¬¯»ó[|Ë‹Håü8*ȹÞù9œmppÔªäryêôÀ²eËà§f}0ÖžïcnD’˜ÎŸÌ{SeÌ·2Ãepsv —Ë‘ tÉò•+ã;Pßx™9LdŽ×Õµïüv‚$~ù˜Z­Fc] ( ÎZ³Ö×<ý}6`aÆ–« ùµ™öGiý娞Àé›Ú0³_*·ZkÛ9Rãü£1'ÑÏeâÑÓ'`ÞÇ»—¦+Ôç4žÙ WãlÍ|~À³ÆÌ bVE0Æì*…Åvv`aá Þ8z4êbج[¿ù\Þß1]ïA!&Àóغñ+0òCVÃcö5cD#µÓ˜Ùpá4Z‘ûîå4bóîÆ­|Ä8»œÖøØ)9­Wò´§ïï+¿(¯¹ç½åíÄwdv}Ü®g»ŽÍ#!ªUa ††‡cgÕj÷Ýs·½¢1j¶Ÿ}.üÖ«ï5^¿à&ãþ†)½rfÇÍ©?Ô®údlº[ó»Íg2ô"~óÁœ¥R)vÝ|>sÏÛu1Ã##زm›ïùú¿' Ó _óiß Ú-Fnó~ÐlxÜ„bÜ£†x ƒ0ó8p«[G±†ãìî€Á!§Ú•ã¬1UL‹IyøQÏ|ùÔwÜFU¶¥²zJ믴¾³ëÛõ5hÕ±]?°ÓaýæG¹T†Q7üm}þ\°sWhéhÇÅ—\…)¾?…Ãÿÿj»?cÝΫ¨‘Ù+>…úðJ€½vŠq³KÊÌrŠN8¿aÀnVº}œý9€sÃÊGNçp~Ägå<ü¬çÊ_‚x„'LÁô5(Ö]ªGQÏ"M¾ õØuip•J7h•½ý742ŒK/¿"ÜzmbÕêÕ8ûÜsù~ÁÄLAå–;#[X^³‹;ßÛ>ìa*Šåv藍)¼÷ûÅg‚ û›á#+QyÛ_ùžo§Ì]üqÔVϰ¿©ë‘æRg¬.G¥RE¿ÏÚó“ìĪի#9·¦i¸î†·¸-x@+¶¢òî¯ºÌ ‹>ºS7þ Dï&­â·¿ïî÷£vùÇËߋ҆Ëqú²OÂOñ‹YÎ T«ñ1ÆÞzã;122òyk¯¿ãããC½õ¶ÏÜTæÆªsÀ ÃÐBš0 £8qówP]c6<Þ½ø™s`ìÅ/¨o½Êä!(Ó¯~.¨¬:§nú;p­ €t'þÖÁU˜}©º¸ÁÁ ‰‘Ëå°nÃ9ü²¹Él\yõ58'àAHõÓ·Ý~G'0Ö_cpê+{½Œú蜼ùï¡Olv¿hhðIüöP`äâåÕÏ»¬8õD°c)¯Û“7Ý ^v¿S—ýˆß®;fŽ·¨j>¸†«¯¹;.~Mýt€€ ºz¦7bøø>(,^)Ÿu!N¾û›¨­ÍžøLAmÛuX(×0tr?|ÝçÃé ?ˆé¾ž \üöt«E\Ö bëöí˜?ÐÔÐR.~ Ã0°pè ,ßóÏœ:èKžµñ ˜¾úÏQÚp©ó½¹S`Šßz­(JlL€µM÷ øÝo÷¢Zë¡ö³ÏÁåW\…ÁðÏC3À4S§&Q˜<€Ïý7FÞÜ ±4¤ê…q,œ{Nïúêƒ L².~a˜™žDáÅŸbùÁ10ýROùÔF×áôEÅÂ9ïWµÈÄ/×kœLŠÅ"<¿/:ˆJ¢c`ظi3ví¾+W­  „Kœÿñ½ûBjÕk5LNM¨È•¦0öê#>¶“/B©{;i}hJk.BqýeXÜú{€V°‰¿Î9f¦gP®”00}c¯>†¡SÏc`æ0À½WÜUÇ7¢´îb,n¹•5Z•(‰:BñËÇÆº®ãµWà7Žâä‰ã(‹žÇjª†U«Wc݆ غu;†Cž]a{ž ×Ó¦¦¦Pç†Ùh8  †üÂIäæA­•ÁêUƒc¨ÆQ^‰ÚèYfwMƒDh#~Kø}UëóNëk¿Ó¸“)~ç³33(UÊö¸ˆª‘;sjå4´Ò< ðÜ ôáU¨Žo€‘±DkæÁ3µê%~}-9ãÒ(~»ºR ~7P*Q©”Q.—¡©*´\ccã‹Í÷ˆÄ@×uLMM¨s0Æ­†&™$`«Q‘ø{ƒsŽÙ¹YTJe;Z‚UÏN=A|IÆðuG ®N¬©X¹r%¦§§ÁºÙÐ8`62!hn‰ŸKâÄ’\fŸ¶QH!> "LCj°"7¤™I†“Î%ñKiŒ5+ VÜ` X>19Ì¢T.Yâ‡mº¶³ÚFÊ­Ï1pë3©µ~8¸%~§>Å9…§6Ôwòo¼&.iR½&¡ž“Š¿»w‰ªiX¾|9fffÁ­ÝNÅ„7ÝùE«àÒRºóoS¶¦58}yÑ"í; È°ïü¼)ݼa5¥I¿íÏ'€ñ‰ `Ž¡T*ÛQ•³~_Ü­a7C˜07ë‘ÉÊd€óÎæÔ‘}ý`Ö% Õ“ðr3ÑÉ.iR½&­ž“†¿‚ôR-‡å˜apGØV+3Û›¶‹M'Ò­–gÞ$šÂ~qgñc§Y¯¹8'kÈ5Ë… ¤ð6a­r||;r© É᜜K)ìwjÑü—Âþ†ú¦ÐZOö \ªSæ¨òN@ÌzN±˜SÑr9LL,‡¢©öÝÉnPpéóËé€~6÷ùc㤈@ˆ¿©ÏÉš~'¹/:66ŽçÎÏìÚACŸ’ø³ë¸³…Vh­O ¡N]Ó¤zMz='ßwê5§aÙ²e˜›ç†Ó‰4o±ïȨš†¡!»ŸjwC)ì÷\>0 R©Z*§°?ÄnÀRhš†ˆñ@û./âSšç÷\.B¡Ð0@óüéBó}óÈÐT¬0`†¨£Á%cÝW.…ýr³‹4¢•œ¦œ£V«9Ý-¹Q×\ ûëÕsLIT@FQUä ó¶˜yįyÁŠöh O w´\` µš&­pF÷à’&=fê9¶hsgæ£.C_†z]·^‰9LµÒì0Öi”̉ˆ0ëÚz(“îêv‚0;…ê9æhǦ'£.A‘¸A@‚ üƒ € 2 Ad2‚È0d‘aþä‡êok\IEND®B`‚calamares-3.2.20/src/branding/default/stylesheet.qss000066400000000000000000000016111362604102500224440ustar00rootroot00000000000000/* A branding component can ship a stylesheet (like this one) which is applied to parts of the Calamares user-interface. In principle, all parts can be styled through CSS. Missing parts should be filed as issues. The IDs are based on the object names in the C++ code. Documentation for styling Qt Widgets through a stylesheet can be found at https://doc.qt.io/qt-5/stylesheet-examples.html In Calamares, styling widget classes is supported (e.g. using `QComboBox` as a selector). You can also use specific object names (ids), which you can find through debugging tools. */ /* Main application window. #mainApp { } #logoApp { } #sidebarApp { } #sidebarMenuApp { } */ /* Partitioning module. #bootInfoIcon { } #bootInfoLable { } #deviceInfoIcon { } #defineInfoLabel { } #scrollAreaWidgetContents { } #partitionBarView { } */ /* Licensing module. #licenseItem { } #licenseItemFullText { } */ calamares-3.2.20/src/calamares/000077500000000000000000000000001362604102500162445ustar00rootroot00000000000000calamares-3.2.20/src/calamares/CMakeLists.txt000066400000000000000000000034101362604102500210020ustar00rootroot00000000000000set( calamaresSources main.cpp CalamaresApplication.cpp CalamaresWindow.cpp DebugWindow.cpp VariantModel.cpp progresstree/ProgressTreeDelegate.cpp progresstree/ProgressTreeItem.cpp progresstree/ProgressTreeModel.cpp progresstree/ProgressTreeView.cpp progresstree/ViewStepItem.cpp ) include_directories( . ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR}/../libcalamares ${CMAKE_SOURCE_DIR}/src/libcalamares ${CMAKE_SOURCE_DIR}/src//libcalamaresui ${CMAKE_SOURCE_DIR} ) # Translations include( CalamaresAddTranslations ) add_calamares_translations( ${CALAMARES_TRANSLATION_LANGUAGES} ) set( final_src ${calamaresSources} ${calamaresRc} ${trans_outfile} ) add_executable( calamares_bin ${final_src} ) set_target_properties(calamares_bin PROPERTIES ENABLE_EXPORTS TRUE RUNTIME_OUTPUT_NAME calamares ) calamares_automoc( calamares_bin ) calamares_autouic( calamares_bin ) target_link_libraries( calamares_bin PRIVATE ${CALAMARES_LIBRARIES} calamaresui Qt5::Core Qt5::Widgets KF5::CoreAddons ) if( WITH_KF5Crash ) target_link_libraries( calamares_bin PRIVATE KF5::Crash ) target_compile_definitions( calamares_bin PRIVATE WITH_KF5Crash ) endif() install( TARGETS calamares_bin BUNDLE DESTINATION . RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ) install( FILES ${CMAKE_SOURCE_DIR}/data/images/squid.svg RENAME calamares.svg DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/scalable/apps ) if( BUILD_TESTING ) add_executable( loadmodule testmain.cpp ) target_link_libraries( loadmodule ${CALAMARES_LIBRARIES} Qt5::Core Qt5::Widgets calamaresui ) # Don't install, it's just for enable_testing endif() calamares-3.2.20/src/calamares/CalamaresApplication.cpp000066400000000000000000000265471362604102500230420ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "CalamaresApplication.h" #include "CalamaresConfig.h" #include "CalamaresVersion.h" #include "CalamaresWindow.h" #include "progresstree/ProgressTreeModel.h" #include "progresstree/ProgressTreeView.h" #include "Branding.h" #include "JobQueue.h" #include "Settings.h" #include "ViewManager.h" #include "modulesystem/ModuleManager.h" #include "utils/CalamaresUtilsGui.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Dirs.h" #include "utils/Logger.h" #include "utils/Retranslator.h" #include "viewpages/ViewStep.h" #include #include #include #include #include /// @brief Convenience for "are the settings in debug mode" static bool isDebug() { return Calamares::Settings::instance() && Calamares::Settings::instance()->debugMode(); } CalamaresApplication::CalamaresApplication( int& argc, char* argv[] ) : QApplication( argc, argv ) , m_mainwindow( nullptr ) , m_moduleManager( nullptr ) { // Setting the organization name makes the default cache // directory -- where Calamares stores logs, for instance -- // //, so we end up with ~/.cache/Calamares/calamares/ // which is excessively squidly. // // setOrganizationName( QStringLiteral( CALAMARES_ORGANIZATION_NAME ) ); setOrganizationDomain( QStringLiteral( CALAMARES_ORGANIZATION_DOMAIN ) ); setApplicationName( QStringLiteral( CALAMARES_APPLICATION_NAME ) ); setApplicationVersion( QStringLiteral( CALAMARES_VERSION ) ); QFont f = font(); CalamaresUtils::setDefaultFontSize( f.pointSize() ); } void CalamaresApplication::init() { Logger::setupLogfile(); cDebug() << "Calamares version:" << CALAMARES_VERSION; cDebug() << " languages:" << QString( CALAMARES_TRANSLATION_LANGUAGES ).replace( ";", ", " ); if ( !Calamares::Settings::instance() ) { cError() << "Must create Calamares::Settings before the application."; ::exit( 1 ); } initQmlPath(); initBranding(); CalamaresUtils::installTranslator( QLocale::system(), QString(), this ); setQuitOnLastWindowClosed( false ); setWindowIcon( QIcon( Calamares::Branding::instance()->imagePath( Calamares::Branding::ProductIcon ) ) ); cDebug() << "STARTUP: initSettings, initQmlPath, initBranding done"; initModuleManager(); //also shows main window cDebug() << "STARTUP: initModuleManager: module init started"; } CalamaresApplication::~CalamaresApplication() { Logger::CDebug( Logger::LOGVERBOSE ) << "Shutting down Calamares..."; Logger::CDebug( Logger::LOGVERBOSE ) << Logger::SubEntry << "Finished shutdown."; } CalamaresApplication* CalamaresApplication::instance() { return qobject_cast< CalamaresApplication* >( QApplication::instance() ); } CalamaresWindow* CalamaresApplication::mainWindow() { return m_mainwindow; } static QStringList qmlDirCandidates( bool assumeBuilddir ) { static const char QML[] = "qml"; QStringList qmlDirs; if ( CalamaresUtils::isAppDataDirOverridden() ) { qmlDirs << CalamaresUtils::appDataDir().absoluteFilePath( QML ); } else { if ( assumeBuilddir ) { qmlDirs << QDir::current().absoluteFilePath( "src/qml" ); // In build-dir } if ( CalamaresUtils::haveExtraDirs() ) for ( auto s : CalamaresUtils::extraDataDirs() ) { qmlDirs << ( s + QML ); } qmlDirs << CalamaresUtils::appDataDir().absoluteFilePath( QML ); } return qmlDirs; } static QStringList brandingFileCandidates( bool assumeBuilddir, const QString& brandingFilename ) { QStringList brandingPaths; if ( CalamaresUtils::isAppDataDirOverridden() ) { brandingPaths << CalamaresUtils::appDataDir().absoluteFilePath( brandingFilename ); } else { if ( assumeBuilddir ) { brandingPaths << ( QDir::currentPath() + QStringLiteral( "/src/" ) + brandingFilename ); } if ( CalamaresUtils::haveExtraDirs() ) for ( auto s : CalamaresUtils::extraDataDirs() ) { brandingPaths << ( s + brandingFilename ); } brandingPaths << QDir( CMAKE_INSTALL_FULL_SYSCONFDIR "/calamares/" ).absoluteFilePath( brandingFilename ); brandingPaths << CalamaresUtils::appDataDir().absoluteFilePath( brandingFilename ); } return brandingPaths; } void CalamaresApplication::initQmlPath() { QDir importPath; // Right now, current-dir QStringList qmlDirCandidatesByPriority = qmlDirCandidates( isDebug() ); bool found = false; foreach ( const QString& path, qmlDirCandidatesByPriority ) { QDir dir( path ); if ( dir.exists() && dir.isReadable() ) { importPath = dir; found = true; break; } } if ( !found || !importPath.exists() || !importPath.isReadable() ) { cError() << "Cowardly refusing to continue startup without a QML directory." << Logger::DebugList( qmlDirCandidatesByPriority ); if ( CalamaresUtils::isAppDataDirOverridden() ) { cError() << "FATAL: explicitly configured application data directory is missing qml/"; } else { cError() << "FATAL: none of the expected QML paths exist."; } ::exit( EXIT_FAILURE ); } cDebug() << "Using Calamares QML directory" << importPath.absolutePath(); CalamaresUtils::setQmlModulesDir( importPath ); } void CalamaresApplication::initBranding() { QString brandingComponentName = Calamares::Settings::instance()->brandingComponentName(); if ( brandingComponentName.simplified().isEmpty() ) { cError() << "FATAL: branding component not set in settings.conf"; ::exit( EXIT_FAILURE ); } QString brandingDescriptorSubpath = QString( "branding/%1/branding.desc" ).arg( brandingComponentName ); QStringList brandingFileCandidatesByPriority = brandingFileCandidates( isDebug(), brandingDescriptorSubpath ); QFileInfo brandingFile; bool found = false; foreach ( const QString& path, brandingFileCandidatesByPriority ) { QFileInfo pathFi( path ); if ( pathFi.exists() && pathFi.isReadable() ) { brandingFile = pathFi; found = true; break; } } if ( !found || !brandingFile.exists() || !brandingFile.isReadable() ) { cError() << "Cowardly refusing to continue startup without branding." << Logger::DebugList( brandingFileCandidatesByPriority ); if ( CalamaresUtils::isAppDataDirOverridden() ) { cError() << "FATAL: explicitly configured application data directory is missing" << brandingComponentName; } else { cError() << "FATAL: none of the expected branding descriptor file paths exist."; } ::exit( EXIT_FAILURE ); } new Calamares::Branding( brandingFile.absoluteFilePath(), this ); } void CalamaresApplication::initModuleManager() { m_moduleManager = new Calamares::ModuleManager( Calamares::Settings::instance()->modulesSearchPaths(), this ); connect( m_moduleManager, &Calamares::ModuleManager::initDone, this, &CalamaresApplication::initView ); m_moduleManager->init(); } /** @brief centers the widget @p w on (a) screen * * This tries to duplicate the (deprecated) qApp->desktop()->availableGeometry() * placement by iterating over screens and putting Calamares in the first * one where it fits; this is *generally* the primary screen. * * With debugging, it would look something like this (2 screens attached, * primary at +1080+240 because I have a very strange X setup). Before * being mapped, the Calamares window is at +0+0 but does have a size. * The first screen's geometry includes the offset from the origin in * screen coordinates. * * Proposed window size: 1024 520 * Window QRect(0,0 1024x520) * Screen QRect(1080,240 2560x1440) * Moving QPoint(1848,700) * Screen QRect(0,0 1080x1920) * */ static void centerWindowOnScreen( QWidget* w ) { QList< QScreen* > screens = qApp->screens(); QPoint windowCenter = w->rect().center(); QSize windowSize = w->rect().size(); for ( const auto* screen : screens ) { QSize screenSize = screen->availableGeometry().size(); if ( ( screenSize.width() >= windowSize.width() ) && ( screenSize.height() >= windowSize.height() ) ) { w->move( screen->availableGeometry().center() - windowCenter ); break; } } } void CalamaresApplication::initView() { cDebug() << "STARTUP: initModuleManager: all modules init done"; initJobQueue(); cDebug() << "STARTUP: initJobQueue done"; m_mainwindow = new CalamaresWindow(); //also creates ViewManager connect( m_moduleManager, &Calamares::ModuleManager::modulesLoaded, this, &CalamaresApplication::initViewSteps ); connect( m_moduleManager, &Calamares::ModuleManager::modulesFailed, this, &CalamaresApplication::initFailed ); QTimer::singleShot( 0, m_moduleManager, &Calamares::ModuleManager::loadModules ); if ( Calamares::Branding::instance() && Calamares::Branding::instance()->windowPlacementCentered() ) { centerWindowOnScreen( m_mainwindow ); } cDebug() << "STARTUP: CalamaresWindow created; loadModules started"; } void CalamaresApplication::initViewSteps() { cDebug() << "STARTUP: loadModules for all modules done"; m_moduleManager->checkRequirements(); if ( Calamares::Branding::instance()->windowMaximize() ) { m_mainwindow->setWindowFlag( Qt::FramelessWindowHint ); m_mainwindow->showMaximized(); } else { m_mainwindow->show(); } ProgressTreeModel* m = new ProgressTreeModel( nullptr ); ProgressTreeView::instance()->setModel( m ); cDebug() << "STARTUP: Window now visible and ProgressTreeView populated"; const auto steps = Calamares::ViewManager::instance()->viewSteps(); cDebug() << Logger::SubEntry << steps.count() << "view steps loaded."; // Tell the first view that it's been shown. if ( steps.count() > 0 ) { steps[ 0 ]->onActivate(); } } void CalamaresApplication::initFailed( const QStringList& l ) { cError() << "STARTUP: failed modules are" << l; m_mainwindow->show(); } void CalamaresApplication::initJobQueue() { Calamares::JobQueue* jobQueue = new Calamares::JobQueue( this ); new CalamaresUtils::System( Calamares::Settings::instance()->doChroot(), this ); Calamares::Branding::instance()->setGlobals( jobQueue->globalStorage() ); } calamares-3.2.20/src/calamares/CalamaresApplication.h000066400000000000000000000041051362604102500224710ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2018-2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef CALAMARESAPPLICATION_H #define CALAMARESAPPLICATION_H #include class CalamaresWindow; namespace Calamares { class ModuleManager; } /** * @brief The CalamaresApplication class extends QApplication to handle * Calamares startup and lifetime of main components. */ class CalamaresApplication : public QApplication { Q_OBJECT public: CalamaresApplication( int& argc, char* argv[] ); virtual ~CalamaresApplication(); /** * @brief init handles the first part of Calamares application startup. * After the main window shows up, the latter part of the startup sequence * (including modules loading) happens asynchronously. */ void init(); static CalamaresApplication* instance(); /** * @brief mainWindow returns the Calamares application main window. */ CalamaresWindow* mainWindow(); private slots: void initView(); void initViewSteps(); void initFailed( const QStringList& l ); private: // Initialization steps happen in this order void initQmlPath(); void initBranding(); void initModuleManager(); void initJobQueue(); CalamaresWindow* m_mainwindow; Calamares::ModuleManager* m_moduleManager; }; #endif // CALAMARESAPPLICATION_H calamares-3.2.20/src/calamares/CalamaresVersion.h.in000066400000000000000000000014071362604102500222620ustar00rootroot00000000000000#ifndef CALAMARES_VERSION_H #define CALAMARES_VERSION_H #cmakedefine CALAMARES_ORGANIZATION_NAME "${CALAMARES_ORGANIZATION_NAME}" #cmakedefine CALAMARES_ORGANIZATION_DOMAIN "${CALAMARES_ORGANIZATION_DOMAIN}" #cmakedefine CALAMARES_APPLICATION_NAME "${CALAMARES_APPLICATION_NAME}" #cmakedefine CALAMARES_VERSION "${CALAMARES_VERSION}" #cmakedefine CALAMARES_VERSION_SHORT "${CALAMARES_VERSION_SHORT}" #cmakedefine CALAMARES_VERSION_MAJOR "${CALAMARES_VERSION_MAJOR}" #cmakedefine CALAMARES_VERSION_MINOR "${CALAMARES_VERSION_MINOR}" #cmakedefine CALAMARES_VERSION_PATCH "${CALAMARES_VERSION_PATCH}" #cmakedefine CALAMARES_VERSION_RC "${CALAMARES_VERSION_RC}" #cmakedefine CALAMARES_TRANSLATION_LANGUAGES "${CALAMARES_TRANSLATION_LANGUAGES}" #endif // CALAMARES_VERSION_H calamares-3.2.20/src/calamares/CalamaresWindow.cpp000066400000000000000000000173571362604102500220450ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2017-2018, Adriaan de Groot * Copyright 2018, Raul Rodrigo Segura (raurodse) * Copyright 2019, Collabora Ltd * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "CalamaresWindow.h" #include "Branding.h" #include "DebugWindow.h" #include "Settings.h" #include "ViewManager.h" #include "progresstree/ProgressTreeView.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" #include "utils/Retranslator.h" #include #include #include #include #include #include #include #include static inline int windowDimensionToPixels( const Calamares::Branding::WindowDimension& u ) { if ( !u.isValid() ) { return 0; } if ( u.unit() == Calamares::Branding::WindowDimensionUnit::Pixies ) { return static_cast< int >( u.value() ); } if ( u.unit() == Calamares::Branding::WindowDimensionUnit::Fonties ) { return static_cast< int >( u.value() * CalamaresUtils::defaultFontHeight() ); } return 0; } CalamaresWindow::CalamaresWindow( QWidget* parent ) : QWidget( parent ) , m_debugWindow( nullptr ) , m_viewManager( nullptr ) { // If we can never cancel, don't show the window-close button if ( Calamares::Settings::instance()->disableCancel() ) { setWindowFlag( Qt::WindowCloseButtonHint, false ); } CALAMARES_RETRANSLATE( setWindowTitle( Calamares::Settings::instance()->isSetupMode() ? tr( "%1 Setup Program" ).arg( *Calamares::Branding::ProductName ) : tr( "%1 Installer" ).arg( *Calamares::Branding::ProductName ) ); ) const Calamares::Branding* const branding = Calamares::Branding::instance(); using CalamaresUtils::windowMinimumHeight; using CalamaresUtils::windowMinimumWidth; using CalamaresUtils::windowPreferredHeight; using CalamaresUtils::windowPreferredWidth; // Needs to match what's checked in DebugWindow this->setObjectName( "mainApp" ); QSize availableSize = qApp->desktop()->availableGeometry( this ).size(); QSize minimumSize( qBound( windowMinimumWidth, availableSize.width(), windowPreferredWidth ), qBound( windowMinimumHeight, availableSize.height(), windowPreferredHeight ) ); setMinimumSize( minimumSize ); cDebug() << "Available desktop" << availableSize << "minimum size" << minimumSize; auto brandingSizes = branding->windowSize(); int w = qBound( minimumSize.width(), windowDimensionToPixels( brandingSizes.first ), availableSize.width() ); int h = qBound( minimumSize.height(), windowDimensionToPixels( brandingSizes.second ), availableSize.height() ); cDebug() << Logger::SubEntry << "Proposed window size:" << w << h; resize( w, h ); QBoxLayout* mainLayout = new QHBoxLayout; setLayout( mainLayout ); QWidget* sideBox = new QWidget( this ); sideBox->setObjectName( "sidebarApp" ); mainLayout->addWidget( sideBox ); QBoxLayout* sideLayout = new QVBoxLayout; sideBox->setLayout( sideLayout ); // Set this attribute into qss file sideBox->setFixedWidth( qBound( 100, CalamaresUtils::defaultFontHeight() * 12, w < windowPreferredWidth ? 100 : 190 ) ); sideBox->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ); QHBoxLayout* logoLayout = new QHBoxLayout; sideLayout->addLayout( logoLayout ); logoLayout->addStretch(); QLabel* logoLabel = new QLabel( sideBox ); logoLabel->setObjectName( "logoApp" ); //Define all values into qss file { QPalette plt = sideBox->palette(); sideBox->setAutoFillBackground( true ); plt.setColor( sideBox->backgroundRole(), branding->styleString( Calamares::Branding::SidebarBackground ) ); plt.setColor( sideBox->foregroundRole(), branding->styleString( Calamares::Branding::SidebarText ) ); sideBox->setPalette( plt ); logoLabel->setPalette( plt ); } logoLabel->setAlignment( Qt::AlignCenter ); logoLabel->setFixedSize( 80, 80 ); logoLabel->setPixmap( branding->image( Calamares::Branding::ProductLogo, logoLabel->size() ) ); logoLayout->addWidget( logoLabel ); logoLayout->addStretch(); ProgressTreeView* tv = new ProgressTreeView( sideBox ); sideLayout->addWidget( tv ); tv->setFocusPolicy( Qt::NoFocus ); if ( Calamares::Settings::instance()->debugMode() || ( Logger::logLevel() >= Logger::LOGVERBOSE ) ) { QPushButton* debugWindowBtn = new QPushButton; debugWindowBtn->setObjectName( "debugButton" ); CALAMARES_RETRANSLATE( debugWindowBtn->setText( tr( "Show debug information" ) ); ) sideLayout->addWidget( debugWindowBtn ); debugWindowBtn->setFlat( true ); debugWindowBtn->setCheckable( true ); connect( debugWindowBtn, &QPushButton::clicked, this, [=]( bool checked ) { if ( checked ) { m_debugWindow = new Calamares::DebugWindow(); m_debugWindow->show(); connect( m_debugWindow.data(), &Calamares::DebugWindow::closed, this, [=]() { m_debugWindow->deleteLater(); debugWindowBtn->setChecked( false ); } ); } else { if ( m_debugWindow ) { m_debugWindow->deleteLater(); } } } ); } CalamaresUtils::unmarginLayout( sideLayout ); CalamaresUtils::unmarginLayout( mainLayout ); m_viewManager = Calamares::ViewManager::instance( this ); if ( branding->windowExpands() ) { connect( m_viewManager, &Calamares::ViewManager::enlarge, this, &CalamaresWindow::enlarge ); } // NOTE: Although the ViewManager has a signal cancelEnabled() that // signals when the state of the cancel button changes (in // particular, to disable cancel during the exec phase), // we don't connect to it here. Changing the window flag // for the close button causes uncomfortable window flashing // and requires an extra show() (at least with KWin/X11) which // is too annoying. Instead, leave it up to ignoring-the-quit- // event, which is also the ViewManager's responsibility. mainLayout->addWidget( m_viewManager->centralWidget() ); setStyleSheet( Calamares::Branding::instance()->stylesheet() ); } void CalamaresWindow::enlarge( QSize enlarge ) { auto mainGeometry = this->geometry(); QSize availableSize = qApp->desktop()->availableGeometry( this ).size(); auto h = qBound( 0, mainGeometry.height() + enlarge.height(), availableSize.height() ); auto w = this->size().width(); resize( w, h ); } void CalamaresWindow::closeEvent( QCloseEvent* event ) { if ( ( !m_viewManager ) || m_viewManager->confirmCancelInstallation() ) { event->accept(); qApp->quit(); } else { event->ignore(); } } calamares-3.2.20/src/calamares/CalamaresWindow.h000066400000000000000000000033201362604102500214730ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2017-2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef CALAMARESWINDOW_H #define CALAMARESWINDOW_H #include #include namespace Calamares { class DebugWindow; class ViewManager; } // namespace Calamares /** * @brief The CalamaresWindow class represents the main window of the Calamares UI. */ class CalamaresWindow : public QWidget { Q_OBJECT public: CalamaresWindow( QWidget* parent = nullptr ); virtual ~CalamaresWindow() override {} public slots: /** * This asks the main window to grow by @p enlarge pixels, to accomodate * larger-than-expected window contents. The enlargement may be silently * ignored. */ void enlarge( QSize enlarge ); protected: virtual void closeEvent( QCloseEvent* e ) override; private: QPointer< Calamares::DebugWindow > m_debugWindow; // Managed by self Calamares::ViewManager* m_viewManager; }; #endif // CALAMARESWINDOW_H calamares-3.2.20/src/calamares/DebugWindow.cpp000066400000000000000000000202571362604102500211740ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2015-2016, Teo Mrnjavac * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "DebugWindow.h" #include "ui_DebugWindow.h" #include "VariantModel.h" #include "Branding.h" #include "modulesystem/Module.h" #include "modulesystem/ModuleManager.h" #include "GlobalStorage.h" #include "Job.h" #include "JobQueue.h" #include "utils/Logger.h" #include "utils/Retranslator.h" #ifdef WITH_PYTHONQT #include "ViewManager.h" #include "viewpages/PythonQtViewStep.h" #include #endif #include #include #include #include /** * @brief crash makes Calamares crash immediately. */ static void crash() { volatile int* a = nullptr; *a = 1; } /// @brief Print out the widget tree (names) in indented form. static void dumpWidgetTree( QDebug& deb, const QWidget* widget, int depth ) { if ( !widget ) { return; } deb << Logger::Continuation; for ( int i = 0; i < depth; ++i ) { deb << ' '; } deb << widget->objectName(); for ( const auto* w : widget->findChildren< QWidget* >( QString(), Qt::FindDirectChildrenOnly ) ) { dumpWidgetTree( deb, w, depth + 1 ); } } namespace Calamares { DebugWindow::DebugWindow() : QWidget( nullptr ) , m_ui( new Ui::DebugWindow ) , m_globals( JobQueue::instance()->globalStorage()->data() ) , m_globals_model( std::make_unique< VariantModel >( &m_globals ) ) , m_module_model( std::make_unique< VariantModel >( &m_module ) ) { GlobalStorage* gs = JobQueue::instance()->globalStorage(); m_ui->setupUi( this ); m_ui->globalStorageView->setModel( m_globals_model.get() ); m_ui->globalStorageView->expandAll(); // Do above when the GS changes, too connect( gs, &GlobalStorage::changed, this, [=] { m_globals = JobQueue::instance()->globalStorage()->data(); m_globals_model->reload(); m_ui->globalStorageView->expandAll(); } ); // JobQueue page m_ui->jobQueueText->setReadOnly( true ); connect( JobQueue::instance(), &JobQueue::queueChanged, this, [this]( const JobList& jobs ) { QStringList text; for ( const auto& job : jobs ) { text.append( job->prettyName() ); } m_ui->jobQueueText->setText( text.join( '\n' ) ); } ); // Modules page QStringList modulesKeys; for ( const auto& m : ModuleManager::instance()->loadedInstanceKeys() ) { modulesKeys << m.toString(); } QStringListModel* modulesModel = new QStringListModel( modulesKeys ); m_ui->modulesListView->setModel( modulesModel ); m_ui->modulesListView->setSelectionMode( QAbstractItemView::SingleSelection ); m_ui->moduleConfigView->setModel( m_module_model.get() ); #ifdef WITH_PYTHONQT QPushButton* pythonConsoleButton = new QPushButton; pythonConsoleButton->setText( "Attach Python console" ); m_ui->modulesVerticalLayout->insertWidget( 1, pythonConsoleButton ); pythonConsoleButton->hide(); QObject::connect( pythonConsoleButton, &QPushButton::clicked, this, [this, moduleConfigModel] { QString moduleName = m_ui->modulesListView->currentIndex().data().toString(); Module* module = ModuleManager::instance()->moduleInstance( moduleName ); if ( module->interface() != Module::Interface::PythonQt || module->type() != Module::Type::View ) return; for ( ViewStep* step : ViewManager::instance()->viewSteps() ) { if ( step->moduleInstanceKey() == module->instanceKey() ) { PythonQtViewStep* pqvs = qobject_cast< PythonQtViewStep* >( step ); if ( pqvs ) { QWidget* consoleWindow = new QWidget; QWidget* console = pqvs->createScriptingConsole(); console->setParent( consoleWindow ); QVBoxLayout* layout = new QVBoxLayout; consoleWindow->setLayout( layout ); layout->addWidget( console ); QHBoxLayout* bottomLayout = new QHBoxLayout; layout->addLayout( bottomLayout ); QLabel* bottomLabel = new QLabel( consoleWindow ); bottomLayout->addWidget( bottomLabel ); QString line = QString( "Module: %1
" "Python class: %2" ) .arg( module->instanceKey() ) .arg( console->property( "classname" ).toString() ); bottomLabel->setText( line ); QPushButton* closeButton = new QPushButton( consoleWindow ); closeButton->setText( "&Close" ); QObject::connect( closeButton, &QPushButton::clicked, [consoleWindow] { consoleWindow->close(); } ); bottomLayout->addWidget( closeButton ); bottomLabel->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ); consoleWindow->setParent( this ); consoleWindow->setWindowFlags( Qt::Window ); consoleWindow->setWindowTitle( "Calamares Python console" ); consoleWindow->setAttribute( Qt::WA_DeleteOnClose, true ); consoleWindow->showNormal(); break; } } } } ); #endif connect( m_ui->modulesListView->selectionModel(), &QItemSelectionModel::selectionChanged, this, [this #ifdef WITH_PYTHONQT , pythonConsoleButton #endif ] { QString moduleName = m_ui->modulesListView->currentIndex().data().toString(); Module* module = ModuleManager::instance()->moduleInstance( moduleName ); if ( module ) { m_module = module->configurationMap(); m_module_model->reload(); m_ui->moduleConfigView->expandAll(); m_ui->moduleTypeLabel->setText( module->typeString() ); m_ui->moduleInterfaceLabel->setText( module->interfaceString() ); #ifdef WITH_PYTHONQT pythonConsoleButton->setVisible( module->interface() == Module::Interface::PythonQt && module->type() == Module::Type::View ); #endif } } ); // Tools page connect( m_ui->crashButton, &QPushButton::clicked, this, [] { ::crash(); } ); connect( m_ui->reloadStylesheetButton, &QPushButton::clicked, []() { for ( auto* w : qApp->topLevelWidgets() ) { // Needs to match what's set in CalamaresWindow if ( w->objectName() == QStringLiteral( "mainApp" ) ) { w->setStyleSheet( Calamares::Branding::instance()->stylesheet() ); } } } ); connect( m_ui->widgetTreeButton, &QPushButton::clicked, []() { for ( auto* w : qApp->topLevelWidgets() ) { Logger::CDebug deb; dumpWidgetTree( deb, w, 0 ); } } ); CALAMARES_RETRANSLATE( m_ui->retranslateUi( this ); setWindowTitle( tr( "Debug information" ) ); ) } void DebugWindow::closeEvent( QCloseEvent* e ) { Q_UNUSED( e ) emit closed(); } } // namespace Calamares calamares-3.2.20/src/calamares/DebugWindow.h000066400000000000000000000027061362604102500206400ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2015, Teo Mrnjavac * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef CALAMARES_DEBUGWINDOW_H #define CALAMARES_DEBUGWINDOW_H #include "VariantModel.h" #include #include #include namespace Calamares { // From the .ui file namespace Ui { class DebugWindow; } class DebugWindow : public QWidget { Q_OBJECT public: explicit DebugWindow(); signals: void closed(); protected: void closeEvent( QCloseEvent* e ) override; private: Ui::DebugWindow* m_ui; QVariant m_globals; QVariant m_module; std::unique_ptr< VariantModel > m_globals_model; std::unique_ptr< VariantModel > m_module_model; }; } // namespace Calamares #endif calamares-3.2.20/src/calamares/DebugWindow.ui000066400000000000000000000076371362604102500210360ustar00rootroot00000000000000 Calamares::DebugWindow 0 0 962 651 Form 2 GlobalStorage JobQueue Modules Type: none Interface: none Tools Crash now Reload Stylesheet Widget Tree Qt::Vertical 20 40 calamares-3.2.20/src/calamares/VariantModel.cpp000066400000000000000000000136141362604102500213420ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "VariantModel.h" static void overallLength( const QVariant& item, quintptr& c, quintptr parent, VariantModel::IndexVector* skiplist ) { if ( skiplist ) { skiplist->append( parent ); } parent = c++; if ( item.canConvert< QVariantList >() ) { for ( const auto& subitem : item.toList() ) { overallLength( subitem, c, parent, skiplist ); } } else if ( item.canConvert< QVariantMap >() ) { for ( const auto& subitem : item.toMap() ) { overallLength( subitem, c, parent, skiplist ); } } } static quintptr findNth( const VariantModel::IndexVector& skiplist, quintptr value, int n ) { constexpr const quintptr invalid_index = static_cast< quintptr >( -1 ); if ( n < 0 ) { return invalid_index; } int index = static_cast< int >( value ); while ( ( n >= 0 ) && ( index < skiplist.count() ) ) { if ( skiplist[ index ] == value ) { if ( --n < 0 ) { // It's bigger than 0 return static_cast< quintptr >( index ); } } index++; } return invalid_index; } VariantModel::VariantModel( const QVariant* p ) : m_p( p ) { reload(); } VariantModel::~VariantModel() {} void VariantModel::reload() { constexpr const quintptr invalid_index = static_cast< quintptr >( -1 ); quintptr x = 0; m_rows.clear(); // Start over if ( m_rows.capacity() < 64 ) { m_rows.reserve( 64 ); // Start reasonably-sized } overallLength( *m_p, x, invalid_index, &m_rows ); } int VariantModel::columnCount( const QModelIndex& ) const { return 2; } int VariantModel::rowCount( const QModelIndex& index ) const { quintptr p = index.isValid() ? index.internalId() : 0; return m_rows.count( p ); } QModelIndex VariantModel::index( int row, int column, const QModelIndex& parent ) const { quintptr p = 0; if ( parent.isValid() ) { if ( inRange( parent ) ) { p = parent.internalId(); } } return createIndex( row, column, findNth( m_rows, p, row ) ); } static inline quintptr deref( const VariantModel::IndexVector& v, quintptr i ) { return v[ static_cast< int >( i ) ]; } QModelIndex VariantModel::parent( const QModelIndex& index ) const { if ( !index.isValid() || !inRange( index ) ) { return QModelIndex(); } quintptr p = deref( m_rows, index.internalId() ); if ( p == 0 ) { return QModelIndex(); } if ( !inRange( p ) ) { return QModelIndex(); } quintptr p_pid = deref( m_rows, p ); int row = 0; for ( int i = static_cast< int >( p_pid ); i < static_cast< int >( p ); ++i ) { if ( m_rows[ i ] == p_pid ) { row++; } } return createIndex( row, index.column(), p ); } QVariant VariantModel::data( const QModelIndex& index, int role ) const { if ( role != Qt::DisplayRole ) { return QVariant(); } if ( !index.isValid() ) { return QVariant(); } if ( ( index.column() < 0 ) || ( index.column() > 1 ) ) { return QVariant(); } if ( !inRange( index ) ) { return QVariant(); } const QVariant thing = underlying( parent( index ) ); if ( !thing.isValid() ) { return QVariant(); } if ( thing.canConvert< QVariantMap >() ) { QVariantMap the_map = thing.toMap(); const auto key = the_map.keys().at( index.row() ); if ( index.column() == 0 ) { return key; } else { return the_map[ key ]; } } else if ( thing.canConvert< QVariantList >() ) { if ( index.column() == 0 ) { return index.row(); } else { QVariantList the_list = thing.toList(); return the_list.at( index.row() ); } } else { if ( index.column() == 0 ) { return QVariant(); } else { return thing; } } } QVariant VariantModel::headerData( int section, Qt::Orientation orientation, int role ) const { if ( role != Qt::DisplayRole ) { return QVariant(); } if ( orientation == Qt::Horizontal ) { if ( section == 0 ) { return tr( "Key" ); } else if ( section == 1 ) { return tr( "Value" ); } else { return QVariant(); } } else { return QVariant(); } } const QVariant VariantModel::underlying( const QModelIndex& index ) const { if ( !index.isValid() ) { return *m_p; } const auto& thing = underlying( parent( index ) ); if ( thing.canConvert< QVariantMap >() ) { const auto& the_map = thing.toMap(); return the_map[ the_map.keys()[ index.row() ] ]; } else if ( thing.canConvert< QVariantList >() ) { return thing.toList()[ index.row() ]; } else { return thing; } } calamares-3.2.20/src/calamares/VariantModel.h000066400000000000000000000105061362604102500210040ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef VARIANTMODEL_H #define VARIANTMODEL_H #include #include #include /** @brief A model that operates directly on a QVariant * * A VariantModel operates directly on an underlying * QVariant, treating QVariantMap and QVariantList as * nodes with multiple children. In general, putting * a QVariantMap into a QVariant and passing that into * the model will get you a tree-like model of the * VariantMap's data structure. * * Take care of object lifetimes and that the underlying * QVariant does not change during use. If the QVariant * **does** change, call reload() to re-build the internal * representation of the tree. */ class VariantModel : public QAbstractItemModel { public: /** @brief Auxiliary data * * The nodes of the tree are enumerated into a vector * (of length equal to the number of nodes in the tree + 1) * which are used to do index and parent calculations. */ using IndexVector = QVector< quintptr >; /** @brief Constructor * * The QVariant's lifetime is **not** affected by the model, * so take care that the QVariant lives at least as long as * the model). Also, don't change the QVariant underneath the model. */ VariantModel( const QVariant* p ); ~VariantModel() override; /** @brief Re-build the internal tree * * Call this when the underlying variant is changed, which * might impact how the tree is laid out. */ void reload(); int columnCount( const QModelIndex& index ) const override; int rowCount( const QModelIndex& index ) const override; QModelIndex index( int row, int column, const QModelIndex& parent ) const override; QModelIndex parent( const QModelIndex& index ) const override; QVariant data( const QModelIndex& index, int role ) const override; QVariant headerData( int section, Qt::Orientation orientation, int role ) const override; private: const QVariant* const m_p; /** @brief Tree representation of the variant. * * At index 0 in the vector , we store -1 to indicate the root. * * Then we enumerate all the elements in the tree (by traversing * the variant and using QVariantMap and QVariantList as having * children, and everything else being a leaf node) and at the index * for a child, store the index of its parent. This means that direct * children of the root store a 0 in their indexes, children of the first * child of the root store a 1, and we can "pointer chase" from an index * through parents back to index 0. * * Because of this structure, the value stored at index i must be * less than i (except for index 0, which is special). This makes it * slightly easier to search for a given value *p*, because we can start * at index *p* (or even *p+1*). * * Given an index *i* into the vector corresponding to a child, we know the * parent, but can also count which row this child should have, by counting * *other* indexes before *i* with the same parent (and by the ordering * of values, we can start counting at index *parent-index*). * */ IndexVector m_rows; /// @brief Implementation of walking an index through the variant-tree const QVariant underlying( const QModelIndex& index ) const; /// @brief Helpers for range-checking inline bool inRange( quintptr p ) const { return p < static_cast< quintptr >( m_rows.count() ); } inline bool inRange( const QModelIndex& index ) const { return inRange( index.internalId() ); } }; #endif calamares-3.2.20/src/calamares/main.cpp000066400000000000000000000122361362604102500177000ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac * Copyright 2017-2020, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "CalamaresApplication.h" #include "Settings.h" #include "utils/Dirs.h" #include "utils/Logger.h" #include "utils/Retranslator.h" #include "3rdparty/kdsingleapplicationguard/kdsingleapplicationguard.h" #include #ifdef WITH_KF5Crash #include #endif #include #include #include /** @brief Gets debug-level from -D command-line-option * * If unset, use LOGERROR (corresponding to -D1), although * effectively -D2 is the lowest level you can set for * logging-to-the-console, and everything always gets * logged to the session file). */ static unsigned int debug_level( QCommandLineParser& parser, QCommandLineOption& levelOption ) { if ( !parser.isSet( levelOption ) ) { return Logger::LOGERROR; } bool ok = true; int l = parser.value( levelOption ).toInt( &ok ); if ( !ok || ( l < 0 ) ) { return Logger::LOGVERBOSE; } else { return static_cast< unsigned int >( l ); // l >= 0 } } static void handle_args( CalamaresApplication& a ) { QCommandLineOption debugOption( QStringList { "d", "debug" }, "Also look in current directory for configuration. Implies -D8." ); QCommandLineOption debugLevelOption( QStringLiteral( "D" ), "Verbose output for debugging purposes (0-8).", "level" ); QCommandLineOption debugTxOption( QStringList { "T", "debug-translation" }, "Also look in the current directory for translation." ); QCommandLineOption configOption( QStringList { "c", "config" }, "Configuration directory to use, for testing purposes.", "config" ); QCommandLineOption xdgOption( QStringList { "X", "xdg-config" }, "Use XDG_{CONFIG,DATA}_DIRS as well." ); QCommandLineParser parser; parser.setApplicationDescription( "Distribution-independent installer framework" ); parser.addHelpOption(); parser.addVersionOption(); parser.addOption( debugOption ); parser.addOption( debugLevelOption ); parser.addOption( configOption ); parser.addOption( xdgOption ); parser.addOption( debugTxOption ); parser.process( a ); Logger::setupLogLevel( parser.isSet( debugOption ) ? Logger::LOGVERBOSE : debug_level( parser, debugLevelOption ) ); if ( parser.isSet( configOption ) ) { CalamaresUtils::setAppDataDir( QDir( parser.value( configOption ) ) ); } if ( parser.isSet( xdgOption ) ) { CalamaresUtils::setXdgDirs(); } CalamaresUtils::setAllowLocalTranslation( parser.isSet( debugOption ) || parser.isSet( debugTxOption ) ); Calamares::Settings::init( parser.isSet( debugOption ) ); a.init(); } int main( int argc, char* argv[] ) { CalamaresApplication a( argc, argv ); KAboutData aboutData( "calamares", "Calamares", a.applicationVersion(), "The universal system installer", KAboutLicense::GPL_V3, QString(), QString(), "https://calamares.io", "https://github.com/calamares/calamares/issues" ); KAboutData::setApplicationData( aboutData ); a.setApplicationDisplayName( QString() ); // To avoid putting an extra "Calamares/" into the log-file #ifdef WITH_KF5Crash KCrash::initialize(); // KCrash::setCrashHandler(); KCrash::setDrKonqiEnabled( true ); KCrash::setFlags( KCrash::SaferDialog | KCrash::AlwaysDirectly ); // TODO: umount anything in /tmp/calamares-... as an emergency save function #endif KDSingleApplicationGuard guard( KDSingleApplicationGuard::AutoKillOtherInstances ); if ( guard.isPrimaryInstance() ) { handle_args( a ); return a.exec(); } else { // Here we have not yet set-up the logger system, so qDebug() is ok auto instancelist = guard.instances(); qDebug() << "Calamares is already running, shutting down."; if ( instancelist.count() > 0 ) { qDebug() << "Other running Calamares instances:"; } for ( const auto& i : instancelist ) { qDebug() << " " << i.isValid() << i.pid() << i.arguments(); } return 69; // EX_UNAVAILABLE on FreeBSD } } calamares-3.2.20/src/calamares/progresstree/000077500000000000000000000000001362604102500207705ustar00rootroot00000000000000calamares-3.2.20/src/calamares/progresstree/ProgressTreeDelegate.cpp000066400000000000000000000105711362604102500255570ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2017, 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "ProgressTreeDelegate.h" #include "ProgressTreeModel.h" #include "CalamaresApplication.h" #include "CalamaresWindow.h" #include "Branding.h" #include "utils/CalamaresUtilsGui.h" #include static constexpr int const item_margin = 8; static inline int item_fontsize() { return CalamaresUtils::defaultFontSize() + 4; } QSize ProgressTreeDelegate::sizeHint( const QStyleOptionViewItem& option, const QModelIndex& index ) const { if ( !index.isValid() ) { return option.rect.size(); } QFont font = qApp->font(); font.setPointSize( item_fontsize() ); QFontMetrics fm( font ); int height = fm.height(); height += 2 * item_margin; return QSize( option.rect.width(), height ); } void ProgressTreeDelegate::paint( QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index ) const { QStyleOptionViewItem opt = option; painter->save(); initStyleOption( &opt, index ); opt.text.clear(); painter->setBrush( QColor( Calamares::Branding::instance()->styleString( Calamares::Branding::SidebarBackground ) ) ); painter->setPen( QColor( Calamares::Branding::instance()->styleString( Calamares::Branding::SidebarText ) ) ); paintViewStep( painter, opt, index ); painter->restore(); } void ProgressTreeDelegate::paintViewStep( QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index ) const { QRect textRect = option.rect.adjusted( item_margin, item_margin, -item_margin, -item_margin ); QFont font = qApp->font(); font.setPointSize( item_fontsize() ); font.setBold( false ); painter->setFont( font ); bool isCurrent = false; isCurrent = index.data( ProgressTreeModel::ProgressTreeItemCurrentRole ).toBool(); if ( isCurrent ) { painter->setPen( Calamares::Branding::instance()->styleString( Calamares::Branding::SidebarTextSelect ) ); QString textHighlight = Calamares::Branding::instance()->styleString( Calamares::Branding::SidebarTextHighlight ); if ( textHighlight.isEmpty() ) { painter->setBrush( CalamaresApplication::instance()->mainWindow()->palette().window() ); } else { painter->setBrush( QColor( textHighlight ) ); } } // Draw the text at least once. If it doesn't fit, then shrink the font // being used by 1 pt on each iteration, up to a maximum of maximumShrink // times. On each loop, we'll have to blank out the rectangle again, so this // is an expensive (in terms of drawing operations) thing to do. // // (The loop uses <= because the counter is incremented at the start). static constexpr int const maximumShrink = 4; int shrinkSteps = 0; do { painter->fillRect( option.rect, painter->brush().color() ); shrinkSteps++; QRectF boundingBox; painter->drawText( textRect, Qt::AlignHCenter | Qt::AlignVCenter | Qt::TextSingleLine, index.data().toString(), &boundingBox ); // The extra check here is to avoid the changing-font-size if we're not going to use // it in the next iteration of the loop anyway. if ( ( shrinkSteps <= maximumShrink ) && ( boundingBox.width() > textRect.width() ) ) { font.setPointSize( item_fontsize() - shrinkSteps ); painter->setFont( font ); } else { break; // It fits } } while ( shrinkSteps <= maximumShrink ); } calamares-3.2.20/src/calamares/progresstree/ProgressTreeDelegate.h000066400000000000000000000030631362604102500252220ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef PROGRESSTREEDELEGATE_H #define PROGRESSTREEDELEGATE_H #include /** * @brief The ProgressTreeDelegate class customizes the look and feel of the * ProgressTreeView elements. * @see ProgressTreeView */ class ProgressTreeDelegate : public QStyledItemDelegate { public: using QStyledItemDelegate::QStyledItemDelegate; protected: QSize sizeHint( const QStyleOptionViewItem& option, const QModelIndex& index ) const override; void paint( QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index ) const override; private: void paintViewStep( QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index ) const; }; #endif // PROGRESSTREEDELEGATE_H calamares-3.2.20/src/calamares/progresstree/ProgressTreeItem.cpp000066400000000000000000000033441362604102500247430ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "ProgressTreeItem.h" #include "ProgressTreeModel.h" ProgressTreeItem::ProgressTreeItem( ProgressTreeItem* parent ) { m_parentItem = parent; } ProgressTreeItem::~ProgressTreeItem() { qDeleteAll( m_childItems ); } void ProgressTreeItem::appendChild( ProgressTreeItem* item ) { m_childItems.append( item ); } ProgressTreeItem* ProgressTreeItem::child( int row ) { return m_childItems.value( row ); } int ProgressTreeItem::childCount() const { return m_childItems.count(); } int ProgressTreeItem::columnCount() const { return 1; } int ProgressTreeItem::row() const { if ( m_parentItem ) { return m_parentItem->m_childItems.indexOf( const_cast< ProgressTreeItem* >( this ) ); } return 0; } ProgressTreeItem* ProgressTreeItem::parent() { return m_parentItem; } ProgressTreeRoot::ProgressTreeRoot() : ProgressTreeItem() { } QVariant ProgressTreeRoot::data( int ) const { return QVariant(); } calamares-3.2.20/src/calamares/progresstree/ProgressTreeItem.h000066400000000000000000000033131362604102500244040ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef PROGRESSTREEITEM_H #define PROGRESSTREEITEM_H #include #include /** * @brief The ProgressTreeItem class represents an item in the * ProgressTreeModel/ProgressTreeView. * Each item generally represents a ViewStep. */ class ProgressTreeItem { public: explicit ProgressTreeItem( ProgressTreeItem* parent = nullptr ); virtual ~ProgressTreeItem(); virtual void appendChild( ProgressTreeItem* item ); virtual ProgressTreeItem* child( int row ); virtual int childCount() const; virtual int columnCount() const; virtual QVariant data( int role ) const = 0; virtual int row() const; virtual ProgressTreeItem* parent(); private: QList< ProgressTreeItem* > m_childItems; ProgressTreeItem* m_parentItem; }; class ProgressTreeRoot : public ProgressTreeItem { public: explicit ProgressTreeRoot(); virtual QVariant data( int role ) const; }; #endif // PROGRESSTREEITEM_H calamares-3.2.20/src/calamares/progresstree/ProgressTreeModel.cpp000066400000000000000000000116671362604102500251140ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2017, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "ProgressTreeModel.h" #include "ViewStepItem.h" #include "ViewManager.h" ProgressTreeModel::ProgressTreeModel( QObject* parent ) : QAbstractItemModel( parent ) , m_rootItem( nullptr ) { setupModelData(); } ProgressTreeModel::~ProgressTreeModel() { delete m_rootItem; } Qt::ItemFlags ProgressTreeModel::flags( const QModelIndex& index ) const { if ( !index.isValid() ) { return Qt::ItemFlags(); } return Qt::ItemIsEnabled; } QModelIndex ProgressTreeModel::index( int row, int column, const QModelIndex& parent ) const { if ( !hasIndex( row, column, parent ) ) { return QModelIndex(); } ProgressTreeItem* parentItem; if ( !parent.isValid() ) { parentItem = m_rootItem; } else { parentItem = static_cast< ProgressTreeItem* >( parent.internalPointer() ); } ProgressTreeItem* childItem = parentItem->child( row ); if ( childItem ) { return createIndex( row, column, childItem ); } else { return QModelIndex(); } } QModelIndex ProgressTreeModel::parent( const QModelIndex& index ) const { if ( !index.isValid() ) { return QModelIndex(); } ProgressTreeItem* childItem = static_cast< ProgressTreeItem* >( index.internalPointer() ); ProgressTreeItem* parentItem = childItem->parent(); if ( parentItem == m_rootItem ) { return QModelIndex(); } return createIndex( parentItem->row(), 0, parentItem ); } QVariant ProgressTreeModel::data( const QModelIndex& index, int role ) const { if ( !index.isValid() ) { return QVariant(); } ProgressTreeItem* item = static_cast< ProgressTreeItem* >( index.internalPointer() ); return item->data( role ); } QVariant ProgressTreeModel::headerData( int section, Qt::Orientation orientation, int role ) const { Q_UNUSED( section ) Q_UNUSED( orientation ) Q_UNUSED( role ) return QVariant(); } int ProgressTreeModel::rowCount( const QModelIndex& parent ) const { ProgressTreeItem* parentItem; if ( parent.column() > 0 ) { return 0; } if ( !parent.isValid() ) { parentItem = m_rootItem; } else { parentItem = static_cast< ProgressTreeItem* >( parent.internalPointer() ); } return parentItem->childCount(); } int ProgressTreeModel::columnCount( const QModelIndex& parent ) const { if ( parent.isValid() ) { return static_cast< ProgressTreeItem* >( parent.internalPointer() )->columnCount(); } else { return m_rootItem->columnCount(); } } void ProgressTreeModel::setupModelData() { delete m_rootItem; m_rootItem = new ProgressTreeRoot(); const Calamares::ViewManager* vm = Calamares::ViewManager::instance(); const auto steps = vm->viewSteps(); for ( const Calamares::ViewStep* step : steps ) { m_rootItem->appendChild( new ViewStepItem( step, m_rootItem ) ); } } QModelIndex ProgressTreeModel::indexFromItem( ProgressTreeItem* item ) { if ( !item || !item->parent() ) { return QModelIndex(); } // Reconstructs a QModelIndex from a ProgressTreeItem that is somewhere in the tree. // Traverses the item to the root node, then rebuilds the qmodelindices from there // back down; each int is the row of that item in the parent. /** * In this diagram, if the item is G, childIndexList will contain [0, 2, 0] * * A * D * E * F * G * H * B * C * **/ QList< int > childIndexList; ProgressTreeItem* curItem = item; while ( curItem != m_rootItem ) { int row = curItem->row(); //relative to its parent if ( row < 0 ) // something went wrong, bail { return QModelIndex(); } childIndexList << row; curItem = curItem->parent(); } // Now we rebuild the QModelIndex we need QModelIndex idx; for ( int i = childIndexList.size() - 1; i >= 0; i-- ) { idx = index( childIndexList[ i ], 0, idx ); } return idx; } calamares-3.2.20/src/calamares/progresstree/ProgressTreeModel.h000066400000000000000000000041411362604102500245460ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac * Copyright 2017, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef PROGRESSTREEMODEL_H #define PROGRESSTREEMODEL_H #include class ProgressTreeRoot; class ProgressTreeItem; /** * @brief The ProgressTreeModel class implements a model for the ProgressTreeView. */ class ProgressTreeModel : public QAbstractItemModel { Q_OBJECT public: enum Role { ProgressTreeItemCurrentRole = Qt::UserRole + 11 }; explicit ProgressTreeModel( QObject* parent = nullptr ); virtual ~ProgressTreeModel() override; // Reimplemented from QAbstractItemModel Qt::ItemFlags flags( const QModelIndex& index ) const override; QModelIndex index( int row, int column, const QModelIndex& parent = QModelIndex() ) const override; QModelIndex parent( const QModelIndex& index ) const override; QVariant data( const QModelIndex& index, int role = Qt::DisplayRole ) const override; QVariant headerData( int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const override; int rowCount( const QModelIndex& parent = QModelIndex() ) const override; int columnCount( const QModelIndex& parent = QModelIndex() ) const override; private: void setupModelData(); QModelIndex indexFromItem( ProgressTreeItem* item ); ProgressTreeRoot* m_rootItem; }; #endif // PROGRESSTREEMODEL_H calamares-3.2.20/src/calamares/progresstree/ProgressTreeView.cpp000066400000000000000000000045201362604102500247540ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "ProgressTreeView.h" #include "ProgressTreeDelegate.h" #include "Branding.h" #include "ViewManager.h" ProgressTreeView* ProgressTreeView::s_instance = nullptr; ProgressTreeView* ProgressTreeView::instance() { return s_instance; } ProgressTreeView::ProgressTreeView( QWidget* parent ) : QTreeView( parent ) { s_instance = this; //FIXME: should assert when s_instance gets written and it wasn't nullptr this->setObjectName( "sidebarMenuApp" ); setFrameShape( QFrame::NoFrame ); setContentsMargins( 0, 0, 0, 0 ); setHeaderHidden( true ); setRootIsDecorated( true ); setExpandsOnDoubleClick( true ); setSelectionMode( QAbstractItemView::NoSelection ); setDragDropMode( QAbstractItemView::NoDragDrop ); setAcceptDrops( false ); setUniformRowHeights( false ); setIndentation( 0 ); setSortingEnabled( false ); m_delegate = new ProgressTreeDelegate( this ); setItemDelegate( m_delegate ); QPalette plt = palette(); plt.setColor( QPalette::Base, Calamares::Branding::instance()->styleString( Calamares::Branding::SidebarBackground ) ); setPalette( plt ); } ProgressTreeView::~ProgressTreeView() {} void ProgressTreeView::setModel( QAbstractItemModel* model ) { if ( ProgressTreeView::model() ) { return; } QTreeView::setModel( model ); expandAll(); connect( Calamares::ViewManager::instance(), &Calamares::ViewManager::currentStepChanged, this, [this]() { viewport()->update(); }, Qt::UniqueConnection ); } calamares-3.2.20/src/calamares/progresstree/ProgressTreeView.h000066400000000000000000000031341362604102500244210ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac * Copyright 2017, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef PROGRESSTREEVIEW_H #define PROGRESSTREEVIEW_H #include class ProgressTreeDelegate; /** * @brief The ProgressTreeView class is a modified QTreeView which displays the * available view steps and the user's progress through them. * @note singleton, only access through ProgressTreeView::instance(). */ class ProgressTreeView : public QTreeView { Q_OBJECT public: static ProgressTreeView* instance(); explicit ProgressTreeView( QWidget* parent = nullptr ); virtual ~ProgressTreeView() override; /** * @brief setModel assigns a model to this view. */ void setModel( QAbstractItemModel* model ) override; private: static ProgressTreeView* s_instance; ProgressTreeDelegate* m_delegate; }; #endif // PROGRESSTREEVIEW_H calamares-3.2.20/src/calamares/progresstree/ViewStepItem.cpp000066400000000000000000000053401362604102500240630ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "ViewStepItem.h" #include "ProgressTreeModel.h" #include "Settings.h" #include "ViewManager.h" #include "viewpages/ViewStep.h" ViewStepItem::ViewStepItem( std::function< QString() > prettyName, std::function< const Calamares::ViewStep*() > accessor, ProgressTreeItem* parent ) : ProgressTreeItem( parent ) , m_accessor( accessor ) , m_prettyName( prettyName ) , m_step( nullptr ) { } ViewStepItem::ViewStepItem( const Calamares::ViewStep* step, ProgressTreeItem* parent ) : ProgressTreeItem( parent ) , m_step( step ) { } void ViewStepItem::appendChild( ProgressTreeItem* item ) { Q_ASSERT( false ); Q_UNUSED( item ) } QVariant ViewStepItem::data( int role ) const { if ( role == Qt::DisplayRole ) { return m_step ? m_step->prettyName() : m_prettyName(); } if ( Calamares::Settings::instance()->debugMode() && role == Qt::ToolTipRole ) { QString toolTip( "Debug information" ); if ( m_step ) { toolTip.append( "
Type:\tViewStep" ); toolTip.append( QString( "
Pretty:\t%1" ).arg( m_step->prettyName() ) ); toolTip.append( QString( "
Status:\t%1" ).arg( m_step->prettyStatus() ) ); toolTip.append( QString( "
Source:\t%1" ) .arg( m_step->moduleInstanceKey().isValid() ? m_step->moduleInstanceKey().toString() : QStringLiteral("built-in") ) ); } else { toolTip.append( "
Type:\tDelegate" ); toolTip.append( QString( "
Pretty:\t%1" ).arg( m_prettyName() ) ); } return toolTip; } if ( role == ProgressTreeModel::ProgressTreeItemCurrentRole ) return m_step ? ( Calamares::ViewManager::instance()->currentStep() == m_step ) : ( Calamares::ViewManager::instance()->currentStep() == m_accessor() ); return QVariant(); } calamares-3.2.20/src/calamares/progresstree/ViewStepItem.h000066400000000000000000000033751362604102500235360ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef VIEWSTEPITEM_H #define VIEWSTEPITEM_H #include "ProgressTreeItem.h" #include namespace Calamares { class ViewStep; } class ViewStepItem : public ProgressTreeItem { public: // We take a std::function< QString() > instead of a QString because the view asks for // new strings on LanguageChange, and tr needs to be called again in that case. explicit ViewStepItem( std::function< QString() > prettyName, std::function< const Calamares::ViewStep*() > accessor, ProgressTreeItem* parent = nullptr ); explicit ViewStepItem( const Calamares::ViewStep* step, ProgressTreeItem* parent = nullptr ); void appendChild( ProgressTreeItem* item ) override; QVariant data( int role ) const override; private: const std::function< const Calamares::ViewStep*() > m_accessor; const std::function< QString() > m_prettyName; const Calamares::ViewStep* const m_step; }; #endif // VIEWSTEPITEM_H calamares-3.2.20/src/calamares/testmain.cpp000066400000000000000000000232231362604102500205760ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ /* * This executable loads and runs a Calamares Python module * within a C++ application, in order to test the different * bindings. */ #include "modulesystem/Module.h" #include "utils/Logger.h" #include "utils/Yaml.h" #include "Branding.h" #include "GlobalStorage.h" #include "Job.h" #include "JobQueue.h" #include "Settings.h" #include "ViewManager.h" #include "modulesystem/ModuleManager.h" #include #include #include #include #include #include #include #include struct ModuleConfig { QString moduleName() const { return m_module; } QString configFile() const { return m_jobConfig; } QString language() const { return m_language; } QString globalConfigFile() const { return m_globalConfig; } QString m_module; QString m_jobConfig; QString m_globalConfig; QString m_language; QString m_branding; bool m_ui; }; static ModuleConfig handle_args( QCoreApplication& a ) { QCommandLineOption debugLevelOption( QStringLiteral( "D" ), "Verbose output for debugging purposes (0-8), ignored.", "level" ); QCommandLineOption globalOption( QStringList() << QStringLiteral( "g" ) << QStringLiteral( "global " ), QStringLiteral( "Global settings document" ), "global.yaml" ); QCommandLineOption jobOption( QStringList() << QStringLiteral( "j" ) << QStringLiteral( "job" ), QStringLiteral( "Job settings document" ), "job.yaml" ); QCommandLineOption langOption( QStringList() << QStringLiteral( "l" ) << QStringLiteral( "language" ), QStringLiteral( "Language (global)" ), "languagecode" ); QCommandLineOption brandOption( QStringList() << QStringLiteral( "b" ) << QStringLiteral( "branding" ), QStringLiteral( "Branding directory" ), "path/to/branding.desc", "src/branding/default/branding.desc" ); QCommandLineOption uiOption( QStringList() << QStringLiteral( "U" ) << QStringLiteral( "ui" ), QStringLiteral( "Enable UI" ) ); QCommandLineParser parser; parser.setApplicationDescription( "Calamares module tester" ); parser.addHelpOption(); parser.addVersionOption(); parser.addOption( debugLevelOption ); parser.addOption( globalOption ); parser.addOption( jobOption ); parser.addOption( langOption ); parser.addOption( brandOption ); parser.addOption( uiOption ); parser.addPositionalArgument( "module", "Path or name of module to run." ); parser.addPositionalArgument( "job.yaml", "Path of job settings document to use.", "[job.yaml]" ); parser.process( a ); const QStringList args = parser.positionalArguments(); if ( args.isEmpty() ) { cError() << "Missing path.\n"; parser.showHelp(); } else if ( args.size() > 2 ) { cError() << "More than one path.\n"; parser.showHelp(); } else { QString jobSettings( parser.value( jobOption ) ); if ( jobSettings.isEmpty() && ( args.size() == 2 ) ) { jobSettings = args.at( 1 ); } return ModuleConfig { args.first(), jobSettings, parser.value( globalOption ), parser.value( langOption ), parser.value( brandOption ), parser.isSet( uiOption ) }; } } static Calamares::Module* load_module( const ModuleConfig& moduleConfig ) { QString moduleName = moduleConfig.moduleName(); QFileInfo fi; bool ok = false; QVariantMap descriptor; for ( const QString& prefix : QStringList { "./", "src/modules/", "modules/" } ) { // Could be a complete path, eg. src/modules/dummycpp/module.desc fi = QFileInfo( prefix + moduleName ); if ( fi.exists() && fi.isFile() ) { descriptor = CalamaresUtils::loadYaml( fi, &ok ); } if ( ok ) { break; } // Could be a path without module.desc fi = QFileInfo( prefix + moduleName ); if ( fi.exists() && fi.isDir() ) { fi = QFileInfo( prefix + moduleName + "/module.desc" ); if ( fi.exists() && fi.isFile() ) { descriptor = CalamaresUtils::loadYaml( fi, &ok ); } if ( ok ) { break; } } } if ( !ok ) { cWarning() << "No suitable module descriptor found."; return nullptr; } QString name = descriptor.value( "name" ).toString(); if ( name.isEmpty() ) { cWarning() << "No name found in module descriptor" << fi.absoluteFilePath(); return nullptr; } QString moduleDirectory = fi.absolutePath(); QString configFile( moduleConfig.configFile().isEmpty() ? moduleDirectory + '/' + name + ".conf" : moduleConfig.configFile() ); cDebug() << "Module" << moduleName << "job-configuration:" << configFile; Calamares::Module* module = Calamares::Module::fromDescriptor( descriptor, name, configFile, moduleDirectory ); return module; } /** @brief Create the right kind of QApplication * * Does primitive parsing of argv[] to find the --ui option and returns * a UI-enabled application if it does. * * @p argc must be a reference (to main's argc) because the QCoreApplication * constructors take a reference as well, and that would otherwise be a * reference to a temporary. */ QCoreApplication* createApplication( int& argc, char* argv[] ) { for ( int i = 1; i < argc; ++i ) { if ( !qstrcmp( argv[ i ], "--ui" ) || !qstrcmp( argv[ i ], "-U" ) ) { auto* aw = new QApplication( argc, argv ); aw->setQuitOnLastWindowClosed( true ); return aw; } } return new QCoreApplication( argc, argv ); } int main( int argc, char* argv[] ) { QCoreApplication* aw = createApplication( argc, argv ); Logger::setupLogLevel( Logger::LOGVERBOSE ); ModuleConfig module = handle_args( *aw ); if ( module.moduleName().isEmpty() ) { return 1; } std::unique_ptr< Calamares::Settings > settings_p( Calamares::Settings::init( QString() ) ); std::unique_ptr< Calamares::JobQueue > jobqueue_p( new Calamares::JobQueue( nullptr ) ); QMainWindow* mw = nullptr; auto gs = jobqueue_p->globalStorage(); if ( !module.globalConfigFile().isEmpty() ) { gs->loadYaml( module.globalConfigFile() ); } if ( !module.language().isEmpty() ) { QVariantMap vm; vm.insert( "LANG", module.language() ); gs->insert( "localeConf", vm ); } cDebug() << "Calamares module-loader testing" << module.moduleName(); Calamares::Module* m = load_module( module ); if ( !m ) { cError() << "Could not load module" << module.moduleName(); return 1; } cDebug() << " .. got" << m->name() << m->typeString() << m->interfaceString(); if ( m->type() == Calamares::Module::Type::View ) { mw = module.m_ui ? new QMainWindow() : nullptr; (void)new Calamares::Branding( module.m_branding ); (void)new Calamares::ModuleManager( QStringList(), nullptr ); (void)Calamares::ViewManager::instance( mw ); } if ( !m->isLoaded() ) { m->loadSelf(); } if ( !m->isLoaded() ) { cError() << "Module" << module.moduleName() << "could not be loaded."; return 1; } if ( mw ) { QWidget* w = Calamares::ViewManager::instance()->currentStep()->widget(); w->setParent( mw ); mw->setCentralWidget( w ); w->show(); mw->show(); return aw->exec(); } using TR = Logger::DebugRow< const char*, const QString >; cDebug() << "Module metadata" << TR( "name", m->name() ) << TR( "type", m->typeString() ) << TR( "interface", m->interfaceString() ); cDebug() << "Job outputs:"; Calamares::JobList jobList = m->jobs(); unsigned int failure_count = 0; unsigned int count = 1; for ( const auto& p : jobList ) { cDebug() << "Job #" << count << "name" << p->prettyName(); Calamares::JobResult r = p->exec(); if ( !r ) { cError() << "Job #" << count << "failed" << TR( "summary", r.message() ) << TR( "details", r.details() ); if ( r.errorCode() > 0 ) { ++failure_count; } } ++count; } if ( aw ) { delete aw; } return failure_count ? 1 : 0; } calamares-3.2.20/src/libcalamares/000077500000000000000000000000001362604102500167335ustar00rootroot00000000000000calamares-3.2.20/src/libcalamares/CMakeLists.txt000066400000000000000000000142411362604102500214750ustar00rootroot00000000000000# libcalamares is the non-GUI part of Calamares, which includes handling # translations, configurations, logging, utilities, global storage, and (non-GUI) jobs. add_definitions( ${QT_DEFINITIONS} -DQT_SHARED -DQT_SHAREDPOINTER_TRACK_POINTERS -DDLLEXPORT_PRO ) configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/CalamaresConfig.h.in ${CMAKE_CURRENT_BINARY_DIR}/CalamaresConfig.h ) configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/../calamares/CalamaresVersion.h.in ${CMAKE_CURRENT_BINARY_DIR}/CalamaresVersion.h ) set( OPTIONAL_PRIVATE_LIBRARIES "" ) set( OPTIONAL_PUBLIC_LIBRARIES "" ) set( libSources CppJob.cpp GlobalStorage.cpp Job.cpp JobExample.cpp JobQueue.cpp ProcessJob.cpp Settings.cpp # GeoIP services geoip/Interface.cpp geoip/GeoIPJSON.cpp geoip/Handler.cpp # Locale-data service locale/Label.cpp locale/LabelModel.cpp locale/Lookup.cpp locale/TimeZone.cpp locale/TranslatableConfiguration.cpp # Modules modulesystem/InstanceKey.cpp # Network service network/Manager.cpp # Partition service partition/Mount.cpp partition/PartitionSize.cpp partition/Sync.cpp # Utility service utils/CalamaresUtilsSystem.cpp utils/CommandList.cpp utils/Dirs.cpp utils/Entropy.cpp utils/Logger.cpp utils/PluginFactory.cpp utils/Retranslator.cpp utils/String.cpp utils/UMask.cpp utils/Variant.cpp utils/Yaml.cpp ) set( _kdsagSources kdsingleapplicationguard/kdsingleapplicationguard.cpp kdsingleapplicationguard/kdsharedmemorylocker.cpp kdsingleapplicationguard/kdtoolsglobal.cpp kdsingleapplicationguard/kdlockedsharedmemorypointer.cpp ) set( kdsagSources "" ) foreach( _s ${_kdsagSources} ) list( APPEND kdsagSources ${CMAKE_SOURCE_DIR}/3rdparty/${_s} ) endforeach() mark_thirdparty_code( ${kdsagSources} ) include_directories( ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ) ### OPTIONAL Python support # # if( WITH_PYTHON ) list( APPEND libSources PythonHelper.cpp PythonJob.cpp PythonJobApi.cpp ) set_source_files_properties( PythonJob.cpp PROPERTIES COMPILE_FLAGS "${SUPPRESS_BOOST_WARNINGS}" ) include_directories(${PYTHON_INCLUDE_DIRS}) link_directories(${PYTHON_LIBRARIES}) include_directories(${Boost_INCLUDE_DIRS}) link_directories(${Boost_LIBRARY_DIRS}) list( APPEND OPTIONAL_PRIVATE_LIBRARIES ${PYTHON_LIBRARIES} ${Boost_LIBRARIES} ) endif() ### OPTIONAL GeoIP XML support # # find_package(Qt5 COMPONENTS Xml) if( Qt5Xml_FOUND ) list( APPEND libSources geoip/GeoIPXML.cpp ) list( APPEND OPTIONAL_PUBLIC_LIBRARIES Qt5::Network Qt5::Xml ) endif() ### OPTIONAL KPMcore support # # find_package( KPMcore 3.3 ) set_package_properties( KPMcore PROPERTIES URL "https://invent.kde.org/kde/kpmcore" DESCRIPTION "KDE Partitioning library" TYPE RECOMMENDED PURPOSE "For partitioning service" ) if ( KPMcore_FOUND ) find_package( Qt5 REQUIRED DBus ) # Needed for KPMCore find_package( KF5 REQUIRED I18n WidgetsAddons ) # Needed for KPMCore if( KPMcore_VERSION VERSION_GREATER_EQUAL "4.0" ) add_definitions( -DWITH_KPMCORE4API ) # kpmcore 4 with new API elseif( KPMcore_VERSION VERSION_GREATER "3.3.70" ) message( FATAL_ERROR "KPMCore beta versions ${KPMcore_VERSION} not supported" ) endif() include_directories( ${KPMCORE_INCLUDE_DIR} ) list( APPEND libSources partition/FileSystem.cpp partition/KPMManager.cpp partition/PartitionIterator.cpp partition/PartitionQuery.cpp ) list( APPEND OPTIONAL_PRIVATE_LIBRARIES kpmcore ) endif() ### LIBRARY # # add_library( calamares SHARED ${libSources} ${kdsagSources} ) set_target_properties( calamares PROPERTIES VERSION ${CALAMARES_VERSION_SHORT} SOVERSION ${CALAMARES_VERSION_SHORT} ) calamares_automoc( calamares ) target_link_libraries( calamares LINK_PRIVATE ${OPTIONAL_PRIVATE_LIBRARIES} LINK_PUBLIC yamlcpp Qt5::Core KF5::CoreAddons ${OPTIONAL_PUBLIC_LIBRARIES} ) install( TARGETS calamares EXPORT CalamaresLibraryDepends RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} ) # Make symlink lib/calamares/libcalamares.so to lib/libcalamares.so.VERSION so # lib/calamares can be used as module path for the Python interpreter. install( CODE " file( MAKE_DIRECTORY \"\$ENV{DESTDIR}/${CMAKE_INSTALL_FULL_LIBDIR}/calamares\" ) execute_process( COMMAND \"${CMAKE_COMMAND}\" -E create_symlink ../libcalamares.so.${CALAMARES_VERSION_SHORT} libcalamares.so WORKING_DIRECTORY \"\$ENV{DESTDIR}/${CMAKE_INSTALL_FULL_LIBDIR}/calamares\" ) ") # Install header files file( GLOB rootHeaders "*.h" ) file( GLOB kdsingleapplicationguardHeaders "kdsingleapplicationguard/*.h" ) file( GLOB utilsHeaders "utils/*.h" ) install( FILES ${CMAKE_CURRENT_BINARY_DIR}/CalamaresConfig.h DESTINATION include/libcalamares ) install( FILES ${rootHeaders} DESTINATION include/libcalamares ) install( FILES ${kdsingleapplicationguardHeaders} DESTINATION include/libcalamares/kdsingleapplicationguard ) install( FILES ${utilsHeaders} DESTINATION include/libcalamares/utils ) ### TESTING # # calamares_add_test( libcalamarestest SOURCES utils/Tests.cpp ) calamares_add_test( libcalamarestestpaths SOURCES utils/TestPaths.cpp ) calamares_add_test( geoiptest SOURCES geoip/GeoIPTests.cpp ${geoip_src} ) calamares_add_test( libcalamarespartitiontest SOURCES partition/Tests.cpp ) calamares_add_test( libcalamareslocaletest SOURCES locale/Tests.cpp ) calamares_add_test( libcalamaresnetworktest SOURCES network/Tests.cpp ) calamares_add_test( libcalamaresmodulesystemtest SOURCES modulesystem/Tests.cpp ) if( BUILD_TESTING ) add_executable( test_geoip geoip/test_geoip.cpp ${geoip_src} ) target_link_libraries( test_geoip calamares Qt5::Network yamlcpp ) calamares_automoc( test_geoip ) endif() calamares-3.2.20/src/libcalamares/CalamaresConfig.h.in000066400000000000000000000011271362604102500225300ustar00rootroot00000000000000#ifndef CALAMARESCONFIG_H #define CALAMARESCONFIG_H #define CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" #define CMAKE_INSTALL_FULL_LIBEXECDIR "${CMAKE_INSTALL_FULL_LIBEXECDIR}" #define CMAKE_INSTALL_LIBDIR "${CMAKE_INSTALL_LIBDIR}" #define CMAKE_INSTALL_FULL_LIBDIR "${CMAKE_INSTALL_FULL_LIBDIR}" #define CMAKE_INSTALL_FULL_DATADIR "${CMAKE_INSTALL_FULL_DATADIR}/calamares" #define CMAKE_INSTALL_FULL_SYSCONFDIR "${CMAKE_INSTALL_FULL_SYSCONFDIR}" //cmakedefines for CMake variables (e.g. for optdepends) go here #cmakedefine WITH_PYTHON #cmakedefine WITH_PYTHONQT #endif // CALAMARESCONFIG_H calamares-3.2.20/src/libcalamares/CppJob.cpp000066400000000000000000000023331362604102500206150ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac * Copyright 2016, Kevin Kofler * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "CppJob.h" namespace Calamares { CppJob::CppJob( QObject* parent ) : Job( parent ) { } CppJob::~CppJob() {} void CppJob::setModuleInstanceKey( const Calamares::ModuleSystem::InstanceKey& instanceKey ) { m_instanceKey = instanceKey; } void CppJob::setConfigurationMap( const QVariantMap& configurationMap ) { Q_UNUSED( configurationMap ) } } // namespace Calamares calamares-3.2.20/src/libcalamares/CppJob.h000066400000000000000000000031331362604102500202610ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2016, Kevin Kofler * Copyright 2020, Adriaan de Groor * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef CALAMARES_CPPJOB_H #define CALAMARES_CPPJOB_H #include "DllMacro.h" #include "Job.h" #include "modulesystem/InstanceKey.h" #include #include namespace Calamares { class DLLEXPORT CppJob : public Job { Q_OBJECT public: explicit CppJob( QObject* parent = nullptr ); virtual ~CppJob(); void setModuleInstanceKey( const Calamares::ModuleSystem::InstanceKey& instanceKey ); Calamares::ModuleSystem::InstanceKey moduleInstanceKey() const { return m_instanceKey; } virtual void setConfigurationMap( const QVariantMap& configurationMap ); protected: Calamares::ModuleSystem::InstanceKey m_instanceKey; }; } // namespace Calamares #endif // CALAMARES_CPPJOB_H calamares-3.2.20/src/libcalamares/DllMacro.h000066400000000000000000000040331362604102500206010ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac * Copyright 2020, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef DLLMACRO_H #define DLLMACRO_H #include /* * Mark symbols exported from Calamares non-GUI library with DLLEXPORT. * These are the public API of libcalamares. */ #ifndef DLLEXPORT #if defined( DLLEXPORT_PRO ) #define DLLEXPORT Q_DECL_EXPORT #else #define DLLEXPORT Q_DECL_IMPORT #endif #endif /* * Mark symbols exported from Calamares GUI library with DLLEXPORT. * These are the public API of libcalamaresui. */ #ifndef UIDLLEXPORT #if defined( UIDLLEXPORT_PRO ) #define UIDLLEXPORT Q_DECL_EXPORT #else #define UIDLLEXPORT Q_DECL_IMPORT #endif #endif /* * Mark symbols exported from Calamares C++ plugins with PLUGINDLLEXPORT. * These are the public API of the libraries (generally, the plugin * entry point) */ #ifndef PLUGINDLLEXPORT #if defined( PLUGINDLLEXPORT_PRO ) #define PLUGINDLLEXPORT Q_DECL_EXPORT #else #define PLUGINDLLEXPORT Q_DECL_IMPORT #endif #endif /* * For functions that should be static in production but also need to * be tested, use STATICTEST as linkage specifier. When built as part * of a test, the function will be given normal linkage. */ #ifndef STATICTEST #if defined( BUILD_AS_TEST ) #define STATICTEST #else #define STATICTEST static #endif #endif #endif calamares-3.2.20/src/libcalamares/GlobalStorage.cpp000066400000000000000000000060451362604102500221710ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2017-2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/Logger.h" #include "utils/Units.h" #include "utils/Yaml.h" #include #include using CalamaresUtils::operator""_MiB; namespace Calamares { GlobalStorage::GlobalStorage() : QObject( nullptr ) { } bool GlobalStorage::contains( const QString& key ) const { return m.contains( key ); } int GlobalStorage::count() const { return m.count(); } void GlobalStorage::insert( const QString& key, const QVariant& value ) { m.insert( key, value ); emit changed(); } QStringList GlobalStorage::keys() const { return m.keys(); } int GlobalStorage::remove( const QString& key ) { int nItems = m.remove( key ); emit changed(); return nItems; } QVariant GlobalStorage::value( const QString& key ) const { return m.value( key ); } void GlobalStorage::debugDump() const { for ( auto it = m.cbegin(); it != m.cend(); ++it ) { cDebug() << it.key() << '\t' << it.value(); } } bool GlobalStorage::save( const QString& filename ) { QFile f( filename ); if ( !f.open( QFile::WriteOnly ) ) { return false; } f.write( QJsonDocument::fromVariant( m ).toJson() ); f.close(); return true; } bool GlobalStorage::load( const QString& filename ) { QFile f( filename ); if ( !f.open( QFile::ReadOnly ) ) { return false; } QJsonParseError e; QJsonDocument d = QJsonDocument::fromJson( f.read( 1_MiB ), &e ); if ( d.isNull() ) { cWarning() << filename << e.errorString(); } else if ( !d.isObject() ) { cWarning() << filename << "Not suitable JSON."; } else { auto map = d.toVariant().toMap(); for ( auto i = map.constBegin(); i != map.constEnd(); ++i ) { insert( i.key(), *i ); } return true; } return false; } bool GlobalStorage::saveYaml( const QString& filename ) { return CalamaresUtils::saveYaml( filename, m ); } bool GlobalStorage::loadYaml( const QString& filename ) { bool ok = false; auto gs = CalamaresUtils::loadYaml( filename, &ok ); if ( ok ) { m = gs; } return ok; } } // namespace Calamares calamares-3.2.20/src/libcalamares/GlobalStorage.h000066400000000000000000000055431362604102500216400ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2017-2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef CALAMARES_GLOBALSTORAGE_H #define CALAMARES_GLOBALSTORAGE_H #include "CalamaresConfig.h" #include #include #include namespace Calamares { class DebugWindow; class GlobalStorage : public QObject { Q_OBJECT public: explicit GlobalStorage(); //NOTE: thread safety is guaranteed by JobQueue, which executes jobs one by one. // If at any time jobs become concurrent, this class must be made thread-safe. bool contains( const QString& key ) const; int count() const; void insert( const QString& key, const QVariant& value ); QStringList keys() const; int remove( const QString& key ); QVariant value( const QString& key ) const; /// @brief dump keys and values to the debug log void debugDump() const; /** @brief write as JSON to the given filename * * No tidying, sanitization, or censoring is done -- for instance, * the user module sets a slightly-obscured password in global storage, * and this JSON file will contain that password in-the-only-slightly- * obscured form. */ bool save( const QString& filename ); /** @brief Adds the keys from the given JSON file * * No tidying, sanitization, or censoring is done. * The JSON file is read and each key is added as a value to * the global storage. */ bool load( const QString& filename ); /** @brief write as YAML to the given filename * * See also save(), above. */ bool saveYaml( const QString& filename ); /// @brief reads settings from the given filename bool loadYaml( const QString& filename ); /** @brief Get internal mapping as a constant object * * Note that the VariantMap underneath may change, because * it's not constant in itself. Connect to the changed() * signal for notifications. */ const QVariantMap& data() const { return m; } signals: void changed(); private: QVariantMap m; }; } // namespace Calamares #endif // CALAMARES_GLOBALSTORAGE_H calamares-3.2.20/src/libcalamares/Job.cpp000066400000000000000000000042661362604102500201610ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "Job.h" namespace Calamares { JobResult::JobResult( JobResult&& rhs ) : m_message( std::move( rhs.m_message ) ) , m_details( std::move( rhs.m_details ) ) , m_number( rhs.m_number ) { } JobResult::operator bool() const { return m_number == 0; } QString JobResult::message() const { return m_message; } void JobResult::setMessage( const QString& message ) { m_message = message; } QString JobResult::details() const { return m_details; } void JobResult::setDetails( const QString& details ) { m_details = details; } JobResult JobResult::ok() { return JobResult( QString(), QString(), NoError ); } JobResult JobResult::error( const QString& message, const QString& details ) { return JobResult( message, details, GenericError ); } JobResult JobResult::internalError( const QString& message, const QString& details, int number ) { return JobResult( message, details, number ? number : GenericError ); } JobResult::JobResult( const QString& message, const QString& details, int number ) : m_message( message ) , m_details( details ) , m_number( number ) { } Job::Job( QObject* parent ) : QObject( parent ) { } Job::~Job() {} qreal Job::getJobWeight() const { return qreal( 1.0 ); } QString Job::prettyDescription() const { return QString(); } QString Job::prettyStatusMessage() const { return QString(); } } // namespace Calamares calamares-3.2.20/src/libcalamares/Job.h000066400000000000000000000073301362604102500176210ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef CALAMARES_JOB_H #define CALAMARES_JOB_H #include "DllMacro.h" #include #include #include namespace Calamares { class DLLEXPORT JobResult { public: /** @brief Distinguish classes of errors * * All "ok result" have errorCode 0 (NoError). * Errors returned from job execution have values < 0. * Errors before job execution, or not returned by the job execution * itself, have values > 0. */ enum { NoError = 0, GenericError = -1, PythonUncaughtException = 1, InvalidConfiguration = 2 }; // Can't copy, but you can keep a temporary JobResult( const JobResult& rhs ) = delete; JobResult( JobResult&& rhs ); virtual ~JobResult() {} /** @brief Is this JobResult a success? * * Equivalent to errorCode() == 0, might be named isValid(). */ virtual operator bool() const; virtual QString message() const; virtual void setMessage( const QString& message ); virtual QString details() const; virtual void setDetails( const QString& details ); int errorCode() const { return m_number; } /// @brief an "ok status" result static JobResult ok(); /** @brief an "error" result resulting from the execution of the job * * The error code is set to GenericError. */ static JobResult error( const QString& message, const QString& details = QString() ); /** @brief an "internal error" meaning the job itself has a problem (usually for python) * * Pass in a suitable error code; using 0 (which would normally mean "ok") instead * gives you a GenericError code. */ static JobResult internalError( const QString&, const QString& details, int errorCode ); protected: explicit JobResult( const QString& message, const QString& details, int errorCode ); private: QString m_message; QString m_details; int m_number; }; class DLLEXPORT Job : public QObject { Q_OBJECT public: explicit Job( QObject* parent = nullptr ); virtual ~Job(); /** @brief The job's (relative) weight. * * The default implementation returns 1.0, which gives all jobs * the same weight, so they advance the overall progress the same * amount. This is nonsense, since some jobs take much longer than * others; it's up to the individual jobs to say something about * how much work is (relatively) done. */ virtual qreal getJobWeight() const; virtual QString prettyName() const = 0; virtual QString prettyDescription() const; virtual QString prettyStatusMessage() const; virtual JobResult exec() = 0; bool isEmergency() const { return m_emergency; } void setEmergency( bool e ) { m_emergency = e; } signals: void progress( qreal percent ); private: bool m_emergency = false; }; using job_ptr = QSharedPointer< Job >; using JobList = QList< job_ptr >; } // namespace Calamares #endif // CALAMARES_JOB_H calamares-3.2.20/src/libcalamares/JobExample.cpp000066400000000000000000000022651362604102500214720ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "JobExample.h" namespace Calamares { QString NamedJob::prettyName() const { return tr( "Example job (%1)" ).arg( m_name ); } JobResult GoodJob::exec() { return JobResult::ok(); } JobResult FailJob::exec() { return JobResult::error( tr( "Job failed (%1)" ).arg( m_name ), tr( "Programmed job failure was explicitly requested." ) ); } } // namespace Calamares calamares-3.2.20/src/libcalamares/JobExample.h000066400000000000000000000036201362604102500211330ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef CALAMARES_JOB_EXAMPLE_H #define CALAMARES_JOB_EXAMPLE_H #include "Job.h" namespace Calamares { /** @brief A Job with a name * * This includes a default implementation of prettyName(), * but is only used as a base for FailJob and GoodJob, * which are support / bogus classes. */ class DLLEXPORT NamedJob : public Job { public: explicit NamedJob( const QString& name, QObject* parent = nullptr ) : Job( parent ) , m_name( name ) { } virtual QString prettyName() const override; protected: const QString m_name; }; /// @brief Job does nothing, always succeeds class DLLEXPORT GoodJob : public NamedJob { public: explicit GoodJob( const QString& name, QObject* parent = nullptr ) : NamedJob( name, parent ) { } virtual JobResult exec() override; }; /// @brief Job does nothing, always fails class DLLEXPORT FailJob : public NamedJob { public: explicit FailJob( const QString& name, QObject* parent = nullptr ) : NamedJob( name, parent ) { } virtual JobResult exec() override; }; } // namespace Calamares #endif // CALAMARES_JOB_EXAMPLE_H calamares-3.2.20/src/libcalamares/JobQueue.cpp000066400000000000000000000133311362604102500211570ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "JobQueue.h" #include "CalamaresConfig.h" #include "GlobalStorage.h" #include "Job.h" #include "utils/Logger.h" #include namespace Calamares { class JobThread : public QThread { public: JobThread( JobQueue* queue ) : QThread( queue ) , m_queue( queue ) , m_jobIndex( 0 ) { } virtual ~JobThread() override; void setJobs( JobList&& jobs ) { m_jobs = jobs; qreal totalJobsWeight = 0.0; for ( auto job : m_jobs ) { totalJobsWeight += job->getJobWeight(); } for ( auto job : m_jobs ) { qreal jobWeight = qreal( job->getJobWeight() / totalJobsWeight ); m_jobWeights.append( jobWeight ); } } void run() override { bool anyFailed = false; QString message; QString details; m_jobIndex = 0; for ( auto job : m_jobs ) { if ( anyFailed && !job->isEmergency() ) { cDebug() << "Skipping non-emergency job" << job->prettyName(); continue; } emitProgress(); cDebug() << "Starting" << ( anyFailed ? "EMERGENCY JOB" : "job" ) << job->prettyName() << " (there are" << m_jobs.count() << " left)"; connect( job.data(), &Job::progress, this, &JobThread::emitProgress ); JobResult result = job->exec(); if ( !anyFailed && !result ) { anyFailed = true; message = result.message(); details = result.details(); } if ( !anyFailed ) { ++m_jobIndex; } } if ( anyFailed ) { emitFailed( message, details ); } else { emitProgress(); } emitFinished(); } private: JobList m_jobs; QList< qreal > m_jobWeights; JobQueue* m_queue; int m_jobIndex; void emitProgress( qreal jobPercent = 0 ) { // Make sure jobPercent is reasonable, in case a job messed up its // percentage computations. jobPercent = qBound( qreal( 0 ), jobPercent, qreal( 1 ) ); int jobCount = m_jobs.size(); QString message = m_jobIndex < jobCount ? m_jobs.at( m_jobIndex )->prettyStatusMessage() : tr( "Done" ); qreal cumulativeProgress = 0.0; for ( auto jobWeight : m_jobWeights.mid( 0, m_jobIndex ) ) { cumulativeProgress += jobWeight; } qreal percent = m_jobIndex < jobCount ? cumulativeProgress + ( ( m_jobWeights.at( m_jobIndex ) ) * jobPercent ) : 1.0; if ( m_jobIndex < jobCount ) { Logger::CDebug( Logger::LOGVERBOSE ) << "[JOBQUEUE]: Progress for Job[" << m_jobIndex << "]: " << ( jobPercent * 100 ) << "% completed"; Logger::CDebug( Logger::LOGVERBOSE ) << "[JOBQUEUE]: Progress Overall: " << ( cumulativeProgress * 100 ) << "% (accumulated) + " << ( ( ( m_jobWeights.at( m_jobIndex ) ) * jobPercent ) * 100 ) << "% (this job) = " << ( percent * 100 ) << "% (total)"; } QMetaObject::invokeMethod( m_queue, "progress", Qt::QueuedConnection, Q_ARG( qreal, percent ), Q_ARG( QString, message ) ); } void emitFailed( const QString& message, const QString& details ) { QMetaObject::invokeMethod( m_queue, "failed", Qt::QueuedConnection, Q_ARG( QString, message ), Q_ARG( QString, details ) ); } void emitFinished() { QMetaObject::invokeMethod( m_queue, "finished", Qt::QueuedConnection ); } }; JobThread::~JobThread() {} JobQueue* JobQueue::s_instance = nullptr; JobQueue* JobQueue::instance() { return s_instance; } GlobalStorage* JobQueue::globalStorage() const { return m_storage; } JobQueue::JobQueue( QObject* parent ) : QObject( parent ) , m_thread( new JobThread( this ) ) , m_storage( new GlobalStorage() ) { Q_ASSERT( !s_instance ); s_instance = this; } JobQueue::~JobQueue() { if ( m_thread->isRunning() ) { m_thread->terminate(); if ( !m_thread->wait( 300 ) ) { cError() << "Could not terminate job thread (expect a crash now)."; } delete m_thread; } delete m_storage; } void JobQueue::start() { Q_ASSERT( !m_thread->isRunning() ); m_thread->setJobs( std::move( m_jobs ) ); m_jobs.clear(); m_thread->start(); } void JobQueue::enqueue( const job_ptr& job ) { Q_ASSERT( !m_thread->isRunning() ); m_jobs.append( job ); emit queueChanged( m_jobs ); } void JobQueue::enqueue( const JobList& jobs ) { Q_ASSERT( !m_thread->isRunning() ); m_jobs.append( jobs ); emit queueChanged( m_jobs ); } } // namespace Calamares calamares-3.2.20/src/libcalamares/JobQueue.h000066400000000000000000000032231362604102500206230ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef CALAMARES_JOBQUEUE_H #define CALAMARES_JOBQUEUE_H #include "DllMacro.h" #include "Job.h" #include namespace Calamares { class GlobalStorage; class JobThread; class DLLEXPORT JobQueue : public QObject { Q_OBJECT public: explicit JobQueue( QObject* parent = nullptr ); virtual ~JobQueue(); static JobQueue* instance(); GlobalStorage* globalStorage() const; void enqueue( const job_ptr& job ); void enqueue( const JobList& jobs ); void start(); signals: void queueChanged( const JobList& jobs ); void progress( qreal percent, const QString& prettyName ); void finished(); void failed( const QString& message, const QString& details ); private: static JobQueue* s_instance; JobList m_jobs; JobThread* m_thread; GlobalStorage* m_storage; }; } // namespace Calamares #endif // CALAMARES_JOBQUEUE_H calamares-3.2.20/src/libcalamares/ProcessJob.cpp000066400000000000000000000045621362604102500215170ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "ProcessJob.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include #include namespace Calamares { ProcessJob::ProcessJob( const QString& command, const QString& workingPath, bool runInChroot, std::chrono::seconds secondsTimeout, QObject* parent ) : Job( parent ) , m_command( command ) , m_workingPath( workingPath ) , m_runInChroot( runInChroot ) , m_timeoutSec( secondsTimeout ) { } ProcessJob::~ProcessJob() {} QString ProcessJob::prettyName() const { return ( m_runInChroot ? tr( "Run command '%1' in target system." ) : tr( " Run command '%1'." ) ).arg( m_command ); } QString ProcessJob::prettyStatusMessage() const { return tr( "Running command %1 %2" ).arg( m_command ).arg( m_runInChroot ? "in chroot." : " ." ); } JobResult ProcessJob::exec() { using CalamaresUtils::System; if ( m_runInChroot ) return CalamaresUtils::System::instance() ->targetEnvCommand( { m_command }, m_workingPath, QString(), m_timeoutSec ) .explainProcess( m_command, m_timeoutSec ); else return System::runCommand( System::RunLocation::RunInHost, { "/bin/sh", "-c", m_command }, m_workingPath, QString(), m_timeoutSec ) .explainProcess( m_command, m_timeoutSec ); } } // namespace Calamares calamares-3.2.20/src/libcalamares/ProcessJob.h000066400000000000000000000032051362604102500211550ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac * Copyright 2017-2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef CALAMARES_PROCESSJOB_H #define CALAMARES_PROCESSJOB_H #include "Job.h" #include namespace Calamares { class ProcessJob : public Job { Q_OBJECT public: explicit ProcessJob( const QString& command, const QString& workingPath, bool runInChroot = false, std::chrono::seconds secondsTimeout = std::chrono::seconds( 30 ), QObject* parent = nullptr ); virtual ~ProcessJob() override; QString prettyName() const override; QString prettyStatusMessage() const override; JobResult exec() override; private: QString m_command; QString m_workingPath; bool m_runInChroot; std::chrono::seconds m_timeoutSec; }; } // namespace Calamares #endif // CALAMARES_PROCESSJOB_H calamares-3.2.20/src/libcalamares/PythonHelper.cpp000066400000000000000000000270701362604102500220660ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac * Copyright 2017-2018, 2020, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "PythonHelper.h" #include "GlobalStorage.h" #include "utils/Dirs.h" #include "utils/Logger.h" #include #include namespace bp = boost::python; namespace CalamaresPython { boost::python::object variantToPyObject( const QVariant& variant ) { switch ( variant.type() ) { case QVariant::Map: return variantMapToPyDict( variant.toMap() ); case QVariant::Hash: return variantHashToPyDict( variant.toHash() ); case QVariant::List: case QVariant::StringList: return variantListToPyList( variant.toList() ); case QVariant::Int: return bp::object( variant.toInt() ); case QVariant::LongLong: return bp::object( variant.toLongLong() ); case QVariant::Double: return bp::object( variant.toDouble() ); case QVariant::String: return bp::object( variant.toString().toStdString() ); case QVariant::Bool: return bp::object( variant.toBool() ); default: return bp::object(); } } QVariant variantFromPyObject( const boost::python::object& pyObject ) { std::string pyType = bp::extract< std::string >( pyObject.attr( "__class__" ).attr( "__name__" ) ); if ( pyType == "dict" ) { return variantMapFromPyDict( bp::extract< bp::dict >( pyObject ) ); } else if ( pyType == "list" ) { return variantListFromPyList( bp::extract< bp::list >( pyObject ) ); } else if ( pyType == "int" ) { return QVariant( bp::extract< int >( pyObject ) ); } else if ( pyType == "float" ) { return QVariant( bp::extract< double >( pyObject ) ); } else if ( pyType == "str" ) { return QVariant( QString::fromStdString( bp::extract< std::string >( pyObject ) ) ); } else if ( pyType == "bool" ) { return QVariant( bp::extract< bool >( pyObject ) ); } else { return QVariant(); } } boost::python::list variantListToPyList( const QVariantList& variantList ) { bp::list pyList; for ( const QVariant& variant : variantList ) { pyList.append( variantToPyObject( variant ) ); } return pyList; } QVariantList variantListFromPyList( const boost::python::list& pyList ) { QVariantList list; for ( int i = 0; i < bp::len( pyList ); ++i ) { list.append( variantFromPyObject( pyList[ i ] ) ); } return list; } boost::python::dict variantMapToPyDict( const QVariantMap& variantMap ) { bp::dict pyDict; for ( auto it = variantMap.constBegin(); it != variantMap.constEnd(); ++it ) { pyDict[ it.key().toStdString() ] = variantToPyObject( it.value() ); } return pyDict; } QVariantMap variantMapFromPyDict( const boost::python::dict& pyDict ) { QVariantMap map; bp::list keys = pyDict.keys(); for ( int i = 0; i < bp::len( keys ); ++i ) { bp::extract< std::string > extracted_key( keys[ i ] ); if ( !extracted_key.check() ) { cDebug() << "Key invalid, map might be incomplete."; continue; } std::string key = extracted_key; bp::object obj = pyDict[ key ]; map.insert( QString::fromStdString( key ), variantFromPyObject( obj ) ); } return map; } boost::python::dict variantHashToPyDict( const QVariantHash& variantHash ) { bp::dict pyDict; for ( auto it = variantHash.constBegin(); it != variantHash.constEnd(); ++it ) { pyDict[ it.key().toStdString() ] = variantToPyObject( it.value() ); } return pyDict; } QVariantHash variantHashFromPyDict( const boost::python::dict& pyDict ) { QVariantHash hash; bp::list keys = pyDict.keys(); for ( int i = 0; i < bp::len( keys ); ++i ) { bp::extract< std::string > extracted_key( keys[ i ] ); if ( !extracted_key.check() ) { cDebug() << "Key invalid, map might be incomplete."; continue; } std::string key = extracted_key; bp::object obj = pyDict[ key ]; hash.insert( QString::fromStdString( key ), variantFromPyObject( obj ) ); } return hash; } Helper* Helper::s_instance = nullptr; static inline void add_if_lib_exists( const QDir& dir, const char* name, QStringList& list ) { if ( !( dir.exists() && dir.isReadable() ) ) { return; } QFileInfo fi( dir.absoluteFilePath( name ) ); if ( fi.exists() && fi.isReadable() ) { list.append( fi.dir().absolutePath() ); } } Helper::Helper( QObject* parent ) : QObject( parent ) { // Let's make extra sure we only call Py_Initialize once if ( !s_instance ) { if ( !Py_IsInitialized() ) { Py_Initialize(); } m_mainModule = bp::import( "__main__" ); m_mainNamespace = m_mainModule.attr( "__dict__" ); // If we're running from the build dir add_if_lib_exists( QDir::current(), "libcalamares.so", m_pythonPaths ); QDir calaPythonPath( CalamaresUtils::systemLibDir().absolutePath() + QDir::separator() + "calamares" ); add_if_lib_exists( calaPythonPath, "libcalamares.so", m_pythonPaths ); bp::object sys = bp::import( "sys" ); foreach ( QString path, m_pythonPaths ) { bp::str dir = path.toLocal8Bit().data(); sys.attr( "path" ).attr( "append" )( dir ); } } else { cWarning() << "creating PythonHelper more than once. This is very bad."; return; } s_instance = this; } Helper::~Helper() { s_instance = nullptr; } boost::python::dict Helper::createCleanNamespace() { // To make sure we run each script with a clean namespace, we only fetch the // builtin namespace from the interpreter as it was when freshly initialized. bp::dict scriptNamespace; scriptNamespace[ "__builtins__" ] = m_mainNamespace[ "__builtins__" ]; return scriptNamespace; } QString Helper::handleLastError() { PyObject *type = nullptr, *val = nullptr, *traceback_p = nullptr; PyErr_Fetch( &type, &val, &traceback_p ); Logger::CDebug debug; debug.noquote() << "Python Error:\n"; QString typeMsg; if ( type != nullptr ) { bp::handle<> h_type( type ); bp::str pystr( h_type ); bp::extract< std::string > extracted( pystr ); if ( extracted.check() ) { typeMsg = QString::fromStdString( extracted() ).trimmed(); } if ( typeMsg.isEmpty() ) { typeMsg = tr( "Unknown exception type" ); } debug << typeMsg << '\n'; } QString valMsg; if ( val != nullptr ) { bp::handle<> h_val( val ); bp::str pystr( h_val ); bp::extract< std::string > extracted( pystr ); if ( extracted.check() ) { valMsg = QString::fromStdString( extracted() ).trimmed(); } if ( valMsg.isEmpty() ) { valMsg = tr( "unparseable Python error" ); } // Special-case: CalledProcessError has an attribute "output" with the command output, // add that to the printed message. if ( typeMsg.contains( "CalledProcessError" ) ) { bp::object exceptionObject( h_val ); auto a = exceptionObject.attr( "output" ); bp::str outputString( a ); bp::extract< std::string > extractedOutput( outputString ); QString output; if ( extractedOutput.check() ) { output = QString::fromStdString( extractedOutput() ).trimmed(); } if ( !output.isEmpty() ) { // Replace the Type of the error by the warning string, // and use the output of the command (e.g. its stderr) as value. typeMsg = valMsg; valMsg = output; } } debug << valMsg << '\n'; } QString tbMsg; if ( traceback_p != nullptr ) { bp::handle<> h_tb( traceback_p ); bp::object traceback_module( bp::import( "traceback" ) ); bp::object format_tb( traceback_module.attr( "format_tb" ) ); bp::object tb_list( format_tb( h_tb ) ); bp::object pystr( bp::str( "\n" ).join( tb_list ) ); bp::extract< std::string > extracted( pystr ); if ( extracted.check() ) { tbMsg = QString::fromStdString( extracted() ).trimmed(); } if ( tbMsg.isEmpty() ) { tbMsg = tr( "unparseable Python traceback" ); } debug << tbMsg << '\n'; } if ( typeMsg.isEmpty() && valMsg.isEmpty() && tbMsg.isEmpty() ) { return tr( "Unfetchable Python error." ); } QStringList msgList; if ( !typeMsg.isEmpty() ) { msgList.append( QString( "%1" ).arg( typeMsg.toHtmlEscaped() ) ); } if ( !valMsg.isEmpty() ) { msgList.append( valMsg.toHtmlEscaped() ); } if ( !tbMsg.isEmpty() ) { msgList.append( QStringLiteral( "
Traceback:" ) ); msgList.append( QString( "
%1
" ).arg( tbMsg.toHtmlEscaped() ) ); } // Return a string made of the msgList items, wrapped in
tags return QString( "
%1
" ).arg( msgList.join( "
" ) ); } Calamares::GlobalStorage* GlobalStoragePythonWrapper::s_gs_instance = nullptr; // The special handling for nullptr is only for the testing // script for the python bindings, which passes in None; // normal use will have a GlobalStorage from JobQueue::instance() // passed in. Testing use will leak the allocated GlobalStorage // object, but that's OK for testing. GlobalStoragePythonWrapper::GlobalStoragePythonWrapper( Calamares::GlobalStorage* gs ) : m_gs( gs ? gs : s_gs_instance ) { if ( !m_gs ) { s_gs_instance = new Calamares::GlobalStorage; m_gs = s_gs_instance; } } bool GlobalStoragePythonWrapper::contains( const std::string& key ) const { return m_gs->contains( QString::fromStdString( key ) ); } int GlobalStoragePythonWrapper::count() const { return m_gs->count(); } void GlobalStoragePythonWrapper::insert( const std::string& key, const bp::object& value ) { m_gs->insert( QString::fromStdString( key ), CalamaresPython::variantFromPyObject( value ) ); } bp::list GlobalStoragePythonWrapper::keys() const { bp::list pyList; const auto keys = m_gs->keys(); for ( const QString& key : keys ) { pyList.append( key.toStdString() ); } return pyList; } int GlobalStoragePythonWrapper::remove( const std::string& key ) { return m_gs->remove( QString::fromStdString( key ) ); } bp::object GlobalStoragePythonWrapper::value( const std::string& key ) const { return CalamaresPython::variantToPyObject( m_gs->value( QString::fromStdString( key ) ) ); } } // namespace CalamaresPython calamares-3.2.20/src/libcalamares/PythonHelper.h000066400000000000000000000056371362604102500215400ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac * Copyright 2018, 2020, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef CALAMARES_PYTHONJOBHELPER_H #define CALAMARES_PYTHONJOBHELPER_H #include "PythonJob.h" #include "utils/BoostPython.h" #include namespace Calamares { class GlobalStorage; } namespace CalamaresPython { boost::python::object variantToPyObject( const QVariant& variant ); QVariant variantFromPyObject( const boost::python::object& pyObject ); boost::python::list variantListToPyList( const QVariantList& variantList ); QVariantList variantListFromPyList( const boost::python::list& pyList ); boost::python::dict variantMapToPyDict( const QVariantMap& variantMap ); QVariantMap variantMapFromPyDict( const boost::python::dict& pyDict ); boost::python::dict variantHashToPyDict( const QVariantHash& variantHash ); QVariantHash variantHashFromPyDict( const boost::python::dict& pyDict ); class Helper : public QObject { Q_OBJECT public: virtual ~Helper(); boost::python::dict createCleanNamespace(); QString handleLastError(); private: friend Helper* Calamares::PythonJob::helper(); explicit Helper( QObject* parent = nullptr ); static Helper* s_instance; boost::python::object m_mainModule; boost::python::object m_mainNamespace; QStringList m_pythonPaths; }; class GlobalStoragePythonWrapper { public: explicit GlobalStoragePythonWrapper( Calamares::GlobalStorage* gs ); bool contains( const std::string& key ) const; int count() const; void insert( const std::string& key, const boost::python::api::object& value ); boost::python::list keys() const; int remove( const std::string& key ); boost::python::api::object value( const std::string& key ) const; // This is a helper for scripts that do not go through // the JobQueue (i.e. the module testpython script), // which allocate their own (singleton) GlobalStorage. static Calamares::GlobalStorage* globalStorageInstance() { return s_gs_instance; } private: Calamares::GlobalStorage* m_gs; static Calamares::GlobalStorage* s_gs_instance; // See globalStorageInstance() }; } // namespace CalamaresPython #endif // CALAMARES_PYTHONJOBHELPER_H calamares-3.2.20/src/libcalamares/PythonJob.cpp000066400000000000000000000344441362604102500213640ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2016, Teo Mrnjavac * Copyright 2018, 2020, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "PythonJob.h" #include "CalamaresVersion.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "PythonHelper.h" #include "PythonJobApi.h" #include "utils/BoostPython.h" #include "utils/Logger.h" #include namespace bp = boost::python; BOOST_PYTHON_FUNCTION_OVERLOADS( mount_overloads, CalamaresPython::mount, 2, 4 ); BOOST_PYTHON_FUNCTION_OVERLOADS( target_env_call_str_overloads, CalamaresPython::target_env_call, 1, 3 ); BOOST_PYTHON_FUNCTION_OVERLOADS( target_env_call_list_overloads, CalamaresPython::target_env_call, 1, 3 ); BOOST_PYTHON_FUNCTION_OVERLOADS( check_target_env_call_str_overloads, CalamaresPython::check_target_env_call, 1, 3 ); BOOST_PYTHON_FUNCTION_OVERLOADS( check_target_env_call_list_overloads, CalamaresPython::check_target_env_call, 1, 3 ); BOOST_PYTHON_FUNCTION_OVERLOADS( check_target_env_output_str_overloads, CalamaresPython::check_target_env_output, 1, 3 ); BOOST_PYTHON_FUNCTION_OVERLOADS( check_target_env_output_list_overloads, CalamaresPython::check_target_env_output, 1, 3 ); BOOST_PYTHON_MODULE( libcalamares ) { bp::object package = bp::scope(); package.attr( "__path__" ) = "libcalamares"; bp::scope().attr( "ORGANIZATION_NAME" ) = CALAMARES_ORGANIZATION_NAME; bp::scope().attr( "ORGANIZATION_DOMAIN" ) = CALAMARES_ORGANIZATION_DOMAIN; bp::scope().attr( "APPLICATION_NAME" ) = CALAMARES_APPLICATION_NAME; bp::scope().attr( "VERSION" ) = CALAMARES_VERSION; bp::scope().attr( "VERSION_SHORT" ) = CALAMARES_VERSION_SHORT; bp::class_< CalamaresPython::PythonJobInterface >( "Job", bp::init< Calamares::PythonJob* >() ) .def_readonly( "module_name", &CalamaresPython::PythonJobInterface::moduleName ) .def_readonly( "pretty_name", &CalamaresPython::PythonJobInterface::prettyName ) .def_readonly( "working_path", &CalamaresPython::PythonJobInterface::workingPath ) .def_readonly( "configuration", &CalamaresPython::PythonJobInterface::configuration ) .def( "setprogress", &CalamaresPython::PythonJobInterface::setprogress, bp::args( "progress" ), "Reports the progress status of this job to Calamares, " "as a real number between 0 and 1." ); bp::class_< CalamaresPython::GlobalStoragePythonWrapper >( "GlobalStorage", bp::init< Calamares::GlobalStorage* >() ) .def( "contains", &CalamaresPython::GlobalStoragePythonWrapper::contains ) .def( "count", &CalamaresPython::GlobalStoragePythonWrapper::count ) .def( "insert", &CalamaresPython::GlobalStoragePythonWrapper::insert ) .def( "keys", &CalamaresPython::GlobalStoragePythonWrapper::keys ) .def( "remove", &CalamaresPython::GlobalStoragePythonWrapper::remove ) .def( "value", &CalamaresPython::GlobalStoragePythonWrapper::value ); // libcalamares.utils submodule starts here bp::object utilsModule( bp::handle<>( bp::borrowed( PyImport_AddModule( "libcalamares.utils" ) ) ) ); bp::scope().attr( "utils" ) = utilsModule; bp::scope utilsScope = utilsModule; Q_UNUSED( utilsScope ) bp::def( "debug", &CalamaresPython::debug, bp::args( "s" ), "Writes the given string to the Calamares debug stream." ); bp::def( "warning", &CalamaresPython::warning, bp::args( "s" ), "Writes the given string to the Calamares warning stream." ); bp::def( "mount", &CalamaresPython::mount, mount_overloads( bp::args( "device_path", "mount_point", "filesystem_name", "options" ), "Runs the mount utility with the specified parameters.\n" "Returns the program's exit code, or:\n" "-1 = QProcess crash\n" "-2 = QProcess cannot start\n" "-3 = bad arguments" ) ); bp::def( "target_env_call", static_cast< int ( * )( const std::string&, const std::string&, int ) >( &CalamaresPython::target_env_call ), target_env_call_str_overloads( bp::args( "command", "stdin", "timeout" ), "Runs the specified command in the chroot of the target system.\n" "Returns the program's exit code, or:\n" "-1 = QProcess crash\n" "-2 = QProcess cannot start\n" "-3 = bad arguments\n" "-4 = QProcess timeout" ) ); bp::def( "target_env_call", static_cast< int ( * )( const bp::list&, const std::string&, int ) >( &CalamaresPython::target_env_call ), target_env_call_list_overloads( bp::args( "args", "stdin", "timeout" ), "Runs the specified command in the chroot of the target system.\n" "Returns the program's exit code, or:\n" "-1 = QProcess crash\n" "-2 = QProcess cannot start\n" "-3 = bad arguments\n" "-4 = QProcess timeout" ) ); bp::def( "check_target_env_call", static_cast< int ( * )( const std::string&, const std::string&, int ) >( &CalamaresPython::check_target_env_call ), check_target_env_call_str_overloads( bp::args( "command", "stdin", "timeout" ), "Runs the specified command in the chroot of the target system.\n" "Returns 0, which is program's exit code if the program exited " "successfully, or raises a subprocess.CalledProcessError." ) ); bp::def( "check_target_env_call", static_cast< int ( * )( const bp::list&, const std::string&, int ) >( &CalamaresPython::check_target_env_call ), check_target_env_call_list_overloads( bp::args( "args", "stdin", "timeout" ), "Runs the specified command in the chroot of the target system.\n" "Returns 0, which is program's exit code if the program exited " "successfully, or raises a subprocess.CalledProcessError." ) ); bp::def( "check_target_env_output", static_cast< std::string ( * )( const std::string&, const std::string&, int ) >( &CalamaresPython::check_target_env_output ), check_target_env_output_str_overloads( bp::args( "command", "stdin", "timeout" ), "Runs the specified command in the chroot of the target system.\n" "Returns the program's standard output, and raises a " "subprocess.CalledProcessError if something went wrong." ) ); bp::def( "check_target_env_output", static_cast< std::string ( * )( const bp::list&, const std::string&, int ) >( &CalamaresPython::check_target_env_output ), check_target_env_output_list_overloads( bp::args( "args", "stdin", "timeout" ), "Runs the specified command in the chroot of the target system.\n" "Returns the program's standard output, and raises a " "subprocess.CalledProcessError if something went wrong." ) ); bp::def( "obscure", &CalamaresPython::obscure, bp::args( "s" ), "Simple string obfuscation function based on KStringHandler::obscure.\n" "Returns a string, generated using a simple symmetric encryption.\n" "Applying the function to a string obscured by this function will result " "in the original string." ); bp::def( "gettext_languages", &CalamaresPython::gettext_languages, "Returns list of languages (most to least-specific) for gettext." ); bp::def( "gettext_path", &CalamaresPython::gettext_path, "Returns path for gettext search." ); } namespace Calamares { PythonJob::PythonJob( const ModuleSystem::InstanceKey& instance, const QString& scriptFile, const QString& workingPath, const QVariantMap& moduleConfiguration, QObject* parent ) : Job( parent ) , m_scriptFile( scriptFile ) , m_workingPath( workingPath ) , m_description() , m_configurationMap( moduleConfiguration ) , m_weight( ( instance.module() == QStringLiteral( "unpackfs" ) ) ? 12.0 : 1.0 ) { } PythonJob::~PythonJob() {} qreal PythonJob::getJobWeight() const { return m_weight; } QString PythonJob::prettyName() const { return QDir( m_workingPath ).dirName(); } QString PythonJob::prettyStatusMessage() const { if ( m_description.isEmpty() ) { return tr( "Running %1 operation." ).arg( QDir( m_workingPath ).dirName() ); } else { return m_description; } } JobResult PythonJob::exec() { // We assume m_scriptFile to be relative to m_workingPath. QDir workingDir( m_workingPath ); if ( !workingDir.exists() || !workingDir.isReadable() ) { return JobResult::error( tr( "Bad working directory path" ), tr( "Working directory %1 for python job %2 is not readable." ).arg( m_workingPath ).arg( prettyName() ) ); } QFileInfo scriptFI( workingDir.absoluteFilePath( m_scriptFile ) ); if ( !scriptFI.exists() || !scriptFI.isFile() || !scriptFI.isReadable() ) { return JobResult::error( tr( "Bad main script file" ), tr( "Main script file %1 for python job %2 is not readable." ) .arg( scriptFI.absoluteFilePath() ) .arg( prettyName() ) ); } try { bp::dict scriptNamespace = helper()->createCleanNamespace(); bp::object calamaresModule = bp::import( "libcalamares" ); bp::dict calamaresNamespace = bp::extract< bp::dict >( calamaresModule.attr( "__dict__" ) ); calamaresNamespace[ "job" ] = CalamaresPython::PythonJobInterface( this ); calamaresNamespace[ "globalstorage" ] = CalamaresPython::GlobalStoragePythonWrapper( JobQueue::instance()->globalStorage() ); bp::object execResult = bp::exec_file( scriptFI.absoluteFilePath().toLocal8Bit().data(), scriptNamespace, scriptNamespace ); bp::object entryPoint = scriptNamespace[ "run" ]; bp::object prettyNameFunc = scriptNamespace.get( "pretty_name", bp::object() ); cDebug() << "Job file" << scriptFI.absoluteFilePath(); if ( !prettyNameFunc.is_none() ) { bp::extract< std::string > prettyNameResult( prettyNameFunc() ); if ( prettyNameResult.check() ) { m_description = QString::fromStdString( prettyNameResult() ).trimmed(); } if ( !m_description.isEmpty() ) { cDebug() << "Job description from pretty_name" << prettyName() << "=" << m_description; emit progress( 0 ); } } if ( m_description.isEmpty() ) { bp::extract< std::string > entryPoint_doc_attr( entryPoint.attr( "__doc__" ) ); if ( entryPoint_doc_attr.check() ) { m_description = QString::fromStdString( entryPoint_doc_attr() ).trimmed(); auto i_newline = m_description.indexOf( '\n' ); if ( i_newline > 0 ) { m_description.truncate( i_newline ); } cDebug() << "Job description from __doc__" << prettyName() << "=" << m_description; emit progress( 0 ); } } bp::object runResult = entryPoint(); if ( runResult.is_none() ) { return JobResult::ok(); } else // Something happened in the Python job { bp::tuple resultTuple = bp::extract< bp::tuple >( runResult ); QString message = QString::fromStdString( bp::extract< std::string >( resultTuple[ 0 ] ) ); QString description = QString::fromStdString( bp::extract< std::string >( resultTuple[ 1 ] ) ); return JobResult::error( message, description ); } } catch ( bp::error_already_set ) { QString msg; if ( PyErr_Occurred() ) { msg = helper()->handleLastError(); } bp::handle_exception(); PyErr_Clear(); return JobResult::internalError( tr( "Boost.Python error in job \"%1\"." ).arg( prettyName() ), msg, JobResult::PythonUncaughtException ); } } void PythonJob::emitProgress( qreal progressValue ) { emit progress( progressValue ); } CalamaresPython::Helper* PythonJob::helper() { auto ptr = CalamaresPython::Helper::s_instance; if ( !ptr ) { ptr = new CalamaresPython::Helper; } return ptr; } } // namespace Calamares calamares-3.2.20/src/libcalamares/PythonJob.h000066400000000000000000000040211362604102500210150ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac * Copyright 2020, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef CALAMARES_PYTHONJOB_H #define CALAMARES_PYTHONJOB_H #include "Job.h" #include "modulesystem/InstanceKey.h" #include namespace CalamaresPython { class PythonJobInterface; class Helper; } // namespace CalamaresPython namespace Calamares { class PythonJob : public Job { Q_OBJECT public: explicit PythonJob( const ModuleSystem::InstanceKey& instance, const QString& scriptFile, const QString& workingPath, const QVariantMap& moduleConfiguration = QVariantMap(), QObject* parent = nullptr ); virtual ~PythonJob() override; QString prettyName() const override; QString prettyStatusMessage() const override; JobResult exec() override; virtual qreal getJobWeight() const override; private: friend class CalamaresPython::Helper; friend class CalamaresPython::PythonJobInterface; void emitProgress( double progressValue ); CalamaresPython::Helper* helper(); QString m_scriptFile; QString m_workingPath; QString m_description; QVariantMap m_configurationMap; qreal m_weight; }; } // namespace Calamares #endif // CALAMARES_PYTHONJOB_H calamares-3.2.20/src/libcalamares/PythonJobApi.cpp000066400000000000000000000212541362604102500220110ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2016, Teo Mrnjavac * Copyright 2017-2020, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "PythonJobApi.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "PythonHelper.h" #include "partition/Mount.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include "utils/String.h" #include #include #include namespace bp = boost::python; static int _handle_check_target_env_call_error( const CalamaresUtils::ProcessResult& ec, const QString& cmd ) { if ( !ec.first ) { return ec.first; } QString raise = QString( "import subprocess\n" "e = subprocess.CalledProcessError(%1,\"%2\")\n" ) .arg( ec.first ) .arg( cmd ); if ( !ec.second.isEmpty() ) { raise.append( QStringLiteral( "e.output = \"\"\"%1\"\"\"\n" ).arg( ec.second ) ); } raise.append( "raise e" ); bp::exec( raise.toStdString().c_str() ); bp::throw_error_already_set(); return ec.first; } namespace CalamaresPython { int mount( const std::string& device_path, const std::string& mount_point, const std::string& filesystem_name, const std::string& options ) { return CalamaresUtils::Partition::mount( QString::fromStdString( device_path ), QString::fromStdString( mount_point ), QString::fromStdString( filesystem_name ), QString::fromStdString( options ) ); } static inline QStringList _bp_list_to_qstringlist( const bp::list& args ) { QStringList list; for ( int i = 0; i < bp::len( args ); ++i ) { list.append( QString::fromStdString( bp::extract< std::string >( args[ i ] ) ) ); } return list; } static inline CalamaresUtils::ProcessResult _target_env_command( const QStringList& args, const std::string& stdin, int timeout ) { // Since Python doesn't give us the type system for distinguishing // seconds from other integral types, massage to seconds here. return CalamaresUtils::System::instance()->targetEnvCommand( args, QString(), QString::fromStdString( stdin ), std::chrono::seconds( timeout ) ); } int target_env_call( const std::string& command, const std::string& stdin, int timeout ) { return _target_env_command( QStringList { QString::fromStdString( command ) }, stdin, timeout ).first; } int target_env_call( const bp::list& args, const std::string& stdin, int timeout ) { return _target_env_command( _bp_list_to_qstringlist( args ), stdin, timeout ).first; } int check_target_env_call( const std::string& command, const std::string& stdin, int timeout ) { auto ec = _target_env_command( QStringList { QString::fromStdString( command ) }, stdin, timeout ); return _handle_check_target_env_call_error( ec, QString::fromStdString( command ) ); } int check_target_env_call( const bp::list& args, const std::string& stdin, int timeout ) { auto ec = _target_env_command( _bp_list_to_qstringlist( args ), stdin, timeout ); if ( !ec.first ) { return ec.first; } QStringList failedCmdList = _bp_list_to_qstringlist( args ); return _handle_check_target_env_call_error( ec, failedCmdList.join( ' ' ) ); } std::string check_target_env_output( const std::string& command, const std::string& stdin, int timeout ) { auto ec = _target_env_command( QStringList { QString::fromStdString( command ) }, stdin, timeout ); _handle_check_target_env_call_error( ec, QString::fromStdString( command ) ); return ec.second.toStdString(); } std::string check_target_env_output( const bp::list& args, const std::string& stdin, int timeout ) { QStringList list = _bp_list_to_qstringlist( args ); auto ec = _target_env_command( list, stdin, timeout ); _handle_check_target_env_call_error( ec, list.join( ' ' ) ); return ec.second.toStdString(); } void debug( const std::string& s ) { Logger::CDebug( Logger::LOGDEBUG ) << "[PYTHON JOB]: " << QString::fromStdString( s ); } void warning( const std::string& s ) { cWarning() << "[PYTHON JOB]: " << QString::fromStdString( s ); } PythonJobInterface::PythonJobInterface( Calamares::PythonJob* parent ) : m_parent( parent ) { auto moduleDir = QDir( m_parent->m_workingPath ); moduleName = moduleDir.dirName().toStdString(); prettyName = m_parent->prettyName().toStdString(); workingPath = m_parent->m_workingPath.toStdString(); configuration = CalamaresPython::variantMapToPyDict( m_parent->m_configurationMap ); } void PythonJobInterface::setprogress( qreal progress ) { if ( progress >= 0 && progress <= 1 ) { m_parent->emitProgress( progress ); } } std::string obscure( const std::string& string ) { return CalamaresUtils::obscure( QString::fromStdString( string ) ).toStdString(); } static QStringList _gettext_languages() { QStringList languages; // There are two ways that Python jobs can be initialised: // - through JobQueue, in which case that has an instance which holds // a GlobalStorage object, or // - through the Python test-script, which initialises its // own GlobalStoragePythonWrapper, which then holds a // GlobalStorage object for all of Python. Calamares::JobQueue* jq = Calamares::JobQueue::instance(); Calamares::GlobalStorage* gs = jq ? jq->globalStorage() : CalamaresPython::GlobalStoragePythonWrapper::globalStorageInstance(); QVariant localeConf_ = gs->value( "localeConf" ); if ( localeConf_.canConvert< QVariantMap >() ) { QVariant lang_ = localeConf_.value< QVariantMap >()[ "LANG" ]; if ( lang_.canConvert< QString >() ) { QString lang = lang_.value< QString >(); languages.append( lang ); if ( lang.indexOf( '.' ) > 0 ) { lang.truncate( lang.indexOf( '.' ) ); languages.append( lang ); } if ( lang.indexOf( '_' ) > 0 ) { lang.truncate( lang.indexOf( '_' ) ); languages.append( lang ); } } } return languages; } bp::list gettext_languages() { bp::list pyList; for ( auto lang : _gettext_languages() ) { pyList.append( lang.toStdString() ); } return pyList; } static void _add_localedirs( QStringList& pathList, const QString& candidate ) { if ( !candidate.isEmpty() && !pathList.contains( candidate ) ) { pathList.prepend( candidate ); if ( QDir( candidate ).cd( "lang" ) ) { pathList.prepend( candidate + "/lang" ); } } } bp::object gettext_path() { // TODO: distinguish between -d runs and normal runs // TODO: can we detect DESTDIR-installs? QStringList candidatePaths = QStandardPaths::locateAll( QStandardPaths::GenericDataLocation, "locale", QStandardPaths::LocateDirectory ); QString extra = QCoreApplication::applicationDirPath(); _add_localedirs( candidatePaths, extra ); // Often /usr/local/bin if ( !extra.isEmpty() ) { QDir d( extra ); if ( d.cd( "../share/locale" ) ) // Often /usr/local/bin/../share/locale -> /usr/local/share/locale { _add_localedirs( candidatePaths, d.canonicalPath() ); } } _add_localedirs( candidatePaths, QDir().canonicalPath() ); // . cDebug() << "Determining gettext path from" << candidatePaths; QStringList candidateLanguages = _gettext_languages(); for ( const auto& lang : candidateLanguages ) for ( auto localedir : candidatePaths ) { QDir ldir( localedir ); if ( ldir.cd( lang ) ) { cDebug() << Logger::SubEntry << "Found" << lang << "in" << ldir.canonicalPath(); return bp::object( localedir.toStdString() ); } } cDebug() << Logger::SubEntry << "No translation found for languages" << candidateLanguages; return bp::object(); // None } } // namespace CalamaresPython calamares-3.2.20/src/libcalamares/PythonJobApi.h000066400000000000000000000050001362604102500214450ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2016, Teo Mrnjavac * Copyright 2017-2018, 2020, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef PYTHONJOBAPI_H #define PYTHONJOBAPI_H #include "qglobal.h" // For qreal #include "utils/BoostPython.h" namespace Calamares { class PythonJob; } namespace CalamaresPython { int mount( const std::string& device_path, const std::string& mount_point, const std::string& filesystem_name = std::string(), const std::string& options = std::string() ); int target_env_call( const std::string& command, const std::string& stdin = std::string(), int timeout = 0 ); int target_env_call( const boost::python::list& args, const std::string& stdin = std::string(), int timeout = 0 ); int check_target_env_call( const std::string& command, const std::string& stdin = std::string(), int timeout = 0 ); int check_target_env_call( const boost::python::list& args, const std::string& stdin = std::string(), int timeout = 0 ); std::string check_target_env_output( const std::string& command, const std::string& stdin = std::string(), int timeout = 0 ); std::string check_target_env_output( const boost::python::list& args, const std::string& stdin = std::string(), int timeout = 0 ); std::string obscure( const std::string& string ); boost::python::object gettext_path(); boost::python::list gettext_languages(); void debug( const std::string& s ); void warning( const std::string& s ); class PythonJobInterface { public: explicit PythonJobInterface( Calamares::PythonJob* parent ); std::string moduleName; std::string prettyName; std::string workingPath; boost::python::dict configuration; void setprogress( qreal progress ); private: Calamares::PythonJob* m_parent; }; } // namespace CalamaresPython #endif // PYTHONJOBAPI_H calamares-3.2.20/src/libcalamares/Settings.cpp000066400000000000000000000247111362604102500212440ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Dominic Hayes * Copyright 2019, Gabriel Craciunescu * Copyright 2014-2015, Teo Mrnjavac * Copyright 2017-2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "Settings.h" #include "CalamaresConfig.h" #include "utils/Dirs.h" #include "utils/Logger.h" #include "utils/Yaml.h" #include #include #include static bool hasValue( const YAML::Node& v ) { return v.IsDefined() && !v.IsNull(); } /** @brief Helper function to grab a QString out of the config, and to warn if not present. */ static QString requireString( const YAML::Node& config, const char* key ) { auto v = config[ key ]; if ( hasValue( v ) ) { return QString::fromStdString( v.as< std::string >() ); } else { cWarning() << Logger::SubEntry << "Required settings.conf key" << key << "is missing."; return QString(); } } /** @brief Helper function to grab a bool out of the config, and to warn if not present. */ static bool requireBool( const YAML::Node& config, const char* key, bool d ) { auto v = config[ key ]; if ( hasValue( v ) ) { return v.as< bool >(); } else { cWarning() << Logger::SubEntry << "Required settings.conf key" << key << "is missing."; return d; } } namespace Calamares { Settings* Settings::s_instance = nullptr; Settings* Settings::instance() { return s_instance; } static void interpretModulesSearch( const bool debugMode, const QStringList& rawPaths, QStringList& output ) { for ( const auto& path : rawPaths ) { if ( path == "local" ) { // If we're running in debug mode, we assume we might also be // running from the build dir, so we add a maximum priority // module search path in the build dir. if ( debugMode ) { QString buildDirModules = QDir::current().absolutePath() + QDir::separator() + "src" + QDir::separator() + "modules"; if ( QDir( buildDirModules ).exists() ) { output.append( buildDirModules ); } } // Install path is set in CalamaresAddPlugin.cmake output.append( CalamaresUtils::systemLibDir().absolutePath() + QDir::separator() + "calamares" + QDir::separator() + "modules" ); } else { QDir d( path ); if ( d.exists() && d.isReadable() ) { output.append( d.absolutePath() ); } else { cDebug() << Logger::SubEntry << "module-search entry non-existent" << path; } } } } static void interpretInstances( const YAML::Node& node, Settings::InstanceDescriptionList& customInstances ) { // Parse the custom instances section if ( node ) { QVariant instancesV = CalamaresUtils::yamlToVariant( node ).toList(); if ( instancesV.type() == QVariant::List ) { const auto instances = instancesV.toList(); for ( const QVariant& instancesVListItem : instances ) { if ( instancesVListItem.type() != QVariant::Map ) { continue; } QVariantMap instancesVListItemMap = instancesVListItem.toMap(); Settings::InstanceDescription instanceMap; for ( auto it = instancesVListItemMap.constBegin(); it != instancesVListItemMap.constEnd(); ++it ) { if ( it.value().type() != QVariant::String ) { continue; } instanceMap.insert( it.key(), it.value().toString() ); } customInstances.append( instanceMap ); } } } } static void interpretSequence( const YAML::Node& node, Settings::ModuleSequence& moduleSequence ) { // Parse the modules sequence section if ( node ) { QVariant sequenceV = CalamaresUtils::yamlToVariant( node ); if ( !( sequenceV.type() == QVariant::List ) ) { throw YAML::Exception( YAML::Mark(), "sequence key does not have a list-value" ); } const auto sequence = sequenceV.toList(); for ( const QVariant& sequenceVListItem : sequence ) { if ( sequenceVListItem.type() != QVariant::Map ) { continue; } QString thisActionS = sequenceVListItem.toMap().firstKey(); ModuleSystem::Action thisAction; if ( thisActionS == "show" ) { thisAction = ModuleSystem::Action::Show; } else if ( thisActionS == "exec" ) { thisAction = ModuleSystem::Action::Exec; } else { continue; } QStringList thisActionRoster = sequenceVListItem.toMap().value( thisActionS ).toStringList(); moduleSequence.append( qMakePair( thisAction, thisActionRoster ) ); } } else { throw YAML::Exception( YAML::Mark(), "sequence key is missing" ); } } Settings::Settings( const QString& settingsFilePath, bool debugMode ) : QObject() , m_debug( debugMode ) , m_doChroot( true ) , m_promptInstall( false ) , m_disableCancel( false ) , m_disableCancelDuringExec( false ) { cDebug() << "Using Calamares settings file at" << settingsFilePath; QFile file( settingsFilePath ); if ( file.exists() && file.open( QFile::ReadOnly | QFile::Text ) ) { QByteArray ba = file.readAll(); try { YAML::Node config = YAML::Load( ba.constData() ); Q_ASSERT( config.IsMap() ); interpretModulesSearch( debugMode, CalamaresUtils::yamlToStringList( config[ "modules-search" ] ), m_modulesSearchPaths ); interpretInstances( config[ "instances" ], m_customModuleInstances ); interpretSequence( config[ "sequence" ], m_modulesSequence ); m_brandingComponentName = requireString( config, "branding" ); m_promptInstall = requireBool( config, "prompt-install", false ); m_doChroot = !requireBool( config, "dont-chroot", false ); m_isSetupMode = requireBool( config, "oem-setup", !m_doChroot ); m_disableCancel = requireBool( config, "disable-cancel", false ); m_disableCancelDuringExec = requireBool( config, "disable-cancel-during-exec", false ); } catch ( YAML::Exception& e ) { CalamaresUtils::explainYamlException( e, ba, file.fileName() ); } } else { cWarning() << "Cannot read settings file" << file.fileName(); } s_instance = this; } QStringList Settings::modulesSearchPaths() const { return m_modulesSearchPaths; } Settings::InstanceDescriptionList Settings::customModuleInstances() const { return m_customModuleInstances; } Settings::ModuleSequence Settings::modulesSequence() const { return m_modulesSequence; } QString Settings::brandingComponentName() const { return m_brandingComponentName; } static QStringList settingsFileCandidates( bool assumeBuilddir ) { static const char settings[] = "settings.conf"; QStringList settingsPaths; if ( CalamaresUtils::isAppDataDirOverridden() ) { settingsPaths << CalamaresUtils::appDataDir().absoluteFilePath( settings ); } else { if ( assumeBuilddir ) { settingsPaths << QDir::current().absoluteFilePath( settings ); } if ( CalamaresUtils::haveExtraDirs() ) for ( auto s : CalamaresUtils::extraConfigDirs() ) { settingsPaths << ( s + settings ); } settingsPaths << CMAKE_INSTALL_FULL_SYSCONFDIR "/calamares/settings.conf"; // String concat settingsPaths << CalamaresUtils::appDataDir().absoluteFilePath( settings ); } return settingsPaths; } Settings* Settings::init( bool debugMode ) { if ( s_instance ) { cWarning() << "Calamares::Settings already created"; return s_instance; } QStringList settingsFileCandidatesByPriority = settingsFileCandidates( debugMode ); QFileInfo settingsFile; bool found = false; foreach ( const QString& path, settingsFileCandidatesByPriority ) { QFileInfo pathFi( path ); if ( pathFi.exists() && pathFi.isReadable() ) { settingsFile = pathFi; found = true; break; } } if ( !found || !settingsFile.exists() || !settingsFile.isReadable() ) { cError() << "Cowardly refusing to continue startup without settings." << Logger::DebugList( settingsFileCandidatesByPriority ); if ( CalamaresUtils::isAppDataDirOverridden() ) { cError() << "FATAL: explicitly configured application data directory is missing settings.conf"; } else { cError() << "FATAL: none of the expected configuration file paths exist."; } ::exit( EXIT_FAILURE ); } auto* settings = new Calamares::Settings( settingsFile.absoluteFilePath(), debugMode ); // Creates singleton if ( settings->modulesSequence().count() < 1 ) { cError() << "FATAL: no sequence set."; ::exit( EXIT_FAILURE ); } return settings; } Settings* Settings::init( const QString& path ) { if ( s_instance ) { cWarning() << "Calamares::Settings already created"; return s_instance; } return new Calamares::Settings( path, true ); } } // namespace Calamares calamares-3.2.20/src/libcalamares/Settings.h000066400000000000000000000074471362604102500207200ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Dominic Hayes * Copyright 2019, Gabriel Craciunescu * Copyright 2014-2015, Teo Mrnjavac * Copyright 2017-2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef SETTINGS_H #define SETTINGS_H #include "DllMacro.h" #include "modulesystem/Actions.h" #include #include namespace Calamares { class DLLEXPORT Settings : public QObject { Q_OBJECT explicit Settings( const QString& settingsFilePath, bool debugMode ); public: static Settings* instance(); /// @brief Find a settings.conf, following @p debugMode static Settings* init( bool debugMode ); /// @brief Explicif filename, debug is always true (for testing) static Settings* init( const QString& filename ); QStringList modulesSearchPaths() const; using InstanceDescription = QMap< QString, QString >; using InstanceDescriptionList = QList< InstanceDescription >; InstanceDescriptionList customModuleInstances() const; using ModuleSequence = QList< QPair< ModuleSystem::Action, QStringList > >; ModuleSequence modulesSequence() const; QString brandingComponentName() const; /** @brief Is this a debugging run? * * Returns true if Calamares is in debug mode. In debug mode, * modules and settings are loaded from more locations, to help * development and debugging. */ bool debugMode() const { return m_debug; } /** @brief Distinguish "install" from "OEM" modes. * * Returns true in "install" mode, which is where actions happen * in a chroot -- the target system, which exists separately from * the source system. In "OEM" mode, returns false and most actions * apply to the *current* (host) system. */ bool doChroot() const { return m_doChroot; } /** @brief Global setting of prompt-before-install. * * Returns true when the configuration is such that the user * should be prompted one-last-time before any action is taken * that really affects the machine. */ bool showPromptBeforeExecution() const { return m_promptInstall; } /** @brief Distinguish between "install" and "setup" modes. * * This influences user-visible strings, for instance using the * word "setup" instead of "install" where relevant. */ bool isSetupMode() const { return m_isSetupMode; } /** @brief Global setting of disable-cancel: can't cancel ever. */ bool disableCancel() const { return m_disableCancel; } /** @brief Temporary setting of disable-cancel: can't cancel during exec. */ bool disableCancelDuringExec() const { return m_disableCancelDuringExec; } private: static Settings* s_instance; QStringList m_modulesSearchPaths; InstanceDescriptionList m_customModuleInstances; ModuleSequence m_modulesSequence; QString m_brandingComponentName; bool m_debug; bool m_doChroot; bool m_isSetupMode; bool m_promptInstall; bool m_disableCancel; bool m_disableCancelDuringExec; }; } // namespace Calamares #endif // SETTINGS_H calamares-3.2.20/src/libcalamares/geoip/000077500000000000000000000000001362604102500200365ustar00rootroot00000000000000calamares-3.2.20/src/libcalamares/geoip/GeoIPJSON.cpp000066400000000000000000000052471362604102500222070ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2016, Teo Mrnjavac * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "GeoIPJSON.h" #include "utils/Logger.h" #include "utils/Variant.h" #include "utils/Yaml.h" #include namespace CalamaresUtils { namespace GeoIP { GeoIPJSON::GeoIPJSON( const QString& attribute ) : Interface( attribute.isEmpty() ? QStringLiteral( "time_zone" ) : attribute ) { } /** @brief Indexes into a map @m by selectors @p l * * Each element of @p l is an index into map @m or a sub-map thereof, * so that "foo.bar.baz" looks up "baz" in the sub-map "bar" of sub-map * "foo" of @p m, like a regular JSON lookup would. */ static QString selectMap( const QVariantMap& m, const QStringList& l, int index ) { if ( index >= l.count() ) { return QString(); } QString attributeName = l[ index ]; if ( index == l.count() - 1 ) { return CalamaresUtils::getString( m, attributeName ); } else { bool success = false; // bogus if ( m.contains( attributeName ) ) { return selectMap( CalamaresUtils::getSubMap( m, attributeName, success ), l, index + 1 ); } return QString(); } } QString GeoIPJSON::rawReply( const QByteArray& data ) { try { YAML::Node doc = YAML::Load( data ); QVariant var = CalamaresUtils::yamlToVariant( doc ); if ( !var.isNull() && var.isValid() && var.type() == QVariant::Map ) { return selectMap( var.toMap(), m_element.split( '.' ), 0 ); } else { cWarning() << "Invalid YAML data for GeoIPJSON"; } } catch ( YAML::Exception& e ) { CalamaresUtils::explainYamlException( e, data, "GeoIP data" ); } return QString(); } GeoIP::RegionZonePair GeoIPJSON::processReply( const QByteArray& data ) { return splitTZString( rawReply( data ) ); } } // namespace GeoIP } // namespace CalamaresUtils calamares-3.2.20/src/libcalamares/geoip/GeoIPJSON.h000066400000000000000000000032521362604102500216460ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018-2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef GEOIP_GEOIPJSON_H #define GEOIP_GEOIPJSON_H #include "Interface.h" namespace CalamaresUtils { namespace GeoIP { /** @brief GeoIP lookup for services that return JSON. * * This is the original implementation of GeoIP lookup, * (e.g. using the FreeGeoIP.net service), or similar. * * The data is assumed to be in JSON format with a time_zone attribute. * * @note This class is an implementation detail. */ class GeoIPJSON : public Interface { public: /** @brief Configure the attribute name which is selected. * * If an empty string is passed in (not a valid attribute name), * then "time_zone" is used. */ explicit GeoIPJSON( const QString& attribute = QString() ); virtual RegionZonePair processReply( const QByteArray& ) override; virtual QString rawReply( const QByteArray& ) override; }; } // namespace GeoIP } // namespace CalamaresUtils #endif calamares-3.2.20/src/libcalamares/geoip/GeoIPTests.cpp000066400000000000000000000163671362604102500225450ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "GeoIPTests.h" #include "GeoIPJSON.h" #ifdef QT_XML_LIB #include "GeoIPXML.h" #endif #include "Handler.h" #include "network/Manager.h" #include QTEST_GUILESS_MAIN( GeoIPTests ) using namespace CalamaresUtils::GeoIP; GeoIPTests::GeoIPTests() {} GeoIPTests::~GeoIPTests() {} void GeoIPTests::initTestCase() { } static const char json_data_attribute[] = "{\"time_zone\":\"Europe/Amsterdam\"}"; void GeoIPTests::testJSON() { GeoIPJSON handler; auto tz = handler.processReply( json_data_attribute ); QCOMPARE( tz.first, QStringLiteral( "Europe" ) ); QCOMPARE( tz.second, QStringLiteral( "Amsterdam" ) ); // JSON is quite tolerant tz = handler.processReply( "time_zone: \"Europe/Brussels\"" ); QCOMPARE( tz.second, QStringLiteral( "Brussels" ) ); tz = handler.processReply( "time_zone: America/New_York\n" ); QCOMPARE( tz.first, QStringLiteral( "America" ) ); } void GeoIPTests::testJSONalt() { GeoIPJSON handler( "zona_de_hora" ); auto tz = handler.processReply( json_data_attribute ); QCOMPARE( tz.first, QString() ); // Not found tz = handler.processReply( "tarifa: 12\nzona_de_hora: Europe/Madrid" ); QCOMPARE( tz.first, QStringLiteral( "Europe" ) ); QCOMPARE( tz.second, QStringLiteral( "Madrid" ) ); } void GeoIPTests::testJSONbad() { static const char data[] = "time_zone: 1"; GeoIPJSON handler; auto tz = handler.processReply( data ); tz = handler.processReply( data ); QCOMPARE( tz.first, QString() ); tz = handler.processReply( "" ); QCOMPARE( tz.first, QString() ); tz = handler.processReply( "404 Forbidden" ); QCOMPARE( tz.first, QString() ); tz = handler.processReply( "{ time zone = 'America/LosAngeles'}" ); QCOMPARE( tz.first, QString() ); } static const char xml_data_ubiquity[] = R"( 85.150.1.1 OK NL NLD Netherlands None None None 50.0 4.0 0 Europe/Amsterdam )"; void GeoIPTests::testXML() { #ifdef QT_XML_LIB GeoIPXML handler; auto tz = handler.processReply( xml_data_ubiquity ); QCOMPARE( tz.first, QStringLiteral( "Europe" ) ); QCOMPARE( tz.second, QStringLiteral( "Amsterdam" ) ); #endif } void GeoIPTests::testXML2() { static const char data[] = "America/North Dakota/Beulah"; // With a space! #ifdef QT_XML_LIB GeoIPXML handler; auto tz = handler.processReply( data ); QCOMPARE( tz.first, QStringLiteral( "America" ) ); QCOMPARE( tz.second, QStringLiteral( "North_Dakota/Beulah" ) ); // Without space #endif } void GeoIPTests::testXMLalt() { #ifdef QT_XML_LIB GeoIPXML handler( "ZT" ); auto tz = handler.processReply( "Moon/Dark_side" ); QCOMPARE( tz.first, QStringLiteral( "Moon" ) ); QCOMPARE( tz.second, QStringLiteral( "Dark_side" ) ); #endif } void GeoIPTests::testXMLbad() { #ifdef QT_XML_LIB GeoIPXML handler; auto tz = handler.processReply( "{time_zone: \"Europe/Paris\"}" ); QCOMPARE( tz.first, QString() ); tz = handler.processReply( "" ); QCOMPARE( tz.first, QString() ); tz = handler.processReply( "fnord" ); QCOMPARE( tz.first, QString() ); #endif } void GeoIPTests::testSplitTZ() { using namespace CalamaresUtils::GeoIP; auto tz = splitTZString( QStringLiteral( "Moon/Dark_side" ) ); QCOMPARE( tz.first, QStringLiteral( "Moon" ) ); QCOMPARE( tz.second, QStringLiteral( "Dark_side" ) ); // Some providers return weirdly escaped data tz = splitTZString( QStringLiteral( "America\\/NewYork" ) ); QCOMPARE( tz.first, QStringLiteral( "America" ) ); QCOMPARE( tz.second, QStringLiteral( "NewYork" ) ); // That's not actually the zone name // Check that bogus data fails tz = splitTZString( QString() ); QCOMPARE( tz.first, QString() ); tz = splitTZString( QStringLiteral( "America.NewYork" ) ); QCOMPARE( tz.first, QString() ); // Check that three-level is split properly and space is replaced tz = splitTZString( QStringLiteral( "America/North Dakota/Beulah" ) ); QCOMPARE( tz.first, QStringLiteral( "America" ) ); QCOMPARE( tz.second, QStringLiteral( "North_Dakota/Beulah" ) ); } #define CHECK_GET( t, selector, url ) \ { \ auto tz = GeoIP##t( selector ) \ .processReply( CalamaresUtils::Network::Manager::instance().synchronousGet( QUrl( url ) ) ); \ qDebug() << tz; \ QCOMPARE( default_tz, tz ); \ auto tz2 = CalamaresUtils::GeoIP::Handler( "" #t, url, selector ).get(); \ qDebug() << tz2; \ QCOMPARE( default_tz, tz2 ); \ } void GeoIPTests::testGet() { if ( !QProcessEnvironment::systemEnvironment().contains( QStringLiteral( "TEST_HTTP_GET" ) ) ) { qDebug() << "Skipping HTTP GET tests, set TEST_HTTP_GET environment variable to enable"; return; } GeoIPJSON default_handler; // Call the KDE service the definitive source. auto default_tz = default_handler.processReply( CalamaresUtils::Network::Manager::instance().synchronousGet( QUrl( "https://geoip.kde.org/v1/calamares" ) ) ); // This is bogus, because the test isn't always run by me // QCOMPARE( default_tz.first, QStringLiteral("Europe") ); // QCOMPARE( default_tz.second, QStringLiteral("Amsterdam") ); QVERIFY( !default_tz.first.isEmpty() ); QVERIFY( !default_tz.second.isEmpty() ); // Each expansion of CHECK_GET does a synchronous GET, then checks that // the TZ data is the same as the default_tz; this is fragile if the // services don't agree on the location of where the test is run. CHECK_GET( JSON, QString(), "https://geoip.kde.org/v1/calamares" ) // Check it's consistent CHECK_GET( JSON, QStringLiteral( "timezone" ), "https://ipapi.co/json" ) // Different JSON CHECK_GET( JSON, QStringLiteral( "timezone" ), "http://ip-api.com/json" ) CHECK_GET( JSON, QStringLiteral( "Location.TimeZone" ), "https://geoip.kde.org/debug" ) // 2-level JSON #ifdef QT_XML_LIB CHECK_GET( XML, QString(), "http://geoip.ubuntu.com/lookup" ) // Ubiquity's XML format CHECK_GET( XML, QString(), "https://geoip.kde.org/v1/ubiquity" ) // Temporary KDE service #endif } calamares-3.2.20/src/libcalamares/geoip/GeoIPTests.h000066400000000000000000000022771362604102500222050ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef GEOIPTESTS_H #define GEOIPTESTS_H #include class GeoIPTests : public QObject { Q_OBJECT public: GeoIPTests(); ~GeoIPTests() override; private Q_SLOTS: void initTestCase(); void testJSON(); void testJSONalt(); void testJSONbad(); void testXML(); void testXML2(); void testXMLalt(); void testXMLbad(); void testSplitTZ(); void testGet(); }; #endif calamares-3.2.20/src/libcalamares/geoip/GeoIPXML.cpp000066400000000000000000000050231362604102500220660ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "GeoIPXML.h" #include "utils/Logger.h" #include namespace CalamaresUtils { namespace GeoIP { GeoIPXML::GeoIPXML( const QString& element ) : Interface( element.isEmpty() ? QStringLiteral( "TimeZone" ) : element ) { } static QStringList getElementTexts( const QByteArray& data, const QString& tag ) { QStringList elements; QString domError; int errorLine, errorColumn; QDomDocument doc; if ( doc.setContent( data, false, &domError, &errorLine, &errorColumn ) ) { const auto tzElements = doc.elementsByTagName( tag ); cDebug() << "GeoIP found" << tzElements.length() << "elements"; for ( int it = 0; it < tzElements.length(); ++it ) { auto e = tzElements.at( it ).toElement(); auto e_text = e.text(); if ( !e_text.isEmpty() ) { elements.append( e_text ); } } } else { cWarning() << "GeoIP XML data error:" << domError << "(line" << errorLine << errorColumn << ')'; } if ( elements.count() < 1 ) { cWarning() << "GeopIP XML had no non-empty elements" << tag; } return elements; } QString GeoIPXML::rawReply( const QByteArray& data ) { for ( const auto& e : getElementTexts( data, m_element ) ) { if ( !e.isEmpty() ) { return e; } } return QString(); } GeoIP::RegionZonePair GeoIPXML::processReply( const QByteArray& data ) { for ( const auto& e : getElementTexts( data, m_element ) ) { auto tz = splitTZString( e ); if ( !tz.first.isEmpty() ) { return tz; } } return RegionZonePair(); } } // namespace GeoIP } // namespace CalamaresUtils calamares-3.2.20/src/libcalamares/geoip/GeoIPXML.h000066400000000000000000000032661362604102500215420ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018-2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef GEOIP_GEOIPXML_H #define GEOIP_GEOIPXML_H #include "Interface.h" namespace CalamaresUtils { namespace GeoIP { /** @brief GeoIP lookup with XML data * * The data is assumed to be in XML format with a * * element, which contains the text (string) for the region/zone. This * format is expected by, e.g. the Ubiquity installer. * * @note This class is an implementation detail. */ class GeoIPXML : public Interface { public: /** @brief Configure the element tag which is selected. * * If an empty string is passed in (not a valid element tag), * then "TimeZone" is used. */ explicit GeoIPXML( const QString& element = QString() ); virtual RegionZonePair processReply( const QByteArray& ) override; virtual QString rawReply( const QByteArray& ) override; }; } // namespace GeoIP } // namespace CalamaresUtils #endif calamares-3.2.20/src/libcalamares/geoip/Handler.cpp000066400000000000000000000101631362604102500221200ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "Handler.h" #include "GeoIPJSON.h" #if defined( QT_XML_LIB ) #include "GeoIPXML.h" #endif #include "network/Manager.h" #include "utils/Logger.h" #include "utils/NamedEnum.h" #include "utils/Variant.h" #include static const NamedEnumTable< CalamaresUtils::GeoIP::Handler::Type >& handlerTypes() { using Type = CalamaresUtils::GeoIP::Handler::Type; // *INDENT-OFF* // clang-format off static const NamedEnumTable names{ { QStringLiteral( "none" ), Type::None }, { QStringLiteral( "json" ), Type::JSON }, { QStringLiteral( "xml" ), Type::XML } }; // *INDENT-ON* // clang-format on return names; } namespace CalamaresUtils { namespace GeoIP { Handler::Handler() : m_type( Type::None ) { } Handler::Handler( const QString& implementation, const QString& url, const QString& selector ) : m_type( Type::None ) , m_url( url ) , m_selector( selector ) { bool ok = false; m_type = handlerTypes().find( implementation, ok ); if ( !ok ) { cWarning() << "GeoIP style" << implementation << "is not recognized."; } else if ( m_type == Type::None ) { cWarning() << "GeoIP style *none* does not do anything."; } #if !defined( QT_XML_LIB ) else if ( m_type == Type::XML ) { m_type = Type::None; cWarning() << "GeoIP style *xml* is not supported in this version of Calamares."; } #endif } Handler::~Handler() {} static std::unique_ptr< Interface > create_interface( Handler::Type t, const QString& selector ) { switch ( t ) { case Handler::Type::None: return nullptr; case Handler::Type::JSON: return std::make_unique< GeoIPJSON >( selector ); case Handler::Type::XML: #if defined( QT_XML_LIB ) return std::make_unique< GeoIPXML >( selector ); #else return nullptr; #endif } NOTREACHED return nullptr; } static RegionZonePair do_query( Handler::Type type, const QString& url, const QString& selector ) { const auto interface = create_interface( type, selector ); if ( !interface ) { return RegionZonePair(); } return interface->processReply( CalamaresUtils::Network::Manager::instance().synchronousGet( url ) ); } static QString do_raw_query( Handler::Type type, const QString& url, const QString& selector ) { const auto interface = create_interface( type, selector ); if ( !interface ) { return QString(); } return interface->rawReply( CalamaresUtils::Network::Manager::instance().synchronousGet( url ) ); } RegionZonePair Handler::get() const { if ( !isValid() ) { return RegionZonePair(); } return do_query( m_type, m_url, m_selector ); } QFuture< RegionZonePair > Handler::query() const { Handler::Type type = m_type; QString url = m_url; QString selector = m_selector; return QtConcurrent::run( [=] { return do_query( type, url, selector ); } ); } QString Handler::getRaw() const { if ( !isValid() ) { return QString(); } return do_raw_query( m_type, m_url, m_selector ); } QFuture< QString > Handler::queryRaw() const { Handler::Type type = m_type; QString url = m_url; QString selector = m_selector; return QtConcurrent::run( [=] { return do_raw_query( type, url, selector ); } ); } } // namespace GeoIP } // namespace CalamaresUtils calamares-3.2.20/src/libcalamares/geoip/Handler.h000066400000000000000000000055061362604102500215720ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef GEOIP_HANDLER_H #define GEOIP_HANDLER_H #include "Interface.h" #include #include #include namespace CalamaresUtils { namespace GeoIP { /** @brief Handle one complete GeoIP lookup. * * This class handles one complete GeoIP lookup. Create it with * suitable configuration values, then call get(). This is a * synchronous API and will return an invalid zone pair on * error or if the configuration is not understood. For an * async API, use query(). */ class DLLEXPORT Handler { public: enum class Type { None, JSON, XML }; /** @brief An unconfigured handler; this always returns errors. */ Handler(); /** @brief A handler for a specific GeoIP source. * * The @p implementation name selects an implementation; currently JSON and XML * are supported. The @p url is retrieved by query() and then the @p selector * is used to select something from the data returned by the @url. */ Handler( const QString& implementation, const QString& url, const QString& selector ); ~Handler(); /** @brief Synchronously get the GeoIP result. * * If the Handler is valid, then do the actual fetching and interpretation * of data and return the result. An invalid Handler will return an * invalid (empty) result. */ RegionZonePair get() const; /// @brief Like get, but don't interpret the contents QString getRaw() const; /** @brief Asynchronously get the GeoIP result. * * See get() for the return value. */ QFuture< RegionZonePair > query() const; /// @brief Like query, but don't interpret the contents QFuture< QString > queryRaw() const; bool isValid() const { return m_type != Type::None; } Type type() const { return m_type; } QString url() const { return m_url; } QString selector() const { return m_selector; } private: Type m_type; const QString m_url; const QString m_selector; }; } // namespace GeoIP } // namespace CalamaresUtils #endif calamares-3.2.20/src/libcalamares/geoip/Interface.cpp000066400000000000000000000030451362604102500224440ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "Interface.h" #include "utils/Logger.h" namespace CalamaresUtils { namespace GeoIP { Interface::Interface( const QString& e ) : m_element( e ) { } Interface::~Interface() {} RegionZonePair splitTZString( const QString& tz ) { QString timezoneString( tz ); timezoneString.remove( '\\' ); timezoneString.replace( ' ', '_' ); QStringList tzParts = timezoneString.split( '/', QString::SkipEmptyParts ); if ( tzParts.size() >= 2 ) { cDebug() << "GeoIP reporting" << timezoneString; QString region = tzParts.takeFirst(); QString zone = tzParts.join( '/' ); return RegionZonePair( region, zone ); } return RegionZonePair( QString(), QString() ); } } // namespace GeoIP } // namespace CalamaresUtils calamares-3.2.20/src/libcalamares/geoip/Interface.h000066400000000000000000000065521362604102500221170ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018-2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef GEOIP_INTERFACE_H #define GEOIP_INTERFACE_H #include "DllMacro.h" #include #include #include class QByteArray; namespace CalamaresUtils { namespace GeoIP { /** @brief A Region, Zone pair of strings * * A GeoIP lookup returns a timezone, which is represented as a Region, * Zone pair of strings (e.g. "Europe" and "Amsterdam"). Generally, * pasting the strings back together with a "/" is the right thing to * do. The Zone **may** contain a "/" (e.g. "Kentucky/Monticello"). */ class DLLEXPORT RegionZonePair : public QPair< QString, QString > { public: /** @brief Construct from an existing pair. */ explicit RegionZonePair( const QPair& p ) : QPair( p ) { } /** @brief Construct from two strings, like qMakePair(). */ RegionZonePair( const QString& region, const QString& zone ) : QPair( region, zone ) { } /** @brief An invalid zone pair (empty strings). */ RegionZonePair() : QPair( QString(), QString() ) { } bool isValid() const { return !first.isEmpty(); } }; /** @brief Splits a region/zone string into a pair. * * Cleans up the string by removing backslashes (\\) * since some providers return silly-escaped names. Replaces * spaces with _ since some providers return human-readable names. * Splits on the first / in the resulting string, or returns a * pair of empty QStrings if it can't. (e.g. America/North Dakota/Beulah * will return "America", "North_Dakota/Beulah"). */ DLLEXPORT RegionZonePair splitTZString( const QString& s ); /** * @brief Interface for GeoIP retrievers. * * A GeoIP retriever takes a configured URL (from the config file) * and can handle the data returned from its interpretation of that * configured URL, returning a region and zone. */ class DLLEXPORT Interface { public: virtual ~Interface(); /** @brief Handle a (successful) request by interpreting the data. * * Should return a ( , ) pair, e.g. * ( "Europe", "Amsterdam" ). This is called **only** if the * request to the fullUrl was successful; the handler * is free to read as much, or as little, data as it * likes. On error, returns a RegionZonePair with empty * strings (e.g. ( "", "" ) ). */ virtual RegionZonePair processReply( const QByteArray& ) = 0; /** @brief Get the raw reply data. */ virtual QString rawReply( const QByteArray& ) = 0; protected: Interface( const QString& e = QString() ); QString m_element; // string for selecting from data }; } // namespace GeoIP } // namespace CalamaresUtils #endif calamares-3.2.20/src/libcalamares/geoip/test_geoip.cpp000066400000000000000000000040371362604102500227100ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ /** * This is a test-application that does one GeoIP parse. */ #include #include "GeoIPJSON.h" #ifdef QT_XML_LIB #include "GeoIPXML.h" #endif using std::cerr; using namespace CalamaresUtils::GeoIP; int main( int argc, char** argv ) { if ( argc != 2 ) { cerr << "Usage: curl url | test_geoip \n"; return 1; } Interface* handler = nullptr; if ( QStringLiteral( "json" ) == argv[ 1 ] ) { handler = new GeoIPJSON; } #ifdef QT_XML_LIB else if ( QStringLiteral( "xml" ) == argv[ 1 ] ) { handler = new GeoIPXML; } #endif if ( !handler ) { cerr << "Unknown format '" << argv[ 1 ] << "'\n"; return 1; } QByteArray ba; while ( !std::cin.eof() ) { char arr[ 1024 ]; std::cin.read( arr, sizeof( arr ) ); int s = static_cast< int >( std::cin.gcount() ); ba.append( arr, s ); } auto tz = handler->processReply( ba ); if ( tz.first.isEmpty() ) { std::cout << "No TimeZone determined from input.\n"; } else { std::cout << "TimeZone Region=" << tz.first.toLatin1().constData() << "\nTimeZone Zone=" << tz.second.toLatin1().constData() << '\n'; } return 0; } calamares-3.2.20/src/libcalamares/locale/000077500000000000000000000000001362604102500201725ustar00rootroot00000000000000calamares-3.2.20/src/libcalamares/locale/CountryData_p.cpp000066400000000000000000000356461362604102500234700ustar00rootroot00000000000000/* GENERATED FILE DO NOT EDIT * * === This file is part of Calamares - === * * This file is derived from CLDR data from Unicode, Inc. Applicable terms: * * A. Unicode Copyright * 1. Copyright © 1991-2019 Unicode, Inc. All rights reserved. * B. Definitions * Unicode Data Files ("DATA FILES") include all data files under the directories: * https://www.unicode.org/Public/ * C. Terms of Use * 2. Any person is hereby authorized, without fee, to view, use, reproduce, * and distribute all documents and files, subject to the Terms and * Conditions herein. */ /* MODIFICATIONS * * Edited anyway: * 20191211 India changed to AnyLanguage, since Hindi doesn't make sense. #1284 * */ // BEGIN Generated from CLDR data // *INDENT-OFF* // clang-format off struct CountryData { QLocale::Language l; QLocale::Country c; char cc1; char cc2; }; static constexpr int const country_data_size = 198; static const CountryData country_data_table[] = { { QLocale::Language::Catalan, QLocale::Country::Andorra, 'A', 'D' }, { QLocale::Language::Arabic, QLocale::Country::UnitedArabEmirates, 'A', 'E' }, { QLocale::Language::Persian, QLocale::Country::Afghanistan, 'A', 'F' }, { QLocale::Language::Albanian, QLocale::Country::Albania, 'A', 'L' }, { QLocale::Language::Armenian, QLocale::Country::Armenia, 'A', 'M' }, { QLocale::Language::Portuguese, QLocale::Country::Angola, 'A', 'O' }, { QLocale::Language::AnyLanguage, QLocale::Country::Antarctica, 'A', 'Q' }, { QLocale::Language::Spanish, QLocale::Country::Argentina, 'A', 'R' }, { QLocale::Language::Samoan, QLocale::Country::AmericanSamoa, 'A', 'S' }, { QLocale::Language::German, QLocale::Country::Austria, 'A', 'T' }, { QLocale::Language::Dutch, QLocale::Country::Aruba, 'A', 'W' }, { QLocale::Language::Swedish, QLocale::Country::AlandIslands, 'A', 'X' }, { QLocale::Language::Azerbaijani, QLocale::Country::Azerbaijan, 'A', 'Z' }, { QLocale::Language::Bosnian, QLocale::Country::BosniaAndHerzegowina, 'B', 'A' }, { QLocale::Language::Bengali, QLocale::Country::Bangladesh, 'B', 'D' }, { QLocale::Language::Dutch, QLocale::Country::Belgium, 'B', 'E' }, { QLocale::Language::French, QLocale::Country::BurkinaFaso, 'B', 'F' }, { QLocale::Language::Bulgarian, QLocale::Country::Bulgaria, 'B', 'G' }, { QLocale::Language::Arabic, QLocale::Country::Bahrain, 'B', 'H' }, { QLocale::Language::Rundi, QLocale::Country::Burundi, 'B', 'I' }, { QLocale::Language::French, QLocale::Country::Benin, 'B', 'J' }, { QLocale::Language::French, QLocale::Country::SaintBarthelemy, 'B', 'L' }, { QLocale::Language::Malay, QLocale::Country::Brunei, 'B', 'N' }, { QLocale::Language::Spanish, QLocale::Country::Bolivia, 'B', 'O' }, { QLocale::Language::Papiamento, QLocale::Country::Bonaire, 'B', 'Q' }, { QLocale::Language::Portuguese, QLocale::Country::Brazil, 'B', 'R' }, { QLocale::Language::Dzongkha, QLocale::Country::Bhutan, 'B', 'T' }, { QLocale::Language::AnyLanguage, QLocale::Country::BouvetIsland, 'B', 'V' }, { QLocale::Language::Belarusian, QLocale::Country::Belarus, 'B', 'Y' }, { QLocale::Language::Swahili, QLocale::Country::CongoKinshasa, 'C', 'D' }, { QLocale::Language::French, QLocale::Country::CentralAfricanRepublic, 'C', 'F' }, { QLocale::Language::French, QLocale::Country::CongoBrazzaville, 'C', 'G' }, { QLocale::Language::German, QLocale::Country::Switzerland, 'C', 'H' }, { QLocale::Language::French, QLocale::Country::IvoryCoast, 'C', 'I' }, { QLocale::Language::Spanish, QLocale::Country::Chile, 'C', 'L' }, { QLocale::Language::French, QLocale::Country::Cameroon, 'C', 'M' }, { QLocale::Language::Chinese, QLocale::Country::China, 'C', 'N' }, { QLocale::Language::Spanish, QLocale::Country::Colombia, 'C', 'O' }, { QLocale::Language::AnyLanguage, QLocale::Country::ClippertonIsland, 'C', 'P' }, { QLocale::Language::Spanish, QLocale::Country::CostaRica, 'C', 'R' }, { QLocale::Language::Spanish, QLocale::Country::Cuba, 'C', 'U' }, { QLocale::Language::Portuguese, QLocale::Country::CapeVerde, 'C', 'V' }, { QLocale::Language::Papiamento, QLocale::Country::CuraSao, 'C', 'W' }, { QLocale::Language::Greek, QLocale::Country::Cyprus, 'C', 'Y' }, { QLocale::Language::Czech, QLocale::Country::CzechRepublic, 'C', 'Z' }, { QLocale::Language::German, QLocale::Country::Germany, 'D', 'E' }, { QLocale::Language::Afar, QLocale::Country::Djibouti, 'D', 'J' }, { QLocale::Language::Danish, QLocale::Country::Denmark, 'D', 'K' }, { QLocale::Language::Spanish, QLocale::Country::DominicanRepublic, 'D', 'O' }, { QLocale::Language::Arabic, QLocale::Country::Algeria, 'D', 'Z' }, { QLocale::Language::Spanish, QLocale::Country::CeutaAndMelilla, 'E', 'A' }, { QLocale::Language::Spanish, QLocale::Country::Ecuador, 'E', 'C' }, { QLocale::Language::Estonian, QLocale::Country::Estonia, 'E', 'E' }, { QLocale::Language::Arabic, QLocale::Country::Egypt, 'E', 'G' }, { QLocale::Language::Arabic, QLocale::Country::WesternSahara, 'E', 'H' }, { QLocale::Language::Tigrinya, QLocale::Country::Eritrea, 'E', 'R' }, { QLocale::Language::Spanish, QLocale::Country::Spain, 'E', 'S' }, { QLocale::Language::Amharic, QLocale::Country::Ethiopia, 'E', 'T' }, { QLocale::Language::English, QLocale::Country::EuropeanUnion, 'E', 'U' }, { QLocale::Language::German, QLocale::Country::AnyCountry, 'E', 'Z' }, { QLocale::Language::Finnish, QLocale::Country::Finland, 'F', 'I' }, { QLocale::Language::Faroese, QLocale::Country::FaroeIslands, 'F', 'O' }, { QLocale::Language::French, QLocale::Country::France, 'F', 'R' }, { QLocale::Language::French, QLocale::Country::Gabon, 'G', 'A' }, { QLocale::Language::Georgian, QLocale::Country::Georgia, 'G', 'E' }, { QLocale::Language::French, QLocale::Country::FrenchGuiana, 'G', 'F' }, { QLocale::Language::Akan, QLocale::Country::Ghana, 'G', 'H' }, { QLocale::Language::Greenlandic, QLocale::Country::Greenland, 'G', 'L' }, { QLocale::Language::French, QLocale::Country::Guinea, 'G', 'N' }, { QLocale::Language::French, QLocale::Country::Guadeloupe, 'G', 'P' }, { QLocale::Language::Spanish, QLocale::Country::EquatorialGuinea, 'G', 'Q' }, { QLocale::Language::Greek, QLocale::Country::Greece, 'G', 'R' }, { QLocale::Language::AnyLanguage, QLocale::Country::SouthGeorgiaAndTheSouthSandwichIslands, 'G', 'S' }, { QLocale::Language::Spanish, QLocale::Country::Guatemala, 'G', 'T' }, { QLocale::Language::Portuguese, QLocale::Country::GuineaBissau, 'G', 'W' }, { QLocale::Language::Chinese, QLocale::Country::HongKong, 'H', 'K' }, { QLocale::Language::AnyLanguage, QLocale::Country::HeardAndMcDonaldIslands, 'H', 'M' }, { QLocale::Language::Spanish, QLocale::Country::Honduras, 'H', 'N' }, { QLocale::Language::Croatian, QLocale::Country::Croatia, 'H', 'R' }, { QLocale::Language::Haitian, QLocale::Country::Haiti, 'H', 'T' }, { QLocale::Language::Hungarian, QLocale::Country::Hungary, 'H', 'U' }, { QLocale::Language::Spanish, QLocale::Country::CanaryIslands, 'I', 'C' }, { QLocale::Language::Indonesian, QLocale::Country::Indonesia, 'I', 'D' }, { QLocale::Language::Hebrew, QLocale::Country::Israel, 'I', 'L' }, { QLocale::Language::AnyLanguage, QLocale::Country::India, 'I', 'N' }, { QLocale::Language::Arabic, QLocale::Country::Iraq, 'I', 'Q' }, { QLocale::Language::Persian, QLocale::Country::Iran, 'I', 'R' }, { QLocale::Language::Icelandic, QLocale::Country::Iceland, 'I', 'S' }, { QLocale::Language::Italian, QLocale::Country::Italy, 'I', 'T' }, { QLocale::Language::Arabic, QLocale::Country::Jordan, 'J', 'O' }, { QLocale::Language::Japanese, QLocale::Country::Japan, 'J', 'P' }, { QLocale::Language::Swahili, QLocale::Country::Kenya, 'K', 'E' }, { QLocale::Language::Kirghiz, QLocale::Country::Kyrgyzstan, 'K', 'G' }, { QLocale::Language::Khmer, QLocale::Country::Cambodia, 'K', 'H' }, { QLocale::Language::Arabic, QLocale::Country::Comoros, 'K', 'M' }, { QLocale::Language::Korean, QLocale::Country::NorthKorea, 'K', 'P' }, { QLocale::Language::Korean, QLocale::Country::SouthKorea, 'K', 'R' }, { QLocale::Language::Arabic, QLocale::Country::Kuwait, 'K', 'W' }, { QLocale::Language::Russian, QLocale::Country::Kazakhstan, 'K', 'Z' }, { QLocale::Language::Lao, QLocale::Country::Laos, 'L', 'A' }, { QLocale::Language::Arabic, QLocale::Country::Lebanon, 'L', 'B' }, { QLocale::Language::German, QLocale::Country::Liechtenstein, 'L', 'I' }, { QLocale::Language::Sinhala, QLocale::Country::SriLanka, 'L', 'K' }, { QLocale::Language::SouthernSotho, QLocale::Country::Lesotho, 'L', 'S' }, { QLocale::Language::Lithuanian, QLocale::Country::Lithuania, 'L', 'T' }, { QLocale::Language::French, QLocale::Country::Luxembourg, 'L', 'U' }, { QLocale::Language::Latvian, QLocale::Country::Latvia, 'L', 'V' }, { QLocale::Language::Arabic, QLocale::Country::Libya, 'L', 'Y' }, { QLocale::Language::Arabic, QLocale::Country::Morocco, 'M', 'A' }, { QLocale::Language::French, QLocale::Country::Monaco, 'M', 'C' }, { QLocale::Language::Romanian, QLocale::Country::Moldova, 'M', 'D' }, { QLocale::Language::Serbian, QLocale::Country::Montenegro, 'M', 'E' }, { QLocale::Language::French, QLocale::Country::SaintMartin, 'M', 'F' }, { QLocale::Language::Malagasy, QLocale::Country::Madagascar, 'M', 'G' }, { QLocale::Language::Macedonian, QLocale::Country::Macedonia, 'M', 'K' }, { QLocale::Language::Bambara, QLocale::Country::Mali, 'M', 'L' }, { QLocale::Language::Burmese, QLocale::Country::Myanmar, 'M', 'M' }, { QLocale::Language::Mongolian, QLocale::Country::Mongolia, 'M', 'N' }, { QLocale::Language::Chinese, QLocale::Country::Macau, 'M', 'O' }, { QLocale::Language::French, QLocale::Country::Martinique, 'M', 'Q' }, { QLocale::Language::Arabic, QLocale::Country::Mauritania, 'M', 'R' }, { QLocale::Language::Maltese, QLocale::Country::Malta, 'M', 'T' }, { QLocale::Language::Morisyen, QLocale::Country::Mauritius, 'M', 'U' }, { QLocale::Language::Divehi, QLocale::Country::Maldives, 'M', 'V' }, { QLocale::Language::Spanish, QLocale::Country::Mexico, 'M', 'X' }, { QLocale::Language::Malay, QLocale::Country::Malaysia, 'M', 'Y' }, { QLocale::Language::Portuguese, QLocale::Country::Mozambique, 'M', 'Z' }, { QLocale::Language::Afrikaans, QLocale::Country::Namibia, 'N', 'A' }, { QLocale::Language::French, QLocale::Country::NewCaledonia, 'N', 'C' }, { QLocale::Language::Hausa, QLocale::Country::Niger, 'N', 'E' }, { QLocale::Language::Spanish, QLocale::Country::Nicaragua, 'N', 'I' }, { QLocale::Language::Dutch, QLocale::Country::Netherlands, 'N', 'L' }, { QLocale::Language::NorwegianBokmal, QLocale::Country::Norway, 'N', 'O' }, { QLocale::Language::Nepali, QLocale::Country::Nepal, 'N', 'P' }, { QLocale::Language::Arabic, QLocale::Country::Oman, 'O', 'M' }, { QLocale::Language::Spanish, QLocale::Country::Panama, 'P', 'A' }, { QLocale::Language::Spanish, QLocale::Country::Peru, 'P', 'E' }, { QLocale::Language::French, QLocale::Country::FrenchPolynesia, 'P', 'F' }, { QLocale::Language::TokPisin, QLocale::Country::PapuaNewGuinea, 'P', 'G' }, { QLocale::Language::Filipino, QLocale::Country::Philippines, 'P', 'H' }, { QLocale::Language::Urdu, QLocale::Country::Pakistan, 'P', 'K' }, { QLocale::Language::Polish, QLocale::Country::Poland, 'P', 'L' }, { QLocale::Language::French, QLocale::Country::SaintPierreAndMiquelon, 'P', 'M' }, { QLocale::Language::Spanish, QLocale::Country::PuertoRico, 'P', 'R' }, { QLocale::Language::Arabic, QLocale::Country::PalestinianTerritories, 'P', 'S' }, { QLocale::Language::Portuguese, QLocale::Country::Portugal, 'P', 'T' }, { QLocale::Language::Palauan, QLocale::Country::Palau, 'P', 'W' }, { QLocale::Language::Guarani, QLocale::Country::Paraguay, 'P', 'Y' }, { QLocale::Language::Arabic, QLocale::Country::Qatar, 'Q', 'A' }, { QLocale::Language::English, QLocale::Country::OutlyingOceania, 'Q', 'O' }, { QLocale::Language::French, QLocale::Country::Reunion, 'R', 'E' }, { QLocale::Language::Romanian, QLocale::Country::Romania, 'R', 'O' }, { QLocale::Language::Serbian, QLocale::Country::Serbia, 'R', 'S' }, { QLocale::Language::Russian, QLocale::Country::Russia, 'R', 'U' }, { QLocale::Language::Kinyarwanda, QLocale::Country::Rwanda, 'R', 'W' }, { QLocale::Language::Arabic, QLocale::Country::SaudiArabia, 'S', 'A' }, { QLocale::Language::French, QLocale::Country::Seychelles, 'S', 'C' }, { QLocale::Language::Arabic, QLocale::Country::Sudan, 'S', 'D' }, { QLocale::Language::Swedish, QLocale::Country::Sweden, 'S', 'E' }, { QLocale::Language::Slovenian, QLocale::Country::Slovenia, 'S', 'I' }, { QLocale::Language::NorwegianBokmal, QLocale::Country::SvalbardAndJanMayenIslands, 'S', 'J' }, { QLocale::Language::Slovak, QLocale::Country::Slovakia, 'S', 'K' }, { QLocale::Language::Italian, QLocale::Country::SanMarino, 'S', 'M' }, { QLocale::Language::French, QLocale::Country::Senegal, 'S', 'N' }, { QLocale::Language::Somali, QLocale::Country::Somalia, 'S', 'O' }, { QLocale::Language::Dutch, QLocale::Country::Suriname, 'S', 'R' }, { QLocale::Language::Portuguese, QLocale::Country::SaoTomeAndPrincipe, 'S', 'T' }, { QLocale::Language::Spanish, QLocale::Country::ElSalvador, 'S', 'V' }, { QLocale::Language::Arabic, QLocale::Country::Syria, 'S', 'Y' }, { QLocale::Language::French, QLocale::Country::Chad, 'T', 'D' }, { QLocale::Language::French, QLocale::Country::FrenchSouthernTerritories, 'T', 'F' }, { QLocale::Language::French, QLocale::Country::Togo, 'T', 'G' }, { QLocale::Language::Thai, QLocale::Country::Thailand, 'T', 'H' }, { QLocale::Language::Tajik, QLocale::Country::Tajikistan, 'T', 'J' }, { QLocale::Language::TokelauLanguage, QLocale::Country::Tokelau, 'T', 'K' }, { QLocale::Language::Portuguese, QLocale::Country::EastTimor, 'T', 'L' }, { QLocale::Language::Turkmen, QLocale::Country::Turkmenistan, 'T', 'M' }, { QLocale::Language::Arabic, QLocale::Country::Tunisia, 'T', 'N' }, { QLocale::Language::Tongan, QLocale::Country::Tonga, 'T', 'O' }, { QLocale::Language::Turkish, QLocale::Country::Turkey, 'T', 'R' }, { QLocale::Language::TuvaluLanguage, QLocale::Country::Tuvalu, 'T', 'V' }, { QLocale::Language::Chinese, QLocale::Country::Taiwan, 'T', 'W' }, { QLocale::Language::Swahili, QLocale::Country::Tanzania, 'T', 'Z' }, { QLocale::Language::Ukrainian, QLocale::Country::Ukraine, 'U', 'A' }, { QLocale::Language::Swahili, QLocale::Country::Uganda, 'U', 'G' }, { QLocale::Language::Spanish, QLocale::Country::Uruguay, 'U', 'Y' }, { QLocale::Language::Uzbek, QLocale::Country::Uzbekistan, 'U', 'Z' }, { QLocale::Language::Italian, QLocale::Country::VaticanCityState, 'V', 'A' }, { QLocale::Language::Spanish, QLocale::Country::Venezuela, 'V', 'E' }, { QLocale::Language::Vietnamese, QLocale::Country::Vietnam, 'V', 'N' }, { QLocale::Language::Bislama, QLocale::Country::Vanuatu, 'V', 'U' }, { QLocale::Language::French, QLocale::Country::WallisAndFutunaIslands, 'W', 'F' }, { QLocale::Language::Samoan, QLocale::Country::Samoa, 'W', 'S' }, { QLocale::Language::Albanian, QLocale::Country::Kosovo, 'X', 'K' }, { QLocale::Language::Arabic, QLocale::Country::Yemen, 'Y', 'E' }, { QLocale::Language::French, QLocale::Country::Mayotte, 'Y', 'T' }, { QLocale::Language::Shona, QLocale::Country::Zimbabwe, 'Z', 'W' }, { QLocale::Language::AnyLanguage, QLocale::Country::AnyCountry, 0, 0 }, }; static_assert( (sizeof(country_data_table) / sizeof(CountryData)) == country_data_size, "Table size mismatch for CountryData" ); // END Generated from CLDR data calamares-3.2.20/src/libcalamares/locale/Label.cpp000066400000000000000000000050311362604102500217140ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2017-2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "Label.h" namespace CalamaresUtils { namespace Locale { Label::Label( QObject* parent ) : Label( QString(), LabelFormat::IfNeededWithCountry, parent ) { } Label::Label( const QString& locale, LabelFormat format, QObject* parent ) : QObject( parent ) , m_locale( Label::getLocale( locale ) ) , m_localeId( locale.isEmpty() ? m_locale.name() : locale ) { //: language[name] (country[name]) QString longFormat = QObject::tr( "%1 (%2)" ); QString languageName = m_locale.nativeLanguageName(); QString englishName = m_locale.languageToString( m_locale.language() ); QString countryName; if ( languageName.isEmpty() ) { languageName = QString( "* %1 (%2)" ).arg( locale, englishName ); } bool needsCountryName = ( format == LabelFormat::AlwaysWithCountry ) || ( locale.contains( '_' ) && QLocale::countriesForLanguage( m_locale.language() ).count() > 1 ); if ( needsCountryName ) { countryName = m_locale.nativeCountryName(); } m_label = needsCountryName ? longFormat.arg( languageName, countryName ) : languageName; m_englishLabel = needsCountryName ? longFormat.arg( englishName, QLocale::countryToString( m_locale.country() ) ) : englishName; } QLocale Label::getLocale( const QString& localeName ) { if ( localeName.isEmpty() ) { return QLocale(); } if ( localeName.contains( "@latin" ) ) { QLocale loc( localeName ); // Ignores @latin return QLocale( loc.language(), QLocale::Script::LatinScript, loc.country() ); } else { return QLocale( localeName ); } } } // namespace Locale } // namespace CalamaresUtils calamares-3.2.20/src/libcalamares/locale/Label.h000066400000000000000000000076041362604102500213710ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2017-2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef LOCALE_LABEL_H #define LOCALE_LABEL_H #include #include #include namespace CalamaresUtils { namespace Locale { /** * @brief Consistent locale (language + country) naming. * * Support class to turn locale names (as used by Calamares's * translation system) into QLocales, and also into consistent * human-readable text labels. */ class Label : public QObject { Q_OBJECT Q_PROPERTY( QString label READ label CONSTANT FINAL ) Q_PROPERTY( QString englishLabel READ englishLabel CONSTANT FINAL ) Q_PROPERTY( QString localeId MEMBER m_localeId CONSTANT FINAL ) public: /** @brief Formatting option for label -- add (country) to label. */ enum class LabelFormat { AlwaysWithCountry, IfNeededWithCountry }; /** @brief Empty locale. This uses the system-default locale. */ Label( QObject* parent = nullptr ); /** @brief Construct from a locale name. * * The @p localeName should be one that Qt recognizes, e.g. en_US or ar_EY. * The @p format determines whether the country name is always present * in the label (human-readable form) or only if needed for disambiguation. */ Label( const QString& localeName, LabelFormat format = LabelFormat::IfNeededWithCountry, QObject* parent = nullptr ); /** @brief Define a sorting order. * * Locales are sorted by their id, which means the ISO 2-letter code + country. */ bool operator<( const Label& other ) const { return m_localeId < other.m_localeId; } /** @brief Is this locale English? * * en_US and en (American English) is defined as English. The Queen's * English -- proper English -- is relegated to non-English status. */ bool isEnglish() const { return m_localeId == QLatin1String( "en_US" ) || m_localeId == QLatin1String( "en" ); } /** @brief Get the human-readable name for this locale. */ QString label() const { return m_label; } /** @brief Get the *English* human-readable name for this locale. */ QString englishLabel() const { return m_englishLabel; } /** @brief Get the Qt locale. */ QLocale locale() const { return m_locale; } QString name() const { return m_locale.name(); } QString id() const { return m_localeId; } /// @brief Convenience accessor to the language part of the locale QLocale::Language language() const { return m_locale.language(); } /// @brief Convenience accessor to the country part (if any) of the locale QLocale::Country country() const { return m_locale.country(); } /** @brief Get a Qt locale for the given @p localeName * * This special-cases `sr@latin`, which is used as a translation * name in Calamares, while Qt recognizes `sr@latn`. */ static QLocale getLocale( const QString& localeName ); protected: QLocale m_locale; QString m_localeId; // the locale identifier, e.g. "en_GB" QString m_label; // the native name of the locale QString m_englishLabel; }; } // namespace Locale } // namespace CalamaresUtils #endif calamares-3.2.20/src/libcalamares/locale/LabelModel.cpp000066400000000000000000000070551362604102500227050ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019-2020 Adriaan de Groot * Copyright 2019, Camilo Higuita * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "LabelModel.h" #include "Lookup.h" #include "CalamaresVersion.h" // For the list of translations namespace CalamaresUtils { namespace Locale { LabelModel::LabelModel( const QStringList& locales, QObject* parent ) : QAbstractListModel( parent ) , m_localeIds( locales ) { Q_ASSERT( locales.count() > 0 ); m_locales.reserve( locales.count() ); for ( const auto& l : locales ) { m_locales.push_back( new Label( l, Label::LabelFormat::IfNeededWithCountry, this ) ); } } LabelModel::~LabelModel() {} int LabelModel::rowCount( const QModelIndex& ) const { return m_locales.count(); } QVariant LabelModel::data( const QModelIndex& index, int role ) const { if ( ( role != LabelRole ) && ( role != EnglishLabelRole ) ) { return QVariant(); } if ( !index.isValid() ) { return QVariant(); } const auto& locale = m_locales.at( index.row() ); switch ( role ) { case LabelRole: return locale->label(); case EnglishLabelRole: return locale->englishLabel(); default: return QVariant(); } } QHash< int, QByteArray > LabelModel::roleNames() const { return { { LabelRole, "label" }, { EnglishLabelRole, "englishLabel" } }; } const Label& LabelModel::locale( int row ) const { if ( ( row < 0 ) || ( row >= m_locales.count() ) ) { for ( const auto& l : m_locales ) if ( l->isEnglish() ) { return *l; } return *m_locales[ 0 ]; } return *m_locales[ row ]; } int LabelModel::find( std::function< bool( const Label& ) > predicate ) const { for ( int row = 0; row < m_locales.count(); ++row ) { if ( predicate( *m_locales[ row ] ) ) { return row; } } return -1; } int LabelModel::find( std::function< bool( const QLocale& ) > predicate ) const { return find( [&]( const Label& l ) { return predicate( l.locale() ); } ); } int LabelModel::find( const QLocale& locale ) const { return find( [&]( const Label& l ) { return locale == l.locale(); } ); } int LabelModel::find( const QString& countryCode ) const { if ( countryCode.length() != 2 ) { return -1; } auto c_l = countryData( countryCode ); int r = find( [&]( const Label& l ) { return ( l.language() == c_l.second ) && ( l.country() == c_l.first ); } ); if ( r >= 0 ) { return r; } return find( [&]( const Label& l ) { return l.language() == c_l.second; } ); } LabelModel* availableTranslations() { static LabelModel* model = new LabelModel( QStringLiteral( CALAMARES_TRANSLATION_LANGUAGES ).split( ';' ) ); return model; } } // namespace Locale } // namespace CalamaresUtils calamares-3.2.20/src/libcalamares/locale/LabelModel.h000066400000000000000000000056221362604102500223500ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019-2020, Adriaan de Groot * Copyright 2019, Camilo Higuita * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef LOCALE_LABELMODEL_H #define LOCALE_LABELMODEL_H #include "DllMacro.h" #include "Label.h" #include #include namespace CalamaresUtils { namespace Locale { class DLLEXPORT LabelModel : public QAbstractListModel { Q_OBJECT public: enum { LabelRole = Qt::DisplayRole, EnglishLabelRole = Qt::UserRole + 1 }; LabelModel( const QStringList& locales, QObject* parent = nullptr ); virtual ~LabelModel() override; int rowCount( const QModelIndex& parent ) const override; QVariant data( const QModelIndex& index, int role ) const override; QHash< int, QByteArray > roleNames() const override; /** @brief Gets locale information for entry #n * * This is the backing data for the model; if @p row is out-of-range, * returns a reference to en_US. */ const Label& locale( int row ) const; /// @brief Returns all of the locale Ids (e.g. en_US) put into this model. const QStringList& localeIds() const { return m_localeIds; } /** @brief Searches for an item that matches @p predicate * * Returns the row number of the first match, or -1 if there isn't one. */ int find( std::function< bool( const QLocale& ) > predicate ) const; int find( std::function< bool( const Label& ) > predicate ) const; /// @brief Looks for an item using the same locale, -1 if there isn't one int find( const QLocale& ) const; /// @brief Looks for an item that best matches the 2-letter country code int find( const QString& countryCode ) const; private: QVector< Label* > m_locales; QStringList m_localeIds; }; /** @brief Returns a model with all available translations. * * The translations are set when Calamares is compiled; the list * is provided by CMake via the CALAMARES_TRANSLATION_LANGUAGES * #define. * * This model is a singleton and can be shared. * * NOTE: While the model is not typed const, it should be. Do not modify. */ DLLEXPORT LabelModel* availableTranslations(); } // namespace Locale } // namespace CalamaresUtils #endif calamares-3.2.20/src/libcalamares/locale/Lookup.cpp000066400000000000000000000053751362604102500221610ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "Lookup.h" #include "CountryData_p.cpp" namespace CalamaresUtils { namespace Locale { struct TwoChar { TwoChar( const QString& code ) : cc1( 0 ) , cc2( 0 ) { if ( code.length() == 2 ) { cc1 = code[ 0 ].toLatin1(); cc2 = code[ 1 ].toLatin1(); } } char cc1; char cc2; }; static const CountryData* lookup( TwoChar c ) { if ( !c.cc1 ) { return nullptr; } const CountryData* p = std::find_if( country_data_table, country_data_table + country_data_size, [c = c]( const CountryData& d ) { return ( d.cc1 == c.cc1 ) && ( d.cc2 == c.cc2 ); } ); if ( p == country_data_table + country_data_size ) { return nullptr; } return p; } QLocale::Country countryForCode( const QString& code ) { const CountryData* p = lookup( TwoChar( code ) ); return p ? p->c : QLocale::Country::AnyCountry; } QLocale::Language languageForCountry( const QString& code ) { const CountryData* p = lookup( TwoChar( code ) ); return p ? p->l : QLocale::Language::AnyLanguage; } QPair< QLocale::Country, QLocale::Language > countryData( const QString& code ) { const CountryData* p = lookup( TwoChar( code ) ); return p ? qMakePair( p->c, p->l ) : qMakePair( QLocale::Country::AnyCountry, QLocale::Language::AnyLanguage ); } QLocale countryLocale( const QString& code ) { auto p = countryData( code ); return QLocale( p.second, p.first ); } QLocale::Language languageForCountry( QLocale::Country country ) { const CountryData* p = std::find_if( country_data_table, country_data_table + country_data_size, [c = country]( const CountryData& d ) { return d.c == c; } ); if ( p == country_data_table + country_data_size ) { return QLocale::Language::AnyLanguage; } return p->l; } } // namespace Locale } // namespace CalamaresUtils calamares-3.2.20/src/libcalamares/locale/Lookup.h000066400000000000000000000040041362604102500216120ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef LOCALE_LOOKUP_H #define LOCALE_LOOKUP_H #include "DllMacro.h" #include #include namespace CalamaresUtils { namespace Locale { /* All the functions in this file do lookups of locale data * based on CLDR tables; these are lookups that you can't (easily) * do with just QLocale (e.g. from 2-letter country code to a likely * locale). */ /// @brief Map a 2-letter code to a Country, or AnyCountry if not found DLLEXPORT QLocale::Country countryForCode( const QString& code ); /** @brief Map a Country to a Language, or AnyLanguage if not found * * This is a *likely* language for the given country, based on the * CLDR tables. For instance, this maps Belgium to Dutch. */ DLLEXPORT QLocale::Language languageForCountry( QLocale::Country country ); /// @brief Map a 2-letter code to a Language, or AnyLanguage if not found DLLEXPORT QLocale::Language languageForCountry( const QString& code ); /// @brief Get both Country and Language for a 2-letter code DLLEXPORT QPair< QLocale::Country, QLocale::Language > countryData( const QString& code ); /// @brief Get a likely locale for a 2-letter country code DLLEXPORT QLocale countryLocale( const QString& code ); } // namespace Locale } // namespace CalamaresUtils #endif calamares-3.2.20/src/libcalamares/locale/Tests.cpp000066400000000000000000000202521362604102500220010ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "Tests.h" #include "locale/LabelModel.h" #include "locale/TimeZone.h" #include "locale/TranslatableConfiguration.h" #include "CalamaresVersion.h" #include "utils/Logger.h" #include QTEST_GUILESS_MAIN( LocaleTests ) LocaleTests::LocaleTests() {} LocaleTests::~LocaleTests() {} void LocaleTests::initTestCase() { // Otherwise plain get() is dubious in the TranslatableConfiguration tests QVERIFY( ( QLocale().name() == "C" ) || ( QLocale().name() == "en_US" ) ); } void LocaleTests::testLanguageModelCount() { const auto* m = CalamaresUtils::Locale::availableTranslations(); QVERIFY( m ); QVERIFY( m->rowCount( QModelIndex() ) > 1 ); int dutch = m->find( QLocale( "nl_NL" ) ); QVERIFY( dutch > 0 ); QCOMPARE( m->find( "NL" ), dutch ); // must be capitals QCOMPARE( m->find( "nl" ), -1 ); QCOMPARE( m->find( QLocale( "nl" ) ), dutch ); // Belgium speaks Dutch as well QCOMPARE( m->find( "BE" ), dutch ); } void LocaleTests::testEsperanto() { Logger::setupLogLevel( Logger::LOGDEBUG ); const auto* m = CalamaresUtils::Locale::availableTranslations(); QVERIFY( m ); // Cursory test that all the locales found have a sensible language, // and that some specific languages have sensible corresponding data. // // This fails on Esperanto (or, if Esperanto is added to Qt, then // this will pass and the test after the loop will fail. for ( int i = 0; i < m->rowCount( QModelIndex() ); ++i ) { const auto& label = m->locale( i ); const auto locale = label.locale(); cDebug() << label.label() << locale; QVERIFY( locale.language() == QLocale::Greek ? locale.script() == QLocale::GreekScript : true ); QVERIFY( locale.language() == QLocale::Korean ? locale.script() == QLocale::KoreanScript : true ); QVERIFY( locale.language() == QLocale::Lithuanian ? locale.country() == QLocale::Lithuania : true ); QVERIFY( locale.language() != QLocale::C ); } #if QT_VERSION < QT_VERSION_CHECK( 5, 12, 2 ) QCOMPARE( QLocale( "eo" ).language(), QLocale::C ); #else QCOMPARE( QLocale( "eo" ).language(), QLocale::Esperanto ); #endif } static const QStringList& someLanguages() { static QStringList languages { "nl", "de", "da", "nb", "sr@latin", "ar", "ru" }; return languages; } /** @brief Check consistency of test data * Check that all the languages used in testing, are actually enabled * in Calamares translations. */ void LocaleTests::testTranslatableLanguages() { QStringList availableLanguages = QString( CALAMARES_TRANSLATION_LANGUAGES ).split( ';' ); cDebug() << "Translation languages:" << availableLanguages; for ( const auto& language : someLanguages() ) { // Could be QVERIFY, but then we don't see what language code fails QCOMPARE( availableLanguages.contains( language ) ? language : QString(), language ); } } /** @brief Test strings with no translations */ void LocaleTests::testTranslatableConfig1() { CalamaresUtils::Locale::TranslatedString ts0; QVERIFY( ts0.isEmpty() ); QCOMPARE( ts0.count(), 1 ); // the empty string CalamaresUtils::Locale::TranslatedString ts1( "Hello" ); QCOMPARE( ts1.count(), 1 ); QVERIFY( !ts1.isEmpty() ); QCOMPARE( ts1.get(), QStringLiteral( "Hello" ) ); QCOMPARE( ts1.get( QLocale( "nl" ) ), QStringLiteral( "Hello" ) ); QVariantMap map; map.insert( "description", "description (no language)" ); CalamaresUtils::Locale::TranslatedString ts2( map, "description" ); QCOMPARE( ts2.count(), 1 ); QVERIFY( !ts2.isEmpty() ); QCOMPARE( ts2.get(), QStringLiteral( "description (no language)" ) ); QCOMPARE( ts2.get( QLocale( "nl" ) ), QStringLiteral( "description (no language)" ) ); } /** @bref Test strings with translations. */ void LocaleTests::testTranslatableConfig2() { QVariantMap map; for ( const auto& language : someLanguages() ) { map.insert( QString( "description[%1]" ).arg( language ), QString( "description (language %1)" ).arg( language ) ); if ( language != "nl" ) { map.insert( QString( "name[%1]" ).arg( language ), QString( "name (language %1)" ).arg( language ) ); } } // If there's no untranslated string in the map, it is considered empty CalamaresUtils::Locale::TranslatedString ts0( map, "description" ); QVERIFY( ts0.isEmpty() ); // Because no untranslated string QCOMPARE( ts0.count(), someLanguages().count() + 1 ); // But there are entries for the translations, plus an empty string // expand the map with untranslated entries map.insert( QString( "description" ), "description (no language)" ); map.insert( QString( "name" ), "name (no language)" ); CalamaresUtils::Locale::TranslatedString ts1( map, "description" ); // The +1 is because "" is always also inserted QCOMPARE( ts1.count(), someLanguages().count() + 1 ); QVERIFY( !ts1.isEmpty() ); QCOMPARE( ts1.get(), QStringLiteral( "description (no language)" ) ); // it wasn't set QCOMPARE( ts1.get( QLocale( "nl" ) ), QStringLiteral( "description (language nl)" ) ); for ( const auto& language : someLanguages() ) { // Skip Serbian (latin) because QLocale() constructed with it // doesn't retain the @latin part. if ( language == "sr@latin" ) { continue; } // Could be QVERIFY, but then we don't see what language code fails QCOMPARE( ts1.get( language ) == QString( "description (language %1)" ).arg( language ) ? language : QString(), language ); } QCOMPARE( ts1.get( QLocale( QLocale::Language::Serbian, QLocale::Script::LatinScript, QLocale::Country::Serbia ) ), QStringLiteral( "description (language sr@latin)" ) ); CalamaresUtils::Locale::TranslatedString ts2( map, "name" ); // We skipped dutch this time QCOMPARE( ts2.count(), someLanguages().count() ); QVERIFY( !ts2.isEmpty() ); // This key doesn't exist CalamaresUtils::Locale::TranslatedString ts3( map, "front" ); QVERIFY( ts3.isEmpty() ); QCOMPARE( ts3.count(), 1 ); // The empty string } void LocaleTests::testSimpleZones() { using namespace CalamaresUtils::Locale; { TZRegion r; QVERIFY( r.tr().isEmpty() ); } { TZZone n; QVERIFY( n.tr().isEmpty() ); } { TZZone r0( "xAmsterdam" ); QCOMPARE( r0.tr(), QStringLiteral( "xAmsterdam" ) ); TZZone r1( r0 ); QCOMPARE( r0.tr(), QStringLiteral( "xAmsterdam" ) ); QCOMPARE( r1.tr(), QStringLiteral( "xAmsterdam" ) ); TZZone r2( std::move( r0 ) ); QCOMPARE( r2.tr(), QStringLiteral( "xAmsterdam" ) ); QCOMPARE( r0.tr(), QString() ); } { TZZone r0( nullptr ); QVERIFY( r0.tr().isEmpty() ); TZZone r1( r0 ); QVERIFY( r1.tr().isEmpty() ); TZZone r2( std::move( r0 ) ); QVERIFY( r2.tr().isEmpty() ); } } void LocaleTests::testComplexZones() { using namespace CalamaresUtils::Locale; { TZZone r0( "America/New_York" ); TZZone r1( "America/New York" ); QCOMPARE( r0.tr(), r1.tr() ); QCOMPARE( r0.tr(), QStringLiteral( "America/New York" ) ); } { TZZone r( "zxc,;*_vm" ); QVERIFY( !r.tr().isEmpty() ); QCOMPARE( r.tr(), QStringLiteral( "zxc,;* vm" ) ); // Only _ is special } } calamares-3.2.20/src/libcalamares/locale/Tests.h000066400000000000000000000024261362604102500214510ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef LIBCALAMARES_LOCALE_TESTS_H #define LIBCALAMARES_LOCALE_TESTS_H #include class LocaleTests : public QObject { Q_OBJECT public: LocaleTests(); ~LocaleTests() override; private Q_SLOTS: void initTestCase(); void testLanguageModelCount(); void testEsperanto(); void testTranslatableLanguages(); void testTranslatableConfig1(); void testTranslatableConfig2(); // TimeZone testing void testSimpleZones(); void testComplexZones(); }; #endif calamares-3.2.20/src/libcalamares/locale/TimeZone.cpp000066400000000000000000000144541362604102500224400ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "TimeZone.h" #include "utils/Logger.h" #include #include #include #include static const char TZ_DATA_FILE[] = "/usr/share/zoneinfo/zone.tab"; static double getRightGeoLocation( QString str ) { double sign = 1, num = 0.00; // Determine sign if ( str.startsWith( '-' ) ) { sign = -1; str.remove( 0, 1 ); } else if ( str.startsWith( '+' ) ) { str.remove( 0, 1 ); } if ( str.length() == 4 || str.length() == 6 ) { num = str.mid( 0, 2 ).toDouble() + str.mid( 2, 2 ).toDouble() / 60.0; } else if ( str.length() == 5 || str.length() == 7 ) { num = str.mid( 0, 3 ).toDouble() + str.mid( 3, 2 ).toDouble() / 60.0; } return sign * num; } namespace CalamaresUtils { namespace Locale { CStringPair::CStringPair( CStringPair&& t ) : m_human( nullptr ) , m_key() { // My pointers are initialized to nullptr std::swap( m_human, t.m_human ); std::swap( m_key, t.m_key ); } CStringPair::CStringPair( const CStringPair& t ) : m_human( t.m_human ? strdup( t.m_human ) : nullptr ) , m_key( t.m_key ) { } /** @brief Massage an identifier into a human-readable form * * Makes a copy of @p s, caller must free() it. */ static char* munge( const char* s ) { char* t = strdup( s ); if ( !t ) { return nullptr; } // replace("_"," ") in the Python script char* p = t; while ( *p ) { if ( ( *p ) == '_' ) { *p = ' '; } ++p; } return t; } CStringPair::CStringPair( const char* s1 ) : m_human( s1 ? munge( s1 ) : nullptr ) , m_key( s1 ? QString( s1 ) : QString() ) { } CStringPair::~CStringPair() { free( m_human ); } QString TZRegion::tr() const { // NOTE: context name must match what's used in zone-extractor.py return QObject::tr( m_human, "tz_regions" ); } TZRegion::~TZRegion() { qDeleteAll( m_zones ); } const CStringPairList& TZRegion::fromZoneTab() { static CStringPairList zoneTab = TZRegion::fromFile( TZ_DATA_FILE ); return zoneTab; } CStringPairList TZRegion::fromFile( const char* fileName ) { CStringPairList model; QFile file( fileName ); if ( !file.open( QIODevice::ReadOnly | QIODevice::Text ) ) { return model; } TZRegion* thisRegion = nullptr; QTextStream in( &file ); while ( !in.atEnd() ) { QString line = in.readLine().trimmed().split( '#', QString::KeepEmptyParts ).first().trimmed(); if ( line.isEmpty() ) { continue; } QStringList list = line.split( QRegExp( "[\t ]" ), QString::SkipEmptyParts ); if ( list.size() < 3 ) { continue; } QStringList timezoneParts = list.at( 2 ).split( '/', QString::SkipEmptyParts ); if ( timezoneParts.size() < 2 ) { continue; } QString region = timezoneParts.first().trimmed(); if ( region.isEmpty() ) { continue; } auto keyMatch = [®ion]( const CStringPair* r ) { return r->key() == region; }; auto it = std::find_if( model.begin(), model.end(), keyMatch ); if ( it != model.end() ) { thisRegion = dynamic_cast< TZRegion* >( *it ); } else { thisRegion = new TZRegion( region.toUtf8().data() ); model.append( thisRegion ); } QString countryCode = list.at( 0 ).trimmed(); if ( countryCode.size() != 2 ) { continue; } timezoneParts.removeFirst(); thisRegion->m_zones.append( new TZZone( region, timezoneParts.join( '/' ).toUtf8().constData(), countryCode, list.at( 1 ) ) ); } auto sorter = []( const CStringPair* l, const CStringPair* r ) { return *l < *r; }; std::sort( model.begin(), model.end(), sorter ); for ( auto& it : model ) { TZRegion* r = dynamic_cast< TZRegion* >( it ); if ( r ) { std::sort( r->m_zones.begin(), r->m_zones.end(), sorter ); } } return model; } TZZone::TZZone( const QString& region, const char* zoneName, const QString& country, QString position ) : CStringPair( zoneName ) , m_region( region ) , m_country( country ) { int cooSplitPos = position.indexOf( QRegExp( "[-+]" ), 1 ); if ( cooSplitPos > 0 ) { m_latitude = getRightGeoLocation( position.mid( 0, cooSplitPos ) ); m_longitude = getRightGeoLocation( position.mid( cooSplitPos ) ); } } QString TZZone::tr() const { // NOTE: context name must match what's used in zone-extractor.py return QObject::tr( m_human, "tz_names" ); } CStringListModel::CStringListModel( CStringPairList l ) : m_list( l ) { } CStringListModel::~CStringListModel() {} int CStringListModel::rowCount( const QModelIndex& ) const { return m_list.count(); } QVariant CStringListModel::data( const QModelIndex& index, int role ) const { if ( ( role != Qt::DisplayRole ) && ( role != Qt::UserRole ) ) { return QVariant(); } if ( !index.isValid() ) { return QVariant(); } const auto* item = m_list.at( index.row() ); return item ? ( role == Qt::DisplayRole ? item->tr() : item->key() ) : QVariant(); } const CStringPair* CStringListModel::item( int index ) const { if ( ( index < 0 ) || ( index >= m_list.count() ) ) { return nullptr; } return m_list[ index ]; } } // namespace Locale } // namespace CalamaresUtils calamares-3.2.20/src/libcalamares/locale/TimeZone.h000066400000000000000000000107121362604102500220760ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef LOCALE_TIMEZONE_H #define LOCALE_TIMEZONE_H #include "DllMacro.h" #include "utils/Logger.h" #include #include #include #include namespace CalamaresUtils { namespace Locale { /** @brief A pair of strings, one human-readable, one a key * * Given an identifier-like string (e.g. "New_York"), makes * a human-readable version of that and keeps a copy of the * identifier itself. * * This explicitly uses const char* instead of just being * QPair because there is API that needs * C-style strings. */ class CStringPair { public: /// @brief An empty pair CStringPair() {} /// @brief Given an identifier, create the pair explicit CStringPair( const char* s1 ); CStringPair( CStringPair&& t ); CStringPair( const CStringPair& ); virtual ~CStringPair(); /// @brief Give the localized human-readable form virtual QString tr() const = 0; QString key() const { return m_key; } bool operator<( const CStringPair& other ) const { return m_key < other.m_key; } protected: char* m_human = nullptr; QString m_key; }; class CStringPairList : public QList< CStringPair* > { public: template < typename T > T* find( const QString& key ) const { for ( auto* p : *this ) { if ( p->key() == key ) { return dynamic_cast< T* >( p ); } } return nullptr; } }; /// @brief A pair of strings for timezone regions (e.g. "America") class TZRegion : public CStringPair { public: using CStringPair::CStringPair; virtual ~TZRegion() override; TZRegion( const TZRegion& ) = delete; QString tr() const override; QString region() const { return key(); } /** @brief Create list from a zone.tab-like file * * Returns a list of all the regions; each region has a list * of zones within that region. Dyamically, the items in the * returned list are TZRegions; their zones dynamically are * TZZones even though all those lists have type CStringPairList. * * The list owns the regions, and the regions own their own list of zones. * When getting rid of the list, remember to qDeleteAll() on it. */ static CStringPairList fromFile( const char* fileName ); /// @brief Calls fromFile with the standard zone.tab name static const CStringPairList& fromZoneTab(); const CStringPairList& zones() const { return m_zones; } private: CStringPairList m_zones; }; /// @brief A pair of strings for specific timezone names (e.g. "New_York") class TZZone : public CStringPair { public: using CStringPair::CStringPair; QString tr() const override; TZZone( const QString& region, const char* zoneName, const QString& country, QString position ); QString region() const { return m_region; } QString zone() const { return key(); } QString country() const { return m_country; } double latitude() const { return m_latitude; } double longitude() const { return m_longitude; } protected: QString m_region; QString m_country; double m_latitude = 0.0, m_longitude = 0.0; }; class CStringListModel : public QAbstractListModel { public: /// @brief Create empty model CStringListModel(); /// @brief Create model from list (non-owning) CStringListModel( CStringPairList ); virtual ~CStringListModel() override; int rowCount( const QModelIndex& parent ) const override; QVariant data( const QModelIndex& index, int role ) const override; const CStringPair* item( int index ) const; private: CStringPairList m_list; }; } // namespace Locale } // namespace CalamaresUtils #endif // LOCALE_TIMEZONE_H calamares-3.2.20/src/libcalamares/locale/TranslatableConfiguration.cpp000066400000000000000000000064041362604102500260460ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "TranslatableConfiguration.h" #include "LabelModel.h" #include "utils/Logger.h" #include "utils/Variant.h" #include #include #include namespace CalamaresUtils { namespace Locale { TranslatedString::TranslatedString( const QString& string ) { m_strings[ QString() ] = string; } TranslatedString::TranslatedString( const QVariantMap& map, const QString& key, const char* context ) : m_context( context ) { // Get the un-decorated value for the key QString value = CalamaresUtils::getString( map, key ); m_strings[ QString() ] = value; for ( auto it = map.constBegin(); it != map.constEnd(); ++it ) { QString subkey = it.key(); if ( subkey == key ) { // Already obtained, above } else if ( subkey.startsWith( key ) ) { QRegularExpressionMatch match; if ( subkey.indexOf( QRegularExpression( "\\[([a-zA-Z_@]*)\\]" ), 0, &match ) > 0 ) { QString language = match.captured( 1 ); m_strings[ language ] = it.value().toString(); } } } } QString TranslatedString::get() const { return get( QLocale() ); } QString TranslatedString::get( const QLocale& locale ) const { QString localeName = locale.name(); // Special case, sr@latin doesn't have the @latin reflected in the name if ( locale.language() == QLocale::Language::Serbian && locale.script() == QLocale::Script::LatinScript ) { localeName = QStringLiteral( "sr@latin" ); } if ( m_strings.contains( localeName ) ) { return m_strings[ localeName ]; } int index = localeName.indexOf( '@' ); if ( index > 0 ) { localeName.truncate( index ); if ( m_strings.contains( localeName ) ) { return m_strings[ localeName ]; } } index = localeName.indexOf( '_' ); if ( index > 0 ) { localeName.truncate( index ); if ( m_strings.contains( localeName ) ) { return m_strings[ localeName ]; } } // If we're given a context to work with, also try the same string in // the regular translation framework. const QString& s = m_strings[ QString() ]; if ( m_context ) { return QCoreApplication::translate( m_context, s.toLatin1().constData() ); } else { return s; } } } // namespace Locale } // namespace CalamaresUtils calamares-3.2.20/src/libcalamares/locale/TranslatableConfiguration.h000066400000000000000000000061511362604102500255120ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef LOCALE_TRANSLATABLECONFIGURATION_H #define LOCALE_TRANSLATABLECONFIGURATION_H #include "DllMacro.h" #include #include #include namespace CalamaresUtils { namespace Locale { /** @brief A human-readable string from a configuration file * * The configuration files can contain human-readable strings, * but those need their own translations and are not supported * by QObject::tr or anything else. */ class DLLEXPORT TranslatedString { public: /** @brief Get all the translations connected to @p key * * Gets map[key] as the "untranslated" form, and then all the * keys of the form [lang] are taken as the translation * for of the untranslated form. * * If @p context is not a nullptr, then that is taken as an * indication to **also** use the regular QObject::tr() translation * mechanism for these strings. It is recommended to pass in * metaObject()->className() as context (from a QObject based class) * to give the TranslatedString the same context as other calls * to tr() within that class. */ TranslatedString( const QVariantMap& map, const QString& key, const char* context = nullptr ); /** @brief Not-actually-translated string. */ TranslatedString( const QString& string ); /// @brief Empty string TranslatedString() : TranslatedString( QString() ) { } /** @brief How many strings (translations) are there? * * This is always at least 1 (for the untranslated string), * but may be more than 1 even when isEmpty() is true -- * if there is no untranslated version, for instance. */ int count() const { return m_strings.count(); } /** @brief Consider this string empty? * * Only the state of the untranslated string is considered, * so count() may be more than 1 even while the string is empty. */ bool isEmpty() const { return m_strings[ QString() ].isEmpty(); } /// @brief Gets the string in the current locale QString get() const; /// @brief Gets the string from the given locale QString get( const QLocale& ) const; private: // Maps locale name to human-readable string, "" is English QMap< QString, QString > m_strings; const char* m_context = nullptr; }; } // namespace Locale } // namespace CalamaresUtils #endif calamares-3.2.20/src/libcalamares/locale/ZoneData_p.cxxtr000066400000000000000000000434651362604102500233240ustar00rootroot00000000000000/* GENERATED FILE DO NOT EDIT * * === This file is part of Calamares - === * * This file is derived from zone.tab, which has its own copyright statement: * * This file is in the public domain, so clarified as of * 2009-05-17 by Arthur David Olson. * * From Paul Eggert (2018-06-27): * This file is intended as a backward-compatibility aid for older programs. * New programs should use zone1970.tab. This file is like zone1970.tab (see * zone1970.tab's comments), but with the following additional restrictions: * * 1. This file contains only ASCII characters. * 2. The first data column contains exactly one country code. * */ /** THIS FILE EXISTS ONLY FOR TRANSLATIONS PURPOSES **/ // *INDENT-OFF* // clang-format off /* This returns a reference to local, which is a terrible idea. * Good thing it's not meant to be compiled. */ static const QStringList& tz_regions_table() { return QStringList { QObject::tr("Africa", "tz_regions"), QObject::tr("America", "tz_regions"), QObject::tr("Antarctica", "tz_regions"), QObject::tr("Arctic", "tz_regions"), QObject::tr("Asia", "tz_regions"), QObject::tr("Atlantic", "tz_regions"), QObject::tr("Australia", "tz_regions"), QObject::tr("Europe", "tz_regions"), QObject::tr("Indian", "tz_regions"), QObject::tr("Pacific", "tz_regions"), QString() }; } /* This returns a reference to local, which is a terrible idea. * Good thing it's not meant to be compiled. */ static const QStringList& tz_names_table() { return QStringList { QObject::tr("Abidjan", "tz_names"), QObject::tr("Accra", "tz_names"), QObject::tr("Adak", "tz_names"), QObject::tr("Addis Ababa", "tz_names"), QObject::tr("Adelaide", "tz_names"), QObject::tr("Aden", "tz_names"), QObject::tr("Algiers", "tz_names"), QObject::tr("Almaty", "tz_names"), QObject::tr("Amman", "tz_names"), QObject::tr("Amsterdam", "tz_names"), QObject::tr("Anadyr", "tz_names"), QObject::tr("Anchorage", "tz_names"), QObject::tr("Andorra", "tz_names"), QObject::tr("Anguilla", "tz_names"), QObject::tr("Antananarivo", "tz_names"), QObject::tr("Antigua", "tz_names"), QObject::tr("Apia", "tz_names"), QObject::tr("Aqtau", "tz_names"), QObject::tr("Aqtobe", "tz_names"), QObject::tr("Araguaina", "tz_names"), QObject::tr("Argentina/Buenos Aires", "tz_names"), QObject::tr("Argentina/Catamarca", "tz_names"), QObject::tr("Argentina/Cordoba", "tz_names"), QObject::tr("Argentina/Jujuy", "tz_names"), QObject::tr("Argentina/La Rioja", "tz_names"), QObject::tr("Argentina/Mendoza", "tz_names"), QObject::tr("Argentina/Rio Gallegos", "tz_names"), QObject::tr("Argentina/Salta", "tz_names"), QObject::tr("Argentina/San Juan", "tz_names"), QObject::tr("Argentina/San Luis", "tz_names"), QObject::tr("Argentina/Tucuman", "tz_names"), QObject::tr("Argentina/Ushuaia", "tz_names"), QObject::tr("Aruba", "tz_names"), QObject::tr("Ashgabat", "tz_names"), QObject::tr("Asmara", "tz_names"), QObject::tr("Astrakhan", "tz_names"), QObject::tr("Asuncion", "tz_names"), QObject::tr("Athens", "tz_names"), QObject::tr("Atikokan", "tz_names"), QObject::tr("Atyrau", "tz_names"), QObject::tr("Auckland", "tz_names"), QObject::tr("Azores", "tz_names"), QObject::tr("Baghdad", "tz_names"), QObject::tr("Bahia", "tz_names"), QObject::tr("Bahia Banderas", "tz_names"), QObject::tr("Bahrain", "tz_names"), QObject::tr("Baku", "tz_names"), QObject::tr("Bamako", "tz_names"), QObject::tr("Bangkok", "tz_names"), QObject::tr("Bangui", "tz_names"), QObject::tr("Banjul", "tz_names"), QObject::tr("Barbados", "tz_names"), QObject::tr("Barnaul", "tz_names"), QObject::tr("Beirut", "tz_names"), QObject::tr("Belem", "tz_names"), QObject::tr("Belgrade", "tz_names"), QObject::tr("Belize", "tz_names"), QObject::tr("Berlin", "tz_names"), QObject::tr("Bermuda", "tz_names"), QObject::tr("Bishkek", "tz_names"), QObject::tr("Bissau", "tz_names"), QObject::tr("Blanc-Sablon", "tz_names"), QObject::tr("Blantyre", "tz_names"), QObject::tr("Boa Vista", "tz_names"), QObject::tr("Bogota", "tz_names"), QObject::tr("Boise", "tz_names"), QObject::tr("Bougainville", "tz_names"), QObject::tr("Bratislava", "tz_names"), QObject::tr("Brazzaville", "tz_names"), QObject::tr("Brisbane", "tz_names"), QObject::tr("Broken Hill", "tz_names"), QObject::tr("Brunei", "tz_names"), QObject::tr("Brussels", "tz_names"), QObject::tr("Bucharest", "tz_names"), QObject::tr("Budapest", "tz_names"), QObject::tr("Bujumbura", "tz_names"), QObject::tr("Busingen", "tz_names"), QObject::tr("Cairo", "tz_names"), QObject::tr("Cambridge Bay", "tz_names"), QObject::tr("Campo Grande", "tz_names"), QObject::tr("Canary", "tz_names"), QObject::tr("Cancun", "tz_names"), QObject::tr("Cape Verde", "tz_names"), QObject::tr("Caracas", "tz_names"), QObject::tr("Casablanca", "tz_names"), QObject::tr("Casey", "tz_names"), QObject::tr("Cayenne", "tz_names"), QObject::tr("Cayman", "tz_names"), QObject::tr("Ceuta", "tz_names"), QObject::tr("Chagos", "tz_names"), QObject::tr("Chatham", "tz_names"), QObject::tr("Chicago", "tz_names"), QObject::tr("Chihuahua", "tz_names"), QObject::tr("Chisinau", "tz_names"), QObject::tr("Chita", "tz_names"), QObject::tr("Choibalsan", "tz_names"), QObject::tr("Christmas", "tz_names"), QObject::tr("Chuuk", "tz_names"), QObject::tr("Cocos", "tz_names"), QObject::tr("Colombo", "tz_names"), QObject::tr("Comoro", "tz_names"), QObject::tr("Conakry", "tz_names"), QObject::tr("Copenhagen", "tz_names"), QObject::tr("Costa Rica", "tz_names"), QObject::tr("Creston", "tz_names"), QObject::tr("Cuiaba", "tz_names"), QObject::tr("Curacao", "tz_names"), QObject::tr("Currie", "tz_names"), QObject::tr("Dakar", "tz_names"), QObject::tr("Damascus", "tz_names"), QObject::tr("Danmarkshavn", "tz_names"), QObject::tr("Dar es Salaam", "tz_names"), QObject::tr("Darwin", "tz_names"), QObject::tr("Davis", "tz_names"), QObject::tr("Dawson", "tz_names"), QObject::tr("Dawson Creek", "tz_names"), QObject::tr("Denver", "tz_names"), QObject::tr("Detroit", "tz_names"), QObject::tr("Dhaka", "tz_names"), QObject::tr("Dili", "tz_names"), QObject::tr("Djibouti", "tz_names"), QObject::tr("Dominica", "tz_names"), QObject::tr("Douala", "tz_names"), QObject::tr("Dubai", "tz_names"), QObject::tr("Dublin", "tz_names"), QObject::tr("DumontDUrville", "tz_names"), QObject::tr("Dushanbe", "tz_names"), QObject::tr("Easter", "tz_names"), QObject::tr("Edmonton", "tz_names"), QObject::tr("Efate", "tz_names"), QObject::tr("Eirunepe", "tz_names"), QObject::tr("El Aaiun", "tz_names"), QObject::tr("El Salvador", "tz_names"), QObject::tr("Enderbury", "tz_names"), QObject::tr("Eucla", "tz_names"), QObject::tr("Fakaofo", "tz_names"), QObject::tr("Famagusta", "tz_names"), QObject::tr("Faroe", "tz_names"), QObject::tr("Fiji", "tz_names"), QObject::tr("Fort Nelson", "tz_names"), QObject::tr("Fortaleza", "tz_names"), QObject::tr("Freetown", "tz_names"), QObject::tr("Funafuti", "tz_names"), QObject::tr("Gaborone", "tz_names"), QObject::tr("Galapagos", "tz_names"), QObject::tr("Gambier", "tz_names"), QObject::tr("Gaza", "tz_names"), QObject::tr("Gibraltar", "tz_names"), QObject::tr("Glace Bay", "tz_names"), QObject::tr("Godthab", "tz_names"), QObject::tr("Goose Bay", "tz_names"), QObject::tr("Grand Turk", "tz_names"), QObject::tr("Grenada", "tz_names"), QObject::tr("Guadalcanal", "tz_names"), QObject::tr("Guadeloupe", "tz_names"), QObject::tr("Guam", "tz_names"), QObject::tr("Guatemala", "tz_names"), QObject::tr("Guayaquil", "tz_names"), QObject::tr("Guernsey", "tz_names"), QObject::tr("Guyana", "tz_names"), QObject::tr("Halifax", "tz_names"), QObject::tr("Harare", "tz_names"), QObject::tr("Havana", "tz_names"), QObject::tr("Hebron", "tz_names"), QObject::tr("Helsinki", "tz_names"), QObject::tr("Hermosillo", "tz_names"), QObject::tr("Ho Chi Minh", "tz_names"), QObject::tr("Hobart", "tz_names"), QObject::tr("Hong Kong", "tz_names"), QObject::tr("Honolulu", "tz_names"), QObject::tr("Hovd", "tz_names"), QObject::tr("Indiana/Indianapolis", "tz_names"), QObject::tr("Indiana/Knox", "tz_names"), QObject::tr("Indiana/Marengo", "tz_names"), QObject::tr("Indiana/Petersburg", "tz_names"), QObject::tr("Indiana/Tell City", "tz_names"), QObject::tr("Indiana/Vevay", "tz_names"), QObject::tr("Indiana/Vincennes", "tz_names"), QObject::tr("Indiana/Winamac", "tz_names"), QObject::tr("Inuvik", "tz_names"), QObject::tr("Iqaluit", "tz_names"), QObject::tr("Irkutsk", "tz_names"), QObject::tr("Isle of Man", "tz_names"), QObject::tr("Istanbul", "tz_names"), QObject::tr("Jakarta", "tz_names"), QObject::tr("Jamaica", "tz_names"), QObject::tr("Jayapura", "tz_names"), QObject::tr("Jersey", "tz_names"), QObject::tr("Jerusalem", "tz_names"), QObject::tr("Johannesburg", "tz_names"), QObject::tr("Juba", "tz_names"), QObject::tr("Juneau", "tz_names"), QObject::tr("Kabul", "tz_names"), QObject::tr("Kaliningrad", "tz_names"), QObject::tr("Kamchatka", "tz_names"), QObject::tr("Kampala", "tz_names"), QObject::tr("Karachi", "tz_names"), QObject::tr("Kathmandu", "tz_names"), QObject::tr("Kentucky/Louisville", "tz_names"), QObject::tr("Kentucky/Monticello", "tz_names"), QObject::tr("Kerguelen", "tz_names"), QObject::tr("Khandyga", "tz_names"), QObject::tr("Khartoum", "tz_names"), QObject::tr("Kiev", "tz_names"), QObject::tr("Kigali", "tz_names"), QObject::tr("Kinshasa", "tz_names"), QObject::tr("Kiritimati", "tz_names"), QObject::tr("Kirov", "tz_names"), QObject::tr("Kolkata", "tz_names"), QObject::tr("Kosrae", "tz_names"), QObject::tr("Kralendijk", "tz_names"), QObject::tr("Krasnoyarsk", "tz_names"), QObject::tr("Kuala Lumpur", "tz_names"), QObject::tr("Kuching", "tz_names"), QObject::tr("Kuwait", "tz_names"), QObject::tr("Kwajalein", "tz_names"), QObject::tr("La Paz", "tz_names"), QObject::tr("Lagos", "tz_names"), QObject::tr("Libreville", "tz_names"), QObject::tr("Lima", "tz_names"), QObject::tr("Lindeman", "tz_names"), QObject::tr("Lisbon", "tz_names"), QObject::tr("Ljubljana", "tz_names"), QObject::tr("Lome", "tz_names"), QObject::tr("London", "tz_names"), QObject::tr("Longyearbyen", "tz_names"), QObject::tr("Lord Howe", "tz_names"), QObject::tr("Los Angeles", "tz_names"), QObject::tr("Lower Princes", "tz_names"), QObject::tr("Luanda", "tz_names"), QObject::tr("Lubumbashi", "tz_names"), QObject::tr("Lusaka", "tz_names"), QObject::tr("Luxembourg", "tz_names"), QObject::tr("Macau", "tz_names"), QObject::tr("Maceio", "tz_names"), QObject::tr("Macquarie", "tz_names"), QObject::tr("Madeira", "tz_names"), QObject::tr("Madrid", "tz_names"), QObject::tr("Magadan", "tz_names"), QObject::tr("Mahe", "tz_names"), QObject::tr("Majuro", "tz_names"), QObject::tr("Makassar", "tz_names"), QObject::tr("Malabo", "tz_names"), QObject::tr("Maldives", "tz_names"), QObject::tr("Malta", "tz_names"), QObject::tr("Managua", "tz_names"), QObject::tr("Manaus", "tz_names"), QObject::tr("Manila", "tz_names"), QObject::tr("Maputo", "tz_names"), QObject::tr("Mariehamn", "tz_names"), QObject::tr("Marigot", "tz_names"), QObject::tr("Marquesas", "tz_names"), QObject::tr("Martinique", "tz_names"), QObject::tr("Maseru", "tz_names"), QObject::tr("Matamoros", "tz_names"), QObject::tr("Mauritius", "tz_names"), QObject::tr("Mawson", "tz_names"), QObject::tr("Mayotte", "tz_names"), QObject::tr("Mazatlan", "tz_names"), QObject::tr("Mbabane", "tz_names"), QObject::tr("McMurdo", "tz_names"), QObject::tr("Melbourne", "tz_names"), QObject::tr("Menominee", "tz_names"), QObject::tr("Merida", "tz_names"), QObject::tr("Metlakatla", "tz_names"), QObject::tr("Mexico City", "tz_names"), QObject::tr("Midway", "tz_names"), QObject::tr("Minsk", "tz_names"), QObject::tr("Miquelon", "tz_names"), QObject::tr("Mogadishu", "tz_names"), QObject::tr("Monaco", "tz_names"), QObject::tr("Moncton", "tz_names"), QObject::tr("Monrovia", "tz_names"), QObject::tr("Monterrey", "tz_names"), QObject::tr("Montevideo", "tz_names"), QObject::tr("Montserrat", "tz_names"), QObject::tr("Moscow", "tz_names"), QObject::tr("Muscat", "tz_names"), QObject::tr("Nairobi", "tz_names"), QObject::tr("Nassau", "tz_names"), QObject::tr("Nauru", "tz_names"), QObject::tr("Ndjamena", "tz_names"), QObject::tr("New York", "tz_names"), QObject::tr("Niamey", "tz_names"), QObject::tr("Nicosia", "tz_names"), QObject::tr("Nipigon", "tz_names"), QObject::tr("Niue", "tz_names"), QObject::tr("Nome", "tz_names"), QObject::tr("Norfolk", "tz_names"), QObject::tr("Noronha", "tz_names"), QObject::tr("North Dakota/Beulah", "tz_names"), QObject::tr("North Dakota/Center", "tz_names"), QObject::tr("North Dakota/New Salem", "tz_names"), QObject::tr("Nouakchott", "tz_names"), QObject::tr("Noumea", "tz_names"), QObject::tr("Novokuznetsk", "tz_names"), QObject::tr("Novosibirsk", "tz_names"), QObject::tr("Ojinaga", "tz_names"), QObject::tr("Omsk", "tz_names"), QObject::tr("Oral", "tz_names"), QObject::tr("Oslo", "tz_names"), QObject::tr("Ouagadougou", "tz_names"), QObject::tr("Pago Pago", "tz_names"), QObject::tr("Palau", "tz_names"), QObject::tr("Palmer", "tz_names"), QObject::tr("Panama", "tz_names"), QObject::tr("Pangnirtung", "tz_names"), QObject::tr("Paramaribo", "tz_names"), QObject::tr("Paris", "tz_names"), QObject::tr("Perth", "tz_names"), QObject::tr("Phnom Penh", "tz_names"), QObject::tr("Phoenix", "tz_names"), QObject::tr("Pitcairn", "tz_names"), QObject::tr("Podgorica", "tz_names"), QObject::tr("Pohnpei", "tz_names"), QObject::tr("Pontianak", "tz_names"), QObject::tr("Port Moresby", "tz_names"), QObject::tr("Port of Spain", "tz_names"), QObject::tr("Port-au-Prince", "tz_names"), QObject::tr("Porto Velho", "tz_names"), QObject::tr("Porto-Novo", "tz_names"), QObject::tr("Prague", "tz_names"), QObject::tr("Puerto Rico", "tz_names"), QObject::tr("Punta Arenas", "tz_names"), QObject::tr("Pyongyang", "tz_names"), QObject::tr("Qatar", "tz_names"), QObject::tr("Qostanay", "tz_names"), QObject::tr("Qyzylorda", "tz_names"), QObject::tr("Rainy River", "tz_names"), QObject::tr("Rankin Inlet", "tz_names"), QObject::tr("Rarotonga", "tz_names"), QObject::tr("Recife", "tz_names"), QObject::tr("Regina", "tz_names"), QObject::tr("Resolute", "tz_names"), QObject::tr("Reunion", "tz_names"), QObject::tr("Reykjavik", "tz_names"), QObject::tr("Riga", "tz_names"), QObject::tr("Rio Branco", "tz_names"), QObject::tr("Riyadh", "tz_names"), QObject::tr("Rome", "tz_names"), QObject::tr("Rothera", "tz_names"), QObject::tr("Saipan", "tz_names"), QObject::tr("Sakhalin", "tz_names"), QObject::tr("Samara", "tz_names"), QObject::tr("Samarkand", "tz_names"), QObject::tr("San Marino", "tz_names"), QObject::tr("Santarem", "tz_names"), QObject::tr("Santiago", "tz_names"), QObject::tr("Santo Domingo", "tz_names"), QObject::tr("Sao Paulo", "tz_names"), QObject::tr("Sao Tome", "tz_names"), QObject::tr("Sarajevo", "tz_names"), QObject::tr("Saratov", "tz_names"), QObject::tr("Scoresbysund", "tz_names"), QObject::tr("Seoul", "tz_names"), QObject::tr("Shanghai", "tz_names"), QObject::tr("Simferopol", "tz_names"), QObject::tr("Singapore", "tz_names"), QObject::tr("Sitka", "tz_names"), QObject::tr("Skopje", "tz_names"), QObject::tr("Sofia", "tz_names"), QObject::tr("South Georgia", "tz_names"), QObject::tr("Srednekolymsk", "tz_names"), QObject::tr("St Barthelemy", "tz_names"), QObject::tr("St Helena", "tz_names"), QObject::tr("St Johns", "tz_names"), QObject::tr("St Kitts", "tz_names"), QObject::tr("St Lucia", "tz_names"), QObject::tr("St Thomas", "tz_names"), QObject::tr("St Vincent", "tz_names"), QObject::tr("Stanley", "tz_names"), QObject::tr("Stockholm", "tz_names"), QObject::tr("Swift Current", "tz_names"), QObject::tr("Sydney", "tz_names"), QObject::tr("Syowa", "tz_names"), QObject::tr("Tahiti", "tz_names"), QObject::tr("Taipei", "tz_names"), QObject::tr("Tallinn", "tz_names"), QObject::tr("Tarawa", "tz_names"), QObject::tr("Tashkent", "tz_names"), QObject::tr("Tbilisi", "tz_names"), QObject::tr("Tegucigalpa", "tz_names"), QObject::tr("Tehran", "tz_names"), QObject::tr("Thimphu", "tz_names"), QObject::tr("Thule", "tz_names"), QObject::tr("Thunder Bay", "tz_names"), QObject::tr("Tijuana", "tz_names"), QObject::tr("Tirane", "tz_names"), QObject::tr("Tokyo", "tz_names"), QObject::tr("Tomsk", "tz_names"), QObject::tr("Tongatapu", "tz_names"), QObject::tr("Toronto", "tz_names"), QObject::tr("Tortola", "tz_names"), QObject::tr("Tripoli", "tz_names"), QObject::tr("Troll", "tz_names"), QObject::tr("Tunis", "tz_names"), QObject::tr("Ulaanbaatar", "tz_names"), QObject::tr("Ulyanovsk", "tz_names"), QObject::tr("Urumqi", "tz_names"), QObject::tr("Ust-Nera", "tz_names"), QObject::tr("Uzhgorod", "tz_names"), QObject::tr("Vaduz", "tz_names"), QObject::tr("Vancouver", "tz_names"), QObject::tr("Vatican", "tz_names"), QObject::tr("Vienna", "tz_names"), QObject::tr("Vientiane", "tz_names"), QObject::tr("Vilnius", "tz_names"), QObject::tr("Vladivostok", "tz_names"), QObject::tr("Volgograd", "tz_names"), QObject::tr("Vostok", "tz_names"), QObject::tr("Wake", "tz_names"), QObject::tr("Wallis", "tz_names"), QObject::tr("Warsaw", "tz_names"), QObject::tr("Whitehorse", "tz_names"), QObject::tr("Windhoek", "tz_names"), QObject::tr("Winnipeg", "tz_names"), QObject::tr("Yakutat", "tz_names"), QObject::tr("Yakutsk", "tz_names"), QObject::tr("Yangon", "tz_names"), QObject::tr("Yekaterinburg", "tz_names"), QObject::tr("Yellowknife", "tz_names"), QObject::tr("Yerevan", "tz_names"), QObject::tr("Zagreb", "tz_names"), QObject::tr("Zaporozhye", "tz_names"), QObject::tr("Zurich", "tz_names"), QString() }; } calamares-3.2.20/src/libcalamares/locale/cldr-extractor.py000066400000000000000000000230521362604102500235030ustar00rootroot00000000000000#! /usr/bin/env python3 # # === This file is part of Calamares - === # # Python3 script to scrape some data out of ICU CLDR supplemental data. # ### BEGIN LICENSES # # Copyright 2019 Adriaan de Groot # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # ### END LICENSES ### BEGIN USAGE # """ Python3 script to scrape some data out of ICU CLDR supplemental data. To use this script, you must have downloaded the CLDR data, e.g. http://unicode.org/Public/cldr/35.1/, and extracted the zip file. Run the script from **inside** the common/ durectory that is created (or fix the hard-coded path). The script tries to print C++ code that compiles; if there are encoding problems, it will print some kind of representation of the problematic lines. To avoid having to cross-reference multiple XML files, the script cheats: it reads the comments as well to get names. So it looks for pairs of lines like this: It extracts the 2-character country code "BQ" from the sub-tag, and parses the comment to get a language and country name (instead of looking up "pap" and "BQ" in other tables). This may be considered a hack. A large collection of exceptions can be found in the two *_mapper tables, which massage the CLDR names to Qt enum values. """ # ### END USAGE import sys # These are languages listed in CLDR that don't match # the enum-values in QLocale::Language. language_mapper = { "?" : "AnyLanguage", "Bangla" : "Bengali", "Kalaallisut" : "Greenlandic", "Haitian Creole" : "Haitian", "Kyrgyz" : "Kirghiz", "Norwegian BokmÃ¥l" : "NorwegianBokmal", "Tokelau" : "TokelauLanguage", "Tuvalu" : "TuvaluLanguage", } country_mapper = { "Ã…land Islands" : "AlandIslands", "St. Barthélemy" : "SaintBarthelemy", "Côte d’Ivoire" : "IvoryCoast", "Curaçao" : "CuraSao", "Réunion" : "Reunion", "São Tomé & Príncipe" : "SaoTomeAndPrincipe", "Bosnia & Herzegovina" : "BosniaAndHerzegowina", "Czechia" : "CzechRepublic", "St. Pierre & Miquelon" : "SaintPierreAndMiquelon", "Vatican City" : "VaticanCityState", "South Georgia & South Sandwich Islands" : "SouthGeorgiaAndTheSouthSandwichIslands", "Timor-Leste" : "EastTimor", "Wallis & Futuna" : "WallisAndFutunaIslands", "Myanmar (Burma)" : "Myanmar", "Svalbard & Jan Mayen" : "SvalbardAndJanMayenIslands", "St. Martin" : "SaintMartin", "North Macedonia" : "Macedonia", "Hong Kong SAR China" : "HongKong", "Macao SAR China" : "Macau", "Eurozone" : "AnyCountry", # Not likely for GeoIP "Caribbean Netherlands" : "Bonaire", # Bonaire, Saba, St.Eustatius } class CountryData: def __init__(self, country_code, language_name, country_name): """ Takes a 2-letter country name, and enum names from QLocale::Language and QLocale::Country. An empty @p country code is acceptable, for the terminating entry in the data array (and yields a 0,0 code). """ if country_code: assert len(country_code) == 2 self.country_code = country_code self.language_enum = language_name self.country_enum = country_name else: self.country_code = "" self.language_enum = "AnyLanguage" self.country_enum = "AnyCountry" def __str__(self): if self.country_code: char0 = "'{!s}'".format(self.country_code[0]) char1 = "'{!s}'".format(self.country_code[1]) else: char0 = "0" char1 = "0" return "{!s} QLocale::Language::{!s}, QLocale::Country::{!s}, {!s}, {!s} {!s},".format( "{", self.language_enum, self.country_enum, char0, char1, "}") # Must match type name below cpp_classname = "CountryData" # Must match the output format of __str__ above cpp_declaration = """ struct CountryData { QLocale::Language l; QLocale::Country c; char cc1; char cc2; }; """ def extricate_subtags(l1, l2): """ Given two lines @p l1 and @p l2 which are the element-line and the comment-line underneath it, return a CountryData for them, or None if the two lines are not relevant (e.g. not the right subtag from, or 3-letter country codes. """ if 'from="und_' not in l1: return if '{ ?; ?;' not in l2: return # This is extremely crude "parsing" which chops up the string # by delimiter and then extracts some substring. l1_parts = l1.split("und_") l2_parts = l2.split(";") l1_first_quote = l1_parts[1].find('"') l1_code = l1_parts[1][:l1_first_quote] if len(l1_code) != 2: return l2_brace = l2_parts[2].find("{") l2_language = l2_parts[2][l2_brace+1:].strip() l2_brace = l2_parts[2].find("}") l2_country = l2_parts[2][:l2_brace-1].strip() # Handle mapped cases l2_language = language_mapper.get(l2_language, l2_language) l2_language = l2_language.replace(" ", "") # Handle mapped cases and then do a bunch of standard replacements. l2_country = country_mapper.get(l2_country, l2_country) l2_country = l2_country.replace(" ", "").replace("-", "").replace(".","").replace("&","And") return CountryData(l1_code, l2_language, l2_country) def read_subtags_file(): """ Returns a list of CountryData objects from the likelySubtags file. """ data = [] with open("supplemental/likelySubtags.xml", "rt", encoding="UTF-8") as f: l1 = "a line" while l1: l1 = f.readline() if ' === * * This file is derived from CLDR data from Unicode, Inc. Applicable terms: * * A. Unicode Copyright * 1. Copyright © 1991-2019 Unicode, Inc. All rights reserved. * B. Definitions * Unicode Data Files ("DATA FILES") include all data files under the directories: * https://www.unicode.org/Public/ * C. Terms of Use * 2. Any person is hereby authorized, without fee, to view, use, reproduce, * and distribute all documents and files, subject to the Terms and * Conditions herein. */ // BEGIN Generated from CLDR data // *INDENT-OFF* // clang-format off """ cpp_footer_comment = """ // END Generated from CLDR data """ def make_identifier(classname): """ Given a class name (e.g. CountryData) return an identifer for the data-table for that class. """ identifier = [ classname[0].lower() ] for c in classname[1:]: if c.isupper(): identifier.extend(["_", c.lower()]) else: identifier.append(c) return "".join(identifier) def export_class(cls, data): """ Given a @p cls and a list of @p data objects from that class, print (to stdout) a C++ file for that data. """ identifier = make_identifier(cls.cpp_classname) with open("{!s}_p.cpp".format(cls.cpp_classname), "wt", encoding="UTF-8") as f: f.write(cpp_header_comment) f.write(cls.cpp_declaration) f.write("\nstatic constexpr int const {!s}_size = {!s};\n".format( identifier, len(data))) f.write("\nstatic const {!s} {!s}_table[] = {!s}\n".format( cls.cpp_classname, identifier, "{")) for d in data: f.write(str(d)) f.write("\n") f.write("};\n\n"); f.write("static_assert( (sizeof({!s}_table) / sizeof({!s})) == {!s}_size, \"Table size mismatch for {!s}\" );\n\n".format( identifier, cls.cpp_classname, identifier, cls.cpp_classname)) f.write(cpp_footer_comment) if __name__ == "__main__": export_class(CountryData, read_subtags_file()) calamares-3.2.20/src/libcalamares/locale/zone-extractor.py000066400000000000000000000075601362604102500235400ustar00rootroot00000000000000#! /usr/bin/env python3 # # === This file is part of Calamares - === # # Python3 script to scrape some data out of zoneinfo/zone.tab. # ### BEGIN LICENSES # # Copyright 2019 Adriaan de Groot # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # ### END LICENSES ### BEGIN USAGE # """ Python3 script to scrape some data out of zoneinfo/zone.tab. To use this script, you must have a zone.tab in a standard location, /usr/share/zoneinfo/zone.tab (this is usual on FreeBSD and Linux). Prints out a few tables of zone names for use in translations. """ def scrape_file(file, regionset, zoneset): for line in file.readlines(): if line.startswith("#"): continue parts = line.split("\t") if len(parts) < 3: continue zoneid = parts[2] if not "/" in zoneid: continue region, zone = zoneid.split("/", 1) zone = zone.strip().replace("_", " ") regionset.add(region) assert(zone not in zoneset) zoneset.add(zone) def write_set(file, label, set): file.write("/* This returns a reference to local, which is a terrible idea.\n * Good thing it's not meant to be compiled.\n */\n") # Note {{ is an escaped { for Python string formatting file.write("static const QStringList& {!s}_table()\n{{\n\treturn QStringList {{\n".format(label)) for x in sorted(set): file.write("""\t\tQObject::tr("{!s}", "{!s}"),\n""".format(x, label)) file.write("\t\tQString()\n\t};\n}\n\n") cpp_header_comment = """/* GENERATED FILE DO NOT EDIT * * === This file is part of Calamares - === * * This file is derived from zone.tab, which has its own copyright statement: * * This file is in the public domain, so clarified as of * 2009-05-17 by Arthur David Olson. * * From Paul Eggert (2018-06-27): * This file is intended as a backward-compatibility aid for older programs. * New programs should use zone1970.tab. This file is like zone1970.tab (see * zone1970.tab's comments), but with the following additional restrictions: * * 1. This file contains only ASCII characters. * 2. The first data column contains exactly one country code. * */ /** THIS FILE EXISTS ONLY FOR TRANSLATIONS PURPOSES **/ // *INDENT-OFF* // clang-format off """ if __name__ == "__main__": regions=set() zones=set() with open("/usr/share/zoneinfo/zone.tab", "r") as f: scrape_file(f, regions, zones) with open("ZoneData_p.cpp", "w") as f: f.write(cpp_header_comment) write_set(f, "tz_regions", regions) write_set(f, "tz_names", zones) calamares-3.2.20/src/libcalamares/modulesystem/000077500000000000000000000000001362604102500214655ustar00rootroot00000000000000calamares-3.2.20/src/libcalamares/modulesystem/Actions.h000066400000000000000000000020531362604102500232360ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef MODULESYSTEM_ACTIONS_H #define MODULESYSTEM_ACTIONS_H namespace Calamares { namespace ModuleSystem { enum class Action : char { Show, Exec }; } // namespace ModuleSystem } // namespace Calamares #endif calamares-3.2.20/src/libcalamares/modulesystem/Descriptor.h000066400000000000000000000023001362604102500237470ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2020, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef MODULESYSTEM_DESCRIPTOR_H #define MODULESYSTEM_DESCRIPTOR_H #include namespace Calamares { namespace ModuleSystem { /* While this isn't a useful *using* right now, the intention is * to create a more strongly-typed Module Descriptor that carries * only the necessary information and no variants. */ using Descriptor = QVariantMap; } // namespace ModuleSystem } // namespace Calamares #endif calamares-3.2.20/src/libcalamares/modulesystem/InstanceKey.cpp000066400000000000000000000026341362604102500244130ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2018-2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "InstanceKey.h" namespace Calamares { namespace ModuleSystem { InstanceKey InstanceKey::fromString( const QString& s ) { QStringList moduleEntrySplit = s.split( '@' ); if ( moduleEntrySplit.length() < 1 || moduleEntrySplit.length() > 2 ) { return InstanceKey(); } // For length 1, first == last return InstanceKey( moduleEntrySplit.first(), moduleEntrySplit.last() ); } QDebug& operator<<( QDebug& s, const Calamares::ModuleSystem::InstanceKey& i ) { return s << i.toString(); } } // namespace ModuleSystem } // namespace Calamares calamares-3.2.20/src/libcalamares/modulesystem/InstanceKey.h000066400000000000000000000057011362604102500240560ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2018-2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef MODULESYSTEM_INSTANCEKEY_H #define MODULESYSTEM_INSTANCEKEY_H #include #include #include namespace Calamares { namespace ModuleSystem { /** @brief A module instance's key (`module@id`) * * A module instance is identified by both the module's name * (a Calamares module, e.g. `users`) and an instance id. * Usually, the instance id is the same as the module name * and the whole module instance key is `users@users`, but * it is possible to use the same module more than once * and then you distinguish those module instances by their * secondary id (e.g. `users@one`). * * This is supported by the *instances* configuration entry * in `settings.conf`. */ class InstanceKey : public QPair< QString, QString > { public: /// @brief Create an instance key from explicit module and id. InstanceKey( const QString& module, const QString& id ) : QPair( module, id ) { if ( second.isEmpty() ) { second = first; } validate(); } /// @brief Create unusual, invalid instance key InstanceKey() : QPair( QString(), QString() ) { } /// @brief A valid module has both name and id bool isValid() const { return !first.isEmpty() && !second.isEmpty(); } /// @brief A custom module has a non-default id bool isCustom() const { return first != second; } QString module() const { return first; } QString id() const { return second; } /// @brief Create instance key from stringified version static InstanceKey fromString( const QString& s ); QString toString() const { if ( isValid() ) { return first + '@' + second; } return QString(); } private: /** @brief Check validity and reset module and id if needed. */ void validate() { if ( first.contains( '@' ) || second.contains( '@' ) ) { first = QString(); second = QString(); } } }; QDebug& operator <<( QDebug& s, const Calamares::ModuleSystem::InstanceKey& i ); } // namespace ModuleSystem } // namespace Calamares #endif calamares-3.2.20/src/libcalamares/modulesystem/Tests.cpp000066400000000000000000000074011362604102500232750ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "modulesystem/InstanceKey.h" #include using Calamares::ModuleSystem::InstanceKey; class ModuleSystemTests : public QObject { Q_OBJECT public: ModuleSystemTests() {} virtual ~ModuleSystemTests() {} private Q_SLOTS: void initTestCase(); void testEmptyInstanceKey(); void testCustomInstanceKey(); void testFromStringInstanceKey(); void testBadSimpleCases(); void testBadFromStringCases(); }; void ModuleSystemTests::initTestCase() { } void assert_is_invalid( const InstanceKey& k ) { QVERIFY( !k.isValid() ); QVERIFY( !k.isCustom() ); QVERIFY( k.module().isEmpty() ); QVERIFY( k.id().isEmpty() ); if ( k.toString().isEmpty() ) { QVERIFY( k.toString().isEmpty() ); } else { QCOMPARE( k.toString(), QString() ); } } void ModuleSystemTests::testEmptyInstanceKey() { InstanceKey k0; assert_is_invalid( k0 ); } void ModuleSystemTests::testCustomInstanceKey() { InstanceKey k0( "derp", "derp" ); QVERIFY( k0.isValid() ); QVERIFY( !k0.isCustom() ); QCOMPARE( k0.module(), QStringLiteral( "derp" ) ); QCOMPARE( k0.id(), QStringLiteral( "derp" ) ); QCOMPARE( k0.toString(), QStringLiteral( "derp@derp" ) ); InstanceKey k1( "derp", "horse" ); QVERIFY( k1.isValid() ); QVERIFY( k1.isCustom() ); QCOMPARE( k1.module(), QStringLiteral( "derp" ) ); QCOMPARE( k1.id(), QStringLiteral( "horse" ) ); QCOMPARE( k1.toString(), QStringLiteral( "derp@horse" ) ); InstanceKey k4( "derp", QString() ); QVERIFY( k4.isValid() ); QVERIFY( !k4.isCustom() ); QCOMPARE( k4.module(), QStringLiteral( "derp" ) ); QCOMPARE( k4.id(), QStringLiteral( "derp" ) ); QCOMPARE( k4.toString(), QStringLiteral( "derp@derp" ) ); } void ModuleSystemTests::testFromStringInstanceKey() { InstanceKey k0 = InstanceKey::fromString( "derp@derp" ); QVERIFY( k0.isValid() ); QVERIFY( !k0.isCustom() ); QCOMPARE( k0.module(), QStringLiteral( "derp" ) ); QCOMPARE( k0.id(), QStringLiteral( "derp" ) ); InstanceKey k1 = InstanceKey::fromString( "derp@horse" ); QVERIFY( k1.isValid() ); QVERIFY( k1.isCustom() ); QCOMPARE( k1.module(), QStringLiteral( "derp" ) ); QCOMPARE( k1.id(), QStringLiteral( "horse" ) ); InstanceKey k2 = InstanceKey::fromString( "derp" ); QVERIFY( k2.isValid() ); QVERIFY( !k2.isCustom() ); QCOMPARE( k2.module(), QStringLiteral( "derp" ) ); QCOMPARE( k2.id(), QStringLiteral( "derp" ) ); } /// @brief These are expected to fail since they show bugs in the code void ModuleSystemTests::testBadSimpleCases() { InstanceKey k4( "derp", "derp@derp" ); assert_is_invalid( k4 ); } void ModuleSystemTests::testBadFromStringCases() { InstanceKey k0 = InstanceKey::fromString( QString() ); assert_is_invalid( k0 ); k0 = InstanceKey::fromString( "derp@derp@derp" ); assert_is_invalid( k0 ); } QTEST_GUILESS_MAIN( ModuleSystemTests ) #include "utils/moc-warnings.h" #include "Tests.moc" calamares-3.2.20/src/libcalamares/network/000077500000000000000000000000001362604102500204245ustar00rootroot00000000000000calamares-3.2.20/src/libcalamares/network/Manager.cpp000066400000000000000000000161061362604102500225060ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "Manager.h" #include "utils/Logger.h" #include #include #include #include #include #include #include #include namespace CalamaresUtils { namespace Network { void RequestOptions::applyToRequest( QNetworkRequest* request ) const { if ( m_flags & Flag::FollowRedirect ) { // Follows all redirects except unsafe ones (https to http). request->setAttribute( QNetworkRequest::FollowRedirectsAttribute, true ); } if ( m_flags & Flag::FakeUserAgent ) { // Not everybody likes the default User Agent used by this class (looking at you, // sourceforge.net), so let's set a more descriptive one. request->setRawHeader( "User-Agent", "Mozilla/5.0 (compatible; Calamares)" ); } } class Manager::Private : public QObject { Q_OBJECT private: std::unique_ptr< QNetworkAccessManager > m_nam; using ThreadNam = QPair< QThread*, QNetworkAccessManager* >; QVector< ThreadNam > m_perThreadNams; public slots: void cleanupNam(); public: QUrl m_hasInternetUrl; bool m_hasInternet; Private(); QNetworkAccessManager* nam(); }; Manager::Private::Private() : m_nam( std::make_unique< QNetworkAccessManager >() ) , m_hasInternet( false ) { m_perThreadNams.reserve( 20 ); m_perThreadNams.append( qMakePair( QThread::currentThread(), m_nam.get() ) ); } static QMutex* namMutex() { static QMutex namMutex; return &namMutex; } QNetworkAccessManager* Manager::Private::nam() { QMutexLocker lock( namMutex() ); auto* thread = QThread::currentThread(); int index = 0; for ( const auto& n : m_perThreadNams ) { if ( n.first == thread ) { return n.second; } ++index; } // Need a new NAM for this thread QNetworkAccessManager* nam = new QNetworkAccessManager(); m_perThreadNams.append( qMakePair( thread, nam ) ); QObject::connect( thread, &QThread::finished, this, &Manager::Private::cleanupNam ); return nam; } void Manager::Private::cleanupNam() { QMutexLocker lock( namMutex() ); auto* thread = QThread::currentThread(); bool cleanupFound = false; int cleanupIndex = 0; for ( const auto& n : m_perThreadNams ) { if ( n.first == thread ) { cleanupFound = true; delete n.second; break; } ++cleanupIndex; } if ( cleanupFound ) { m_perThreadNams.remove( cleanupIndex ); } } Manager::Manager() : d( std::make_unique< Private >() ) { } Manager::~Manager() {} Manager& Manager::instance() { static auto* s_manager = new Manager(); return *s_manager; } bool Manager::hasInternet() { return d->m_hasInternet; } bool Manager::checkHasInternet() { bool hasInternet = d->nam()->networkAccessible() == QNetworkAccessManager::Accessible; if ( !hasInternet && ( d->nam()->networkAccessible() == QNetworkAccessManager::UnknownAccessibility ) ) { hasInternet = synchronousPing( d->m_hasInternetUrl ); } d->m_hasInternet = hasInternet; return hasInternet; } void Manager::setCheckHasInternetUrl( const QUrl& url ) { d->m_hasInternetUrl = url; } /** @brief Does a request asynchronously, returns the (pending) reply * * The extra options for the request are taken from @p options, * including the timeout setting. A timeout will cause the reply * to abort. The reply is **not** scheduled for deletion. * * On failure, returns nullptr (e.g. bad URL, timeout). */ static QNetworkReply* asynchronousRun( QNetworkAccessManager* nam, const QUrl& url, const RequestOptions& options ) { QNetworkRequest request = QNetworkRequest( url ); options.applyToRequest( &request ); QNetworkReply* reply = nam->get( request ); QTimer* timer = nullptr; // Bail out early if the request is bad if ( reply->error() ) { reply->deleteLater(); return nullptr; } if ( options.hasTimeout() ) { timer = new QTimer( reply ); timer->setSingleShot( true ); QObject::connect( timer, &QTimer::timeout, reply, &QNetworkReply::abort ); timer->start( options.timeout() ); } return reply; } /** @brief Does a request synchronously, returns the request itself * * The extra options for the request are taken from @p options, * including the timeout setting. * * On failure, returns nullptr (e.g. bad URL, timeout). The request * is marked for later automatic deletion, so don't store the pointer. */ static QPair< RequestStatus, QNetworkReply* > synchronousRun( QNetworkAccessManager* nam, const QUrl& url, const RequestOptions& options ) { auto* reply = asynchronousRun( nam, url, options ); if ( !reply ) { return qMakePair( RequestStatus( RequestStatus::Failed ), nullptr ); } QEventLoop loop; QObject::connect( reply, &QNetworkReply::finished, &loop, &QEventLoop::quit ); loop.exec(); reply->deleteLater(); if ( reply->isRunning() ) { return qMakePair( RequestStatus( RequestStatus::Timeout ), nullptr ); } else if ( reply->error() != QNetworkReply::NoError ) { return qMakePair( RequestStatus( RequestStatus::Timeout ), nullptr ); } else { return qMakePair( RequestStatus( RequestStatus::Ok ), reply ); } } RequestStatus Manager::synchronousPing( const QUrl& url, const RequestOptions& options ) { if ( !url.isValid() ) { return RequestStatus::Failed; } auto reply = synchronousRun( d->nam(), url, options ); if ( reply.first ) { return reply.second->bytesAvailable() ? RequestStatus::Ok : RequestStatus::Empty; } else { return reply.first; } } QByteArray Manager::synchronousGet( const QUrl& url, const RequestOptions& options ) { if ( !url.isValid() ) { return QByteArray(); } auto reply = synchronousRun( d->nam(), url, options ); return reply.first ? reply.second->readAll() : QByteArray(); } QNetworkReply* Manager::asynchronouseGet( const QUrl& url, const CalamaresUtils::Network::RequestOptions& options ) { return asynchronousRun( d->nam(), url, options ); } } // namespace Network } // namespace CalamaresUtils #include "utils/moc-warnings.h" #include "Manager.moc" calamares-3.2.20/src/libcalamares/network/Manager.h000066400000000000000000000104531362604102500221520ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef LIBCALAMARES_NETWORK_MANAGER_H #define LIBCALAMARES_NETWORK_MANAGER_H #include "DllMacro.h" #include #include #include #include #include class QNetworkReply; class QNetworkRequest; namespace CalamaresUtils { namespace Network { class DLLEXPORT RequestOptions { public: using milliseconds = std::chrono::milliseconds; enum Flag { FollowRedirect = 0x1, FakeUserAgent = 0x100 }; Q_DECLARE_FLAGS( Flags, Flag ) RequestOptions() : m_flags( Flags() ) , m_timeout( -1 ) { } RequestOptions( Flags f, milliseconds timeout = milliseconds( -1 ) ) : m_flags( f ) , m_timeout( timeout ) { } void applyToRequest( QNetworkRequest* ) const; bool hasTimeout() const { return m_timeout > milliseconds( 0 ); } auto timeout() const { return m_timeout; } private: Flags m_flags; milliseconds m_timeout; }; Q_DECLARE_OPERATORS_FOR_FLAGS( RequestOptions::Flags ); struct RequestStatus { enum State { Ok, Timeout, // Timeout exceeded Failed, // bad Url Empty // for ping(), response is empty }; RequestStatus( State s = Ok ) : status( s ) { } operator bool() const { return status == Ok; } State status; }; class DLLEXPORT Manager : QObject { Q_OBJECT Manager(); public: /** @brief Gets the single Manager instance. * * Typical code will use `auto& nam = Manager::instance();` * to keep the reference. */ static Manager& instance(); virtual ~Manager(); /** @brief Checks if the given @p url returns data. * * Returns a RequestStatus, which converts to @c true if the ping * was successful. Other status reasons convert to @c false, * typically because of no data, a Url error or no network access. * * May return Empty if the request was successful but returned * no data at all. */ RequestStatus synchronousPing( const QUrl& url, const RequestOptions& options = RequestOptions() ); /** @brief Downloads the data from a given @p url * * Returns the data as a QByteArray, or an empty * array if any error occurred (or no data was returned). */ QByteArray synchronousGet( const QUrl& url, const RequestOptions& options = RequestOptions() ); /// @brief Set the URL which is used for the general "is there internet" check. void setCheckHasInternetUrl( const QUrl& url ); /** @brief Do an explicit check for internet connectivity. * * This **may** do a ping to the configured check URL, but can also * use other mechanisms. */ bool checkHasInternet(); /** @brief Is there internet connectivity? * * This returns the result of the last explicit check, or if there * is other information about the state of the internet connection, * whatever is known. @c true means you can expect (all) internet * connectivity to be present. */ bool hasInternet(); /** @brief Do a network request asynchronously. * * Returns a pointer to the reply-from-the-request. * This may be a nullptr if an error occurs immediately. * The caller is responsible for cleaning up the reply (eventually). */ QNetworkReply* asynchronouseGet( const QUrl& url, const RequestOptions& options = RequestOptions() ); private: class Private; std::unique_ptr< Private > d; }; } // namespace Network } // namespace CalamaresUtils #endif // LIBCALAMARES_NETWORK_MANAGER_H calamares-3.2.20/src/libcalamares/network/Tests.cpp000066400000000000000000000027371362604102500222430ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "Tests.h" #include "Manager.h" #include "utils/Logger.h" #include QTEST_GUILESS_MAIN( NetworkTests ) NetworkTests::NetworkTests() {} NetworkTests::~NetworkTests() {} void NetworkTests::initTestCase() { } void NetworkTests::testInstance() { auto& nam = CalamaresUtils::Network::Manager::instance(); QVERIFY( !nam.hasInternet() ); } void NetworkTests::testPing() { using namespace CalamaresUtils::Network; Logger::setupLogLevel( Logger::LOGVERBOSE ); auto& nam = Manager::instance(); auto canPing_www_kde_org = nam.synchronousPing( QUrl( "https://www.kde.org" ), RequestOptions( RequestOptions::FollowRedirect ) ); QVERIFY( canPing_www_kde_org ); } calamares-3.2.20/src/libcalamares/network/Tests.h000066400000000000000000000021141362604102500216750ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef LIBCALAMARES_NETWORK_TESTS_H #define LIBCALAMARES_NETWORK_TESTS_H #include class NetworkTests : public QObject { Q_OBJECT public: NetworkTests(); ~NetworkTests() override; private Q_SLOTS: void initTestCase(); void testInstance(); void testPing(); }; #endif calamares-3.2.20/src/libcalamares/partition/000077500000000000000000000000001362604102500207445ustar00rootroot00000000000000calamares-3.2.20/src/libcalamares/partition/FileSystem.cpp000066400000000000000000000042461362604102500235420ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2015-2016, Teo Mrnjavac * Copyright 2018-2019 Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "FileSystem.h" #include namespace CalamaresUtils { namespace Partition { QString prettyNameForFileSystemType( FileSystem::Type t ) { switch ( t ) { case FileSystem::Unknown: return QObject::tr( "unknown" ); case FileSystem::Extended: return QObject::tr( "extended" ); case FileSystem::Unformatted: return QObject::tr( "unformatted" ); case FileSystem::LinuxSwap: return QObject::tr( "swap" ); case FileSystem::Fat16: case FileSystem::Fat32: case FileSystem::Ntfs: case FileSystem::Xfs: case FileSystem::Jfs: case FileSystem::Hfs: case FileSystem::Ufs: case FileSystem::Hpfs: case FileSystem::Luks: case FileSystem::Ocfs2: case FileSystem::Zfs: case FileSystem::Nilfs2: return FileSystem::nameForType( t ).toUpper(); case FileSystem::ReiserFS: return "ReiserFS"; case FileSystem::Reiser4: return "Reiser4"; case FileSystem::HfsPlus: return "HFS+"; case FileSystem::Btrfs: return "Btrfs"; case FileSystem::Exfat: return "exFAT"; case FileSystem::Lvm2_PV: return "LVM PV"; default: return FileSystem::nameForType( t ); } } } // namespace Partition } // namespace CalamaresUtils calamares-3.2.20/src/libcalamares/partition/FileSystem.h000066400000000000000000000033111362604102500231770ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2015-2016, Teo Mrnjavac * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ /* * NOTE: this functionality is only available when Calamares is compiled * with KPMcore support. */ #ifndef PARTITION_FILESYSTEM_H #define PARTITION_FILESYSTEM_H #include namespace CalamaresUtils { namespace Partition { QString prettyNameForFileSystemType( FileSystem::Type t ); static inline QString untranslatedFS( FileSystem& fs ) { return fs.name( { QStringLiteral( "C" ) } ); } static inline QString untranslatedFS( FileSystem* fs ) { return fs ? untranslatedFS( *fs ) : QString(); } static inline QString userVisibleFS( FileSystem& fs ) { return fs.name(); } static inline QString userVisibleFS( FileSystem* fs ) { return fs ? userVisibleFS( *fs ) : QString(); } } // namespace Partition } // namespace CalamaresUtils #endif // PARTITION_PARTITIONQUERY_H calamares-3.2.20/src/libcalamares/partition/KPMManager.cpp000066400000000000000000000064351362604102500234020ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "KPMManager.h" #include "utils/Logger.h" #include #include #if defined( WITH_KPMCORE4API ) #include #endif #include namespace CalamaresUtils { namespace Partition { class InternalManager { public: InternalManager(); ~InternalManager(); }; static bool s_kpm_loaded = false; /* * We have one living InternalManager object at a time. * It is managed by shared_ptr<>s help by KPMManager * objects, but since we can create KPMManager objects * independent of each other, all of which share ownership * of the same InternalManager, hang on to one extra reference * to the InternalManager so we can hand it out in getInternal(). */ static std::weak_ptr< InternalManager > s_backend; InternalManager::InternalManager() { cDebug() << "KPMCore backend starting .."; Q_ASSERT( s_backend.expired() ); if ( !s_kpm_loaded ) { QByteArray backendName = qgetenv( "KPMCORE_BACKEND" ); if ( !CoreBackendManager::self()->load( backendName.isEmpty() ? CoreBackendManager::defaultBackendName() : backendName ) ) { cWarning() << "Failed to load backend plugin" << backendName; } else { auto* backend_p = CoreBackendManager::self()->backend(); cDebug() << Logger::SubEntry << "Backend @" << (void*)backend_p << backend_p->id() << backend_p->version(); s_kpm_loaded = true; } } } InternalManager::~InternalManager() { cDebug() << "Cleaning up KPMCore backend .."; #if defined( WITH_KPMCORE4API ) auto backend_p = CoreBackendManager::self()->backend(); if ( backend_p ) { ExternalCommand::stopHelper(); } #endif } std::shared_ptr< InternalManager > getInternal() { if ( s_backend.expired() ) { auto p = std::make_shared< InternalManager >(); s_backend = p; return p; } return s_backend.lock(); } KPMManager::KPMManager() : m_d( getInternal() ) { cDebug() << "KPMManager" << s_backend.use_count() << "created."; } KPMManager::~KPMManager() { cDebug() << "KPMManager" << s_backend.use_count() << "being destroyed."; } KPMManager::operator bool() const { return s_kpm_loaded; } CoreBackend* KPMManager::backend() const { return s_kpm_loaded ? CoreBackendManager::self()->backend() : nullptr; } } // namespace Partition } // namespace CalamaresUtils calamares-3.2.20/src/libcalamares/partition/KPMManager.h000066400000000000000000000037631362604102500230500ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ /* * NOTE: this functionality is only available when Calamares is compiled * with KPMcore support. */ #ifndef PARTITION_KPMMANAGER_H #define PARTITION_KPMMANAGER_H #include class CoreBackend; namespace CalamaresUtils { namespace Partition { /// @brief Handle to KPMCore class InternalManager; /** @brief KPMCore loader and cleanup * * A Calamares plugin that uses KPMCore should hold an object of * this class; its only responsibility is to load KPMCore * and to cleanly unload it on destruction (with KPMCore 4, * also to shutdown the privileged helper application). * * It loads the default plugin ("parted" with KPMCore 3, "sfdisk" * with KPMCore 4), but this can be overridden by setting the * environment variable KPMCORE_BACKEND. Setting it to * "dummy" will load the dummy plugin instead. */ class KPMManager { public: KPMManager(); ~KPMManager(); /// @brief Is KPMCore loaded correctly? operator bool() const; /// @brief Gets the KPMCore backend (e.g. CoreBackendManager::self()->backend() ) CoreBackend* backend() const; private: std::shared_ptr< InternalManager > m_d; }; } // namespace Partition } // namespace CalamaresUtils #endif // PARTITION_KPMMANAGER_H calamares-3.2.20/src/libcalamares/partition/Mount.cpp000066400000000000000000000072001362604102500225510ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac * Copyright 2017-2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "Mount.h" #include "partition/Sync.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include #include namespace CalamaresUtils { namespace Partition { int mount( const QString& devicePath, const QString& mountPoint, const QString& filesystemName, const QString& options ) { if ( devicePath.isEmpty() || mountPoint.isEmpty() ) { if ( devicePath.isEmpty() ) { cWarning() << "Can't mount an empty device."; } if ( mountPoint.isEmpty() ) { cWarning() << "Can't mount on an empty mountpoint."; } return static_cast< int >( ProcessResult::Code::NoWorkingDirectory ); } QDir mountPointDir( mountPoint ); if ( !mountPointDir.exists() ) { bool ok = mountPointDir.mkpath( mountPoint ); if ( !ok ) { cWarning() << "Could not create mountpoint" << mountPoint; return static_cast< int >( ProcessResult::Code::NoWorkingDirectory ); } } QStringList args = { "mount" }; if ( !filesystemName.isEmpty() ) { args << "-t" << filesystemName; } if ( !options.isEmpty() ) { if ( options.startsWith( '-' ) ) { args << options; } else { args << "-o" << options; } } args << devicePath << mountPoint; auto r = CalamaresUtils::System::runCommand( args, std::chrono::seconds( 10 ) ); sync(); return r.getExitCode(); } int unmount( const QString& path, const QStringList& options ) { auto r = CalamaresUtils::System::runCommand( QStringList { "umount" } << options << path, std::chrono::seconds( 10 ) ); sync(); return r.getExitCode(); } struct TemporaryMount::Private { QString m_devicePath; QTemporaryDir m_mountDir; }; TemporaryMount::TemporaryMount( const QString& devicePath, const QString& filesystemName, const QString& options ) : m_d( new Private ) { m_d->m_devicePath = devicePath; m_d->m_mountDir.setAutoRemove( false ); int r = mount( devicePath, m_d->m_mountDir.path(), filesystemName, options ); if ( r ) { cWarning() << "Mount of" << devicePath << "on" << m_d->m_mountDir.path() << "failed, code" << r; delete m_d; m_d = nullptr; } } TemporaryMount::~TemporaryMount() { if ( m_d ) { int r = unmount( m_d->m_mountDir.path(), { "-R" } ); if ( r ) { cWarning() << "UnMount of temporary" << m_d->m_devicePath << "on" << m_d->m_mountDir.path() << "failed, code" << r; } delete m_d; m_d = nullptr; } } QString TemporaryMount::path() const { return m_d ? m_d->m_mountDir.path() : QString(); } } // namespace Partition } // namespace CalamaresUtils calamares-3.2.20/src/libcalamares/partition/Mount.h000066400000000000000000000052331362604102500222220ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac * Copyright 2017-2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef PARTITION_MOUNT_H #define PARTITION_MOUNT_H #include "DllMacro.h" #include #include namespace CalamaresUtils { namespace Partition { /** * Runs the mount utility with the specified parameters. * @param devicePath the path of the partition to mount. * @param mountPoint the full path of the target mount point. * @param filesystemName the name of the filesystem (optional). * @param options any additional options as passed to mount -o (optional). * If @p options starts with a dash (-) then it is passed unchanged * and no -o option is added; this is used in handling --bind mounts. * @returns the program's exit code, or: * Crashed = QProcess crash * FailedToStart = QProcess cannot start * NoWorkingDirectory = bad arguments */ DLLEXPORT int mount( const QString& devicePath, const QString& mountPoint, const QString& filesystemName = QString(), const QString& options = QString() ); /** @brief Unmount the given @p path (device or mount point). * * Runs umount(8) in the host system. * * @returns the program's exit code, or special codes like mount(). */ DLLEXPORT int unmount( const QString& path, const QStringList& options = QStringList() ); class DLLEXPORT TemporaryMount { public: TemporaryMount( const QString& devicePath, const QString& filesystemName = QString(), const QString& options = QString() ); TemporaryMount( const TemporaryMount& ) = delete; TemporaryMount& operator=( const TemporaryMount& ) = delete; ~TemporaryMount(); bool isValid() const { return m_d; } QString path() const; private: struct Private; Private* m_d = nullptr; }; } // namespace Partition } // namespace CalamaresUtils #endif calamares-3.2.20/src/libcalamares/partition/PartitionIterator.cpp000066400000000000000000000071431362604102500251400ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2015, Teo Mrnjavac * Copyright 2017, 2019 Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "PartitionIterator.h" // KPMcore #include #include #include namespace CalamaresUtils { namespace Partition { using Partition = ::Partition; PartitionIterator::PartitionIterator( PartitionTable* table ) : m_table( table ) { } Partition* PartitionIterator::operator*() const { return m_current; } void PartitionIterator::operator++() { if ( !m_current ) { return; } if ( m_current->hasChildren() ) { // Go to the first child m_current = static_cast< Partition* >( m_current->children().first() ); return; } PartitionNode* parent = m_current->parent(); Partition* successor = parent->successor( *m_current ); if ( successor ) { // Go to the next sibling m_current = successor; return; } if ( parent->isRoot() ) { // We reached the end m_current = nullptr; return; } // Try to go to the next sibling of our parent PartitionNode* grandParent = parent->parent(); Q_ASSERT( grandParent ); // If parent is not root, then it's not a PartitionTable but a // Partition, we can static_cast it. m_current = grandParent->successor( *static_cast< Partition* >( parent ) ); } bool PartitionIterator::operator==( const PartitionIterator& other ) const { return m_table == other.m_table && m_current == other.m_current; } bool PartitionIterator::operator!=( const PartitionIterator& other ) const { return !( *this == other ); } PartitionIterator PartitionIterator::begin( Device* device ) { if ( !device ) { return PartitionIterator( nullptr ); } PartitionTable* table = device->partitionTable(); if ( !table ) { return PartitionIterator( nullptr ); } return PartitionIterator::begin( table ); } PartitionIterator PartitionIterator::begin( PartitionTable* table ) { auto it = PartitionIterator( table ); QList< Partition* > children = table->children(); // Does not usually happen, but it did happen on a tiny (10MiB) disk with an MBR // partition table. if ( children.isEmpty() ) { return it; } it.m_current = children.first(); return it; } PartitionIterator PartitionIterator::end( Device* device ) { if ( !device ) { return PartitionIterator( nullptr ); } PartitionTable* table = device->partitionTable(); if ( !table ) { return PartitionIterator( nullptr ); } return PartitionIterator::end( table ); } PartitionIterator PartitionIterator::end( PartitionTable* table ) { return PartitionIterator( table ); } } // namespace Partition } // namespace CalamaresUtils calamares-3.2.20/src/libcalamares/partition/PartitionIterator.h000066400000000000000000000044001362604102500245760ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2015, Teo Mrnjavac * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ /* * NOTE: this functionality is only available when Calamares is compiled * with KPMcore support. */ #ifndef PARTITION_PARTITIONITERATOR_H #define PARTITION_PARTITIONITERATOR_H class Device; class Partition; class PartitionTable; namespace CalamaresUtils { namespace Partition { /** @brief Iterator over KPMCore partitions * * A forward-only iterator to go through the partitions of a device, * independently of whether they are primary, logical or extended. * * An iterator can be created from a device (then it refers to the * partition table of that device) or a partition table. The * partition table must remain valid throughout iteration. * * A nullptr is valid, for an empty iterator. */ class PartitionIterator { public: ::Partition* operator*() const; void operator++(); bool operator==( const PartitionIterator& other ) const; bool operator!=( const PartitionIterator& other ) const; static PartitionIterator begin( ::Device* device ); static PartitionIterator begin( ::PartitionTable* table ); static PartitionIterator end( ::Device* device ); static PartitionIterator end( ::PartitionTable* table ); private: PartitionIterator( ::PartitionTable* table ); ::PartitionTable* m_table; ::Partition* m_current = nullptr; }; } // namespace Partition } // namespace CalamaresUtils #endif // PARTITION_PARTITIONITERATOR_H calamares-3.2.20/src/libcalamares/partition/PartitionQuery.cpp000066400000000000000000000054341362604102500244550ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2015-2016, Teo Mrnjavac * Copyright 2018-2019 Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "PartitionQuery.h" #include "PartitionIterator.h" #include #include namespace CalamaresUtils { namespace Partition { // Types from KPMCore using ::Device; using ::Partition; bool isPartitionFreeSpace( Partition* partition ) { return partition->roles().has( PartitionRole::Unallocated ); } bool isPartitionNew( Partition* partition ) { #if defined( WITH_KPMCORE4API ) constexpr auto NewState = Partition::State::New; #else constexpr auto NewState = Partition::StateNew; #endif return partition->state() == NewState; } Partition* findPartitionByCurrentMountPoint( const QList< Device* >& devices, const QString& mountPoint ) { for ( auto device : devices ) for ( auto it = PartitionIterator::begin( device ); it != PartitionIterator::end( device ); ++it ) if ( ( *it )->mountPoint() == mountPoint ) { return *it; } return nullptr; } Partition* findPartitionByPath( const QList< Device* >& devices, const QString& path ) { if ( path.simplified().isEmpty() ) { return nullptr; } for ( auto device : devices ) for ( auto it = PartitionIterator::begin( device ); it != PartitionIterator::end( device ); ++it ) if ( ( *it )->partitionPath() == path.simplified() ) { return *it; } return nullptr; } QList< Partition* > findPartitions( const QList< Device* >& devices, std::function< bool( Partition* ) > criterionFunction ) { QList< Partition* > results; for ( auto device : devices ) for ( auto it = PartitionIterator::begin( device ); it != PartitionIterator::end( device ); ++it ) if ( criterionFunction( *it ) ) { results.append( *it ); } return results; } } // namespace Partition } // namespace CalamaresUtils calamares-3.2.20/src/libcalamares/partition/PartitionQuery.h000066400000000000000000000050661362604102500241230ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2015-2016, Teo Mrnjavac * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ /* * NOTE: this functionality is only available when Calamares is compiled * with KPMcore support. */ #ifndef PARTITION_PARTITIONQUERY_H #define PARTITION_PARTITIONQUERY_H #include #include class Device; class Partition; namespace CalamaresUtils { namespace Partition { using ::Device; using ::Partition; /** @brief Is this a free-space area? */ bool isPartitionFreeSpace( Partition* ); /** @brief Is this partition newly-to-be-created? * * Returns true if the partition is planned to be created by the installer as * opposed to already existing on the disk. */ bool isPartitionNew( Partition* ); /** * Iterates on all devices and return the first partition which is (already) * mounted on @p mountPoint. */ Partition* findPartitionByCurrentMountPoint( const QList< Device* >& devices, const QString& mountPoint ); // TODO: add this distinction // Partition* findPartitionByIntendedMountPoint( const QList< Device* >& devices, const QString& mountPoint ); /** * Iterates on all devices and partitions and returns a pointer to the Partition object * for the given path, or nullptr if a Partition for the given path cannot be found. */ Partition* findPartitionByPath( const QList< Device* >& devices, const QString& path ); /** * Iterates on all devices and partitions and returns a list of pointers to the Partition * objects that satisfy the conditions defined in the criterion function. */ QList< Partition* > findPartitions( const QList< Device* >& devices, std::function< bool( Partition* ) > criterionFunction ); } // namespace Partition } // namespace CalamaresUtils #endif // PARTITION_PARTITIONQUERY_H calamares-3.2.20/src/libcalamares/partition/PartitionSize.cpp000066400000000000000000000160721362604102500242620ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Collabora Ltd * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "partition/PartitionSize.h" #include "utils/Logger.h" #include "utils/Units.h" namespace CalamaresUtils { namespace Partition { static const NamedEnumTable< SizeUnit >& unitSuffixes() { // *INDENT-OFF* // clang-format off static const NamedEnumTable< SizeUnit > names { { QStringLiteral( "%" ), SizeUnit::Percent }, { QStringLiteral( "K" ), SizeUnit::KiB }, { QStringLiteral( "KiB" ), SizeUnit::KiB }, { QStringLiteral( "M" ), SizeUnit::MiB }, { QStringLiteral( "MiB" ), SizeUnit::MiB }, { QStringLiteral( "G" ), SizeUnit::GiB }, { QStringLiteral( "GiB" ), SizeUnit::GiB }, { QStringLiteral( "KB" ), SizeUnit::KB }, { QStringLiteral( "MB" ), SizeUnit::MB }, { QStringLiteral( "GB" ), SizeUnit::GB } }; // clang-format on // *INDENT-ON* return names; } PartitionSize::PartitionSize( const QString& s ) : NamedSuffix( unitSuffixes(), s ) { if ( ( unit() == SizeUnit::Percent ) && ( value() > 100 || value() < 0 ) ) { cDebug() << "Percent value" << value() << "is not valid."; m_value = 0; } if ( m_unit == SizeUnit::None ) { m_value = s.toLongLong(); if ( m_value > 0 ) { m_unit = SizeUnit::Byte; } } if ( m_value <= 0 ) { m_value = 0; m_unit = SizeUnit::None; } } qint64 PartitionSize::toSectors( qint64 totalSectors, qint64 sectorSize ) const { if ( !isValid() ) { return -1; } if ( totalSectors < 1 || sectorSize < 1 ) { return -1; } switch ( m_unit ) { case SizeUnit::None: return -1; case SizeUnit::Percent: if ( value() == 100 ) { return totalSectors; // Common-case, avoid futzing around } else { return totalSectors * value() / 100; } case SizeUnit::Byte: case SizeUnit::KB: case SizeUnit::KiB: case SizeUnit::MB: case SizeUnit::MiB: case SizeUnit::GB: case SizeUnit::GiB: return CalamaresUtils::bytesToSectors( toBytes(), sectorSize ); } return -1; } qint64 PartitionSize::toBytes( qint64 totalSectors, qint64 sectorSize ) const { if ( !isValid() ) { return -1; } switch ( m_unit ) { case SizeUnit::None: return -1; case SizeUnit::Percent: if ( totalSectors < 1 || sectorSize < 1 ) { return -1; } if ( value() == 100 ) { return totalSectors * sectorSize; // Common-case, avoid futzing around } else { return totalSectors * value() / 100; } case SizeUnit::Byte: case SizeUnit::KB: case SizeUnit::KiB: case SizeUnit::MB: case SizeUnit::MiB: case SizeUnit::GB: case SizeUnit::GiB: return toBytes(); } // notreached return -1; } qint64 PartitionSize::toBytes( qint64 totalBytes ) const { if ( !isValid() ) { return -1; } switch ( m_unit ) { case SizeUnit::None: return -1; case SizeUnit::Percent: if ( totalBytes < 1 ) { return -1; } if ( value() == 100 ) { return totalBytes; // Common-case, avoid futzing around } else { return totalBytes * value() / 100; } case SizeUnit::Byte: case SizeUnit::KB: case SizeUnit::KiB: case SizeUnit::MB: case SizeUnit::MiB: case SizeUnit::GB: case SizeUnit::GiB: return toBytes(); } // notreached return -1; } qint64 PartitionSize::toBytes() const { if ( !isValid() ) { return -1; } switch ( m_unit ) { case SizeUnit::None: case SizeUnit::Percent: return -1; case SizeUnit::Byte: return value(); case SizeUnit::KB: return CalamaresUtils::KBtoBytes( static_cast< unsigned long long >( value() ) ); case SizeUnit::KiB: return CalamaresUtils::KiBtoBytes( static_cast< unsigned long long >( value() ) ); case SizeUnit::MB: return CalamaresUtils::MBtoBytes( static_cast< unsigned long long >( value() ) ); case SizeUnit::MiB: return CalamaresUtils::MiBtoBytes( static_cast< unsigned long long >( value() ) ); case SizeUnit::GB: return CalamaresUtils::GBtoBytes( static_cast< unsigned long long >( value() ) ); case SizeUnit::GiB: return CalamaresUtils::GiBtoBytes( static_cast< unsigned long long >( value() ) ); } NOTREACHED return -1; } bool PartitionSize::operator<( const PartitionSize& other ) const { if ( !unitsComparable( m_unit, other.m_unit ) ) { return false; } switch ( m_unit ) { case SizeUnit::None: return false; case SizeUnit::Percent: return ( m_value < other.m_value ); case SizeUnit::Byte: case SizeUnit::KB: case SizeUnit::KiB: case SizeUnit::MB: case SizeUnit::MiB: case SizeUnit::GB: case SizeUnit::GiB: return ( toBytes() < other.toBytes() ); } NOTREACHED return false; } bool PartitionSize::operator>( const PartitionSize& other ) const { if ( !unitsComparable( m_unit, other.m_unit ) ) { return false; } switch ( m_unit ) { case SizeUnit::None: return false; case SizeUnit::Percent: return ( m_value > other.m_value ); case SizeUnit::Byte: case SizeUnit::KB: case SizeUnit::KiB: case SizeUnit::MB: case SizeUnit::MiB: case SizeUnit::GB: case SizeUnit::GiB: return ( toBytes() > other.toBytes() ); } NOTREACHED return false; } bool PartitionSize::operator==( const PartitionSize& other ) const { if ( !unitsComparable( m_unit, other.m_unit ) ) { return false; } switch ( m_unit ) { case SizeUnit::None: return false; case SizeUnit::Percent: return ( m_value == other.m_value ); case SizeUnit::Byte: case SizeUnit::KB: case SizeUnit::KiB: case SizeUnit::MB: case SizeUnit::MiB: case SizeUnit::GB: case SizeUnit::GiB: return ( toBytes() == other.toBytes() ); } NOTREACHED return false; } } // namespace Partition } // namespace CalamaresUtils calamares-3.2.20/src/libcalamares/partition/PartitionSize.h000066400000000000000000000075511362604102500237310ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Collabora Ltd * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef PARTITION_PARTITIONSIZE_H #define PARTITION_PARTITIONSIZE_H #include "utils/NamedSuffix.h" #include "utils/Units.h" // Qt #include namespace CalamaresUtils { namespace Partition { enum class SizeUnit { None, Percent, Byte, KB, KiB, MB, MiB, GB, GiB }; /** @brief Partition size expressions * * Sizes can be specified in bytes, KiB, MiB, GiB or percent (of * the available drive space are on). This class handles parsing * of such strings from the config file. */ class PartitionSize : public NamedSuffix< SizeUnit, SizeUnit::None > { public: PartitionSize() : NamedSuffix() { } PartitionSize( int v, SizeUnit u ) : NamedSuffix( v, u ) { } PartitionSize( const QString& ); bool isValid() const { return ( unit() != SizeUnit::None ) && ( value() > 0 ); } bool operator<( const PartitionSize& other ) const; bool operator>( const PartitionSize& other ) const; bool operator==( const PartitionSize& other ) const; /** @brief Convert the size to the number of sectors @p totalSectors . * * Each sector has size @p sectorSize, for converting sizes in Bytes, * KiB, MiB or GiB to sector counts. * * @return the number of sectors needed, or -1 for invalid sizes. */ qint64 toSectors( qint64 totalSectors, qint64 sectorSize ) const; /** @brief Convert the size to bytes. * * The device's sectors count @p totalSectors and sector size * @p sectoreSize are used to calculated the total size, which * is then used to calculate the size when using Percent. * * @return the size in bytes, or -1 for invalid sizes. */ qint64 toBytes( qint64 totalSectors, qint64 sectorSize ) const; /** @brief Convert the size to bytes. * * Total size @p totalBytes is needed for sizes in Percent. This * parameter is unused in any other case. * * @return the size in bytes, or -1 for invalid sizes. */ qint64 toBytes( qint64 totalBytes ) const; /** @brief Convert the size to bytes. * * This method is only valid for sizes in Bytes, KiB, MiB or GiB. * It will return -1 in any other case. Note that 0KiB and 0MiB and * 0GiB are considered **invalid** sizes and return -1. * * @return the size in bytes, or -1 if it cannot be calculated. */ qint64 toBytes() const; /** @brief Are the units comparable? * * None units cannot be compared with anything. Percentages can * be compared with each other, and all the explicit sizes (KiB, ...) * can be compared with each other. */ static constexpr bool unitsComparable( const SizeUnit u1, const SizeUnit u2 ) { return !( ( u1 == SizeUnit::None || u2 == SizeUnit::None ) || ( u1 == SizeUnit::Percent && u2 != SizeUnit::Percent ) || ( u1 != SizeUnit::Percent && u2 == SizeUnit::Percent ) ); } }; } // namespace Partition } // namespace CalamaresUtils #endif // PARTITION_PARTITIONSIZE_H calamares-3.2.20/src/libcalamares/partition/Sync.cpp000066400000000000000000000032021362604102500223610ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019-2020, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "Sync.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" void CalamaresUtils::Partition::sync() { /* I would normally use full paths here, e.g. /sbin/udevadm and /bin/sync, * but there's enough variation / opinion on where these executables * should live, that full paths would need to be configurable. * Instead, just run them and assume they're found in PATH; * either chroot(8) or env(1) is used to run the command, * and they do suitable lookup. */ auto r = CalamaresUtils::System::runCommand( { "udevadm", "settle" }, std::chrono::seconds( 10 ) ); if ( r.getExitCode() != 0 ) { cWarning() << "Could not settle disks."; r.explainProcess( "udevadm", std::chrono::seconds( 10 ) ); } CalamaresUtils::System::runCommand( { "sync" }, std::chrono::seconds( 10 ) ); } calamares-3.2.20/src/libcalamares/partition/Sync.h000066400000000000000000000026231362604102500220340ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef PARTITION_SYNC_H #define PARTITION_SYNC_H namespace CalamaresUtils { namespace Partition { /** @brief Run "udevadm settle" or other disk-sync mechanism. * * Call this after mounting, unmount, toggling swap, or other functions * that might cause the disk to be "busy" for other disk-modifying * actions (in particular, KPMcore actions with the sfdisk backend * are sensitive, and systemd tends to keep disks busy after a change * for a while). */ void sync(); /** @brief RAII class for calling sync() */ struct Syncer { ~Syncer() { sync(); } }; } // namespace Partition } // namespace CalamaresUtils #endif calamares-3.2.20/src/libcalamares/partition/Tests.cpp000066400000000000000000000115671362604102500225640ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "Tests.h" #include "PartitionSize.h" using SizeUnit = CalamaresUtils::Partition::SizeUnit; using PartitionSize = CalamaresUtils::Partition::PartitionSize; Q_DECLARE_METATYPE( SizeUnit ) #include "utils/Logger.h" #include QTEST_GUILESS_MAIN( PartitionSizeTests ) PartitionSizeTests::PartitionSizeTests() {} PartitionSizeTests::~PartitionSizeTests() {} void PartitionSizeTests::initTestCase() { } void PartitionSizeTests::testUnitComparison_data() { QTest::addColumn< SizeUnit >( "u1" ); QTest::addColumn< SizeUnit >( "u2" ); QTest::addColumn< bool >( "comparable" ); QTest::newRow( "nones" ) << SizeUnit::None << SizeUnit::None << false; QTest::newRow( "none+%" ) << SizeUnit::None << SizeUnit::Percent << false; QTest::newRow( "%+none" ) << SizeUnit::Percent << SizeUnit::None << false; QTest::newRow( "KiB+none" ) << SizeUnit::KiB << SizeUnit::None << false; QTest::newRow( "none+MiB" ) << SizeUnit::None << SizeUnit::MiB << false; QTest::newRow( "KiB+KiB" ) << SizeUnit::KiB << SizeUnit::KiB << true; QTest::newRow( "KiB+MiB" ) << SizeUnit::KiB << SizeUnit::MiB << true; QTest::newRow( "KiB+GiB" ) << SizeUnit::KiB << SizeUnit::GiB << true; QTest::newRow( "MiB+MiB" ) << SizeUnit::MiB << SizeUnit::MiB << true; QTest::newRow( "MiB+GiB" ) << SizeUnit::MiB << SizeUnit::GiB << true; QTest::newRow( "GiB+GiB" ) << SizeUnit::GiB << SizeUnit::GiB << true; QTest::newRow( "%+None" ) << SizeUnit::Percent << SizeUnit::None << false; QTest::newRow( "%+%" ) << SizeUnit::Percent << SizeUnit::Percent << true; QTest::newRow( "%+KiB" ) << SizeUnit::Percent << SizeUnit::KiB << false; } static bool original_compare( SizeUnit m_unit, SizeUnit other_m_unit ) { if ( ( m_unit == SizeUnit::None || other_m_unit == SizeUnit::None ) || ( m_unit == SizeUnit::Percent && other_m_unit != SizeUnit::Percent ) || ( m_unit != SizeUnit::Percent && other_m_unit == SizeUnit::Percent ) ) { return false; } return true; } void PartitionSizeTests::testUnitComparison() { QFETCH( SizeUnit, u1 ); QFETCH( SizeUnit, u2 ); QFETCH( bool, comparable ); if ( comparable ) { QVERIFY( PartitionSize::unitsComparable( u1, u2 ) ); QVERIFY( PartitionSize::unitsComparable( u2, u1 ) ); } else { QVERIFY( !PartitionSize::unitsComparable( u1, u2 ) ); QVERIFY( !PartitionSize::unitsComparable( u2, u1 ) ); } QCOMPARE( original_compare( u1, u2 ), PartitionSize::unitsComparable( u1, u2 ) ); } void PartitionSizeTests::testUnitNormalisation_data() { QTest::addColumn< SizeUnit >( "u1" ); QTest::addColumn< int >( "v" ); QTest::addColumn< long >( "bytes" ); QTest::newRow( "none" ) << SizeUnit::None << 16 << -1L; QTest::newRow( "none" ) << SizeUnit::None << 0 << -1L; QTest::newRow( "none" ) << SizeUnit::None << -2 << -1L; QTest::newRow( "percent" ) << SizeUnit::Percent << 0 << -1L; QTest::newRow( "percent" ) << SizeUnit::Percent << 16 << -1L; QTest::newRow( "percent" ) << SizeUnit::Percent << -2 << -1L; QTest::newRow( "KiB" ) << SizeUnit::KiB << 0 << -1L; QTest::newRow( "KiB" ) << SizeUnit::KiB << 1 << 1024L; QTest::newRow( "KiB" ) << SizeUnit::KiB << 1000 << 1024000L; QTest::newRow( "KiB" ) << SizeUnit::KiB << 1024 << 1024 * 1024L; QTest::newRow( "KiB" ) << SizeUnit::KiB << -2 << -1L; QTest::newRow( "MiB" ) << SizeUnit::MiB << 0 << -1L; QTest::newRow( "MiB" ) << SizeUnit::MiB << 1 << 1024 * 1024L; QTest::newRow( "MiB" ) << SizeUnit::MiB << 1000 << 1024 * 1024000L; QTest::newRow( "MiB" ) << SizeUnit::MiB << 1024 << 1024 * 1024 * 1024L; QTest::newRow( "MiB" ) << SizeUnit::MiB << -2 << -1L; QTest::newRow( "GiB" ) << SizeUnit::GiB << 0 << -1L; QTest::newRow( "GiB" ) << SizeUnit::GiB << 1 << 1024 * 1024 * 1024L; QTest::newRow( "GiB" ) << SizeUnit::GiB << 2 << 2048 * 1024 * 1024L; } void PartitionSizeTests::testUnitNormalisation() { QFETCH( SizeUnit, u1 ); QFETCH( int, v ); QFETCH( long, bytes ); QCOMPARE( PartitionSize( v, u1 ).toBytes(), static_cast< qint64 >( bytes ) ); } calamares-3.2.20/src/libcalamares/partition/Tests.h000066400000000000000000000023011362604102500222130ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef LIBCALAMARES_PARTITION_TESTS_H #define LIBCALAMARES_PARTITION_TESTS_H #include class PartitionSizeTests : public QObject { Q_OBJECT public: PartitionSizeTests(); ~PartitionSizeTests() override; private Q_SLOTS: void initTestCase(); void testUnitComparison_data(); void testUnitComparison(); void testUnitNormalisation_data(); void testUnitNormalisation(); }; #endif calamares-3.2.20/src/libcalamares/utils/000077500000000000000000000000001362604102500200735ustar00rootroot00000000000000calamares-3.2.20/src/libcalamares/utils/BoostPython.h000066400000000000000000000055321362604102500225410ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019-2020, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ /* * The Python and Boost::Python headers are not C++14 warning-proof, especially * with picky compilers like Clang 8 and 9. Since we use Clang for the * find-all-the-warnings case, switch those warnings off for * the we-can't-change-them system headers. * * This convenience header handles including all the bits we need for * Python support, while silencing warnings. */ #ifndef UTILS_BOOSTPYTHON_H #define UTILS_BOOSTPYTHON_H #ifdef __clang__ #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wreserved-id-macro" #pragma clang diagnostic ignored "-Wold-style-cast" #pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" #pragma clang diagnostic ignored "-Wextra-semi-stmt" #pragma clang diagnostic ignored "-Wall" #pragma clang diagnostic ignored "-Wimplicit-float-conversion" #pragma clang diagnostic ignored "-Wundef" #pragma clang diagnostic ignored "-Wdeprecated-dynamic-exception-spec" #pragma clang diagnostic ignored "-Wshadow-field-in-constructor" #pragma clang diagnostic ignored "-Wshadow" #pragma clang diagnostic ignored "-Wmissing-noreturn" #pragma clang diagnostic ignored "-Wcast-qual" #pragma clang diagnostic ignored "-Wcast-align" #pragma clang diagnostic ignored "-Wsign-conversion" #pragma clang diagnostic ignored "-Wdouble-promotion" #pragma clang diagnostic ignored "-Wredundant-parens" #pragma clang diagnostic ignored "-Wweak-vtables" #pragma clang diagnostic ignored "-Wdeprecated" #pragma clang diagnostic ignored "-Wmissing-field-initializers" #pragma clang diagnostic ignored "-Wdisabled-macro-expansion" #pragma clang diagnostic ignored "-Wdocumentation" #pragma clang diagnostic ignored "-Wcomma" #pragma clang diagnostic ignored "-Wunused-parameter" #pragma clang diagnostic ignored "-Wunused-template" // Actually for Python headers #pragma clang diagnostic ignored "-Wreserved-id-macro" #endif #undef slots #include #include #include #include #include #ifdef __clang__ #pragma clang diagnostic pop #endif #endif calamares-3.2.20/src/libcalamares/utils/CalamaresUtilsSystem.cpp000066400000000000000000000312011362604102500247120ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac * Copyright 2017-2018, 2020, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "CalamaresUtilsSystem.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "Settings.h" #include "utils/Logger.h" #include #include #include #include #ifdef Q_OS_LINUX #include #endif #ifdef Q_OS_FREEBSD // clang-format off // these includes need to stay in-order (that's a FreeBSD thing) #include #include // clang-format on #endif /** @brief When logging commands, don't log everything. * * The command-line arguments to some commands may contain the * encrypted password set by the user. Don't log that password, * since the log may get posted to bug reports, or stored in * the target system. */ struct RedactedList { RedactedList( const QStringList& l ) : list( l ) { } const QStringList& list; }; QDebug& operator<<( QDebug& s, const RedactedList& l ) { // Special case logging: don't log the (encrypted) password. if ( l.list.contains( "usermod" ) ) { for ( const auto& item : l.list ) if ( item.startsWith( "$6$" ) ) { s << ""; } else { s << item; } } else { s << l.list; } return s; } namespace CalamaresUtils { System* System::s_instance = nullptr; System::System( bool doChroot, QObject* parent ) : QObject( parent ) , m_doChroot( doChroot ) { Q_ASSERT( !s_instance ); s_instance = this; if ( !doChroot && Calamares::JobQueue::instance() && Calamares::JobQueue::instance()->globalStorage() ) { Calamares::JobQueue::instance()->globalStorage()->insert( "rootMountPoint", "/" ); } } System::~System() {} System* System::instance() { if ( !s_instance ) { cError() << "No Calamares system-object has been created."; cError() << Logger::SubEntry << "using a bogus instance instead."; return new System( true, nullptr ); } return s_instance; } ProcessResult System::runCommand( System::RunLocation location, const QStringList& args, const QString& workingPath, const QString& stdInput, std::chrono::seconds timeoutSec ) { QString output; Calamares::GlobalStorage* gs = Calamares::JobQueue::instance() ? Calamares::JobQueue::instance()->globalStorage() : nullptr; if ( ( location == System::RunLocation::RunInTarget ) && ( !gs || !gs->contains( "rootMountPoint" ) ) ) { cWarning() << "No rootMountPoint in global storage"; return ProcessResult::Code::NoWorkingDirectory; } QProcess process; QString program; QStringList arguments; if ( location == System::RunLocation::RunInTarget ) { QString destDir = gs->value( "rootMountPoint" ).toString(); if ( !QDir( destDir ).exists() ) { cWarning() << "rootMountPoint points to a dir which does not exist"; return ProcessResult::Code::NoWorkingDirectory; } program = "chroot"; arguments = QStringList( { destDir } ); arguments << args; } else { program = "env"; arguments << args; } process.setProgram( program ); process.setArguments( arguments ); process.setProcessChannelMode( QProcess::MergedChannels ); if ( !workingPath.isEmpty() ) { if ( QDir( workingPath ).exists() ) { process.setWorkingDirectory( QDir( workingPath ).absolutePath() ); } else { cWarning() << "Invalid working directory:" << workingPath; return ProcessResult::Code::NoWorkingDirectory; } } cDebug() << "Running" << program << RedactedList( arguments ); process.start(); if ( !process.waitForStarted() ) { cWarning() << "Process failed to start" << process.error(); return ProcessResult::Code::FailedToStart; } if ( !stdInput.isEmpty() ) { process.write( stdInput.toLocal8Bit() ); } process.closeWriteChannel(); if ( !process.waitForFinished( timeoutSec > std::chrono::seconds::zero() ? ( static_cast< int >( std::chrono::milliseconds( timeoutSec ).count() ) ) : -1 ) ) { cWarning().noquote().nospace() << "Timed out. Output so far:\n" << process.readAllStandardOutput(); return ProcessResult::Code::TimedOut; } output.append( QString::fromLocal8Bit( process.readAllStandardOutput() ).trimmed() ); if ( process.exitStatus() == QProcess::CrashExit ) { cWarning().noquote().nospace() << "Process crashed. Output so far:\n" << output; return ProcessResult::Code::Crashed; } auto r = process.exitCode(); cDebug() << "Finished. Exit code:" << r; bool showDebug = ( !Calamares::Settings::instance() ) || ( Calamares::Settings::instance()->debugMode() ); if ( ( r != 0 ) || showDebug ) { cDebug() << "Target cmd:" << RedactedList( args ); cDebug().noquote().nospace() << "Target output:\n" << output; } return ProcessResult( r, output ); } /// @brief Cheap check if a path is absolute. static inline bool isAbsolutePath( const QString& path ) { return path.startsWith( '/' ); } QString System::targetPath( const QString& path ) const { if ( doChroot() ) { Calamares::GlobalStorage* gs = Calamares::JobQueue::instance() ? Calamares::JobQueue::instance()->globalStorage() : nullptr; if ( !gs || !gs->contains( "rootMountPoint" ) ) { cWarning() << "No rootMountPoint in global storage, cannot name target file" << path; return QString(); } QString root = gs->value( "rootMountPoint" ).toString(); return isAbsolutePath( path ) ? ( root + path ) : ( root + '/' + path ); } else { return isAbsolutePath( path ) ? path : ( QStringLiteral( "/" ) + path ); } } CreationResult System::createTargetFile( const QString& path, const QByteArray& contents, WriteMode mode ) const { QString completePath = targetPath( path ); if ( completePath.isEmpty() ) { return CreationResult( CreationResult::Code::Invalid ); } QFile f( completePath ); if ( ( mode == WriteMode::KeepExisting ) && f.exists() ) { return CreationResult( CreationResult::Code::AlreadyExists ); } QIODevice::OpenMode m = #if QT_VERSION >= QT_VERSION_CHECK( 5, 11, 0 ) // New flag from Qt 5.11, implies WriteOnly ( mode == WriteMode::KeepExisting ? QIODevice::NewOnly : QIODevice::WriteOnly ) | #endif QIODevice::WriteOnly | QIODevice::Truncate; if ( !f.open( m ) ) { return CreationResult( CreationResult::Code::Failed ); } if ( f.write( contents ) != contents.size() ) { f.close(); f.remove(); return CreationResult( CreationResult::Code::Failed ); } f.close(); return CreationResult( QFileInfo( f ).canonicalFilePath() ); } void System::removeTargetFile( const QString& path ) const { if ( !isAbsolutePath( path ) ) { cWarning() << "Will not remove non-absolute path" << path; return; } QString target = targetPath( path ); if ( !target.isEmpty() ) { QFile::remove( target ); } // If it was empty, a warning was already printed } bool System::createTargetDirs( const QString& path ) const { if ( !isAbsolutePath( path ) ) { cWarning() << "Will not create basedirs for non-absolute path" << path; return false; } QString target = targetPath( path ); if ( target.isEmpty() ) { // If it was empty, a warning was already printed return false; } QString root = Calamares::JobQueue::instance()->globalStorage()->value( "rootMountPoint" ).toString(); if ( root.isEmpty() ) { return false; } QDir d( root ); if ( !d.exists() ) { cWarning() << "Root mountpoint" << root << "does not exist."; return false; } return d.mkpath( target ); // This re-does everything starting from the **host** / } bool System::createTargetParentDirs( const QString& filePath ) const { return createTargetDirs( QFileInfo( filePath ).dir().path() ); } QPair< quint64, float > System::getTotalMemoryB() const { #ifdef Q_OS_LINUX struct sysinfo i; int r = sysinfo( &i ); if ( r ) { return qMakePair( 0, 0.0 ); } return qMakePair( quint64( i.mem_unit ) * quint64( i.totalram ), 1.1 ); #elif defined( Q_OS_FREEBSD ) unsigned long memsize; size_t s = sizeof( memsize ); int r = sysctlbyname( "vm.kmem_size", &memsize, &s, NULL, 0 ); if ( r ) { return qMakePair( 0, 0.0 ); } return qMakePair( memsize, 1.01 ); #else return qMakePair( 0, 0.0 ); // Unsupported #endif } QString System::getCpuDescription() const { QString model; #ifdef Q_OS_LINUX QFile file( "/proc/cpuinfo" ); if ( file.open( QIODevice::ReadOnly | QIODevice::Text ) ) while ( !file.atEnd() ) { QByteArray line = file.readLine(); if ( line.startsWith( "model name" ) && ( line.indexOf( ':' ) > 0 ) ) { model = QString::fromLatin1( line.right( line.length() - line.indexOf( ':' ) ) ); break; } } #elif defined( Q_OS_FREEBSD ) // This would use sysctl "hw.model", which has a string value #endif return model.simplified(); } quint64 System::getTotalDiskB() const { return 0; } bool System::doChroot() const { return m_doChroot; } Calamares::JobResult ProcessResult::explainProcess( int ec, const QString& command, const QString& output, std::chrono::seconds timeout ) { using Calamares::JobResult; if ( ec == 0 ) { return JobResult::ok(); } QString outputMessage = output.isEmpty() ? QCoreApplication::translate( "ProcessResult", "\nThere was no output from the command." ) : ( QCoreApplication::translate( "ProcessResult", "\nOutput:\n" ) + output ); if ( ec == static_cast< int >( ProcessResult::Code::Crashed ) ) //Crash! return JobResult::error( QCoreApplication::translate( "ProcessResult", "External command crashed." ), QCoreApplication::translate( "ProcessResult", "Command %1 crashed." ).arg( command ) + outputMessage ); if ( ec == static_cast< int >( ProcessResult::Code::FailedToStart ) ) return JobResult::error( QCoreApplication::translate( "ProcessResult", "External command failed to start." ), QCoreApplication::translate( "ProcessResult", "Command %1 failed to start." ).arg( command ) ); if ( ec == static_cast< int >( ProcessResult::Code::NoWorkingDirectory ) ) return JobResult::error( QCoreApplication::translate( "ProcessResult", "Internal error when starting command." ), QCoreApplication::translate( "ProcessResult", "Bad parameters for process job call." ) ); if ( ec == static_cast< int >( ProcessResult::Code::TimedOut ) ) return JobResult::error( QCoreApplication::translate( "ProcessResult", "External command failed to finish." ), QCoreApplication::translate( "ProcessResult", "Command %1 failed to finish in %2 seconds." ) .arg( command ) .arg( timeout.count() ) + outputMessage ); //Any other exit code return JobResult::error( QCoreApplication::translate( "ProcessResult", "External command finished with errors." ), QCoreApplication::translate( "ProcessResult", "Command %1 finished with exit code %2." ) .arg( command ) .arg( ec ) + outputMessage ); } } // namespace CalamaresUtils calamares-3.2.20/src/libcalamares/utils/CalamaresUtilsSystem.h000066400000000000000000000325671362604102500243770ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac * Copyright 2017-2018, 2020, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef UTILS_CALAMARESUTILSSYSTEM_H #define UTILS_CALAMARESUTILSSYSTEM_H #include "DllMacro.h" #include "Job.h" #include #include #include #include namespace CalamaresUtils { class ProcessResult : public QPair< int, QString > { public: enum class Code : int { Crashed = -1, // Must match special return values from QProcess FailedToStart = -2, // Must match special return values from QProcess NoWorkingDirectory = -3, TimedOut = -4 }; /** @brief Implicit one-argument constructor has no output, only a return code */ ProcessResult( Code r ) : QPair< int, QString >( static_cast< int >( r ), QString() ) { } ProcessResult( int r, QString s ) : QPair< int, QString >( r, s ) { } int getExitCode() const { return first; } QString getOutput() const { return second; } /** @brief Explain a typical external process failure. * * @param errorCode Return code from runCommand() or similar * (negative values get special explanation). The member * function uses the exit code stored in the ProcessResult * @param output (error) output from the command, used when there is * an error to report (exit code > 0). The member * function uses the output stored in the ProcessResult. * @param command String or split-up string of the command * that was invoked. * @param timeout Timeout passed to the process runner, for explaining * error code -4 (timeout). */ static Calamares::JobResult explainProcess( int errorCode, const QString& command, const QString& output, std::chrono::seconds timeout ); /// @brief Convenience wrapper for explainProcess() inline Calamares::JobResult explainProcess( const QString& command, std::chrono::seconds timeout ) const { return explainProcess( getExitCode(), command, getOutput(), timeout ); } /// @brief Convenience wrapper for explainProcess() inline Calamares::JobResult explainProcess( const QStringList& command, std::chrono::seconds timeout ) const { return explainProcess( getExitCode(), command.join( ' ' ), getOutput(), timeout ); } }; /** @brief The result of a create*() action, for status * * A CreationResult has a status field, can be converted to bool * (true only on success) and can report the full pathname of * the thing created if it was successful. */ class CreationResult : public QPair< int, QString > { public: enum class Code : int { // These are "not failed", but only OK is a success OK = 0, AlreadyExists = 1, // These are "failed" Invalid = -1, Failed = -2 }; CreationResult( Code r ) : QPair< int, QString >( static_cast< int >( r ), QString() ) { } explicit CreationResult( const QString& path ) : QPair< int, QString >( 0, path ) { } Code code() const { return static_cast< Code >( first ); } QString path() const { return second; } bool failed() const { return first < 0; } operator bool() const { return first == 0; } }; /** * @brief The System class is a singleton with utility functions that perform * system-specific operations. */ class DLLEXPORT System : public QObject { Q_OBJECT public: /** * @brief System the constructor. Only call this once in a Calamares instance. * @param doChroot set to true if all external commands should run in the * target system chroot, otherwise false to run everything on the current system. * @param parent the QObject parent. */ explicit System( bool doChroot, QObject* parent = nullptr ); virtual ~System(); static System* instance(); /** (Typed) Boolean describing where a particular command should be run, * whether in the host (live) system or in the (chroot) target system. */ enum class RunLocation { RunInHost, RunInTarget }; /** * Runs the specified command in the chroot of the target system. * @param args the command with arguments, as a string list. * @param workingPath the current working directory for the QProcess * call (optional). * @param stdInput the input string to send to the running process as * standard input (optional). * @param timeoutSec the timeout after which the process will be * killed (optional, default is 0 i.e. no timeout). * * @returns the program's exit code and its output (if any). Special * exit codes (which will never have any output) are: * Crashed = QProcess crash * FailedToStart = QProcess cannot start * NoWorkingDirectory = bad arguments * TimedOut = QProcess timeout */ static DLLEXPORT ProcessResult runCommand( RunLocation location, const QStringList& args, const QString& workingPath = QString(), const QString& stdInput = QString(), std::chrono::seconds timeoutSec = std::chrono::seconds( 0 ) ); /** @brief Convenience wrapper for runCommand() * * Runs the given command-line @p args in the host in the current direcory * with no input, and the given @p timeoutSec for completion. */ static inline ProcessResult runCommand( const QStringList& args, std::chrono::seconds timeoutSec ) { return runCommand( RunLocation::RunInHost, args, QString(), QString(), timeoutSec ); } /** @brief Convenience wrapper for runCommand(). * Runs the command in the location specified through the boolean * doChroot(), which is what you usually want for running commands * during installation. */ inline ProcessResult targetEnvCommand( const QStringList& args, const QString& workingPath = QString(), const QString& stdInput = QString(), std::chrono::seconds timeoutSec = std::chrono::seconds( 0 ) ) { return runCommand( m_doChroot ? RunLocation::RunInTarget : RunLocation::RunInHost, args, workingPath, stdInput, timeoutSec ); } /** @brief Convenience wrapper for targetEnvCommand() which returns only the exit code */ inline int targetEnvCall( const QStringList& args, const QString& workingPath = QString(), const QString& stdInput = QString(), std::chrono::seconds timeoutSec = std::chrono::seconds( 0 ) ) { return targetEnvCommand( args, workingPath, stdInput, timeoutSec ).first; } /** @brief Convenience wrapper for targetEnvCommand() which returns only the exit code */ inline int targetEnvCall( const QString& command, const QString& workingPath = QString(), const QString& stdInput = QString(), std::chrono::seconds timeoutSec = std::chrono::seconds( 0 ) ) { return targetEnvCall( QStringList { command }, workingPath, stdInput, timeoutSec ); } /** @brief Convenience wrapper for targetEnvCommand() which returns only the exit code * * Places the called program's output in the @p output string. */ int targetEnvOutput( const QStringList& args, QString& output, const QString& workingPath = QString(), const QString& stdInput = QString(), std::chrono::seconds timeoutSec = std::chrono::seconds( 0 ) ) { auto r = targetEnvCommand( args, workingPath, stdInput, timeoutSec ); output = r.second; return r.first; } /** @brief Convenience wrapper for targetEnvCommand() which returns only the exit code * * Places the called program's output in the @p output string. */ inline int targetEnvOutput( const QString& command, QString& output, const QString& workingPath = QString(), const QString& stdInput = QString(), std::chrono::seconds timeoutSec = std::chrono::seconds( 0 ) ) { return targetEnvOutput( QStringList { command }, output, workingPath, stdInput, timeoutSec ); } /** @brief Gets a path to a file in the target system, from the host. * * @param path Path to the file; this is interpreted * from the root of the target system (whatever that may be, * but / in the chroot, or / in OEM modes). * * @return The complete path to the target file, from * the root of the host system, or empty on failure. * * For instance, during installation where the target root is * mounted on /tmp/calamares-something, asking for targetPath("/etc/passwd") * will give you /tmp/calamares-something/etc/passwd. * * No attempt is made to canonicalize anything, since paths might not exist. */ DLLEXPORT QString targetPath( const QString& path ) const; enum class WriteMode { KeepExisting, Overwrite }; /** @brief Create a (small-ish) file in the target system. * * @param path Path to the file; this is interpreted * from the root of the target system (whatever that may be, * but / in the chroot, or / in OEM modes). * @param contents Actual content of the file. * * If the target already exists: * - returns AlreadyExists as a result (and does not overwrite), * - **unless** @p mode is set to Overwrite, then it tries writing as * usual and will not return AlreadyExists. * * @return The complete canonical path to the target file from the * root of the host system, or empty on failure. (Here, it is * possible to be canonical because the file exists). */ DLLEXPORT CreationResult createTargetFile( const QString& path, const QByteArray& contents, WriteMode mode = WriteMode::KeepExisting ) const; /** @brief Remove a file from the target system. * * @param path Path to the file; this is interpreted from the root * of the target system (@see targetPath()). * * Does no error checking to see if the target file was really removed. */ DLLEXPORT void removeTargetFile( const QString& path ) const; /** @brief Ensure that the directory @p path exists * * @param path a full pathname to a desired directory. * * All the directory components including the last path component are * created, as needed. Returns true on success. * * @see QDir::mkpath */ DLLEXPORT bool createTargetDirs( const QString& path ) const; /** @brief Convenience to create parent directories of a file path. * * Creates all the parent directories until the last * component of @p filePath . @see createTargetDirs() */ DLLEXPORT bool createTargetParentDirs( const QString& filePath ) const; /** * @brief getTotalMemoryB returns the total main memory, in bytes. * * Since it is difficult to get the RAM memory size exactly -- either * by reading information from the DIMMs, which may fail on virtual hosts * or from asking the kernel, which doesn't report some memory areas -- * this returns a pair of guessed-size (in bytes) and a "guesstimate factor" * which says how good the guess is. Generally, assume the *real* memory * available is size * guesstimate. * * If nothing can be found, returns a 0 size and 0 guesstimate. * * @return size, guesstimate-factor */ DLLEXPORT QPair< quint64, float > getTotalMemoryB() const; /** * @brief getCpuDescription returns a string describing the CPU. * * Returns the value of the "model name" line in /proc/cpuinfo. */ DLLEXPORT QString getCpuDescription() const; /** * @brief getTotalDiskB returns the total disk attached, in bytes. * * If nothing can be found, returns a 0. */ DLLEXPORT quint64 getTotalDiskB() const; DLLEXPORT bool doChroot() const; private: static System* s_instance; bool m_doChroot; }; } // namespace CalamaresUtils #endif calamares-3.2.20/src/libcalamares/utils/CommandList.cpp000066400000000000000000000145551362604102500230230ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "CommandList.h" #include "GlobalStorage.h" #include "JobQueue.h" // #include "utils/CalamaresUtils.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include "utils/Variant.h" #include #include namespace CalamaresUtils { static CommandLine get_variant_object( const QVariantMap& m ) { QString command = CalamaresUtils::getString( m, "command" ); qint64 timeout = CalamaresUtils::getInteger( m, "timeout", -1 ); if ( !command.isEmpty() ) { return CommandLine( command, timeout >= 0 ? std::chrono::seconds( timeout ) : CommandLine::TimeoutNotSet() ); } cWarning() << "Bad CommandLine element" << m; return CommandLine(); } static CommandList_t get_variant_stringlist( const QVariantList& l ) { CommandList_t retl; unsigned int count = 0; for ( const auto& v : l ) { if ( v.type() == QVariant::String ) { retl.append( CommandLine( v.toString(), CommandLine::TimeoutNotSet() ) ); } else if ( v.type() == QVariant::Map ) { auto command( get_variant_object( v.toMap() ) ); if ( command.isValid() ) { retl.append( command ); } // Otherwise warning is already given } else { cWarning() << "Bad CommandList element" << count << v.type() << v; } ++count; } return retl; } CommandList::CommandList( bool doChroot, std::chrono::seconds timeout ) : m_doChroot( doChroot ) , m_timeout( timeout ) { } CommandList::CommandList::CommandList( const QVariant& v, bool doChroot, std::chrono::seconds timeout ) : CommandList( doChroot, timeout ) { if ( v.type() == QVariant::List ) { const auto v_list = v.toList(); if ( v_list.count() ) { append( get_variant_stringlist( v_list ) ); } else { cWarning() << "Empty CommandList"; } } else if ( v.type() == QVariant::String ) { append( v.toString() ); } else if ( v.type() == QVariant::Map ) { auto c( get_variant_object( v.toMap() ) ); if ( c.isValid() ) { append( c ); } // Otherwise warning is already given } else { cWarning() << "CommandList does not understand variant" << v.type(); } } CommandList::~CommandList() {} static inline bool findInCommands( const CommandList& l, const QString& needle ) { for ( CommandList::const_iterator i = l.cbegin(); i != l.cend(); ++i ) if ( i->command().contains( needle ) ) { return true; } return false; } Calamares::JobResult CommandList::run() { QLatin1String rootMagic( "@@ROOT@@" ); QLatin1String userMagic( "@@USER@@" ); System::RunLocation location = m_doChroot ? System::RunLocation::RunInTarget : System::RunLocation::RunInHost; /* Figure out the replacement for @@ROOT@@ */ QString root = QStringLiteral( "/" ); Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); bool needsRootSubstitution = findInCommands( *this, rootMagic ); if ( needsRootSubstitution && ( location == System::RunLocation::RunInHost ) ) { if ( !gs || !gs->contains( "rootMountPoint" ) ) { cError() << "No rootMountPoint defined."; return Calamares::JobResult::error( QCoreApplication::translate( "CommandList", "Could not run command." ), QCoreApplication::translate( "CommandList", "The command runs in the host environment and needs to know the root " "path, but no rootMountPoint is defined." ) ); } root = gs->value( "rootMountPoint" ).toString(); } bool needsUserSubstitution = findInCommands( *this, userMagic ); if ( needsUserSubstitution && ( !gs || !gs->contains( "username" ) ) ) { cError() << "No username defined."; return Calamares::JobResult::error( QCoreApplication::translate( "CommandList", "Could not run command." ), QCoreApplication::translate( "CommandList", "The command needs to know the user's name, but no username is defined." ) ); } QString user = gs->value( "username" ).toString(); // may be blank if unset for ( CommandList::const_iterator i = cbegin(); i != cend(); ++i ) { QString processed_cmd = i->command(); processed_cmd.replace( rootMagic, root ).replace( userMagic, user ); bool suppress_result = false; if ( processed_cmd.startsWith( '-' ) ) { suppress_result = true; processed_cmd.remove( 0, 1 ); // Drop the - } QStringList shell_cmd { "/bin/sh", "-c" }; shell_cmd << processed_cmd; std::chrono::seconds timeout = i->timeout() >= std::chrono::seconds::zero() ? i->timeout() : m_timeout; ProcessResult r = System::runCommand( location, shell_cmd, QString(), QString(), timeout ); if ( r.getExitCode() != 0 ) { if ( suppress_result ) { cDebug() << "Error code" << r.getExitCode() << "ignored by CommandList configuration."; } else { return r.explainProcess( processed_cmd, timeout ); } } } return Calamares::JobResult::ok(); } void CommandList::append( const QString& s ) { append( CommandLine( s, m_timeout ) ); } } // namespace CalamaresUtils calamares-3.2.20/src/libcalamares/utils/CommandList.h000066400000000000000000000055751362604102500224720ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef UTILS_COMMANDLIST_H #define UTILS_COMMANDLIST_H #include "Job.h" #include #include #include namespace CalamaresUtils { /** * Each command can have an associated timeout in seconds. The timeout * defaults to 10 seconds. Provide some convenience naming and construction. */ struct CommandLine : public QPair< QString, std::chrono::seconds > { static inline constexpr std::chrono::seconds TimeoutNotSet() { return std::chrono::seconds( -1 ); } /// An invalid command line CommandLine() : QPair( QString(), TimeoutNotSet() ) { } CommandLine( const QString& s ) : QPair( s, TimeoutNotSet() ) { } CommandLine( const QString& s, std::chrono::seconds t ) : QPair( s, t ) { } QString command() const { return first; } std::chrono::seconds timeout() const { return second; } bool isValid() const { return !first.isEmpty(); } }; /** @brief Abbreviation, used internally. */ using CommandList_t = QList< CommandLine >; /** * A list of commands; the list may have its own default timeout * for commands (which is then applied to each individual command * that doesn't have one of its own). * * Documentation for the format of commands can be found in * `shellprocess.conf`. */ class CommandList : protected CommandList_t { public: /** @brief empty command-list with timeout to apply to entries. */ CommandList( bool doChroot = true, std::chrono::seconds timeout = std::chrono::seconds( 10 ) ); CommandList( const QVariant& v, bool doChroot = true, std::chrono::seconds timeout = std::chrono::seconds( 10 ) ); ~CommandList(); bool doChroot() const { return m_doChroot; } Calamares::JobResult run(); using CommandList_t::at; using CommandList_t::cbegin; using CommandList_t::cend; using CommandList_t::const_iterator; using CommandList_t::count; using CommandList_t::isEmpty; protected: using CommandList_t::append; void append( const QString& ); private: bool m_doChroot; std::chrono::seconds m_timeout; }; } // namespace CalamaresUtils #endif calamares-3.2.20/src/libcalamares/utils/Dirs.cpp000066400000000000000000000111301362604102500214740ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2013-2016, Teo Mrnjavac * Copyright 2018, Adriaan de Groot * * Originally from Tomahawk, portions: * Copyright 2010-2011, Christian Muehlhaeuser * Copyright 2010-2011, Leo Franchi * Copyright 2010-2012, Jeff Mitchell * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "Dirs.h" #include "CalamaresConfig.h" #include "Logger.h" #include #include #include #include #include #include #include using std::cerr; namespace CalamaresUtils { static QDir s_appDataDir( CMAKE_INSTALL_FULL_DATADIR ); static QDir s_qmlModulesDir( QString( CMAKE_INSTALL_FULL_DATADIR ) + "/qml" ); static bool s_isAppDataDirOverridden = false; static bool s_haveExtraDirs = false; static QStringList s_extraConfigDirs; static QStringList s_extraDataDirs; static bool isWritableDir( const QDir& dir ) { // We log with cerr here because we might be looking for the log dir QString path = dir.absolutePath(); if ( !dir.exists() ) { if ( !dir.mkpath( "." ) ) { cerr << "warning: failed to create " << qPrintable( path ) << '\n'; return false; } return true; } QFileInfo info( path ); if ( !info.isDir() ) { cerr << "warning: " << qPrintable( path ) << " is not a dir\n"; return false; } if ( !info.isWritable() ) { cerr << "warning: " << qPrintable( path ) << " is not writable\n"; return false; } return true; } QDir qmlModulesDir() { return s_qmlModulesDir; } void setAppDataDir( const QDir& dir ) { s_appDataDir = dir; s_isAppDataDirOverridden = true; } /* Split $ENV{@p name} on :, append to @p l, making sure each ends in / */ static void mungeEnvironment( QStringList& l, const char* name, const char* defaultDirs ) { static const QString calamaresSubdir = QStringLiteral( "calamares/" ); QStringList dirs = QString( qgetenv( name ) ).split( ':' ); if ( dirs.isEmpty() ) { dirs = QString( defaultDirs ).split( ':' ); } for ( auto s : dirs ) { if ( s.isEmpty() ) { continue; } if ( s.endsWith( '/' ) ) { l << ( s + calamaresSubdir ) << s; } else { l << ( s + '/' + calamaresSubdir ) << ( s + '/' ); } } } void setXdgDirs() { mungeEnvironment( s_extraConfigDirs, "XDG_CONFIG_DIRS", "/etc/xdg" ); mungeEnvironment( s_extraDataDirs, "XDG_DATA_DIRS", "/usr/local/share/:/usr/share/" ); s_haveExtraDirs = !( s_extraConfigDirs.isEmpty() && s_extraDataDirs.isEmpty() ); } QStringList extraConfigDirs() { if ( s_haveExtraDirs ) { return s_extraConfigDirs; } return QStringList(); } QStringList extraDataDirs() { if ( s_haveExtraDirs ) { return s_extraDataDirs; } return QStringList(); } bool haveExtraDirs() { return s_haveExtraDirs && ( !s_extraConfigDirs.isEmpty() || !s_extraDataDirs.isEmpty() ); } bool isAppDataDirOverridden() { return s_isAppDataDirOverridden; } QDir appDataDir() { return s_appDataDir; } QDir systemLibDir() { QDir path( CMAKE_INSTALL_FULL_LIBDIR ); return path; } QDir appLogDir() { QString path = QStandardPaths::writableLocation( QStandardPaths::CacheLocation ); QDir dir( path ); if ( isWritableDir( dir ) ) { return dir; } cerr << "warning: Could not find a standard writable location for log dir, falling back to $HOME\n"; dir = QDir::home(); if ( isWritableDir( dir ) ) { return dir; } cerr << "warning: Found no writable location for log dir, falling back to the temp dir\n"; return QDir::temp(); } void setQmlModulesDir( const QDir& dir ) { s_qmlModulesDir = dir; } } // namespace CalamaresUtils calamares-3.2.20/src/libcalamares/utils/Dirs.h000066400000000000000000000045371362604102500211560ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2013-2016, Teo Mrnjavac * Copyright 2018, Adriaan de Groot * * Originally from Tomahawk, portions: * Copyright 2010-2011, Christian Muehlhaeuser * Copyright 2010-2011, Leo Franchi * Copyright 2010-2012, Jeff Mitchell * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef UTILS_DIRS_H #define UTILS_DIRS_H #include "DllMacro.h" #include namespace CalamaresUtils { DLLEXPORT QDir qmlModulesDir(); /** * @brief appDataDir returns the directory with common application data. * Defaults to CMAKE_INSTALL_FULL_DATADIR (usually /usr/share/calamares). */ DLLEXPORT QDir appDataDir(); /** * @brief appLogDir returns the directory for Calamares logs. * Defaults to QStandardPaths::CacheLocation (usually ~/.cache/Calamares). */ DLLEXPORT QDir appLogDir(); /** * @brief systemLibDir returns the system's lib directory. * Defaults to CMAKE_INSTALL_FULL_LIBDIR (usually /usr/lib64 or /usr/lib). */ DLLEXPORT QDir systemLibDir(); /** * Override app data dir. Only for testing purposes. */ DLLEXPORT void setAppDataDir( const QDir& dir ); DLLEXPORT bool isAppDataDirOverridden(); DLLEXPORT void setQmlModulesDir( const QDir& dir ); /** @brief Setup extra config and data dirs from the XDG variables. */ DLLEXPORT void setXdgDirs(); /** @brief Are any extra directories configured? */ DLLEXPORT bool haveExtraDirs(); /** @brief XDG_CONFIG_DIRS, each guaranteed to end with / */ DLLEXPORT QStringList extraConfigDirs(); /** @brief XDG_DATA_DIRS, each guaranteed to end with / */ DLLEXPORT QStringList extraDataDirs(); } // namespace CalamaresUtils #endif calamares-3.2.20/src/libcalamares/utils/Entropy.cpp000066400000000000000000000070101362604102500222350ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019-2020, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "Entropy.h" #include #include CalamaresUtils::EntropySource CalamaresUtils::getEntropy( int size, QByteArray& b ) { b.clear(); if ( size < 1 ) { return EntropySource::None; } b.resize( size ); char* buffer = b.data(); std::fill( buffer, buffer + size, 0xcb ); qint64 readSize = 0; QFile urandom( "/dev/urandom" ); if ( urandom.exists() && urandom.open( QIODevice::ReadOnly ) ) { readSize = urandom.read( buffer, size ); urandom.close(); } if ( readSize >= size ) { return EntropySource::URandom; } // If it wasn't available, or did not return enough bytes, // complete it with twister (and tell the client). std::random_device r; std::seed_seq seed { r(), r(), r(), r(), r(), r(), r(), r() }; std::mt19937_64 twister( seed ); std::uint64_t next = 0; do { next = twister(); // Eight times, for a 64-bit next #define GET_ONE_BYTE \ if ( readSize < size ) \ { \ buffer[ readSize++ ] = char( next & 0xffU ); \ next = next >> 8; \ } GET_ONE_BYTE GET_ONE_BYTE GET_ONE_BYTE GET_ONE_BYTE GET_ONE_BYTE GET_ONE_BYTE GET_ONE_BYTE GET_ONE_BYTE } while ( readSize < size ); return EntropySource::Twister; } CalamaresUtils::EntropySource CalamaresUtils::getPrintableEntropy( int size, QString& s ) { s.clear(); if ( size < 1 ) { return EntropySource::None; } static const char salt_chars[] = { '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' }; static_assert( sizeof( salt_chars ) == 64, "Missing salt_chars" ); // Number of bytes we're going to need int byteSize = ( ( size * 6 ) / 8 ) + 1; QByteArray b; EntropySource r = getEntropy( byteSize, b ); int bitsLeft = 0; int byteOffset = 0; qint64 next = 0; do { if ( bitsLeft < 6 ) { next = ( next << 8 ) | b.at( byteOffset++ ); bitsLeft += 8; } char c = salt_chars[ next & 0b0111111 ]; next >>= 6; bitsLeft -= 6; s.append( c ); } while ( ( s.length() < size ) && ( byteOffset < b.size() ) ); if ( s.length() < size ) { // It's incomplete, not really no-entropy return EntropySource::None; } return r; } calamares-3.2.20/src/libcalamares/utils/Entropy.h000066400000000000000000000034331362604102500217070ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019-2020, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef UTILS_ENTROPY_H #define UTILS_ENTROPY_H #include "DllMacro.h" #include namespace CalamaresUtils { /// @brief Which entropy source was actually used for the entropy. enum class EntropySource { None, ///< Buffer is empty, no random data URandom, ///< Read from /dev/urandom Twister ///< Generated by pseudo-random }; /** @brief Fill buffer @p b with exactly @p size random bytes * * The array is cleared and resized, then filled with 0xcb * "just in case", after which it is filled with random * bytes from a suitable source. Returns which source was used. */ DLLEXPORT EntropySource getEntropy( int size, QByteArray& b ); /** @brief Fill string @p s with exactly @p size random printable ASCII characters * * The characters are picked from a set of 64 (2^6). The string * contains 6 * size bits of entropy. * Returns which source was used. * @see getEntropy */ DLLEXPORT EntropySource getPrintableEntropy( int size, QString& s ); } // namespace CalamaresUtils #endif calamares-3.2.20/src/libcalamares/utils/Logger.cpp000066400000000000000000000116731362604102500220260ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2010-2011, Christian Muehlhaeuser * Copyright 2014, Teo Mrnjavac * Copyright 2017-2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "Logger.h" #include #include #include #include #include #include #include #include #include "CalamaresVersion.h" #include "utils/Dirs.h" #define LOGFILE_SIZE 1024 * 256 static std::ofstream logfile; static unsigned int s_threshold = #ifdef QT_NO_DEBUG Logger::LOG_DISABLE; #else Logger::LOGEXTRA + 1; // Comparison is < in log() function #endif static QMutex s_mutex; namespace Logger { void setupLogLevel( unsigned int level ) { if ( level > LOGVERBOSE ) { level = LOGVERBOSE; } s_threshold = level + 1; // Comparison is < in log() function } bool logLevelEnabled( unsigned int level ) { return level < s_threshold; } unsigned int logLevel() { return s_threshold > 0 ? s_threshold - 1 : 0; } static void log( const char* msg, unsigned int debugLevel ) { if ( true ) { QMutexLocker lock( &s_mutex ); // If we don't format the date as a Qt::ISODate then we get a crash when // logging at exit as Qt tries to use QLocale to format, but QLocale is // on its way out. logfile << QDate::currentDate().toString( Qt::ISODate ).toUtf8().data() << " - " << QTime::currentTime().toString().toUtf8().data() << " [" << QString::number( debugLevel ).toUtf8().data() << "]: " << msg << std::endl; logfile.flush(); } if ( debugLevel <= LOGEXTRA || debugLevel < s_threshold ) { QMutexLocker lock( &s_mutex ); std::cout << QTime::currentTime().toString().toUtf8().data() << " [" << QString::number( debugLevel ).toUtf8().data() << "]: " << msg << std::endl; std::cout.flush(); } } static void CalamaresLogHandler( QtMsgType type, const QMessageLogContext&, const QString& msg ) { static QMutex s_mutex; QByteArray ba = msg.toUtf8(); const char* message = ba.constData(); QMutexLocker locker( &s_mutex ); switch ( type ) { case QtDebugMsg: log( message, LOGVERBOSE ); break; case QtInfoMsg: log( message, 1 ); break; case QtCriticalMsg: case QtWarningMsg: case QtFatalMsg: log( message, 0 ); break; } } QString logFile() { return CalamaresUtils::appLogDir().filePath( "session.log" ); } void setupLogfile() { if ( QFileInfo( logFile().toLocal8Bit() ).size() > LOGFILE_SIZE ) { QByteArray lc; { QFile f( logFile().toLocal8Bit() ); f.open( QIODevice::ReadOnly | QIODevice::Text ); lc = f.readAll(); f.close(); } QFile::remove( logFile().toLocal8Bit() ); { QFile f( logFile().toLocal8Bit() ); f.open( QIODevice::WriteOnly | QIODevice::Text ); f.write( lc.right( LOGFILE_SIZE - ( LOGFILE_SIZE / 4 ) ) ); f.close(); } } // Since the log isn't open yet, this probably only goes to stdout cDebug() << "Using log file:" << logFile(); // Lock while (re-)opening the logfile { QMutexLocker lock( &s_mutex ); logfile.open( logFile().toLocal8Bit(), std::ios::app ); if ( logfile.tellp() ) { logfile << "\n\n" << std::endl; } logfile << "=== START CALAMARES " << CALAMARES_VERSION << std::endl; } qInstallMessageHandler( CalamaresLogHandler ); } CLog::CLog( unsigned int debugLevel ) : QDebug( &m_msg ) , m_debugLevel( debugLevel ) { } CLog::~CLog() { log( m_msg.toUtf8().data(), m_debugLevel ); } CDebug::~CDebug() {} const char Continuation[] = "\n "; const char SubEntry[] = " .. "; QString toString( const QVariant& v ) { auto t = v.type(); if ( t == QVariant::List ) { QStringList s; auto l = v.toList(); for ( auto lit = l.constBegin(); lit != l.constEnd(); ++lit ) { s << lit->toString(); } return s.join( ", " ); } else { return v.toString(); } } } // namespace Logger calamares-3.2.20/src/libcalamares/utils/Logger.h000066400000000000000000000134441362604102500214710ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2010-2011, Christian Muehlhaeuser * Copyright 2014, Teo Mrnjavac * Copyright 2017-2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef UTILS_LOGGER_H #define UTILS_LOGGER_H #include #include "DllMacro.h" namespace Logger { DLLEXPORT extern const char Continuation[]; DLLEXPORT extern const char SubEntry[]; enum { LOG_DISABLE = 0, LOGERROR = 1, LOGWARNING = 2, LOGINFO = 3, LOGEXTRA = 5, LOGDEBUG = 6, LOGVERBOSE = 8 }; class DLLEXPORT CLog : public QDebug { public: explicit CLog( unsigned int debugLevel ); virtual ~CLog(); private: QString m_msg; unsigned int m_debugLevel; }; class DLLEXPORT CDebug : public CLog { public: CDebug( unsigned int debugLevel = LOGDEBUG ) : CLog( debugLevel ) { if ( debugLevel <= LOGERROR ) { *this << "ERROR:"; } else if ( debugLevel <= LOGWARNING ) { *this << "WARNING:"; } } virtual ~CDebug(); }; /** * @brief The full path of the log file. */ DLLEXPORT QString logFile(); /** * @brief Start logging to the log file. * * Call this (once) to start logging to the log file (usually * ~/.cache/calamares/session.log ). An existing log file is * rolled over if it is too large. */ DLLEXPORT void setupLogfile(); /** * @brief Set a log level for future logging. * * Pass in a value from the LOG* enum, above. Use 0 to * disable logging. Values greater than LOGVERBOSE are * limited to LOGVERBOSE, which will log everything. * * Practical values are 0, 1, 2, and 6. */ DLLEXPORT void setupLogLevel( unsigned int level ); /** @brief Return the configured log-level. */ DLLEXPORT unsigned int logLevel(); /** @brief Would the given @p level really be logged? */ DLLEXPORT bool logLevelEnabled( unsigned int level ); /** * @brief Row-oriented formatted logging. * * Use DebugRow to produce multiple rows of 2-column output * in a debugging statement. For instance, * cDebug() << DebugRow(1,12) * << DebugRow(2,24) * will produce a single timestamped debug line with continuations. * Each DebugRow produces one line of output, with the two values. */ template < typename T, typename U > struct DebugRow { public: explicit DebugRow( const T& t, const U& u ) : first( t ) , second( u ) { } const T& first; const U& second; }; /** * @brief List-oriented formatted logging. * * Use DebugList to produce multiple rows of output in a debugging * statement. For instance, * cDebug() << DebugList( QStringList() << "foo" << "bar" ) * will produce a single timestamped debug line with continuations. * Each element of the list of strings will be logged on a separate line. */ /* TODO: Calamares 3.3, bump requirements to C++17, and rename * this to DebugList, dropping the convenience-definition * below. In C++17, class template argument deduction is * added, so `DebugList( whatever )` determines the right * type already (also for QStringList). */ template < typename T > struct DebugListT { using list_t = QList< T >; explicit DebugListT( const list_t& l ) : list( l ) { } const list_t& list; }; ///@brief Convenience for QStringList, needs no template parameters struct DebugList : public DebugListT< QString > { explicit DebugList( const list_t& l ) : DebugListT( l ) { } }; /** * @brief Map-oriented formatted logging. * * Use DebugMap to produce multiple rows of output in a debugging * statement from a map. The output is intentionally a bit-yaml-ish. * cDebug() << DebugMap( map ) * will produce a single timestamped debug line with continuations. * The continued lines will have a key (from the map) and a value * on each line. */ struct DebugMap { public: explicit DebugMap( const QVariantMap& m ) : map( m ) { } const QVariantMap& map; }; /** @brief output operator for DebugRow */ template < typename T, typename U > inline QDebug& operator<<( QDebug& s, const DebugRow< T, U >& t ) { s << Continuation << t.first << ':' << ' ' << t.second; return s; } /** @brief output operator for DebugList, assuming operator<< for T exists */ template < typename T = QString > inline QDebug& operator<<( QDebug& s, const DebugListT< T >& c ) { for ( const auto& i : c.list ) { s << Continuation << i; } return s; } /** @brief supporting method for outputting a DebugMap */ QString toString( const QVariant& v ); /** @brief output operator for DebugMap */ inline QDebug& operator<<( QDebug& s, const DebugMap& t ) { for ( auto it = t.map.constBegin(); it != t.map.constEnd(); ++it ) { s << Continuation << it.key().toUtf8().constData() << ':' << ' ' << toString( it.value() ).toUtf8().constData(); } return s; } } // namespace Logger #define cDebug() (Logger::CDebug( Logger::LOGDEBUG ) << Q_FUNC_INFO << Logger::Continuation) #define cWarning() Logger::CDebug( Logger::LOGWARNING ) #define cError() Logger::CDebug( Logger::LOGERROR ) #endif calamares-3.2.20/src/libcalamares/utils/NamedEnum.h000066400000000000000000000066651362604102500221320ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * Copyright 2019, Collabora Ltd * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ /** @brief Support for "named" enumerations * * For tables which map string names to enum values, provide a NamedEnumTable * which hangs on to an initializer_list of pairs of names and values. * This table can be used with find() to map names to values, or * values to names. A convenience function smash() is provided to help * in printing integer (underlying) values of an enum. */ #ifndef UTILS_NAMEDENUM_H #define UTILS_NAMEDENUM_H #include #include #include #include /** @brief Type for collecting parts of a named enum. */ template < typename T > struct NamedEnumTable { using string_t = QString; using enum_t = T; using pair_t = std::pair< string_t, enum_t >; using type = std::vector< pair_t >; type table; /** @brief Create a table of named enum values. * * Use braced-initialisation for NamedEnum, and remember that the * elements of the list are **pairs**, e.g. * * static const NamedEnumTable c{ {"red", Colors::Red } }; */ NamedEnumTable( const std::initializer_list< pair_t >& v ) : table( v ) { /* static_assert( v.size() > 0 ); */ } /** @brief Find a name @p s in the table. * * Searches case-insensitively. * * If the name @p s is not found, @p ok is set to false and * the first enum value in the table is returned. Otherwise, * @p ok is set to true and the corresponding value is returned. * */ enum_t find( const string_t& s, bool& ok ) const { ok = false; for ( const auto& p : table ) if ( 0 == QString::compare( s, p.first, Qt::CaseInsensitive ) ) { ok = true; return p.second; } // ok is still false return table.begin()->second; } /** @brief Find a value @p s in the table. * * If the value @p s is not found, @p ok is set to false and * an empty string is returned. Otherwise, @p is set to true * and the corresponding name is returned. */ string_t find( enum_t s, bool& ok ) const { ok = false; for ( const auto& p : table ) if ( s == p.second ) { ok = true; return p.first; } // ok is still false return string_t(); } }; /** @brief Smashes an enum value to its underlying type. */ template < typename E > constexpr typename std::underlying_type< E >::type smash( const E e ) { return static_cast< typename std::underlying_type< E >::type >( e ); } #endif calamares-3.2.20/src/libcalamares/utils/NamedSuffix.h000066400000000000000000000062731362604102500224650ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ /** @brief Support for unit-suffixed values. * * This combines a value with an (enum) unit indicating what kind * of value it is, e.g. 10 meters, or 64 pixels. Includes simple * parsing support for the values written as strings like , * e.g. "10m" or "64px". * * When a suffixed unit value needs validation, define an isValid() * method; similarly for simple construction from a string (with a fixed * table of suffixes). Typical use then looks like: * * class MyUnit : public NamedSuffix * { * public: * using NamedSuffix::NamedSuffix; // Keep existing constructors * MyUnit( const QString& s ); * bool isValid() const; * } ; */ #ifndef UTILS_NAMEDSUFFIX_H #define UTILS_NAMEDSUFFIX_H #include "NamedEnum.h" /** @brief Template that takes the enum type to work with and a special none-enum. */ template < typename T, T _none > class NamedSuffix { public: using unit_t = T; static constexpr unit_t none = _none; /** @brief Empty value. */ NamedSuffix() : m_value( 0 ) , m_unit( none ) { } /** @brief Specific value and unit. */ NamedSuffix( qint64 value, unit_t unit ) : m_value( value ) , m_unit( unit ) { } /** @brief Construct value and unit from string. * * This parses the given string @p s by comparing with the suffixes * in @p table and uses the first matching suffix as the unit. */ NamedSuffix( const NamedEnumTable< T >& table, const QString& s ) : NamedSuffix() { for ( const auto& suffix : table.table ) if ( s.endsWith( suffix.first ) ) { m_value = s.left( s.length() - suffix.first.length() ).toLongLong(); m_unit = suffix.second; break; } } /** @brief Construct value from string. * * This is not defined in the template, because it should probably * delegate to the constructor above with a fixed table. */ NamedSuffix( const QString& s ); qint64 value() const { return m_value; } unit_t unit() const { return m_unit; } /** @brief Check that a value-unit combination is valid. * * This is not defined in the template, because validity (e.g. * range of acceptable values) depends on the kind of unit. */ bool isValid() const; protected: qint64 m_value; unit_t m_unit; }; #endif calamares-3.2.20/src/libcalamares/utils/PluginFactory.cpp000066400000000000000000000003351362604102500233660ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * */ #include "PluginFactory.h" CalamaresPluginFactory::~CalamaresPluginFactory() {} calamares-3.2.20/src/libcalamares/utils/PluginFactory.h000066400000000000000000000066641362604102500230460ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2015, Teo Mrnjavac * Copyright 2017-2018, Adriaan de Groot * * Based on KPluginFactory from KCoreAddons, KDE project * Copyright 2007, Matthias Kretz * Copyright 2007, Bernhard Loos * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef UTILS_PLUGINFACTORY_H #define UTILS_PLUGINFACTORY_H #include #define CalamaresPluginFactory_iid "io.calamares.PluginFactory" /** @brief Plugin factory for Calamares * * Try to re-use KPluginFactory as much as possible (since the * old code for PluginFactory was a fork of an old version of * exactly that). * * The current createInstance() method passes more arguments * to the job and viewstep constructors than we want; chasing * that change means modifying each Calamares module. This class * implements a version of createInstance() with fewer arguments * and overloads registerPlugin() to use that. */ class CalamaresPluginFactory : public KPluginFactory { Q_OBJECT public: explicit CalamaresPluginFactory() : KPluginFactory() { } ~CalamaresPluginFactory() override; /** @brief Create an object from the factory. * * Ignores all the @p args since they are not used. Calls * Calamares constructors for the Jobs and ViewSteps. */ template < class impl, class ParentType > static QObject* createInstance( QWidget* parentWidget, QObject* parent, const QVariantList& args ) { Q_UNUSED( parentWidget ) Q_UNUSED( args ) ParentType* p = nullptr; if ( parent ) { p = qobject_cast< ParentType* >( parent ); Q_ASSERT( p ); } return new impl( p ); } /** @brief register a plugin * * The Calamares version doesn't accept keywords, and uses * the Calamares createInstance() version which ignores * the QVariantList of arguments. */ template < class T > void registerPlugin() { KPluginFactory::registerPlugin< T >( QString(), &createInstance< T, QObject > ); } }; /** @brief declare a Calamares Plugin Factory * * This would be defined as K_PLUGIN_FACTORY_DECLARATION_WITH_BASEFACTORY, * except that does not actually use the base factory class that is * passed in. */ #define CALAMARES_PLUGIN_FACTORY_DECLARATION( name ) \ class name : public CalamaresPluginFactory \ { \ Q_OBJECT \ Q_INTERFACES( KPluginFactory ) \ Q_PLUGIN_METADATA( IID CalamaresPluginFactory_iid ) \ public: \ explicit name(); \ ~name(); \ }; #define CALAMARES_PLUGIN_FACTORY_DEFINITION( name, pluginRegistrations ) \ K_PLUGIN_FACTORY_DEFINITION_WITH_BASEFACTORY( name, CalamaresPluginFactory, pluginRegistrations ) #endif calamares-3.2.20/src/libcalamares/utils/Retranslator.cpp000066400000000000000000000172061362604102500232650ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "Retranslator.h" #include "Settings.h" #include "utils/Dirs.h" #include "utils/Logger.h" #include #include #include #include static bool s_allowLocalTranslations = false; /** @brief Helper class for loading translations * * This is used by the loadSingletonTranslator() function to hand off * work to translation-type specific code. */ struct TranslationLoader { static QString mungeLocaleName( const QLocale& locale ) { QString localeName = locale.name(); localeName.replace( "-", "_" ); if ( localeName == "C" ) { localeName = "en"; } // Special case of sr@latin // // See top-level CMakeLists.txt about special cases for translation loading. if ( locale.language() == QLocale::Language::Serbian && locale.script() == QLocale::Script::LatinScript ) { localeName = QStringLiteral( "sr@latin" ); } return localeName; } TranslationLoader( const QLocale& locale ) : m_locale( locale ) , m_localeName( mungeLocaleName( locale ) ) { } virtual ~TranslationLoader(); /// @brief Loads @p translator with the specific translations of this type virtual bool tryLoad( QTranslator* translator ) = 0; const QLocale& m_locale; QString m_localeName; }; /// @brief Loads translations for branding struct BrandingLoader : public TranslationLoader { BrandingLoader( const QLocale& locale, const QString& prefix ) : TranslationLoader( locale ) , m_prefix( prefix ) { } bool tryLoad( QTranslator* translator ) override; QString m_prefix; }; /// @brief Loads regular Calamares translations (program text) struct CalamaresLoader : public TranslationLoader { using TranslationLoader::TranslationLoader; bool tryLoad( QTranslator* translator ) override; }; /// @brief Loads timezone name translations struct TZLoader : public TranslationLoader { using TranslationLoader::TranslationLoader; bool tryLoad( QTranslator* translator ) override; }; TranslationLoader::~TranslationLoader() {} bool BrandingLoader::tryLoad( QTranslator* translator ) { if ( m_prefix.isEmpty() ) { return false; } QString brandingTranslationsDirPath( m_prefix ); brandingTranslationsDirPath.truncate( m_prefix.lastIndexOf( QDir::separator() ) ); QDir brandingTranslationsDir( brandingTranslationsDirPath ); if ( brandingTranslationsDir.exists() ) { QString filenameBase( m_prefix ); filenameBase.remove( 0, m_prefix.lastIndexOf( QDir::separator() ) + 1 ); if ( translator->load( m_locale, filenameBase, "_", brandingTranslationsDir.absolutePath() ) ) { cDebug() << Logger::SubEntry << "Branding using locale:" << m_localeName; return true; } else { cDebug() << Logger::SubEntry << "Branding using default, system locale not found:" << m_localeName; // TODO: this loads something completely different return translator->load( m_prefix + "en" ); } } return false; } static bool tryLoad( QTranslator* translator, const QString& prefix, const QString& localeName ) { // In debug-mode, try loading from the current directory if ( s_allowLocalTranslations && translator->load( prefix + localeName ) ) { cDebug() << Logger::SubEntry << "Loaded local translation" << prefix << localeName; return true; } // Or load from appDataDir -- often /usr/share/calamares -- subdirectory land/ QDir localeData( CalamaresUtils::appDataDir() ); if ( localeData.exists() && translator->load( localeData.absolutePath() + QStringLiteral( "/lang/" ) + prefix + localeName ) ) { cDebug() << Logger::SubEntry << "Loaded appdata translation" << prefix << localeName; return true; } // Or from QRC (most common) if ( translator->load( QStringLiteral( ":/lang/" ) + prefix + localeName ) ) { cDebug() << Logger::SubEntry << "Loaded QRC translation" << prefix << localeName; return true; } else { cDebug() << Logger::SubEntry << "No translation for" << prefix << localeName << "using default (en)"; return translator->load( QStringLiteral( ":/lang/" ) + prefix + QStringLiteral( "en" ) ); } } bool CalamaresLoader::tryLoad( QTranslator* translator ) { return ::tryLoad( translator, QStringLiteral( "calamares_" ), m_localeName ); } bool TZLoader::tryLoad( QTranslator* translator ) { return ::tryLoad( translator, QStringLiteral( "tz_" ), m_localeName ); } static void loadSingletonTranslator( TranslationLoader&& loader, QTranslator*& translator_p ) { QTranslator* translator = new QTranslator(); loader.tryLoad( translator ); if ( translator_p ) { QCoreApplication::removeTranslator( translator_p ); delete translator_p; } QCoreApplication::installTranslator( translator ); translator_p = translator; } namespace CalamaresUtils { static QTranslator* s_brandingTranslator = nullptr; static QTranslator* s_translator = nullptr; static QTranslator* s_tztranslator = nullptr; static QString s_translatorLocaleName; void installTranslator( const QLocale& locale, const QString& brandingTranslationsPrefix, QObject* ) { loadSingletonTranslator( BrandingLoader( locale, brandingTranslationsPrefix ), s_brandingTranslator ); loadSingletonTranslator( TZLoader( locale ), s_tztranslator ); CalamaresLoader l( locale ); // because we want the extracted localeName loadSingletonTranslator( std::move( l ), s_translator ); s_translatorLocaleName = l.m_localeName; } QString translatorLocaleName() { return s_translatorLocaleName; } Retranslator* Retranslator::retranslatorFor( QObject* parent ) { Retranslator* r = nullptr; for ( QObject* child : parent->children() ) { r = qobject_cast< Retranslator* >( child ); if ( r ) { return r; } } return new Retranslator( parent ); } void Retranslator::attachRetranslator( QObject* parent, std::function< void( void ) > retranslateFunc ) { retranslatorFor( parent )->m_retranslateFuncList.append( retranslateFunc ); retranslateFunc(); } Retranslator::Retranslator( QObject* parent ) : QObject( parent ) { parent->installEventFilter( this ); } bool Retranslator::eventFilter( QObject* obj, QEvent* e ) { if ( obj == parent() ) { if ( e->type() == QEvent::LanguageChange ) { foreach ( std::function< void() > func, m_retranslateFuncList ) { func(); } emit languageChange(); } } // pass the event on to the base return QObject::eventFilter( obj, e ); } void setAllowLocalTranslation( bool allow ) { s_allowLocalTranslations = allow; } } // namespace CalamaresUtils calamares-3.2.20/src/libcalamares/utils/Retranslator.h000066400000000000000000000057661362604102500227420ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef UTILS_RETRANSLATOR_H #define UTILS_RETRANSLATOR_H #include "DllMacro.h" #include #include #include #include class QEvent; class QLocale; namespace CalamaresUtils { /** * @brief installTranslator changes the application language. * @param locale the new locale. * @param brandingTranslationsPrefix the branding path prefix, from Calamares::Branding. * @param parent the parent QObject. */ DLLEXPORT void installTranslator( const QLocale& locale, const QString& brandingTranslationsPrefix, QObject* parent ); DLLEXPORT QString translatorLocaleName(); /** @brief Set @p allow to true to load translations from current dir. * * If false, (or never called) the translations are loaded only from * system locations (the AppData dir) and from QRC (compiled in). * Enable local translations to test translations stored in the * current directory. */ DLLEXPORT void setAllowLocalTranslation( bool allow ); class Retranslator : public QObject { Q_OBJECT public: /// @brief Call @p retranslateFunc when the language changes static void attachRetranslator( QObject* parent, std::function< void( void ) > retranslateFunc ); /// @brief What retranslator belongs to @p parent (may create one) static Retranslator* retranslatorFor( QObject* parent ); /// @brief Call @p retranslateFunc when the language changes void addRetranslateFunc( std::function< void( void ) > retranslateFunc ); signals: void languageChange(); protected: bool eventFilter( QObject* obj, QEvent* e ) override; private: explicit Retranslator( QObject* parent ); QList< std::function< void( void ) > > m_retranslateFuncList; }; } // namespace CalamaresUtils #define CALAMARES_RETRANSLATE( body ) CalamaresUtils::Retranslator::attachRetranslator( this, [=] { body } ); #define CALAMARES_RETRANSLATE_WIDGET( widget, body ) \ CalamaresUtils::Retranslator::attachRetranslator( widget, [=] { body } ); #define CALAMARES_RETRANSLATE_SLOT( slotfunc ) \ { \ this->connect( CalamaresUtils::Retranslator::retranslatorFor( this ), \ &CalamaresUtils::Retranslator::languageChange, \ this, \ slotfunc ); \ } #endif calamares-3.2.20/src/libcalamares/utils/String.cpp000066400000000000000000000114101362604102500220420ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2013-2016, Teo Mrnjavac * Copyright 2018, Adriaan de Groot * * Originally from Tomahawk, portions: * Copyright 2010-2011, Christian Muehlhaeuser * Copyright 2010-2011, Leo Franchi * Copyright 2010-2012, Jeff Mitchell * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "String.h" #include namespace CalamaresUtils { QString removeDiacritics( const QString& string ) { // *INDENT-OFF* // clang-format off // Map these extended-Latin characters to ASCII; keep the // layout so that one line in *diacriticLetters* corresponds // to one line of replacements in *noDiacriticLetters*. static const QString diacriticLetters = QString::fromUtf8( "ŠŒŽšœžŸ¥µÀ" "ÃÂÃÄÅÆÇÈÉÊ" "ËÌÃÃŽÃÃÑÒÓÔ" "ÕÖØÙÚÛÜÃßà" "áâãäåæçèéê" "ëìíîïðñòóô" "õöøùúûüýÿÞ" "þČÄĆćÄ𩹮" "žŞşĞğİıȚțȘ" "șĂăÅőŰűŘřĀ" "ÄĒēĪīŌÅŪūŢ" "ţẀáºáº‚ẃŴŵŶŷĎ" "ÄĚěŇňŤťŮůŔ" "ॹĘęÅłŃńŚ" "śŹźŻż" ); static const QStringList noDiacriticLetters = { "S", "OE", "Z", "s", "oe", "z", "Y", "Y", "u", "A", "A", "A", "A", "A", "AA", "AE", "C", "E", "E", "E", "E", "I", "I", "I", "I", "D", "N", "O", "O", "O", "O", "E", "OE", "U", "U", "U", "E", "Y", "s", "a", "a", "a", "a", "e", "aa", "ae", "c", "e", "e", "e", "e", "i", "i", "i", "i", "d", "n", "o", "o", "o", "o", "e", "oe", "u", "u", "u", "e", "y", "y", "TH", "th", "C", "c", "C", "c", "DJ", "dj", "S", "s", "Z", "z", "S", "s", "G", "g", "I", "i", "T", "t", "S", "s", "A", "a", "O", "o", "U", "u", "R", "r", "A", "a", "E", "e", "I", "i", "O", "o", "U", "u", "T", "t", "W", "w", "W", "w", "W", "w", "Y", "y", "D", "d", "E", "e", "N", "n", "T", "t", "U", "u", "R", "r", "A", "a", "E", "e", "L", "l", "N", "n", "S", "s", "Z", "z", "Z", "z" }; // clang-format on // *INDENT-ON* QString output; for ( const QChar& c : string ) { int i = diacriticLetters.indexOf( c ); if ( i < 0 ) { output.append( c ); } else { QString replacement = noDiacriticLetters[ i ]; output.append( replacement ); } } return output; } // Function CalamaresUtils::obscure based on KStringHandler::obscure, // part of KDElibs by KDE, file kstringhandler.cpp. // Original copyright statement follows. /* This file is part of the KDE libraries Copyright (C) 1999 Ian Zepp (icszepp@islc.net) Copyright (C) 2006 by Dominic Battre Copyright (C) 2006 by Martin Pool This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ QString obscure( const QString& string ) { QString result; const QChar* unicode = string.unicode(); for ( int i = 0; i < string.length(); ++i ) // yes, no typo. can't encode ' ' or '!' because // they're the unicode BOM. stupid scrambling. stupid. { result += ( unicode[ i ].unicode() <= 0x21 ) ? unicode[ i ] : QChar( 0x1001F - unicode[ i ].unicode() ); } return result; } } // namespace CalamaresUtils calamares-3.2.20/src/libcalamares/utils/String.h000066400000000000000000000034241362604102500215150ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2013-2016, Teo Mrnjavac * Copyright 2018, Adriaan de Groot * * Originally from Tomahawk, portions: * Copyright 2010-2011, Christian Muehlhaeuser * Copyright 2010-2011, Leo Franchi * Copyright 2010-2012, Jeff Mitchell * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef UTILS_STRING_H #define UTILS_STRING_H #include "DllMacro.h" #include /** * @brief The CalamaresUtils namespace contains utility functions. */ namespace CalamaresUtils { /** * @brief removeDiacritics replaces letters with diacritics and ligatures with * alternative forms and digraphs. * @param string the string to transform. * @return the output string with plain characters. */ DLLEXPORT QString removeDiacritics( const QString& string ); /** * @brief obscure is a bidirectional obfuscation function, from KStringHandler. * @param string the input string. * @return the obfuscated string. */ DLLEXPORT QString obscure( const QString& string ); } // namespace CalamaresUtils #endif calamares-3.2.20/src/libcalamares/utils/TestPaths.cpp000066400000000000000000000177411362604102500225300ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018, 2020, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "CalamaresUtilsSystem.h" #include "Entropy.h" #include "Logger.h" #include "UMask.h" #include "Yaml.h" #include "GlobalStorage.h" #include "JobQueue.h" #include // #include #include // #include // #include // #include class TestPaths : public QObject { Q_OBJECT public: TestPaths() {} virtual ~TestPaths() {} private Q_SLOTS: void initTestCase(); void init(); void cleanupTestCase(); void testCreationResult(); void testTargetPath(); void testCreateTarget(); void testCreateTargetExists(); void testCreateTargetOverwrite(); void testCreateTargetBasedirs(); private: CalamaresUtils::System* m_system = nullptr; // Points to singleton instance, not owned Calamares::GlobalStorage* m_gs = nullptr; }; static const char testFile[] = "/calamares-testcreate"; static const char absFile[] = "/tmp/calamares-testcreate"; // With rootMountPoint prepended void TestPaths::initTestCase() { Logger::setupLogLevel( Logger::LOGDEBUG ); // Ensure we have a system object, expect it to be a "bogus" one CalamaresUtils::System* system = CalamaresUtils::System::instance(); QVERIFY( system ); QVERIFY( system->doChroot() ); // Ensure we have a system-wide GlobalStorage with /tmp as root if ( !Calamares::JobQueue::instance() ) { cDebug() << "Creating new JobQueue"; (void)new Calamares::JobQueue(); } Calamares::GlobalStorage* gs = Calamares::JobQueue::instance() ? Calamares::JobQueue::instance()->globalStorage() : nullptr; QVERIFY( gs ); m_system = system; m_gs = gs; } void TestPaths::cleanupTestCase() { QFile::remove( absFile ); } void TestPaths::init() { cDebug() << "Setting rootMountPoint"; m_gs->insert( "rootMountPoint", "/tmp" ); } void TestPaths::testCreationResult() { using Code = CalamaresUtils::CreationResult::Code; for ( auto c : { Code::OK, Code::AlreadyExists, Code::Failed, Code::Invalid } ) { auto r = CalamaresUtils::CreationResult( c ); QVERIFY( r.path().isEmpty() ); QCOMPARE( r.path(), QString() ); // Get a warning from Clang if we're not covering everything switch ( r.code() ) { case Code::OK: QVERIFY( !r.failed() ); QVERIFY( r ); break; case Code::AlreadyExists: QVERIFY( !r.failed() ); QVERIFY( !r ); break; case Code::Failed: case Code::Invalid: QVERIFY( r.failed() ); QVERIFY( !r ); break; } } QString path( "/etc/os-release" ); auto r = CalamaresUtils::CreationResult( path ); QVERIFY( !r.failed() ); QVERIFY( r ); QCOMPARE( r.code(), Code::OK ); QCOMPARE( r.path(), path ); } void TestPaths::testTargetPath() { // Paths mapped normally QCOMPARE( m_system->targetPath( "/etc/calamares" ), QStringLiteral( "/tmp/etc/calamares" ) ); QCOMPARE( m_system->targetPath( "//etc//calamares" ), QStringLiteral( "/tmp//etc//calamares" ) ); // extra / are not cleaned up QCOMPARE( m_system->targetPath( "etc/calamares" ), QStringLiteral( "/tmp/etc/calamares" ) ); // relative to root // Weird Paths QCOMPARE( m_system->targetPath( QString() ), QStringLiteral( "/tmp/" ) ); // Now break GS m_gs->remove( "rootMountPoint" ); QCOMPARE( m_system->targetPath( QString() ), QString() ); // Without root, no path } void TestPaths::testCreateTarget() { auto r = m_system->createTargetFile( testFile, "Hello" ); QVERIFY( !r.failed() ); QVERIFY( r ); QCOMPARE( r.path(), QString( absFile ) ); // Success QFileInfo fi( absFile ); QVERIFY( fi.exists() ); QCOMPARE( fi.size(), 5 ); m_system->removeTargetFile( testFile ); QFileInfo fi2( absFile ); // fi caches information QVERIFY( !fi2.exists() ); } struct GSRollback { GSRollback( const QString& key ) : m_key( key ) , m_value( Calamares::JobQueue::instance()->globalStorage()->value( key ) ) { } ~GSRollback() { Calamares::JobQueue::instance()->globalStorage()->insert( m_key, m_value ); } QString m_key; QVariant m_value; }; void TestPaths::testCreateTargetExists() { static const char ltestFile[] = "cala-test-world"; GSRollback g( QStringLiteral( "rootMountPoint" ) ); QTemporaryDir d; d.setAutoRemove( true ); Calamares::JobQueue::instance()->globalStorage()->insert( QStringLiteral( "rootMountPoint" ), d.path() ); QVERIFY( QFileInfo( d.path() ).exists() ); auto r = m_system->createTargetFile( ltestFile, "Hello" ); QVERIFY( r ); QVERIFY( r.path().endsWith( QString( ltestFile ) ) ); QCOMPARE( QFileInfo( d.filePath( QString( ltestFile ) ) ).size(), 5 ); r = m_system->createTargetFile( ltestFile, "Goodbye" ); QVERIFY( !r.failed() ); // It didn't fail! QVERIFY( !r ); // But not unqualified success, either QVERIFY( r.path().isEmpty() ); QCOMPARE( QFileInfo( d.filePath( QString( ltestFile ) ) ).size(), 5 ); // Unchanged! } void TestPaths::testCreateTargetOverwrite() { static const char ltestFile[] = "cala-test-world"; GSRollback g( QStringLiteral( "rootMountPoint" ) ); QTemporaryDir d; d.setAutoRemove( true ); Calamares::JobQueue::instance()->globalStorage()->insert( QStringLiteral( "rootMountPoint" ), d.path() ); QVERIFY( QFileInfo( d.path() ).exists() ); auto r = m_system->createTargetFile( ltestFile, "Hello" ); QVERIFY( r ); QVERIFY( r.path().endsWith( QString( ltestFile ) ) ); QCOMPARE( QFileInfo( d.filePath( QString( ltestFile ) ) ).size(), 5 ); r = m_system->createTargetFile( ltestFile, "Goodbye", CalamaresUtils::System::WriteMode::KeepExisting ); QVERIFY( !r.failed() ); // It didn't fail! QVERIFY( !r ); // But not unqualified success, either QVERIFY( r.path().isEmpty() ); QCOMPARE( QFileInfo( d.filePath( QString( ltestFile ) ) ).size(), 5 ); // Unchanged! r = m_system->createTargetFile( ltestFile, "Goodbye", CalamaresUtils::System::WriteMode::Overwrite ); QVERIFY( !r.failed() ); // It didn't fail! QVERIFY( r ); // Total success QVERIFY( r.path().endsWith( QString( ltestFile ) ) ); QCOMPARE( QFileInfo( d.filePath( QString( ltestFile ) ) ).size(), 7 ); } struct DirRemover { DirRemover( const QString& base, const QString& dir ) : m_base( base ) , m_dir( dir ) { } ~DirRemover() { QDir( m_base ).rmpath( m_dir ); } bool exists() const { return QDir( m_base ).exists( m_dir ); } QString m_base, m_dir; }; void TestPaths::testCreateTargetBasedirs() { { DirRemover dirrm( "/tmp", "var/lib/dbus" ); QVERIFY( m_system->createTargetDirs( "/" ) ); QVERIFY( m_system->createTargetDirs( "/var/lib/dbus" ) ); QVERIFY( QFile( "/tmp/var/lib/dbus" ).exists() ); QVERIFY( dirrm.exists() ); } QVERIFY( !QFile( "/tmp/var/lib/dbus" ).exists() ); // QFileInfo.dir() behaves even when things don't exist QCOMPARE( QFileInfo( "/tmp/var/lib/dbus/bogus" ).dir().path(), QStringLiteral( "/tmp/var/lib/dbus" ) ); } QTEST_GUILESS_MAIN( TestPaths ) #include "utils/moc-warnings.h" #include "TestPaths.moc" calamares-3.2.20/src/libcalamares/utils/Tests.cpp000066400000000000000000000163501362604102500217060ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "Tests.h" #include "CalamaresUtilsSystem.h" #include "Entropy.h" #include "Logger.h" #include "UMask.h" #include "Yaml.h" #include "GlobalStorage.h" #include "JobQueue.h" #include #include #include #include #include QTEST_GUILESS_MAIN( LibCalamaresTests ) LibCalamaresTests::LibCalamaresTests() {} LibCalamaresTests::~LibCalamaresTests() {} void LibCalamaresTests::initTestCase() { } void LibCalamaresTests::testDebugLevels() { Logger::setupLogLevel( Logger::LOG_DISABLE ); QCOMPARE( Logger::logLevel(), static_cast< unsigned int >( Logger::LOG_DISABLE ) ); for ( unsigned int level = 0; level <= Logger::LOGVERBOSE; ++level ) { Logger::setupLogLevel( level ); QCOMPARE( Logger::logLevel(), level ); QVERIFY( Logger::logLevelEnabled( level ) ); for ( unsigned int xlevel = 0; xlevel <= Logger::LOGVERBOSE; ++xlevel ) { QCOMPARE( Logger::logLevelEnabled( xlevel ), xlevel <= level ); } } } void LibCalamaresTests::testLoadSaveYaml() { QFile f( "settings.conf" ); // Find the nearest settings.conf to read for ( unsigned int up = 0; !f.exists() && ( up < 4 ); ++up ) { f.setFileName( QString( "../" ) + f.fileName() ); } cDebug() << QDir().absolutePath() << f.fileName() << f.exists(); QVERIFY( f.exists() ); auto map = CalamaresUtils::loadYaml( f.fileName() ); CalamaresUtils::saveYaml( "out.yaml", map ); auto other_map = CalamaresUtils::loadYaml( "out.yaml" ); CalamaresUtils::saveYaml( " out2.yaml", other_map ); QCOMPARE( map, other_map ); QFile::remove( "out.yaml" ); QFile::remove( "out2.yaml" ); } static QStringList findConf( const QDir& d ) { QStringList mine; if ( d.exists() ) { QString path = d.absolutePath(); path.append( d.separator() ); for ( const auto& confname : d.entryList( { "*.conf" } ) ) mine.append( path + confname ); for ( const auto& subdirname : d.entryList( QDir::AllDirs | QDir::NoDotAndDotDot ) ) { QDir subdir( d ); subdir.cd( subdirname ); mine.append( findConf( subdir ) ); } } return mine; } void LibCalamaresTests::testLoadSaveYamlExtended() { for ( const auto& confname : findConf( QDir( "../src" ) ) ) { cDebug() << "Testing" << confname; auto map = CalamaresUtils::loadYaml( confname ); QVERIFY( CalamaresUtils::saveYaml( "out.yaml", map ) ); auto othermap = CalamaresUtils::loadYaml( "out.yaml" ); QCOMPARE( map, othermap ); } QFile::remove( "out.yaml" ); } void LibCalamaresTests::testCommands() { using CalamaresUtils::System; auto r = System::runCommand( System::RunLocation::RunInHost, { "/bin/ls", "/tmp" } ); QVERIFY( r.getExitCode() == 0 ); QTemporaryFile tf( "/tmp/calamares-test-XXXXXX" ); QVERIFY( tf.open() ); QVERIFY( !tf.fileName().isEmpty() ); QFileInfo tfn( tf.fileName() ); QVERIFY( !r.getOutput().contains( tfn.fileName() ) ); // Run ls again, now that the file exists r = System::runCommand( System::RunLocation::RunInHost, { "/bin/ls", "/tmp" } ); QVERIFY( r.getOutput().contains( tfn.fileName() ) ); // .. and without a working directory set, assume builddir != /tmp r = System::runCommand( System::RunLocation::RunInHost, { "/bin/ls" } ); QVERIFY( !r.getOutput().contains( tfn.fileName() ) ); r = System::runCommand( System::RunLocation::RunInHost, { "/bin/ls" }, "/tmp" ); QVERIFY( r.getOutput().contains( tfn.fileName() ) ); } void LibCalamaresTests::testUmask() { struct stat mystat; QTemporaryFile ft; QVERIFY( ft.open() ); // m gets the previous value of the mask (depends on the environment the // test is run in, might be 002, might be 077), .. mode_t m = CalamaresUtils::setUMask( 022 ); QCOMPARE( CalamaresUtils::setUMask( m ), mode_t( 022 ) ); // But now most recently set was 022 for ( mode_t i = 0; i <= 0777 /* octal! */; ++i ) { QByteArray name = ( ft.fileName() + QChar( '.' ) + QString::number( i, 8 ) ).toLatin1(); CalamaresUtils::UMask um( i ); int fd = creat( name, 0777 ); QVERIFY( fd >= 0 ); close( fd ); QFileInfo fi( name ); QVERIFY( fi.exists() ); QCOMPARE( stat( name, &mystat ), 0 ); QCOMPARE( mystat.st_mode & 0777, 0777 & ~i ); QCOMPARE( unlink( name ), 0 ); } QCOMPARE( CalamaresUtils::setUMask( 022 ), m ); QCOMPARE( CalamaresUtils::setUMask( m ), mode_t( 022 ) ); } void LibCalamaresTests::testEntropy() { QByteArray data; auto r0 = CalamaresUtils::getEntropy( 0, data ); QCOMPARE( CalamaresUtils::EntropySource::None, r0 ); QCOMPARE( data.size(), 0 ); auto r1 = CalamaresUtils::getEntropy( 16, data ); QVERIFY( r1 != CalamaresUtils::EntropySource::None ); QCOMPARE( data.size(), 16 ); // This can randomly fail (but not often) QVERIFY( data.at( data.size() - 1 ) != char( 0xcb ) ); auto r2 = CalamaresUtils::getEntropy( 8, data ); QVERIFY( r2 != CalamaresUtils::EntropySource::None ); QCOMPARE( data.size(), 8 ); QCOMPARE( r1, r2 ); // This can randomly fail (but not often) QVERIFY( data.at( data.size() - 1 ) != char( 0xcb ) ); } void LibCalamaresTests::testPrintableEntropy() { QString s; auto r0 = CalamaresUtils::getPrintableEntropy( 0, s ); QCOMPARE( CalamaresUtils::EntropySource::None, r0 ); QCOMPARE( s.length(), 0 ); auto r1 = CalamaresUtils::getPrintableEntropy( 16, s ); QVERIFY( r1 != CalamaresUtils::EntropySource::None ); QCOMPARE( s.length(), 16 ); for ( QChar c : s ) { QVERIFY( c.isPrint() ); QCOMPARE( c.row(), uchar( 0 ) ); QVERIFY( c.cell() > 32 ); // ASCII SPACE QVERIFY( c.cell() < 127 ); } } void LibCalamaresTests::testOddSizedPrintable() { QString s; for ( int l = 0; l <= 37; ++l ) { auto r = CalamaresUtils::getPrintableEntropy( l, s ); if ( l == 0 ) { QCOMPARE( r, CalamaresUtils::EntropySource::None ); } else { QVERIFY( r != CalamaresUtils::EntropySource::None ); } QCOMPARE( s.length(), l ); for ( QChar c : s ) { QVERIFY( c.isPrint() ); QCOMPARE( c.row(), uchar( 0 ) ); QVERIFY( c.cell() > 32 ); // ASCII SPACE QVERIFY( c.cell() < 127 ); } } } calamares-3.2.20/src/libcalamares/utils/Tests.h000066400000000000000000000026251362604102500213530ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef TESTS_H #define TESTS_H #include class LibCalamaresTests : public QObject { Q_OBJECT public: LibCalamaresTests(); ~LibCalamaresTests() override; private Q_SLOTS: void initTestCase(); void testDebugLevels(); void testLoadSaveYaml(); // Just settings.conf void testLoadSaveYamlExtended(); // Do a find() in the src dir void testCommands(); /** @brief Test that all the UMask objects work correctly. */ void testUmask(); /** @brief Tests the entropy functions. */ void testEntropy(); void testPrintableEntropy(); void testOddSizedPrintable(); }; #endif calamares-3.2.20/src/libcalamares/utils/UMask.cpp000066400000000000000000000022541362604102500216220ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "UMask.h" #include #include namespace CalamaresUtils { mode_t setUMask( mode_t u ) { return umask( u ); } UMask::UMask( mode_t u ) : m_mode( setUMask( u ) ) { } UMask::~UMask() { setUMask( m_mode ); } static_assert( UMask::Safe == ( S_IRGRP | S_IWGRP | S_IXGRP | S_IROTH | S_IWOTH | S_IXOTH ), "Bad permissions." ); } // namespace CalamaresUtils calamares-3.2.20/src/libcalamares/utils/UMask.h000066400000000000000000000032011362604102500212600ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef UTILS_UMASK_H #define UTILS_UMASK_H #include "DllMacro.h" #include namespace CalamaresUtils { /** @brief Wrapper for umask(2) * * Like umask(2), sets the umask and returns the previous value of the mask. */ DLLEXPORT mode_t setUMask( mode_t u ); /** @brief RAII for setting and re-setting umask. * * Create an object of this class to set the umask, * and the umask is reset to its original value when * the object goes out of scope. */ class DLLEXPORT UMask { public: UMask( mode_t u ); ~UMask(); /** @brief a "safe" umask * * This umask will switch off group- and other- permissions for * files, so that the file cannot be read, written, or executed * except by the owner. */ static constexpr mode_t Safe = 077; // octal! private: mode_t m_mode; }; } // namespace CalamaresUtils #endif calamares-3.2.20/src/libcalamares/utils/Units.h000066400000000000000000000067261362604102500213610ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2017, Adriaan de Groot * Copyright 2019, Collabora Ltd * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef UTILS_UNITS_H #define UTILS_UNITS_H #include namespace CalamaresUtils { /** User defined literals, 1_KB is 1 KiloByte (= 10^3 bytes) */ constexpr qint64 operator""_KB( unsigned long long m ) { return qint64( m ) * 1000; } /** User defined literals, 1_KiB is 1 KibiByte (= 2^10 bytes) */ constexpr qint64 operator""_KiB( unsigned long long m ) { return qint64( m ) * 1024; } /** User defined literals, 1_MB is 1 MegaByte (= 10^6 bytes) */ constexpr qint64 operator""_MB( unsigned long long m ) { return operator""_KB(m)*1000; } /** User defined literals, 1_MiB is 1 MibiByte (= 2^20 bytes) */ constexpr qint64 operator""_MiB( unsigned long long m ) { return operator""_KiB(m)*1024; } /** User defined literals, 1_GB is 1 GigaByte (= 10^9 bytes) */ constexpr qint64 operator""_GB( unsigned long long m ) { return operator""_MB(m)*1000; } /** User defined literals, 1_GiB is 1 GibiByte (= 2^30 bytes) */ constexpr qint64 operator""_GiB( unsigned long long m ) { return operator""_MiB(m)*1024; } constexpr qint64 KBtoBytes( unsigned long long m ) { return operator""_KB( m ); } constexpr qint64 KiBtoBytes( unsigned long long m ) { return operator""_KiB( m ); } constexpr qint64 MBtoBytes( unsigned long long m ) { return operator""_MB( m ); } constexpr qint64 MiBtoBytes( unsigned long long m ) { return operator""_MiB( m ); } constexpr qint64 GBtoBytes( unsigned long long m ) { return operator""_GB( m ); } constexpr qint64 GiBtoBytes( unsigned long long m ) { return operator""_GiB( m ); } constexpr qint64 KBtoBytes( double m ) { return qint64( m * 1000 ); } constexpr qint64 KiBtoBytes( double m ) { return qint64( m * 1024 ); } constexpr qint64 MBtoBytes( double m ) { return qint64( m * 1000 * 1000 ); } constexpr qint64 MiBtoBytes( double m ) { return qint64( m * 1024 * 1024 ); } constexpr qint64 GBtoBytes( double m ) { return qint64( m * 1000 * 1000 * 1000 ); } constexpr qint64 GiBtoBytes( double m ) { return qint64( m * 1024 * 1024 * 1024 ); } constexpr int BytesToMiB( qint64 b ) { return int( b / 1024 / 1024 ); } constexpr int BytesToGiB( qint64 b ) { return int( b / 1024 / 1024 / 1024 ); } constexpr qint64 alignBytesToBlockSize( qint64 bytes, qint64 blocksize ) { qint64 blocks = bytes / blocksize; if ( blocks * blocksize != bytes ) { ++blocks; } return blocks * blocksize; } constexpr qint64 bytesToSectors( qint64 bytes, qint64 blocksize ) { return alignBytesToBlockSize( alignBytesToBlockSize( bytes, blocksize ), MiBtoBytes( 1ULL ) ) / blocksize; } } // namespace CalamaresUtils #endif calamares-3.2.20/src/libcalamares/utils/Variant.cpp000066400000000000000000000055501362604102500222100ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2013-2016, Teo Mrnjavac * Copyright 2018, Adriaan de Groot * * Originally from Tomahawk, portions: * Copyright 2010-2011, Christian Muehlhaeuser * Copyright 2010-2011, Leo Franchi * Copyright 2010-2012, Jeff Mitchell * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "Variant.h" #include "Logger.h" #include #include namespace CalamaresUtils { bool getBool( const QVariantMap& map, const QString& key, bool d ) { bool result = d; if ( map.contains( key ) ) { auto v = map.value( key ); if ( v.type() == QVariant::Bool ) { result = v.toBool(); } } return result; } QString getString( const QVariantMap& map, const QString& key ) { if ( map.contains( key ) ) { auto v = map.value( key ); if ( v.type() == QVariant::String ) { return v.toString(); } } return QString(); } qint64 getInteger( const QVariantMap& map, const QString& key, qint64 d ) { qint64 result = d; if ( map.contains( key ) ) { auto v = map.value( key ); if ( v.type() == QVariant::Int ) { result = v.toInt(); } else if ( v.type() == QVariant::LongLong ) { result = v.toLongLong(); } } return result; } double getDouble( const QVariantMap& map, const QString& key, double d ) { double result = d; if ( map.contains( key ) ) { auto v = map.value( key ); if ( v.type() == QVariant::Int ) { result = v.toInt(); } else if ( v.type() == QVariant::Double ) { result = v.toDouble(); } } return result; } QVariantMap getSubMap( const QVariantMap& map, const QString& key, bool& success ) { success = false; if ( map.contains( key ) ) { auto v = map.value( key ); if ( v.type() == QVariant::Map ) { success = true; return v.toMap(); } } return QVariantMap(); } } // namespace CalamaresUtils calamares-3.2.20/src/libcalamares/utils/Variant.h000066400000000000000000000041151362604102500216510ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2013-2016, Teo Mrnjavac * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef UTILS_VARIANT_H #define UTILS_VARIANT_H #include "DllMacro.h" #include #include namespace CalamaresUtils { /** * Get a bool value from a mapping with a given key; returns the default * if no value is stored in the map. */ DLLEXPORT bool getBool( const QVariantMap& map, const QString& key, bool d ); /** * Get a string value from a mapping; returns empty QString if no value. */ DLLEXPORT QString getString( const QVariantMap& map, const QString& key ); /** * Get an integer value from a mapping; returns @p d if no value. */ DLLEXPORT qint64 getInteger( const QVariantMap& map, const QString& key, qint64 d ); /** * Get a double value from a mapping (integers are converted); returns @p d if no value. */ DLLEXPORT double getDouble( const QVariantMap& map, const QString& key, double d ); /** * Returns a sub-map (i.e. a nested map) from the given mapping with the * given key. @p success is set to true if the @p key exists * in @p map and converts to a map, false otherwise. * * Returns an empty map if there is no such key or it is not a map-value. * (e.g. if @p success is false). */ DLLEXPORT QVariantMap getSubMap( const QVariantMap& map, const QString& key, bool& success ); } // namespace CalamaresUtils #endif calamares-3.2.20/src/libcalamares/utils/Yaml.cpp000066400000000000000000000202211362604102500214760ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac * Copyright 2017-2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "Yaml.h" #include "utils/Logger.h" #include #include #include #include void operator>>( const YAML::Node& node, QStringList& v ) { for ( size_t i = 0; i < node.size(); ++i ) { v.append( QString::fromStdString( node[ i ].as< std::string >() ) ); } } namespace CalamaresUtils { const QRegExp _yamlScalarTrueValues = QRegExp( "true|True|TRUE|on|On|ON" ); const QRegExp _yamlScalarFalseValues = QRegExp( "false|False|FALSE|off|Off|OFF" ); QVariant yamlToVariant( const YAML::Node& node ) { switch ( node.Type() ) { case YAML::NodeType::Scalar: return yamlScalarToVariant( node ); case YAML::NodeType::Sequence: return yamlSequenceToVariant( node ); case YAML::NodeType::Map: return yamlMapToVariant( node ); case YAML::NodeType::Null: case YAML::NodeType::Undefined: return QVariant(); } // NOTREACHED return QVariant(); } QVariant yamlScalarToVariant( const YAML::Node& scalarNode ) { std::string stdScalar = scalarNode.as< std::string >(); QString scalarString = QString::fromStdString( stdScalar ); if ( _yamlScalarTrueValues.exactMatch( scalarString ) ) { return QVariant( true ); } if ( _yamlScalarFalseValues.exactMatch( scalarString ) ) { return QVariant( false ); } if ( QRegExp( "[-+]?\\d+" ).exactMatch( scalarString ) ) { return QVariant( scalarString.toLongLong() ); } if ( QRegExp( "[-+]?\\d*\\.?\\d+" ).exactMatch( scalarString ) ) { return QVariant( scalarString.toDouble() ); } return QVariant( scalarString ); } QVariant yamlSequenceToVariant( const YAML::Node& sequenceNode ) { QVariantList vl; for ( YAML::const_iterator it = sequenceNode.begin(); it != sequenceNode.end(); ++it ) { vl << yamlToVariant( *it ); } return vl; } QVariant yamlMapToVariant( const YAML::Node& mapNode ) { QVariantMap vm; for ( YAML::const_iterator it = mapNode.begin(); it != mapNode.end(); ++it ) { vm.insert( QString::fromStdString( it->first.as< std::string >() ), yamlToVariant( it->second ) ); } return vm; } QStringList yamlToStringList( const YAML::Node& listNode ) { QStringList l; listNode >> l; return l; } void explainYamlException( const YAML::Exception& e, const QByteArray& yamlData, const char* label ) { cWarning() << "YAML error " << e.what() << "in" << label << '.'; explainYamlException( e, yamlData ); } void explainYamlException( const YAML::Exception& e, const QByteArray& yamlData, const QString& label ) { cWarning() << "YAML error " << e.what() << "in" << label << '.'; explainYamlException( e, yamlData ); } void explainYamlException( const YAML::Exception& e, const QByteArray& yamlData ) { if ( ( e.mark.line >= 0 ) && ( e.mark.column >= 0 ) ) { // Try to show the line where it happened. int linestart = 0; for ( int linecount = 0; linecount < e.mark.line; ++linecount ) { linestart = yamlData.indexOf( '\n', linestart ); // No more \ns found, weird if ( linestart < 0 ) { break; } linestart += 1; // Skip that \n } int lineend = linestart; if ( linestart >= 0 ) { lineend = yamlData.indexOf( '\n', linestart ); if ( lineend < 0 ) { lineend = yamlData.length(); } } int rangestart = linestart; int rangeend = lineend; // Adjust range (linestart..lineend) so it's not too long if ( ( linestart >= 0 ) && ( e.mark.column > 30 ) ) { rangestart += ( e.mark.column - 30 ); } if ( ( linestart >= 0 ) && ( rangeend - rangestart > 40 ) ) { rangeend = rangestart + 40; } if ( linestart >= 0 ) { cWarning() << "offending YAML data:" << yamlData.mid( rangestart, rangeend - rangestart ).constData(); } } } QVariantMap loadYaml( const QFileInfo& fi, bool* ok ) { return loadYaml( fi.absoluteFilePath(), ok ); } QVariantMap loadYaml( const QString& filename, bool* ok ) { if ( ok ) { *ok = false; } QFile yamlFile( filename ); QVariant yamlContents; if ( yamlFile.exists() && yamlFile.open( QFile::ReadOnly | QFile::Text ) ) { QByteArray ba = yamlFile.readAll(); try { YAML::Node doc = YAML::Load( ba.constData() ); yamlContents = CalamaresUtils::yamlToVariant( doc ); } catch ( YAML::Exception& e ) { explainYamlException( e, ba, filename ); return QVariantMap(); } } if ( yamlContents.isValid() && !yamlContents.isNull() && yamlContents.type() == QVariant::Map ) { if ( ok ) { *ok = true; } return yamlContents.toMap(); } return QVariantMap(); } /// @brief Convenience function writes @p indent times four spaces static void writeIndent( QFile& f, int indent ) { while ( indent-- > 0 ) { f.write( " " ); } } // forward declaration static bool dumpYaml( QFile& f, const QVariantMap& map, int indent ); // It's a quote static const char quote[] = "\""; static const char newline[] = "\n"; /// @brief Recursive helper to dump a single value static void dumpYamlElement( QFile& f, const QVariant& value, int indent ) { if ( value.type() == QVariant::Type::Bool ) { f.write( value.toBool() ? "true" : "false" ); } else if ( value.type() == QVariant::Type::String ) { f.write( quote ); f.write( value.toString().toUtf8() ); f.write( quote ); } else if ( value.type() == QVariant::Type::Int ) { f.write( QString::number( value.toInt() ).toUtf8() ); } else if ( value.type() == QVariant::Type::Double ) { f.write( QString::number( value.toDouble() ).toUtf8() ); } else if ( value.type() == QVariant::Type::List ) { int c = 0; for ( const auto& it : value.toList() ) { ++c; f.write( newline ); writeIndent( f, indent + 1 ); f.write( "- " ); dumpYamlElement( f, it, indent + 1 ); } if ( !c ) // i.e. list was empty { f.write( "[]" ); } } else if ( value.type() == QVariant::Type::Map ) { f.write( newline ); dumpYaml( f, value.toMap(), indent + 1 ); } else { f.write( "<" ); f.write( value.typeName() ); f.write( ">" ); } } /// @brief Recursive helper to dump @p map to file static bool dumpYaml( QFile& f, const QVariantMap& map, int indent ) { for ( auto it = map.cbegin(); it != map.cend(); ++it ) { writeIndent( f, indent ); f.write( quote ); f.write( it.key().toUtf8() ); f.write( quote ); f.write( ": " ); dumpYamlElement( f, it.value(), indent ); f.write( newline ); } return true; } bool saveYaml( const QString& filename, const QVariantMap& map ) { QFile f( filename ); if ( !f.open( QFile::WriteOnly ) ) { return false; } f.write( "# YAML dump\n---\n" ); return dumpYaml( f, map, 0 ); } } // namespace CalamaresUtils calamares-3.2.20/src/libcalamares/utils/Yaml.h000066400000000000000000000057431362604102500211570ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac * Copyright 2017-2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef UTILS_YAML_H #define UTILS_YAML_H #include #include class QByteArray; class QFileInfo; // The yaml-cpp headers are not C++11 warning-proof, especially // with picky compilers like Clang 8. Since we use Clang for the // find-all-the-warnings case, switch those warnings off for // the we-can't-change-them system headers. #ifdef __clang__ #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" #pragma clang diagnostic ignored "-Wshadow" #pragma clang diagnostic ignored "-Wfloat-equal" #endif #include #ifdef __clang__ #pragma clang diagnostic pop #endif /// @brief Appends all te elements of @p node to the string list @p v void operator>>( const YAML::Node& node, QStringList& v ); namespace CalamaresUtils { /** * Loads a given @p filename and returns the YAML data * as a QVariantMap. If filename doesn't exist, or is * malformed in some way, returns an empty map and sets * @p *ok to false. Otherwise sets @p *ok to true. */ QVariantMap loadYaml( const QString& filename, bool* ok = nullptr ); /** Convenience overload. */ QVariantMap loadYaml( const QFileInfo&, bool* ok = nullptr ); QVariant yamlToVariant( const YAML::Node& node ); QVariant yamlScalarToVariant( const YAML::Node& scalarNode ); QVariant yamlSequenceToVariant( const YAML::Node& sequenceNode ); QVariant yamlMapToVariant( const YAML::Node& mapNode ); /// @brief Returns all the elements of @p listNode in a StringList QStringList yamlToStringList( const YAML::Node& listNode ); /// @brief Save a @p map to @p filename as YAML bool saveYaml( const QString& filename, const QVariantMap& map ); /** * Given an exception from the YAML parser library, explain * what is going on in terms of the data passed to the parser. * Uses @p label when labeling the data source (e.g. "netinstall data") */ void explainYamlException( const YAML::Exception& e, const QByteArray& data, const char* label ); void explainYamlException( const YAML::Exception& e, const QByteArray& data, const QString& label ); void explainYamlException( const YAML::Exception& e, const QByteArray& data ); } // namespace CalamaresUtils #endif calamares-3.2.20/src/libcalamares/utils/moc-warnings.h000066400000000000000000000002031362604102500226430ustar00rootroot00000000000000#ifdef __clang__ #pragma clang diagnostic ignored "-Wextra-semi-stmt" #pragma clang diagnostic ignored "-Wredundant-parens" #endif calamares-3.2.20/src/libcalamaresui/000077500000000000000000000000001362604102500172715ustar00rootroot00000000000000calamares-3.2.20/src/libcalamaresui/Branding.cpp000066400000000000000000000351731362604102500215320ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2017-2019, Adriaan de Groot * Copyright 2018, Raul Rodrigo Segura (raurodse) * Copyright 2019, Camilo Higuita * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "Branding.h" #include "GlobalStorage.h" #include "utils/CalamaresUtilsGui.h" #include "utils/ImageRegistry.h" #include "utils/Logger.h" #include "utils/NamedEnum.h" #include "utils/Yaml.h" #include #include #include #include #include #include #ifdef WITH_KOSRelease #include #include #endif namespace Calamares { Branding* Branding::s_instance = nullptr; Branding* Branding::instance() { return s_instance; } // *INDENT-OFF* // clang-format off const QStringList Branding::s_stringEntryStrings = { "productName", "version", "shortVersion", "versionedName", "shortVersionedName", "shortProductName", "bootloaderEntryName", "productUrl", "supportUrl", "knownIssuesUrl", "releaseNotesUrl" }; const QStringList Branding::s_imageEntryStrings = { "productLogo", "productIcon", "productWelcome", "productWallpaper" }; const QStringList Branding::s_styleEntryStrings = { "sidebarBackground", "sidebarText", "sidebarTextSelect", "sidebarTextHighlight" }; // clang-format on // *INDENT-ON* const NamedEnumTable< Branding::WindowDimensionUnit >& Branding::WindowDimension::suffixes() { using Unit = Branding::WindowDimensionUnit; // *INDENT-OFF* // clang-format off static const NamedEnumTable names{ {"px", Unit::Pixies}, {"em", Unit::Fonties} }; // clang-format on // *INDENT-ON* return names; } /** @brief Load the @p map with strings from @p doc * * Each key-value pair from the sub-map in @p doc identified by @p key * is inserted into the @p map, but the value is first transformed by * the @p transform function, which may change strings. */ static void loadStrings( QMap< QString, QString >& map, const YAML::Node& doc, const std::string& key, const std::function< QString( const QString& ) >& transform ) { if ( !doc[ key ].IsMap() ) { throw YAML::Exception( YAML::Mark(), std::string( "Branding configuration is not a map: " ) + key ); } const auto& config = CalamaresUtils::yamlMapToVariant( doc[ key ] ).toMap(); map.clear(); for ( auto it = config.constBegin(); it != config.constEnd(); ++it ) { map.insert( it.key(), transform( it.value().toString() ) ); } } /** @brief Load the @p map with strings from @p config * * If os-release is supported (with KF5 CoreAddons >= 5.58) then * special substitutions can be done as well. See the branding * documentation for details. */ Branding::Branding( const QString& brandingFilePath, QObject* parent ) : QObject( parent ) , m_descriptorPath( brandingFilePath ) , m_slideshowAPI( 1 ) , m_welcomeStyleCalamares( false ) , m_welcomeExpandingLogo( true ) { cDebug() << "Using Calamares branding file at" << brandingFilePath; QDir componentDir( componentDirectory() ); if ( !componentDir.exists() ) { bail( "Bad component directory path." ); } QFile file( brandingFilePath ); if ( file.exists() && file.open( QFile::ReadOnly | QFile::Text ) ) { QByteArray ba = file.readAll(); try { YAML::Node doc = YAML::Load( ba.constData() ); Q_ASSERT( doc.IsMap() ); m_componentName = QString::fromStdString( doc[ "componentName" ].as< std::string >() ); if ( m_componentName != componentDir.dirName() ) bail( "The branding component name should match the name of the " "component directory." ); initSimpleSettings( doc ); #ifdef WITH_KOSRelease // Copy the os-release information into a QHash for use by KMacroExpander. KOSRelease relInfo; QHash< QString, QString > relMap { std::initializer_list< std::pair< QString, QString > > { { QStringLiteral( "NAME" ), relInfo.name() }, { QStringLiteral( "VERSION" ), relInfo.version() }, { QStringLiteral( "ID" ), relInfo.id() }, { QStringLiteral( "ID_LIKE" ), relInfo.idLike().join( ' ' ) }, { QStringLiteral( "VERSION_CODENAME" ), relInfo.versionCodename() }, { QStringLiteral( "VERSION_ID" ), relInfo.versionId() }, { QStringLiteral( "PRETTY_NAME" ), relInfo.prettyName() }, { QStringLiteral( "HOME_URL" ), relInfo.homeUrl() }, { QStringLiteral( "DOCUMENTATION_URL" ), relInfo.documentationUrl() }, { QStringLiteral( "SUPPORT_URL" ), relInfo.supportUrl() }, { QStringLiteral( "BUG_REPORT_URL" ), relInfo.bugReportUrl() }, { QStringLiteral( "PRIVACY_POLICY_URL" ), relInfo.privacyPolicyUrl() }, { QStringLiteral( "BUILD_ID" ), relInfo.buildId() }, { QStringLiteral( "VARIANT" ), relInfo.variant() }, { QStringLiteral( "VARIANT_ID" ), relInfo.variantId() }, { QStringLiteral( "LOGO" ), relInfo.logo() } } }; auto expand = [&]( const QString& s ) -> QString { return KMacroExpander::expandMacros( s, relMap, QLatin1Char( '@' ) ); }; #else auto expand = []( const QString& s ) -> QString { return s; }; #endif // Massage the strings, images and style sections. loadStrings( m_strings, doc, "strings", expand ); loadStrings( m_images, doc, "images", [&]( const QString& s ) -> QString { // See also image() const QString imageName( expand( s ) ); QFileInfo imageFi( componentDir.absoluteFilePath( imageName ) ); if ( !imageFi.exists() ) { const auto icon = QIcon::fromTheme( imageName ); // Not found, bail out with the filename used if ( icon.isNull() ) { bail( QString( "Image file %1 does not exist." ).arg( imageFi.absoluteFilePath() ) ); } return imageName; // Not turned into a path } return imageFi.absoluteFilePath(); } ); loadStrings( m_style, doc, "style", []( const QString& s ) -> QString { return s; } ); if ( doc[ "slideshow" ].IsSequence() ) { QStringList slideShowPictures; doc[ "slideshow" ] >> slideShowPictures; for ( int i = 0; i < slideShowPictures.count(); ++i ) { QString pathString = slideShowPictures[ i ]; QFileInfo imageFi( componentDir.absoluteFilePath( pathString ) ); if ( !imageFi.exists() ) { bail( QString( "Slideshow file %1 does not exist." ).arg( imageFi.absoluteFilePath() ) ); } slideShowPictures[ i ] = imageFi.absoluteFilePath(); } //FIXME: implement a GenericSlideShow.qml that uses these slideShowPictures } else if ( doc[ "slideshow" ].IsScalar() ) { QString slideshowPath = QString::fromStdString( doc[ "slideshow" ].as< std::string >() ); QFileInfo slideshowFi( componentDir.absoluteFilePath( slideshowPath ) ); if ( !slideshowFi.exists() || !slideshowFi.fileName().toLower().endsWith( ".qml" ) ) bail( QString( "Slideshow file %1 does not exist or is not a valid QML file." ) .arg( slideshowFi.absoluteFilePath() ) ); m_slideshowPath = slideshowFi.absoluteFilePath(); } else { bail( "Syntax error in slideshow sequence." ); } int api = doc[ "slideshowAPI" ].IsScalar() ? doc[ "slideshowAPI" ].as< int >() : -1; if ( ( api < 1 ) || ( api > 2 ) ) { cWarning() << "Invalid or missing *slideshowAPI* in branding file."; api = 1; } m_slideshowAPI = api; } catch ( YAML::Exception& e ) { CalamaresUtils::explainYamlException( e, ba, file.fileName() ); bail( e.what() ); } QDir translationsDir( componentDir.filePath( "lang" ) ); if ( !translationsDir.exists() ) { cWarning() << "the branding component" << componentDir.absolutePath() << "does not ship translations."; } m_translationsPathPrefix = translationsDir.absolutePath(); m_translationsPathPrefix.append( QString( "%1calamares-%2" ).arg( QDir::separator() ).arg( m_componentName ) ); } else { cWarning() << "Cannot read branding file" << file.fileName(); } s_instance = this; if ( m_componentName.isEmpty() ) { cWarning() << "Failed to load component from" << brandingFilePath; } else { cDebug() << "Loaded branding component" << m_componentName; } } QString Branding::componentDirectory() const { QFileInfo fi( m_descriptorPath ); return fi.absoluteDir().absolutePath(); } QString Branding::string( Branding::StringEntry stringEntry ) const { return m_strings.value( s_stringEntryStrings.value( stringEntry ) ); } QString Branding::styleString( Branding::StyleEntry styleEntry ) const { return m_style.value( s_styleEntryStrings.value( styleEntry ) ); } QString Branding::imagePath( Branding::ImageEntry imageEntry ) const { return m_images.value( s_imageEntryStrings.value( imageEntry ) ); } QPixmap Branding::image( Branding::ImageEntry imageEntry, const QSize& size ) const { const auto path = imagePath( imageEntry ); if ( path.contains( '/' ) ) { QPixmap pixmap = ImageRegistry::instance()->pixmap( path, size ); Q_ASSERT( !pixmap.isNull() ); return pixmap; } else { auto icon = QIcon::fromTheme( path ); Q_ASSERT( !icon.isNull() ); return icon.pixmap( size ); } } QPixmap Branding::image( const QString& imageName, const QSize& size ) const { QDir componentDir( componentDirectory() ); QFileInfo imageFi( componentDir.absoluteFilePath( imageName ) ); if ( !imageFi.exists() ) { const auto icon = QIcon::fromTheme( imageName ); // Not found, bail out with the filename used if ( icon.isNull() ) { return QPixmap(); } return icon.pixmap( size ); } return ImageRegistry::instance()->pixmap( imageFi.absoluteFilePath(), size ); } QString Branding::stylesheet() const { QFileInfo fi( m_descriptorPath ); QFileInfo importQSSPath( fi.absoluteDir().filePath( "stylesheet.qss" ) ); if ( importQSSPath.exists() && importQSSPath.isReadable() ) { QFile stylesheetFile( importQSSPath.filePath() ); stylesheetFile.open( QFile::ReadOnly ); return stylesheetFile.readAll(); } else { cWarning() << "The branding component" << fi.absoluteDir().absolutePath() << "does not ship stylesheet.qss."; } return QString(); } void Branding::setGlobals( GlobalStorage* globalStorage ) const { QVariantMap brandingMap; for ( const QString& key : s_stringEntryStrings ) { brandingMap.insert( key, m_strings.value( key ) ); } globalStorage->insert( "branding", brandingMap ); } bool Branding::WindowDimension::isValid() const { return ( unit() != none ) && ( value() > 0 ); } /// @brief Guard against cases where the @p key doesn't exist in @p doc static inline QString getString( const YAML::Node& doc, const char* key ) { if ( doc[ key ] ) { return QString::fromStdString( doc[ key ].as< std::string >() ); } return QString(); } void Branding::initSimpleSettings( const YAML::Node& doc ) { static const NamedEnumTable< WindowExpansion > expansionNames { { QStringLiteral( "normal" ), WindowExpansion::Normal }, { QStringLiteral( "fullscreen" ), WindowExpansion::Fullscreen }, { QStringLiteral( "noexpand" ), WindowExpansion::Fixed } }; static const NamedEnumTable< WindowPlacement > placementNames { { QStringLiteral( "free" ), WindowPlacement::Free }, { QStringLiteral( "center" ), WindowPlacement::Center } }; bool ok = false; m_welcomeStyleCalamares = doc[ "welcomeStyleCalamares" ].as< bool >( false ); m_welcomeExpandingLogo = doc[ "welcomeExpandingLogo" ].as< bool >( true ); m_windowExpansion = expansionNames.find( getString( doc, "windowExpanding" ), ok ); if ( !ok ) { cWarning() << "Branding module-setting *windowExpanding* interpreted as" << expansionNames.find( m_windowExpansion, ok ); } m_windowPlacement = placementNames.find( getString( doc, "windowPlacement" ), ok ); if ( !ok ) { cWarning() << "Branding module-setting *windowPlacement* interpreted as" << placementNames.find( m_windowPlacement, ok ); } QString windowSize = getString( doc, "windowSize" ); if ( !windowSize.isEmpty() ) { auto l = windowSize.split( ',' ); if ( l.count() == 2 ) { m_windowWidth = WindowDimension( l[ 0 ] ); m_windowHeight = WindowDimension( l[ 1 ] ); } } if ( !m_windowWidth.isValid() ) { m_windowWidth = WindowDimension( CalamaresUtils::windowPreferredWidth, WindowDimensionUnit::Pixies ); } if ( !m_windowHeight.isValid() ) { m_windowHeight = WindowDimension( CalamaresUtils::windowPreferredHeight, WindowDimensionUnit::Pixies ); } } [[noreturn]] void Branding::bail( const QString& message ) { cError() << "FATAL in" << m_descriptorPath << "\n" + message; ::exit( EXIT_FAILURE ); } } // namespace Calamares calamares-3.2.20/src/libcalamaresui/Branding.h000066400000000000000000000155361362604102500212000ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2017-2018, Adriaan de Groot * Copyright 2018, Raul Rodrigo Segura (raurodse) * Copyright 2019, Camilo Higuita * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef BRANDING_H #define BRANDING_H #include "DllMacro.h" #include "utils/NamedSuffix.h" #include #include #include namespace YAML { class Node; } namespace Calamares { class GlobalStorage; class UIDLLEXPORT Branding : public QObject { Q_OBJECT public: /** * Descriptive strings in the configuration file. use * e.g. *Branding::ProductName to get the string value for * the product name. */ enum StringEntry { ProductName, Version, ShortVersion, VersionedName, ShortVersionedName, ShortProductName, BootloaderEntryName, ProductUrl, SupportUrl, KnownIssuesUrl, ReleaseNotesUrl }; Q_ENUM( StringEntry ) enum ImageEntry : short { ProductLogo, ProductIcon, ProductWelcome, ProductWallpaper }; Q_ENUM( ImageEntry ) enum StyleEntry : short { SidebarBackground, SidebarText, SidebarTextSelect, SidebarTextHighlight }; Q_ENUM( StyleEntry ) /** @brief Setting for how much the main window may expand. */ enum class WindowExpansion { Normal, Fullscreen, Fixed }; Q_ENUM( WindowExpansion ) /** @brief Setting for the main window size. * * The units are pixels (Pixies) or something-based-on-fontsize (Fonties), which * we suffix as "em", e.g. "600px" or "32em". */ enum class WindowDimensionUnit { None, Pixies, Fonties }; Q_ENUM( WindowDimensionUnit ) class WindowDimension : public NamedSuffix< WindowDimensionUnit, WindowDimensionUnit::None > { public: static const NamedEnumTable< WindowDimensionUnit >& suffixes(); bool isValid() const; using NamedSuffix::NamedSuffix; WindowDimension( const QString& s ) : NamedSuffix( suffixes(), s ) { } }; /** @brief Placement of main window. */ enum class WindowPlacement { Center, Free }; static Branding* instance(); explicit Branding( const QString& brandingFilePath, QObject* parent = nullptr ); /** @brief Complete path of the branding descriptor file. */ QString descriptorPath() const { return m_descriptorPath; } /** @brief The component name found in the descriptor file. * * The component name always matches the last directory name in the path. */ QString componentName() const { return m_componentName; } /** @brief The directory holding all of the branding assets. */ QString componentDirectory() const; /** @brief The directory where branding translations live. * * This is componentDir + "/lang". */ QString translationsDirectory() const { return m_translationsPathPrefix; } /** @brief Path to the slideshow QML file, if any. */ QString slideshowPath() const { return m_slideshowPath; } int slideshowAPI() const { return m_slideshowAPI; } QPixmap image( Branding::ImageEntry imageEntry, const QSize& size ) const; /** @brief Look up an image in the branding directory or as an icon * * The @p name is checked in the branding directory: if it is an image * file, return the pixmap from that file, at the requested size. * If it isn't a file, look it up as an icon name in the current theme. * May return a null pixmap if nothing is found. */ QPixmap image( const QString& name, const QSize& size ) const; /** @brief Stylesheet to apply for this branding. May be empty. * * The file is loaded every time this function is called, so * it may be quite expensive -- although normally it will be * called only once, on startup. (Or from the debug window) */ QString stylesheet() const; bool welcomeStyleCalamares() const { return m_welcomeStyleCalamares; } bool welcomeExpandingLogo() const { return m_welcomeExpandingLogo; } bool windowMaximize() const { return m_windowExpansion == WindowExpansion::Fullscreen; } bool windowExpands() const { return m_windowExpansion != WindowExpansion::Fixed; } QPair< WindowDimension, WindowDimension > windowSize() const { return QPair< WindowDimension, WindowDimension >( m_windowWidth, m_windowHeight ); } bool windowPlacementCentered() const { return m_windowPlacement == WindowPlacement::Center; } /** * Creates a map called "branding" in the global storage, and inserts an * entry for each of the branding strings. This makes the branding * information accessible to the Python modules. */ void setGlobals( GlobalStorage* globalStorage ) const; public slots: QString string( StringEntry stringEntry ) const; QString styleString( StyleEntry styleEntry ) const; QString imagePath( ImageEntry imageEntry ) const; private: static Branding* s_instance; static const QStringList s_stringEntryStrings; static const QStringList s_imageEntryStrings; static const QStringList s_styleEntryStrings; [[noreturn]] void bail( const QString& message ); QString m_descriptorPath; // Path to descriptor (e.g. "/etc/calamares/default/branding.desc") QString m_componentName; // Matches last part of full path to containing directory QMap< QString, QString > m_strings; QMap< QString, QString > m_images; QMap< QString, QString > m_style; QString m_slideshowPath; int m_slideshowAPI; QString m_translationsPathPrefix; /** @brief Initialize the simple settings below */ void initSimpleSettings( const YAML::Node& doc ); bool m_welcomeStyleCalamares; bool m_welcomeExpandingLogo; WindowExpansion m_windowExpansion; WindowDimension m_windowHeight, m_windowWidth; WindowPlacement m_windowPlacement; }; template < typename U > inline QString operator*( U e ) { return Branding::instance()->string( e ); } } // namespace Calamares #endif // BRANDING_H calamares-3.2.20/src/libcalamaresui/CMakeLists.txt000066400000000000000000000044561362604102500220420ustar00rootroot00000000000000# libcalamaresui is the GUI part of Calamares, which includes handling # view modules, view steps, widgets, and branding. # The UI libs use the non-UI library include_directories( ${CMAKE_SOURCE_DIR}/src/libcalamares ${CMAKE_BINARY_DIR}/src/libcalamares ${CMAKE_SOURCE_DIR} ) set( calamaresui_SOURCES modulesystem/CppJobModule.cpp modulesystem/Module.cpp modulesystem/ModuleManager.cpp modulesystem/ProcessJobModule.cpp modulesystem/Requirement.cpp modulesystem/RequirementsChecker.cpp modulesystem/ViewModule.cpp utils/CalamaresUtilsGui.cpp utils/ImageRegistry.cpp utils/Paste.cpp utils/Qml.cpp viewpages/BlankViewStep.cpp viewpages/ExecutionViewStep.cpp viewpages/QmlViewStep.cpp viewpages/ViewStep.cpp widgets/ClickableLabel.cpp widgets/FixedAspectRatioLabel.cpp widgets/WaitingWidget.cpp ${CMAKE_SOURCE_DIR}/3rdparty/waitingspinnerwidget.cpp Branding.cpp ViewManager.cpp ) # Don't warn about third-party sources mark_thirdparty_code( ${CMAKE_SOURCE_DIR}/3rdparty/qjsonitem.cpp ${CMAKE_SOURCE_DIR}/3rdparty/qjsonmodel.cpp ${CMAKE_SOURCE_DIR}/3rdparty/waitingspinnerwidget.cpp ) if( WITH_PYTHON ) list( APPEND calamaresui_SOURCES modulesystem/PythonJobModule.cpp ) endif() if( WITH_PYTHONQT ) include_directories(${PYTHON_INCLUDE_DIRS}) # *_DIRS because we also use extensions include_directories(${PYTHONQT_INCLUDE_DIRS}) list( APPEND calamaresui_SOURCES modulesystem/PythonQtViewModule.cpp utils/PythonQtUtils.cpp viewpages/PythonQtJob.cpp viewpages/PythonQtViewStep.cpp viewpages/PythonQtGlobalStorageWrapper.cpp viewpages/PythonQtUtilsWrapper.cpp ) set( OPTIONAL_PYTHON_LIBRARIES ${PYTHON_LIBRARIES} ${PYTHONQT_LIBRARIES} ) endif() calamares_add_library( calamaresui SOURCES ${calamaresui_SOURCES} EXPORT_MACRO UIDLLEXPORT_PRO LINK_PRIVATE_LIBRARIES ${OPTIONAL_PYTHON_LIBRARIES} LINK_LIBRARIES Qt5::Svg Qt5::QuickWidgets RESOURCES libcalamaresui.qrc EXPORT CalamaresLibraryDepends VERSION ${CALAMARES_VERSION_SHORT} ) if ( KF5CoreAddons_FOUND AND KF5CoreAddons_VERSION VERSION_GREATER_EQUAL 5.58 ) target_compile_definitions( calamaresui PRIVATE WITH_KOSRelease ) endif() calamares-3.2.20/src/libcalamaresui/ViewManager.cpp000066400000000000000000000401111362604102500221770ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Dominic Hayes * Copyright 2019, Gabriel Craciunescu * Copyright 2014-2015, Teo Mrnjavac * Copyright 2017-2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "ViewManager.h" #include "Branding.h" #include "JobQueue.h" #include "Settings.h" #include "utils/Logger.h" #include "utils/Paste.h" #include "utils/Retranslator.h" #include "viewpages/BlankViewStep.h" #include "viewpages/ViewStep.h" #include "viewpages/ExecutionViewStep.h" #include #include #include #include #include namespace Calamares { ViewManager* ViewManager::s_instance = nullptr; ViewManager* ViewManager::instance() { return s_instance; } ViewManager* ViewManager::instance( QObject* parent ) { Q_ASSERT( !s_instance ); s_instance = new ViewManager( parent ); return s_instance; } /** @brief Get a button-sized icon. */ static inline QPixmap getButtonIcon( const QString& name ) { return Calamares::Branding::instance()->image( name, QSize( 22, 22 ) ); } static inline void setButtonIcon( QPushButton* button, const QString& name ) { auto icon = getButtonIcon( name ); if ( button && !icon.isNull() ) { button->setIcon( icon ); } } ViewManager::ViewManager( QObject* parent ) : QObject( parent ) , m_currentStep( 0 ) , m_widget( new QWidget() ) { Q_ASSERT( !s_instance ); QBoxLayout* mainLayout = new QVBoxLayout; m_widget->setLayout( mainLayout ); m_stack = new QStackedWidget( m_widget ); m_stack->setContentsMargins( 0, 0, 0, 0 ); mainLayout->addWidget( m_stack ); // Create buttons and sets an initial icon; the icons may change m_back = new QPushButton( getButtonIcon( QStringLiteral( "go-previous" ) ), tr( "&Back" ), m_widget ); m_back->setObjectName( "view-button-back" ); m_next = new QPushButton( getButtonIcon( QStringLiteral( "go-next" ) ), tr( "&Next" ), m_widget ); m_next->setObjectName( "view-button-next" ); m_quit = new QPushButton( getButtonIcon( QStringLiteral( "dialog-cancel" ) ), tr( "&Cancel" ), m_widget ); m_quit->setObjectName( "view-button-cancel" ); CALAMARES_RETRANSLATE_SLOT( &ViewManager::updateButtonLabels ) QBoxLayout* bottomLayout = new QHBoxLayout; mainLayout->addLayout( bottomLayout ); bottomLayout->addStretch(); bottomLayout->addWidget( m_back ); bottomLayout->addWidget( m_next ); bottomLayout->addSpacing( 12 ); bottomLayout->addWidget( m_quit ); connect( m_next, &QPushButton::clicked, this, &ViewManager::next ); connect( m_back, &QPushButton::clicked, this, &ViewManager::back ); m_back->setEnabled( false ); connect( m_quit, &QPushButton::clicked, this, [this]() { if ( this->confirmCancelInstallation() ) { qApp->quit(); } } ); connect( JobQueue::instance(), &JobQueue::failed, this, &ViewManager::onInstallationFailed ); connect( JobQueue::instance(), &JobQueue::finished, this, &ViewManager::next ); if ( Calamares::Settings::instance()->disableCancel() ) { m_quit->setVisible( false ); } // onInstallationFailed( "Title of Failure", "Body of Failure"); // for testing paste functionality } ViewManager::~ViewManager() { m_widget->deleteLater(); s_instance = nullptr; } QWidget* ViewManager::centralWidget() { return m_widget; } void ViewManager::addViewStep( ViewStep* step ) { insertViewStep( m_steps.size(), step ); // If this is the first inserted view step, update status of "Next" button if ( m_steps.count() == 1 ) { m_next->setEnabled( step->isNextEnabled() ); } } void ViewManager::insertViewStep( int before, ViewStep* step ) { m_steps.insert( before, step ); connect( step, &ViewStep::enlarge, this, &ViewManager::enlarge ); connect( step, &ViewStep::nextStatusChanged, this, [this]( bool status ) { ViewStep* vs = qobject_cast< ViewStep* >( sender() ); if ( vs ) { if ( vs == m_steps.at( m_currentStep ) ) { m_next->setEnabled( status ); } } } ); if ( !step->widget() ) { cError() << "ViewStep" << step->moduleInstanceKey() << "has no widget."; } QLayout* layout = step->widget()->layout(); if ( layout ) { layout->setContentsMargins( 0, 0, 0, 0 ); } m_stack->insertWidget( before, step->widget() ); m_stack->setCurrentIndex( 0 ); step->widget()->setFocus(); } void ViewManager::onInstallationFailed( const QString& message, const QString& details ) { bool shouldOfferWebPaste = false; // TODO: config var cError() << "Installation failed:"; cDebug() << "- message:" << message; cDebug() << "- details:" << details; QString heading = Calamares::Settings::instance()->isSetupMode() ? tr( "Setup Failed" ) : tr( "Installation Failed" ); QString pasteMsg = tr( "Would you like to paste the install log to the web?" ); QString text = "

" + message + "

"; if ( !details.isEmpty() ) { text += "

" + details + "

"; } if ( shouldOfferWebPaste ) { text += "

" + pasteMsg + "

"; } QMessageBox* msgBox = new QMessageBox(); msgBox->setIcon( QMessageBox::Critical ); msgBox->setWindowTitle( tr( "Error" ) ); msgBox->setText( "" + heading + "" ); msgBox->setInformativeText( text ); if ( shouldOfferWebPaste ) { msgBox->setStandardButtons( QMessageBox::Yes | QMessageBox::No ); msgBox->setDefaultButton( QMessageBox::No ); msgBox->button( QMessageBox::Yes )->setText( tr( "&Yes" ) ); msgBox->button( QMessageBox::No )->setText( tr( "&No" ) ); } else { msgBox->setStandardButtons( QMessageBox::Close ); msgBox->setDefaultButton( QMessageBox::Close ); msgBox->button( QMessageBox::Close )->setText( tr( "&Close" ) ); } msgBox->show(); cDebug() << "Calamares will quit when the dialog closes."; connect( msgBox, &QMessageBox::buttonClicked, [msgBox]( QAbstractButton* button ) { if ( msgBox->buttonRole( button ) == QMessageBox::ButtonRole::YesRole ) { // TODO: host and port should be configurable QString pasteUrlMsg = CalamaresUtils::sendLogToPastebin( msgBox, QStringLiteral( "termbin.com" ), 9999 ); QString pasteUrlTitle = tr( "Install Log Paste URL" ); if ( pasteUrlMsg.isEmpty() ) { pasteUrlMsg = tr( "The upload was unsuccessful. No web-paste was done." ); } // TODO: make the URL clickable, or copy it to the clipboard automatically QMessageBox::critical( nullptr, pasteUrlTitle, pasteUrlMsg ); } QApplication::quit(); } ); } void ViewManager::onInitFailed( const QStringList& modules ) { // Because this means the installer / setup program is broken by the distributor, // don't bother being precise about installer / setup wording. QString title( tr( "Calamares Initialization Failed" ) ); QString description( tr( "%1 can not be installed. Calamares was unable to load all of the configured modules. " "This is a problem with the way Calamares is being used by the distribution." ) ); QString detailString; if ( modules.count() > 0 ) { description.append( tr( "
The following modules could not be loaded:" ) ); QStringList details; details << QLatin1String( "
    " ); for ( const auto& m : modules ) { details << QLatin1String( "
  • " ) << m << QLatin1String( "
  • " ); } details << QLatin1String( "
" ); detailString = details.join( QString() ); } insertViewStep( 0, new BlankViewStep( title, description.arg( *Calamares::Branding::ProductName ), detailString ) ); } ViewStepList ViewManager::viewSteps() const { return m_steps; } ViewStep* ViewManager::currentStep() const { return m_steps.value( m_currentStep ); } int ViewManager::currentStepIndex() const { return m_currentStep; } /** @brief Is the given step at @p index an execution step? * * Returns true if the step is an execution step, false otherwise. * Also returns false if the @p index is out of range. */ static inline bool stepIsExecute( const ViewStepList& steps, int index ) { return ( 0 <= index ) && ( index < steps.count() ) && ( qobject_cast< ExecutionViewStep* >( steps.at( index ) ) != nullptr ); } void ViewManager::next() { ViewStep* step = m_steps.at( m_currentStep ); bool executing = false; if ( step->isAtEnd() ) { const auto* const settings = Calamares::Settings::instance(); // Special case when the user clicks next on the very last page in a view phase // and right before switching to an execution phase. // Depending on Calamares::Settings, we show an "are you sure" prompt or not. if ( settings->showPromptBeforeExecution() && stepIsExecute( m_steps, m_currentStep + 1 ) ) { QString title = settings->isSetupMode() ? tr( "Continue with setup?" ) : tr( "Continue with installation?" ); QString question = settings->isSetupMode() ? tr( "The %1 setup program is about to make changes to your " "disk in order to set up %2.
You will not be able " "to undo these changes." ) : tr( "The %1 installer is about to make changes to your " "disk in order to install %2.
You will not be able " "to undo these changes." ); QString confirm = settings->isSetupMode() ? tr( "&Set up now" ) : tr( "&Install now" ); int reply = QMessageBox::question( m_widget, title, question.arg( *Calamares::Branding::ShortProductName, *Calamares::Branding::ShortVersionedName ), confirm, tr( "Go &back" ), QString(), 0 /* default first button, i.e. confirm */, 1 /* escape is second button, i.e. cancel */ ); if ( reply == 1 ) { return; } } m_currentStep++; m_stack->setCurrentIndex( m_currentStep ); // Does nothing if out of range step->onLeave(); if ( m_currentStep < m_steps.count() ) { m_steps.at( m_currentStep )->onActivate(); executing = qobject_cast< ExecutionViewStep* >( m_steps.at( m_currentStep ) ) != nullptr; emit currentStepChanged(); } else { // Reached the end in a weird state (e.g. no finished step after an exec) executing = false; m_next->setEnabled( false ); m_back->setEnabled( false ); } updateCancelEnabled( !settings->disableCancel() && !( executing && settings->disableCancelDuringExec() ) ); } else { step->next(); } if ( m_currentStep < m_steps.count() ) { m_next->setEnabled( !executing && m_steps.at( m_currentStep )->isNextEnabled() ); m_back->setEnabled( !executing && m_steps.at( m_currentStep )->isBackEnabled() ); } updateButtonLabels(); } void ViewManager::updateButtonLabels() { const auto* const settings = Calamares::Settings::instance(); QString nextIsInstallationStep = settings->isSetupMode() ? tr( "&Set up" ) : tr( "&Install" ); QString quitOnCompleteTooltip = settings->isSetupMode() ? tr( "Setup is complete. Close the setup program." ) : tr( "The installation is complete. Close the installer." ); QString cancelBeforeInstallationTooltip = settings->isSetupMode() ? tr( "Cancel setup without changing the system." ) : tr( "Cancel installation without changing the system." ); // If we're going into the execution step / install phase, other message if ( stepIsExecute( m_steps, m_currentStep + 1 ) ) { m_next->setText( nextIsInstallationStep ); setButtonIcon( m_next, "run-install" ); } else { m_next->setText( tr( "&Next" ) ); setButtonIcon( m_next, "go-next" ); } // Going back is always simple m_back->setText( tr( "&Back" ) ); // Cancel button changes label at the end if ( isAtVeryEnd() ) { m_quit->setText( tr( "&Done" ) ); m_quit->setToolTip( quitOnCompleteTooltip ); m_quit->setVisible( true ); // At end, always visible and enabled. setButtonIcon( m_quit, "dialog-ok-apply" ); updateCancelEnabled( true ); } else { if ( settings->disableCancel() ) { m_quit->setVisible( false ); // In case we went back from final } updateCancelEnabled( !settings->disableCancel() && !( stepIsExecute( m_steps, m_currentStep ) && settings->disableCancelDuringExec() ) ); m_quit->setText( tr( "&Cancel" ) ); m_quit->setToolTip( cancelBeforeInstallationTooltip ); setButtonIcon( m_quit, "dialog-cancel" ); } } void ViewManager::back() { ViewStep* step = m_steps.at( m_currentStep ); if ( step->isAtBeginning() && m_currentStep > 0 ) { m_currentStep--; m_stack->setCurrentIndex( m_currentStep ); step->onLeave(); m_steps.at( m_currentStep )->onActivate(); emit currentStepChanged(); } else if ( !step->isAtBeginning() ) { step->back(); } else { return; } m_next->setEnabled( m_steps.at( m_currentStep )->isNextEnabled() ); m_back->setEnabled( m_steps.at( m_currentStep )->isBackEnabled() ); if ( m_currentStep == 0 && m_steps.first()->isAtBeginning() ) { m_back->setEnabled( false ); } updateButtonLabels(); } bool ViewManager::confirmCancelInstallation() { const auto* const settings = Calamares::Settings::instance(); // When we're at the very end, then it's always OK to exit. if ( isAtVeryEnd() ) { return true; } // Not at the very end, cancel/quit might be disabled if ( settings->disableCancel() ) { return false; } if ( settings->disableCancelDuringExec() && stepIsExecute( m_steps, m_currentStep ) ) { return false; } // Otherwise, confirm cancel/quit. QString title = settings->isSetupMode() ? tr( "Cancel setup?" ) : tr( "Cancel installation?" ); QString question = settings->isSetupMode() ? tr( "Do you really want to cancel the current setup process?\n" "The setup program will quit and all changes will be lost." ) : tr( "Do you really want to cancel the current install process?\n" "The installer will quit and all changes will be lost." ); QMessageBox mb( QMessageBox::Question, title, question, QMessageBox::Yes | QMessageBox::No, m_widget ); mb.setDefaultButton( QMessageBox::No ); mb.button( QMessageBox::Yes )->setText( tr( "&Yes" ) ); mb.button( QMessageBox::No )->setText( tr( "&No" ) ); int response = mb.exec(); return response == QMessageBox::Yes; } void ViewManager::updateCancelEnabled( bool enabled ) { m_quit->setEnabled( enabled ); emit cancelEnabled( enabled ); } } // namespace Calamares calamares-3.2.20/src/libcalamaresui/ViewManager.h000066400000000000000000000114701362604102500216520ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2017-2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef VIEWMANAGER_H #define VIEWMANAGER_H #include "DllMacro.h" #include "viewpages/ViewStep.h" #include #include #include namespace Calamares { /** * @brief The ViewManager class handles progression through view pages. * @note Singleton object, only use through ViewManager::instance(). */ class UIDLLEXPORT ViewManager : public QObject { Q_OBJECT public: /** * @brief instance access to the ViewManager singleton. * @return pointer to the singleton instance. */ static ViewManager* instance(); static ViewManager* instance( QObject* parent ); /** * @brief centralWidget always returns the central widget in the Calamares main * window. * @return a pointer to the active QWidget (usually a wizard page provided by a * view module). */ QWidget* centralWidget(); /** * @brief addViewStep appends a view step to the roster. * @param step a pointer to the ViewStep object to add. * @note a ViewStep is the active instance of a view module, it aggregates one * or more view pages, plus zero or more jobs which may be created at runtime. */ void addViewStep( ViewStep* step ); /** * @brief viewSteps returns the list of currently present view steps. * @return the ViewStepList. * This should only return an empty list before startup is complete. */ ViewStepList viewSteps() const; /** * @brief currentStep returns the currently active ViewStep, i.e. the ViewStep * which owns the currently visible view page. * @return the active ViewStep. Do not confuse this with centralWidget(). * @see ViewStep::centralWidget */ ViewStep* currentStep() const; /** * @brief currentStepIndex returns the index of the currently active ViewStep. * @return the index. */ int currentStepIndex() const; /** * @ brief Called when "Cancel" is clicked; asks for confirmation. * Other means of closing Calamares also call this method, e.g. alt-F4. * At the end of installation, no confirmation is asked. Returns true * if the user confirms closing the window. */ bool confirmCancelInstallation(); public slots: /** * @brief next moves forward to the next page of the current ViewStep (if any), * or to the first page of the next ViewStep if the current ViewStep doesn't * have any more pages. */ void next(); /** * @brief back moves backward to the previous page of the current ViewStep (if any), * or to the last page of the previous ViewStep if the current ViewStep doesn't * have any pages before the current one. */ void back(); /** * @brief onInstallationFailed displays an error message when a fatal failure * happens in a ViewStep. * @param message the error string. * @param details the details string. */ void onInstallationFailed( const QString& message, const QString& details ); /** @brief Replaces the stack with a view step stating that initialization failed. * * @param modules a list of failed modules. */ void onInitFailed( const QStringList& modules ); signals: void currentStepChanged(); void enlarge( QSize enlarge ) const; // See ViewStep::enlarge() void cancelEnabled( bool enabled ) const; private: explicit ViewManager( QObject* parent = nullptr ); virtual ~ViewManager() override; void insertViewStep( int before, ViewStep* step ); void updateButtonLabels(); void updateCancelEnabled( bool enabled ); bool isAtVeryEnd() const { return ( m_currentStep >= m_steps.count() ) || ( m_currentStep == m_steps.count() - 1 && m_steps.last()->isAtEnd() ); } static ViewManager* s_instance; ViewStepList m_steps; int m_currentStep; QWidget* m_widget; QStackedWidget* m_stack; QPushButton* m_back; QPushButton* m_next; QPushButton* m_quit; }; } // namespace Calamares #endif // VIEWMANAGER_H calamares-3.2.20/src/libcalamaresui/libcalamaresui.qrc000066400000000000000000000033741362604102500227640ustar00rootroot00000000000000 ../../data/images/yes.svgz ../../data/images/no.svgz ../../data/images/information.svgz ../../data/images/fail.svgz ../../data/images/bugs.svg ../../data/images/help.svg ../../data/images/release.svg ../../data/images/help-donate.svg ../../data/images/partition-disk.svg ../../data/images/partition-partition.svg ../../data/images/partition-alongside.svg ../../data/images/partition-erase-auto.svg ../../data/images/partition-manual.svg ../../data/images/partition-replace-os.svg ../../data/images/boot-environment.svg ../../data/images/partition-table.svg ../../data/images/squid.svg ../../data/images/state-ok.svg ../../data/images/state-warning.svg ../../data/images/state-error.svg calamares-3.2.20/src/libcalamaresui/modulesystem/000077500000000000000000000000001362604102500220235ustar00rootroot00000000000000calamares-3.2.20/src/libcalamaresui/modulesystem/CppJobModule.cpp000066400000000000000000000065211362604102500250560ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac * Copyright 2016, Kevin Kofler * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "CppJobModule.h" #include "CppJob.h" #include "utils/Logger.h" #include "utils/PluginFactory.h" #include #include namespace Calamares { Module::Type CppJobModule::type() const { return Module::Type::Job; } Module::Interface CppJobModule::interface() const { return Module::Interface::QtPlugin; } void CppJobModule::loadSelf() { if ( m_loader ) { CalamaresPluginFactory* pf = qobject_cast< CalamaresPluginFactory* >( m_loader->instance() ); if ( !pf ) { cDebug() << Q_FUNC_INFO << m_loader->errorString(); return; } CppJob* cppJob = pf->create< Calamares::CppJob >(); if ( !cppJob ) { cDebug() << Q_FUNC_INFO << m_loader->errorString(); return; } // cDebug() << "CppJobModule loading self for instance" << instanceKey() // << "\nCppJobModule at address" << this // << "\nCalamares::PluginFactory at address" << pf // << "\nCppJob at address" << cppJob; cppJob->setModuleInstanceKey( instanceKey() ); cppJob->setConfigurationMap( m_configurationMap ); m_job = Calamares::job_ptr( static_cast< Calamares::Job* >( cppJob ) ); m_loaded = true; cDebug() << "CppJobModule" << instanceKey() << "loading complete."; } } JobList CppJobModule::jobs() const { return JobList() << m_job; } void CppJobModule::initFrom( const QVariantMap& moduleDescriptor ) { QDir directory( location() ); QString load; if ( !moduleDescriptor.value( "load" ).toString().isEmpty() ) { load = moduleDescriptor.value( "load" ).toString(); load = directory.absoluteFilePath( load ); } // If a load path is not specified, we look for a plugin to load in the directory. if ( load.isEmpty() || !QLibrary::isLibrary( load ) ) { const QStringList ls = directory.entryList( QStringList { "*.so" } ); if ( !ls.isEmpty() ) { for ( QString entry : ls ) { entry = directory.absoluteFilePath( entry ); if ( QLibrary::isLibrary( entry ) ) { load = entry; break; } } } } m_loader = new QPluginLoader( load ); } CppJobModule::CppJobModule() : Module() , m_loader( nullptr ) { } CppJobModule::~CppJobModule() { delete m_loader; } } // namespace Calamares calamares-3.2.20/src/libcalamaresui/modulesystem/CppJobModule.h000066400000000000000000000030711362604102500245200ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac * Copyright 2016, Kevin Kofler * Copyright 2017, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef CALAMARES_CPPJOBMODULE_H #define CALAMARES_CPPJOBMODULE_H #include "Module.h" #include "DllMacro.h" class QPluginLoader; namespace Calamares { class UIDLLEXPORT CppJobModule : public Module { public: Type type() const override; Interface interface() const override; void loadSelf() override; JobList jobs() const override; protected: void initFrom( const QVariantMap& moduleDescriptor ) override; private: friend class Module; //so only the superclass can instantiate explicit CppJobModule(); virtual ~CppJobModule() override; QPluginLoader* m_loader; job_ptr m_job; }; } // namespace Calamares #endif // CALAMARES_CPPJOBMODULE_H calamares-3.2.20/src/libcalamaresui/modulesystem/Module.cpp000066400000000000000000000212411362604102500237540ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2017-2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "Module.h" #include "CalamaresConfig.h" #include "CppJobModule.h" #include "ProcessJobModule.h" #include "Settings.h" #include "ViewModule.h" #include "utils/Dirs.h" #include "utils/Logger.h" #include "utils/NamedEnum.h" #include "utils/Yaml.h" #ifdef WITH_PYTHON #include "PythonJobModule.h" #endif #ifdef WITH_PYTHONQT #include "PythonQtViewModule.h" #endif #include #include #include #include static const char EMERGENCY[] = "emergency"; namespace Calamares { Module::Module() : m_loaded( false ) { } Module::~Module() {} void Module::initFrom( const Calamares::ModuleSystem::Descriptor& moduleDescriptor, const QString& id ) { m_key = ModuleSystem::InstanceKey( moduleDescriptor.value( "name" ).toString(), id ); if ( moduleDescriptor.contains( EMERGENCY ) ) { m_maybe_emergency = moduleDescriptor[ EMERGENCY ].toBool(); } } Module* Module::fromDescriptor( const Calamares::ModuleSystem::Descriptor& moduleDescriptor, const QString& instanceId, const QString& configFileName, const QString& moduleDirectory ) { std::unique_ptr< Module > m; QString typeString = moduleDescriptor.value( "type" ).toString(); QString intfString = moduleDescriptor.value( "interface" ).toString(); if ( typeString.isEmpty() || intfString.isEmpty() ) { cError() << "Bad module descriptor format" << instanceId; return nullptr; } if ( ( typeString == "view" ) || ( typeString == "viewmodule" ) ) { if ( intfString == "qtplugin" ) { m.reset( new ViewModule() ); } else if ( intfString == "pythonqt" ) { #ifdef WITH_PYTHONQT m.reset( new PythonQtViewModule() ); #else cError() << "PythonQt view modules are not supported in this version of Calamares."; #endif } else { cError() << "Bad interface" << intfString << "for module type" << typeString; } } else if ( typeString == "job" ) { if ( intfString == "qtplugin" ) { m.reset( new CppJobModule() ); } else if ( intfString == "process" ) { m.reset( new ProcessJobModule() ); } else if ( intfString == "python" ) { #ifdef WITH_PYTHON m.reset( new PythonJobModule() ); #else cError() << "Python modules are not supported in this version of Calamares."; #endif } else { cError() << "Bad interface" << intfString << "for module type" << typeString; } } else { cError() << "Bad module type" << typeString; } if ( !m ) { cError() << "Bad module type (" << typeString << ") or interface string (" << intfString << ") for module " << instanceId; return nullptr; } QDir moduleDir( moduleDirectory ); if ( moduleDir.exists() && moduleDir.isReadable() ) { m->m_directory = moduleDir.absolutePath(); } else { cError() << "Bad module directory" << moduleDirectory << "for" << instanceId; return nullptr; } m->initFrom( moduleDescriptor, instanceId ); if ( !m->m_key.isValid() ) { cError() << "Module" << instanceId << "invalid ID"; return nullptr; } m->initFrom( moduleDescriptor ); if ( !configFileName.isEmpty() ) { try { m->loadConfigurationFile( configFileName ); } catch ( YAML::Exception& e ) { cError() << "YAML parser error " << e.what(); return nullptr; } } return m.release(); } static QStringList moduleConfigurationCandidates( bool assumeBuildDir, const QString& moduleName, const QString& configFileName ) { QStringList paths; if ( CalamaresUtils::isAppDataDirOverridden() ) { paths << CalamaresUtils::appDataDir().absoluteFilePath( QString( "modules/%1" ).arg( configFileName ) ); } else { // If an absolute path is given, in debug mode, look for it // first. The case contains('/'), below, will add the absolute // path a second time, though. if ( assumeBuildDir && configFileName.startsWith( '/' ) ) { paths << configFileName; } if ( assumeBuildDir ) { paths << QDir().absoluteFilePath( QString( "src/modules/%1/%2" ).arg( moduleName ).arg( configFileName ) ); } if ( assumeBuildDir && configFileName.contains( '/' ) ) { paths << QDir().absoluteFilePath( configFileName ); } if ( CalamaresUtils::haveExtraDirs() ) for ( auto s : CalamaresUtils::extraConfigDirs() ) { paths << ( s + QString( "modules/%1" ).arg( configFileName ) ); } paths << QString( "/etc/calamares/modules/%1" ).arg( configFileName ); paths << CalamaresUtils::appDataDir().absoluteFilePath( QString( "modules/%1" ).arg( configFileName ) ); } return paths; } void Module::loadConfigurationFile( const QString& configFileName ) //throws YAML::Exception { QStringList configCandidates = moduleConfigurationCandidates( Settings::instance()->debugMode(), name(), configFileName ); for ( const QString& path : configCandidates ) { QFile configFile( path ); if ( configFile.exists() && configFile.open( QFile::ReadOnly | QFile::Text ) ) { QByteArray ba = configFile.readAll(); YAML::Node doc = YAML::Load( ba.constData() ); if ( doc.IsNull() ) { cDebug() << "Found empty module configuration" << path; // Special case: empty config files are valid, // but aren't a map. return; } if ( !doc.IsMap() ) { cWarning() << "Bad module configuration format" << path; return; } cDebug() << "Loaded module configuration" << path; m_configurationMap = CalamaresUtils::yamlMapToVariant( doc ).toMap(); m_emergency = m_maybe_emergency && m_configurationMap.contains( EMERGENCY ) && m_configurationMap[ EMERGENCY ].toBool(); return; } } cDebug() << "No config file for" << name() << "found anywhere at" << Logger::DebugList( configCandidates ); } static const NamedEnumTable< Module::Type >& typeNames() { using Type = Module::Type; // *INDENT-OFF* // clang-format off static const NamedEnumTable< Type > table{ { QStringLiteral( "job" ), Type::Job }, { QStringLiteral( "view" ), Type::View }, { QStringLiteral( "viewmodule" ), Type::View }, { QStringLiteral( "jobmodule" ), Type::Job } }; // *INDENT-ON* // clang-format on return table; } QString Module::typeString() const { bool ok = false; QString v = typeNames().find( type(), ok ); return ok ? v : QString(); } static const NamedEnumTable< Module::Interface >& interfaceNames() { using Interface = Module::Interface; // *INDENT-OFF* // clang-format off static const NamedEnumTable< Interface > table { { QStringLiteral("process"), Interface::Process }, { QStringLiteral("qtplugin"), Interface::QtPlugin }, { QStringLiteral("python"), Interface::Python }, { QStringLiteral("pythonqt"), Interface::PythonQt } }; // *INDENT-ON* // clang-format on return table; } QString Module::interfaceString() const { bool ok = false; QString v = interfaceNames().find( interface(), ok ); return ok ? v : QString(); } QVariantMap Module::configurationMap() { return m_configurationMap; } RequirementsList Module::checkRequirements() { return RequirementsList(); } } // namespace Calamares calamares-3.2.20/src/libcalamaresui/modulesystem/Module.h000066400000000000000000000146451362604102500234330ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2017, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef CALAMARES_MODULE_H #define CALAMARES_MODULE_H #include "Job.h" #include "Requirement.h" #include "DllMacro.h" #include "modulesystem/Descriptor.h" #include "modulesystem/InstanceKey.h" #include #include namespace Calamares { /** * @brief The Module class is a common supertype for Calamares modules. * It enforces a common interface for all the different types of modules, and it * takes care of creating an object of the correct type starting from a module * descriptor structure. */ class UIDLLEXPORT Module { public: /** * @brief The Type enum represents the intended functionality of the module * Every module is either a job module or a view module. * A job module is a single Calamares job. * A view module has a UI (one or more view pages) and zero-to-many jobs. */ enum class Type { Job, View }; /** * @brief The Interface enum represents the interface through which the module * talks to Calamares. * Not all Type-Interface associations are valid. */ enum class Interface { QtPlugin, // Jobs or Views Python, // Jobs only Process, // Deprecated interface PythonQt // Views only, available as enum even if PythonQt isn't used }; /** * @brief fromDescriptor creates a new Module object of the correct type. * @param moduleDescriptor a module descriptor, already parsed into a variant map. * @param instanceId the instance id of the new module instance. * @param configFileName the name of the configuration file to read. * @param moduleDirectory the path to the directory with this module's files. * @return a pointer to an object of a subtype of Module. */ static Module* fromDescriptor( const ModuleSystem::Descriptor& moduleDescriptor, const QString& instanceId, const QString& configFileName, const QString& moduleDirectory ); virtual ~Module(); /** * @brief name returns the name of this module. * @return a string with this module's name. */ QString name() const { return m_key.module(); } /** * @brief instanceId returns the instance id of this module. * @return a string with this module's instance id. */ QString instanceId() const { return m_key.id(); } /** * @brief instanceKey returns the instance key of this module. * @return a string with the instance key. * A module instance's instance key is modulename\@instanceid. * For instance, "partition\@partition" (default configuration) or * "locale\@someconfig" (custom configuration) */ ModuleSystem::InstanceKey instanceKey() const { return m_key; } /** * @brief location returns the full path of this module's directory. * @return the path. */ QString location() const { return m_directory; } /** * @brief Is this an emergency module? * * An emergency module is run even if an error occurs * which would terminate Calamares earlier in the same * *exec* block. Emergency modules in later exec blocks * are not run (in the common case where there is only * one exec block, this doesn't really matter). */ bool isEmergency() const { return m_emergency; } /** * @brief isLoaded reports on the loaded status of a module. * @return true if the module's loading phase has finished, otherwise false. */ bool isLoaded() const { return m_loaded; } /** * @brief configurationMap returns the contents of the configuration file for * this module instance. * @return the instance's configuration, already parsed from YAML into a variant map. */ QVariantMap configurationMap(); /** * @brief typeString returns a user-visible string for the module's type. * @return the type string. */ QString typeString() const; /** * @brief interface returns a user-visible string for the module's interface. * @return the interface string. */ QString interfaceString() const; /** * @brief loadSelf initialized the module. * Subclasses must reimplement this depending on the module type and interface. */ virtual void loadSelf() = 0; /** * @brief jobs returns any jobs exposed by this module. * @return a list of jobs (can be empty). */ virtual JobList jobs() const = 0; /** * @brief type returns the Type of this module object. * @return the type enum value. */ virtual Type type() const = 0; /** * @brief interface the Interface used by this module. * @return the interface enum value. */ virtual Interface interface() const = 0; /** * @brief Check the requirements of this module. */ virtual RequirementsList checkRequirements(); protected: explicit Module(); /// @brief For subclasses to read their part of the descriptor virtual void initFrom( const QVariantMap& moduleDescriptor ) = 0; /// @brief Generic part of descriptor reading (and instance id) void initFrom( const QVariantMap& moduleDescriptor, const QString& id ); QVariantMap m_configurationMap; bool m_loaded = false; bool m_emergency = false; // Based on module and local config bool m_maybe_emergency = false; // Based on the module.desc private: void loadConfigurationFile( const QString& configFileName ); //throws YAML::Exception QString m_directory; ModuleSystem::InstanceKey m_key; }; } // namespace Calamares #endif // CALAMARES_MODULE_H calamares-3.2.20/src/libcalamaresui/modulesystem/ModuleManager.cpp000066400000000000000000000372461362604102500252630ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "ModuleManager.h" #include "Module.h" #include "RequirementsChecker.h" #include "Settings.h" #include "ViewManager.h" #include "utils/Logger.h" #include "utils/Yaml.h" #include "viewpages/ExecutionViewStep.h" #include #include #include namespace Calamares { ModuleManager* ModuleManager::s_instance = nullptr; ModuleManager* ModuleManager::instance() { return s_instance; } ModuleManager::ModuleManager( const QStringList& paths, QObject* parent ) : QObject( parent ) , m_paths( paths ) { Q_ASSERT( !s_instance ); s_instance = this; } ModuleManager::~ModuleManager() { // The map is populated with Module::fromDescriptor(), which allocates on the heap. for ( auto moduleptr : m_loadedModulesByInstanceKey ) { delete moduleptr; } } void ModuleManager::init() { QTimer::singleShot( 0, this, &ModuleManager::doInit ); } void ModuleManager::doInit() { // We start from a list of paths in m_paths. Each of those is a directory that // might (should) contain Calamares modules of any type/interface. // For each modules search path (directory), it is expected that each module // lives in its own subdirectory. This subdirectory must have the same name as // the module name, and must contain a settings file named module.desc. // If at any time the module loading procedure finds something unexpected, it // silently skips to the next module or search path. --Teo 6/2014 for ( const QString& path : m_paths ) { QDir currentDir( path ); if ( currentDir.exists() && currentDir.isReadable() ) { const QStringList subdirs = currentDir.entryList( QDir::AllDirs | QDir::NoDotAndDotDot ); for ( const QString& subdir : subdirs ) { currentDir.setPath( path ); bool success = currentDir.cd( subdir ); if ( success ) { static const char bad_descriptor[] = "ModuleManager potential module descriptor is bad"; QFileInfo descriptorFileInfo( currentDir.absoluteFilePath( QLatin1String( "module.desc" ) ) ); if ( !descriptorFileInfo.exists() ) { cDebug() << bad_descriptor << descriptorFileInfo.absoluteFilePath() << "(missing)"; continue; } if ( !descriptorFileInfo.isReadable() ) { cDebug() << bad_descriptor << descriptorFileInfo.absoluteFilePath() << "(unreadable)"; continue; } bool ok = false; QVariantMap moduleDescriptorMap = CalamaresUtils::loadYaml( descriptorFileInfo, &ok ); QString moduleName = ok ? moduleDescriptorMap.value( "name" ).toString() : QString(); if ( ok && !moduleName.isEmpty() && ( moduleName == currentDir.dirName() ) && !m_availableDescriptorsByModuleName.contains( moduleName ) ) { m_availableDescriptorsByModuleName.insert( moduleName, moduleDescriptorMap ); m_moduleDirectoriesByModuleName.insert( moduleName, descriptorFileInfo.absoluteDir().absolutePath() ); } } else { cWarning() << "ModuleManager module directory is not accessible:" << path << "/" << subdir; } } } else { cDebug() << "ModuleManager module search path does not exist:" << path; } } // At this point m_availableDescriptorsByModuleName is filled with // the modules that were found in the search paths. cDebug() << "Found" << m_availableDescriptorsByModuleName.count() << "modules" << m_moduleDirectoriesByModuleName.count() << "names"; emit initDone(); } QList< ModuleSystem::InstanceKey > ModuleManager::loadedInstanceKeys() { return m_loadedModulesByInstanceKey.keys(); } Calamares::ModuleSystem::Descriptor ModuleManager::moduleDescriptor( const QString& name ) { return m_availableDescriptorsByModuleName.value( name ); } Module* ModuleManager::moduleInstance( const QString& instanceKey ) { return m_loadedModulesByInstanceKey.value( ModuleSystem::InstanceKey::fromString( instanceKey ) ); } /** * @brief Search a list of instance descriptions for one matching @p module and @p id * * @return -1 on failure, otherwise index of the instance that matches. */ static int findCustomInstance( const Settings::InstanceDescriptionList& customInstances, const ModuleSystem::InstanceKey& m ) { for ( int i = 0; i < customInstances.count(); ++i ) { const auto& thisInstance = customInstances[ i ]; if ( thisInstance.value( "module" ) == m.module() && thisInstance.value( "id" ) == m.id() ) { return i; } } return -1; } /** @brief Returns the config file name for the fiven @p instanceKey * * Custom instances have custom config files, non-custom ones * have a .conf file. Returns an empty QString on * errors. */ static QString getConfigFileName( const Settings::InstanceDescriptionList& customInstances, const ModuleSystem::InstanceKey& instanceKey, const ModuleSystem::Descriptor& descriptor ) { if ( instanceKey.isCustom() ) { int found = findCustomInstance( customInstances, instanceKey ); if ( found < 0 ) { // This should already have been checked and failed the module already return QString(); } return customInstances[ found ].value( "config" ); } else { if ( descriptor.value( "noconfig", false ).toBool() ) { // Explicitly set to no-configuration. This doesn't apply // to custom instances (above) since the only reason to // **have** a custom instance is to specify a different // config file for more than one module. return QString(); } return QString( "%1.conf" ).arg( instanceKey.module() ); } } void ModuleManager::loadModules() { if ( checkDependencies() ) { cWarning() << "Some installed modules have unmet dependencies."; } Settings::InstanceDescriptionList customInstances = Settings::instance()->customModuleInstances(); QStringList failedModules; const auto modulesSequence = Settings::instance()->modulesSequence(); for ( const auto& modulePhase : modulesSequence ) { ModuleSystem::Action currentAction = modulePhase.first; foreach ( const QString& moduleEntry, modulePhase.second ) { auto instanceKey = ModuleSystem::InstanceKey::fromString( moduleEntry ); if ( !instanceKey.isValid() ) { cError() << "Wrong module entry format for module" << moduleEntry; failedModules.append( moduleEntry ); continue; } if ( instanceKey.isCustom() ) { int found = findCustomInstance( customInstances, instanceKey ); if ( found < 0 ) { cError() << "Custom instance" << moduleEntry << "not found in custom instances section."; failedModules.append( moduleEntry ); continue; } } ModuleSystem::Descriptor descriptor = m_availableDescriptorsByModuleName.value( instanceKey.module(), ModuleSystem::Descriptor() ); if ( descriptor.isEmpty() ) { cError() << "Module" << instanceKey.toString() << "not found in module search paths." << Logger::DebugList( m_paths ); failedModules.append( instanceKey.toString() ); continue; } QString configFileName = getConfigFileName( customInstances, instanceKey, descriptor ); // So now we can assume that the module entry is at least valid, // that we have a descriptor on hand (and therefore that the // module exists), and that the instance is either default or // defined in the custom instances section. // We still don't know whether the config file for the entry // exists and is valid, but that's the only thing that could fail // from this point on. -- Teo 8/2015 Module* thisModule = m_loadedModulesByInstanceKey.value( instanceKey, nullptr ); if ( thisModule ) { if ( thisModule->isLoaded() ) { // It's been listed before, don't bother loading again. // This can happen for a module listed twice (e.g. with custom instances) cDebug() << "Module" << instanceKey.toString() << "already loaded."; } else { // An attempt was made, earlier, and that failed. // This can happen for a module listed twice (e.g. with custom instances) cError() << "Module" << instanceKey.toString() << "exists but not loaded."; failedModules.append( instanceKey.toString() ); continue; } } else { thisModule = Module::fromDescriptor( descriptor, instanceKey.id(), configFileName, m_moduleDirectoriesByModuleName.value( instanceKey.module() ) ); if ( !thisModule ) { cError() << "Module" << instanceKey.toString() << "cannot be created from descriptor" << configFileName; failedModules.append( instanceKey.toString() ); continue; } if ( !checkModuleDependencies( *thisModule ) ) { // Error message is already printed failedModules.append( instanceKey.toString() ); continue; } // If it's a ViewModule, it also appends the ViewStep to the ViewManager. thisModule->loadSelf(); m_loadedModulesByInstanceKey.insert( instanceKey, thisModule ); if ( !thisModule->isLoaded() ) { cError() << "Module" << instanceKey.toString() << "loading FAILED."; failedModules.append( instanceKey.toString() ); continue; } } // At this point we most certainly have a pointer to a loaded module in // thisModule. We now need to enqueue jobs info into an EVS. if ( currentAction == ModuleSystem::Action::Exec ) { ExecutionViewStep* evs = qobject_cast< ExecutionViewStep* >( Calamares::ViewManager::instance()->viewSteps().last() ); if ( !evs ) // If the last step is not an EVS, we must create it. { evs = new ExecutionViewStep( ViewManager::instance() ); ViewManager::instance()->addViewStep( evs ); } evs->appendJobModuleInstanceKey( instanceKey.toString() ); } } } if ( !failedModules.isEmpty() ) { ViewManager::instance()->onInitFailed( failedModules ); emit modulesFailed( failedModules ); } else { emit modulesLoaded(); } } void ModuleManager::checkRequirements() { cDebug() << "Checking module requirements .."; QVector< Module* > modules( m_loadedModulesByInstanceKey.count() ); int count = 0; for ( const auto& module : m_loadedModulesByInstanceKey ) { modules[ count++ ] = module; } RequirementsChecker* rq = new RequirementsChecker( modules, this ); connect( rq, &RequirementsChecker::requirementsResult, this, &ModuleManager::requirementsResult ); connect( rq, &RequirementsChecker::requirementsComplete, this, &ModuleManager::requirementsComplete ); connect( rq, &RequirementsChecker::requirementsProgress, this, &ModuleManager::requirementsProgress ); connect( rq, &RequirementsChecker::done, rq, &RequirementsChecker::deleteLater ); QTimer::singleShot( 0, rq, &RequirementsChecker::run ); } static QStringList missingRequiredModules( const QStringList& required, const QMap< QString, QVariantMap >& available ) { QStringList l; for ( const QString& depName : required ) { if ( !available.contains( depName ) ) { l.append( depName ); } } return l; } size_t ModuleManager::checkDependencies() { size_t numberRemoved = 0; bool somethingWasRemovedBecauseOfUnmetDependencies = false; // This goes through the map of available modules, and deletes those whose // dependencies are not met, if any. do { somethingWasRemovedBecauseOfUnmetDependencies = false; for ( auto it = m_availableDescriptorsByModuleName.begin(); it != m_availableDescriptorsByModuleName.end(); ++it ) { QStringList unmet = missingRequiredModules( it->value( "requiredModules" ).toStringList(), m_availableDescriptorsByModuleName ); if ( unmet.count() > 0 ) { QString moduleName = it->value( "name" ).toString(); somethingWasRemovedBecauseOfUnmetDependencies = true; m_availableDescriptorsByModuleName.erase( it ); numberRemoved++; cWarning() << "Module" << moduleName << "requires missing modules" << Logger::DebugList( unmet ); break; } } } while ( somethingWasRemovedBecauseOfUnmetDependencies ); return numberRemoved; } bool ModuleManager::checkModuleDependencies( const Module& m ) { bool allRequirementsFound = true; QStringList requiredModules = m_availableDescriptorsByModuleName[ m.name() ].value( "requiredModules" ).toStringList(); for ( const QString& required : requiredModules ) { bool requirementFound = false; for ( const Module* v : m_loadedModulesByInstanceKey ) if ( required == v->name() ) { requirementFound = true; break; } if ( !requirementFound ) { cError() << "Module" << m.name() << "requires" << required << "before it in sequence."; allRequirementsFound = false; } } return allRequirementsFound; } } // namespace Calamares calamares-3.2.20/src/libcalamaresui/modulesystem/ModuleManager.h000066400000000000000000000111101362604102500247060ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef MODULELOADER_H #define MODULELOADER_H #include "modulesystem/Descriptor.h" #include "modulesystem/InstanceKey.h" #include "Requirement.h" #include #include #include namespace Calamares { class Module; struct RequirementEntry; // from Requirement.h /** * @brief The ModuleManager class is a singleton which manages Calamares modules. * * It goes through the module search directories and reads module metadata. It then * constructs objects of type Module, loads them and makes them accessible by their * instance key. */ class ModuleManager : public QObject { Q_OBJECT public: explicit ModuleManager( const QStringList& paths, QObject* parent = nullptr ); virtual ~ModuleManager() override; static ModuleManager* instance(); /** * @brief init goes through the module search directories and gets a list of * modules available for loading, along with their metadata. * This information is stored as a map of Module* objects, indexed by name. */ void init(); /** * @brief loadedInstanceKeys returns a list of instance keys for the available * modules. * @return a QStringList with the instance keys. */ QList< ModuleSystem::InstanceKey > loadedInstanceKeys(); /** * @brief moduleDescriptor returns the module descriptor structure for a given module. * @param name the name of the module for which to return the module descriptor. * @return the module descriptor, as a variant map already parsed from YAML. */ ModuleSystem::Descriptor moduleDescriptor( const QString& name ); /** * @brief moduleInstance returns a Module object for a given instance key. * @param instanceKey the instance key for a module instance. * @return a pointer to an object of a subtype of Module. */ Module* moduleInstance( const QString& instanceKey ); /** * @brief loadModules does all of the module loading operation. * When this is done, the signal modulesLoaded is emitted. * It is recommended to call this from a single-shot QTimer. */ void loadModules(); /** * @brief Starts asynchronous requirements checking for each module. * When this is done, the signal modulesChecked is emitted. */ void checkRequirements(); signals: void initDone(); void modulesLoaded(); /// All of the modules were loaded successfully void modulesFailed( QStringList ); /// .. or not // Below, see RequirementsChecker documentation void requirementsComplete( bool ); void requirementsResult( RequirementsList ); void requirementsProgress( const QString& ); private slots: void doInit(); private: /** * Check in a general sense whether the dependencies between * modules are valid. Returns the number of modules that * have missing dependencies -- this is **not** a problem * unless any of those modules are actually used. * * Returns 0 on success. * * Also modifies m_availableDescriptorsByModuleName to remove * all the entries that (so that later, when we try to look * them up, they are not found). */ size_t checkDependencies(); /** * Check for this specific module if its required modules have * already been loaded (i.e. are in sequence before it). * * Returns true if the requirements are met. */ bool checkModuleDependencies( const Module& ); QMap< QString, ModuleSystem::Descriptor > m_availableDescriptorsByModuleName; QMap< QString, QString > m_moduleDirectoriesByModuleName; QMap< ModuleSystem::InstanceKey, Module* > m_loadedModulesByInstanceKey; const QStringList m_paths; static ModuleManager* s_instance; }; } // namespace Calamares #endif // MODULELOADER_H calamares-3.2.20/src/libcalamaresui/modulesystem/ProcessJobModule.cpp000066400000000000000000000045631362604102500257560ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "ProcessJobModule.h" #include "ProcessJob.h" #include namespace Calamares { Module::Type ProcessJobModule::type() const { return Module::Type::Job; } Module::Interface ProcessJobModule::interface() const { return Module::Interface::Process; } void ProcessJobModule::loadSelf() { if ( m_loaded ) { return; } m_job = job_ptr( new ProcessJob( m_command, m_workingPath, m_runInChroot, m_secondsTimeout ) ); m_loaded = true; } JobList ProcessJobModule::jobs() const { return JobList() << m_job; } void ProcessJobModule::initFrom( const QVariantMap& moduleDescriptor ) { QDir directory( location() ); m_workingPath = directory.absolutePath(); if ( !moduleDescriptor.value( "command" ).toString().isEmpty() ) { m_command = moduleDescriptor.value( "command" ).toString(); } m_secondsTimeout = std::chrono::seconds( 30 ); if ( moduleDescriptor.contains( "timeout" ) && !moduleDescriptor.value( "timeout" ).isNull() ) { int sec = moduleDescriptor.value( "timeout" ).toInt(); if ( sec < 0 ) { sec = 0; } m_secondsTimeout = std::chrono::seconds( sec ); } m_runInChroot = false; if ( moduleDescriptor.contains( "chroot" ) && !moduleDescriptor.value( "chroot" ).isNull() ) { m_runInChroot = moduleDescriptor.value( "chroot" ).toBool(); } } ProcessJobModule::ProcessJobModule() : Module() , m_secondsTimeout( std::chrono::seconds( 30 ) ) , m_runInChroot( false ) { } ProcessJobModule::~ProcessJobModule() {} } // namespace Calamares calamares-3.2.20/src/libcalamaresui/modulesystem/ProcessJobModule.h000066400000000000000000000031021362604102500254070ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac * Copyright 2017, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef CALAMARES_PROCESSJOBMODULE_H #define CALAMARES_PROCESSJOBMODULE_H #include "Module.h" #include "DllMacro.h" #include namespace Calamares { class UIDLLEXPORT ProcessJobModule : public Module { public: Type type() const override; Interface interface() const override; void loadSelf() override; JobList jobs() const override; protected: void initFrom( const QVariantMap& moduleDescriptor ) override; private: friend class Module; explicit ProcessJobModule(); virtual ~ProcessJobModule() override; QString m_command; QString m_workingPath; std::chrono::seconds m_secondsTimeout; bool m_runInChroot; job_ptr m_job; }; } // namespace Calamares #endif // CALAMARES_PROCESSJOBMODULE_H calamares-3.2.20/src/libcalamaresui/modulesystem/PythonJobModule.cpp000066400000000000000000000034061362604102500256140ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "PythonJobModule.h" #include "PythonJob.h" #include namespace Calamares { Module::Type PythonJobModule::type() const { return Module::Type::Job; } Module::Interface PythonJobModule::interface() const { return Module::Interface::Python; } void PythonJobModule::loadSelf() { if ( m_loaded ) { return; } m_job = Calamares::job_ptr( new PythonJob( instanceKey(), m_scriptFileName, m_workingPath, m_configurationMap ) ); m_loaded = true; } JobList PythonJobModule::jobs() const { return JobList() << m_job; } void PythonJobModule::initFrom( const QVariantMap& moduleDescriptor ) { QDir directory( location() ); m_workingPath = directory.absolutePath(); if ( !moduleDescriptor.value( "script" ).toString().isEmpty() ) { m_scriptFileName = moduleDescriptor.value( "script" ).toString(); } } PythonJobModule::PythonJobModule() : Module() { } PythonJobModule::~PythonJobModule() {} } // namespace Calamares calamares-3.2.20/src/libcalamaresui/modulesystem/PythonJobModule.h000066400000000000000000000026671362604102500252710ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef CALAMARES_PYTHONJOBMODULE_H #define CALAMARES_PYTHONJOBMODULE_H #include "Module.h" #include "DllMacro.h" namespace Calamares { class UIDLLEXPORT PythonJobModule : public Module { public: Type type() const override; Interface interface() const override; void loadSelf() override; JobList jobs() const override; protected: void initFrom( const QVariantMap& moduleDescriptor ) override; private: friend class Module; explicit PythonJobModule(); virtual ~PythonJobModule() override; QString m_scriptFileName; QString m_workingPath; job_ptr m_job; }; } // namespace Calamares #endif // CALAMARES_PYTHONJOBMODULE_H calamares-3.2.20/src/libcalamaresui/modulesystem/PythonQtViewModule.cpp000066400000000000000000000144261362604102500263250ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2016, Teo Mrnjavac * Copyright 2018, Adriaan de Groot * Copyright 2018, Raul Rodrigo Segura * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "PythonQtViewModule.h" #include "CalamaresConfig.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "ViewManager.h" #include "utils/Logger.h" #include "viewpages/PythonQtGlobalStorageWrapper.h" #include "viewpages/PythonQtUtilsWrapper.h" #include "viewpages/PythonQtViewStep.h" #include "viewpages/ViewStep.h" #include #include #include #include static QPointer< GlobalStorage > s_gs = nullptr; static QPointer< Utils > s_utils = nullptr; namespace Calamares { Module::Type PythonQtViewModule::type() const { return Module::Type::View; } Module::Interface PythonQtViewModule::interface() const { return Module::Interface::PythonQt; } void PythonQtViewModule::loadSelf() { if ( !m_scriptFileName.isEmpty() ) { if ( PythonQt::self() == nullptr ) { if ( Py_IsInitialized() ) PythonQt::init( PythonQt::IgnoreSiteModule | PythonQt::RedirectStdOut | PythonQt::PythonAlreadyInitialized ); else { PythonQt::init(); } PythonQt_QtAll::init(); cDebug() << "Initializing PythonQt bindings." << "This should only happen once."; //TODO: register classes here into the PythonQt environment, like this: //PythonQt::self()->registerClass( &PythonQtViewStep::staticMetaObject, // "calamares" ); // We only do the following to force PythonQt to create a submodule // "calamares" for us to put our static objects in PythonQt::self()->registerClass( &::GlobalStorage::staticMetaObject, "calamares" ); // Get a PythonQtObjectPtr to the PythonQt.calamares submodule PythonQtObjectPtr pqtm = PythonQt::priv()->pythonQtModule(); PythonQtObjectPtr cala = PythonQt::self()->lookupObject( pqtm, "calamares" ); // Prepare GlobalStorage object, in module PythonQt.calamares if ( !s_gs ) { s_gs = new ::GlobalStorage( Calamares::JobQueue::instance()->globalStorage() ); } cala.addObject( "global_storage", s_gs ); // Prepare Utils object, in module PythonQt.calamares if ( !s_utils ) { s_utils = new ::Utils( Calamares::JobQueue::instance()->globalStorage() ); } cala.addObject( "utils", s_utils ); // Append configuration object, in module PythonQt.calamares cala.addVariable( "configuration", m_configurationMap ); // Basic stdout/stderr handling QObject::connect( PythonQt::self(), &PythonQt::pythonStdOut, []( const QString& message ) { cDebug() << "PythonQt OUT>" << message; } ); QObject::connect( PythonQt::self(), &PythonQt::pythonStdErr, []( const QString& message ) { cDebug() << "PythonQt ERR>" << message; } ); } QDir workingDir( m_workingPath ); if ( !workingDir.exists() ) { cDebug() << "Invalid working directory" << m_workingPath << "for module" << name(); return; } QString fullPath = workingDir.absoluteFilePath( m_scriptFileName ); QFileInfo scriptFileInfo( fullPath ); if ( !scriptFileInfo.isReadable() ) { cDebug() << "Invalid main script file path" << fullPath << "for module" << name(); return; } // Construct empty Python module with the given name PythonQtObjectPtr cxt = PythonQt::self()->createModuleFromScript( name() ); if ( cxt.isNull() ) { cDebug() << "Cannot load PythonQt context from file" << fullPath << "for module" << name(); return; } static const QLatin1String calamares_module_annotation( "_calamares_module_typename = ''\n" "def calamares_module(viewmodule_type):\n" " global _calamares_module_typename\n" " _calamares_module_typename = viewmodule_type.__name__\n" " return viewmodule_type\n" ); // Load in the decorator PythonQt::self()->evalScript( cxt, calamares_module_annotation ); // Load the module PythonQt::self()->evalFile( cxt, fullPath ); m_viewStep = new PythonQtViewStep( cxt ); cDebug() << "PythonQtViewModule loading self for instance" << instanceKey() << "\nPythonQtViewModule at address" << this << "\nViewStep at address" << m_viewStep; m_viewStep->setModuleInstanceKey( instanceKey() ); m_viewStep->setConfigurationMap( m_configurationMap ); ViewManager::instance()->addViewStep( m_viewStep ); m_loaded = true; cDebug() << "PythonQtViewModule" << instanceKey() << "loading complete."; } } JobList PythonQtViewModule::jobs() const { return m_viewStep->jobs(); } void PythonQtViewModule::initFrom( const QVariantMap& moduleDescriptor ) { QDir directory( location() ); m_workingPath = directory.absolutePath(); if ( !moduleDescriptor.value( "script" ).toString().isEmpty() ) { m_scriptFileName = moduleDescriptor.value( "script" ).toString(); } } PythonQtViewModule::PythonQtViewModule() : Module() { } PythonQtViewModule::~PythonQtViewModule() {} } // namespace Calamares calamares-3.2.20/src/libcalamaresui/modulesystem/PythonQtViewModule.h000066400000000000000000000030141362604102500257610ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2016, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef CALAMARES_PYTHONQTVIEWMODULE_H #define CALAMARES_PYTHONQTVIEWMODULE_H #include "Module.h" #include "DllMacro.h" namespace Calamares { class ViewStep; class UIDLLEXPORT PythonQtViewModule : public Module { public: Type type() const override; Interface interface() const override; void loadSelf() override; JobList jobs() const override; protected: void initFrom( const QVariantMap& moduleDescriptor ) override; private: friend class Module; //so only the superclass can instantiate explicit PythonQtViewModule(); virtual ~PythonQtViewModule(); ViewStep* m_viewStep = nullptr; QString m_scriptFileName; QString m_workingPath; }; } // namespace Calamares #endif // CALAMARES_PYTHONQTVIEWMODULE_H calamares-3.2.20/src/libcalamaresui/modulesystem/Requirement.cpp000066400000000000000000000014621362604102500250320ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2017, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "Requirement.h" calamares-3.2.20/src/libcalamaresui/modulesystem/Requirement.h000066400000000000000000000041571362604102500245030ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2017, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef CALAMARES_REQUIREMENT_H #define CALAMARES_REQUIREMENT_H #include #include #include #include namespace Calamares { /** * An indication of a requirement, which is checked in preparation * for system installation. An entry has a name and some explanation functions * (functions, because they need to respond to translations). * * A requirement can be *satisfied* or not. * A requirement can be optional (i.e. a "good to have") or mandatory. * * Requirements which are not satisfied, and also mandatory, will prevent the * installation from proceeding. */ struct RequirementEntry { using TextFunction = std::function< QString() >; /// @brief name of this requirement; not shown to user and used as ID QString name; /// @brief Detailed description of this requirement, for use in user-visible lists TextFunction enumerationText; /// @brief User-visible string to show that the requirement is not met, short form TextFunction negatedText; bool satisfied; bool mandatory; /// @brief Convenience to check if this entry should be shown in details dialog bool hasDetails() const { return !enumerationText().isEmpty(); } }; using RequirementsList = QList< RequirementEntry >; } // namespace Calamares Q_DECLARE_METATYPE( Calamares::RequirementEntry ) #endif calamares-3.2.20/src/libcalamaresui/modulesystem/RequirementsChecker.cpp000066400000000000000000000123711362604102500265030ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "RequirementsChecker.h" #include "Module.h" #include "Requirement.h" #include "utils/Logger.h" #include #include #include #include #include namespace Calamares { static void registerMetatypes() { static bool done = false; if ( !done ) { qRegisterMetaType< RequirementEntry >( "RequirementEntry" ); // It's sensitive to the names of types in parameters; in particular // althrough QList is the same as RequirementsList, // because we *name* the type as RequirementsList in the parameters, // we need to register that (as well). Here, be safe and register // both names. qRegisterMetaType< QList< RequirementEntry > >( "QList" ); qRegisterMetaType< RequirementsList >( "RequirementsList" ); done = true; } } static void check( Module* const& m, RequirementsChecker* c ) { RequirementsList l = m->checkRequirements(); if ( l.count() > 0 ) { c->addCheckedRequirements( l ); } c->requirementsProgress( QObject::tr( "Requirements checking for module %1 is complete." ).arg( m->name() ) ); } RequirementsChecker::RequirementsChecker( QVector< Module* > modules, QObject* parent ) : QObject( parent ) , m_modules( std::move( modules ) ) , m_progressTimer( nullptr ) , m_progressTimeouts( 0 ) { m_watchers.reserve( m_modules.count() ); m_collectedRequirements.reserve( m_modules.count() ); registerMetatypes(); } RequirementsChecker::~RequirementsChecker() {} void RequirementsChecker::run() { m_progressTimer = new QTimer( this ); connect( m_progressTimer, &QTimer::timeout, this, &RequirementsChecker::reportProgress ); m_progressTimer->start( 1200 ); // msec for ( const auto& module : m_modules ) { Watcher* watcher = new Watcher( this ); watcher->setFuture( QtConcurrent::run( check, module, this ) ); watcher->setObjectName( module->name() ); m_watchers.append( watcher ); connect( watcher, &Watcher::finished, this, &RequirementsChecker::finished ); } QTimer::singleShot( 0, this, &RequirementsChecker::finished ); } void RequirementsChecker::finished() { static QMutex finishedMutex; QMutexLocker lock( &finishedMutex ); if ( m_progressTimer && std::all_of( m_watchers.cbegin(), m_watchers.cend(), []( const Watcher* w ) { return w && w->isFinished(); } ) ) { cDebug() << "All requirements have been checked."; if ( m_progressTimer ) { m_progressTimer->stop(); delete m_progressTimer; m_progressTimer = nullptr; } bool acceptable = true; int count = 0; for ( const auto& r : m_collectedRequirements ) { if ( r.mandatory && !r.satisfied ) { cDebug() << Logger::SubEntry << "requirement" << count << r.name << "is not satisfied."; acceptable = false; } ++count; } emit requirementsComplete( acceptable ); QTimer::singleShot( 0, this, &RequirementsChecker::done ); } } void RequirementsChecker::addCheckedRequirements( RequirementsList l ) { static QMutex addMutex; { QMutexLocker lock( &addMutex ); m_collectedRequirements.append( l ); } cDebug() << "Added" << l.count() << "requirement results"; emit requirementsResult( l ); } void RequirementsChecker::reportProgress() { m_progressTimeouts++; QStringList remainingNames; auto remaining = std::count_if( m_watchers.cbegin(), m_watchers.cend(), [&]( const Watcher* w ) { if ( w && !w->isFinished() ) { remainingNames << w->objectName(); return true; } return false; } ); if ( remaining > 0 ) { cDebug() << "Remaining modules:" << remaining << Logger::DebugList( remainingNames ); unsigned int posInterval = ( m_progressTimer->interval() < 0 ) ? 1000 : uint( m_progressTimer->interval() ); QString waiting = tr( "Waiting for %n module(s).", "", remaining ); QString elapsed = tr( "(%n second(s))", "", m_progressTimeouts * posInterval / 1000 ); emit requirementsProgress( waiting + QString( " " ) + elapsed ); } else { emit requirementsProgress( tr( "System-requirements checking is complete." ) ); } } } // namespace Calamares calamares-3.2.20/src/libcalamaresui/modulesystem/RequirementsChecker.h000066400000000000000000000047101362604102500261460ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef CALAMARES_REQUIREMENTSCHECKER_H #define CALAMARES_REQUIREMENTSCHECKER_H #include "Requirement.h" #include #include #include #include namespace Calamares { class Module; /** @brief A manager-class that checks all the module requirements * * Asynchronously checks the requirements for each module, and * emits progress signals as appropriate. */ class RequirementsChecker : public QObject { Q_OBJECT public: RequirementsChecker( QVector< Module* > modules, QObject* parent = nullptr ); virtual ~RequirementsChecker() override; public slots: /// @brief Start checking all the requirements void run(); /// @brief Called when requirements are reported by a module void addCheckedRequirements( RequirementsList ); /// @brief Called when all requirements have been checked void finished(); /// @brief Called periodically while requirements are being checked void reportProgress(); signals: /// @brief Human-readable progress message void requirementsProgress( const QString& ); /// @brief Requirements from a single module void requirementsResult( RequirementsList ); /** @brief When all requirements are collected * * The argument indicates if all mandatory requirements are satisfied. */ void requirementsComplete( bool ); /// @brief Emitted after requirementsComplete void done(); private: QVector< Module* > m_modules; using Watcher = QFutureWatcher< void >; QVector< Watcher* > m_watchers; RequirementsList m_collectedRequirements; QTimer* m_progressTimer; unsigned m_progressTimeouts; }; } // namespace Calamares #endif calamares-3.2.20/src/libcalamaresui/modulesystem/ViewModule.cpp000066400000000000000000000065561362604102500246230ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac * Copyright 2017-2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "ViewModule.h" #include "ViewManager.h" #include "utils/Logger.h" #include "utils/PluginFactory.h" #include "viewpages/ViewStep.h" #include #include namespace Calamares { Module::Type ViewModule::type() const { return Module::Type::View; } Module::Interface ViewModule::interface() const { return Module::Interface::QtPlugin; } void ViewModule::loadSelf() { if ( m_loader ) { CalamaresPluginFactory* pf = qobject_cast< CalamaresPluginFactory* >( m_loader->instance() ); if ( !pf ) { cWarning() << Q_FUNC_INFO << "No factory:" << m_loader->errorString(); return; } m_viewStep = pf->create< Calamares::ViewStep >(); if ( !m_viewStep ) { cWarning() << Q_FUNC_INFO << "create() failed" << m_loader->errorString(); return; } } // If any method created the view step, use it now. if ( m_viewStep ) { m_viewStep->setModuleInstanceKey( instanceKey() ); m_viewStep->setConfigurationMap( m_configurationMap ); ViewManager::instance()->addViewStep( m_viewStep ); m_loaded = true; cDebug() << "ViewModule" << instanceKey() << "loading complete."; } else { cWarning() << Q_FUNC_INFO << "No view step was created"; } } JobList ViewModule::jobs() const { return m_viewStep->jobs(); } void ViewModule::initFrom( const QVariantMap& moduleDescriptor ) { QDir directory( location() ); QString load; if ( !moduleDescriptor.value( "load" ).toString().isEmpty() ) { load = moduleDescriptor.value( "load" ).toString(); load = directory.absoluteFilePath( load ); } // If a load path is not specified, we look for a plugin to load in the directory. if ( load.isEmpty() || !QLibrary::isLibrary( load ) ) { const QStringList ls = directory.entryList( QStringList { "*.so" } ); if ( !ls.isEmpty() ) { for ( QString entry : ls ) { entry = directory.absoluteFilePath( entry ); if ( QLibrary::isLibrary( entry ) ) { load = entry; break; } } } } m_loader = new QPluginLoader( load ); } ViewModule::ViewModule() : Module() , m_loader( nullptr ) { } ViewModule::~ViewModule() { delete m_loader; } RequirementsList ViewModule::checkRequirements() { return m_viewStep->checkRequirements(); } } // namespace Calamares calamares-3.2.20/src/libcalamaresui/modulesystem/ViewModule.h000066400000000000000000000031101362604102500242470ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac * Copyright 2017, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef CALAMARES_VIEWMODULE_H #define CALAMARES_VIEWMODULE_H #include "Module.h" #include "DllMacro.h" class QPluginLoader; namespace Calamares { class ViewStep; class UIDLLEXPORT ViewModule : public Module { public: Type type() const override; Interface interface() const override; void loadSelf() override; JobList jobs() const override; RequirementsList checkRequirements() override; protected: void initFrom( const QVariantMap& moduleDescriptor ) override; private: friend class Module; //so only the superclass can instantiate explicit ViewModule(); virtual ~ViewModule() override; QPluginLoader* m_loader; ViewStep* m_viewStep = nullptr; }; } // namespace Calamares #endif // CALAMARES_VIEWMODULE_H calamares-3.2.20/src/libcalamaresui/utils/000077500000000000000000000000001362604102500204315ustar00rootroot00000000000000calamares-3.2.20/src/libcalamaresui/utils/CalamaresUtilsGui.cpp000066400000000000000000000150021362604102500245110ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2017-2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "CalamaresUtilsGui.h" #include "ImageRegistry.h" #include #include #include #include #include #include #include #define RESPATH ":/data/" namespace CalamaresUtils { static int s_defaultFontSize = 0; static int s_defaultFontHeight = 0; QPixmap defaultPixmap( ImageType type, ImageMode mode, const QSize& size ) { Q_UNUSED( mode ) QPixmap pixmap; switch ( type ) { case Yes: pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/yes.svgz", size ); break; case No: pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/no.svgz", size ); break; case Information: pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/information.svgz", size ); break; case Fail: pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/fail.svgz", size ); break; case Bugs: pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/bugs.svg", size ); break; case Help: pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/help.svg", size ); break; case Release: pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/release.svg", size ); break; case Donate: pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/donate.svg", size ); break; case PartitionDisk: pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/partition-disk.svg", size ); break; case PartitionPartition: pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/partition-partition.svg", size ); break; case PartitionAlongside: pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/partition-alongside.svg", size ); break; case PartitionEraseAuto: pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/partition-erase-auto.svg", size ); break; case PartitionManual: pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/partition-manual.svg", size ); break; case PartitionReplaceOs: pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/partition-replace-os.svg", size ); break; case PartitionTable: pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/partition-table.svg", size ); break; case BootEnvironment: pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/boot-environment.svg", size ); break; case Squid: pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/squid.svg", size ); break; case StatusOk: pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/state-ok.svg", size ); break; case StatusWarning: pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/state-warning.svg", size ); break; case StatusError: pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/state-error.svg", size ); break; } if ( pixmap.isNull() ) { Q_ASSERT( false ); return QPixmap(); } return pixmap; } QPixmap createRoundedImage( const QPixmap& pixmap, const QSize& size, float frameWidthPct ) { int height; int width; if ( !size.isEmpty() ) { height = size.height(); width = size.width(); } else { height = pixmap.height(); width = pixmap.width(); } if ( !height || !width ) { return QPixmap(); } QPixmap scaledAvatar = pixmap.scaled( width, height, Qt::IgnoreAspectRatio, Qt::SmoothTransformation ); if ( frameWidthPct == 0.00f ) { return scaledAvatar; } QPixmap frame( width, height ); frame.fill( Qt::transparent ); QPainter painter( &frame ); painter.setRenderHint( QPainter::Antialiasing ); QRect outerRect( 0, 0, width, height ); QBrush brush( scaledAvatar ); QPen pen; pen.setColor( Qt::transparent ); pen.setJoinStyle( Qt::RoundJoin ); painter.setBrush( brush ); painter.setPen( pen ); painter.drawRoundedRect( outerRect, qreal( frameWidthPct ) * 100.0, qreal( frameWidthPct ) * 100.0, Qt::RelativeSize ); return frame; } void unmarginLayout( QLayout* layout ) { layout->setContentsMargins( 0, 0, 0, 0 ); layout->setMargin( 0 ); layout->setSpacing( 0 ); for ( int i = 0; i < layout->count(); i++ ) { QLayout* childLayout = layout->itemAt( i )->layout(); if ( childLayout ) { unmarginLayout( childLayout ); } } } int defaultFontSize() { return s_defaultFontSize; } int defaultFontHeight() { if ( s_defaultFontHeight <= 0 ) { QFont f; f.setPointSize( defaultFontSize() ); s_defaultFontHeight = QFontMetrics( f ).height(); } return s_defaultFontHeight; } QFont defaultFont() { QFont f; f.setPointSize( defaultFontSize() ); return f; } QFont largeFont() { QFont f; f.setPointSize( defaultFontSize() + 4 ); return f; } void setDefaultFontSize( int points ) { s_defaultFontSize = points; s_defaultFontHeight = 0; // Recalculate on next call to defaultFontHeight() } QSize defaultIconSize() { const int w = int( defaultFontHeight() * 1.6 ); return QSize( w, w ); } void clearLayout( QLayout* layout ) { while ( QLayoutItem* item = layout->takeAt( 0 ) ) { if ( QWidget* widget = item->widget() ) { widget->deleteLater(); } if ( QLayout* childLayout = item->layout() ) { clearLayout( childLayout ); } delete item; } } } // namespace CalamaresUtils calamares-3.2.20/src/libcalamaresui/utils/CalamaresUtilsGui.h000066400000000000000000000072651362604102500241720ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2017-2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef CALAMARESUTILSGUI_H #define CALAMARESUTILSGUI_H #include "DllMacro.h" #include #include #include class QLayout; namespace CalamaresUtils { /** * @brief The ImageType enum lists all common Calamares icons. * Icons are loaded from SVGs and cached. Each icon has an enum value, through which * it can be accessed. * You can forward-declare this as: * enum ImageType : int; */ enum ImageType : int { Yes, No, Information, Fail, Bugs, Help, Release, Donate, PartitionDisk, PartitionPartition, PartitionAlongside, PartitionEraseAuto, PartitionManual, PartitionReplaceOs, PartitionTable, BootEnvironment, Squid, StatusOk, // Icons for the requirements checker StatusWarning, StatusError }; /** * @brief The ImageMode enum contains different transformations that can be applied. * Most of these are currently unused. */ enum ImageMode { Original, CoverInCase, Grid, DropShadow, RoundedCorners }; /** * @brief defaultPixmap returns a resized and/or transformed pixmap for a given * ImageType. * @param type the ImageType i.e. the enum value for an SVG. * @param mode the transformation to apply (default: no transformation). * @param size the target pixmap size (default: original SVG size). * @return the new pixmap. */ UIDLLEXPORT QPixmap defaultPixmap( ImageType type, ImageMode mode = CalamaresUtils::Original, const QSize& size = QSize( 0, 0 ) ); /** * @brief createRoundedImage returns a rounded version of a pixmap. * @param avatar the input pixmap. * @param size the new size. * @param frameWidthPct the frame size, as percentage of width. * @return the transformed pixmap. * This one is currently unused. */ UIDLLEXPORT QPixmap createRoundedImage( const QPixmap& avatar, const QSize& size, float frameWidthPct = 0.20f ); /** * @brief unmarginLayout recursively walks the QLayout tree and removes all margins. * @param layout the layout to unmargin. */ UIDLLEXPORT void unmarginLayout( QLayout* layout ); /** * @brief clearLayout recursively walks the QLayout tree and deletes all the child * widgets and layouts. * @param layout the layout to clear. */ UIDLLEXPORT void clearLayout( QLayout* layout ); UIDLLEXPORT void setDefaultFontSize( int points ); UIDLLEXPORT int defaultFontSize(); // in points UIDLLEXPORT int defaultFontHeight(); // in pixels, DPI-specific UIDLLEXPORT QFont defaultFont(); UIDLLEXPORT QFont largeFont(); UIDLLEXPORT QSize defaultIconSize(); /** * @brief Size constants for the main Calamares window. */ constexpr int windowMinimumWidth = 800; constexpr int windowMinimumHeight = 520; constexpr int windowPreferredWidth = 1024; constexpr int windowPreferredHeight = 520; } // namespace CalamaresUtils #endif // CALAMARESUTILSGUI_H calamares-3.2.20/src/libcalamaresui/utils/ImageRegistry.cpp000066400000000000000000000117731362604102500237210ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-License-Identifier: GPLv3+ * License-Filename: LICENSES/GPLv3+-ImageRegistry * * Copyright 2019, Adriaan de Groot */ /* * Copyright 2012, Christian Muehlhaeuser 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 . */ #include "ImageRegistry.h" #include #include #include static QHash< QString, QHash< int, QHash< qint64, QPixmap > > > s_cache; ImageRegistry* ImageRegistry::instance() { static ImageRegistry* s_instance = new ImageRegistry(); return s_instance; } ImageRegistry::ImageRegistry() {} QIcon ImageRegistry::icon( const QString& image, CalamaresUtils::ImageMode mode ) { return pixmap( image, CalamaresUtils::defaultIconSize(), mode ); } qint64 ImageRegistry::cacheKey( const QSize& size, qreal opacity, QColor tint ) { return size.width() * 100 + size.height() * 10 + static_cast< qint64 >( opacity * 100.0 ) + tint.value(); } QPixmap ImageRegistry::pixmap( const QString& image, const QSize& size, CalamaresUtils::ImageMode mode, qreal opacity, QColor tint ) { Q_ASSERT( !( size.width() < 0 || size.height() < 0 ) ); if ( size.width() < 0 || size.height() < 0 ) { return QPixmap(); } QHash< qint64, QPixmap > subsubcache; QHash< int, QHash< qint64, QPixmap > > subcache; if ( s_cache.contains( image ) ) { subcache = s_cache.value( image ); if ( subcache.contains( mode ) ) { subsubcache = subcache.value( mode ); const qint64 ck = cacheKey( size, opacity, tint ); if ( subsubcache.contains( ck ) ) { return subsubcache.value( ck ); } } } // Image not found in cache. Let's load it. QPixmap pixmap; if ( image.toLower().endsWith( ".svg" ) ) { QSvgRenderer svgRenderer( image ); QPixmap p( size.isNull() || size.height() == 0 || size.width() == 0 ? svgRenderer.defaultSize() : size ); p.fill( Qt::transparent ); QPainter pixPainter( &p ); pixPainter.setOpacity( opacity ); svgRenderer.render( &pixPainter ); pixPainter.end(); if ( tint.alpha() > 0 ) { QImage resultImage( p.size(), QImage::Format_ARGB32_Premultiplied ); QPainter painter( &resultImage ); painter.drawPixmap( 0, 0, p ); painter.setCompositionMode( QPainter::CompositionMode_Screen ); painter.fillRect( resultImage.rect(), tint ); painter.end(); resultImage.setAlphaChannel( p.toImage().alphaChannel() ); p = QPixmap::fromImage( resultImage ); } pixmap = p; } else { pixmap = QPixmap( image ); } if ( !pixmap.isNull() ) { if ( mode == CalamaresUtils::RoundedCorners ) { pixmap = CalamaresUtils::createRoundedImage( pixmap, size ); } if ( !size.isNull() && pixmap.size() != size ) { if ( size.width() == 0 ) { pixmap = pixmap.scaledToHeight( size.height(), Qt::SmoothTransformation ); } else if ( size.height() == 0 ) { pixmap = pixmap.scaledToWidth( size.width(), Qt::SmoothTransformation ); } else { pixmap = pixmap.scaled( size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation ); } } putInCache( image, size, mode, opacity, pixmap, tint ); } return pixmap; } void ImageRegistry::putInCache( const QString& image, const QSize& size, CalamaresUtils::ImageMode mode, qreal opacity, const QPixmap& pixmap, QColor tint ) { QHash< qint64, QPixmap > subsubcache; QHash< int, QHash< qint64, QPixmap > > subcache; if ( s_cache.contains( image ) ) { subcache = s_cache.value( image ); if ( subcache.contains( mode ) ) { subsubcache = subcache.value( mode ); } } subsubcache.insert( cacheKey( size, opacity, tint ), pixmap ); subcache.insert( mode, subsubcache ); s_cache.insert( image, subcache ); } calamares-3.2.20/src/libcalamaresui/utils/ImageRegistry.h000066400000000000000000000036101362604102500233550ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-License-Identifier: GPLv3+ * License-Filename: LICENSES/GPLv3+-ImageRegistry * * Copyright 2019, Adriaan de Groot */ /* * Copyright 2012, Christian Muehlhaeuser 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 . */ #ifndef IMAGE_REGISTRY_H #define IMAGE_REGISTRY_H #include #include "DllMacro.h" #include "utils/CalamaresUtilsGui.h" class UIDLLEXPORT ImageRegistry { public: static ImageRegistry* instance(); explicit ImageRegistry(); QIcon icon( const QString& image, CalamaresUtils::ImageMode mode = CalamaresUtils::Original ); QPixmap pixmap( const QString& image, const QSize& size, CalamaresUtils::ImageMode mode = CalamaresUtils::Original, qreal opacity = 1.0, QColor tint = QColor( 0, 0, 0, 0 ) ); private: qint64 cacheKey( const QSize& size, qreal opacity, QColor tint ); void putInCache( const QString& image, const QSize& size, CalamaresUtils::ImageMode mode, qreal opacity, const QPixmap& pixmap, QColor tint ); }; #endif // IMAGE_REGISTRY_H calamares-3.2.20/src/libcalamaresui/utils/Paste.cpp000066400000000000000000000054751362604102500222240ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Bill Auger * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "Paste.h" #include "utils/Logger.h" #include #include #include #include namespace CalamaresUtils { QString sendLogToPastebin( QObject* parent, const QString& ficheHost, quint16 fichePort ) { QString pasteUrlFmt = parent->tr( "Install log posted to:\n%1" ); QFile pasteSourceFile( Logger::logFile() ); if ( !pasteSourceFile.open( QIODevice::ReadOnly | QIODevice::Text ) ) { cError() << "Could not open log file"; return QString(); } QByteArray pasteData; while ( !pasteSourceFile.atEnd() ) { pasteData += pasteSourceFile.readLine(); } QTcpSocket* socket = new QTcpSocket( parent ); socket->connectToHost( ficheHost, fichePort ); if ( !socket->waitForConnected() ) { cError() << "Could not connect to paste server"; socket->close(); return QString(); } cDebug() << "Connected to paste server"; socket->write( pasteData ); if ( !socket->waitForBytesWritten() ) { cError() << "Could not write to paste server"; socket->close(); return QString(); } cDebug() << "Paste data written to paste server"; if ( !socket->waitForReadyRead() ) { cError() << "No data from paste server"; socket->close(); return QString(); } cDebug() << "Reading response from paste server"; char resp[ 1024 ]; resp[ 0 ] = '\0'; qint64 nBytesRead = socket->readLine( resp, 1024 ); socket->close(); QUrl pasteUrl = QUrl( QString( resp ).trimmed(), QUrl::StrictMode ); QString pasteUrlStr = pasteUrl.toString(); QRegularExpression pasteUrlRegex( "^http[s]?://" + ficheHost ); QString pasteUrlMsg = QString( pasteUrlFmt ).arg( pasteUrlStr ); if ( nBytesRead < 8 || !pasteUrl.isValid() || !pasteUrlRegex.match( pasteUrlStr ).hasMatch() ) { cError() << "No data from paste server"; return QString(); } cDebug() << "Paste server results:" << pasteUrlMsg; return pasteUrlMsg; } } // namespace CalamaresUtils calamares-3.2.20/src/libcalamaresui/utils/Paste.h000066400000000000000000000022101362604102500216510ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Bill Auger * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef UTILS_PASTE_H #define UTILS_PASTE_H #include // for quint16 class QObject; class QString; namespace CalamaresUtils { /** @brief Send the current log file to a pastebin * * Returns the (string) URL that the pastebin gives us. */ QString sendLogToPastebin( QObject* parent, const QString& ficheHost, quint16 fichePort ); } // namespace CalamaresUtils #endif calamares-3.2.20/src/libcalamaresui/utils/PythonQtUtils.cpp000066400000000000000000000027721362604102500237540ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2016, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "PythonQtUtils.h" namespace CalamaresUtils { QVariant lookupAndCall( PyObject* object, const QStringList& candidateNames, const QVariantList& args, const QVariantMap& kwargs ) { Q_ASSERT( object ); Q_ASSERT( !candidateNames.isEmpty() ); for ( const QString& name : candidateNames ) { PythonQtObjectPtr callable = PythonQt::self()->lookupCallable( object, name ); if ( callable ) { return callable.call( args, kwargs ); } } // If we haven't found a callable with the given names, we force an error: return PythonQt::self()->call( object, candidateNames.first(), args, kwargs ); } } // namespace CalamaresUtils calamares-3.2.20/src/libcalamaresui/utils/PythonQtUtils.h000066400000000000000000000024421362604102500234130ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2016, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef PYTHONQTUTILS_H #define PYTHONQTUTILS_H #include #include namespace CalamaresUtils { //NOTE: when running this, it is assumed that Python is initialized and // PythonQt::self() is valid. QVariant lookupAndCall( PyObject* object, const QStringList& candidateNames, const QVariantList& args = QVariantList(), const QVariantMap& kwargs = QVariantMap() ); } // namespace CalamaresUtils #endif // PYTHONQTUTILS_H calamares-3.2.20/src/libcalamaresui/utils/Qml.cpp000066400000000000000000000030721362604102500216700ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2020, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "Qml.h" #include "utils/Logger.h" #include #include #include #include namespace CalamaresUtils { void callQMLFunction( QQuickItem* qmlObject, const char* method ) { QByteArray methodSignature( method ); methodSignature.append( "()" ); if ( qmlObject && qmlObject->metaObject()->indexOfMethod( methodSignature ) >= 0 ) { QVariant returnValue; QMetaObject::invokeMethod( qmlObject, method, Q_RETURN_ARG( QVariant, returnValue ) ); if ( !returnValue.isNull() ) { cDebug() << "QML" << methodSignature << "returned" << returnValue; } } else if ( qmlObject ) { cDebug() << "QML" << methodSignature << "is missing."; } } } // namespace CalamaresUtils calamares-3.2.20/src/libcalamaresui/utils/Qml.h000066400000000000000000000025571362604102500213440ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2020, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef UTILS_QML_H #define UTILS_QML_H #include "DllMacro.h" class QQuickItem; namespace CalamaresUtils { /** @brief Calls the QML method @p method on @p qmlObject * * Pass in only the name of the method (e.g. onActivate). This function * checks if the method exists (with no arguments) before trying to * call it, so that no warnings are printed due to missing methods. * * If there is a return value from the QML method, it is logged (but not otherwise used). */ UIDLLEXPORT void callQMLFunction( QQuickItem* qmlObject, const char* method ); } // namespace CalamaresUtils #endif calamares-3.2.20/src/libcalamaresui/viewpages/000077500000000000000000000000001362604102500212635ustar00rootroot00000000000000calamares-3.2.20/src/libcalamaresui/viewpages/BlankViewStep.cpp000066400000000000000000000050471362604102500245130ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "BlankViewStep.h" #include "utils/CalamaresUtilsGui.h" #include #include #include namespace Calamares { BlankViewStep::BlankViewStep( const QString& title, const QString& description, const QString& details, QObject* parent ) : Calamares::ViewStep( parent ) , m_widget( new QWidget() ) { QBoxLayout* layout = new QVBoxLayout(); constexpr int const marginWidth = 10; constexpr int const spacingHeight = 10; auto* label = new QLabel( title ); label->setAlignment( Qt::AlignHCenter ); label->setFont( CalamaresUtils::largeFont() ); layout->addWidget( label ); label = new QLabel( description ); label->setWordWrap( true ); label->setMargin( marginWidth ); layout->addSpacing( spacingHeight ); layout->addWidget( label ); if ( !details.isEmpty() ) { label = new QLabel( details ); label->setMargin( marginWidth ); layout->addSpacing( spacingHeight ); layout->addWidget( label ); } layout->addStretch( 1 ); // Push the rest to the top m_widget->setLayout( layout ); } BlankViewStep::~BlankViewStep() {} QString BlankViewStep::prettyName() const { return tr( "Blank Page" ); } void BlankViewStep::back() { } void BlankViewStep::next() { } bool BlankViewStep::isBackEnabled() const { return false; } bool BlankViewStep::isNextEnabled() const { return false; } bool BlankViewStep::isAtBeginning() const { return true; } bool BlankViewStep::isAtEnd() const { return false; } QWidget* BlankViewStep::widget() { return m_widget; } Calamares::JobList BlankViewStep::jobs() const { return JobList(); } } // namespace Calamares calamares-3.2.20/src/libcalamaresui/viewpages/BlankViewStep.h000066400000000000000000000035231362604102500241550ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef BLANKVIEWSTEP_H #define BLANKVIEWSTEP_H #include "viewpages/ViewStep.h" namespace Calamares { /** @brief A "blank" view step, used for error and status reporting * * This view step never allows navigation (forward or back); it's a trap. * It displays a title and explanation, and optional details. */ class BlankViewStep : public Calamares::ViewStep { Q_OBJECT public: explicit BlankViewStep( const QString& title, const QString& description, const QString& details = QString(), QObject* parent = nullptr ); virtual ~BlankViewStep() override; QString prettyName() const override; QWidget* widget() override; void next() override; void back() override; bool isNextEnabled() const override; bool isBackEnabled() const override; bool isAtBeginning() const override; bool isAtEnd() const override; Calamares::JobList jobs() const override; private: QWidget* m_widget; }; } // namespace Calamares #endif // BLANKVIEWSTEP_H calamares-3.2.20/src/libcalamaresui/viewpages/ExecutionViewStep.cpp000066400000000000000000000205241362604102500254240ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2014-2015, Teo Mrnjavac * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "ExecutionViewStep.h" #include "Branding.h" #include "Job.h" #include "JobQueue.h" #include "Settings.h" #include "ViewManager.h" #include "modulesystem/Module.h" #include "modulesystem/ModuleManager.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Dirs.h" #include "utils/Logger.h" #include "utils/Qml.h" #include "utils/Retranslator.h" #include #include #include #include #include #include #include #include namespace Calamares { ExecutionViewStep::ExecutionViewStep( QObject* parent ) : ViewStep( parent ) , m_widget( new QWidget ) , m_progressBar( new QProgressBar ) , m_label( new QLabel ) , m_qmlShow( new QQuickWidget ) , m_qmlComponent( nullptr ) , m_qmlObject( nullptr ) { QVBoxLayout* layout = new QVBoxLayout( m_widget ); QVBoxLayout* innerLayout = new QVBoxLayout; m_progressBar->setMaximum( 10000 ); m_qmlShow->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ); m_qmlShow->setResizeMode( QQuickWidget::SizeRootObjectToView ); m_qmlShow->engine()->addImportPath( CalamaresUtils::qmlModulesDir().absolutePath() ); layout->addWidget( m_qmlShow ); CalamaresUtils::unmarginLayout( layout ); layout->addLayout( innerLayout ); innerLayout->addSpacing( CalamaresUtils::defaultFontHeight() / 2 ); innerLayout->addWidget( m_progressBar ); innerLayout->addWidget( m_label ); cDebug() << "QML import paths:" << Logger::DebugList( m_qmlShow->engine()->importPathList() ); if ( Branding::instance()->slideshowAPI() == 2 ) { cDebug() << "QML load on startup, API 2."; loadQmlV2(); } connect( JobQueue::instance(), &JobQueue::progress, this, &ExecutionViewStep::updateFromJobQueue ); #if QT_VERSION >= QT_VERSION_CHECK( 5, 10, 0 ) CALAMARES_RETRANSLATE( m_qmlShow->engine()->retranslate(); ) #endif } QString ExecutionViewStep::prettyName() const { return Calamares::Settings::instance()->isSetupMode() ? tr( "Set up" ) : tr( "Install" ); } QWidget* ExecutionViewStep::widget() { return m_widget; } void ExecutionViewStep::next() { } void ExecutionViewStep::back() { } bool ExecutionViewStep::isNextEnabled() const { return false; } bool ExecutionViewStep::isBackEnabled() const { return false; } bool ExecutionViewStep::isAtBeginning() const { return true; } bool ExecutionViewStep::isAtEnd() const { return true; } void ExecutionViewStep::loadQmlV2() { if ( !m_qmlComponent && !Calamares::Branding::instance()->slideshowPath().isEmpty() ) { m_qmlComponent = new QQmlComponent( m_qmlShow->engine(), QUrl::fromLocalFile( Calamares::Branding::instance()->slideshowPath() ), QQmlComponent::CompilationMode::Asynchronous ); connect( m_qmlComponent, &QQmlComponent::statusChanged, this, &ExecutionViewStep::loadQmlV2Complete ); } } /// @brief State-change of the slideshow, for changeSlideShowState() enum class Slideshow { Start, Stop }; /** @brief Tells the slideshow we activated or left the show. * * If @p state is @c Slideshow::Start, calls suitable activation procedures. * If @p state is @c Slideshow::Stop, calls deactivation procedures. * * Applies V1 and V2 QML activation / deactivation: * - V1 loads the QML in @p widget on activation. Sets root object property * *activatedInCalamares* as appropriate. * - V2 calls onActivate() or onLeave() in the QML as appropriate. Also * sets the *activatedInCalamares* property. */ static void changeSlideShowState( Slideshow state, QQuickItem* slideshow, QQuickWidget* widget ) { bool activate = state == Slideshow::Start; if ( Branding::instance()->slideshowAPI() == 2 ) { // The QML was already loaded in the constructor, need to start it CalamaresUtils::callQMLFunction( slideshow, activate ? "onActivate" : "onLeave" ); } else if ( !Calamares::Branding::instance()->slideshowPath().isEmpty() ) { // API version 1 assumes onCompleted is the trigger if ( activate ) { widget->setSource( QUrl::fromLocalFile( Calamares::Branding::instance()->slideshowPath() ) ); } // needs the root object for property setting, below slideshow = widget->rootObject(); } // V1 API has picked up the root object for use, V2 passed it in. if ( slideshow ) { static const char propertyName[] = "activatedInCalamares"; auto property = slideshow->property( propertyName ); if ( property.isValid() && ( property.type() == QVariant::Bool ) && ( property.toBool() != activate ) ) { slideshow->setProperty( propertyName, activate ); } } } void ExecutionViewStep::loadQmlV2Complete() { if ( m_qmlComponent && m_qmlComponent->isReady() && !m_qmlObject ) { cDebug() << "QML component complete, API 2"; // Don't do this again disconnect( m_qmlComponent, &QQmlComponent::statusChanged, this, &ExecutionViewStep::loadQmlV2Complete ); QObject* o = m_qmlComponent->create(); m_qmlObject = qobject_cast< QQuickItem* >( o ); if ( !m_qmlObject ) { delete o; } else { cDebug() << Logger::SubEntry << "Loading" << Calamares::Branding::instance()->slideshowPath(); // setContent() is public API, but not documented publicly. // It is marked \internal in the Qt sources, but does exactly // what is needed: sets up visual parent by replacing the root // item, and handling resizes. m_qmlShow->setContent( QUrl::fromLocalFile( Calamares::Branding::instance()->slideshowPath() ), m_qmlComponent, m_qmlObject ); if ( ViewManager::instance()->currentStep() == this ) { // We're alreay visible! Must have been slow QML loading, and we // passed onActivate already. changeSlideShowState( Slideshow::Start, m_qmlObject, m_qmlShow ); } } } } void ExecutionViewStep::onActivate() { changeSlideShowState( Slideshow::Start, m_qmlObject, m_qmlShow ); JobQueue* queue = JobQueue::instance(); foreach ( const QString& instanceKey, m_jobInstanceKeys ) { Calamares::Module* module = Calamares::ModuleManager::instance()->moduleInstance( instanceKey ); if ( module ) { auto jl = module->jobs(); if ( module->isEmergency() ) { for ( auto& j : jl ) { j->setEmergency( true ); } } queue->enqueue( jl ); } } queue->start(); } JobList ExecutionViewStep::jobs() const { return JobList(); } void ExecutionViewStep::appendJobModuleInstanceKey( const QString& instanceKey ) { m_jobInstanceKeys.append( instanceKey ); } void ExecutionViewStep::updateFromJobQueue( qreal percent, const QString& message ) { m_progressBar->setValue( int( percent * m_progressBar->maximum() ) ); m_label->setText( message ); } void ExecutionViewStep::onLeave() { changeSlideShowState( Slideshow::Stop, m_qmlObject, m_qmlShow ); // API version 2 is explicitly stopped; version 1 keeps running if ( Branding::instance()->slideshowAPI() == 2 ) { delete m_qmlObject; m_qmlObject = nullptr; } } } // namespace Calamares calamares-3.2.20/src/libcalamaresui/viewpages/ExecutionViewStep.h000066400000000000000000000042051362604102500250670ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2014-2015, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef EXECUTIONVIEWSTEP_H #define EXECUTIONVIEWSTEP_H #include #include class QLabel; class QObject; class QProgressBar; class QQmlComponent; class QQuickItem; class QQuickWidget; namespace Calamares { class ExecutionViewStep : public ViewStep { Q_OBJECT public: explicit ExecutionViewStep( QObject* parent = nullptr ); QString prettyName() const override; QWidget* widget() override; void next() override; void back() override; bool isNextEnabled() const override; bool isBackEnabled() const override; bool isAtBeginning() const override; bool isAtEnd() const override; void onActivate() override; void onLeave() override; JobList jobs() const override; void appendJobModuleInstanceKey( const QString& instanceKey ); public slots: void loadQmlV2Complete(); private: QWidget* m_widget; QProgressBar* m_progressBar; QLabel* m_label; QQuickWidget* m_qmlShow; QQmlComponent* m_qmlComponent; QQuickItem* m_qmlObject; ///< The actual show QStringList m_jobInstanceKeys; void loadQmlV2(); ///< Loads the slideshow QML (from branding) for API version 2 void updateFromJobQueue( qreal percent, const QString& message ); }; } // namespace Calamares #endif /* EXECUTIONVIEWSTEP_H */ calamares-3.2.20/src/libcalamaresui/viewpages/PythonQtGlobalStorageWrapper.cpp000066400000000000000000000027171362604102500275730ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2016, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "PythonQtGlobalStorageWrapper.h" #include "GlobalStorage.h" GlobalStorage::GlobalStorage( Calamares::GlobalStorage* gs ) : QObject( gs ) , m_gs( gs ) { } bool GlobalStorage::contains( const QString& key ) const { return m_gs->contains( key ); } int GlobalStorage::count() const { return m_gs->count(); } void GlobalStorage::insert( const QString& key, const QVariant& value ) { m_gs->insert( key, value ); } QStringList GlobalStorage::keys() const { return m_gs->keys(); } int GlobalStorage::remove( const QString& key ) { return m_gs->remove( key ); } QVariant GlobalStorage::value( const QString& key ) const { return m_gs->value( key ); } calamares-3.2.20/src/libcalamaresui/viewpages/PythonQtGlobalStorageWrapper.h000066400000000000000000000033101362604102500272260ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2016, Teo Mrnjavac * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef PYTHONQTGLOBALSTORAGEWRAPPER_H #define PYTHONQTGLOBALSTORAGEWRAPPER_H #include #include #include namespace Calamares { class GlobalStorage; } /** * @brief This GlobalStorage class is a namespace-free wrapper for * Calamares::GlobalStorage. This is unfortunately a necessity * because PythonQt doesn't like namespaces. */ class GlobalStorage : public QObject { Q_OBJECT public: explicit GlobalStorage( Calamares::GlobalStorage* gs ); virtual ~GlobalStorage() {} public slots: bool contains( const QString& key ) const; int count() const; void insert( const QString& key, const QVariant& value ); QStringList keys() const; int remove( const QString& key ); QVariant value( const QString& key ) const; private: Calamares::GlobalStorage* m_gs; }; #endif // PYTHONQTGLOBALSTORAGEWRAPPER_H calamares-3.2.20/src/libcalamaresui/viewpages/PythonQtJob.cpp000066400000000000000000000040111362604102500242040ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2016, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "PythonQtJob.h" #include "utils/PythonQtUtils.h" PythonQtJob::PythonQtJob( PythonQtObjectPtr cxt, PythonQtObjectPtr pyJob, QObject* parent ) : Calamares::Job( parent ) , m_cxt( cxt ) , m_pyJob( pyJob ) { } QString PythonQtJob::prettyName() const { return CalamaresUtils::lookupAndCall( m_pyJob, { "prettyName", "prettyname", "pretty_name" } ).toString(); } QString PythonQtJob::prettyDescription() const { return CalamaresUtils::lookupAndCall( m_pyJob, { "prettyDescription", "prettydescription", "pretty_description" } ) .toString(); } QString PythonQtJob::prettyStatusMessage() const { return CalamaresUtils::lookupAndCall( m_pyJob, { "prettyStatusMessage", "prettystatusmessage", "pretty_status_message" } ) .toString(); } Calamares::JobResult PythonQtJob::exec() { QVariant response = m_pyJob.call( "exec" ); if ( response.isNull() ) { return Calamares::JobResult::ok(); } QVariantMap map = response.toMap(); if ( map.isEmpty() || map.value( "ok" ).toBool() ) { return Calamares::JobResult::ok(); } return Calamares::JobResult::error( map.value( "message" ).toString(), map.value( "details" ).toString() ); } calamares-3.2.20/src/libcalamaresui/viewpages/PythonQtJob.h000066400000000000000000000034231362604102500236570ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2016, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef PYTHONQTJOB_H #define PYTHONQTJOB_H #include "Job.h" #include namespace Calamares { class PythonQtViewStep; } class PythonQtJobResult : public QObject, public Calamares::JobResult { Q_OBJECT public: explicit PythonQtJobResult( bool ok, const QString& message, const QString& details ) : QObject( nullptr ) , Calamares::JobResult( message, details, ok ? 0 : Calamares::JobResult::GenericError ) { } }; class PythonQtJob : public Calamares::Job { Q_OBJECT public: virtual ~PythonQtJob() {} QString prettyName() const override; QString prettyDescription() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; private: explicit PythonQtJob( PythonQtObjectPtr cxt, PythonQtObjectPtr pyJob, QObject* parent = nullptr ); friend class Calamares::PythonQtViewStep; // only this one can call the ctor PythonQtObjectPtr m_cxt; PythonQtObjectPtr m_pyJob; }; #endif // PYTHONQTJOB_H calamares-3.2.20/src/libcalamaresui/viewpages/PythonQtUtilsWrapper.cpp000066400000000000000000000071631362604102500261460ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2016, Teo Mrnjavac * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "PythonQtUtilsWrapper.h" #include "partition/Mount.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include "utils/String.h" #include Utils::Utils( QObject* parent ) : QObject( parent ) , m_exceptionCxt( PythonQt::self()->createUniqueModule() ) { PythonQt::self()->evalScript( m_exceptionCxt, "import subprocess" ); } void Utils::debug( const QString& s ) const { cDebug() << "PythonQt DBG>" << s; } int Utils::mount( const QString& device_path, const QString& mount_point, const QString& filesystem_name, const QString& options ) const { return CalamaresUtils::Partition::mount( device_path, mount_point, filesystem_name, options ); } int Utils::target_env_call( const QString& command, const QString& stdin, int timeout ) const { return CalamaresUtils::System::instance()->targetEnvCall( command, QString(), stdin, std::chrono::seconds( timeout > 0 ? timeout : 0 ) ); } int Utils::target_env_call( const QStringList& args, const QString& stdin, int timeout ) const { return CalamaresUtils::System::instance()->targetEnvCall( args, QString(), stdin, std::chrono::seconds( timeout > 0 ? timeout : 0 ) ); } int Utils::check_target_env_call( const QString& command, const QString& stdin, int timeout ) const { int ec = target_env_call( command, stdin, timeout ); return _handle_check_target_env_call_error( ec, command ); } int Utils::check_target_env_call( const QStringList& args, const QString& stdin, int timeout ) const { int ec = target_env_call( args, stdin, timeout ); return _handle_check_target_env_call_error( ec, args.join( ' ' ) ); } QString Utils::check_target_env_output( const QString& command, const QString& stdin, int timeout ) const { QString output; int ec = CalamaresUtils::System::instance()->targetEnvOutput( command, output, QString(), stdin, std::chrono::seconds( timeout > 0 ? timeout : 0 ) ); _handle_check_target_env_call_error( ec, command ); return output; } QString Utils::check_target_env_output( const QStringList& args, const QString& stdin, int timeout ) const { QString output; int ec = CalamaresUtils::System::instance()->targetEnvOutput( args, output, QString(), stdin, std::chrono::seconds( timeout > 0 ? timeout : 0 ) ); _handle_check_target_env_call_error( ec, args.join( ' ' ) ); return output; } QString Utils::obscure( const QString& string ) const { return CalamaresUtils::obscure( string ); } int Utils::_handle_check_target_env_call_error( int ec, const QString& cmd ) const { if ( ec ) { QString raise = QString( "raise subprocess.CalledProcessError(%1,\"%2\")" ).arg( ec ).arg( cmd ); PythonQt::self()->evalScript( m_exceptionCxt, raise ); } return ec; } calamares-3.2.20/src/libcalamaresui/viewpages/PythonQtUtilsWrapper.h000066400000000000000000000044171362604102500256120ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2016, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef PYTHONQTUTILSWRAPPER_H #define PYTHONQTUTILSWRAPPER_H #include #include /** * @brief The Utils class wraps around functions from CalamaresUtils to make them * available in the PythonQt interface. */ class Utils : public QObject { Q_OBJECT public: explicit Utils( QObject* parent = nullptr ); virtual ~Utils() {} public slots: void debug( const QString& s ) const; int mount( const QString& device_path, const QString& mount_point, const QString& filesystem_name, const QString& options ) const; int target_env_call( const QString& command, const QString& stdin = QString(), int timeout = 0 ) const; int target_env_call( const QStringList& args, const QString& stdin = QString(), int timeout = 0 ) const; int check_target_env_call( const QString& command, const QString& stdin = QString(), int timeout = 0 ) const; int check_target_env_call( const QStringList& args, const QString& stdin = QString(), int timeout = 0 ) const; QString check_target_env_output( const QString& command, const QString& stdin = QString(), int timeout = 0 ) const; QString check_target_env_output( const QStringList& args, const QString& stdin = QString(), int timeout = 0 ) const; QString obscure( const QString& string ) const; private: inline int _handle_check_target_env_call_error( int ec, const QString& cmd ) const; PythonQtObjectPtr m_exceptionCxt; }; #endif // PYTHONQTUTILSWRAPPER_H calamares-3.2.20/src/libcalamaresui/viewpages/PythonQtViewStep.cpp000066400000000000000000000132361362604102500252510ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2016, Teo Mrnjavac * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "PythonQtViewStep.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" #include "utils/PythonQtUtils.h" #include "utils/Retranslator.h" #include "viewpages/PythonQtJob.h" #include #include #include namespace Calamares { PythonQtViewStep::PythonQtViewStep( PythonQtObjectPtr cxt, QObject* parent ) : ViewStep( parent ) , m_widget( new QWidget() ) , m_cxt( cxt ) { PythonQt* pq = PythonQt::self(); Q_ASSERT( pq ); // The @calamares_module decorator should have filled _calamares_module_typename // for us. QString className = m_cxt.getVariable( "_calamares_module_typename" ).toString(); // Instantiate an object of the class marked with @calamares_module and // store it as _calamares_module. pq->evalScript( m_cxt, QString( "_calamares_module = %1()" ).arg( className ) ); m_obj = pq->lookupObject( m_cxt, "_calamares_module" ); Q_ASSERT( !m_obj.isNull() ); // no entry point, no party // Prepare the base widget for the module's pages m_widget->setLayout( new QVBoxLayout ); CalamaresUtils::unmarginLayout( m_widget->layout() ); m_cxt.addObject( "_calamares_module_basewidget", m_widget ); CALAMARES_RETRANSLATE_WIDGET( m_widget, CalamaresUtils::lookupAndCall( m_obj, { "retranslate" }, { CalamaresUtils::translatorLocaleName() } ); ) } QString PythonQtViewStep::prettyName() const { return CalamaresUtils::lookupAndCall( m_obj, { "prettyName", "prettyname", "pretty_name" } ).toString(); } QWidget* PythonQtViewStep::widget() { if ( m_widget->layout()->count() > 1 ) cWarning() << "PythonQtViewStep wrapper widget has more than 1 child. " "This should never happen."; bool nothingChanged = m_cxt.evalScript( "_calamares_module.widget() in _calamares_module_basewidget.children()" ).toBool(); if ( nothingChanged ) { return m_widget; } // Else, we either don't have a child widget, or we have a child widget that // was previously set and doesn't apply any more since the Python module // set a new one. // First we clear the layout, which should only ever have 1 item. // We only remove from the layout and not delete because Python is in charge // of memory management for these widgets. while ( m_widget->layout()->itemAt( 0 ) ) { m_widget->layout()->takeAt( 0 ); } m_cxt.evalScript( "_calamares_module_basewidget.layout().addWidget(_calamares_module.widget())" ); return m_widget; } void PythonQtViewStep::next() { CalamaresUtils::lookupAndCall( m_obj, { "next" } ); } void PythonQtViewStep::back() { CalamaresUtils::lookupAndCall( m_obj, { "back" } ); } bool PythonQtViewStep::isNextEnabled() const { return CalamaresUtils::lookupAndCall( m_obj, { "isNextEnabled", "isnextenabled", "is_next_enabled" } ).toBool(); } bool PythonQtViewStep::isBackEnabled() const { return CalamaresUtils::lookupAndCall( m_obj, { "isBackEnabled", "isbackenabled", "is_back_enabled" } ).toBool(); } bool PythonQtViewStep::isAtBeginning() const { return CalamaresUtils::lookupAndCall( m_obj, { "isAtBeginning", "isatbeginning", "is_at_beginning" } ).toBool(); } bool PythonQtViewStep::isAtEnd() const { return CalamaresUtils::lookupAndCall( m_obj, { "isAtEnd", "isatend", "is_at_end" } ).toBool(); } void PythonQtViewStep::onActivate() { CalamaresUtils::lookupAndCall( m_obj, { "onActivate", "onactivate", "on_activate" } ); } void PythonQtViewStep::onLeave() { CalamaresUtils::lookupAndCall( m_obj, { "onLeave", "onleave", "on_leave" } ); } JobList PythonQtViewStep::jobs() const { JobList jobs; PythonQtObjectPtr jobsCallable = PythonQt::self()->lookupCallable( m_obj, "jobs" ); if ( jobsCallable.isNull() ) { return jobs; } PythonQtObjectPtr response = PythonQt::self()->callAndReturnPyObject( jobsCallable ); if ( response.isNull() ) { return jobs; } PythonQtObjectPtr listPopCallable = PythonQt::self()->lookupCallable( response, "pop" ); if ( listPopCallable.isNull() ) { return jobs; } forever { PythonQtObjectPtr aJob = PythonQt::self()->callAndReturnPyObject( listPopCallable, { 0 } ); if ( aJob.isNull() ) { break; } jobs.append( Calamares::job_ptr( new PythonQtJob( m_cxt, aJob ) ) ); } return jobs; } void PythonQtViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { m_obj.addVariable( "configuration", configurationMap ); } QWidget* PythonQtViewStep::createScriptingConsole() { PythonQtScriptingConsole* console = new PythonQtScriptingConsole( nullptr, m_cxt ); console->setProperty( "classname", m_cxt.getVariable( "_calamares_module_typename" ).toString() ); return console; } } // namespace Calamares calamares-3.2.20/src/libcalamaresui/viewpages/PythonQtViewStep.h000066400000000000000000000033021362604102500247070ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2016, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef PYTHONQTVIEWSTEP_H #define PYTHONQTVIEWSTEP_H #include "ViewStep.h" #include namespace Calamares { class PythonQtViewStep : public Calamares::ViewStep { Q_OBJECT public: PythonQtViewStep( PythonQtObjectPtr cxt, QObject* parent = nullptr ); QString prettyName() const override; QWidget* widget() override; void next() override; void back() override; void onLeave() override; void onActivate() override; bool isNextEnabled() const override; bool isBackEnabled() const override; bool isAtBeginning() const override; bool isAtEnd() const override; JobList jobs() const override; void setConfigurationMap( const QVariantMap& configurationMap ) override; QWidget* createScriptingConsole(); protected: QWidget* m_widget; private: PythonQtObjectPtr m_cxt; PythonQtObjectPtr m_obj; }; } // namespace Calamares #endif // PYTHONQTVIEWSTEP_H calamares-3.2.20/src/libcalamaresui/viewpages/QmlViewStep.cpp000066400000000000000000000232061362604102500242120ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2020, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "QmlViewStep.h" #include "Branding.h" #include "ViewManager.h" #include "utils/Dirs.h" #include "utils/Logger.h" #include "utils/NamedEnum.h" #include "utils/Qml.h" #include "utils/Variant.h" #include "widgets/WaitingWidget.h" #include #include #include #include #include #include #include static const NamedEnumTable< Calamares::QmlViewStep::QmlSearch >& searchNames() { using Search = Calamares::QmlViewStep::QmlSearch; // *INDENT-OFF* // clang-format off static NamedEnumTable< Search > names { { QStringLiteral( "both" ), Search::Both }, { QStringLiteral( "qrc" ), Search::QrcOnly }, { QStringLiteral( "branding" ), Search::BrandingOnly } }; // *INDENT-ON* // clang-format on return names; } /// @brief State-change of the QML, for changeQMLState() enum class QMLAction { Start, Stop }; /** @brief Tells the QML we activated or left it. * * If @p action is @c QMLAction::Start, calls onActivate in the QML. * If @p action is @c QMLAction::Stop, calls onLeave in the QML. * * Sets *activatedInCalamares* property on the QML as well (to true * if @p action is @c QMLAction::Start, false otherwise). */ static void changeQMLState( QMLAction action, QQuickItem* item ) { static const char propertyName[] = "activatedInCalamares"; bool activate = action == QMLAction::Start; CalamaresUtils::callQMLFunction( item, activate ? "onActivate" : "onLeave" ); auto property = item->property( propertyName ); if ( property.isValid() && ( property.type() == QVariant::Bool ) && ( property.toBool() != activate ) ) { item->setProperty( propertyName, activate ); } } static void registerCalamaresModels() { static bool done = false; if ( !done ) { done = true; qmlRegisterSingletonType< Calamares::Branding >( "calamares.ui", 1, 0, "Branding", []( QQmlEngine*, QJSEngine* ) -> QObject* { return Calamares::Branding::instance(); } ); } } namespace Calamares { QmlViewStep::QmlViewStep( const QString& name, QObject* parent ) : ViewStep( parent ) , m_name( name ) , m_widget( new QWidget ) , m_spinner( new WaitingWidget( tr( "Loading ..." ) ) ) , m_qmlWidget( new QQuickWidget ) { registerCalamaresModels(); QVBoxLayout* layout = new QVBoxLayout( m_widget ); layout->addWidget( m_spinner ); m_qmlWidget->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ); m_qmlWidget->setResizeMode( QQuickWidget::SizeRootObjectToView ); m_qmlWidget->engine()->addImportPath( CalamaresUtils::qmlModulesDir().absolutePath() ); // QML Loading starts when the configuration for the module is set. } QmlViewStep::~QmlViewStep() {} QString QmlViewStep::prettyName() const { // TODO: query the QML itself return tr( "QML Step %1." ).arg( m_name ); } bool QmlViewStep::isAtBeginning() const { return true; } bool QmlViewStep::isAtEnd() const { return true; } bool QmlViewStep::isBackEnabled() const { return true; } bool QmlViewStep::isNextEnabled() const { return true; } Calamares::JobList QmlViewStep::jobs() const { return JobList(); } void QmlViewStep::onActivate() { if ( m_qmlObject ) { changeQMLState( QMLAction::Start, m_qmlObject ); } } void QmlViewStep::onLeave() { if ( m_qmlObject ) { changeQMLState( QMLAction::Stop, m_qmlObject ); } } QWidget* QmlViewStep::widget() { return m_widget; } void QmlViewStep::loadComplete() { cDebug() << "QML component" << m_qmlFileName << m_qmlComponent->status(); if ( m_qmlComponent->status() == QQmlComponent::Error ) { showFailedQml(); } if ( m_qmlComponent->isReady() && !m_qmlObject ) { cDebug() << "QML component complete" << m_qmlFileName; // Don't do this again disconnect( m_qmlComponent, &QQmlComponent::statusChanged, this, &QmlViewStep::loadComplete ); QObject* o = m_qmlComponent->create(); m_qmlObject = qobject_cast< QQuickItem* >( o ); if ( !m_qmlObject ) { cError() << Logger::SubEntry << "Could not create QML from" << m_qmlFileName; delete o; } else { // setContent() is public API, but not documented publicly. // It is marked \internal in the Qt sources, but does exactly // what is needed: sets up visual parent by replacing the root // item, and handling resizes. m_qmlWidget->setContent( QUrl( m_qmlFileName ), m_qmlComponent, m_qmlObject ); showQml(); } } } void QmlViewStep::showQml() { if ( !m_qmlWidget || !m_qmlObject ) { cDebug() << "showQml() called but no QML object"; return; } if ( m_spinner ) { m_widget->layout()->removeWidget( m_spinner ); m_widget->layout()->addWidget( m_qmlWidget ); delete m_spinner; m_spinner = nullptr; } else { cDebug() << "showQml() called twice"; } if ( ViewManager::instance()->currentStep() == this ) { // We're alreay visible! Must have been slow QML loading, and we // passed onActivate already. changeQMLState( QMLAction::Start, m_qmlObject ); } } /** @brief Find a suitable QML file, given the search method and name hints * * Returns QString() if nothing is found (which would mean the module * is badly configured). */ QString searchQmlFile( QmlViewStep::QmlSearch method, const QString& configuredName, const QString& moduleName ) { using QmlSearch = Calamares::QmlViewStep::QmlSearch; cDebug() << "Looking for QML for" << moduleName; QStringList candidates; if ( configuredName.startsWith( '/' ) ) { candidates << configuredName; } if ( ( method == QmlSearch::Both ) || ( method == QmlSearch::BrandingOnly ) ) { QString brandDir = Calamares::Branding::instance()->componentDirectory(); candidates << ( configuredName.isEmpty() ? QString() : QStringLiteral( "%1/%2.qml" ).arg( brandDir, configuredName ) ) << ( moduleName.isEmpty() ? QString() : QStringLiteral( "%1/%2.qml" ).arg( brandDir, moduleName ) ); } if ( ( method == QmlSearch::Both ) || ( method == QmlSearch::QrcOnly ) ) { candidates << ( configuredName.isEmpty() ? QString() : QStringLiteral( ":/%1.qml" ).arg( configuredName ) ) << ( moduleName.isEmpty() ? QString() : QStringLiteral( ":/%1.qml" ).arg( moduleName ) ); } for ( const QString& candidate : candidates ) { if ( candidate.isEmpty() ) { continue; } cDebug() << Logger::SubEntry << "Looking at QML file" << candidate; if ( QFile::exists( candidate ) ) { if ( candidate.startsWith( ':' ) ) { // Inconsistency: QFile only sees the file with :, // but QML needs an explicit scheme (of qrc:) return QStringLiteral( "qrc" ) + candidate; } return candidate; } } cDebug() << Logger::SubEntry << "None found."; return QString(); } void QmlViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { bool ok = false; m_searchMethod = searchNames().find( CalamaresUtils::getString( configurationMap, "search" ), ok ); if ( !ok ) { cDebug() << "Bad QML search mode."; } QString qmlFile = CalamaresUtils::getString( configurationMap, "filename" ); if ( qmlFile.isEmpty() ) { // TODO use the module instance } if ( !m_qmlComponent ) { m_qmlFileName = searchQmlFile( m_searchMethod, qmlFile, m_name ); QObject* config = this->getConfig(); if ( config ) { m_qmlWidget->engine()->rootContext()->setContextProperty( "config", config ); } cDebug() << "QmlViewStep" << moduleInstanceKey() << "loading" << m_qmlFileName; m_qmlComponent = new QQmlComponent( m_qmlWidget->engine(), QUrl( m_qmlFileName ), QQmlComponent::CompilationMode::Asynchronous ); connect( m_qmlComponent, &QQmlComponent::statusChanged, this, &QmlViewStep::loadComplete ); if ( m_qmlComponent->status() == QQmlComponent::Error ) { showFailedQml(); } } else { cWarning() << "QML configuration set after component has loaded."; } } void QmlViewStep::showFailedQml() { cWarning() << "QmlViewStep" << moduleInstanceKey() << "loading failed."; if ( m_qmlComponent ) { cDebug() << Logger::SubEntry << "QML error:" << m_qmlComponent->errorString(); } m_spinner->setText( prettyName() + ' ' + tr( "Loading failed." ) ); } QObject* QmlViewStep::getConfig() { return nullptr; } } // namespace Calamares calamares-3.2.20/src/libcalamaresui/viewpages/QmlViewStep.h000066400000000000000000000065541362604102500236660ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2020, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef QMLVIEWSTEP_H #define QMLVIEWSTEP_H #include "viewpages/ViewStep.h" class QQmlComponent; class QQuickItem; class QQuickWidget; class WaitingWidget; namespace Calamares { /** @brief A viewstep that uses QML for the UI * * This is generally a **base** class for other view steps, but * it can be used stand-alone for viewsteps that don't really have * any functionality. */ class QmlViewStep : public Calamares::ViewStep { Q_OBJECT public: enum class QmlSearch { QrcOnly, BrandingOnly, Both }; /** @brief Creates a QML view step * * The name should not have an extension or schema or anything; * just the plain name, which will be searched as "/.qml" in * QRC files, or ".qml" in suitable branding paths. * The search behavior depends on a QmlSearch value. */ QmlViewStep( const QString& name, QObject* parent = nullptr ); virtual ~QmlViewStep() override; virtual QString prettyName() const override; virtual QWidget* widget() override; virtual bool isNextEnabled() const override; virtual bool isBackEnabled() const override; virtual bool isAtBeginning() const override; virtual bool isAtEnd() const override; virtual void onActivate() override; virtual void onLeave() override; /// @brief QML widgets don't produce jobs by default virtual JobList jobs() const override; /// @brief Configure search paths; subclasses should call this at the **end** of their own implementation virtual void setConfigurationMap( const QVariantMap& configurationMap ) override; protected: /** @brief Gets a pointer to the Config of this view step * * Parts of the configuration of the viewstep can be passed to QML * by placing them in a QObject (as properties). The default * implementation returns nullptr, for no-config. * * Ownership of the config object remains with the ViewStep; it is possible * to return a pointer to a member variable. */ virtual QObject* getConfig(); private Q_SLOTS: void loadComplete(); private: /// @brief Swap out the spinner for the QQuickWidget void showQml(); /// @brief Show error message in spinner. void showFailedQml(); /// @brief Controls where m_name is searched QmlSearch m_searchMethod; QString m_name; QString m_qmlFileName; QWidget* m_widget = nullptr; WaitingWidget* m_spinner = nullptr; QQuickWidget* m_qmlWidget = nullptr; QQmlComponent* m_qmlComponent = nullptr; QQuickItem* m_qmlObject = nullptr; }; } // namespace Calamares #endif calamares-3.2.20/src/libcalamaresui/viewpages/ViewStep.cpp000066400000000000000000000030751362604102500235420ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac * Copyright 2017, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "ViewStep.h" namespace Calamares { ViewStep::ViewStep( QObject* parent ) : QObject( parent ) { } ViewStep::~ViewStep() {} QString ViewStep::prettyStatus() const { return QString(); } QWidget* ViewStep::createSummaryWidget() const { return nullptr; } void ViewStep::onActivate() { } void ViewStep::onLeave() { } void ViewStep::next() { } void ViewStep::back() { } void ViewStep::setModuleInstanceKey( const Calamares::ModuleSystem::InstanceKey& instanceKey ) { m_instanceKey = instanceKey; } void ViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { Q_UNUSED( configurationMap ) } RequirementsList ViewStep::checkRequirements() { return RequirementsList(); } } // namespace Calamares calamares-3.2.20/src/libcalamaresui/viewpages/ViewStep.h000066400000000000000000000136721362604102500232130ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2017, 2020, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef VIEWSTEP_H #define VIEWSTEP_H #include "Job.h" #include "DllMacro.h" #include "modulesystem/InstanceKey.h" #include "modulesystem/Requirement.h" #include #include #include namespace Calamares { /** * @brief The ViewStep class is the base class for all view modules. * A view module is a Calamares module which has at least one UI page (exposed as * ViewStep::widget), and can optionally create Calamares jobs at runtime. * As of early 2020, a view module can be implemented by deriving from ViewStep * in C++ (as a Qt Plugin or a Qml ViewStep) or in Python with the PythonQt interface * (which also mimics the ViewStep class). * * A ViewStep can describe itself in human-readable format for the SummaryPage * (which shows all of the things which have been collected to be done in the * next exec-step) through prettyStatus() and createSummaryWidget(). */ class UIDLLEXPORT ViewStep : public QObject { Q_OBJECT public: explicit ViewStep( QObject* parent = nullptr ); virtual ~ViewStep() override; virtual QString prettyName() const = 0; /** * Optional. May return a non-empty string describing what this * step is going to do (should be translated). This is also used * in the summary page to describe what is going to be done. * Return an empty string to provide no description. */ virtual QString prettyStatus() const; /** * Optional. May return a widget which will be inserted in the summary * page. The caller takes ownership of the widget. Return nullptr to * provide no widget. In general, this is only used for complicated * steps where prettyStatus() is not sufficient. */ virtual QWidget* createSummaryWidget() const; //TODO: we might want to make this a QSharedPointer virtual QWidget* widget() = 0; /** * @brief Multi-page support, go next * * Multi-page view steps need to manage the content visible in the widget * themselves. This method is called when the user clicks the *next* * button, and should switch to the next of the multiple-pages. It needs * to be consistent with both isNextEnabled() and isAtEnd(). * * In particular: when isAtEnd() returns false, next() is called when * the user clicks the button and a new page should be shown by this * view step. When isAtEnd() returns true, clicking the button will * switch to the next view step in sequence, rather than a next page * in the current view step. */ virtual void next(); /// @brief Multi-page support, go back virtual void back(); /// @brief Can the user click *next* with currently-filled-in data? virtual bool isNextEnabled() const = 0; /// @brief Can the user click *previous* with currently-filled-in data? virtual bool isBackEnabled() const = 0; /** * @brief Multi-page support, switch to previous view step? * * For a multi-page view step, this indicates that the first (beginning) * page is showing. Clicking *previous* when at the beginning of a view * step, switches to the previous step, not the previous page of the * current view step. */ virtual bool isAtBeginning() const = 0; /// @brief Multi-page support, switch to next view step? virtual bool isAtEnd() const = 0; /** * @brief onActivate called every time a ViewStep is shown, either by going forward * or backward. * The default implementation does nothing. */ virtual void onActivate(); /** * @brief onLeave called every time a ViewStep is hidden and control passes to * another ViewStep, either by going forward or backward. * The default implementation does nothing. */ virtual void onLeave(); /** * @brief Jobs needed to run this viewstep * * When a ViewStep is listed in the exec section, its jobs are executed instead. * This function returns that list of jobs; an empty list is ok. */ virtual JobList jobs() const = 0; void setModuleInstanceKey( const Calamares::ModuleSystem::InstanceKey& instanceKey ); Calamares::ModuleSystem::InstanceKey moduleInstanceKey() const { return m_instanceKey; } virtual void setConfigurationMap( const QVariantMap& configurationMap ); /** * @brief Can this module proceed, on this machine? * * This is called asynchronously at startup, and returns a list of * the requirements that the module has checked, and their status. * See Calamares::RequirementEntry for details. */ virtual RequirementsList checkRequirements(); signals: /// @brief Tells the viewmanager to enable the *next* button according to @p status void nextStatusChanged( bool status ); /* Emitted when the viewstep thinks it needs more space than is currently * available for display. @p enlarge is the requested additional space, * e.g. 24px vertical. This request may be silently ignored. */ void enlarge( QSize enlarge ) const; protected: Calamares::ModuleSystem::InstanceKey m_instanceKey; }; using ViewStepList = QList< ViewStep* >; } // namespace Calamares #endif // VIEWSTEP_H calamares-3.2.20/src/libcalamaresui/widgets/000077500000000000000000000000001362604102500207375ustar00rootroot00000000000000calamares-3.2.20/src/libcalamaresui/widgets/ClickableLabel.cpp000066400000000000000000000025561362604102500242640ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "ClickableLabel.h" #include ClickableLabel::ClickableLabel( QWidget* parent ) : QLabel( parent ) { } ClickableLabel::ClickableLabel( const QString& text, QWidget* parent ) : QLabel( text, parent ) { } ClickableLabel::~ClickableLabel() {} void ClickableLabel::mousePressEvent( QMouseEvent* event ) { QLabel::mousePressEvent( event ); m_time.start(); } void ClickableLabel::mouseReleaseEvent( QMouseEvent* event ) { QLabel::mouseReleaseEvent( event ); if ( m_time.elapsed() < qApp->doubleClickInterval() ) { emit clicked(); } } calamares-3.2.20/src/libcalamaresui/widgets/ClickableLabel.h000066400000000000000000000025711362604102500237260ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac * Copyright 2017, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef CLICKABLELABEL_H #define CLICKABLELABEL_H #include #include class ClickableLabel : public QLabel { Q_OBJECT public: explicit ClickableLabel( QWidget* parent = nullptr ); explicit ClickableLabel( const QString& text, QWidget* parent = nullptr ); virtual ~ClickableLabel() override; signals: void clicked(); protected: virtual void mousePressEvent( QMouseEvent* event ) override; virtual void mouseReleaseEvent( QMouseEvent* event ) override; private: QTime m_time; }; #endif // CLICKABLELABEL_H calamares-3.2.20/src/libcalamaresui/widgets/FixedAspectRatioLabel.cpp000066400000000000000000000026311362604102500256030ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2015, Teo Mrnjavac * Copyright 2017, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "FixedAspectRatioLabel.h" FixedAspectRatioLabel::FixedAspectRatioLabel( QWidget* parent ) : QLabel( parent ) { } FixedAspectRatioLabel::~FixedAspectRatioLabel() {} void FixedAspectRatioLabel::setPixmap( const QPixmap& pixmap ) { m_pixmap = pixmap; QLabel::setPixmap( pixmap.scaled( contentsRect().size(), Qt::KeepAspectRatio, Qt::SmoothTransformation ) ); } void FixedAspectRatioLabel::resizeEvent( QResizeEvent* event ) { Q_UNUSED( event ) QLabel::setPixmap( m_pixmap.scaled( contentsRect().size(), Qt::KeepAspectRatio, Qt::SmoothTransformation ) ); } calamares-3.2.20/src/libcalamaresui/widgets/FixedAspectRatioLabel.h000066400000000000000000000024361362604102500252530ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2015, Teo Mrnjavac * Copyright 2017, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef FIXEDASPECTRATIOLABEL_H #define FIXEDASPECTRATIOLABEL_H #include #include class FixedAspectRatioLabel : public QLabel { Q_OBJECT public: explicit FixedAspectRatioLabel( QWidget* parent = nullptr ); virtual ~FixedAspectRatioLabel() override; public slots: void setPixmap( const QPixmap& pixmap ); void resizeEvent( QResizeEvent* event ) override; private: QPixmap m_pixmap; }; #endif // FIXEDASPECTRATIOLABEL_H calamares-3.2.20/src/libcalamaresui/widgets/WaitingWidget.cpp000066400000000000000000000040231362604102500242100ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac * Copyright 2017, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "WaitingWidget.h" #include "utils/CalamaresUtilsGui.h" #include "3rdparty/waitingspinnerwidget.h" #include #include WaitingWidget::WaitingWidget( const QString& text, QWidget* parent ) : QWidget( parent ) { QBoxLayout* waitingLayout = new QVBoxLayout; setLayout( waitingLayout ); waitingLayout->addStretch(); QBoxLayout* pbLayout = new QHBoxLayout; waitingLayout->addLayout( pbLayout ); pbLayout->addStretch(); WaitingSpinnerWidget* spnr = new WaitingSpinnerWidget(); pbLayout->addWidget( spnr ); pbLayout->addStretch(); m_waitingLabel = new QLabel( text ); int spnrSize = m_waitingLabel->fontMetrics().height() * 4; spnr->setFixedSize( spnrSize, spnrSize ); spnr->setInnerRadius( spnrSize / 2 ); spnr->setLineLength( spnrSize / 2 ); spnr->setLineWidth( spnrSize / 8 ); spnr->start(); m_waitingLabel->setAlignment( Qt::AlignCenter ); waitingLayout->addSpacing( spnrSize / 2 ); waitingLayout->addWidget( m_waitingLabel ); waitingLayout->addStretch(); CalamaresUtils::unmarginLayout( waitingLayout ); } void WaitingWidget::setText( const QString& text ) { m_waitingLabel->setText( text ); } calamares-3.2.20/src/libcalamaresui/widgets/WaitingWidget.h000066400000000000000000000021421362604102500236550ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef WAITINGWIDGET_H #define WAITINGWIDGET_H #include class QLabel; class WaitingWidget : public QWidget { Q_OBJECT public: explicit WaitingWidget( const QString& text, QWidget* parent = nullptr ); void setText( const QString& text ); private: QLabel* m_waitingLabel; }; #endif // WAITINGWIDGET_H calamares-3.2.20/src/modules/000077500000000000000000000000001362604102500157645ustar00rootroot00000000000000calamares-3.2.20/src/modules/CMakeLists.txt000066400000000000000000000054031362604102500205260ustar00rootroot00000000000000# The variable SKIP_MODULES can be set to skip particular modules; # individual modules can also decide they must be skipped (e.g. OS-specific # modules, or ones with unmet dependencies). Collect the skipped modules # in this list. set( LIST_SKIPPED_MODULES "" ) include_directories( ${CMAKE_SOURCE_DIR}/src/libcalamares ${CMAKE_BINARY_DIR}/src/libcalamares ${CMAKE_SOURCE_DIR}/src/libcalamaresui ) if( BUILD_TESTING ) add_executable( test_conf test_conf.cpp ) target_link_libraries( test_conf yamlcpp Qt5::Core ) target_include_directories( test_conf PUBLIC ${YAMLCPP_INCLUDE_DIR} ) endif() string( REPLACE " " ";" SKIP_LIST "${SKIP_MODULES}" ) file( GLOB SUBDIRECTORIES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*" ) list( SORT SUBDIRECTORIES ) set( _use_categories "" ) set( _found_categories "" ) foreach( SUBDIRECTORY ${SUBDIRECTORIES} ) list( FIND SKIP_LIST ${SUBDIRECTORY} DO_SKIP ) set( _skip_reason "user request" ) # Handle the USE_ variables by looking for subdirectories # with a - kind of name. if( SUBDIRECTORY MATCHES "^[a-zA-Z0-9_]+-" ) string( REGEX REPLACE "^[^-]+-" "" _implementation ${SUBDIRECTORY} ) string( REGEX REPLACE "-.*" "" _category ${SUBDIRECTORY} ) if( USE_${_category} ) list( APPEND _use_categories ${_category} ) if( "${_implementation}" STREQUAL "${USE_${_category}}" ) list( APPEND _found_categories ${_category} ) else() list( APPEND SKIP_LIST ${SUBDIRECTORY} ) set( _skip_reason "USE_${_category}=${USE_${_category}}" ) set( DO_SKIP 1 ) endif() endif() endif() if( NOT DO_SKIP EQUAL -1 ) message( "${ColorReset}-- Skipping module ${BoldRed}${SUBDIRECTORY}${ColorReset}." ) message( "" ) list( APPEND LIST_SKIPPED_MODULES "${SUBDIRECTORY} (${_skip_reason})" ) elseif( ( IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIRECTORY}" ) AND ( DO_SKIP EQUAL -1 ) ) set( SKIPPED_MODULES ) calamares_add_module_subdirectory( ${SUBDIRECTORY} ) if ( SKIPPED_MODULES ) list( APPEND LIST_SKIPPED_MODULES "${SKIPPED_MODULES}" ) endif() endif() endforeach() # This is *also* done in top-level, so list is displayed # both before and after the feature summary. calamares_explain_skipped_modules( ${LIST_SKIPPED_MODULES} ) foreach( _category ${_use_categories} ) list( FIND _found_categories ${_category} _found ) if ( _found EQUAL -1 ) message( FATAL_ERROR "USE_${_category} is set to ${USE_${_category}} and no module matches." ) endif() endforeach() include( CalamaresAddTranslations ) add_calamares_python_translations( ${CALAMARES_TRANSLATION_LANGUAGES} ) calamares-3.2.20/src/modules/README.md000066400000000000000000000202271362604102500172460ustar00rootroot00000000000000# Calamares modules Calamares modules are plugins that provide features like installer pages, batch jobs, etc. An installer page (visible to the user) is called a "view", while other modules are "jobs". Each Calamares module lives in its own directory. All modules are installed in `$DESTDIR/lib/calamares/modules`. There are two **types** of Calamares module: * viewmodule, for user-visible modules. These may be in C++, or PythonQt. * jobmodule, for not-user-visible modules. These may be done in C++, Python, or as external processes. A viewmodule exposes a UI to the user. The PythonQt-based modules are considered experimental (and as of march 2019 may be on the way out again as never-used-much and PythonQt is not packaged on Debian anymore). There are three (four) **interfaces** for Calamares modules: * qtplugin (viewmodules, jobmodules), * python (jobmodules only), * pythonqt (viewmodules, jobmodules, optional), * process (jobmodules only). ## Module directory Each Calamares module lives in its own directory. The contents of the directory depend on the interface and type of the module. ### Module descriptor A Calamares module must have a *module descriptor file*, named `module.desc`. For C++ (qtplugin) modules using CMake as a build- system and using the calamares_add_plugin() function -- this is the recommended way to create such modules -- the module descriptor file is optional, since it can be generated by the build system. For other module interfaces, the module descriptor file is required. The module descriptor file must be placed in the module's directory. The module descriptor file is a YAML 1.2 document which defines the module's name, type, interface and possibly other properties. The name of the module as defined in `module.desc` must be the same as the name of the module's directory. Module descriptors **must** have the following keys: - *name* (an identifier; must be the same as the directory name) - *type* ("job" or "view") - *interface* (see below for the different interfaces; generally we refer to the kinds of modules by their interface) Module descriptors for Python and PythonQt modules **must** have the following key: - *script* (the name of the Python script to load, nearly always `main.py`) Module descriptors **may** have the following keys: - *emergency* (a boolean value, set to true to mark the module as an emergency module) - *noconfig* (a boolean value, set to true to state that the module has no configuration file; defaults to false) - *requiredModules* (a list of modules which are required for this module to operate properly) ### Required Modules A module may list zero (if it has no requirements) or more modules by name. As modules are loaded from the global sequence in `settings.conf`, each module is checked that all of the modules it requires are already loaded before it. This ensures that if a module needs another one to fill in globalstorage keys, that happens before it needs those keys. ### Emergency Modules Only C++ modules and job modules may be emergency modules. If, during an *exec* step in the sequence, a module fails, installation as a whole fails and the install is aborted. If there are emergency modules in the **same** exec block, those will be executed before the installation is aborted. Non-emergency modules are not executed. If an emergency-module fails while processing emergency-modules for another failed module, that failure is ignored and emergency-module processing continues. Use the EMERGENCY keyword in the CMake description of a C++ module to generate a suitable `module.desc`. A module that is marked as an emergency module in its module.desc must **also** set the *emergency* key to *true* in its configuration file (see below). If it does not, the module is not considered to be an emergency module after all (this is so that you can have modules that have several instances, only some of which are actually needed for emergencies). ### Module-specific configuration A Calamares module **may** read a module configuration file, named `.conf`. If such a file is present in the module's directory, it can be shipped as a *default* configuration file. This only happens if the CMake-time option `INSTALL_CONFIG` is on. Modules that have *noconfig* set to true will not attempt to read a configuration file, and will not warn that one is missing; conversely if *noconfig* is set to false (or is missing, since the default value is false) if there is no configuration file, a warning is printed during Calamares start-up. The sample configuration files may work and may be suitable for your distribution, but no guarantee is given about their stability beyond syntactic correctness. The module configuration file, if it exists, is a YAML 1.2 document which contains a YAML map of anything. All sample module configuration files are installed in `$DESTDIR/share/calamares/modules` but can be overridden by files with the same name placed manually (or by the packager) in `/etc/calamares/modules`. ## C++ modules > Type: viewmodule, jobmodule > Interface: qtplugin Currently the recommended way to write a module which exposes one or more installer pages (viewmodule) is through a C++ and Qt plugin. Viewmodules must implement `Calamares::ViewStep`. They can also implement `Calamares::Job` to provide jobs. To add a Qt plugin module, put it in a subdirectory and make sure it has a `CMakeLists.txt` with a `calamares_add_plugin` call. It will be picked up automatically by our CMake magic. The `module.desc` file is not recommended: nearly all cases can be described in CMake. ## Python modules Modules may use one of the python interfaces, which may be present in a Calamares installation (but also may not be). These modules must have a `module.desc` file. The Python script must implement one or more of the Python interfaces for Calamares -- either the python jobmodule interface, or the experimental pythonqt job- and viewmodule interfaces. To add a Python or process jobmodule, put it in a subdirectory and make sure it has a `module.desc`. It will be picked up automatically by our CMake magic. For all kinds of Python jobs, the key *script* must be set to the name of the main python file for the job. This is almost universally `main.py`. `CMakeLists.txt` is *not* used for Python and process jobmodules. Calamares offers a Python API for module developers, the core Calamares functionality is exposed as `libcalamares.job` for job data, `libcalamares.globalstorage` for shared data and `libcalamares.utils` for generic utility functions. Documentation is inline. All code in Python job modules must obey PEP8, the only exception are `libcalamares.globalstorage` keys, which should always be camelCaseWithLowerCaseInitial to match the C++ identifier convention. For testing and debugging we provide the `testmodule.py` script which fakes a limited Calamares Python environment for running a single jobmodule. ### Python Jobmodule > Type: jobmodule > Interface: python A Python jobmodule is a Python program which imports libcalamares and has a function `run()` as entry point. The function `run()` must return `None` if everything went well, or a tuple `(str,str)` with an error message and description if something went wrong. ### Python API **TODO:** this needs documentation ## PythonQt modules > Type: viewmodule, jobmodule > Interface: pythonqt The PythonQt modules are considered experimental and may be removed again due to low uptake. Their documentation is also almost completely lacking. ### PythonQt Jobmodule A PythonQt jobmodule implements the experimental Job interface by defining a subclass of something. ### PythonQt Viewmodule A PythonQt viewmodule implements the experimental View interface by defining a subclass of something. ### Python API **TODO:** this needs documentation ## Process jobmodules > Type: jobmodule > Interface: process A process jobmodule runs a (single) command. The interface is *process*, while the module type must be *job* or *jobmodule*. The module-descriptor key *command* should have a string as value, which is passed to the shell -- remember to quote it properly. It is generally recommended to use a *shellprocess* job module instead (less configuration, easier to have multiple instances). calamares-3.2.20/src/modules/bootloader/000077500000000000000000000000001362604102500201165ustar00rootroot00000000000000calamares-3.2.20/src/modules/bootloader/bootloader.conf000066400000000000000000000042611362604102500231220ustar00rootroot00000000000000# Bootloader configuration. The bootloader is installed to allow # the system to start (and pick one of the installed operating # systems to run). --- # Define which bootloader you want to use for EFI installations # Possible options are 'grub', 'sb-shim' and 'systemd-boot'. efiBootLoader: "grub" # systemd-boot configuration files settings, set kernel and initramfs file names # and amount of time before default selection boots kernel: "/vmlinuz-linux" img: "/initramfs-linux.img" fallback: "/initramfs-linux-fallback.img" timeout: "10" # Optionally set the menu entry name and kernel name to use in systemd-boot. # If not specified here, these settings will be taken from branding.desc. # # bootloaderEntryName: "Generic GNU/Linux" # kernelLine: ", with Stable-Kernel" # fallbackKernelLine: ", with Stable-Kernel (fallback initramfs)" # GRUB 2 binary names and boot directory # Some distributions (e.g. Fedora) use grub2-* (resp. /boot/grub2/) names. # These names are also used when using sb-shim, since that needs some # GRUB functionality (notably grub-probe) to work. As needed, you may use # complete paths like `/usr/bin/efibootmgr` for the executables. # grubInstall: "grub-install" grubMkconfig: "grub-mkconfig" grubCfg: "/boot/grub/grub.cfg" grubProbe: "grub-probe" efiBootMgr: "efibootmgr" # Optionally set the bootloader ID to use for EFI. This is passed to # grub-install --bootloader-id. # # If not set here, the value from bootloaderEntryName from branding.desc # is used, with problematic characters (space and slash) replaced. # # The ID is also used as a directory name within the EFI environment, # and the bootloader is copied from /boot/efi/EFI// . When # setting the option here, keep in mind that the name is sanitized # (problematic characters, see above, are replaced). # # efiBootloaderId: "dirname" # Optionally install a copy of the GRUB EFI bootloader as the EFI # fallback loader (either bootia32.efi or bootx64.efi depending on # the system). This may be needed on certain systems (Intel DH87MC # seems to be the only one). If you set this to false, take care # to add another module to optionally install the fallback on those # boards that need it. installEFIFallback: true calamares-3.2.20/src/modules/bootloader/main.py000066400000000000000000000405031362604102500214160ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # === This file is part of Calamares - === # # Copyright 2014, Aurélien Gâteau # Copyright 2014, Anke Boersma # Copyright 2014, Daniel Hillenbrand # Copyright 2014, Benjamin Vaudour # Copyright 2014-2019, Kevin Kofler # Copyright 2015-2018, Philip Mueller # Copyright 2016-2017, Teo Mrnjavac # Copyright 2017, Alf Gaida # Copyright 2017-2019, Adriaan de Groot # Copyright 2017, Gabriel Craciunescu # Copyright 2017, Ben Green # # Calamares 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. # # Calamares 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 Calamares. If not, see . import os import shutil import subprocess import libcalamares from libcalamares.utils import check_target_env_call import gettext _ = gettext.translation("calamares-python", localedir=libcalamares.utils.gettext_path(), languages=libcalamares.utils.gettext_languages(), fallback=True).gettext # This is the sanitizer used all over to tidy up filenames # to make identifiers (or to clean up names to make filenames). file_name_sanitizer = str.maketrans(" /()", "_-__") def pretty_name(): return _("Install bootloader.") def get_uuid(): """ Checks and passes 'uuid' to other routine. :return: """ root_mount_point = libcalamares.globalstorage.value("rootMountPoint") partitions = libcalamares.globalstorage.value("partitions") for partition in partitions: if partition["mountPoint"] == "/": libcalamares.utils.debug("Root partition uuid: \"{!s}\"".format(partition["uuid"])) return partition["uuid"] return "" def get_bootloader_entry_name(): """ Passes 'bootloader_entry_name' to other routine based on configuration file. :return: """ if "bootloaderEntryName" in libcalamares.job.configuration: return libcalamares.job.configuration["bootloaderEntryName"] else: branding = libcalamares.globalstorage.value("branding") return branding["bootloaderEntryName"] def get_kernel_line(kernel_type): """ Passes 'kernel_line' to other routine based on configuration file. :param kernel_type: :return: """ if kernel_type == "fallback": if "fallbackKernelLine" in libcalamares.job.configuration: return libcalamares.job.configuration["fallbackKernelLine"] else: return " (fallback)" else: if "kernelLine" in libcalamares.job.configuration: return libcalamares.job.configuration["kernelLine"] else: return "" def create_systemd_boot_conf(install_path, efi_dir, uuid, entry, entry_name, kernel_type): """ Creates systemd-boot configuration files based on given parameters. :param install_path: :param efi_dir: :param uuid: :param entry: :param entry_name: :param kernel_type: """ kernel = libcalamares.job.configuration["kernel"] kernel_params = ["quiet"] partitions = libcalamares.globalstorage.value("partitions") swap_uuid = "" cryptdevice_params = [] # Take over swap settings: # - unencrypted swap partition sets swap_uuid # - encrypted root sets cryptdevice_params for partition in partitions: has_luks = "luksMapperName" in partition if partition["fs"] == "linuxswap" and not has_luks: swap_uuid = partition["uuid"] if partition["mountPoint"] == "/" and has_luks: cryptdevice_params = ["cryptdevice=UUID=" + partition["luksUuid"] + ":" + partition["luksMapperName"], "root=/dev/mapper/" + partition["luksMapperName"], "resume=/dev/mapper/" + partition["luksMapperName"]] if cryptdevice_params: kernel_params.extend(cryptdevice_params) else: kernel_params.append("root=UUID={!s}".format(uuid)) if swap_uuid: kernel_params.append("resume=UUID={!s}".format(swap_uuid)) kernel_line = get_kernel_line(kernel_type) libcalamares.utils.debug("Configure: \"{!s}\"".format(kernel_line)) if kernel_type == "fallback": img = libcalamares.job.configuration["fallback"] entry_name = entry_name + "-fallback" else: img = libcalamares.job.configuration["img"] conf_path = os.path.join(install_path + efi_dir, "loader", "entries", entry_name + ".conf") # Copy kernel and initramfs to a subdirectory of /efi partition files_dir = os.path.join(install_path + efi_dir, entry_name) os.mkdir(files_dir) kernel_path = install_path + kernel kernel_name = os.path.basename(kernel_path) shutil.copyfile(kernel_path, os.path.join(files_dir, kernel_name)) img_path = install_path + img img_name = os.path.basename(img_path) shutil.copyfile(img_path, os.path.join(files_dir, img_name)) lines = [ '## This is just an example config file.\n', '## Please edit the paths and kernel parameters according\n', '## to your system.\n', '\n', "title {!s}{!s}\n".format(entry, kernel_line), "linux {!s}\n".format(os.path.join("/", entry_name, kernel_name)), "initrd {!s}\n".format(os.path.join("/", entry_name, img_name)), "options {!s} rw\n".format(" ".join(kernel_params)), ] with open(conf_path, 'w') as conf_file: for line in lines: conf_file.write(line) def create_loader(loader_path, entry): """ Writes configuration for loader. :param loader_path: :param entry: """ timeout = libcalamares.job.configuration["timeout"] lines = [ "timeout {!s}\n".format(timeout), "default {!s}\n".format(entry), ] with open(loader_path, 'w') as loader_file: for line in lines: loader_file.write(line) def efi_label(): if "efiBootloaderId" in libcalamares.job.configuration: efi_bootloader_id = libcalamares.job.configuration[ "efiBootloaderId"] else: branding = libcalamares.globalstorage.value("branding") efi_bootloader_id = branding["bootloaderEntryName"] return efi_bootloader_id.translate(file_name_sanitizer) def efi_word_size(): # get bitness of the underlying UEFI try: sysfile = open("/sys/firmware/efi/fw_platform_size", "r") efi_bitness = sysfile.read(2) except Exception: # if the kernel is older than 4.0, the UEFI bitness likely isn't # exposed to the userspace so we assume a 64 bit UEFI here efi_bitness = "64" return efi_bitness def install_systemd_boot(efi_directory): """ Installs systemd-boot as bootloader for EFI setups. :param efi_directory: """ libcalamares.utils.debug("Bootloader: systemd-boot") install_path = libcalamares.globalstorage.value("rootMountPoint") install_efi_directory = install_path + efi_directory uuid = get_uuid() distribution = get_bootloader_entry_name() distribution_translated = distribution.translate(file_name_sanitizer) loader_path = os.path.join(install_efi_directory, "loader", "loader.conf") subprocess.call(["bootctl", "--path={!s}".format(install_efi_directory), "install"]) create_systemd_boot_conf(install_path, efi_directory, uuid, distribution, distribution_translated, "default") if "fallback" in libcalamares.job.configuration: create_systemd_boot_conf(install_path, efi_directory, uuid, distribution, distribution_translated, "fallback") create_loader(loader_path, distribution_translated) def install_grub(efi_directory, fw_type): """ Installs grub as bootloader, either in pc or efi mode. :param efi_directory: :param fw_type: """ if fw_type == "efi": libcalamares.utils.debug("Bootloader: grub (efi)") install_path = libcalamares.globalstorage.value("rootMountPoint") install_efi_directory = install_path + efi_directory if not os.path.isdir(install_efi_directory): os.makedirs(install_efi_directory) efi_bootloader_id = efi_label() efi_bitness = efi_word_size() if efi_bitness == "32": efi_target = "i386-efi" efi_grub_file = "grubia32.efi" efi_boot_file = "bootia32.efi" elif efi_bitness == "64": efi_target = "x86_64-efi" efi_grub_file = "grubx64.efi" efi_boot_file = "bootx64.efi" check_target_env_call([libcalamares.job.configuration["grubInstall"], "--target=" + efi_target, "--efi-directory=" + efi_directory, "--bootloader-id=" + efi_bootloader_id, "--force"]) # VFAT is weird, see issue CAL-385 install_efi_directory_firmware = (vfat_correct_case( install_efi_directory, "EFI")) if not os.path.exists(install_efi_directory_firmware): os.makedirs(install_efi_directory_firmware) # there might be several values for the boot directory # most usual they are boot, Boot, BOOT install_efi_boot_directory = (vfat_correct_case( install_efi_directory_firmware, "boot")) if not os.path.exists(install_efi_boot_directory): os.makedirs(install_efi_boot_directory) # Workaround for some UEFI firmwares FALLBACK = "installEFIFallback" libcalamares.utils.debug("UEFI Fallback: " + str(libcalamares.job.configuration.get(FALLBACK, ""))) if libcalamares.job.configuration.get(FALLBACK, True): libcalamares.utils.debug(" .. installing '{!s}' fallback firmware".format(efi_boot_file)) efi_file_source = os.path.join(install_efi_directory_firmware, efi_bootloader_id, efi_grub_file) efi_file_target = os.path.join(install_efi_boot_directory, efi_boot_file) shutil.copy2(efi_file_source, efi_file_target) else: libcalamares.utils.debug("Bootloader: grub (bios)") if libcalamares.globalstorage.value("bootLoader") is None: return boot_loader = libcalamares.globalstorage.value("bootLoader") if boot_loader["installPath"] is None: return check_target_env_call([libcalamares.job.configuration["grubInstall"], "--target=i386-pc", "--recheck", "--force", boot_loader["installPath"]]) # The input file /etc/default/grub should already be filled out by the # grubcfg job module. check_target_env_call([libcalamares.job.configuration["grubMkconfig"], "-o", libcalamares.job.configuration["grubCfg"]]) def install_secureboot(efi_directory): """ Installs the secureboot shim in the system by calling efibootmgr. """ efi_bootloader_id = efi_label() install_path = libcalamares.globalstorage.value("rootMountPoint") install_efi_directory = install_path + efi_directory if efi_word_size() == "64": install_efi_bin = "shim64.efi" else: install_efi_bin = "shim.efi" # Copied, roughly, from openSUSE's install script, # and pythonified. *disk* is something like /dev/sda, # while *drive* may return "(disk/dev/sda,gpt1)" .. # we're interested in the numbers in the second part # of that tuple. efi_drive = subprocess.check_output([ libcalamares.job.configuration["grubProbe"], "-t", "drive", "--device-map=", install_efi_directory]).decode("ascii") efi_disk = subprocess.check_output([ libcalamares.job.configuration["grubProbe"], "-t", "disk", "--device-map=", install_efi_directory]).decode("ascii") efi_drive_partition = efi_drive.replace("(","").replace(")","").split(",")[1] # Get the first run of digits from the partition efi_partition_number = None c = 0 start = None while c < len(efi_drive_partition): if efi_drive_partition[c].isdigit() and start is None: start = c if not efi_drive_partition[c].isdigit() and start is not None: efi_partition_number = efi_drive_partition[start:c] break c += 1 if efi_partition_number is None: raise ValueError("No partition number found for %s" % install_efi_directory) subprocess.call([ libcalamares.job.configuration["efiBootMgr"], "-c", "-w", "-L", efi_bootloader_id, "-d", efi_disk, "-p", efi_partition_number, "-l", install_efi_directory + "/" + install_efi_bin]) # The input file /etc/default/grub should already be filled out by the # grubcfg job module. check_target_env_call([libcalamares.job.configuration["grubMkconfig"], "-o", os.path.join(efi_directory, "EFI", efi_bootloader_id, "grub.cfg")]) def vfat_correct_case(parent, name): for candidate in os.listdir(parent): if name.lower() == candidate.lower(): return os.path.join(parent, candidate) return os.path.join(parent, name) def prepare_bootloader(fw_type): """ Prepares bootloader. Based on value 'efi_boot_loader', it either calls systemd-boot or grub to be installed. :param fw_type: :return: """ efi_boot_loader = libcalamares.job.configuration["efiBootLoader"] efi_directory = libcalamares.globalstorage.value("efiSystemPartition") if efi_boot_loader == "systemd-boot" and fw_type == "efi": install_systemd_boot(efi_directory) elif efi_boot_loader == "sb-shim" and fw_type == "efi": install_secureboot(efi_directory) elif efi_boot_loader == "grub" or fw_type != "efi": install_grub(efi_directory, fw_type) else: libcalamares.utils.debug( "WARNING: the combination of " "boot-loader '{!s}' and firmware '{!s}' " "is not supported.".format(efi_boot_loader, fw_type) ) def run(): """ Starts procedure and passes 'fw_type' to other routine. :return: """ fw_type = libcalamares.globalstorage.value("firmwareType") if (libcalamares.globalstorage.value("bootLoader") is None and fw_type != "efi"): libcalamares.utils.warning( "Non-EFI system, and no bootloader is set." ) return None partitions = libcalamares.globalstorage.value("partitions") if fw_type == "efi": efi_system_partition = libcalamares.globalstorage.value("efiSystemPartition") esp_found = [ p for p in partitions if p["mountPoint"] == efi_system_partition ] if not esp_found: libcalamares.utils.warning( "EFI system, but nothing mounted on {!s}".format(efi_system_partition) ) return None prepare_bootloader(fw_type) return None calamares-3.2.20/src/modules/bootloader/module.desc000066400000000000000000000003461362604102500222460ustar00rootroot00000000000000--- type: "job" interface: "python" name: "bootloader" script: "main.py" # The partition module sets up the EFI firmware type # global key, which is used to decide how to install. requiredModules: [ "partition" ] calamares-3.2.20/src/modules/bootloader/test.yaml000066400000000000000000000001621362604102500217600ustar00rootroot00000000000000rootMountPoint: /tmp/mount bootLoader: installPath: /dev/sdb branding: shortProductName: "Generic Distro" calamares-3.2.20/src/modules/contextualprocess/000077500000000000000000000000001362604102500215515ustar00rootroot00000000000000calamares-3.2.20/src/modules/contextualprocess/Binding.h000066400000000000000000000055111362604102500232760ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2017-2020, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ /* This file isn't public API, but is used to express the API that * the tests for ContextualProcess can work with. */ #ifndef CONTEXTUALPROCESSJOB_BINDING_H #define CONTEXTUALPROCESSJOB_BINDING_H #include "Job.h" #include #include #include namespace CalamaresUtils { class CommandList; } namespace Calamares { class GlobalStorage; } struct ValueCheck : public QPair< QString, CalamaresUtils::CommandList* > { ValueCheck( const QString& value, CalamaresUtils::CommandList* commands ) : QPair< QString, CalamaresUtils::CommandList* >( value, commands ) { } // ~ValueCheck() // // There is no destructor. // // We don't own the commandlist, the binding holding this valuecheck // does, so don't delete. This is closely tied to (temporaries created // by) pass-by-value in QList::append(). QString value() const { return first; } CalamaresUtils::CommandList* commands() const { return second; } }; class ContextualProcessBinding { public: ContextualProcessBinding( const QString& varname ) : m_variable( varname ) { } ~ContextualProcessBinding(); QString variable() const { return m_variable; } int count() const { return m_checks.count(); } /** * @brief add commands to be executed when @p value is matched. * * Ownership of the CommandList passes to this binding. */ void append( const QString& value, CalamaresUtils::CommandList* commands ); ///@brief The bound variable has @p value , run the associated commands. Calamares::JobResult run( const QString& value ) const; /** @brief Tries to obtain this binding's value from GS * * Stores the value in @p value and returns true if a value * was found (e.g. @p storage contains the variable this binding * is for) and false otherwise. */ bool fetch( Calamares::GlobalStorage* storage, QString& value ) const; private: QString m_variable; QList< ValueCheck > m_checks; CalamaresUtils::CommandList* m_wildcard = nullptr; }; #endif calamares-3.2.20/src/modules/contextualprocess/CMakeLists.txt000066400000000000000000000005561362604102500243170ustar00rootroot00000000000000calamares_add_plugin( contextualprocess TYPE job EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES ContextualProcessJob.cpp LINK_PRIVATE_LIBRARIES calamares SHARED_LIB ) calamares_add_test( contextualprocesstest SOURCES Tests.cpp ContextualProcessJob.cpp # Builds it a second time LIBRARIES yamlcpp ) calamares-3.2.20/src/modules/contextualprocess/ContextualProcessJob.cpp000066400000000000000000000132571362604102500264050ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2017-2020, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "ContextualProcessJob.h" #include "Binding.h" #include "CalamaresVersion.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/CommandList.h" #include "utils/Logger.h" #include "utils/Variant.h" ContextualProcessBinding::~ContextualProcessBinding() { m_wildcard = nullptr; for ( const auto& c : m_checks ) { delete c.commands(); } } void ContextualProcessBinding::append( const QString& value, CalamaresUtils::CommandList* commands ) { m_checks.append( ValueCheck( value, commands ) ); if ( value == QString( "*" ) ) { m_wildcard = commands; } } Calamares::JobResult ContextualProcessBinding::run( const QString& value ) const { for ( const auto& c : m_checks ) { if ( value == c.value() ) { return c.commands()->run(); } } if ( m_wildcard ) { return m_wildcard->run(); } return Calamares::JobResult::ok(); } ///@brief Implementation of fetch() for recursively looking up dotted selector parts. static bool fetch( QString& value, QStringList& selector, int index, const QVariant& v ) { if ( !v.canConvert( QMetaType::QVariantMap ) ) { return false; } const QVariantMap map = v.toMap(); const QString& key = selector.at( index ); if ( index == selector.length() - 1) { value = map.value( key ).toString(); return map.contains( key ); } else { return fetch( value, selector, index + 1, map.value( key ) ); } } bool ContextualProcessBinding::fetch( Calamares::GlobalStorage* storage, QString& value ) const { value.clear(); if ( !storage ) { return false; } if ( m_variable.contains( '.' ) ) { QStringList steps = m_variable.split( '.' ); return ::fetch( value, steps, 1, storage->value( steps.first() ) ); } else { value = storage->value( m_variable ).toString(); return storage->contains( m_variable ); } } ContextualProcessJob::ContextualProcessJob( QObject* parent ) : Calamares::CppJob( parent ) { } ContextualProcessJob::~ContextualProcessJob() { qDeleteAll( m_commands ); } QString ContextualProcessJob::prettyName() const { return tr( "Contextual Processes Job" ); } Calamares::JobResult ContextualProcessJob::exec() { Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); for ( const ContextualProcessBinding* binding : m_commands ) { QString value; if ( binding->fetch( gs, value ) ) { Calamares::JobResult r = binding->run( value ); if ( !r ) { return r; } } else { cWarning() << "ContextualProcess checks for unknown variable" << binding->variable(); } } return Calamares::JobResult::ok(); } void ContextualProcessJob::setConfigurationMap( const QVariantMap& configurationMap ) { bool dontChroot = CalamaresUtils::getBool( configurationMap, "dontChroot", false ); qint64 timeout = CalamaresUtils::getInteger( configurationMap, "timeout", 10 ); if ( timeout < 1 ) { timeout = 10; } for ( QVariantMap::const_iterator iter = configurationMap.cbegin(); iter != configurationMap.cend(); ++iter ) { QString variableName = iter.key(); if ( variableName.isEmpty() || ( variableName == "dontChroot" ) || ( variableName == "timeout" ) ) { continue; } if ( iter.value().type() != QVariant::Map ) { cWarning() << moduleInstanceKey() << "bad configuration values for" << variableName; continue; } auto binding = new ContextualProcessBinding( variableName ); m_commands.append( binding ); QVariantMap values = iter.value().toMap(); for ( QVariantMap::const_iterator valueiter = values.cbegin(); valueiter != values.cend(); ++valueiter ) { QString valueString = valueiter.key(); if ( variableName.isEmpty() ) { cWarning() << moduleInstanceKey() << "variable" << variableName << "unrecognized value" << valueiter.key(); continue; } CalamaresUtils::CommandList* commands = new CalamaresUtils::CommandList( valueiter.value(), !dontChroot, std::chrono::seconds( timeout ) ); binding->append( valueString, commands ); } } } int ContextualProcessJob::count() { return m_commands.count(); } int ContextualProcessJob::count( const QString& variableName ) { for ( const ContextualProcessBinding* binding : m_commands ) { if ( binding->variable() == variableName ) { return binding->count(); } } return -1; } CALAMARES_PLUGIN_FACTORY_DEFINITION( ContextualProcessJobFactory, registerPlugin< ContextualProcessJob >(); ) calamares-3.2.20/src/modules/contextualprocess/ContextualProcessJob.h000066400000000000000000000033061362604102500260440ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2017-2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef CONTEXTUALPROCESSJOB_H #define CONTEXTUALPROCESSJOB_H #include #include #include "CppJob.h" #include "DllMacro.h" #include "utils/PluginFactory.h" class ContextualProcessBinding; class PLUGINDLLEXPORT ContextualProcessJob : public Calamares::CppJob { Q_OBJECT public: explicit ContextualProcessJob( QObject* parent = nullptr ); virtual ~ContextualProcessJob() override; QString prettyName() const override; Calamares::JobResult exec() override; void setConfigurationMap( const QVariantMap& configurationMap ) override; /// The number of bindings int count(); /// The number of value-checks for the named binding (-1 if binding doesn't exist) int count( const QString& variableName ); private: QList< ContextualProcessBinding* > m_commands; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( ContextualProcessJobFactory ) #endif // CONTEXTUALPROCESSJOB_H calamares-3.2.20/src/modules/contextualprocess/Tests.cpp000066400000000000000000000136441362604102500233670ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2017-2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "Tests.h" #include "Binding.h" #include "ContextualProcessJob.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/CommandList.h" #include "utils/Logger.h" #include "utils/Yaml.h" #include #include #include QTEST_GUILESS_MAIN( ContextualProcessTests ) using CommandList = CalamaresUtils::CommandList; ContextualProcessTests::ContextualProcessTests() {} ContextualProcessTests::~ContextualProcessTests() {} void ContextualProcessTests::initTestCase() { Logger::setupLogLevel( Logger::LOGDEBUG ); // Ensure we have a system object, expect it to be a "bogus" one CalamaresUtils::System* system = CalamaresUtils::System::instance(); QVERIFY( system ); QVERIFY( system->doChroot() ); // Ensure we have a system-wide GlobalStorage with /tmp as root if ( !Calamares::JobQueue::instance() ) { cDebug() << "Creating new JobQueue"; (void)new Calamares::JobQueue(); } Calamares::GlobalStorage* gs = Calamares::JobQueue::instance() ? Calamares::JobQueue::instance()->globalStorage() : nullptr; QVERIFY( gs ); } void ContextualProcessTests::testProcessListSampleConfig() { YAML::Node doc; QStringList dirs { "src/modules/contextualprocess", "." }; for ( const auto& dir : dirs ) { QString filename = dir + "/contextualprocess.conf"; if ( QFileInfo::exists( filename ) ) { doc = YAML::LoadFile( filename.toStdString() ); break; } } ContextualProcessJob job; job.setConfigurationMap( CalamaresUtils::yamlMapToVariant( doc ).toMap() ); QCOMPARE( job.count(), 2 ); // Only "firmwareType" and "branding.shortVersion" QCOMPARE( job.count( "firmwareType" ), 4 ); QCOMPARE( job.count( "branding.shortVersion" ), 2 ); // in the example config } void ContextualProcessTests::testFetch() { Logger::setupLogLevel( Logger::LOGVERBOSE ); QVariantMap m; // Some keys without sub-map m.insert( QStringLiteral( "carrot" ), true ); m.insert( QStringLiteral( "tomato" ), QStringLiteral( "fruit" ) ); // A key with sub-map { QVariantMap names; names.insert( QStringLiteral( "blackcurrant" ), QStringLiteral( "black" ) ); names.insert( QStringLiteral( "redcurrant" ), QStringLiteral( "red" ) ); names.insert( QStringLiteral( "knoebels" ), QStringLiteral( "green" ) ); names.insert( QStringLiteral( "strawberry" ), QStringLiteral( "red" ) ); m.insert( QStringLiteral( "berries" ), names ); } // Another key with sub-map { QVariantMap names; names.insert( QStringLiteral( "ext4" ), 1 ); names.insert( QStringLiteral( "zfs" ), 2 ); names.insert( QStringLiteral( "swap" ), 2 ); m.insert( QStringLiteral( "filesystem_use" ), names ); } QCOMPARE( m.count(), 4 ); Calamares::GlobalStorage* gs = Calamares::JobQueue::instance() ? Calamares::JobQueue::instance()->globalStorage() : nullptr; QVERIFY( gs ); // Copy the built-up-map into GS for ( auto it = m.cbegin(); it != m.cend(); ++it ) { gs->insert( it.key(), it.value() ); } // Testing of fetch() { ContextualProcessBinding b( QStringLiteral( "carrot" ) ); QString s; QVERIFY( b.fetch( gs, s ) ); QCOMPARE( s, QStringLiteral( "true" ) ); // String representation of boolean true } { ContextualProcessBinding b( QStringLiteral( "tomato" ) ); QString s; QVERIFY( b.fetch( gs, s ) ); QCOMPARE( s, QStringLiteral( "fruit" ) ); } { // Key not found ContextualProcessBinding b( QStringLiteral( "parsnip" ) ); QString s = QStringLiteral( "white" ); QVERIFY( !b.fetch( gs, s ) ); QCOMPARE( s, QString() ); QVERIFY( s.isEmpty() ); } { // Submap gets smashed ContextualProcessBinding b( QStringLiteral( "berries" ) ); QString s; QVERIFY( b.fetch( gs, s ) ); QVERIFY( s.isEmpty() ); // No string representation } { // Compound lookup ContextualProcessBinding b( QStringLiteral( "berries.strawberry" ) ); QString s; QVERIFY( b.fetch( gs, s ) ); QCOMPARE( s, QStringLiteral( "red" ) ); } { ContextualProcessBinding b( QStringLiteral( "berries.knoebels" ) ); QString s; QVERIFY( b.fetch( gs, s ) ); QCOMPARE( s, QStringLiteral( "green" ) ); } { ContextualProcessBinding b( QStringLiteral( "filesystem_use.ext4" ) ); QString s; QVERIFY( b.fetch( gs, s ) ); QCOMPARE( s, QStringLiteral( "1" ) ); } { ContextualProcessBinding b( QStringLiteral( "filesystem_use.zfs" ) ); QString s; QVERIFY( b.fetch( gs, s ) ); QCOMPARE( s, QStringLiteral( "2" ) ); } { // Key not found, compound ContextualProcessBinding b( QStringLiteral( "filesystem_use.ufs" ) ); QString s = QStringLiteral( "ufs" ); QVERIFY( !b.fetch( gs, s ) ); QCOMPARE( s, QString() ); QVERIFY( s.isEmpty() ); } } calamares-3.2.20/src/modules/contextualprocess/Tests.h000066400000000000000000000022521362604102500230250ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef TESTS_H #define TESTS_H #include class ContextualProcessTests : public QObject { Q_OBJECT public: ContextualProcessTests(); ~ContextualProcessTests() override; private Q_SLOTS: void initTestCase(); // Check the sample config file is processed correctly void testProcessListSampleConfig(); // Variable binding lookup void testFetch(); }; #endif calamares-3.2.20/src/modules/contextualprocess/contextualprocess.conf000066400000000000000000000051271362604102500262120ustar00rootroot00000000000000# Configuration for the contextual process job. # # Contextual processes are based on **global** configuration values. # When a given global value (string) equals a given value, then # the associated command is executed. # # The special top-level keys *dontChroot* and *timeout* have # meaning just like in shellprocess.conf. They are excluded from # the comparison with global variables. # # Configuration consists of keys for global variable names (except # *dontChroot* and *timeout*), and the sub-keys are strings to compare # to the variable's value. If the variable has that particular value, the # corresponding value (script) is executed. # # The variable **may** contain dots, in which case the dot is used # to select into maps inside global storage, e.g. # # - *firmwareType* is a simple global name # - *branding.bootloader* is the *bootloader* value in the *branding* map # # Only a few global storage entries have well-defined sub-maps; # branding is one of them, and *filesystem_use* is another. Note that # variable names with dots **must** be quoted, or you will get a YAML error. # # # You can check for an empty value with "". # # As a special case, the value-check "*" matches any value, but **only** # if no other value-check matches. Use it as an *else* form for value- # checks. Take care to put the asterisk in quotes. The value-check "*" # **also** matches a literal asterisk as value; a confusing corner case # is checking for an asterisk **and** having a wildcard match with # different commands. This is currently not possible. # # Global configuration variables are not checked in a deterministic # order, so do not rely on commands from one variable-check to # always happen before (or after) checks on another # variable. Similarly, the value-equality checks are not # done in a deterministic order, but all of the value-checks # for a given variable happen together. As a special case, the # value-check for "*" (the *else* case) happens after all of the # other value-checks, and only matches if none of the others do. # # The values after a value sub-keys are the same kinds of values # as can be given to the *script* key in the shellprocess module. # See shellprocess.conf for documentation on valid values. --- dontChroot: false firmwareType: efi: - "-pkg remove efi-firmware" - command: "-mkinitramfsrd -abgn" timeout: 120 # This is slow bios: "-pkg remove bios-firmware" "": "/bin/false no-firmware-type-set" "*": "/bin/false some-other-firmware-value" "branding.shortVersion": "2020.2": "/bin/false february" "2019.4": "/bin/true april" calamares-3.2.20/src/modules/displaymanager/000077500000000000000000000000001362604102500207645ustar00rootroot00000000000000calamares-3.2.20/src/modules/displaymanager/displaymanager.conf000066400000000000000000000041311362604102500246320ustar00rootroot00000000000000# Configure one or more display managers (e.g. SDDM) # with a "best effort" approach. # # This module also sets up autologin, if the feature is enabled in # globalstorage (where it would come from the users page). --- # The DM module attempts to set up all the DMs found in this list, in the # precise order listed. The displaymanagers list can also be set in # globalstorage, and in that case it overrides the setting here. # # If *sysconfigSetup* is set to *true* (see below, only relevant for # openSUSE derivatives) then this list is ignored and only sysconfig # is attempted. You can also list "sysconfig" in this list instead. # displaymanagers: - slim - sddm - lightdm - gdm - mdm - lxdm - kdm # Enable the following settings to force a desktop environment # in your displaymanager configuration file. This will attempt # to configure the given DE (without checking if it is installed). # The DM configuration for each potential DM may **or may not** # support configuring a default DE, so the keys are mandatory # but their interpretation is up to the DM configuration. # # Subkeys of *defaultDesktopEnvironment* are (all mandatory): # - *executable* a full path to an executable # - *desktopFile* a .desktop filename # # If this is **not** set, then Calamares will look for installed # DE's and pick the first one it finds that is actually installed. # # If this **is** set, and the *executable* key doesn't point to # an installed file, then the .desktop file's TryExec key is # used instead. # #defaultDesktopEnvironment: # executable: "startkde" # desktopFile: "plasma" #If true, try to ensure that the user, group, /var directory etc. for the #display manager are set up correctly. This is normally done by the distribution #packages, and best left to them. Therefore, it is disabled by default. basicSetup: false # If true, setup autologin for openSUSE. This only makes sense on openSUSE # derivatives or other systems where /etc/sysconfig/displaymanager exists. # # The preferred way to pick sysconfig is to just list it in the # *displaymanagers* list (as the only one). # sysconfigSetup: false calamares-3.2.20/src/modules/displaymanager/main.py000066400000000000000000001060701362604102500222660ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # === This file is part of Calamares - === # # Copyright 2014-2018, Philip Müller # Copyright 2014-2015, Teo Mrnjavac # Copyright 2014, Kevin Kofler # Copyright 2017, Alf Gaida # Copyright 2017, Bernhard Landauer # Copyright 2017, 2019, Adriaan de Groot # Copyright 2019, Dominic Hayes # # Calamares 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. # # Calamares 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 Calamares. If not, see . import abc import os import re import libcalamares import configparser from libcalamares.utils import gettext_path, gettext_languages import gettext _translation = gettext.translation("calamares-python", localedir=gettext_path(), languages=gettext_languages(), fallback=True) _ = _translation.gettext _n = _translation.ngettext class DesktopEnvironment: """ Desktop Environment -- some utility functions for a desktop environment (e.g. finding out if it is installed). This is independent of the *Display Manager*, which is what we're configuring in this module. """ def __init__(self, exec, desktop): self.executable = exec self.desktop_file = desktop def _search_executable(self, root_mount_point, pathname): """ Search for @p pathname within @p root_mount_point . If the pathname is absolute, just check there inside the target, otherwise earch in a sort-of-sensible $PATH. Returns the full (including @p root_mount_point) path to that executable, or None. """ if pathname.startswith("/"): path = [""] else: path = ["/bin/", "/usr/bin/", "/sbin/", "/usr/local/bin/"] for p in path: absolute_path = "{!s}{!s}{!s}".format(root_mount_point, p, pathname) if os.path.exists(absolute_path): return absolute_path return None def _search_tryexec(self, root_mount_point, absolute_desktop_file): """ Check @p absolute_desktop_file for a TryExec line and, if that is found, search for the command (executable pathname) within @p root_mount_point. The .desktop file must live within the target root. Returns the full (including @p root_mount_point) for the executable from TryExec, or None. """ assert absolute_desktop_file.startswith(root_mount_point) with open(absolute_desktop_file, "r") as f: for tryexec_line in [x for x in f.readlines() if x.startswith("TryExec")]: try: key, value = tryexec_line.split("=") if key.strip() == "TryExec": return self._search_executable(root_mount_point, value.strip()) except: pass return None def find_executable(self, root_mount_point): """ Returns the full path of the configured executable within @p root_mount_point, or None if it isn't found. May search in a semi-sensible $PATH. """ return self._search_executable(root_mount_point, self.executable) def find_desktop_file(self, root_mount_point): """ Returns the full path of the .desktop file within @p root_mount_point, or None if it isn't found. Searches both X11 and Wayland sessions. """ x11_sessions = "{!s}/usr/share/xsessions/{!s}.desktop".format(root_mount_point, self.desktop_file) wayland_sessions = "{!s}/usr/share/wayland-sessions/{!s}.desktop".format(root_mount_point, self.desktop_file) for candidate in (x11_sessions, wayland_sessions): if os.path.exists(candidate): return candidate return None def is_installed(self, root_mount_point): """ Check if this environment is installed in the target system at @p root_mount_point. """ desktop_file = self.find_desktop_file(root_mount_point) if desktop_file is None: return False return (self.find_executable(root_mount_point) is not None or self._search_tryexec(root_mount_point, desktop_file) is not None) def update_from_desktop_file(self, root_mount_point): """ Find thie DE in the target system at @p root_mount_point. This can update the *executable* configuration value if the configured executable isn't found but the TryExec line from the .desktop file is. The .desktop file is mandatory for a DE. Returns True if the DE is installed. """ desktop_file = self.find_desktop_file(root_mount_point) if desktop_file is None: return False executable_file = self.find_executable(root_mount_point) if executable_file is not None: # .desktop found and executable as well. return True executable_file = self._search_tryexec(root_mount_point, desktop_file) if executable_file is not None: # Found from the .desktop file, so update own executable config if root_mount_point and executable_file.startswith(root_mount_point): executable_file = executable_file[len(root_mount_point):] if not executable_file: # Somehow chopped down to nothing return False if executable_file[0] != "/": executable_file = "/" + executable_file self.executable = executable_file return True # This is to double-check return self.is_installed(root_mount_point) # This is the list of desktop environments that Calamares looks # for; if no default environment is **explicitly** configured # in the `displaymanager.conf` then the first one from this list # that is found, is used. # # Each DE has a sample executable to look for, and a .desktop filename. # If the executable exists, the DE is assumed to be installed # and to use the given .desktop filename. # # If the .desktop file exists and contains a TryExec line and that # TryExec executable exists (searched in /bin, /usr/bin, /sbin and # /usr/local/bin) then the DE is assumed to be installed # and to use that .desktop filename. desktop_environments = [ DesktopEnvironment('/usr/bin/startplasma-x11', 'plasma'), # KDE Plasma 5.17+ DesktopEnvironment('/usr/bin/startkde', 'plasma'), # KDE Plasma 5 DesktopEnvironment('/usr/bin/startkde', 'kde-plasma'), # KDE Plasma 4 DesktopEnvironment( '/usr/bin/budgie-desktop', 'budgie-desktop' # Budgie v10 ), DesktopEnvironment( '/usr/bin/budgie-session', 'budgie-desktop' # Budgie v8 ), DesktopEnvironment('/usr/bin/gnome-session', 'gnome'), DesktopEnvironment('/usr/bin/startxfce4', 'xfce'), DesktopEnvironment('/usr/bin/cinnamon-session-cinnamon', 'cinnamon'), DesktopEnvironment('/usr/bin/mate-session', 'mate'), DesktopEnvironment('/usr/bin/enlightenment_start', 'enlightenment'), DesktopEnvironment('/usr/bin/lxsession', 'LXDE'), DesktopEnvironment('/usr/bin/startlxde', 'LXDE'), DesktopEnvironment('/usr/bin/lxqt-session', 'lxqt'), DesktopEnvironment('/usr/bin/pekwm', 'pekwm'), DesktopEnvironment('/usr/bin/pantheon-session', 'pantheon'), DesktopEnvironment('/usr/bin/i3', 'i3'), DesktopEnvironment('/usr/bin/startdde', 'deepin'), DesktopEnvironment('/usr/bin/openbox-session', 'openbox') ] def find_desktop_environment(root_mount_point): """ Checks which desktop environment is currently installed. :param root_mount_point: :return: """ libcalamares.utils.debug("Using rootMountPoint {!r}".format(root_mount_point)) for desktop_environment in desktop_environments: if desktop_environment.is_installed(root_mount_point): libcalamares.utils.debug(".. selected DE {!s}".format(desktop_environment.desktop_file)) return desktop_environment return None class DisplayManager(metaclass=abc.ABCMeta): """ Display Manager -- a base class for DM configuration. """ name = None executable = None def __init__(self, root_mount_point): self.root_mount_point = root_mount_point def have_dm(self): """ Is this DM installed in the target system? The default implementation checks for `executable` in the target system. """ if self.executable is None: return False bin_path = "{!s}/usr/bin/{!s}".format(self.root_mount_point, self.executable) sbin_path = "{!s}/usr/sbin/{!s}".format(self.root_mount_point, self.executable) return os.path.exists(bin_path) or os.path.exists(sbin_path) # The four abstract methods below are called in the order listed here. # They must all be implemented by subclasses, but not all of them # actually do something for all DMs. @abc.abstractmethod def basic_setup(self): """ Do basic setup (e.g. users, groups, directory creation) for this DM. """ # Some implementations do nothing @abc.abstractmethod def desktop_environment_setup(self, desktop_environment): """ Configure the given @p desktop_environment as the default one, in the configuration files for this DM. """ # Many implementations do nothing @abc.abstractmethod def greeter_setup(self): """ Additional setup for the greeter. """ # Most implementations do nothing @abc.abstractmethod def set_autologin(self, username, do_autologin, default_desktop_environment): """ Configure the DM inside the given @p root_mount_point with autologin (if @p do_autologin is True) for the given @p username. If the DM supports it, set the default DE to @p default_desktop_environment as well. """ class DMmdm(DisplayManager): name = "mdm" executable = "mdm" def set_autologin(self, username, do_autologin, default_desktop_environment): # Systems with MDM as Desktop Manager mdm_conf_path = os.path.join(self.root_mount_point, "etc/mdm/custom.conf") if os.path.exists(mdm_conf_path): with open(mdm_conf_path, 'r') as mdm_conf: text = mdm_conf.readlines() with open(mdm_conf_path, 'w') as mdm_conf: for line in text: if '[daemon]' in line: if do_autologin: line = ( "[daemon]\n" "AutomaticLogin={!s}\n" "AutomaticLoginEnable=True\n".format(username) ) else: line = ( "[daemon]\n" "AutomaticLoginEnable=False\n" ) mdm_conf.write(line) else: with open(mdm_conf_path, 'w') as mdm_conf: mdm_conf.write( '# Calamares - Configure automatic login for user\n' ) mdm_conf.write('[daemon]\n') if do_autologin: mdm_conf.write("AutomaticLogin={!s}\n".format(username)) mdm_conf.write('AutomaticLoginEnable=True\n') else: mdm_conf.write('AutomaticLoginEnable=False\n') def basic_setup(self): if libcalamares.utils.target_env_call( ['getent', 'group', 'mdm'] ) != 0: libcalamares.utils.target_env_call( ['groupadd', '-g', '128', 'mdm'] ) if libcalamares.utils.target_env_call( ['getent', 'passwd', 'mdm'] ) != 0: libcalamares.utils.target_env_call( ['useradd', '-c', '"Linux Mint Display Manager"', '-u', '128', '-g', 'mdm', '-d', '/var/lib/mdm', '-s', '/usr/bin/nologin', 'mdm' ] ) libcalamares.utils.target_env_call( ['passwd', '-l', 'mdm'] ) libcalamares.utils.target_env_call( ['chown', 'root:mdm', '/var/lib/mdm'] ) libcalamares.utils.target_env_call( ['chmod', '1770', '/var/lib/mdm'] ) def desktop_environment_setup(self, default_desktop_environment): os.system( "sed -i \"s|default.desktop|{!s}.desktop|g\" " "{!s}/etc/mdm/custom.conf".format( default_desktop_environment.desktop_file, self.root_mount_point ) ) def greeter_setup(self): pass class DMgdm(DisplayManager): name = "gdm" executable = "gdm" config = None # Set by have_dm() def have_dm(self): """ GDM exists with different executable names, so search for one of them and use it. """ for executable, config in ( ( "gdm", "etc/gdm/custom.conf" ), ( "gdm3", "etc/gdm3/daemon.conf" ) ): bin_path = "{!s}/usr/bin/{!s}".format(self.root_mount_point, executable) sbin_path = "{!s}/usr/sbin/{!s}".format(self.root_mount_point, executable) if os.path.exists(bin_path) or os.path.exists(sbin_path): # Keep the found-executable name around for later self.executable = executable self.config = config return True return False def set_autologin(self, username, do_autologin, default_desktop_environment): if self.config is None: raise ValueError( "No config file for GDM has been set." ) # Systems with GDM as Desktop Manager gdm_conf_path = os.path.join(self.root_mount_point, self.config) if os.path.exists(gdm_conf_path): with open(gdm_conf_path, 'r') as gdm_conf: text = gdm_conf.readlines() with open(gdm_conf_path, 'w') as gdm_conf: for line in text: if '[daemon]' in line: if do_autologin: line = ( "[daemon]\n" "AutomaticLogin={!s}\n" "AutomaticLoginEnable=True\n".format(username) ) else: line = "[daemon]\nAutomaticLoginEnable=False\n" gdm_conf.write(line) else: with open(gdm_conf_path, 'w') as gdm_conf: gdm_conf.write( '# Calamares - Enable automatic login for user\n' ) gdm_conf.write('[daemon]\n') if do_autologin: gdm_conf.write("AutomaticLogin={!s}\n".format(username)) gdm_conf.write('AutomaticLoginEnable=True\n') else: gdm_conf.write('AutomaticLoginEnable=False\n') if (do_autologin): accountservice_dir = "{!s}/var/lib/AccountsService/users".format( self.root_mount_point ) userfile_path = "{!s}/{!s}".format(accountservice_dir, username) if os.path.exists(accountservice_dir): with open(userfile_path, "w") as userfile: userfile.write("[User]\n") if default_desktop_environment is not None: userfile.write("XSession={!s}\n".format( default_desktop_environment.desktop_file)) userfile.write("Icon=\n") def basic_setup(self): if libcalamares.utils.target_env_call( ['getent', 'group', 'gdm'] ) != 0: libcalamares.utils.target_env_call( ['groupadd', '-g', '120', 'gdm'] ) if libcalamares.utils.target_env_call( ['getent', 'passwd', 'gdm'] ) != 0: libcalamares.utils.target_env_call( ['useradd', '-c', '"Gnome Display Manager"', '-u', '120', '-g', 'gdm', '-d', '/var/lib/gdm', '-s', '/usr/bin/nologin', 'gdm' ] ) libcalamares.utils.target_env_call( ['passwd', '-l', 'gdm'] ) libcalamares.utils.target_env_call( ['chown', '-R', 'gdm:gdm', '/var/lib/gdm'] ) def desktop_environment_setup(self, desktop_environment): pass def greeter_setup(self): pass class DMkdm(DisplayManager): name = "kdm" executable = "kdm" def set_autologin(self, username, do_autologin, default_desktop_environment): # Systems with KDM as Desktop Manager kdm_conf_path = os.path.join( self.root_mount_point, "usr/share/config/kdm/kdmrc" ) # Check which path is in use: SUSE does something else. # Also double-check the default setting. Pick the first # one that exists in the target. for candidate_kdmrc in ( "usr/share/config/kdm/kdmrc", "usr/share/kde4/config/kdm/kdmrc", ): p = os.path.join(self.root_mount_point, candidate_kdmrc) if os.path.exists(p): kdm_conf_path = p break text = [] if os.path.exists(kdm_conf_path): with open(kdm_conf_path, 'r') as kdm_conf: text = kdm_conf.readlines() with open(kdm_conf_path, 'w') as kdm_conf: for line in text: if 'AutoLoginEnable=' in line: if do_autologin: line = 'AutoLoginEnable=true\n' else: line = 'AutoLoginEnable=false\n' if do_autologin and 'AutoLoginUser=' in line: line = "AutoLoginUser={!s}\n".format(username) kdm_conf.write(line) else: return ( _("Cannot write KDM configuration file"), _("KDM config file {!s} does not exist").format(kdm_conf_path) ) def basic_setup(self): if libcalamares.utils.target_env_call( ['getent', 'group', 'kdm'] ) != 0: libcalamares.utils.target_env_call( ['groupadd', '-g', '135', 'kdm'] ) if libcalamares.utils.target_env_call( ['getent', 'passwd', 'kdm'] ) != 0: libcalamares.utils.target_env_call( ['useradd', '-u', '135', '-g', 'kdm', '-d', '/var/lib/kdm', '-s', '/bin/false', '-r', '-M', 'kdm' ] ) libcalamares.utils.target_env_call( ['chown', '-R', '135:135', 'var/lib/kdm'] ) def desktop_environment_setup(self, desktop_environment): pass def greeter_setup(self): pass class DMlxdm(DisplayManager): name = "lxdm" executable = "lxdm" def set_autologin(self, username, do_autologin, default_desktop_environment): # Systems with LXDM as Desktop Manager lxdm_conf_path = os.path.join(self.root_mount_point, "etc/lxdm/lxdm.conf") text = [] if os.path.exists(lxdm_conf_path): with open(lxdm_conf_path, 'r') as lxdm_conf: text = lxdm_conf.readlines() with open(lxdm_conf_path, 'w') as lxdm_conf: for line in text: if 'autologin=' in line: if do_autologin: line = "autologin={!s}\n".format(username) else: line = "# autologin=\n" lxdm_conf.write(line) else: return ( _("Cannot write LXDM configuration file"), _("LXDM config file {!s} does not exist").format(lxdm_conf_path) ) def basic_setup(self): if libcalamares.utils.target_env_call( ['getent', 'group', 'lxdm'] ) != 0: libcalamares.utils.target_env_call( ['groupadd', '--system', 'lxdm'] ) libcalamares.utils.target_env_call( ['chgrp', '-R', 'lxdm', '/var/lib/lxdm'] ) libcalamares.utils.target_env_call( ['chgrp', 'lxdm', '/etc/lxdm/lxdm.conf'] ) libcalamares.utils.target_env_call( ['chmod', '+r', '/etc/lxdm/lxdm.conf'] ) def desktop_environment_setup(self, default_desktop_environment): os.system( "sed -i -e \"s|^.*session=.*|session={!s}|\" " "{!s}/etc/lxdm/lxdm.conf".format( default_desktop_environment.executable, self.root_mount_point ) ) def greeter_setup(self): pass class DMlightdm(DisplayManager): name = "lightdm" executable = "lightdm" def set_autologin(self, username, do_autologin, default_desktop_environment): # Systems with LightDM as Desktop Manager # Ideally, we should use configparser for the ini conf file, # but we just do a simple text replacement for now, as it # worksforme(tm) lightdm_conf_path = os.path.join( self.root_mount_point, "etc/lightdm/lightdm.conf" ) text = [] addseat = False loopcount = 0 if os.path.exists(lightdm_conf_path): with open(lightdm_conf_path, 'r') as lightdm_conf: text = lightdm_conf.readlines() # Check to make sure [SeatDefaults] or [Seat:*] is in the config, # otherwise we'll risk malforming the config addseat = '[SeatDefaults]' not in text and '[Seat:*]' not in text with open(lightdm_conf_path, 'w') as lightdm_conf: if addseat: # Prepend Seat line to start of file rather than leaving it without one # This keeps the config from being malformed for LightDM text = ["[Seat:*]\n"] + text for line in text: if 'autologin-user=' in line: if do_autologin: line = "autologin-user={!s}\n".format(username) else: line = "#autologin-user=\n" lightdm_conf.write(line) else: try: # Create a new lightdm.conf file; this is documented to be # read last, after everything in lightdm.conf.d/ with open(lightdm_conf_path, 'w') as lightdm_conf: if do_autologin: lightdm_conf.write( "[Seat:*]\nautologin-user={!s}\n".format(username)) else: lightdm_conf.write( "[Seat:*]\n#autologin-user=\n") except FileNotFoundError: return ( _("Cannot write LightDM configuration file"), _("LightDM config file {!s} does not exist").format(lightdm_conf_path) ) def basic_setup(self): libcalamares.utils.target_env_call( ['mkdir', '-p', '/run/lightdm'] ) if libcalamares.utils.target_env_call( ['getent', 'group', 'lightdm'] ) != 0: libcalamares.utils.target_env_call( ['groupadd', '-g', '620', 'lightdm'] ) if libcalamares.utils.target_env_call( ['getent', 'passwd', 'lightdm'] ) != 0: libcalamares.utils.target_env_call( ['useradd', '-c', '"LightDM Display Manager"', '-u', '620', '-g', 'lightdm', '-d', '/var/run/lightdm', '-s', '/usr/bin/nologin', 'lightdm' ] ) libcalamares.utils.target_env_call(['passwd', '-l', 'lightdm']) libcalamares.utils.target_env_call(['chown', '-R', 'lightdm:lightdm', '/run/lightdm']) libcalamares.utils.target_env_call(['chmod', '+r' '/etc/lightdm/lightdm.conf']) def desktop_environment_setup(self, default_desktop_environment): os.system( "sed -i -e \"s/^.*user-session=.*/user-session={!s}/\" " "{!s}/etc/lightdm/lightdm.conf".format( default_desktop_environment.desktop_file, self.root_mount_point ) ) def greeter_setup(self): lightdm_conf_path = os.path.join( self.root_mount_point, "etc/lightdm/lightdm.conf" ) # configure lightdm-greeter greeter_path = os.path.join( self.root_mount_point, "usr/share/xgreeters" ) if (os.path.exists(greeter_path)): # configure first found lightdm-greeter for entry in os.listdir(greeter_path): if entry.endswith('.desktop'): greeter = entry.split('.')[0] libcalamares.utils.debug( "found greeter {!s}".format(greeter) ) os.system( "sed -i -e \"s/^.*greeter-session=.*" "/greeter-session={!s}/\" {!s}".format( greeter, lightdm_conf_path ) ) libcalamares.utils.debug( "{!s} configured as greeter.".format(greeter) ) break else: return ( _("Cannot configure LightDM"), _("No LightDM greeter installed.") ) class DMslim(DisplayManager): name = "slim" executable = "slim" def set_autologin(self, username, do_autologin, default_desktop_environment): # Systems with Slim as Desktop Manager slim_conf_path = os.path.join(self.root_mount_point, "etc/slim.conf") text = [] if os.path.exists(slim_conf_path): with open(slim_conf_path, 'r') as slim_conf: text = slim_conf.readlines() with open(slim_conf_path, 'w') as slim_conf: for line in text: if 'auto_login' in line: if do_autologin: line = 'auto_login yes\n' else: line = 'auto_login no\n' if do_autologin and 'default_user' in line: line = "default_user {!s}\n".format(username) slim_conf.write(line) else: return ( _("Cannot write SLIM configuration file"), _("SLIM config file {!s} does not exist").format(slim_conf_path) ) def basic_setup(self): pass def desktop_environment_setup(self, desktop_environment): pass def greeter_setup(self): pass class DMsddm(DisplayManager): name = "sddm" executable = "sddm" def set_autologin(self, username, do_autologin, default_desktop_environment): # Systems with Sddm as Desktop Manager sddm_conf_path = os.path.join(self.root_mount_point, "etc/sddm.conf") sddm_config = configparser.ConfigParser(strict=False) # Make everything case sensitive sddm_config.optionxform = str if os.path.isfile(sddm_conf_path): sddm_config.read(sddm_conf_path) if 'Autologin' not in sddm_config: sddm_config.add_section('Autologin') if do_autologin: sddm_config.set('Autologin', 'User', username) elif sddm_config.has_option('Autologin', 'User'): sddm_config.remove_option('Autologin', 'User') if default_desktop_environment is not None: sddm_config.set( 'Autologin', 'Session', default_desktop_environment.desktop_file ) with open(sddm_conf_path, 'w') as sddm_config_file: sddm_config.write(sddm_config_file, space_around_delimiters=False) def basic_setup(self): pass def desktop_environment_setup(self, desktop_environment): pass def greeter_setup(self): pass class DMsysconfig(DisplayManager): name = "sysconfig" executable = None def set_autologin(self, username, do_autologin, default_desktop_environment): dmauto = "DISPLAYMANAGER_AUTOLOGIN" os.system( "sed -i -e 's|^{!s}=.*|{!s}=\"{!s}\"|' " "{!s}/etc/sysconfig/displaymanager".format( dmauto, dmauto, username if do_autologin else "", self.root_mount_point ) ) def basic_setup(self): pass def desktop_environment_setup(self, desktop_environment): pass def greeter_setup(self): pass # For openSUSE-derivatives, there is only sysconfig to configure, # and no special DM configuration for it. Instead, check that # sysconfig is available in the target. def have_dm(self): config = "{!s}/etc/sysconfig/displaymanager".format(self.root_mount_point) return os.path.exists(config) # Collect all the subclasses of DisplayManager defined above, # and index them based on the name property of each class. display_managers = [ (c.name, c) for c in globals().values() if type(c) is abc.ABCMeta and issubclass(c, DisplayManager) and c.name ] def run(): """ Configure display managers. We acquire a list of displaymanagers, either from config or (overridden) from globalstorage. This module will try to set up (including autologin) all the displaymanagers in the list, in that specific order. Most distros will probably only ship one displaymanager. If a displaymanager is in the list but not installed, a debugging message is printed and the entry ignored. """ # Get configuration settings for display managers displaymanagers = None if "displaymanagers" in libcalamares.job.configuration: displaymanagers = libcalamares.job.configuration["displaymanagers"] if libcalamares.globalstorage.contains("displayManagers"): displaymanagers = libcalamares.globalstorage.value("displayManagers") if ("sysconfigSetup" in libcalamares.job.configuration and libcalamares.job.configuration["sysconfigSetup"]): displaymanagers = ["sysconfig"] if not displaymanagers: return ( _("No display managers selected for the displaymanager module."), _("The displaymanagers list is empty or undefined in both" "globalstorage and displaymanager.conf.") ) # Get instances that are actually installed root_mount_point = libcalamares.globalstorage.value("rootMountPoint") dm_impl = [] dm_names = displaymanagers[:] for dm in dm_names: # Find the implementation class dm_instance = None impl = [ cls for name, cls in display_managers if name == dm ] if len(impl) == 1: dm_instance = impl[0](root_mount_point) if dm_instance.have_dm(): dm_impl.append(dm_instance) else: dm_instance = None else: libcalamares.utils.debug("{!s} has {!d} implementation classes.".format(dm).format(len(impl))) if dm_instance is None: libcalamares.utils.debug("{!s} selected but not installed".format(dm)) if dm in displaymanagers: displaymanagers.remove(dm) if not dm_impl: libcalamares.utils.warning( "No display managers selected for the displaymanager module. " "The list is empty after checking for installed display managers." ) return None # Pick up remaining settings if "defaultDesktopEnvironment" in libcalamares.job.configuration: entry = libcalamares.job.configuration["defaultDesktopEnvironment"] default_desktop_environment = DesktopEnvironment( entry["executable"], entry["desktopFile"] ) # Adjust if executable is bad, but desktopFile isn't. if not default_desktop_environment.update_from_desktop_file(root_mount_point): libcalamares.utils.warning( "The configured default desktop environment, {!s}, " "can not be found.".format(default_desktop_environment.desktop_file)) else: default_desktop_environment = find_desktop_environment( root_mount_point ) if "basicSetup" in libcalamares.job.configuration: enable_basic_setup = libcalamares.job.configuration["basicSetup"] else: enable_basic_setup = False username = libcalamares.globalstorage.value("autologinUser") if username is not None: do_autologin = True libcalamares.utils.debug("Setting up autologin for user {!s}.".format(username)) else: do_autologin = False libcalamares.utils.debug("Unsetting autologin.") libcalamares.globalstorage.insert("displayManagers", displaymanagers) # Do the actual configuration and collect messages dm_setup_message = [] for dm in dm_impl: dm_message = None if enable_basic_setup: dm_message = dm.basic_setup() if default_desktop_environment is not None and dm_message is None: dm_message = dm.desktop_environment_setup(default_desktop_environment) if dm_message is None: dm_message = dm.greeter_setup() if dm_message is None: dm_message = dm.set_autologin(username, do_autologin, default_desktop_environment) if dm_message is not None: dm_setup_message.append("{!s}: {!s}".format(*dm_message)) if dm_setup_message: return ( _("Display manager configuration was incomplete"), "\n".join(dm_setup_message) ) calamares-3.2.20/src/modules/displaymanager/module.desc000066400000000000000000000001551362604102500231120ustar00rootroot00000000000000--- type: "job" name: "displaymanager" interface: "python" requires: [] script: "main.py" calamares-3.2.20/src/modules/dracut/000077500000000000000000000000001362604102500172465ustar00rootroot00000000000000calamares-3.2.20/src/modules/dracut/main.py000066400000000000000000000034511362604102500205470ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # === This file is part of Calamares - === # # Copyright 2014-2015, Philip Müller # Copyright 2014, Teo Mrnjavac # Copyright 2017, Alf Gaida # Copyright 2019, Adriaan de Groot # # Calamares 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. # # Calamares 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 Calamares. If not, see . import libcalamares from libcalamares.utils import target_env_call import gettext _ = gettext.translation("calamares-python", localedir=libcalamares.utils.gettext_path(), languages=libcalamares.utils.gettext_languages(), fallback=True).gettext def pretty_name(): return _("Creating initramfs with dracut.") def run_dracut(): """ Creates initramfs, even when initramfs already exists. :return: """ return target_env_call(['dracut', '-f']) def run(): """ Starts routine to create initramfs. It passes back the exit code if it fails. :return: """ return_code = run_dracut() if return_code != 0: return ( _("Failed to run dracut on the target"), _("The exit code was {}").format(return_code) ) calamares-3.2.20/src/modules/dracut/module.desc000066400000000000000000000001261362604102500213720ustar00rootroot00000000000000--- type: "job" name: "dracut" interface: "python" script: "main.py" calamares-3.2.20/src/modules/dracutlukscfg/000077500000000000000000000000001362604102500206255ustar00rootroot00000000000000calamares-3.2.20/src/modules/dracutlukscfg/CMakeLists.txt000066400000000000000000000003131362604102500233620ustar00rootroot00000000000000calamares_add_plugin( dracutlukscfg TYPE job EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES DracutLuksCfgJob.cpp LINK_PRIVATE_LIBRARIES calamares SHARED_LIB NO_CONFIG ) calamares-3.2.20/src/modules/dracutlukscfg/DracutLuksCfgJob.cpp000066400000000000000000000136211362604102500244700ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2016, Kevin Kofler * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "DracutLuksCfgJob.h" #include #include #include #include #include "CalamaresVersion.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/Logger.h" // static const QLatin1String DracutLuksCfgJob::CONFIG_FILE( "/etc/dracut.conf.d/calamares-luks.conf" ); // static const char* DracutLuksCfgJob::CONFIG_FILE_HEADER = "# Configuration file automatically written by the Calamares system installer\n" "# (This file is written once at install time and should be safe to edit.)\n" "# Enables support for LUKS full disk encryption with single sign on from GRUB.\n" "\n"; // static const char* DracutLuksCfgJob::CONFIG_FILE_CRYPTTAB_KEYFILE_LINE = "# force installing /etc/crypttab even if hostonly=\"no\", install the keyfile\n" "install_items+=\" /etc/crypttab /crypto_keyfile.bin \"\n"; // static const char* DracutLuksCfgJob::CONFIG_FILE_CRYPTTAB_LINE = "# force installing /etc/crypttab even if hostonly=\"no\"\n" "install_items+=\" /etc/crypttab \"\n"; // static const QLatin1String DracutLuksCfgJob::CONFIG_FILE_SWAPLINE( "# enable automatic resume from swap\nadd_device+=\" /dev/disk/by-uuid/%1 \"\n" ); // static QString DracutLuksCfgJob::rootMountPoint() { Calamares::GlobalStorage* globalStorage = Calamares::JobQueue::instance()->globalStorage(); return globalStorage->value( QStringLiteral( "rootMountPoint" ) ).toString(); } // static QVariantList DracutLuksCfgJob::partitions() { Calamares::GlobalStorage* globalStorage = Calamares::JobQueue::instance()->globalStorage(); return globalStorage->value( QStringLiteral( "partitions" ) ).toList(); } // static bool DracutLuksCfgJob::isRootEncrypted() { const QVariantList partitions = DracutLuksCfgJob::partitions(); for ( const QVariant& partition : partitions ) { QVariantMap partitionMap = partition.toMap(); QString mountPoint = partitionMap.value( QStringLiteral( "mountPoint" ) ).toString(); if ( mountPoint == QStringLiteral( "/" ) ) { return partitionMap.contains( QStringLiteral( "luksMapperName" ) ); } } return false; } // static bool DracutLuksCfgJob::hasUnencryptedSeparateBoot() { const QVariantList partitions = DracutLuksCfgJob::partitions(); for ( const QVariant& partition : partitions ) { QVariantMap partitionMap = partition.toMap(); QString mountPoint = partitionMap.value( QStringLiteral( "mountPoint" ) ).toString(); if ( mountPoint == QStringLiteral( "/boot" ) ) { return !partitionMap.contains( QStringLiteral( "luksMapperName" ) ); } } return false; } // static QString DracutLuksCfgJob::swapOuterUuid() { const QVariantList partitions = DracutLuksCfgJob::partitions(); for ( const QVariant& partition : partitions ) { QVariantMap partitionMap = partition.toMap(); QString fsType = partitionMap.value( QStringLiteral( "fs" ) ).toString(); if ( fsType == QStringLiteral( "linuxswap" ) && partitionMap.contains( QStringLiteral( "luksMapperName" ) ) ) { return partitionMap.value( QStringLiteral( "luksUuid" ) ).toString(); } } return QString(); } DracutLuksCfgJob::DracutLuksCfgJob( QObject* parent ) : Calamares::CppJob( parent ) { } DracutLuksCfgJob::~DracutLuksCfgJob() {} QString DracutLuksCfgJob::prettyName() const { if ( isRootEncrypted() ) { return tr( "Write LUKS configuration for Dracut to %1" ).arg( CONFIG_FILE ); } else { return tr( "Skip writing LUKS configuration for Dracut: \"/\" partition is not encrypted" ); } } Calamares::JobResult DracutLuksCfgJob::exec() { if ( isRootEncrypted() ) { const QString realConfigFilePath = rootMountPoint() + CONFIG_FILE; cDebug() << "[DRACUTLUKSCFG]: Writing" << realConfigFilePath; QDir( QStringLiteral( "/" ) ).mkpath( QFileInfo( realConfigFilePath ).absolutePath() ); QFile configFile( realConfigFilePath ); if ( !configFile.open( QIODevice::WriteOnly | QIODevice::Text ) ) { cDebug() << "[DRACUTLUKSCFG]: Failed to open" << realConfigFilePath; return Calamares::JobResult::error( tr( "Failed to open %1" ).arg( realConfigFilePath ) ); } QTextStream outStream( &configFile ); outStream << CONFIG_FILE_HEADER << ( hasUnencryptedSeparateBoot() ? CONFIG_FILE_CRYPTTAB_LINE : CONFIG_FILE_CRYPTTAB_KEYFILE_LINE ); const QString swapOuterUuid = DracutLuksCfgJob::swapOuterUuid(); if ( !swapOuterUuid.isEmpty() ) { cDebug() << "[DRACUTLUKSCFG]: Swap outer UUID" << swapOuterUuid; outStream << QString( CONFIG_FILE_SWAPLINE ).arg( swapOuterUuid ).toLatin1(); } cDebug() << "[DRACUTLUKSCFG]: Wrote config to" << realConfigFilePath; } else { cDebug() << "[DRACUTLUKSCFG]: / not encrypted, skipping"; } return Calamares::JobResult::ok(); } CALAMARES_PLUGIN_FACTORY_DEFINITION( DracutLuksCfgJobFactory, registerPlugin< DracutLuksCfgJob >(); ) calamares-3.2.20/src/modules/dracutlukscfg/DracutLuksCfgJob.h000066400000000000000000000035011362604102500241310ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2016, Kevin Kofler * Copyright 2017, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef DRACUTLUKSCFGJOB_H #define DRACUTLUKSCFGJOB_H #include #include #include #include #include class PLUGINDLLEXPORT DracutLuksCfgJob : public Calamares::CppJob { Q_OBJECT public: explicit DracutLuksCfgJob( QObject* parent = nullptr ); virtual ~DracutLuksCfgJob() override; QString prettyName() const override; Calamares::JobResult exec() override; private: static const QLatin1String CONFIG_FILE; static const char* CONFIG_FILE_HEADER; static const char* CONFIG_FILE_CRYPTTAB_KEYFILE_LINE; static const char* CONFIG_FILE_CRYPTTAB_LINE; static const QLatin1String CONFIG_FILE_SWAPLINE; static QString rootMountPoint(); static QVariantList partitions(); static bool isRootEncrypted(); static bool hasUnencryptedSeparateBoot(); static QString swapOuterUuid(); }; CALAMARES_PLUGIN_FACTORY_DECLARATION( DracutLuksCfgJobFactory ) #endif // DRACUTLUKSCFGJOB_H calamares-3.2.20/src/modules/dummycpp/000077500000000000000000000000001362604102500176225ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummycpp/CMakeLists.txt000066400000000000000000000002631362604102500223630ustar00rootroot00000000000000calamares_add_plugin( dummycpp TYPE job EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES DummyCppJob.cpp LINK_PRIVATE_LIBRARIES calamares SHARED_LIB ) calamares-3.2.20/src/modules/dummycpp/DummyCppJob.cpp000066400000000000000000000122451362604102500225230ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac (original dummypython code) * Copyright 2016, Kevin Kofler * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "DummyCppJob.h" #include #include #include #include "CalamaresVersion.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" DummyCppJob::DummyCppJob( QObject* parent ) : Calamares::CppJob( parent ) { } DummyCppJob::~DummyCppJob() {} QString DummyCppJob::prettyName() const { return tr( "Dummy C++ Job" ); } static QString variantListToString( const QVariantList& variantList ); static QString variantMapToString( const QVariantMap& variantMap ); static QString variantHashToString( const QVariantHash& variantHash ); static QString variantToString( const QVariant& variant ) { if ( variant.type() == QVariant::Map ) { return variantMapToString( variant.toMap() ); } else if ( variant.type() == QVariant::Hash ) { return variantHashToString( variant.toHash() ); } else if ( ( variant.type() == QVariant::List ) || ( variant.type() == QVariant::StringList ) ) { return variantListToString( variant.toList() ); } else { return variant.toString(); } } static QString variantListToString( const QVariantList& variantList ) { QStringList result; for ( const QVariant& variant : variantList ) { result.append( variantToString( variant ) ); } return '{' + result.join( ',' ) + '}'; } static QString variantMapToString( const QVariantMap& variantMap ) { QStringList result; for ( auto it = variantMap.constBegin(); it != variantMap.constEnd(); ++it ) { result.append( it.key() + '=' + variantToString( it.value() ) ); } return '[' + result.join( ',' ) + ']'; } static QString variantHashToString( const QVariantHash& variantHash ) { QStringList result; for ( auto it = variantHash.constBegin(); it != variantHash.constEnd(); ++it ) { result.append( it.key() + '=' + variantToString( it.value() ) ); } return '<' + result.join( ',' ) + '>'; } Calamares::JobResult DummyCppJob::exec() { // Ported from dummypython CalamaresUtils::System::runCommand( CalamaresUtils::System::RunLocation::RunInHost, QStringList() << "/bin/sh" << "-c" << "touch ~/calamares-dummycpp" ); QString accumulator = QDateTime::currentDateTimeUtc().toString( Qt::ISODate ) + '\n'; accumulator += QStringLiteral( "Calamares version: " ) + CALAMARES_VERSION_SHORT + '\n'; accumulator += QStringLiteral( "This job's name: " ) + prettyName() + '\n'; accumulator += QStringLiteral( "Configuration map: %1\n" ).arg( variantMapToString( m_configurationMap ) ); accumulator += QStringLiteral( " *** globalstorage test ***\n" ); Calamares::GlobalStorage* globalStorage = Calamares::JobQueue::instance()->globalStorage(); accumulator += QStringLiteral( "lala: " ) + ( globalStorage->contains( "lala" ) ? QStringLiteral( "true" ) : QStringLiteral( "false" ) ) + '\n'; accumulator += QStringLiteral( "foo: " ) + ( globalStorage->contains( "foo" ) ? QStringLiteral( "true" ) : QStringLiteral( "false" ) ) + '\n'; accumulator += QStringLiteral( "count: " ) + QString::number( globalStorage->count() ) + '\n'; globalStorage->insert( "item2", "value2" ); globalStorage->insert( "item3", 3 ); accumulator += QStringLiteral( "keys: %1\n" ).arg( globalStorage->keys().join( ',' ) ); accumulator += QStringLiteral( "remove: %1\n" ).arg( QString::number( globalStorage->remove( "item2" ) ) ); accumulator += QStringLiteral( "values: %1 %2 %3\n" ) .arg( globalStorage->value( "foo" ).toString(), globalStorage->value( "item2" ).toString(), globalStorage->value( "item3" ).toString() ); emit progress( 0.1 ); cDebug() << "[DUMMYCPP]: " << accumulator; globalStorage->debugDump(); emit progress( 0.5 ); QThread::sleep( 3 ); return Calamares::JobResult::ok(); } void DummyCppJob::setConfigurationMap( const QVariantMap& configurationMap ) { m_configurationMap = configurationMap; } CALAMARES_PLUGIN_FACTORY_DEFINITION( DummyCppJobFactory, registerPlugin< DummyCppJob >(); ) calamares-3.2.20/src/modules/dummycpp/DummyCppJob.h000066400000000000000000000027301362604102500221660ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2016, Kevin Kofler * Copyright 2017, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef DUMMYCPPJOB_H #define DUMMYCPPJOB_H #include #include #include #include #include class PLUGINDLLEXPORT DummyCppJob : public Calamares::CppJob { Q_OBJECT public: explicit DummyCppJob( QObject* parent = nullptr ); virtual ~DummyCppJob() override; QString prettyName() const override; Calamares::JobResult exec() override; void setConfigurationMap( const QVariantMap& configurationMap ) override; private: QVariantMap m_configurationMap; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( DummyCppJobFactory ) #endif // DUMMYCPPJOB_H calamares-3.2.20/src/modules/dummycpp/dummycpp.conf000066400000000000000000000007241362604102500223320ustar00rootroot00000000000000# This is a dummy (example) module for C++ Jobs. # # The code is the documentation for the configuration file. --- syntax: "YAML map of anything" example: whats_this: "module-specific configuration" from_where: "dummycpp.conf" a_list: - "item1" - "item2" - "item3" - "item4" a_list_of_maps: - name: "an Item" contents: - "an element" - "another element" - name: "another item" contents: - "not much" calamares-3.2.20/src/modules/dummycpp/module.desc000066400000000000000000000014501362604102500217470ustar00rootroot00000000000000# Module metadata file for dummycpp job # # The metadata for C++ (qtplugin) plugins is almost never interesting: # the CMakeLists.txt should be using calamares_add_plugin() which will # generate the metadata file during the build. Only C++ plugins that # have strange settings should have a module.desc (non-C++ plugins, # on the other hand, must have one, since they don't have CMakeLists.txt). # # Syntax is YAML 1.2 # # All four keys are mandatory. For C++ (qtplugin) modules, the interface # value must be "qtplugin"; type is one of "job" or "view"; the name # is the machine-identifier for the module and the load value should # be the filename of the library that contains the implementation. # --- type: "job" name: "dummycpp" interface: "qtplugin" load: "libcalamares_job_dummycpp.so" calamares-3.2.20/src/modules/dummyprocess/000077500000000000000000000000001362604102500205165ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummyprocess/module.desc000066400000000000000000000003651362604102500226470ustar00rootroot00000000000000# Module metadata file for dummy process jobmodule # Syntax is YAML 1.2 --- type: "job" name: "dummyprocess" interface: "process" chroot: false command: "/bin/sh -c \"sleep 5 ; touch ~/calamares-dummyprocess\"" timeout: 8 calamares-3.2.20/src/modules/dummypython/000077500000000000000000000000001362604102500203615ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypython/dummypython.conf000066400000000000000000000007421362604102500236300ustar00rootroot00000000000000# This is a dummy (example) module for a Python Job Module. # # The code is the documentation for the configuration file. --- syntax: "YAML map of anything" example: whats_this: "module-specific configuration" from_where: "dummypython.conf" a_list: - "item1" - "item2" - "item3" - "item4" a_list_of_maps: - name: "an Item" contents: - "an element" - "another element" - name: "another item" contents: - "not much" calamares-3.2.20/src/modules/dummypython/main.py000066400000000000000000000074171362604102500216700ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # === This file is part of Calamares - === # # Copyright 2014, Teo Mrnjavac # Copyright 2017, Alf Gaida # Copyright 2017, Adriaan de Groot # # Calamares 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. # # Calamares 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 Calamares. If not, see . """ === Example Python jobmodule. A Python jobmodule is a Python program which imports libcalamares and has a function run() as entry point. run() must return None if everything went well, or a tuple (str,str) with an error message and description if something went wrong. """ import libcalamares import os from time import gmtime, strftime, sleep import gettext _ = gettext.translation("calamares-python", localedir=libcalamares.utils.gettext_path(), languages=libcalamares.utils.gettext_languages(), fallback=True).gettext def pretty_name(): return _("Dummy python job.") def run(): """Dummy python job.""" libcalamares.utils.debug("LocaleDir=" + str(libcalamares.utils.gettext_path())) libcalamares.utils.debug("Languages=" + str(libcalamares.utils.gettext_languages())) os.system("/bin/sh -c \"touch ~/calamares-dummypython\"") accumulator = strftime("%Y-%m-%d %H:%M:%S", gmtime()) + "\n" accumulator += "Calamares version: " + libcalamares.VERSION_SHORT + "\n" accumulator += "This job's name: " + libcalamares.job.pretty_name + "\n" accumulator += "This job's path: " + libcalamares.job.working_path libcalamares.utils.debug(accumulator) accumulator = "*** Job configuration " accumulator += str(libcalamares.job.configuration) libcalamares.utils.debug(accumulator) accumulator = "*** globalstorage test ***" accumulator += "lala: " accumulator += str(libcalamares.globalstorage.contains("lala")) + "\n" accumulator += "foo: " accumulator += str(libcalamares.globalstorage.contains("foo")) + "\n" accumulator += "count: " + str(libcalamares.globalstorage.count()) libcalamares.utils.debug(accumulator) libcalamares.globalstorage.insert("item2", "value2") libcalamares.globalstorage.insert("item3", 3) accumulator = "keys: {}\n".format(str(libcalamares.globalstorage.keys())) libcalamares.utils.debug(accumulator) accumulator = "remove: {}\n".format( str(libcalamares.globalstorage.remove("item2"))) accumulator += "values: {} {} {}\n".format( str(libcalamares.globalstorage.value("foo")), str(libcalamares.globalstorage.value("item2")), str(libcalamares.globalstorage.value("item3"))) libcalamares.utils.debug(accumulator) libcalamares.utils.debug("Run dummy python") sleep(1) try: configlist = list(libcalamares.job.configuration["a_list"]) except KeyError: configlist = ["no list"] c = 1 for k in configlist: libcalamares.utils.debug(_("Dummy python step {}").format(str(k))) sleep(1) libcalamares.job.setprogress(c * 1.0 / len(configlist)) c += 1 sleep(3) # To indicate an error, return a tuple of: # (message, detailed-error-message) return None calamares-3.2.20/src/modules/dummypython/module.desc000066400000000000000000000002421362604102500225040ustar00rootroot00000000000000# Module metadata file for dummy python jobmodule # Syntax is YAML 1.2 --- type: "job" name: "dummypython" interface: "python" script: "main.py" calamares-3.2.20/src/modules/dummypythonqt/000077500000000000000000000000001362604102500207265ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/dummypythonqt.conf000066400000000000000000000007311362604102500245400ustar00rootroot00000000000000# This is a dummy (example) module for PythonQt. # # The code is the documentation for the configuration file. --- syntax: "YAML map of anything" example: whats_this: "module-specific configuration" from_where: "dummypythonqt.conf" a_list: - "item1" - "item2" - "item3" - "item4" a_list_of_maps: - name: "an Item" contents: - "an element" - "another element" - name: "another item" contents: - "not much" calamares-3.2.20/src/modules/dummypythonqt/lang/000077500000000000000000000000001362604102500216475ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/ar/000077500000000000000000000000001362604102500222515ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/ar/LC_MESSAGES/000077500000000000000000000000001362604102500240365ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/ar/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000020111362604102500273270ustar00rootroot00000000000000Þ•T Œ¸ ¹(Ç ðú6)Õ`69F€‘­=ËA new QLabel.A status message for Dummy PythonQt Job.Click me!Dummy PythonQt ViewStepThe Dummy PythonQt JobThis is the Dummy PythonQt Job. The dummy job says: {}Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Last-Translator: Abubakaragoub Y , 2018 Language-Team: Arabic (https://www.transifex.com/calamares/teams/20061/ar/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: ar Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5; QLabel جديدرسالة حاله دميه عملية خطوة PythonQtاضغط علي!دميه خطوة PythonQt دميه عملية PythonQt هذة دميه عملية خطوة PythonQt. Ùˆ تقول: {}calamares-3.2.20/src/modules/dummypythonqt/lang/ar/LC_MESSAGES/dummypythonqt.po000066400000000000000000000030441362604102500273410ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Abubakaragoub Y , 2018 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Abubakaragoub Y , 2018\n" "Language-Team: Arabic (https://www.transifex.com/calamares/teams/20061/ar/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ar\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "اضغط علي!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "QLabel جديد" #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "دميه خطوة PythonQt " #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "دميه عملية PythonQt " #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "هذة دميه عملية خطوة PythonQt. Ùˆ تقول: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "رسالة حاله دميه عملية خطوة PythonQt" calamares-3.2.20/src/modules/dummypythonqt/lang/as/000077500000000000000000000000001362604102500222525ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/as/LC_MESSAGES/000077500000000000000000000000001362604102500240375ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/as/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000022671362604102500273450ustar00rootroot00000000000000Þ•T Œ¸ ¹(Ç ðú6)€` á'‚5ª<à™A new QLabel.A status message for Dummy PythonQt Job.Click me!Dummy PythonQt ViewStepThe Dummy PythonQt JobThis is the Dummy PythonQt Job. The dummy job says: {}Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Last-Translator: Wrishiraj Kaushik , 2020 Language-Team: Assamese (https://www.transifex.com/calamares/teams/20061/as/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: as Plural-Forms: nplurals=2; plural=(n != 1); à¦à¦Ÿà¦¾ নতà§à¦¨ QLabel।ডামী পাইথন-কিউটৠকাযà§à¦¯à§° বাবে à¦à¦Ÿà¦¾ অৱসà§à¦¥à¦¾ বাৰà§à¦¤à¦¾à¥¤à¦‡à§Ÿà¦¾à¦¤ কà§à¦²à¦¿à¦• কৰক!ডামী পাইথন-কিউটৠViewStepডামী পাইথন-কিউটৠকাযà§à¦¯à¦à¦‡à¦Ÿà§‹à§±à§‡ ডামী পাইথন-কিউটৠকাৰà§à¦¯à§à¦¯à¥¤ ডামী কাৰà§à¦¯à§à¦¯à¦Ÿà§‹à§±à§‡ কয় যে: {}calamares-3.2.20/src/modules/dummypythonqt/lang/as/LC_MESSAGES/dummypythonqt.po000066400000000000000000000034111362604102500273400ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Deep Jyoti Choudhury , 2020 # Wrishiraj Kaushik , 2020 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Wrishiraj Kaushik , 2020\n" "Language-Team: Assamese (https://www.transifex.com/calamares/teams/20061/as/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: as\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "ইয়াত কà§à¦²à¦¿à¦• কৰক!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "à¦à¦Ÿà¦¾ নতà§à¦¨ QLabel।" #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "ডামী পাইথন-কিউটৠViewStep" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "ডামী পাইথন-কিউটৠকাযà§à¦¯" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "à¦à¦‡à¦Ÿà§‹à§±à§‡ ডামী পাইথন-কিউটৠকাৰà§à¦¯à§à¦¯à¥¤ ডামী কাৰà§à¦¯à§à¦¯à¦Ÿà§‹à§±à§‡ কয় যে: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "ডামী পাইথন-কিউটৠকাযà§à¦¯à§° বাবে à¦à¦Ÿà¦¾ অৱসà§à¦¥à¦¾ বাৰà§à¦¤à¦¾à¥¤" calamares-3.2.20/src/modules/dummypythonqt/lang/ast/000077500000000000000000000000001362604102500224365ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/ast/LC_MESSAGES/000077500000000000000000000000001362604102500242235ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/ast/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000016641362604102500275310ustar00rootroot00000000000000Þ•T Œ¸ ¹(Ç ðú6)x`Ù6ë ". MEnA new QLabel.A status message for Dummy PythonQt Job.Click me!Dummy PythonQt ViewStepThe Dummy PythonQt JobThis is the Dummy PythonQt Job. The dummy job says: {}Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Last-Translator: enolp , 2019 Language-Team: Asturian (https://www.transifex.com/calamares/teams/20061/ast/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: ast Plural-Forms: nplurals=2; plural=(n != 1); Una QLabel nueva.Un mensaxe d'estáu pal trabayu maniquín en PythonQt.¡Cálcame!ViewStep maniquín en PythonQtEl trabayu maniquín en PythonQtEsti ye'l trabayu maniquín en PythonQt. El trabayu maniquín diz: {}calamares-3.2.20/src/modules/dummypythonqt/lang/ast/LC_MESSAGES/dummypythonqt.po000066400000000000000000000027011362604102500275250ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # enolp , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-02-22 07:09-0500\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: enolp , 2019\n" "Language-Team: Asturian (https://www.transifex.com/calamares/teams/20061/ast/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ast\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "¡Cálcame!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Una QLabel nueva." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "ViewStep maniquín en PythonQt" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "El trabayu maniquín en PythonQt" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Esti ye'l trabayu maniquín en PythonQt. El trabayu maniquín diz: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Un mensaxe d'estáu pal trabayu maniquín en PythonQt." calamares-3.2.20/src/modules/dummypythonqt/lang/be/000077500000000000000000000000001362604102500222355ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/be/LC_MESSAGES/000077500000000000000000000000001362604102500240225ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/be/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000021361362604102500273230ustar00rootroot00000000000000Þ•T Œ¸ ¹(Ç ðú6) `l<~»ÙñUA new QLabel.A status message for Dummy PythonQt Job.Click me!Dummy PythonQt ViewStepThe Dummy PythonQt JobThis is the Dummy PythonQt Job. The dummy job says: {}Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Last-Translator: Zmicer Turok , 2018 Language-Team: Belarusian (https://www.transifex.com/calamares/teams/20061/be/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: be Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3); Ðовы QLabel. Паведамленне ÑтатуÑу Dummy PythonQt Job. ÐаціÑніце Ñюды! Dummy PythonQt ViewStepThe Dummy PythonQt JobГÑта Dummy PythonQt Job. Ð¤Ñ–ÐºÑ‚Ñ‹ÑžÐ½Ð°Ñ Ð·Ð°Ð´Ð°Ñ‡Ð° паведамлÑе: {}calamares-3.2.20/src/modules/dummypythonqt/lang/be/LC_MESSAGES/dummypythonqt.po000066400000000000000000000031641362604102500273300ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Zmicer Turok , 2018 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-05-10 19:18-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Zmicer Turok , 2018\n" "Language-Team: Belarusian (https://www.transifex.com/calamares/teams/20061/be/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: be\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "ÐаціÑніце Ñюды! " #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Ðовы QLabel. " #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Dummy PythonQt ViewStep" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "The Dummy PythonQt Job" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "ГÑта Dummy PythonQt Job. Ð¤Ñ–ÐºÑ‚Ñ‹ÑžÐ½Ð°Ñ Ð·Ð°Ð´Ð°Ñ‡Ð° паведамлÑе: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Паведамленне ÑтатуÑу Dummy PythonQt Job. " calamares-3.2.20/src/modules/dummypythonqt/lang/bg/000077500000000000000000000000001362604102500222375ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/bg/LC_MESSAGES/000077500000000000000000000000001362604102500240245ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/bg/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000020421362604102500273210ustar00rootroot00000000000000Þ•T Œ¸ ¹(Ç ðú6)‚`ã_òR"g*ŠlµA new QLabel.A status message for Dummy PythonQt Job.Click me!Dummy PythonQt ViewStepThe Dummy PythonQt JobThis is the Dummy PythonQt Job. The dummy job says: {}Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Last-Translator: Georgi Georgiev , 2018 Language-Team: Bulgarian (https://www.transifex.com/calamares/teams/20061/bg/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: bg Plural-Forms: nplurals=2; plural=(n != 1); Ðов QLabel.Съобщение за ÑÑŠÑтоÑнието на фиктивната задача PythonQt.ÐатиÑни ме!Фиктивен PythonQt ViewStepФиктивната задача PythonQtТова е фиктивната задача PythonQt. Фиктивната задача заÑвÑва: {}calamares-3.2.20/src/modules/dummypythonqt/lang/bg/LC_MESSAGES/dummypythonqt.po000066400000000000000000000030721362604102500273300ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Georgi Georgiev , 2018 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Georgi Georgiev , 2018\n" "Language-Team: Bulgarian (https://www.transifex.com/calamares/teams/20061/bg/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: bg\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "ÐатиÑни ме!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Ðов QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Фиктивен PythonQt ViewStep" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "Фиктивната задача PythonQt" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Това е фиктивната задача PythonQt. Фиктивната задача заÑвÑва: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Съобщение за ÑÑŠÑтоÑнието на фиктивната задача PythonQt." calamares-3.2.20/src/modules/dummypythonqt/lang/ca/000077500000000000000000000000001362604102500222325ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/ca/LC_MESSAGES/000077500000000000000000000000001362604102500240175ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/ca/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000016221362604102500273170ustar00rootroot00000000000000Þ•T Œ¸ ¹(Ç ðú6)u`Ö2ë'@9XA new QLabel.A status message for Dummy PythonQt Job.Click me!Dummy PythonQt ViewStepThe Dummy PythonQt JobThis is the Dummy PythonQt Job. The dummy job says: {}Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Last-Translator: Davidmp , 2019 Language-Team: Catalan (https://www.transifex.com/calamares/teams/20061/ca/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: ca Plural-Forms: nplurals=2; plural=(n != 1); Una etiqueta Q nova.Un missatge d'estat per a la tasca Dummy PythonQt.Clica'm!Vistes de Dummy PythonQtLa tasca Dummy PythonQtSoc la tasca Dummy PythonQt. La tasca diu el següent: {}calamares-3.2.20/src/modules/dummypythonqt/lang/ca/LC_MESSAGES/dummypythonqt.po000066400000000000000000000026371362604102500273310ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Davidmp , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-05-10 19:18-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Davidmp , 2019\n" "Language-Team: Catalan (https://www.transifex.com/calamares/teams/20061/ca/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ca\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Clica'm!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Una etiqueta Q nova." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Vistes de Dummy PythonQt" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "La tasca Dummy PythonQt" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Soc la tasca Dummy PythonQt. La tasca diu el següent: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Un missatge d'estat per a la tasca Dummy PythonQt." calamares-3.2.20/src/modules/dummypythonqt/lang/ca@valencia/000077500000000000000000000000001362604102500240355ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/ca@valencia/LC_MESSAGES/000077500000000000000000000000001362604102500256225ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/ca@valencia/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000006321362604102500311220ustar00rootroot00000000000000Þ•$,8`9Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Language-Team: Catalan (Valencian) (https://www.transifex.com/calamares/teams/20061/ca@valencia/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: ca@valencia Plural-Forms: nplurals=2; plural=(n != 1); calamares-3.2.20/src/modules/dummypythonqt/lang/ca@valencia/LC_MESSAGES/dummypythonqt.po000066400000000000000000000022321362604102500311230ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-05-10 19:18-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Language-Team: Catalan (Valencian) (https://www.transifex.com/calamares/teams/20061/ca@valencia/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ca@valencia\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "" #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "" calamares-3.2.20/src/modules/dummypythonqt/lang/cs_CZ/000077500000000000000000000000001362604102500226505ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/cs_CZ/LC_MESSAGES/000077500000000000000000000000001362604102500244355ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/cs_CZ/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000020211362604102500277270ustar00rootroot00000000000000Þ•T Œ¸ ¹(Ç ðú6)æ` G.U„–³BÎA new QLabel.A status message for Dummy PythonQt Job.Click me!Dummy PythonQt ViewStepThe Dummy PythonQt JobThis is the Dummy PythonQt Job. The dummy job says: {}Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Last-Translator: Pavel Borecki , 2017 Language-Team: Czech (Czech Republic) (https://www.transifex.com/calamares/teams/20061/cs_CZ/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: cs_CZ Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3; Nový QLabel.Stavová zpráva o testovací úloze PythonQt.KliknÄ›te na mÄ›!Testovací PythonQt ViewStepTestovací úloha PythonQtToto je testovací úloha PythonQt. Testovací úloha sdÄ›luje: {}calamares-3.2.20/src/modules/dummypythonqt/lang/cs_CZ/LC_MESSAGES/dummypythonqt.po000066400000000000000000000030721362604102500277410ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # pavelrz, 2017 # Pavel Borecki , 2017 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-02-22 07:09-0500\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Pavel Borecki , 2017\n" "Language-Team: Czech (Czech Republic) (https://www.transifex.com/calamares/teams/20061/cs_CZ/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: cs_CZ\n" "Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "KliknÄ›te na mÄ›!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Nový QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Testovací PythonQt ViewStep" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "Testovací úloha PythonQt" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Toto je testovací úloha PythonQt. Testovací úloha sdÄ›luje: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Stavová zpráva o testovací úloze PythonQt." calamares-3.2.20/src/modules/dummypythonqt/lang/da/000077500000000000000000000000001362604102500222335ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/da/LC_MESSAGES/000077500000000000000000000000001362604102500240205ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/da/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000015701362604102500273220ustar00rootroot00000000000000Þ•T Œ¸ ¹(Ç ðú6)f` Ç+Õ +6AA new QLabel.A status message for Dummy PythonQt Job.Click me!Dummy PythonQt ViewStepThe Dummy PythonQt JobThis is the Dummy PythonQt Job. The dummy job says: {}Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Last-Translator: scootergrisen, 2017 Language-Team: Danish (https://www.transifex.com/calamares/teams/20061/da/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: da Plural-Forms: nplurals=2; plural=(n != 1); En ny QLabel.En statusmeddelelse til dummy PythonQt-job.Klik pÃ¥ mig!Dummy PythonQt-visningstrinDummy PythonQt-jobbetDette er dummy PythonQt-jobbet. Dummy-jobbet siger: {}calamares-3.2.20/src/modules/dummypythonqt/lang/da/LC_MESSAGES/dummypythonqt.po000066400000000000000000000025671362604102500273340ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # scootergrisen, 2017 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: scootergrisen, 2017\n" "Language-Team: Danish (https://www.transifex.com/calamares/teams/20061/da/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: da\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Klik pÃ¥ mig!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "En ny QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Dummy PythonQt-visningstrin" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "Dummy PythonQt-jobbet" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Dette er dummy PythonQt-jobbet. Dummy-jobbet siger: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "En statusmeddelelse til dummy PythonQt-job." calamares-3.2.20/src/modules/dummypythonqt/lang/de/000077500000000000000000000000001362604102500222375ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/de/LC_MESSAGES/000077500000000000000000000000001362604102500240245ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/de/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000016001362604102500273200ustar00rootroot00000000000000Þ•T Œ¸ ¹(Ç ðú6)h`É/Û /9FA new QLabel.A status message for Dummy PythonQt Job.Click me!Dummy PythonQt ViewStepThe Dummy PythonQt JobThis is the Dummy PythonQt Job. The dummy job says: {}Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Last-Translator: Christian Spaan, 2017 Language-Team: German (https://www.transifex.com/calamares/teams/20061/de/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: de Plural-Forms: nplurals=2; plural=(n != 1); Ein neues QLabel.Eine Statusmeldung für den Dummy-PythonQt-Job.Klick mich!Dummy PythonQt ViewStepDer Dummy-PythonQt-JobDies ist der Dummy-PythonQt-Job. Der Dummy-Job lautet: {}calamares-3.2.20/src/modules/dummypythonqt/lang/de/LC_MESSAGES/dummypythonqt.po000066400000000000000000000026011362604102500273250ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Christian Spaan, 2017 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Christian Spaan, 2017\n" "Language-Team: German (https://www.transifex.com/calamares/teams/20061/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Klick mich!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Ein neues QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Dummy PythonQt ViewStep" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "Der Dummy-PythonQt-Job" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Dies ist der Dummy-PythonQt-Job. Der Dummy-Job lautet: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Eine Statusmeldung für den Dummy-PythonQt-Job." calamares-3.2.20/src/modules/dummypythonqt/lang/dummypythonqt.pot000066400000000000000000000023621362604102500253400ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-01-29 11:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: \n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Click me!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "A new QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Dummy PythonQt ViewStep" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "The Dummy PythonQt Job" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "This is the Dummy PythonQt Job. The dummy job says: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "A status message for Dummy PythonQt Job." calamares-3.2.20/src/modules/dummypythonqt/lang/el/000077500000000000000000000000001362604102500222475ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/el/LC_MESSAGES/000077500000000000000000000000001362604102500240345ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/el/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000005721362604102500273370ustar00rootroot00000000000000Þ•$,8@9Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Language-Team: Greek (https://www.transifex.com/calamares/teams/20061/el/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: el Plural-Forms: nplurals=2; plural=(n != 1); calamares-3.2.20/src/modules/dummypythonqt/lang/el/LC_MESSAGES/dummypythonqt.po000066400000000000000000000021721362604102500273400ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Language-Team: Greek (https://www.transifex.com/calamares/teams/20061/el/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: el\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "" #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "" calamares-3.2.20/src/modules/dummypythonqt/lang/en_GB/000077500000000000000000000000001362604102500226215ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/en_GB/LC_MESSAGES/000077500000000000000000000000001362604102500244065ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/en_GB/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000016451362604102500277130ustar00rootroot00000000000000Þ•T Œ¸ ¹(Ç ðú6)` þ(  5?W6nA new QLabel.A status message for Dummy PythonQt Job.Click me!Dummy PythonQt ViewStepThe Dummy PythonQt JobThis is the Dummy PythonQt Job. The dummy job says: {}Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Last-Translator: Jason Collins , 2018 Language-Team: English (United Kingdom) (https://www.transifex.com/calamares/teams/20061/en_GB/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: en_GB Plural-Forms: nplurals=2; plural=(n != 1); A new QLabel.A status message for Dummy PythonQt Job.Click me!Dummy PythonQt ViewStepThe Dummy PythonQt JobThis is the Dummy PythonQt Job. The dummy job says: {}calamares-3.2.20/src/modules/dummypythonqt/lang/en_GB/LC_MESSAGES/dummypythonqt.po000066400000000000000000000027031362604102500277120ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Jason Collins , 2018 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Jason Collins , 2018\n" "Language-Team: English (United Kingdom) (https://www.transifex.com/calamares/teams/20061/en_GB/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: en_GB\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Click me!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "A new QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Dummy PythonQt ViewStep" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "The Dummy PythonQt Job" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "This is the Dummy PythonQt Job. The dummy job says: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "A status message for Dummy PythonQt Job." calamares-3.2.20/src/modules/dummypythonqt/lang/eo/000077500000000000000000000000001362604102500222525ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/eo/LC_MESSAGES/000077500000000000000000000000001362604102500240375ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/eo/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000016461362604102500273450ustar00rootroot00000000000000Þ•T Œ¸ ¹(Ç ðú6)ƒ` ä,ñ +EE`A new QLabel.A status message for Dummy PythonQt Job.Click me!Dummy PythonQt ViewStepThe Dummy PythonQt JobThis is the Dummy PythonQt Job. The dummy job says: {}Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Last-Translator: Kurt Ankh Phoenix , 2018 Language-Team: Esperanto (https://www.transifex.com/calamares/teams/20061/eo/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: eo Plural-Forms: nplurals=2; plural=(n != 1); Nova QLabel.Statusa mesaÄo por Formala PythonQt Laboro.Alklaku min!Formala PythonQt ViewStepLa Formala PythonQt LaboroĈi tiu estas la Formala PythonQt Laboro. La formala laboro diras: {}calamares-3.2.20/src/modules/dummypythonqt/lang/eo/LC_MESSAGES/dummypythonqt.po000066400000000000000000000026771362604102500273550ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Kurt Ankh Phoenix , 2018 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Kurt Ankh Phoenix , 2018\n" "Language-Team: Esperanto (https://www.transifex.com/calamares/teams/20061/eo/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: eo\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Alklaku min!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Nova QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Formala PythonQt ViewStep" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "La Formala PythonQt Laboro" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Ĉi tiu estas la Formala PythonQt Laboro. La formala laboro diras: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Statusa mesaÄo por Formala PythonQt Laboro." calamares-3.2.20/src/modules/dummypythonqt/lang/es/000077500000000000000000000000001362604102500222565ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/es/LC_MESSAGES/000077500000000000000000000000001362604102500240435ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/es/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000016141362604102500273440ustar00rootroot00000000000000Þ•T Œ¸ ¹(Ç ðú6)_`À5Ò 2>MA new QLabel.A status message for Dummy PythonQt Job.Click me!Dummy PythonQt ViewStepThe Dummy PythonQt JobThis is the Dummy PythonQt Job. The dummy job says: {}Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Last-Translator: strel, 2017 Language-Team: Spanish (https://www.transifex.com/calamares/teams/20061/es/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: es Plural-Forms: nplurals=2; plural=(n != 1); Una nueva QLabel.Un mensaje de estado para la Tarea PythonQt Ficticia.¡Púlsame!ViewStep de PythonQt FicticiaLa Tarea PythonQt FicticiaEsta es la Tarea PythonQt Ficticia. La tarea ficticia dice: {}calamares-3.2.20/src/modules/dummypythonqt/lang/es/LC_MESSAGES/dummypythonqt.po000066400000000000000000000026031362604102500273460ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # strel, 2017 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: strel, 2017\n" "Language-Team: Spanish (https://www.transifex.com/calamares/teams/20061/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "¡Púlsame!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Una nueva QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "ViewStep de PythonQt Ficticia" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "La Tarea PythonQt Ficticia" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Esta es la Tarea PythonQt Ficticia. La tarea ficticia dice: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Un mensaje de estado para la Tarea PythonQt Ficticia." calamares-3.2.20/src/modules/dummypythonqt/lang/es_MX/000077500000000000000000000000001362604102500226625ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/es_MX/LC_MESSAGES/000077500000000000000000000000001362604102500244475ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/es_MX/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000017201362604102500277460ustar00rootroot00000000000000Þ•T Œ¸ ¹(Ç ðú6)”`õ7?RoBA new QLabel.A status message for Dummy PythonQt Job.Click me!Dummy PythonQt ViewStepThe Dummy PythonQt JobThis is the Dummy PythonQt Job. The dummy job says: {}Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Last-Translator: guillermo pacheco , 2018 Language-Team: Spanish (Mexico) (https://www.transifex.com/calamares/teams/20061/es_MX/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: es_MX Plural-Forms: nplurals=2; plural=(n != 1); Una nueva QLabel.Un mensaje de estado para el trabajo PythonQt ficticio.¡Haz clic en mí!Vision del PythonQt ficticioTrabajo del PythonQt ficticioEste es el Trabajo PythonQt ficticio. El trabajo ficticio dice: {}calamares-3.2.20/src/modules/dummypythonqt/lang/es_MX/LC_MESSAGES/dummypythonqt.po000066400000000000000000000027551362604102500277620ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # guillermo pacheco , 2018 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: guillermo pacheco , 2018\n" "Language-Team: Spanish (Mexico) (https://www.transifex.com/calamares/teams/20061/es_MX/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: es_MX\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "¡Haz clic en mí!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Una nueva QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Vision del PythonQt ficticio" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "Trabajo del PythonQt ficticio" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Este es el Trabajo PythonQt ficticio. El trabajo ficticio dice: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Un mensaje de estado para el trabajo PythonQt ficticio." calamares-3.2.20/src/modules/dummypythonqt/lang/es_PR/000077500000000000000000000000001362604102500226575ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/es_PR/LC_MESSAGES/000077500000000000000000000000001362604102500244445ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/es_PR/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000006201362604102500277410ustar00rootroot00000000000000Þ•$,8V9Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Language-Team: Spanish (Puerto Rico) (https://www.transifex.com/calamares/teams/20061/es_PR/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: es_PR Plural-Forms: nplurals=2; plural=(n != 1); calamares-3.2.20/src/modules/dummypythonqt/lang/es_PR/LC_MESSAGES/dummypythonqt.po000066400000000000000000000022201362604102500277420ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Language-Team: Spanish (Puerto Rico) (https://www.transifex.com/calamares/teams/20061/es_PR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: es_PR\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "" #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "" calamares-3.2.20/src/modules/dummypythonqt/lang/et/000077500000000000000000000000001362604102500222575ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/et/LC_MESSAGES/000077500000000000000000000000001362604102500240445ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/et/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000015601362604102500273450ustar00rootroot00000000000000Þ•T Œ¸ ¹(Ç ðú6)h` É'Õ ý $5:A new QLabel.A status message for Dummy PythonQt Job.Click me!Dummy PythonQt ViewStepThe Dummy PythonQt JobThis is the Dummy PythonQt Job. The dummy job says: {}Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Last-Translator: Madis Otenurm, 2018 Language-Team: Estonian (https://www.transifex.com/calamares/teams/20061/et/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: et Plural-Forms: nplurals=2; plural=(n != 1); Uus QLabel.Olekusõnum testivale PythonQt tööle.Klõpsa mind!Testiv PythonQt ViewStepTestiv PythonQt TööSee on testiv PythonQt töö. Testiv töö ütleb: {}calamares-3.2.20/src/modules/dummypythonqt/lang/et/LC_MESSAGES/dummypythonqt.po000066400000000000000000000025571362604102500273570ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Madis Otenurm, 2018 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-07-06 01:16+0200\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Madis Otenurm, 2018\n" "Language-Team: Estonian (https://www.transifex.com/calamares/teams/20061/et/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: et\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Klõpsa mind!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Uus QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Testiv PythonQt ViewStep" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "Testiv PythonQt Töö" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "See on testiv PythonQt töö. Testiv töö ütleb: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Olekusõnum testivale PythonQt tööle." calamares-3.2.20/src/modules/dummypythonqt/lang/eu/000077500000000000000000000000001362604102500222605ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/eu/LC_MESSAGES/000077500000000000000000000000001362604102500240455ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/eu/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000015651362604102500273530ustar00rootroot00000000000000Þ•T Œ¸ ¹(Ç ðú6)h`É$Ø ý *5?A new QLabel.A status message for Dummy PythonQt Job.Click me!Dummy PythonQt ViewStepThe Dummy PythonQt JobThis is the Dummy PythonQt Job. The dummy job says: {}Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Last-Translator: Ander Elortondo, 2019 Language-Team: Basque (https://www.transifex.com/calamares/teams/20061/eu/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: eu Plural-Forms: nplurals=2; plural=(n != 1); QLabel berria.Dummy PythonQt lanaren egoera mezua.Egidazu klik!Dummy PythonQt pauso-ikuspegia Dummy PythonQt lanaHau Dummy PythonQt lana da. Dummy lanak zera dio: {}calamares-3.2.20/src/modules/dummypythonqt/lang/eu/LC_MESSAGES/dummypythonqt.po000066400000000000000000000025661362604102500273600ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Ander Elortondo, 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Ander Elortondo, 2019\n" "Language-Team: Basque (https://www.transifex.com/calamares/teams/20061/eu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: eu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Egidazu klik!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "QLabel berria." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Dummy PythonQt pauso-ikuspegia" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr " Dummy PythonQt lana" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Hau Dummy PythonQt lana da. Dummy lanak zera dio: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Dummy PythonQt lanaren egoera mezua." calamares-3.2.20/src/modules/dummypythonqt/lang/fa/000077500000000000000000000000001362604102500222355ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/fa/LC_MESSAGES/000077500000000000000000000000001362604102500240225ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/fa/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000005731362604102500273260ustar00rootroot00000000000000Þ•$,8A9Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Language-Team: Persian (https://www.transifex.com/calamares/teams/20061/fa/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: fa Plural-Forms: nplurals=2; plural=(n > 1); calamares-3.2.20/src/modules/dummypythonqt/lang/fa/LC_MESSAGES/dummypythonqt.po000066400000000000000000000021731362604102500273270ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Language-Team: Persian (https://www.transifex.com/calamares/teams/20061/fa/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fa\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "" #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "" calamares-3.2.20/src/modules/dummypythonqt/lang/fi_FI/000077500000000000000000000000001362604102500226235ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/fi_FI/LC_MESSAGES/000077500000000000000000000000001362604102500244105ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/fi_FI/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000016621362604102500277140ustar00rootroot00000000000000Þ•T Œ¸ ¹(Ç ðú6)`ð!"1ODmA new QLabel.A status message for Dummy PythonQt Job.Click me!Dummy PythonQt ViewStepThe Dummy PythonQt JobThis is the Dummy PythonQt Job. The dummy job says: {}Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Last-Translator: Kimmo Kujansuu , 2019 Language-Team: Finnish (Finland) (https://www.transifex.com/calamares/teams/20061/fi_FI/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: fi_FI Plural-Forms: nplurals=2; plural=(n != 1); Uusi Qtyönimi.Python Qt-työkalun tilailmoitus.Klikkaa minua!Näppärä Python Qt-näkymäNäppärä Python Qt-työkaluTämä on näppärä Python Qt-työkalu. Näennäinen työ sanoo: {}calamares-3.2.20/src/modules/dummypythonqt/lang/fi_FI/LC_MESSAGES/dummypythonqt.po000066400000000000000000000027571362604102500277250ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Assalat3 , 2017 # Kimmo Kujansuu , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-05-10 19:18-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Kimmo Kujansuu , 2019\n" "Language-Team: Finnish (Finland) (https://www.transifex.com/calamares/teams/20061/fi_FI/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fi_FI\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Klikkaa minua!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Uusi Qtyönimi." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Näppärä Python Qt-näkymä" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "Näppärä Python Qt-työkalu" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Tämä on näppärä Python Qt-työkalu. Näennäinen työ sanoo: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Python Qt-työkalun tilailmoitus." calamares-3.2.20/src/modules/dummypythonqt/lang/fr/000077500000000000000000000000001362604102500222565ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/fr/LC_MESSAGES/000077500000000000000000000000001362604102500240435ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/fr/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000016501362604102500273440ustar00rootroot00000000000000Þ•T Œ¸ ¹(Ç ðú6)`â3õ )6P?hA new QLabel.A status message for Dummy PythonQt Job.Click me!Dummy PythonQt ViewStepThe Dummy PythonQt JobThis is the Dummy PythonQt Job. The dummy job says: {}Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Last-Translator: Aestan , 2018 Language-Team: French (https://www.transifex.com/calamares/teams/20061/fr/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: fr Plural-Forms: nplurals=2; plural=(n > 1); Un nouveau QLabel.Un message d'état pour la tâche factice PythonQt.Cliquez-moi!ViewStep Factice PythonQtTâche Factice PythonQtCeci est la tâche factice PythonQt. La tâche factice dit : {}calamares-3.2.20/src/modules/dummypythonqt/lang/fr/LC_MESSAGES/dummypythonqt.po000066400000000000000000000027631362604102500273550ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Paul Combal , 2017 # Aestan , 2018 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Aestan , 2018\n" "Language-Team: French (https://www.transifex.com/calamares/teams/20061/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Cliquez-moi!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Un nouveau QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "ViewStep Factice PythonQt" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "Tâche Factice PythonQt" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Ceci est la tâche factice PythonQt. La tâche factice dit : {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Un message d'état pour la tâche factice PythonQt." calamares-3.2.20/src/modules/dummypythonqt/lang/fr_CH/000077500000000000000000000000001362604102500226305ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/fr_CH/LC_MESSAGES/000077500000000000000000000000001362604102500244155ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/fr_CH/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000006161362604102500277170ustar00rootroot00000000000000Þ•$,8T9Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Language-Team: French (Switzerland) (https://www.transifex.com/calamares/teams/20061/fr_CH/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: fr_CH Plural-Forms: nplurals=2; plural=(n > 1); calamares-3.2.20/src/modules/dummypythonqt/lang/fr_CH/LC_MESSAGES/dummypythonqt.po000066400000000000000000000022161362604102500277200ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Language-Team: French (Switzerland) (https://www.transifex.com/calamares/teams/20061/fr_CH/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fr_CH\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "" #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "" calamares-3.2.20/src/modules/dummypythonqt/lang/gl/000077500000000000000000000000001362604102500222515ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/gl/LC_MESSAGES/000077500000000000000000000000001362604102500240365ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/gl/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000015711362604102500273410ustar00rootroot00000000000000Þ•T Œ¸ ¹(Ç ðú6)``Á+Ó ÿ $9?A new QLabel.A status message for Dummy PythonQt Job.Click me!Dummy PythonQt ViewStepThe Dummy PythonQt JobThis is the Dummy PythonQt Job. The dummy job says: {}Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Last-Translator: Xosé, 2018 Language-Team: Galician (https://www.transifex.com/calamares/teams/20061/gl/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: gl Plural-Forms: nplurals=2; plural=(n != 1); Unha QLabel nova.Unha mensaxe parva para Dummy PythonQt Job.Prémeme!ViewStep parvo de PythonQtA tarefa parva de PythonQtEsta é a tarefa parva de PythonQt. A tarefa parva di: {}calamares-3.2.20/src/modules/dummypythonqt/lang/gl/LC_MESSAGES/dummypythonqt.po000066400000000000000000000025601362604102500273430ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Xosé, 2018 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Xosé, 2018\n" "Language-Team: Galician (https://www.transifex.com/calamares/teams/20061/gl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: gl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Prémeme!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Unha QLabel nova." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "ViewStep parvo de PythonQt" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "A tarefa parva de PythonQt" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Esta é a tarefa parva de PythonQt. A tarefa parva di: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Unha mensaxe parva para Dummy PythonQt Job." calamares-3.2.20/src/modules/dummypythonqt/lang/gu/000077500000000000000000000000001362604102500222625ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/gu/LC_MESSAGES/000077500000000000000000000000001362604102500240475ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/gu/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000005751362604102500273550ustar00rootroot00000000000000Þ•$,8C9Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Language-Team: Gujarati (https://www.transifex.com/calamares/teams/20061/gu/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: gu Plural-Forms: nplurals=2; plural=(n != 1); calamares-3.2.20/src/modules/dummypythonqt/lang/gu/LC_MESSAGES/dummypythonqt.po000066400000000000000000000021751362604102500273560ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Language-Team: Gujarati (https://www.transifex.com/calamares/teams/20061/gu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: gu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "" #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "" calamares-3.2.20/src/modules/dummypythonqt/lang/he/000077500000000000000000000000001362604102500222435ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/he/LC_MESSAGES/000077500000000000000000000000001362604102500240305ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/he/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000021011362604102500273210ustar00rootroot00000000000000Þ•T Œ¸ ¹(Ç ðú6)Ø`9;H„:•!ÐNòA new QLabel.A status message for Dummy PythonQt Job.Click me!Dummy PythonQt ViewStepThe Dummy PythonQt JobThis is the Dummy PythonQt Job. The dummy job says: {}Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Last-Translator: Eli Shleifer , 2017 Language-Team: Hebrew (https://www.transifex.com/calamares/teams/20061/he/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: he Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3; QLabel חדש.הודעת מצב עבור משימת דמה של PythonQt.לחץ עליי!שלב הצפייה של משימת הדמה של PythonQtמשימת הדמה של PythonQtזוהי משימת הדמה של PythonQt. משימת הדמה ×ומרת: {}calamares-3.2.20/src/modules/dummypythonqt/lang/he/LC_MESSAGES/dummypythonqt.po000066400000000000000000000031241362604102500273320ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Eli Shleifer , 2017 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Eli Shleifer , 2017\n" "Language-Team: Hebrew (https://www.transifex.com/calamares/teams/20061/he/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: he\n" "Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "לחץ עליי!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "QLabel חדש." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "שלב הצפייה של משימת הדמה של PythonQt" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "משימת הדמה של PythonQt" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "זוהי משימת הדמה של PythonQt. משימת הדמה ×ומרת: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "הודעת מצב עבור משימת דמה של PythonQt." calamares-3.2.20/src/modules/dummypythonqt/lang/hi/000077500000000000000000000000001362604102500222475ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/hi/LC_MESSAGES/000077500000000000000000000000001362604102500240345ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/hi/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000023051362604102500273330ustar00rootroot00000000000000Þ•T Œ¸ ¹(Ç ðú6)z`Ûuï*ei5ú”0A new QLabel.A status message for Dummy PythonQt Job.Click me!Dummy PythonQt ViewStepThe Dummy PythonQt JobThis is the Dummy PythonQt Job. The dummy job says: {}Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Last-Translator: Panwar108 , 2018 Language-Team: Hindi (https://www.transifex.com/calamares/teams/20061/hi/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: hi Plural-Forms: nplurals=2; plural=(n != 1); नया QLabel।डमी पाइथन पà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ की अवसà¥à¤¥à¤¾ संबंधी संदेश।यहाठकà¥à¤²à¤¿à¤• करें!डमी पाइथन पà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ की चरण संखà¥à¤¯à¤¾ देखेंडमी पाइथन पà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾à¤¯à¤¹ डमी पाइथन पà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ है। डमी पà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ संबंधी संदेश : {}calamares-3.2.20/src/modules/dummypythonqt/lang/hi/LC_MESSAGES/dummypythonqt.po000066400000000000000000000033311362604102500273360ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Panwar108 , 2018 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Panwar108 , 2018\n" "Language-Team: Hindi (https://www.transifex.com/calamares/teams/20061/hi/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: hi\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "यहाठकà¥à¤²à¤¿à¤• करें!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "नया QLabel।" #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "डमी पाइथन पà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ की चरण संखà¥à¤¯à¤¾ देखें" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "डमी पाइथन पà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "यह डमी पाइथन पà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ है। डमी पà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ संबंधी संदेश : {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "डमी पाइथन पà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ की अवसà¥à¤¥à¤¾ संबंधी संदेश।" calamares-3.2.20/src/modules/dummypythonqt/lang/hr/000077500000000000000000000000001362604102500222605ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/hr/LC_MESSAGES/000077500000000000000000000000001362604102500240455ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/hr/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000017311362604102500273460ustar00rootroot00000000000000Þ•T Œ¸ ¹(Ç ðú6)Í` .*; fqŠ7¡A new QLabel.A status message for Dummy PythonQt Job.Click me!Dummy PythonQt ViewStepThe Dummy PythonQt JobThis is the Dummy PythonQt Job. The dummy job says: {}Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Last-Translator: Lovro Kudelić , 2017 Language-Team: Croatian (https://www.transifex.com/calamares/teams/20061/hr/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: hr Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2; Novi QLabel.Statusna poruka za testni PythonQt posao.Klikni me!Testni PythonQt ViewStepTestni PythonQt posaoOvo je testni PythonQt posao. Testni posao kaže: {}calamares-3.2.20/src/modules/dummypythonqt/lang/hr/LC_MESSAGES/dummypythonqt.po000066400000000000000000000027651362604102500273610ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Lovro Kudelić , 2017 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Lovro Kudelić , 2017\n" "Language-Team: Croatian (https://www.transifex.com/calamares/teams/20061/hr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: hr\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Klikni me!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Novi QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Testni PythonQt ViewStep" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "Testni PythonQt posao" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Ovo je testni PythonQt posao. Testni posao kaže: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Statusna poruka za testni PythonQt posao." calamares-3.2.20/src/modules/dummypythonqt/lang/hu/000077500000000000000000000000001362604102500222635ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/hu/LC_MESSAGES/000077500000000000000000000000001362604102500240505ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/hu/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000015551362604102500273550ustar00rootroot00000000000000Þ•T Œ¸ ¹(Ç ðú6)b`Ã&Ó ú 57A new QLabel.A status message for Dummy PythonQt Job.Click me!Dummy PythonQt ViewStepThe Dummy PythonQt JobThis is the Dummy PythonQt Job. The dummy job says: {}Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Last-Translator: miku84, 2017 Language-Team: Hungarian (https://www.transifex.com/calamares/teams/20061/hu/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: hu Plural-Forms: nplurals=2; plural=(n != 1); Egy új QLabel.Sztátus üzenet egy PythonQt Job-hoz.Kattints ide!Hamis PythonQt ViewStepEgy PythonQt Job tesztEz egy PythonQt Job teszt. A teszt job azt mondja: {}calamares-3.2.20/src/modules/dummypythonqt/lang/hu/LC_MESSAGES/dummypythonqt.po000066400000000000000000000026171362604102500273600ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Lajos Pasztor , 2016 # miku84, 2017 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: miku84, 2017\n" "Language-Team: Hungarian (https://www.transifex.com/calamares/teams/20061/hu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: hu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Kattints ide!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Egy új QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Hamis PythonQt ViewStep" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "Egy PythonQt Job teszt" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Ez egy PythonQt Job teszt. A teszt job azt mondja: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Sztátus üzenet egy PythonQt Job-hoz." calamares-3.2.20/src/modules/dummypythonqt/lang/id/000077500000000000000000000000001362604102500222435ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/id/LC_MESSAGES/000077500000000000000000000000001362604102500240305ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/id/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000016031362604102500273270ustar00rootroot00000000000000Þ•T Œ¸ ¹(Ç ðú6)r`Ó-ç  87KA new QLabel.A status message for Dummy PythonQt Job.Click me!Dummy PythonQt ViewStepThe Dummy PythonQt JobThis is the Dummy PythonQt Job. The dummy job says: {}Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Last-Translator: Wantoyo , 2017 Language-Team: Indonesian (https://www.transifex.com/calamares/teams/20061/id/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: id Plural-Forms: nplurals=1; plural=0; Sebuah QLabel baru.Sebuah pesan status untuk Dummy PythonQt Job.Klik saya!Dummy PythonQt ViewStepDummy PythonQt JobIni adalah Dummy PythonQt Job. Dummy job mengatakan: {}calamares-3.2.20/src/modules/dummypythonqt/lang/id/LC_MESSAGES/dummypythonqt.po000066400000000000000000000027001362604102500273310ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Kukuh Syafaat , 2016 # Wantoyo , 2017 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Wantoyo , 2017\n" "Language-Team: Indonesian (https://www.transifex.com/calamares/teams/20061/id/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: id\n" "Plural-Forms: nplurals=1; plural=0;\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Klik saya!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Sebuah QLabel baru." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Dummy PythonQt ViewStep" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "Dummy PythonQt Job" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Ini adalah Dummy PythonQt Job. Dummy job mengatakan: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Sebuah pesan status untuk Dummy PythonQt Job." calamares-3.2.20/src/modules/dummypythonqt/lang/is/000077500000000000000000000000001362604102500222625ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/is/LC_MESSAGES/000077500000000000000000000000001362604102500240475ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/is/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000016121362604102500273460ustar00rootroot00000000000000Þ•T Œ¸ ¹(Ç ðú6)†` ç*õ -E1XA new QLabel.A status message for Dummy PythonQt Job.Click me!Dummy PythonQt ViewStepThe Dummy PythonQt JobThis is the Dummy PythonQt Job. The dummy job says: {}Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Last-Translator: Kristján Magnússon, 2017 Language-Team: Icelandic (https://www.transifex.com/calamares/teams/20061/is/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: is Plural-Forms: nplurals=2; plural=(n % 10 != 1 || n % 100 == 11); Nýtt QLabel.Stöðuskilaboð fyrir Dummy PythonQt Job.Smelltu mig!Dummy PythonQt ViewStepDummy PythonQt JobÞetta er Dummy PythonQt Job. Dummy job segir: {}calamares-3.2.20/src/modules/dummypythonqt/lang/is/LC_MESSAGES/dummypythonqt.po000066400000000000000000000026201362604102500273510ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Kristján Magnússon, 2017 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Kristján Magnússon, 2017\n" "Language-Team: Icelandic (https://www.transifex.com/calamares/teams/20061/is/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: is\n" "Plural-Forms: nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Smelltu mig!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Nýtt QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Dummy PythonQt ViewStep" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "Dummy PythonQt Job" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Þetta er Dummy PythonQt Job. Dummy job segir: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Stöðuskilaboð fyrir Dummy PythonQt Job." calamares-3.2.20/src/modules/dummypythonqt/lang/it_IT/000077500000000000000000000000001362604102500226575ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/it_IT/LC_MESSAGES/000077500000000000000000000000001362604102500244445ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/it_IT/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000016521362604102500277470ustar00rootroot00000000000000Þ•T Œ¸ ¹(Ç ðú6)Ž`ï0 2>Y:oA new QLabel.A status message for Dummy PythonQt Job.Click me!Dummy PythonQt ViewStepThe Dummy PythonQt JobThis is the Dummy PythonQt Job. The dummy job says: {}Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Last-Translator: Saverio , 2018 Language-Team: Italian (Italy) (https://www.transifex.com/calamares/teams/20061/it_IT/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: it_IT Plural-Forms: nplurals=2; plural=(n != 1); Una nuova QLabel.Un messaggio di stato per il Job Dummy PythonQt.Clicca qui!PythonQt ViewStep fittizioIl Job Dummy PythonQtQuesto è il Job Dummy PythonQt. Il dummy job notifica: {}calamares-3.2.20/src/modules/dummypythonqt/lang/it_IT/LC_MESSAGES/dummypythonqt.po000066400000000000000000000027451362604102500277560ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Teo Mrnjavac , 2016 # Saverio , 2018 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-02-22 07:09-0500\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Saverio , 2018\n" "Language-Team: Italian (Italy) (https://www.transifex.com/calamares/teams/20061/it_IT/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: it_IT\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Clicca qui!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Una nuova QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "PythonQt ViewStep fittizio" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "Il Job Dummy PythonQt" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Questo è il Job Dummy PythonQt. Il dummy job notifica: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Un messaggio di stato per il Job Dummy PythonQt." calamares-3.2.20/src/modules/dummypythonqt/lang/ja/000077500000000000000000000000001362604102500222415ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/ja/LC_MESSAGES/000077500000000000000000000000001362604102500240265ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/ja/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000016201362604102500273240ustar00rootroot00000000000000Þ•T Œ¸ ¹(Ç ðú6)c`Ä&Ôû3EJA new QLabel.A status message for Dummy PythonQt Job.Click me!Dummy PythonQt ViewStepThe Dummy PythonQt JobThis is the Dummy PythonQt Job. The dummy job says: {}Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Last-Translator: Takefumi Nagata, 2017 Language-Team: Japanese (https://www.transifex.com/calamares/teams/20061/ja/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: ja Plural-Forms: nplurals=1; plural=0; æ–°ã—ã„QLabelダミーã®PythonQtジョブã®çŠ¶æ…‹ã‚¯ãƒªãƒƒã‚¯ã—ã¦ãã ã•ã„!Dummy PythonQt ViewStepThe Dummy PythonQt Jobã“れã¯Dummy PythonQtジョブã§ã™ã€‚Dummy ジョブã®å‡ºåŠ›: {}calamares-3.2.20/src/modules/dummypythonqt/lang/ja/LC_MESSAGES/dummypythonqt.po000066400000000000000000000026211362604102500273310ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Takefumi Nagata, 2017 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Takefumi Nagata, 2017\n" "Language-Team: Japanese (https://www.transifex.com/calamares/teams/20061/ja/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ja\n" "Plural-Forms: nplurals=1; plural=0;\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "クリックã—ã¦ãã ã•ã„!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "æ–°ã—ã„QLabel" #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Dummy PythonQt ViewStep" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "The Dummy PythonQt Job" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "ã“れã¯Dummy PythonQtジョブã§ã™ã€‚Dummy ジョブã®å‡ºåŠ›: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "ダミーã®PythonQtジョブã®çŠ¶æ…‹" calamares-3.2.20/src/modules/dummypythonqt/lang/kk/000077500000000000000000000000001362604102500222545ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/kk/LC_MESSAGES/000077500000000000000000000000001362604102500240415ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/kk/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000005711362604102500273430ustar00rootroot00000000000000Þ•$,8?9Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Language-Team: Kazakh (https://www.transifex.com/calamares/teams/20061/kk/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: kk Plural-Forms: nplurals=2; plural=(n!=1); calamares-3.2.20/src/modules/dummypythonqt/lang/kk/LC_MESSAGES/dummypythonqt.po000066400000000000000000000021711362604102500273440ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Language-Team: Kazakh (https://www.transifex.com/calamares/teams/20061/kk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: kk\n" "Plural-Forms: nplurals=2; plural=(n!=1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "" #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "" calamares-3.2.20/src/modules/dummypythonqt/lang/kn/000077500000000000000000000000001362604102500222575ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/kn/LC_MESSAGES/000077500000000000000000000000001362604102500240445ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/kn/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000005731362604102500273500ustar00rootroot00000000000000Þ•$,8A9Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Language-Team: Kannada (https://www.transifex.com/calamares/teams/20061/kn/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: kn Plural-Forms: nplurals=2; plural=(n > 1); calamares-3.2.20/src/modules/dummypythonqt/lang/kn/LC_MESSAGES/dummypythonqt.po000066400000000000000000000021731362604102500273510ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Language-Team: Kannada (https://www.transifex.com/calamares/teams/20061/kn/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: kn\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "" #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "" calamares-3.2.20/src/modules/dummypythonqt/lang/ko/000077500000000000000000000000001362604102500222605ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/ko/LC_MESSAGES/000077500000000000000000000000001362604102500240455ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/ko/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000016711362604102500273510ustar00rootroot00000000000000Þ•T Œ¸ ¹(Ç ðú6)u`Ö*è.GZ^A new QLabel.A status message for Dummy PythonQt Job.Click me!Dummy PythonQt ViewStepThe Dummy PythonQt JobThis is the Dummy PythonQt Job. The dummy job says: {}Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Last-Translator: 김지현 , 2020 Language-Team: Korean (https://www.transifex.com/calamares/teams/20061/ko/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: ko Plural-Forms: nplurals=1; plural=0; 새로운 QLabel.ë”미 PythonQt ìž‘ì—…ì˜ ìƒíƒœ 메시지여기를 í´ë¦­í•˜ì„¸ìš”!ë”미 PythonQt ViewStepë”미 PythonQt 작업ë”미 PythonQt 작업입니다. ì´ ë”미 ìž‘ì—…ì˜ ì¶œë ¥ì€ ë‹¤ìŒê³¼ 같습니다: {}calamares-3.2.20/src/modules/dummypythonqt/lang/ko/LC_MESSAGES/dummypythonqt.po000066400000000000000000000027671362604102500273630ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # MarongHappy , 2019 # 김지현 , 2020 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: 김지현 , 2020\n" "Language-Team: Korean (https://www.transifex.com/calamares/teams/20061/ko/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ko\n" "Plural-Forms: nplurals=1; plural=0;\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "여기를 í´ë¦­í•˜ì„¸ìš”!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "새로운 QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "ë”미 PythonQt ViewStep" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "ë”미 PythonQt 작업" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "ë”미 PythonQt 작업입니다. ì´ ë”미 ìž‘ì—…ì˜ ì¶œë ¥ì€ ë‹¤ìŒê³¼ 같습니다: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "ë”미 PythonQt ìž‘ì—…ì˜ ìƒíƒœ 메시지" calamares-3.2.20/src/modules/dummypythonqt/lang/lo/000077500000000000000000000000001362604102500222615ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/lo/LC_MESSAGES/000077500000000000000000000000001362604102500240465ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/lo/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000005611362604102500273470ustar00rootroot00000000000000Þ•$,879Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Language-Team: Lao (https://www.transifex.com/calamares/teams/20061/lo/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: lo Plural-Forms: nplurals=1; plural=0; calamares-3.2.20/src/modules/dummypythonqt/lang/lo/LC_MESSAGES/dummypythonqt.po000066400000000000000000000021611362604102500273500ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Language-Team: Lao (https://www.transifex.com/calamares/teams/20061/lo/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: lo\n" "Plural-Forms: nplurals=1; plural=0;\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "" #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "" calamares-3.2.20/src/modules/dummypythonqt/lang/lt/000077500000000000000000000000001362604102500222665ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/lt/LC_MESSAGES/000077500000000000000000000000001362604102500240535ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/lt/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000020171362604102500273520ustar00rootroot00000000000000Þ•T Œ¸ ¹(Ç ðú6)ã`D3S‡›µ>ÐA new QLabel.A status message for Dummy PythonQt Job.Click me!Dummy PythonQt ViewStepThe Dummy PythonQt JobThis is the Dummy PythonQt Job. The dummy job says: {}Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Last-Translator: Moo, 2017 Language-Team: Lithuanian (https://www.transifex.com/calamares/teams/20061/lt/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: lt Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3); Naujas QLabel.Fiktyvios PythonQt užduoties bÅ«senos praneÅ¡imas.SpustelÄ—kite mane!Fiktyvi PythonQt ViewStepFiktyvi PythonQt užduotisTai yra fiktyvi PythonQt užduotis. Fiktyvi užduotis sako: {}calamares-3.2.20/src/modules/dummypythonqt/lang/lt/LC_MESSAGES/dummypythonqt.po000066400000000000000000000030041362604102500273520ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Moo, 2017 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Moo, 2017\n" "Language-Team: Lithuanian (https://www.transifex.com/calamares/teams/20061/lt/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: lt\n" "Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "SpustelÄ—kite mane!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Naujas QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Fiktyvi PythonQt ViewStep" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "Fiktyvi PythonQt užduotis" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Tai yra fiktyvi PythonQt užduotis. Fiktyvi užduotis sako: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Fiktyvios PythonQt užduoties bÅ«senos praneÅ¡imas." calamares-3.2.20/src/modules/dummypythonqt/lang/mk/000077500000000000000000000000001362604102500222565ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/mk/LC_MESSAGES/000077500000000000000000000000001362604102500240435ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/mk/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000011101362604102500273330ustar00rootroot00000000000000Þ•4L` a o¬y&5A new QLabel.Click me!Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Last-Translator: Martin Ristovski , 2018 Language-Team: Macedonian (https://www.transifex.com/calamares/teams/20061/mk/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: mk Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1; Ðов QLabel.Кликни ме!calamares-3.2.20/src/modules/dummypythonqt/lang/mk/LC_MESSAGES/dummypythonqt.po000066400000000000000000000025261362604102500273520ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Martin Ristovski , 2018 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Martin Ristovski , 2018\n" "Language-Team: Macedonian (https://www.transifex.com/calamares/teams/20061/mk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: mk\n" "Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Кликни ме!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Ðов QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "" calamares-3.2.20/src/modules/dummypythonqt/lang/ml/000077500000000000000000000000001362604102500222575ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/ml/LC_MESSAGES/000077500000000000000000000000001362604102500240445ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/ml/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000011351362604102500273430ustar00rootroot00000000000000Þ•4L` a o„y!þ< A new QLabel.Click me!Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Last-Translator: Balasankar C , 2019 Language-Team: Malayalam (https://www.transifex.com/calamares/teams/20061/ml/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: ml Plural-Forms: nplurals=2; plural=(n != 1); ഒരൠപàµà´¤à´¿à´¯ QLabel.à´Žà´¨àµà´¨àµ† à´•àµà´²à´¿à´•àµà´•ൠചെയàµà´¯àµ‚!calamares-3.2.20/src/modules/dummypythonqt/lang/ml/LC_MESSAGES/dummypythonqt.po000066400000000000000000000025421362604102500273510ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Balasankar C , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-09-15 21:54+0200\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Balasankar C , 2019\n" "Language-Team: Malayalam (https://www.transifex.com/calamares/teams/20061/ml/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ml\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "à´Žà´¨àµà´¨àµ† à´•àµà´²à´¿à´•àµà´•ൠചെയàµà´¯àµ‚!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "ഒരൠപàµà´¤à´¿à´¯ QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "" calamares-3.2.20/src/modules/dummypythonqt/lang/mr/000077500000000000000000000000001362604102500222655ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/mr/LC_MESSAGES/000077500000000000000000000000001362604102500240525ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/mr/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000005741362604102500273570ustar00rootroot00000000000000Þ•$,8B9Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Language-Team: Marathi (https://www.transifex.com/calamares/teams/20061/mr/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: mr Plural-Forms: nplurals=2; plural=(n != 1); calamares-3.2.20/src/modules/dummypythonqt/lang/mr/LC_MESSAGES/dummypythonqt.po000066400000000000000000000021741362604102500273600ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Language-Team: Marathi (https://www.transifex.com/calamares/teams/20061/mr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: mr\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "" #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "" calamares-3.2.20/src/modules/dummypythonqt/lang/nb/000077500000000000000000000000001362604102500222465ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/nb/LC_MESSAGES/000077500000000000000000000000001362604102500240335ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/nb/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000006061362604102500273340ustar00rootroot00000000000000Þ•$,8L9Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Language-Team: Norwegian BokmÃ¥l (https://www.transifex.com/calamares/teams/20061/nb/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: nb Plural-Forms: nplurals=2; plural=(n != 1); calamares-3.2.20/src/modules/dummypythonqt/lang/nb/LC_MESSAGES/dummypythonqt.po000066400000000000000000000022061362604102500273350ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Language-Team: Norwegian BokmÃ¥l (https://www.transifex.com/calamares/teams/20061/nb/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: nb\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "" #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "" calamares-3.2.20/src/modules/dummypythonqt/lang/ne_NP/000077500000000000000000000000001362604102500226465ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/ne_NP/LC_MESSAGES/000077500000000000000000000000001362604102500244335ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/ne_NP/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000022631362604102500277350ustar00rootroot00000000000000Þ•T Œ¸ ¹(Ç ðú6)Œ`íz95¹/ï“A new QLabel.A status message for Dummy PythonQt Job.Click me!Dummy PythonQt ViewStepThe Dummy PythonQt JobThis is the Dummy PythonQt Job. The dummy job says: {}Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Last-Translator: Ghost Hackz , 2019 Language-Team: Nepali (Nepal) (https://www.transifex.com/calamares/teams/20061/ne_NP/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: ne_NP Plural-Forms: nplurals=2; plural=(n != 1); नयाठQLabel।डमी पाइथन पà¥à¤°à¤•ृयाको अवसà¥à¤¥à¤¾ समà¥à¤¬à¤¨à¥à¤§à¤¿à¤¤ सनà¥à¤¦à¥‡à¤¶à¥¤à¤¯à¤¹à¤¾à¤ कà¥à¤²à¤¿à¤• गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥!डमी पाइथन भà¥à¤¯à¥‚सà¥à¤Ÿà¥‡à¤ªà¤¡à¤®à¥€ पाइथन पà¥à¤°à¤•ृयायो डमी पाइथन पà¥à¤°à¤•ृया हो। डमी पà¥à¤°à¤•ृया समà¥à¤¬à¤¨à¥à¤§à¤¿à¤¤ सनà¥à¤¦à¥‡à¤¶: {}calamares-3.2.20/src/modules/dummypythonqt/lang/ne_NP/LC_MESSAGES/dummypythonqt.po000066400000000000000000000033121362604102500277340ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Ghost Hackz , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-01-25 08:04-0500\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Ghost Hackz , 2019\n" "Language-Team: Nepali (Nepal) (https://www.transifex.com/calamares/teams/20061/ne_NP/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ne_NP\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "यहाठकà¥à¤²à¤¿à¤• गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "नयाठQLabel।" #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "डमी पाइथन भà¥à¤¯à¥‚सà¥à¤Ÿà¥‡à¤ª" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "डमी पाइथन पà¥à¤°à¤•ृया" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "यो डमी पाइथन पà¥à¤°à¤•ृया हो। डमी पà¥à¤°à¤•ृया समà¥à¤¬à¤¨à¥à¤§à¤¿à¤¤ सनà¥à¤¦à¥‡à¤¶: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "डमी पाइथन पà¥à¤°à¤•ृयाको अवसà¥à¤¥à¤¾ समà¥à¤¬à¤¨à¥à¤§à¤¿à¤¤ सनà¥à¤¦à¥‡à¤¶à¥¤" calamares-3.2.20/src/modules/dummypythonqt/lang/nl/000077500000000000000000000000001362604102500222605ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/nl/LC_MESSAGES/000077500000000000000000000000001362604102500240455ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/nl/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000016221362604102500273450ustar00rootroot00000000000000Þ•T Œ¸ ¹(Ç ðú6)x`Ù2ê '?7ZA new QLabel.A status message for Dummy PythonQt Job.Click me!Dummy PythonQt ViewStepThe Dummy PythonQt JobThis is the Dummy PythonQt Job. The dummy job says: {}Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Last-Translator: De Zeeappel , 2017 Language-Team: Dutch (https://www.transifex.com/calamares/teams/20061/nl/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: nl Plural-Forms: nplurals=2; plural=(n != 1); Een nieuw QLabelEen statusbericht voor de Dummy PythonQt opdracht.Klik mij!Dummy PythonQt ViewStepDe Dummy PythonQt opdrachtDit is de Dummy PythonQt opdracht. De opdracht zegt: {}calamares-3.2.20/src/modules/dummypythonqt/lang/nl/LC_MESSAGES/dummypythonqt.po000066400000000000000000000026441362604102500273550ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # De Zeeappel , 2017 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: De Zeeappel , 2017\n" "Language-Team: Dutch (https://www.transifex.com/calamares/teams/20061/nl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: nl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Klik mij!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Een nieuw QLabel" #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Dummy PythonQt ViewStep" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "De Dummy PythonQt opdracht" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Dit is de Dummy PythonQt opdracht. De opdracht zegt: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Een statusbericht voor de Dummy PythonQt opdracht." calamares-3.2.20/src/modules/dummypythonqt/lang/pl/000077500000000000000000000000001362604102500222625ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/pl/LC_MESSAGES/000077500000000000000000000000001362604102500240475ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/pl/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000020561362604102500273510ustar00rootroot00000000000000Þ•T Œ¸ ¹(Ç ðú6)` p1}¯$¿ä/þA new QLabel.A status message for Dummy PythonQt Job.Click me!Dummy PythonQt ViewStepThe Dummy PythonQt JobThis is the Dummy PythonQt Job. The dummy job says: {}Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Last-Translator: Piotr StrÄ™bski , 2017 Language-Team: Polish (https://www.transifex.com/calamares/teams/20061/pl/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: pl Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3); Nowy QLabel.Wiadomość o stanie zadania fikcyjnego PythonQt.NaciÅ›nij mnie!PodglÄ…d kroków fikcyjnego PythonQtZadanie fikcyjne PythonQtTo jest zadanie fikcyjne PythonQt mówiÄ…ce: {}calamares-3.2.20/src/modules/dummypythonqt/lang/pl/LC_MESSAGES/dummypythonqt.po000066400000000000000000000031601362604102500273510ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Marcin MikoÅ‚ajczak , 2016 # Piotr StrÄ™bski , 2017 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-05-10 19:18-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Piotr StrÄ™bski , 2017\n" "Language-Team: Polish (https://www.transifex.com/calamares/teams/20061/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "NaciÅ›nij mnie!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Nowy QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "PodglÄ…d kroków fikcyjnego PythonQt" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "Zadanie fikcyjne PythonQt" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "To jest zadanie fikcyjne PythonQt mówiÄ…ce: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Wiadomość o stanie zadania fikcyjnego PythonQt." calamares-3.2.20/src/modules/dummypythonqt/lang/pt_BR/000077500000000000000000000000001362604102500226555ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/pt_BR/LC_MESSAGES/000077500000000000000000000000001362604102500244425ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/pt_BR/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000016351362604102500277460ustar00rootroot00000000000000Þ•T Œ¸ ¹(Ç ðú6)t`Õ5æ+G9cA new QLabel.A status message for Dummy PythonQt Job.Click me!Dummy PythonQt ViewStepThe Dummy PythonQt JobThis is the Dummy PythonQt Job. The dummy job says: {}Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Last-Translator: Guilherme, 2018 Language-Team: Portuguese (Brazil) (https://www.transifex.com/calamares/teams/20061/pt_BR/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: pt_BR Plural-Forms: nplurals=2; plural=(n > 1); Uma nova QLabel.Uma mensagem de status para a Tarefa Modelo PythonQt.Clique em mim!ViewStep do Modelo PythonQtA Tarefa de Modelo PythonQtEsta é a Tarefa Modelo PythonQt. A tarefa modelo diz: {}calamares-3.2.20/src/modules/dummypythonqt/lang/pt_BR/LC_MESSAGES/dummypythonqt.po000066400000000000000000000027511362604102500277510ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Rodrigo de Almeida Sottomaior Macedo , 2017 # Guilherme, 2018 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-01-25 23:02+0100\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Guilherme, 2018\n" "Language-Team: Portuguese (Brazil) (https://www.transifex.com/calamares/teams/20061/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Clique em mim!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Uma nova QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "ViewStep do Modelo PythonQt" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "A Tarefa de Modelo PythonQt" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Esta é a Tarefa Modelo PythonQt. A tarefa modelo diz: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Uma mensagem de status para a Tarefa Modelo PythonQt." calamares-3.2.20/src/modules/dummypythonqt/lang/pt_PT/000077500000000000000000000000001362604102500226755ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/pt_PT/LC_MESSAGES/000077500000000000000000000000001362604102500244625ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/pt_PT/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000016611362604102500277650ustar00rootroot00000000000000Þ•T Œ¸ ¹(Ç ðú6)—`ø4  >Ia7yA new QLabel.A status message for Dummy PythonQt Job.Click me!Dummy PythonQt ViewStepThe Dummy PythonQt JobThis is the Dummy PythonQt Job. The dummy job says: {}Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Last-Translator: Ricardo Simões , 2017 Language-Team: Portuguese (Portugal) (https://www.transifex.com/calamares/teams/20061/pt_PT/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: pt_PT Plural-Forms: nplurals=2; plural=(n != 1); Uma nova QLabel.Uma mensagem de estado para a Tarefa Dummy PythonQt.Clique-me!Dummy PythonQt ViewStepA Tarefa Dummy PythonQtEsta é a tarefa Dummy PythonQt. A tarefa dummy diz: {}calamares-3.2.20/src/modules/dummypythonqt/lang/pt_PT/LC_MESSAGES/dummypythonqt.po000066400000000000000000000027141362604102500277700ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Ricardo Simões , 2017 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Ricardo Simões , 2017\n" "Language-Team: Portuguese (Portugal) (https://www.transifex.com/calamares/teams/20061/pt_PT/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pt_PT\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Clique-me!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Uma nova QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Dummy PythonQt ViewStep" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "A Tarefa Dummy PythonQt" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Esta é a tarefa Dummy PythonQt. A tarefa dummy diz: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Uma mensagem de estado para a Tarefa Dummy PythonQt." calamares-3.2.20/src/modules/dummypythonqt/lang/ro/000077500000000000000000000000001362604102500222675ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/ro/LC_MESSAGES/000077500000000000000000000000001362604102500240545ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/ro/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000017001362604102500273510ustar00rootroot00000000000000Þ•T Œ¸ ¹(Ç ðú6)¨` / HSk9†A new QLabel.A status message for Dummy PythonQt Job.Click me!Dummy PythonQt ViewStepThe Dummy PythonQt JobThis is the Dummy PythonQt Job. The dummy job says: {}Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Last-Translator: Baadur Jobava , 2018 Language-Team: Romanian (https://www.transifex.com/calamares/teams/20061/ro/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: ro Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1)); Un nou QLabel.Un mesaj de stare pentru jobul fictiv PythonQt.Clic aici!Dummy PythonQt ViewStepUn job job fictiv PythonQtAcesta este jobul fictiv PythonQt. Descrierea jobului: {}calamares-3.2.20/src/modules/dummypythonqt/lang/ro/LC_MESSAGES/dummypythonqt.po000066400000000000000000000027261362604102500273650ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Baadur Jobava , 2018 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Baadur Jobava , 2018\n" "Language-Team: Romanian (https://www.transifex.com/calamares/teams/20061/ro/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ro\n" "Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Clic aici!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Un nou QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Dummy PythonQt ViewStep" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "Un job job fictiv PythonQt" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Acesta este jobul fictiv PythonQt. Descrierea jobului: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Un mesaj de stare pentru jobul fictiv PythonQt." calamares-3.2.20/src/modules/dummypythonqt/lang/ru/000077500000000000000000000000001362604102500222755ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/ru/LC_MESSAGES/000077500000000000000000000000001362604102500240625ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/ru/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000015541362604102500273660ustar00rootroot00000000000000Þ•Dlˆ ‰(— ÀÊáè@û<UA new QLabel.A status message for Dummy PythonQt Job.Click me!The Dummy PythonQt JobProject-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Last-Translator: Simon Schwartz , 2017 Language-Team: Russian (https://www.transifex.com/calamares/teams/20061/ru/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: ru Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3); Ðовый QLabel.Сообщение ÑоÑтоÑÐ½Ð¸Ñ Ð´Ð»Ñ Dummy PythonQt Job.Ðажать здеÑÑŒ!The Dummy PythonQt Jobcalamares-3.2.20/src/modules/dummypythonqt/lang/ru/LC_MESSAGES/dummypythonqt.po000066400000000000000000000030651362604102500273700ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Вадим Сабынич , 2017 # Simon Schwartz , 2017 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Simon Schwartz , 2017\n" "Language-Team: Russian (https://www.transifex.com/calamares/teams/20061/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ru\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Ðажать здеÑÑŒ!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Ðовый QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "The Dummy PythonQt Job" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Сообщение ÑоÑтоÑÐ½Ð¸Ñ Ð´Ð»Ñ Dummy PythonQt Job." calamares-3.2.20/src/modules/dummypythonqt/lang/sk/000077500000000000000000000000001362604102500222645ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/sk/LC_MESSAGES/000077500000000000000000000000001362604102500240515ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/sk/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000016561362604102500273600ustar00rootroot00000000000000Þ•L |¨ ©(· àê6Ç8/ FT?nA new QLabel.A status message for Dummy PythonQt Job.Click me!The Dummy PythonQt JobThis is the Dummy PythonQt Job. The dummy job says: {}Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Last-Translator: DuÅ¡an Kazik , 2016 Language-Team: Slovak (https://www.transifex.com/calamares/teams/20061/sk/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: sk Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3); Nová menovka QLabel.Stavová správa pre fiktívnu úlohu PythonQt.Kliknite sem!Fiktívna úloha PythonQtToto je fiktívna úloha PythonQt. Fiktívna úloha hovorí: {}calamares-3.2.20/src/modules/dummypythonqt/lang/sk/LC_MESSAGES/dummypythonqt.po000066400000000000000000000027541362604102500273630ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # DuÅ¡an Kazik , 2016 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: DuÅ¡an Kazik , 2016\n" "Language-Team: Slovak (https://www.transifex.com/calamares/teams/20061/sk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: sk\n" "Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Kliknite sem!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Nová menovka QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "Fiktívna úloha PythonQt" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Toto je fiktívna úloha PythonQt. Fiktívna úloha hovorí: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Stavová správa pre fiktívnu úlohu PythonQt." calamares-3.2.20/src/modules/dummypythonqt/lang/sl/000077500000000000000000000000001362604102500222655ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/sl/LC_MESSAGES/000077500000000000000000000000001362604102500240525ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/sl/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000006621362604102500273550ustar00rootroot00000000000000Þ•$,8x9Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Language-Team: Slovenian (https://www.transifex.com/calamares/teams/20061/sl/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: sl Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3); calamares-3.2.20/src/modules/dummypythonqt/lang/sl/LC_MESSAGES/dummypythonqt.po000066400000000000000000000022621362604102500273560ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Language-Team: Slovenian (https://www.transifex.com/calamares/teams/20061/sl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: sl\n" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "" #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "" calamares-3.2.20/src/modules/dummypythonqt/lang/sq/000077500000000000000000000000001362604102500222725ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/sq/LC_MESSAGES/000077500000000000000000000000001362604102500240575ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/sq/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000016141362604102500273600ustar00rootroot00000000000000Þ•T Œ¸ ¹(Ç ðú6)|`Ý.ï *B5VA new QLabel.A status message for Dummy PythonQt Job.Click me!Dummy PythonQt ViewStepThe Dummy PythonQt JobThis is the Dummy PythonQt Job. The dummy job says: {}Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Last-Translator: Besnik , 2017 Language-Team: Albanian (https://www.transifex.com/calamares/teams/20061/sq/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: sq Plural-Forms: nplurals=2; plural=(n != 1); Një QLabel e re.Një mesazh gjendjeje nga Akti PythonQt Dummy.Klikomëni!Dummy PythonQt ViewStepAkti PythonQt DummyKy është Akti PythonQt Dummy. Akti dummy thotë: {}calamares-3.2.20/src/modules/dummypythonqt/lang/sq/LC_MESSAGES/dummypythonqt.po000066400000000000000000000026371362604102500273710ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Besnik , 2017 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Besnik , 2017\n" "Language-Team: Albanian (https://www.transifex.com/calamares/teams/20061/sq/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: sq\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Klikomëni!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Një QLabel e re." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Dummy PythonQt ViewStep" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "Akti PythonQt Dummy" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Ky është Akti PythonQt Dummy. Akti dummy thotë: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Një mesazh gjendjeje nga Akti PythonQt Dummy." calamares-3.2.20/src/modules/dummypythonqt/lang/sr/000077500000000000000000000000001362604102500222735ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/sr/LC_MESSAGES/000077500000000000000000000000001362604102500240605ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/sr/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000021471362604102500273630ustar00rootroot00000000000000Þ•T Œ¸ ¹(Ç ðú6)Ç`(NB‘A¤0æOA new QLabel.A status message for Dummy PythonQt Job.Click me!Dummy PythonQt ViewStepThe Dummy PythonQt JobThis is the Dummy PythonQt Job. The dummy job says: {}Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Last-Translator: Slobodan Simić , 2019 Language-Team: Serbian (https://www.transifex.com/calamares/teams/20061/sr/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: sr Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); Ðова КуОзнакаПорука Ñтања за провизорни ПитонКуТ поÑао.Кликни ме!Провизорни ПитонКуТ корак прегледаПровизорни ПитонКуТ поÑаоОво је провизорни ПитонКуТ поÑао. Он каже: {}calamares-3.2.20/src/modules/dummypythonqt/lang/sr/LC_MESSAGES/dummypythonqt.po000066400000000000000000000031741362604102500273670ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Slobodan Simić , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-06-18 15:54+0200\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Slobodan Simić , 2019\n" "Language-Team: Serbian (https://www.transifex.com/calamares/teams/20061/sr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: sr\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Кликни ме!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Ðова КуОзнака" #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Провизорни ПитонКуТ корак прегледа" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "Провизорни ПитонКуТ поÑао" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Ово је провизорни ПитонКуТ поÑао. Он каже: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Порука Ñтања за провизорни ПитонКуТ поÑао." calamares-3.2.20/src/modules/dummypythonqt/lang/sr@latin/000077500000000000000000000000001362604102500234235ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/sr@latin/LC_MESSAGES/000077500000000000000000000000001362604102500252105ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/sr@latin/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000007321362604102500305110ustar00rootroot00000000000000Þ•$,8 9Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Language-Team: Serbian (Latin) (https://www.transifex.com/calamares/teams/20061/sr@latin/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: sr@latin Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); calamares-3.2.20/src/modules/dummypythonqt/lang/sr@latin/LC_MESSAGES/dummypythonqt.po000066400000000000000000000023321362604102500305120ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-02-22 07:09-0500\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Language-Team: Serbian (Latin) (https://www.transifex.com/calamares/teams/20061/sr@latin/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: sr@latin\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "" #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "" calamares-3.2.20/src/modules/dummypythonqt/lang/sv/000077500000000000000000000000001362604102500222775ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/sv/LC_MESSAGES/000077500000000000000000000000001362604102500240645ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/sv/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000005741362604102500273710ustar00rootroot00000000000000Þ•$,8B9Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Language-Team: Swedish (https://www.transifex.com/calamares/teams/20061/sv/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: sv Plural-Forms: nplurals=2; plural=(n != 1); calamares-3.2.20/src/modules/dummypythonqt/lang/sv/LC_MESSAGES/dummypythonqt.po000066400000000000000000000021741362604102500273720ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Language-Team: Swedish (https://www.transifex.com/calamares/teams/20061/sv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: sv\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "" #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "" calamares-3.2.20/src/modules/dummypythonqt/lang/th/000077500000000000000000000000001362604102500222625ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/th/LC_MESSAGES/000077500000000000000000000000001362604102500240475ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/th/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000005621362604102500273510ustar00rootroot00000000000000Þ•$,889Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Language-Team: Thai (https://www.transifex.com/calamares/teams/20061/th/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: th Plural-Forms: nplurals=1; plural=0; calamares-3.2.20/src/modules/dummypythonqt/lang/th/LC_MESSAGES/dummypythonqt.po000066400000000000000000000021621362604102500273520ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Language-Team: Thai (https://www.transifex.com/calamares/teams/20061/th/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: th\n" "Plural-Forms: nplurals=1; plural=0;\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "" #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "" calamares-3.2.20/src/modules/dummypythonqt/lang/tr_TR/000077500000000000000000000000001362604102500227015ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/tr_TR/LC_MESSAGES/000077500000000000000000000000001362604102500244665ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/tr_TR/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000016551362604102500277740ustar00rootroot00000000000000Þ•T Œ¸ ¹(Ç ðú6)‹`ì5ý3B^7uA new QLabel.A status message for Dummy PythonQt Job.Click me!Dummy PythonQt ViewStepThe Dummy PythonQt JobThis is the Dummy PythonQt Job. The dummy job says: {}Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Last-Translator: Demiray Muhterem , 2017 Language-Team: Turkish (Turkey) (https://www.transifex.com/calamares/teams/20061/tr_TR/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: tr_TR Plural-Forms: nplurals=2; plural=(n > 1); Yeni bir QLabel.Kukla PythonQt Çalışması için bir durum mesajı.Buraya tıkla!Sahte PythonQt görünümüSahte PythonQt iÅŸleriKukla PythonQt iÅŸleri. Sahte iÅŸleri şöyle diyor: {}calamares-3.2.20/src/modules/dummypythonqt/lang/tr_TR/LC_MESSAGES/dummypythonqt.po000066400000000000000000000027021362604102500277710ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Demiray Muhterem , 2017 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Demiray Muhterem , 2017\n" "Language-Team: Turkish (Turkey) (https://www.transifex.com/calamares/teams/20061/tr_TR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: tr_TR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Buraya tıkla!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Yeni bir QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Sahte PythonQt görünümü" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "Sahte PythonQt iÅŸleri" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Kukla PythonQt iÅŸleri. Sahte iÅŸleri şöyle diyor: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Kukla PythonQt Çalışması için bir durum mesajı." calamares-3.2.20/src/modules/dummypythonqt/lang/uk/000077500000000000000000000000001362604102500222665ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/uk/LC_MESSAGES/000077500000000000000000000000001362604102500240535ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/uk/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000023771362604102500273630ustar00rootroot00000000000000Þ•T Œ¸ ¹(Ç ðú6)[`¼\Í*$C*hk“A new QLabel.A status message for Dummy PythonQt Job.Click me!Dummy PythonQt ViewStepThe Dummy PythonQt JobThis is the Dummy PythonQt Job. The dummy job says: {}Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Last-Translator: Yuri Chornoivan , 2020 Language-Team: Ukrainian (https://www.transifex.com/calamares/teams/20061/uk/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: uk Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3); Ðова QLabel.ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ Ñтану фіктивного Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ PythonQt.ÐатиÑни мене!Фіктивний ViewStep PythonQtФіктивне Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ PythonQtЦе фіктивне Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ PythonQt. Фіктивне Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÑÑ”: {}calamares-3.2.20/src/modules/dummypythonqt/lang/uk/LC_MESSAGES/dummypythonqt.po000066400000000000000000000034221362604102500273560ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Yuri Chornoivan , 2020 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Yuri Chornoivan , 2020\n" "Language-Team: Ukrainian (https://www.transifex.com/calamares/teams/20061/uk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: uk\n" "Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "ÐатиÑни мене!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Ðова QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Фіктивний ViewStep PythonQt" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "Фіктивне Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ PythonQt" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Це фіктивне Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ PythonQt. Фіктивне Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÑÑ”: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ Ñтану фіктивного Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ PythonQt." calamares-3.2.20/src/modules/dummypythonqt/lang/ur/000077500000000000000000000000001362604102500222755ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/ur/LC_MESSAGES/000077500000000000000000000000001362604102500240625ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/ur/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000005711362604102500273640ustar00rootroot00000000000000Þ•$,8?9Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Language-Team: Urdu (https://www.transifex.com/calamares/teams/20061/ur/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: ur Plural-Forms: nplurals=2; plural=(n != 1); calamares-3.2.20/src/modules/dummypythonqt/lang/ur/LC_MESSAGES/dummypythonqt.po000066400000000000000000000021711362604102500273650ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Language-Team: Urdu (https://www.transifex.com/calamares/teams/20061/ur/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ur\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "" #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "" calamares-3.2.20/src/modules/dummypythonqt/lang/uz/000077500000000000000000000000001362604102500223055ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/uz/LC_MESSAGES/000077500000000000000000000000001362604102500240725ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/uz/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000005631362604102500273750ustar00rootroot00000000000000Þ•$,899Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Language-Team: Uzbek (https://www.transifex.com/calamares/teams/20061/uz/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: uz Plural-Forms: nplurals=1; plural=0; calamares-3.2.20/src/modules/dummypythonqt/lang/uz/LC_MESSAGES/dummypythonqt.po000066400000000000000000000021631362604102500273760ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Language-Team: Uzbek (https://www.transifex.com/calamares/teams/20061/uz/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: uz\n" "Plural-Forms: nplurals=1; plural=0;\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "" #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "" calamares-3.2.20/src/modules/dummypythonqt/lang/zh_CN/000077500000000000000000000000001362604102500226505ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/zh_CN/LC_MESSAGES/000077500000000000000000000000001362604102500244355ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/zh_CN/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000016101362604102500277320ustar00rootroot00000000000000Þ•T Œ¸ ¹(Ç ðú6)~`ß(õ.J-ZA new QLabel.A status message for Dummy PythonQt Job.Click me!Dummy PythonQt ViewStepThe Dummy PythonQt JobThis is the Dummy PythonQt Job. The dummy job says: {}Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Last-Translator: soenggam , 2018 Language-Team: Chinese (China) (https://www.transifex.com/calamares/teams/20061/zh_CN/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: zh_CN Plural-Forms: nplurals=1; plural=0; 一个新的QLabel。æ¥è‡ª PythonQt ä»»åŠ¡çš„çŠ¶æ€æ¶ˆæ¯ã€‚按我按我ï¼å å¼æ»´ PythonQt ViewStepPythonQt 任务我是个 PythonQt 任务。任务æç¤ºï¼š{}calamares-3.2.20/src/modules/dummypythonqt/lang/zh_CN/LC_MESSAGES/dummypythonqt.po000066400000000000000000000026771362604102500277530ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # Mingcong Bai , 2017 # soenggam , 2018 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-02-22 07:09-0500\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: soenggam , 2018\n" "Language-Team: Chinese (China) (https://www.transifex.com/calamares/teams/20061/zh_CN/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: zh_CN\n" "Plural-Forms: nplurals=1; plural=0;\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "按我按我ï¼" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "一个新的QLabel。" #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "å å¼æ»´ PythonQt ViewStep" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "PythonQt 任务" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "我是个 PythonQt 任务。任务æç¤ºï¼š{}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "æ¥è‡ª PythonQt ä»»åŠ¡çš„çŠ¶æ€æ¶ˆæ¯ã€‚" calamares-3.2.20/src/modules/dummypythonqt/lang/zh_TW/000077500000000000000000000000001362604102500227025ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/zh_TW/LC_MESSAGES/000077500000000000000000000000001362604102500244675ustar00rootroot00000000000000calamares-3.2.20/src/modules/dummypythonqt/lang/zh_TW/LC_MESSAGES/dummypythonqt.mo000066400000000000000000000016341362604102500277720ustar00rootroot00000000000000Þ•T Œ¸ ¹(Ç ðú6)€`á(ø !.K9bA new QLabel.A status message for Dummy PythonQt Job.Click me!Dummy PythonQt ViewStepThe Dummy PythonQt JobThis is the Dummy PythonQt Job. The dummy job says: {}Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2016-12-16 12:18+0000 Last-Translator: 黃æŸè«º , 2017 Language-Team: Chinese (Taiwan) (https://www.transifex.com/calamares/teams/20061/zh_TW/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: zh_TW Plural-Forms: nplurals=1; plural=0; 一個新的 QLabel。å‡çš„ PythonQt 工作的狀態訊æ¯ã€‚點擊我ï¼å‡çš„ PythonQt 檢視步驟å‡çš„ PythonQt 工作這是一個å‡çš„ PythonQt 工作。å‡å·¥ä½œè¡¨ç¤ºï¼š{}calamares-3.2.20/src/modules/dummypythonqt/lang/zh_TW/LC_MESSAGES/dummypythonqt.po000066400000000000000000000026541362604102500300000ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # # Translators: # 黃æŸè«º , 2017 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-07-06 01:16+0200\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: 黃æŸè«º , 2017\n" "Language-Team: Chinese (Taiwan) (https://www.transifex.com/calamares/teams/20061/zh_TW/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: zh_TW\n" "Plural-Forms: nplurals=1; plural=0;\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "點擊我ï¼" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "一個新的 QLabel。" #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "å‡çš„ PythonQt 檢視步驟" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "å‡çš„ PythonQt 工作" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "這是一個å‡çš„ PythonQt 工作。å‡å·¥ä½œè¡¨ç¤ºï¼š{}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "å‡çš„ PythonQt 工作的狀態訊æ¯ã€‚" calamares-3.2.20/src/modules/dummypythonqt/main.py000066400000000000000000000210651362604102500222300ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # === This file is part of Calamares - === # # Copyright 2016-2017, Teo Mrnjavac # Copyright 2017, Alf Gaida # # Calamares 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. # # Calamares 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 Calamares. If not, see . import platform from PythonQt.QtGui import * import PythonQt.calamares as calamares # WARNING: the Calamares PythonQt API is considered EXPERIMENTAL as of # Calamares 2.5. It comes with no promise or commitment to API stability. # Set up translations. # You may skip this if your Calamares module has no user visible strings. # DO NOT install _ into the builtin namespace because each module loads # its own catalog. # DO use the gettext class-based API and manually alias _ as described in: # https://docs.python.org/3.5/library/gettext.html#localizing-your-module import gettext import inspect import os _filename = inspect.getframeinfo(inspect.currentframe()).filename _path = os.path.dirname(os.path.abspath(_filename)) _ = gettext.gettext # Example Python ViewModule. # A Python ViewModule is a Python program which defines a ViewStep class. # One UI module ==> one ViewStep. # This class must be marked with the @calamares_module decorator. A # ViewModule may define other classes, but only one may be decorated with # @calamares_module. Such a class must conform to the Calamares ViewStep # interface and functions as the entry point of the module. # A ViewStep manages one or more "wizard pages" through methods like # back/next, and reports its status through isNextEnabled/isBackEnabled/ # isAtBeginning/isAtEnd. The whole UI, including all the pages, must be # exposed as a single QWidget, returned by the widget function. # # For convenience, both C++ and PythonQt ViewSteps are considered to be # implementations of ViewStep.h. Additionally, the Calamares PythonQt API # allows Python developers to keep their identifiers more Pythonic on the # Python side. Thus, all of the following are considered valid method # identifiers in a ViewStep implementation: isNextEnabled, isnextenabled, # is_next_enabled. @calamares_module class DummyPythonQtViewStep: def __init__(self): # Importing PythonQt.QtGui provides access to most Qt widget classes. self.main_widget = QFrame() self.main_widget.setLayout(QVBoxLayout()) label = QLabel() self.main_widget.layout().addWidget(label) accumulator = "\nCalamares+PythonQt running embedded Python " +\ platform.python_version() label.text = accumulator btn = QPushButton() # Python strings can be used wherever a method wants a QString. Python # gettext translations can be used seamlessly as well. btn.setText(_("Click me!")) self.main_widget.layout().addWidget(btn) # The syntax for signal-slot connections is very simple, though # slightly different from the C++ equivalent. There are no SIGNAL and # SLOT macros, and a signal can be connected to any Python method # (without a special "slot" designation). btn.connect("clicked(bool)", self.on_btn_clicked) def on_btn_clicked(self): self.main_widget.layout().addWidget(QLabel(_("A new QLabel."))) def prettyName(self): return _("Dummy PythonQt ViewStep") def isNextEnabled(self): return True # The "Next" button should be clickable def isBackEnabled(self): return True # The "Back" button should be clickable def isAtBeginning(self): # True means the currently shown UI page is the first page of this # module, thus a "Back" button click will not be handled by this # module and will cause a skip to the previous ViewStep instead # (if any). False means that the present ViewStep provides other UI # pages placed logically "before" the current one, thus a "Back" button # click will be handled by this module instead of skipping to another # ViewStep. A module (ViewStep) with only one page will always return # True here. return True def isAtEnd(self): # True means the currently shown UI page is the last page of this # module, thus a "Next" button click will not be handled by this # module and will cause a skip to the next ViewStep instead (if any). # False means that the present ViewStep provides other UI pages placed # logically "after" the current one, thus a "Next" button click will # be handled by this module instead of skipping to another ViewStep. # A module (ViewStep) with only one page will always return True here. return True def jobs(self): # Returns a list of objects that implement Calamares::Job. return [DummyPQJob("Dummy PythonQt job reporting for duty")] def widget(self): # Returns the base QWidget of this module's UI. return self.main_widget def retranslate(self, locale_name): # This is where it gets slightly weird. In most desktop applications we # shouldn't need this kind of mechanism, because we could assume that # the operating environment is configured to use a certain language. # Usually the user would change the system-wide language in a settings # UI, restart the application, done. # Alas, Calamares runs on an unconfigured live system, and one of the # core features of Calamares is to allow the user to pick a language. # Unfortunately, strings in the UI do not automatically react to a # runtime language change. To get UI strings in a new language, all # user-visible strings must be retranslated (by calling tr() in C++ or # _() in Python) and reapplied on the relevant widgets. # When the user picks a new UI translation language, Qt raises a QEvent # of type LanguageChange, which propagates through the QObject # hierarchy. By catching and reacting to this event, we can show # user-visible strings in the new language at the right time. # The C++ side of the Calamares PythonQt API catches the LanguageChange # event and calls the present method. It is then up to the module # developer to add here all the needed code to load the module's # translation catalog for the new language (which is separate from the # main Calamares strings catalog) and reapply any user-visible strings. calamares.utils.debug("PythonQt retranslation event " "for locale name: {}".format(locale_name)) # First we load the catalog file for the new language... try: global _ _t = gettext.translation('dummypythonqt', localedir=os.path.join(_path, 'lang'), languages=[locale_name]) _ = _t.gettext except OSError as e: calamares.utils.debug(e) pass # ... and then we can call setText(_("foo")) and similar methods on # the relevant widgets here to reapply the strings. # An example Job class. Implements Calamares::Job. For method identifiers, the # same rules apply as for ViewStep. No decorators are necessary here, because # only the ViewStep implementation is the unique entry point, and a module can # have any number of jobs. class DummyPQJob: def __init__(self, my_msg): self.my_msg = my_msg def pretty_name(self): return _("The Dummy PythonQt Job") def pretty_description(self): return _("This is the Dummy PythonQt Job. " "The dummy job says: {}").format(self.my_msg) def pretty_status_message(self): return _("A status message for Dummy PythonQt Job.") def exec(self): # As an example, we touch a file in the target root filesystem. rmp = calamares.global_storage['rootMountPoint'] os.system("touch {}/calamares_dpqt_was_here".format(rmp)) calamares.utils.debug("the dummy job says {}".format(self.my_msg)) return {'ok': True} calamares-3.2.20/src/modules/dummypythonqt/module.desc000066400000000000000000000003261362604102500230540ustar00rootroot00000000000000# Module metadata file for dummy pythonqt jobmodule # Syntax is YAML 1.2 --- type: "view" name: "dummypythonqt" interface: "pythonqt" script: "main.py" #assumed relative to the current directory calamares-3.2.20/src/modules/finished/000077500000000000000000000000001362604102500175555ustar00rootroot00000000000000calamares-3.2.20/src/modules/finished/CMakeLists.txt000066400000000000000000000006141362604102500223160ustar00rootroot00000000000000find_package( Qt5 ${QT_VERSION} CONFIG REQUIRED DBus Network ) include_directories( ${PROJECT_BINARY_DIR}/src/libcalamaresui ) calamares_add_plugin( finished TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES FinishedViewStep.cpp FinishedPage.cpp UI FinishedPage.ui LINK_PRIVATE_LIBRARIES calamaresui Qt5::DBus SHARED_LIB ) calamares-3.2.20/src/modules/finished/FinishedPage.cpp000066400000000000000000000127061362604102500226150ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2017-2018, Adriaan de Groot * Copyright 2019, Collabora Ltd * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "FinishedPage.h" #include "ui_FinishedPage.h" #include "CalamaresVersion.h" #include "utils/Logger.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Retranslator.h" #include "ViewManager.h" #include #include #include #include #include #include "Branding.h" #include "Settings.h" FinishedPage::FinishedPage( QWidget* parent ) : QWidget( parent ) , ui( new Ui::FinishedPage ) , m_mode( FinishedViewStep::RestartMode::UserUnchecked ) { ui->setupUi( this ); ui->mainText->setAlignment( Qt::AlignCenter ); ui->mainText->setWordWrap( true ); ui->mainText->setOpenExternalLinks( true ); CALAMARES_RETRANSLATE( ui->retranslateUi( this ); if ( Calamares::Settings::instance()->isSetupMode() ) { ui->mainText->setText( tr( "

All done.


" "%1 has been set up on your computer.
" "You may now start using your new system." ) .arg( *Calamares::Branding::VersionedName ) ); ui->restartCheckBox->setToolTip( tr ( "" "

When this box is checked, your system will " "restart immediately when you click on " "Done " "or close the setup program.

" ) ); } else { ui->mainText->setText( tr( "

All done.


" "%1 has been installed on your computer.
" "You may now restart into your new system, or continue " "using the %2 Live environment." ) .arg( *Calamares::Branding::VersionedName, *Calamares::Branding::ProductName ) ); ui->restartCheckBox->setToolTip( tr ( "" "

When this box is checked, your system will " "restart immediately when you click on " "Done " "or close the installer.

" ) ); } ) } void FinishedPage::setRestart( FinishedViewStep::RestartMode mode ) { using Mode = FinishedViewStep::RestartMode; m_mode = mode; ui->restartCheckBox->setVisible( mode != Mode::Never ); ui->restartCheckBox->setEnabled( mode != Mode::Always ); ui->restartCheckBox->setChecked( ( mode == Mode::Always ) || ( mode == Mode::UserChecked ) ); } void FinishedPage::setRestartNowCommand( const QString& command ) { m_restartNowCommand = command; } void FinishedPage::setUpRestart() { cDebug() << "FinishedPage::setUpRestart(), Quit button" << "setup=" << FinishedViewStep::modeName( m_mode ) << "command=" << m_restartNowCommand; connect( qApp, &QApplication::aboutToQuit, [this]() { if ( ui->restartCheckBox->isVisible() && ui->restartCheckBox->isChecked() ) { cDebug() << "Running restart command" << m_restartNowCommand; QProcess::execute( "/bin/sh", { "-c", m_restartNowCommand } ); } } ); } void FinishedPage::focusInEvent( QFocusEvent* e ) { e->accept(); } void FinishedPage::onInstallationFailed( const QString& message, const QString& details ) { Q_UNUSED( details ) if ( Calamares::Settings::instance()->isSetupMode() ) ui->mainText->setText( tr( "

Setup Failed


" "%1 has not been set up on your computer.
" "The error message was: %2." ) .arg( *Calamares::Branding::VersionedName ) .arg( message ) ); else ui->mainText->setText( tr( "

Installation Failed


" "%1 has not been installed on your computer.
" "The error message was: %2." ) .arg( *Calamares::Branding::VersionedName ) .arg( message ) ); setRestart( FinishedViewStep::RestartMode::Never ); } calamares-3.2.20/src/modules/finished/FinishedPage.h000066400000000000000000000030501362604102500222520ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2017, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef FINISHEDPAGE_H #define FINISHEDPAGE_H #include #include "FinishedViewStep.h" namespace Ui { class FinishedPage; } class FinishedPage : public QWidget { Q_OBJECT public: explicit FinishedPage( QWidget* parent = nullptr ); void setRestart( FinishedViewStep::RestartMode mode ); void setRestartNowCommand( const QString& command ); void setUpRestart(); public slots: void onInstallationFailed( const QString& message, const QString& details ); protected: void focusInEvent( QFocusEvent* e ) override; //choose the child widget to focus private: Ui::FinishedPage* ui; FinishedViewStep::RestartMode m_mode; QString m_restartNowCommand; }; #endif // FINISHEDPAGE_H calamares-3.2.20/src/modules/finished/FinishedPage.ui000066400000000000000000000070011362604102500224400ustar00rootroot00000000000000 FinishedPage 0 0 593 400 Form Qt::Vertical QSizePolicy::Fixed 20 20 Qt::Vertical 20 50 3 0 <Calamares finished text> Qt::Vertical QSizePolicy::Fixed 20 49 Qt::Horizontal 40 20 <Restart checkbox tooltip> &Restart now false Qt::Horizontal 40 20 Qt::Vertical QSizePolicy::Expanding 20 20 calamares-3.2.20/src/modules/finished/FinishedViewStep.cpp000066400000000000000000000146761362604102500235170ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2017, 2019, Adriaan de Groot * Copyright 2019, Collabora Ltd * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "FinishedViewStep.h" #include "FinishedPage.h" #include "Branding.h" #include "JobQueue.h" #include "Settings.h" #include "utils/Logger.h" #include "utils/NamedEnum.h" #include "utils/Variant.h" #include #include #include #include static const NamedEnumTable< FinishedViewStep::RestartMode >& modeNames() { using Mode = FinishedViewStep::RestartMode; static const NamedEnumTable< Mode > names{ { QStringLiteral( "never" ), Mode::Never }, { QStringLiteral( "user-unchecked" ), Mode::UserUnchecked }, { QStringLiteral( "user-checked" ), Mode::UserChecked }, { QStringLiteral( "always" ), Mode::Always } } ; return names; } FinishedViewStep::FinishedViewStep( QObject* parent ) : Calamares::ViewStep( parent ) , m_widget( new FinishedPage() ) , installFailed( false ) , m_notifyOnFinished( false ) { auto jq = Calamares::JobQueue::instance(); connect( jq, &Calamares::JobQueue::failed, m_widget, &FinishedPage::onInstallationFailed ); connect( jq, &Calamares::JobQueue::failed, this, &FinishedViewStep::onInstallationFailed ); emit nextStatusChanged( true ); } FinishedViewStep::~FinishedViewStep() { if ( m_widget && m_widget->parent() == nullptr ) m_widget->deleteLater(); } QString FinishedViewStep::prettyName() const { return tr( "Finish" ); } QWidget* FinishedViewStep::widget() { return m_widget; } bool FinishedViewStep::isNextEnabled() const { return false; } bool FinishedViewStep::isBackEnabled() const { return false; } bool FinishedViewStep::isAtBeginning() const { return true; } bool FinishedViewStep::isAtEnd() const { return true; } void FinishedViewStep::sendNotification() { // If the installation failed, don't send notification popup; // there's a (modal) dialog popped up with the failure notice. if ( installFailed ) return; QDBusInterface notify( "org.freedesktop.Notifications", "/org/freedesktop/Notifications", "org.freedesktop.Notifications" ); if ( notify.isValid() ) { QDBusReply r = notify.call( "Notify", QString( "Calamares" ), QVariant( 0U ), QString( "calamares" ), Calamares::Settings::instance()->isSetupMode() ? tr( "Setup Complete" ) : tr( "Installation Complete" ), Calamares::Settings::instance()->isSetupMode() ? tr( "The setup of %1 is complete." ).arg( *Calamares::Branding::VersionedName ) : tr( "The installation of %1 is complete." ).arg( *Calamares::Branding::VersionedName ), QStringList(), QVariantMap(), QVariant( 0 ) ); if ( !r.isValid() ) cWarning() << "Could not call org.freedesktop.Notifications.Notify at end of installation." << r.error(); } else cWarning() << "Could not get dbus interface for notifications at end of installation." << notify.lastError(); } void FinishedViewStep::onActivate() { m_widget->setUpRestart(); if ( m_notifyOnFinished ) sendNotification(); } Calamares::JobList FinishedViewStep::jobs() const { return Calamares::JobList(); } void FinishedViewStep::onInstallationFailed( const QString& message, const QString& details ) { Q_UNUSED( message ) Q_UNUSED( details ) installFailed = true; } void FinishedViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { RestartMode mode = RestartMode::Never; QString restartMode = CalamaresUtils::getString( configurationMap, "restartNowMode" ); if ( restartMode.isEmpty() ) { if ( configurationMap.contains( "restartNowEnabled" ) ) cWarning() << "Configuring the finished module with deprecated restartNowEnabled settings"; bool restartNowEnabled = CalamaresUtils::getBool( configurationMap, "restartNowEnabled", false ); bool restartNowChecked = CalamaresUtils::getBool( configurationMap, "restartNowChecked", false ); if ( !restartNowEnabled ) mode = RestartMode::Never; else mode = restartNowChecked ? RestartMode::UserChecked : RestartMode::UserUnchecked; } else { bool ok = false; mode = modeNames().find( restartMode, ok ); if ( !ok ) cWarning() << "Configuring the finished module with bad restartNowMode" << restartMode; } m_widget->setRestart( mode ); if ( mode != RestartMode::Never ) { QString restartNowCommand = CalamaresUtils::getString( configurationMap, "restartNowCommand" ); if ( restartNowCommand.isEmpty() ) restartNowCommand = QStringLiteral( "shutdown -r now" ); m_widget->setRestartNowCommand( restartNowCommand ); } m_notifyOnFinished = CalamaresUtils::getBool( configurationMap, "notifyOnFinished", false ); } QString FinishedViewStep::modeName(FinishedViewStep::RestartMode m) { bool ok = false; return modeNames().find( m, ok ); // May be QString() } CALAMARES_PLUGIN_FACTORY_DEFINITION( FinishedViewStepFactory, registerPlugin(); ) calamares-3.2.20/src/modules/finished/FinishedViewStep.h000066400000000000000000000047111362604102500231510ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef FINISHEDVIEWSTEP_H #define FINISHEDVIEWSTEP_H #include #include "utils/PluginFactory.h" #include "viewpages/ViewStep.h" #include "DllMacro.h" class FinishedPage; class PLUGINDLLEXPORT FinishedViewStep : public Calamares::ViewStep { Q_OBJECT public: enum class RestartMode { Never=0, ///< @brief Don't show button, just exit UserUnchecked, ///< @brief Show button, starts unchecked UserChecked, ///< @brief Show button, starts checked Always ///< @brief Show button, can't change, checked }; /// @brief Returns the config-name of the given restart-mode @p m static QString modeName( RestartMode m ); explicit FinishedViewStep( QObject* parent = nullptr ); virtual ~FinishedViewStep() override; QString prettyName() const override; QWidget* widget() override; bool isNextEnabled() const override; bool isBackEnabled() const override; bool isAtBeginning() const override; bool isAtEnd() const override; void onActivate() override; Calamares::JobList jobs() const override; void setConfigurationMap( const QVariantMap& configurationMap ) override; public slots: void onInstallationFailed( const QString& message, const QString& details ); private: FinishedPage* m_widget; /** * @brief At the end of installation (when this step is activated), * send a desktop notification via DBus that the install is done. */ void sendNotification(); bool installFailed; bool m_notifyOnFinished; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( FinishedViewStepFactory ) #endif calamares-3.2.20/src/modules/finished/finished.conf000066400000000000000000000033271362604102500222220ustar00rootroot00000000000000# Configuration for the "finished" page, which is usually shown only at # the end of the installation (successful or not). --- # DEPRECATED # # The finished page can hold a "restart system now" checkbox. # If this is false, no checkbox is shown and the system is not restarted # when Calamares exits. # restartNowEnabled: true # DEPRECATED # # Initial state of the checkbox "restart now". Only relevant when the # checkbox is shown by restartNowEnabled. # restartNowChecked: false # Behavior of the "restart system now" button. # # There are four usable values: # - never # Does not show the button and does not restart. # This matches the old behavior with restartNowEnabled=false. # - user-unchecked # Shows the button, defaults to unchecked, restarts if it is checked. # This matches the old behavior with restartNowEnabled=true and restartNowChecked=false. # - user-checked # Shows the button, defaults to checked, restarts if it is checked. # This matches the old behavior with restartNowEnabled=true and restartNowChecked=true. # - always # Shows the button, checked, but the user cannot change it. # This is new behavior. # # The three combinations of legacy values are still supported. restartNowMode: user-unchecked # If the checkbox is shown, and the checkbox is checked, then when # Calamares exits from the finished-page it will run this command. # If not set, falls back to "shutdown -r now". restartNowCommand: "systemctl -i reboot" # When the last page is (successfully) reached, send a DBus notification # to the desktop that the installation is done. This works only if the # user as whom Calamares is run, can reach the regular desktop session bus. notifyOnFinished: false calamares-3.2.20/src/modules/fsresizer/000077500000000000000000000000001362604102500200005ustar00rootroot00000000000000calamares-3.2.20/src/modules/fsresizer/CMakeLists.txt000066400000000000000000000027411362604102500225440ustar00rootroot00000000000000find_package( KPMcore 3.3 ) find_package( KF5Config CONFIG ) find_package( KF5I18n CONFIG ) find_package( KF5WidgetsAddons CONFIG ) set( _partition_defs "" ) if ( KPMcore_FOUND AND Qt5DBus_FOUND AND KF5CoreAddons_FOUND AND KF5Config_FOUND ) include_directories( ${KPMCORE_INCLUDE_DIR} ${CMAKE_SOURCE_DIR}/src/modules/partition ) if( KPMcore_VERSION VERSION_GREATER_EQUAL "4.0" ) list( APPEND _partition_defs WITH_KPMCORE4API ) # kpmcore 4 with new API elseif( KPMcore_VERSION VERSION_GREATER "3.3.70" ) message( FATAL_ERROR "KPMCore beta versions ${KPMcore_VERSION} are not supported" ) endif() # The PartitionIterator is a small class, and it's easiest -- but also a # gross hack -- to just compile it again from the partition module tree. calamares_add_plugin( fsresizer TYPE job EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES ResizeFSJob.cpp LINK_PRIVATE_LIBRARIES kpmcore calamares COMPILE_DEFINITIONS ${_partition_defs} SHARED_LIB ) calamares_add_test( fsresizertest SOURCES Tests.cpp LIBRARIES calamares_job_fsresizer # From above yamlcpp DEFINITIONS ${_partition_defs} ) else() if ( NOT KPMcore_FOUND ) calamares_skip_module( "fsresizer (missing suitable KPMcore)" ) else() calamares_skip_module( "fsresizer (missing dependencies for KPMcore)" ) endif() endif() calamares-3.2.20/src/modules/fsresizer/ResizeFSJob.cpp000066400000000000000000000226471362604102500226440ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "ResizeFSJob.h" #include "CalamaresVersion.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "partition/PartitionIterator.h" #include "utils/Logger.h" #include "utils/Units.h" #include "utils/Variant.h" #include #include #include #include #include #include #include #include #include using CalamaresUtils::Partition::PartitionIterator; ResizeFSJob::ResizeFSJob( QObject* parent ) : Calamares::CppJob( parent ) , m_required( false ) { } ResizeFSJob::~ResizeFSJob() { } QString ResizeFSJob::prettyName() const { return tr( "Resize Filesystem Job" ); } ResizeFSJob::PartitionMatch ResizeFSJob::findPartition() { using DeviceList = QList< Device* >; #if defined( WITH_KPMCORE4API ) DeviceList devices = m_kpmcore.backend()->scanDevices( /* not includeReadOnly, not includeLoopback */ ScanFlag(0) ); #else DeviceList devices = m_kpmcore.backend()->scanDevices( /* excludeReadOnly */ true ); #endif cDebug() << "ResizeFSJob found" << devices.count() << "devices."; for ( DeviceList::iterator dev_it = devices.begin(); dev_it != devices.end(); ++dev_it ) { if ( ! ( *dev_it ) ) continue; cDebug() << "ResizeFSJob found" << ( *dev_it )->deviceNode(); for ( auto part_it = PartitionIterator::begin( *dev_it ); part_it != PartitionIterator::end( *dev_it ); ++part_it ) { cDebug() << Logger::SubEntry << ( *part_it )->mountPoint() << "on" << ( *part_it )->deviceNode(); if ( ( !m_fsname.isEmpty() && ( *part_it )->mountPoint() == m_fsname ) || ( !m_devicename.isEmpty() && ( *part_it )->deviceNode() == m_devicename ) ) { cDebug() << Logger::SubEntry << "matched configuration dev=" << m_devicename << "fs=" << m_fsname; return PartitionMatch( *dev_it, *part_it ); } } } cDebug() << "No match for configuration dev=" << m_devicename << "fs=" << m_fsname; return PartitionMatch( nullptr, nullptr ); } /** @brief Returns the last sector the matched partition should occupy. * * Returns a sector number. Returns -1 if something is wrong (e.g. * can't resize at all, or missing data). Returns 0 if the resize * won't fit because it doesn't satisfy the settings for atleast * and size (or won't grow at all because the partition is blocked * by occupied space after it). */ qint64 ResizeFSJob::findGrownEnd( ResizeFSJob::PartitionMatch m ) { if ( !m.first || !m.second ) return -1; // Missing device data if ( !ResizeOperation::canGrow( m.second ) ) return -1; // Operation is doomed if ( !m_size.isValid() ) return -1; // Must have a grow-size cDebug() << "Containing device size" << m.first->totalLogical(); qint64 last_available = m.first->totalLogical() - 1; // Numbered from 0 qint64 last_currently = m.second->lastSector(); cDebug() << "Growing partition" << m.second->firstSector() << '-' << last_currently; for ( auto part_it = PartitionIterator::begin( m.first ); part_it != PartitionIterator::end( m.first ); ++part_it ) { qint64 next_start = ( *part_it )->firstSector(); qint64 next_end = ( *part_it )->lastSector(); if ( next_start > next_end ) { cWarning() << "Corrupt partition has end" << next_end << " < start" << next_start; std::swap( next_start, next_end ); } if ( ( *part_it )->roles().has( PartitionRole::Unallocated ) ) { cDebug() << Logger::SubEntry << "ignoring unallocated" << next_start << '-' << next_end; continue; } cDebug() << Logger::SubEntry << "comparing" << next_start << '-' << next_end; if ( ( next_start > last_currently ) && ( next_start < last_available ) ) { cDebug() << Logger::SubEntry << "shrunk last available to" << next_start; last_available = next_start - 1; // Before that one starts } } if ( !( last_available > last_currently ) ) { cDebug() << "Partition cannot grow larger."; return 0; } qint64 expand = last_available - last_currently; // number of sectors if ( m_atleast.isValid() ) { qint64 required = m_atleast.toSectors( m.first->totalLogical(), m.first->logicalSize() ); if ( expand < required ) { cDebug() << Logger::SubEntry << "need to expand by" << required << "but only" << expand << "is available."; return 0; } } qint64 wanted = m_size.toSectors( expand, m.first->logicalSize() ); if ( wanted < expand ) { cDebug() << Logger::SubEntry << "only growing by" << wanted << "instead of full" << expand; last_available -= ( expand - wanted ); } return last_available; } Calamares::JobResult ResizeFSJob::exec() { if ( !isValid() ) return Calamares::JobResult::error( tr( "Invalid configuration" ), tr( "The file-system resize job has an invalid configuration and will not run." ) ); if ( !m_kpmcore) { cWarning() << "Could not load KPMCore backend (2)."; return Calamares::JobResult::error( tr( "KPMCore not Available" ), tr( "Calamares cannot start KPMCore for the file-system resize job." ) ); } m_kpmcore.backend()->initFSSupport(); // Might not be enough, see below // Now get the partition and FS we want to work on PartitionMatch m = findPartition(); if ( !m.first || !m.second ) return Calamares::JobResult::error( tr( "Resize Failed" ), !m_fsname.isEmpty() ? tr( "The filesystem %1 could not be found in this system, and cannot be resized." ).arg( m_fsname ) : tr( "The device %1 could not be found in this system, and cannot be resized." ).arg( m_devicename ) ); m.second->fileSystem().init(); // Initialize support for specific FS if ( !ResizeOperation::canGrow( m.second ) ) { cDebug() << "canGrow() returned false."; return Calamares::JobResult::error( tr( "Resize Failed" ), !m_fsname.isEmpty() ? tr( "The filesystem %1 cannot be resized." ).arg( m_fsname ) : tr( "The device %1 cannot be resized." ).arg( m_devicename ) ); } qint64 new_end = findGrownEnd( m ); cDebug() << "Resize from" << m.second->firstSector() << '-' << m.second->lastSector() << '(' << m.second->length() << ')' << "to -" << new_end; if ( new_end < 0 ) return Calamares::JobResult::error( tr( "Resize Failed" ), !m_fsname.isEmpty() ? tr( "The filesystem %1 cannot be resized." ).arg( m_fsname ) : tr( "The device %1 cannot be resized." ).arg( m_devicename ) ); if ( new_end == 0 ) { cWarning() << "Resize operation on" << m_fsname << m_devicename << "skipped as not-useful."; if ( m_required ) return Calamares::JobResult::error( tr( "Resize Failed" ), !m_fsname.isEmpty() ? tr( "The filesystem %1 must be resized, but cannot." ).arg( m_fsname ) : tr( "The device %1 must be resized, but cannot" ).arg( m_fsname ) ); return Calamares::JobResult::ok(); } if ( ( new_end > 0 ) && ( new_end > m.second->lastSector() ) ) { ResizeOperation op( *m.first, *m.second, m.second->firstSector(), new_end ); Report op_report( nullptr ); if ( op.execute( op_report ) ) cDebug() << "Resize operation OK."; else { cDebug() << "Resize failed." << op_report.output(); return Calamares::JobResult::error( tr( "Resize Failed" ), op_report.toText() ); } } return Calamares::JobResult::ok(); } void ResizeFSJob::setConfigurationMap( const QVariantMap& configurationMap ) { m_fsname = configurationMap["fs"].toString(); m_devicename = configurationMap["dev"].toString(); if ( m_fsname.isEmpty() && m_devicename.isEmpty() ) { cWarning() << "No fs or dev configured for resize."; return; } m_size = PartitionSize( configurationMap["size"].toString() ); m_atleast = PartitionSize( configurationMap["atleast"].toString() ); m_required = CalamaresUtils::getBool( configurationMap, "required", false ); } CALAMARES_PLUGIN_FACTORY_DEFINITION( ResizeFSJobFactory, registerPlugin(); ) calamares-3.2.20/src/modules/fsresizer/ResizeFSJob.h000066400000000000000000000047501362604102500223040ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef RESIZEFSJOB_H #define RESIZEFSJOB_H #include #include #include #include "partition/KPMManager.h" #include "partition/PartitionSize.h" #include "utils/PluginFactory.h" #include class CoreBackend; // From KPMCore class Device; // From KPMCore class Partition; using PartitionSize = CalamaresUtils::Partition::PartitionSize; class PLUGINDLLEXPORT ResizeFSJob : public Calamares::CppJob { Q_OBJECT public: explicit ResizeFSJob( QObject* parent = nullptr ); virtual ~ResizeFSJob() override; QString prettyName() const override; Calamares::JobResult exec() override; void setConfigurationMap( const QVariantMap& configurationMap ) override; /** @brief Is the configuration of this job valid? */ bool isValid() const { return ( !m_fsname.isEmpty() || !m_devicename.isEmpty() ) && m_size.isValid(); } QString name() const { return m_fsname.isEmpty() ? m_devicename : m_fsname; } PartitionSize size() const { return m_size; } PartitionSize minimumSize() const { return m_atleast; } private: CalamaresUtils::Partition::KPMManager m_kpmcore; PartitionSize m_size; PartitionSize m_atleast; QString m_fsname; // Either this, or devicename, is set, not both QString m_devicename; bool m_required; using PartitionMatch = QPair; /** @brief Find the configured FS */ PartitionMatch findPartition(); /** @brief Return a new end-sector for the given dev-part pair. */ qint64 findGrownEnd( PartitionMatch ); }; CALAMARES_PLUGIN_FACTORY_DECLARATION( ResizeFSJobFactory ) #endif // RESIZEFSJOB_H calamares-3.2.20/src/modules/fsresizer/Tests.cpp000066400000000000000000000074251362604102500216160ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2017-2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "Tests.h" #include "ResizeFSJob.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "Settings.h" #include "utils/Logger.h" #include "utils/Yaml.h" #include #include #include using SizeUnit = CalamaresUtils::Partition::SizeUnit; QTEST_GUILESS_MAIN( FSResizerTests ) FSResizerTests::FSResizerTests() { } FSResizerTests::~FSResizerTests() { } void FSResizerTests::initTestCase() { } void FSResizerTests::testConfigurationRobust() { ResizeFSJob j; // Empty config j.setConfigurationMap( QVariantMap() ); QVERIFY( j.name().isEmpty() ); QCOMPARE( j.size().unit(), SizeUnit::None ); QCOMPARE( j.minimumSize().unit(), SizeUnit::None ); // Config is missing fs and dev, so it isn't valid YAML::Node doc0 = YAML::Load( R"(--- size: 100% atleast: 600MiB )" ); j.setConfigurationMap( CalamaresUtils::yamlMapToVariant( doc0 ).toMap() ); QVERIFY( j.name().isEmpty() ); QCOMPARE( j.size().unit(), SizeUnit::None ); QCOMPARE( j.minimumSize().unit(), SizeUnit::None ); QCOMPARE( j.size().value(), 0 ); QCOMPARE( j.minimumSize().value(), 0 ); } void FSResizerTests::testConfigurationValues() { ResizeFSJob j; // Check both YAML::Node doc0 = YAML::Load( R"(--- fs: / size: 100% atleast: 600MiB )" ); j.setConfigurationMap( CalamaresUtils::yamlMapToVariant( doc0 ).toMap() ); QVERIFY( !j.name().isEmpty() ); QCOMPARE( j.name(), QString("/") ); QCOMPARE( j.size().unit(), SizeUnit::Percent ); QCOMPARE( j.minimumSize().unit(), SizeUnit::MiB ); QCOMPARE( j.size().value(), 100 ); QCOMPARE( j.minimumSize().value(), 600 ); // Silly config has bad atleast value doc0 = YAML::Load( R"(--- fs: / dev: /dev/m00 size: 72 MiB atleast: 127 % )" ); j.setConfigurationMap( CalamaresUtils::yamlMapToVariant( doc0 ).toMap() ); QVERIFY( !j.name().isEmpty() ); QCOMPARE( j.name(), QString("/") ); QCOMPARE( j.size().unit(), SizeUnit::MiB ); QCOMPARE( j.minimumSize().unit(), SizeUnit::None ); QCOMPARE( j.size().value(), 72 ); QCOMPARE( j.minimumSize().value(), 0 ); // Silly config has bad atleast value doc0 = YAML::Load( R"(--- dev: /dev/m00 size: 72 MiB atleast: 127 % )" ); j.setConfigurationMap( CalamaresUtils::yamlMapToVariant( doc0 ).toMap() ); QVERIFY( !j.name().isEmpty() ); QCOMPARE( j.name(), QString("/dev/m00") ); QCOMPARE( j.size().unit(), SizeUnit::MiB ); QCOMPARE( j.minimumSize().unit(), SizeUnit::None ); QCOMPARE( j.size().value(), 72 ); QCOMPARE( j.minimumSize().value(), 0 ); // Normal config doc0 = YAML::Load( R"(--- fs: / # dev: /dev/m00 size: 71MiB # atleast: 127% )" ); j.setConfigurationMap( CalamaresUtils::yamlMapToVariant( doc0 ).toMap() ); QVERIFY( !j.name().isEmpty() ); QCOMPARE( j.name(), QString("/") ); QCOMPARE( j.size().unit(), SizeUnit::MiB ); QCOMPARE( j.minimumSize().unit(), SizeUnit::None ); QCOMPARE( j.size().value(), 71 ); QCOMPARE( j.minimumSize().value(), 0 ); } calamares-3.2.20/src/modules/fsresizer/Tests.h000066400000000000000000000022041362604102500212510ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef TESTS_H #define TESTS_H #include class FSResizerTests : public QObject { Q_OBJECT public: FSResizerTests(); ~FSResizerTests() override; private Q_SLOTS: void initTestCase(); // Can handle missing values void testConfigurationRobust(); // Can parse % and MiB values void testConfigurationValues(); }; #endif calamares-3.2.20/src/modules/fsresizer/fsresizer.conf000066400000000000000000000035151362604102500226670ustar00rootroot00000000000000# Module that resizes a single FS to fill the entire (rest) of # a device. This is used in OEM situations where an image is # flashed onto an SD card (or similar) and used to boot a device, # after which the FS should expand to fill the SD card. # # Example: a distro produces a 6GiB large image that is # written to an 8GiB SD card; the FS should expand to take # advantage of the unused 2GiB. The FS should expand much # more if the same image is written to a 16GiB card. --- # Which FS needs to be grown? Choose one way to identify it: # - *fs* names a mount point which should already be mounted # in the system. # - *dev* names a device fs: / # dev: /dev/mmcblk0p1 # How much of the total remaining space should the FS use? # The only sensible amount is "all of it". The value is # in percent, so set it to 100. Perhaps a fixed size is # needed (that would be weird though, since you don't know # how big the card is), use MiB as suffix in that case. # If missing, then it's assumed to be 0, and no resizing # will happen. # # Percentages apply to **available space**. size: 100% # Resizing might not be worth it, though. Set the minimum # that it must grow; if it cannot grow that much, the # resizing is skipped. Can be in percentage or absolute # size, as above. If missing, then it's assumed to be 0, # which means resizing is always worthwhile. # # If *atleast* is not zero, then the setting *required*, # below, becomes relevant. # # Percentages apply to **total device size**. #atleast: 1000MiB # When *atleast* is not zero, then the resize may be # recommended (the default) or **required**. If the # resize is required and cannot be carried out (because # there's not enough space), then that is a fatal # error for the installer. By default, resize is only # recommended and it is not an error for no resize to be # carried out. required: false calamares-3.2.20/src/modules/fstab/000077500000000000000000000000001362604102500170635ustar00rootroot00000000000000calamares-3.2.20/src/modules/fstab/fstab.conf000066400000000000000000000023601362604102500210320ustar00rootroot00000000000000# Creates /etc/fstab and /etc/crypttab in the target system. # Also creates mount points for all the filesystems. # # When creating fstab entries for a filesystem, this module # uses the options for the filesystem type to write to the # options field of the file. --- # Mount options to use for all filesystems. If a specific filesystem # is listed here, use those options, otherwise use the *default* # options from this mapping. mountOptions: default: defaults,noatime btrfs: defaults,noatime,space_cache,autodefrag # Mount options to use for the EFI System Partition. If not defined, the # *mountOptions* for *vfat* are used, or if that is not set either, # *default* from *mountOptions*. efiMountOptions: umask=0077 # If a filesystem is on an SSD, add the following options. If a specific # filesystem is listed here, use those options, otherwise no additional # options are set (i.e. there is no *default* like in *mountOptions*). ssdExtraMountOptions: ext4: discard jfs: discard xfs: discard swap: discard btrfs: discard,compress=lzo # Additional options added to each line in /etc/crypttab crypttabOptions: luks # For Debian and Debian-based distributions, change the above line to: # crypttabOptions: luks,keyscript=/bin/cat calamares-3.2.20/src/modules/fstab/main.py000066400000000000000000000305531362604102500203670ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # === This file is part of Calamares - === # # Copyright 2014, Aurélien Gâteau # Copyright 2016, Teo Mrnjavac # Copyright 2017, Alf Gaida # Copyright 2019, Adriaan de Groot # # Calamares 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. # # Calamares 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 Calamares. If not, see . import os import re import subprocess import libcalamares import gettext _ = gettext.translation("calamares-python", localedir=libcalamares.utils.gettext_path(), languages=libcalamares.utils.gettext_languages(), fallback=True).gettext def pretty_name(): return _("Writing fstab.") FSTAB_HEADER = """# /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier for a device; this may # be used with UUID= as a more robust way to name devices that works even if # disks are added and removed. See fstab(5). # # """ CRYPTTAB_HEADER = """# /etc/crypttab: mappings for encrypted partitions. # # Each mapped device will be created in /dev/mapper, so your /etc/fstab # should use the /dev/mapper/ paths for encrypted devices. # # See crypttab(5) for the supported syntax. # # NOTE: Do not list your root (/) partition here, it must be set up # beforehand by the initramfs (/etc/mkinitcpio.conf). The same applies # to encrypted swap, which should be set up with mkinitcpio-openswap # for resume support. # # """ # Turn Parted filesystem names into fstab names FS_MAP = { "fat16": "vfat", "fat32": "vfat", "linuxswap": "swap", } def mkdir_p(path): """ Create directory. :param path: """ if not os.path.exists(path): os.makedirs(path) def is_ssd_disk(disk_name): """ Checks if given disk is actually a ssd disk. :param disk_name: :return: """ filename = os.path.join("/sys/block", disk_name, "queue/rotational") if not os.path.exists(filename): # Should not happen unless sysfs changes, but better safe than sorry return False with open(filename) as sysfile: return sysfile.read() == "0\n" def disk_name_for_partition(partition): """ Returns disk name for each found partition. :param partition: :return: """ name = os.path.basename(partition["device"]) if name.startswith("/dev/mmcblk") or name.startswith("/dev/nvme"): return re.sub("p[0-9]+$", "", name) return re.sub("[0-9]+$", "", name) class FstabGenerator(object): """ Class header :param partitions: :param root_mount_point: :param mount_options: :param ssd_extra_mount_options: """ def __init__(self, partitions, root_mount_point, mount_options, ssd_extra_mount_options, crypttab_options): self.partitions = partitions self.root_mount_point = root_mount_point self.mount_options = mount_options self.ssd_extra_mount_options = ssd_extra_mount_options self.crypttab_options = crypttab_options self.ssd_disks = set() self.root_is_ssd = False def run(self): """ Calls needed sub routines. :return: """ self.find_ssd_disks() self.generate_fstab() self.generate_crypttab() self.create_mount_points() return None def find_ssd_disks(self): """ Checks for ssd disks """ disks = {disk_name_for_partition(x) for x in self.partitions} self.ssd_disks = {x for x in disks if is_ssd_disk(x)} def generate_crypttab(self): """ Create crypttab. """ mkdir_p(os.path.join(self.root_mount_point, "etc")) crypttab_path = os.path.join(self.root_mount_point, "etc", "crypttab") with open(crypttab_path, "w") as crypttab_file: print(CRYPTTAB_HEADER, file=crypttab_file) for partition in self.partitions: dct = self.generate_crypttab_line_info(partition) if dct: self.print_crypttab_line(dct, file=crypttab_file) def generate_crypttab_line_info(self, partition): """ Generates information for each crypttab entry. """ if "luksMapperName" not in partition or "luksUuid" not in partition: return None mapper_name = partition["luksMapperName"] luks_uuid = partition["luksUuid"] if not mapper_name or not luks_uuid: return None return dict( name=mapper_name, device="UUID=" + luks_uuid, password="/crypto_keyfile.bin", options=self.crypttab_options, ) def print_crypttab_line(self, dct, file=None): """ Prints line to '/etc/crypttab' file. """ line = "{:21} {:<45} {} {}".format(dct["name"], dct["device"], dct["password"], dct["options"], ) print(line, file=file) def generate_fstab(self): """ Create fstab. """ mkdir_p(os.path.join(self.root_mount_point, "etc")) fstab_path = os.path.join(self.root_mount_point, "etc", "fstab") with open(fstab_path, "w") as fstab_file: print(FSTAB_HEADER, file=fstab_file) for partition in self.partitions: # Special treatment for a btrfs root with @ and @home # subvolumes if (partition["fs"] == "btrfs" and partition["mountPoint"] == "/"): output = subprocess.check_output(['btrfs', 'subvolume', 'list', self.root_mount_point]) output_lines = output.splitlines() for line in output_lines: if line.endswith(b'path @'): root_entry = partition root_entry["subvol"] = "@" dct = self.generate_fstab_line_info(root_entry) if dct: self.print_fstab_line(dct, file=fstab_file) elif line.endswith(b'path @home'): home_entry = partition home_entry["mountPoint"] = "/home" home_entry["subvol"] = "@home" dct = self.generate_fstab_line_info(home_entry) if dct: self.print_fstab_line(dct, file=fstab_file) else: dct = self.generate_fstab_line_info(partition) if dct: self.print_fstab_line(dct, file=fstab_file) if self.root_is_ssd: # Mount /tmp on a tmpfs dct = dict(device="tmpfs", mount_point="/tmp", fs="tmpfs", options="defaults,noatime,mode=1777", check=0, ) self.print_fstab_line(dct, file=fstab_file) def generate_fstab_line_info(self, partition): """ Generates information (a dictionary of fstab-fields) for the given @p partition. """ # Some "fs" names need special handling in /etc/fstab, so remap them. filesystem = partition["fs"].lower() filesystem = FS_MAP.get(filesystem, filesystem) has_luks = "luksMapperName" in partition mount_point = partition["mountPoint"] disk_name = disk_name_for_partition(partition) is_ssd = disk_name in self.ssd_disks # Swap partitions are called "linuxswap" by parted. # That "fs" is visible in GS, but that gets mapped # to "swap", above, because that's the spelling needed in /etc/fstab if not mount_point and not filesystem == "swap": return None if not mount_point: mount_point = "swap" if filesystem == "swap" and not partition.get("claimed", None): libcalamares.utils.debug("Ignoring foreign swap {!s} {!s}".format(disk_name, partition.get("uuid", None))) return None options = self.get_mount_options(filesystem, mount_point) if is_ssd: extra = self.ssd_extra_mount_options.get(filesystem) if extra: options += "," + extra if mount_point == "/": check = 1 elif mount_point: check = 2 else: check = 0 if mount_point == "/": self.root_is_ssd = is_ssd if filesystem == "btrfs" and "subvol" in partition: options = "subvol={},".format(partition["subvol"]) + options if has_luks: device = "/dev/mapper/" + partition["luksMapperName"] else: device = "UUID=" + partition["uuid"] return dict(device=device, mount_point=mount_point, fs=filesystem, options=options, check=check, ) def print_fstab_line(self, dct, file=None): """ Prints line to '/etc/fstab' file. """ line = "{:41} {:<14} {:<7} {:<10} 0 {}".format(dct["device"], dct["mount_point"], dct["fs"], dct["options"], dct["check"], ) print(line, file=file) def create_mount_points(self): """ Creates mount points """ for partition in self.partitions: if partition["mountPoint"]: mkdir_p(self.root_mount_point + partition["mountPoint"]) def get_mount_options(self, filesystem, mount_point): efiMountPoint = libcalamares.globalstorage.value("efiSystemPartition") job_config = libcalamares.job.configuration if (mount_point == efiMountPoint and "efiMountOptions" in job_config): return job_config["efiMountOptions"] return self.mount_options.get(filesystem, self.mount_options["default"]) def run(): """ Configures fstab. :return: """ global_storage = libcalamares.globalstorage conf = libcalamares.job.configuration partitions = global_storage.value("partitions") root_mount_point = global_storage.value("rootMountPoint") if not partitions: libcalamares.utils.warning("partitions is empty, {!s}" .format(partitions)) return (_("Configuration Error"), _("No partitions are defined for
{!s}
to use.") .format("fstab")) if not root_mount_point: libcalamares.utils.warning("rootMountPoint is empty, {!s}" .format(root_mount_point)) return (_("Configuration Error"), _("No root mount point is given for
{!s}
to use.") .format("fstab")) mount_options = conf["mountOptions"] ssd_extra_mount_options = conf.get("ssdExtraMountOptions", {}) crypttab_options = conf.get("crypttabOptions", "luks") generator = FstabGenerator(partitions, root_mount_point, mount_options, ssd_extra_mount_options, crypttab_options) return generator.run() calamares-3.2.20/src/modules/fstab/module.desc000066400000000000000000000001251362604102500212060ustar00rootroot00000000000000--- type: "job" name: "fstab" interface: "python" script: "main.py" calamares-3.2.20/src/modules/fstab/test.yaml000066400000000000000000000005561362604102500207340ustar00rootroot00000000000000rootMountPoint: /tmp/mount partitions: - device: /dev/sda1 fs: ext4 mountPoint: / uuid: 2a00f1d5-1217-49a7-bedd-b55c85764732 - device: /dev/sda2 fs: swap uuid: 59406569-446f-4730-a874-9f6b4b44fee3 mountPoint: - device: /dev/sdb1 fs: btrfs mountPoint: /home uuid: 59406569-abcd-1234-a874-9f6b4b44fee3 calamares-3.2.20/src/modules/grubcfg/000077500000000000000000000000001362604102500174035ustar00rootroot00000000000000calamares-3.2.20/src/modules/grubcfg/grubcfg.conf000066400000000000000000000024151362604102500216730ustar00rootroot00000000000000# Create, overwrite or update /etc/default/grub in the target system. # # Write lines to /etc/default/grub (in the target system) based # on calculated values and the values set in the *defaults* key # in this configuration file. # # Calculated values are: # - GRUB_DISTRIBUTOR, branding module, *bootloaderEntryName* (this # string is sanitized, and see also setting *keepDistributor*) # - GRUB_ENABLE_CRYPTODISK, based on the presence of filesystems # that use LUKS # - GRUB_CMDLINE_LINUX_DEFAULT, adding LUKS setup and plymouth # support to the kernel. --- # If set to true, always creates /etc/default/grub from scratch even if the file # already existed. If set to false, edits the existing file instead. overwrite: false # If set to true, an **existing** setting for GRUB_DISTRIBUTOR is # kept, not updated to the *bootloaderEntryName* from the branding file. # Use this if the GRUB_DISTRIBUTOR setting in the file is "smart" in # some way (e.g. uses shell-command substitution). keepDistributor: false # Default entries to write to /etc/default/grub if it does not exist yet or if # we are overwriting it. # defaults: GRUB_TIMEOUT: 5 GRUB_DEFAULT: "saved" GRUB_DISABLE_SUBMENU: true GRUB_TERMINAL_OUTPUT: "console" GRUB_DISABLE_RECOVERY: true calamares-3.2.20/src/modules/grubcfg/main.py000066400000000000000000000230501362604102500207010ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # === This file is part of Calamares - === # # Copyright 2014-2015, Philip Müller # Copyright 2015-2017, Teo Mrnjavac # Copyright 2017, Alf Gaida # Copyright 2017, 2019, Adriaan de Groot # Copyright 2017-2018, Gabriel Craciunescu # # Calamares 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. # # Calamares 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 Calamares. If not, see . import libcalamares import os import re import gettext _ = gettext.translation("calamares-python", localedir=libcalamares.utils.gettext_path(), languages=libcalamares.utils.gettext_languages(), fallback=True).gettext def pretty_name(): return _("Configure GRUB.") def modify_grub_default(partitions, root_mount_point, distributor): """ Configures '/etc/default/grub' for hibernation and plymouth. @see bootloader/main.py, for similar handling of kernel parameters :param partitions: :param root_mount_point: :param distributor: name of the distributor to fill in for GRUB_DISTRIBUTOR. Must be a string. If the job setting *keepDistributor* is set, then this is only used if no GRUB_DISTRIBUTOR is found at all (otherwise, when *keepDistributor* is set, the GRUB_DISTRIBUTOR lines are left unchanged). If *keepDistributor* is unset or false, then GRUB_DISTRIBUTOR is always updated to set this value. :return: """ default_dir = os.path.join(root_mount_point, "etc/default") default_grub = os.path.join(default_dir, "grub") distributor_replace = distributor.replace("'", "'\\''") dracut_bin = libcalamares.utils.target_env_call( ["sh", "-c", "which dracut"] ) plymouth_bin = libcalamares.utils.target_env_call( ["sh", "-c", "which plymouth"] ) # Shell exit value 0 means success have_plymouth = plymouth_bin == 0 have_dracut = dracut_bin == 0 use_splash = "" swap_uuid = "" swap_outer_uuid = "" swap_outer_mappername = None no_save_default = False for partition in partitions: if partition["mountPoint"] in ("/", "/boot") and partition["fs"] in ("btrfs", "f2fs"): no_save_default = True break if have_plymouth: use_splash = "splash" cryptdevice_params = [] if have_dracut: for partition in partitions: if partition["fs"] == "linuxswap" and not partition.get("claimed", None): # Skip foreign swap continue has_luks = "luksMapperName" in partition if partition["fs"] == "linuxswap" and not has_luks: swap_uuid = partition["uuid"] if (partition["fs"] == "linuxswap" and has_luks): swap_outer_uuid = partition["luksUuid"] swap_outer_mappername = partition["luksMapperName"] if (partition["mountPoint"] == "/" and has_luks): cryptdevice_params = [ "rd.luks.uuid={!s}".format(partition["luksUuid"]) ] else: for partition in partitions: if partition["fs"] == "linuxswap" and not partition.get("claimed", None): # Skip foreign swap continue has_luks = "luksMapperName" in partition if partition["fs"] == "linuxswap" and not has_luks: swap_uuid = partition["uuid"] if (partition["mountPoint"] == "/" and has_luks): cryptdevice_params = [ "cryptdevice=UUID={!s}:{!s}".format( partition["luksUuid"], partition["luksMapperName"] ), "root=/dev/mapper/{!s}".format( partition["luksMapperName"] ), "resume=/dev/mapper/{!s}".format( partition["luksMapperName"] ) ] kernel_params = ["quiet"] if cryptdevice_params: kernel_params.extend(cryptdevice_params) if use_splash: kernel_params.append(use_splash) if swap_uuid: kernel_params.append("resume=UUID={!s}".format(swap_uuid)) if have_dracut and swap_outer_uuid: kernel_params.append("rd.luks.uuid={!s}".format(swap_outer_uuid)) if have_dracut and swap_outer_mappername: kernel_params.append("resume=/dev/mapper/{!s}".format( swap_outer_mappername)) distributor_line = "GRUB_DISTRIBUTOR='{!s}'".format(distributor_replace) if not os.path.exists(default_dir): os.mkdir(default_dir) have_kernel_cmd = False have_distributor_line = False if "overwrite" in libcalamares.job.configuration: overwrite = libcalamares.job.configuration["overwrite"] else: overwrite = False if os.path.exists(default_grub) and not overwrite: with open(default_grub, 'r') as grub_file: lines = [x.strip() for x in grub_file.readlines()] for i in range(len(lines)): if lines[i].startswith("#GRUB_CMDLINE_LINUX_DEFAULT"): kernel_cmd = "GRUB_CMDLINE_LINUX_DEFAULT=\"{!s}\"".format( " ".join(kernel_params) ) lines[i] = kernel_cmd have_kernel_cmd = True elif lines[i].startswith("GRUB_CMDLINE_LINUX_DEFAULT"): regex = re.compile(r"^GRUB_CMDLINE_LINUX_DEFAULT\s*=\s*") line = regex.sub("", lines[i]) line = line.lstrip() line = line.lstrip("\"") line = line.lstrip("'") line = line.rstrip() line = line.rstrip("\"") line = line.rstrip("'") existing_params = line.split() for existing_param in existing_params: existing_param_name = existing_param.split("=")[0] # the only ones we ever add if existing_param_name not in [ "quiet", "resume", "splash"]: kernel_params.append(existing_param) kernel_cmd = "GRUB_CMDLINE_LINUX_DEFAULT=\"{!s}\"".format( " ".join(kernel_params) ) lines[i] = kernel_cmd have_kernel_cmd = True elif (lines[i].startswith("#GRUB_DISTRIBUTOR") or lines[i].startswith("GRUB_DISTRIBUTOR")): if libcalamares.job.configuration.get("keepDistributor", False): lines[i] = distributor_line have_distributor_line = True else: # We're not updating because of *keepDistributor*, but if # this was a comment line, then it's still not been set. have_distributor_line = have_distributor_line or not lines[i].startswith("#") # If btrfs or f2fs is used, don't save default if no_save_default and lines[i].startswith("GRUB_SAVEDEFAULT="): lines[i] = "#GRUB_SAVEDEFAULT=\"true\"" else: lines = [] if "defaults" in libcalamares.job.configuration: for key, value in libcalamares.job.configuration[ "defaults"].items(): if value.__class__.__name__ == "bool": if value: escaped_value = "true" else: escaped_value = "false" else: escaped_value = str(value).replace("'", "'\\''") lines.append("{!s}='{!s}'".format(key, escaped_value)) if not have_kernel_cmd: kernel_cmd = "GRUB_CMDLINE_LINUX_DEFAULT=\"{!s}\"".format( " ".join(kernel_params) ) lines.append(kernel_cmd) if not have_distributor_line: lines.append(distributor_line) if cryptdevice_params: lines.append("GRUB_ENABLE_CRYPTODISK=y") with open(default_grub, 'w') as grub_file: grub_file.write("\n".join(lines) + "\n") return None def run(): """ Calls routine with given parameters to modify '/etc/default/grub'. :return: """ fw_type = libcalamares.globalstorage.value("firmwareType") if (libcalamares.globalstorage.value("bootLoader") is None and fw_type != "efi"): return None partitions = libcalamares.globalstorage.value("partitions") if fw_type == "efi": esp_found = False for partition in partitions: if (partition["mountPoint"] == libcalamares.globalstorage.value("efiSystemPartition")): esp_found = True if not esp_found: return None root_mount_point = libcalamares.globalstorage.value("rootMountPoint") branding = libcalamares.globalstorage.value("branding") distributor = branding["bootloaderEntryName"] return modify_grub_default(partitions, root_mount_point, distributor) calamares-3.2.20/src/modules/grubcfg/module.desc000066400000000000000000000001271362604102500215300ustar00rootroot00000000000000--- type: "job" name: "grubcfg" interface: "python" script: "main.py" calamares-3.2.20/src/modules/grubcfg/tests/000077500000000000000000000000001362604102500205455ustar00rootroot00000000000000calamares-3.2.20/src/modules/grubcfg/tests/1.global000066400000000000000000000000201362604102500220570ustar00rootroot00000000000000--- bogus: true calamares-3.2.20/src/modules/grubcfg/tests/2.global000066400000000000000000000002151362604102500220660ustar00rootroot00000000000000--- bogus: true firmwareType: bios bootLoader: grub rootMountPoint: /tmp/calamares branding: bootloaderEntryName: generic partitions: [] calamares-3.2.20/src/modules/grubcfg/tests/2.job000066400000000000000000000003061362604102500214010ustar00rootroot00000000000000--- overwrite: true keepDistributor: false defaults: GRUB_TIMEOUT: 5 GRUB_DEFAULT: "saved" GRUB_DISABLE_SUBMENU: true GRUB_TERMINAL_OUTPUT: "console" GRUB_DISABLE_RECOVERY: true calamares-3.2.20/src/modules/hostinfo/000077500000000000000000000000001362604102500176155ustar00rootroot00000000000000calamares-3.2.20/src/modules/hostinfo/CMakeLists.txt000066400000000000000000000022751362604102500223630ustar00rootroot00000000000000# Configuration for hostinfo # # There isn't anything to configure for the hostinfo module. # # Hostinfo puts information about the host system into Calamares # GlobalStorage. This information is generally unchanging. Put # this module somewhere early in the exec: section to pick up # the variables. Use a contextualprocess module later to # react to the values, if needed. # # GlobalStorage keys: # # - *hostOS* the OS this module was built under; value is "Linux" or # "FreeBSD" or blank. # - *hostOSName* the NAME value from /etc/os-release if it exists, # otherwise the same as *hostOS*. # - *hostCPU* the make (brand) of the CPU, if it can be determined. # Values are "Intel" or "AMD" or blank. calamares_add_plugin( hostinfo TYPE job EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES HostInfoJob.cpp LINK_PRIVATE_LIBRARIES calamares SHARED_LIB NO_CONFIG ) if ( KF5CoreAddons_FOUND AND KF5CoreAddons_VERSION VERSION_GREATER_EQUAL 5.58 ) target_compile_definitions( calamares_job_hostinfo PRIVATE WITH_KOSRelease ) endif() calamares_add_test( hostinfotest SOURCES Tests.cpp HostInfoJob.cpp LIBRARIES yamlcpp ) calamares-3.2.20/src/modules/hostinfo/HostInfoJob.cpp000066400000000000000000000073431362604102500225140ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "HostInfoJob.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include "utils/Units.h" #include #include #ifdef WITH_KOSRelease #include #endif #ifdef Q_OS_FREEBSD #include #include #endif HostInfoJob::HostInfoJob( QObject* parent ) : Calamares::CppJob( parent ) { } HostInfoJob::~HostInfoJob() {} QString HostInfoJob::prettyName() const { return tr( "Collecting information about your machine." ); } QString hostOS() { #if defined( Q_OS_FREEBSD ) return QStringLiteral( "FreeBSD" ); #elif defined( Q_OS_LINUX ) return QStringLiteral( "Linux" ); #else return QStringLiteral( "" ); #endif } QString hostOSName() { #ifdef WITH_KOSRelease KOSRelease r; if ( !r.name().isEmpty() ) { return r.name(); } #endif return hostOS(); } static QString hostCPUmatch( const QString& s ) { const QString line = s.toLower(); if ( line.contains( "intel" ) ) { return QStringLiteral( "Intel" ); } else if ( line.contains( "amd" ) ) { return QStringLiteral( "AMD" ); } return QString(); } #if defined( Q_OS_FREEBSD ) QString hostCPU_FreeBSD() { constexpr const size_t sysctl_buffer_size = 128; char sysctl_buffer[ sysctl_buffer_size ]; size_t s = sysctl_buffer_size; memset( sysctl_buffer, 0, sizeof( sysctl_buffer ) ); int r = sysctlbyname( "hw.model", &sysctl_buffer, &s, NULL, 0 ); if ( r ) { return QString(); } sysctl_buffer[ sysctl_buffer_size - 1 ] = 0; QString model( sysctl_buffer ); return hostCPUmatch( model ); } #endif #if defined( Q_OS_LINUX ) QString hostCPU_Linux() { QFile cpuinfo( "/proc/cpuinfo" ); if ( cpuinfo.open( QIODevice::ReadOnly ) ) { QTextStream in( &cpuinfo ); QString line; while ( in.readLineInto( &line ) ) { if ( line.startsWith( "vendor_id" ) ) { return hostCPUmatch( line ); } } } return QString(); // Not open, or not found } #endif QString hostCPU() { #if defined( Q_OS_FREEBSD ) return hostCPU_FreeBSD(); #elif defined( Q_OS_LINUX ) return hostCPU_Linux(); #else return QString(); #endif } Calamares::JobResult HostInfoJob::exec() { cDebug() << "Collecting host information..."; auto* gs = Calamares::JobQueue::instance()->globalStorage(); gs->insert( "hostOS", hostOS() ); gs->insert( "hostOSName", hostOSName() ); gs->insert( "hostCPU", hostCPU() ); // Memory can't be negative, so it's reported as unsigned long. auto ram = CalamaresUtils::BytesToMiB( qint64( CalamaresUtils::System::instance()->getTotalMemoryB().first ) ); if ( ram ) { gs->insert( "hostRAMMiB", ram ); } return Calamares::JobResult::ok(); } CALAMARES_PLUGIN_FACTORY_DEFINITION( HostInfoJobFactory, registerPlugin< HostInfoJob >(); ) calamares-3.2.20/src/modules/hostinfo/HostInfoJob.h000066400000000000000000000033661362604102500221620ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef HOSTINFOJOB_H #define HOSTINFOJOB_H #include "CppJob.h" #include "DllMacro.h" #include "utils/PluginFactory.h" #include #include /** @brief the compile-time host OS * * Returns "FreeBSD" or "Linux" or empty. */ QString hostOS(); /** @brief the run-time host OS * * Returns os-release NAME information, or if that is blank or not available, * the same as hostOS(). */ QString hostOSName(); /** @brief the run-time CPU architecture * * Returns "Intel" or "AMD" or blank, if Calamares can determine what * CPU is currently in use (based on /proc/cpuinfo or hw.model). */ QString hostCPU(); class PLUGINDLLEXPORT HostInfoJob : public Calamares::CppJob { Q_OBJECT public: explicit HostInfoJob( QObject* parent = nullptr ); virtual ~HostInfoJob() override; QString prettyName() const override; Calamares::JobResult exec() override; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( HostInfoJobFactory ) #endif // HOSTINFOJOB_H calamares-3.2.20/src/modules/hostinfo/Tests.cpp000066400000000000000000000033631362604102500214300ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "HostInfoJob.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "Settings.h" #include "utils/Logger.h" #include "utils/Yaml.h" #include class HostInfoTests : public QObject { Q_OBJECT public: HostInfoTests() {} virtual ~HostInfoTests() {} private Q_SLOTS: void initTestCase(); void testHostOS(); }; void HostInfoTests::initTestCase() { Logger::setupLogLevel( Logger::LOGDEBUG ); cDebug() << "HostInfo test started."; } void HostInfoTests::testHostOS() { #if defined( Q_OS_FREEBSD ) QString expect( "FreeBSD" ); #elif defined( Q_OS_LINUX ) QString expect( "Linux" ); #else QString expect( "Plan8" ); // Expect failure #endif QCOMPARE( expect, hostOS() ); QCOMPARE( expect, hostOSName() ); // Might be the same QCOMPARE( QStringLiteral( "Intel" ), hostCPU() ); // On all my developer machines } QTEST_GUILESS_MAIN( HostInfoTests ) #include "utils/moc-warnings.h" #include "Tests.moc" calamares-3.2.20/src/modules/hwclock/000077500000000000000000000000001362604102500174165ustar00rootroot00000000000000calamares-3.2.20/src/modules/hwclock/main.py000066400000000000000000000046431362604102500207230ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # === This file is part of Calamares - === # # Copyright 2014 - 2015, Philip Müller # Copyright 2014, Teo Mrnjavac # Copyright 2017, Alf Gaida # Copyright 2017-2018, Gabriel Craciunescu # Copyright 2019, Adriaan de Groot # # Calamares 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. # # Calamares 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 Calamares. If not, see . import libcalamares import gettext _ = gettext.translation("calamares-python", localedir=libcalamares.utils.gettext_path(), languages=libcalamares.utils.gettext_languages(), fallback=True).gettext def pretty_name(): return _("Setting hardware clock.") def run(): """ Set hardware clock. """ hwclock_rtc = ["hwclock", "--systohc", "--utc"] hwclock_isa = ["hwclock", "--systohc", "--utc", "--directisa"] is_broken_rtc = False is_broken_isa = False ret = libcalamares.utils.target_env_call(hwclock_rtc) if ret != 0: is_broken_rtc = True libcalamares.utils.debug("Hwclock returned error code {}".format(ret)) libcalamares.utils.debug(" .. RTC method failed, trying ISA bus method.") else: libcalamares.utils.debug("Hwclock set using RTC method.") if is_broken_rtc: ret = libcalamares.utils.target_env_call(hwclock_isa) if ret != 0: is_broken_isa = True libcalamares.utils.debug("Hwclock returned error code {}".format(ret)) libcalamares.utils.debug(" .. ISA bus method failed.") else: libcalamares.utils.debug("Hwclock set using ISA bus method.") if is_broken_rtc and is_broken_isa: libcalamares.utils.debug("BIOS or Kernel BUG: Setting hwclock failed.") return None calamares-3.2.20/src/modules/hwclock/module.desc000066400000000000000000000001671362604102500215470ustar00rootroot00000000000000--- type: "job" name: "hwclock" interface: "python" requires: [] script: "main.py" noconfig: true calamares-3.2.20/src/modules/initcpio/000077500000000000000000000000001362604102500176025ustar00rootroot00000000000000calamares-3.2.20/src/modules/initcpio/CMakeLists.txt000066400000000000000000000005031362604102500223400ustar00rootroot00000000000000calamares_add_plugin( initcpio TYPE job EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES InitcpioJob.cpp LINK_PRIVATE_LIBRARIES calamares SHARED_LIB ) calamares_add_test( initcpiotest SOURCES Tests.cpp LIBRARIES calamares_job_initcpio # From above yamlcpp ) calamares-3.2.20/src/modules/initcpio/InitcpioJob.cpp000066400000000000000000000063331362604102500225240ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "InitcpioJob.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include "utils/UMask.h" #include "utils/Variant.h" #include #include InitcpioJob::InitcpioJob( QObject* parent ) : Calamares::CppJob( parent ) { } InitcpioJob::~InitcpioJob() {} QString InitcpioJob::prettyName() const { return tr( "Creating initramfs with mkinitcpio." ); } void fixPermissions( const QDir& d ) { for ( const auto& fi : d.entryInfoList( { "initramfs*" }, QDir::Files ) ) { QFile f( fi.absoluteFilePath() ); if ( f.exists() ) { cDebug() << "initcpio fixing permissions for" << f.fileName(); f.setPermissions( QFileDevice::ReadOwner | QFileDevice::WriteOwner ); } } } Calamares::JobResult InitcpioJob::exec() { CalamaresUtils::UMask m( CalamaresUtils::UMask::Safe ); if ( m_unsafe ) { cDebug() << "Skipping mitigations for unsafe initramfs permissions."; } else { QDir d( CalamaresUtils::System::instance()->targetPath( "/boot" ) ); if ( d.exists() ) { fixPermissions( d ); } } cDebug() << "Updating initramfs with kernel" << m_kernel; auto r = CalamaresUtils::System::instance()->targetEnvCommand( { "mkinitcpio", "-p", m_kernel }, QString(), QString() /* no timeout , 0 */ ); return r.explainProcess( "mkinitcpio", std::chrono::seconds( 10 ) /* fake timeout */ ); } void InitcpioJob::setConfigurationMap( const QVariantMap& configurationMap ) { m_kernel = CalamaresUtils::getString( configurationMap, "kernel" ); if ( m_kernel.isEmpty() ) { m_kernel = QStringLiteral( "all" ); } else if ( m_kernel == "$uname" ) { auto r = CalamaresUtils::System::runCommand( CalamaresUtils::System::RunLocation::RunInHost, { "/bin/uname", "-r" }, QString(), QString(), std::chrono::seconds( 3 ) ); if ( r.getExitCode() == 0 ) { m_kernel = r.getOutput(); cDebug() << "*initcpio* using running kernel" << m_kernel; } else { cWarning() << "*initcpio* could not determine running kernel, using 'all'." << Logger::Continuation << r.getExitCode() << r.getOutput(); } } m_unsafe = CalamaresUtils::getBool( configurationMap, "be_unsafe", false ); } CALAMARES_PLUGIN_FACTORY_DEFINITION( InitcpioJobFactory, registerPlugin< InitcpioJob >(); ) calamares-3.2.20/src/modules/initcpio/InitcpioJob.h000066400000000000000000000026501362604102500221670ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef INITCPIOJOB_H #define INITCPIOJOB_H #include "CppJob.h" #include "DllMacro.h" #include "utils/PluginFactory.h" #include #include class PLUGINDLLEXPORT InitcpioJob : public Calamares::CppJob { Q_OBJECT public: explicit InitcpioJob( QObject* parent = nullptr ); virtual ~InitcpioJob() override; QString prettyName() const override; Calamares::JobResult exec() override; void setConfigurationMap( const QVariantMap& configurationMap ) override; private: QString m_kernel; bool m_unsafe = false; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( InitcpioJobFactory ) #endif // INITCPIOJOB_H calamares-3.2.20/src/modules/initcpio/Tests.cpp000066400000000000000000000027311362604102500214130ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "Tests.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "Settings.h" #include "utils/Logger.h" #include "utils/Yaml.h" #include #include #include extern void fixPermissions( const QDir& d ); QTEST_GUILESS_MAIN( InitcpioTests ) InitcpioTests::InitcpioTests() { } InitcpioTests::~InitcpioTests() { } void InitcpioTests::initTestCase() { } void InitcpioTests::testFixPermissions() { Logger::setupLogLevel( Logger::LOGDEBUG ); cDebug() << "Fixing up /boot"; fixPermissions( QDir( "/boot" ) ); cDebug() << "Fixing up /nonexistent"; fixPermissions( QDir( "/nonexistent/nonexistent" ) ); QVERIFY( true ); } calamares-3.2.20/src/modules/initcpio/Tests.h000066400000000000000000000020251362604102500210540ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef TESTS_H #define TESTS_H #include class InitcpioTests : public QObject { Q_OBJECT public: InitcpioTests(); ~InitcpioTests() override; private Q_SLOTS: void initTestCase(); void testFixPermissions(); }; #endif calamares-3.2.20/src/modules/initcpio/initcpio.conf000066400000000000000000000015711362604102500222730ustar00rootroot00000000000000# Run mkinitcpio(8) with the given preset value --- # This key defines the kernel to be loaded. # It can have the following values: # - empty or unset, interpreted as "all" # - the literal string "$uname" (without quotes, with dollar), # which will use the output of `uname -r` to determine the # running kernel, and use that. # - any other string. # # Whatever is set, that string is passed as *preset* argument to the # `-p` option of *mkinitcpio*. Take care that both "$uname" operates # in the host system, and might not be correct if the target system is # updated (to a newer kernel) as part of the installation. # # Note that "all" is probably not a good preset to use either. kernel: linux312 # Set this to true to turn off mitigations for lax file # permissions on initramfs (which, in turn, can compromise # your LUKS encryption keys, CVS-2019-13179). be_unsafe: false calamares-3.2.20/src/modules/initcpiocfg/000077500000000000000000000000001362604102500202625ustar00rootroot00000000000000calamares-3.2.20/src/modules/initcpiocfg/main.py000066400000000000000000000154311362604102500215640ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # === This file is part of Calamares - === # # Copyright 2014, Rohan Garg # Copyright 2015,2019-2020, Philip Müller # Copyright 2017, Alf Gaida # Copyright 2019, Adriaan de Groot # # Calamares 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. # # Calamares 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 Calamares. If not, see . import libcalamares from libcalamares.utils import debug, target_env_call import os from collections import OrderedDict import gettext _ = gettext.translation("calamares-python", localedir=libcalamares.utils.gettext_path(), languages=libcalamares.utils.gettext_languages(), fallback=True).gettext def pretty_name(): return _("Configuring mkinitcpio.") def cpuinfo(): """ Return the information in /proc/cpuinfo as a dictionary in the following format: cpu_info['proc0']={...} cpu_info['proc1']={...} """ cpu_info = OrderedDict() procinfo = OrderedDict() nprocs = 0 with open('/proc/cpuinfo') as cpuinfo_file: for line in cpuinfo_file: if not line.strip(): # end of one processor cpu_info["proc{!s}".format(nprocs)] = procinfo nprocs += 1 # Reset procinfo = OrderedDict() else: if len(line.split(':')) == 2: splitted_line = line.split(':')[1].strip() procinfo[line.split(':')[0].strip()] = splitted_line else: procinfo[line.split(':')[0].strip()] = '' return cpu_info def write_mkinitcpio_lines(hooks, modules, files, root_mount_point): """ Set up mkinitcpio.conf. :param hooks: :param modules: :param files: :param root_mount_point: """ hostfile = "/etc/mkinitcpio.conf" try: with open(hostfile, "r") as mkinitcpio_file: mklins = [x.strip() for x in mkinitcpio_file.readlines()] except FileNotFoundError: libcalamares.utils.debug("Could not open host file '%s'" % hostfile) mklins = [] for i in range(len(mklins)): if mklins[i].startswith("HOOKS"): joined_hooks = ' '.join(hooks) mklins[i] = "HOOKS=\"{!s}\"".format(joined_hooks) elif mklins[i].startswith("MODULES"): joined_modules = ' '.join(modules) mklins[i] = "MODULES=\"{!s}\"".format(joined_modules) elif mklins[i].startswith("FILES"): joined_files = ' '.join(files) mklins[i] = "FILES=\"{!s}\"".format(joined_files) path = os.path.join(root_mount_point, "etc/mkinitcpio.conf") with open(path, "w") as mkinitcpio_file: mkinitcpio_file.write("\n".join(mklins) + "\n") def detect_plymouth(): """ Checks existence (runnability) of plymouth in the target system. @return True if plymouth exists in the target, False otherwise """ # Used to only check existence of path /usr/bin/plymouth in target isPlymouth = target_env_call(["sh", "-c", "which plymouth"]) debug("which plymouth exit code: {!s}".format(isPlymouth)) return isPlymouth == 0 def modify_mkinitcpio_conf(partitions, root_mount_point): """ Modifies mkinitcpio.conf :param partitions: :param root_mount_point: """ cpu = cpuinfo() swap_uuid = "" btrfs = "" lvm2 = "" hooks = ["base", "udev", "autodetect", "modconf", "block", "keyboard", "keymap"] modules = [] files = [] encrypt_hook = False openswap_hook = False unencrypted_separate_boot = False # It is important that the plymouth hook comes before any encrypt hook if detect_plymouth(): hooks.append("plymouth") for partition in partitions: if partition["fs"] == "linuxswap" and not partition.get("claimed", None): # Skip foreign swap continue if partition["fs"] == "linuxswap": swap_uuid = partition["uuid"] if "luksMapperName" in partition: openswap_hook = True if partition["fs"] == "btrfs": btrfs = "yes" if "lvm2" in partition["fs"]: lvm2 = "yes" if partition["mountPoint"] == "/" and "luksMapperName" in partition: encrypt_hook = True if (partition["mountPoint"] == "/boot" and "luksMapperName" not in partition): unencrypted_separate_boot = True if partition["mountPoint"] == "/usr": hooks.append("usr") if encrypt_hook: hooks.append("encrypt") if not unencrypted_separate_boot and \ os.path.isfile( os.path.join(root_mount_point, "crypto_keyfile.bin") ): files.append("/crypto_keyfile.bin") if lvm2: hooks.append("lvm2") if swap_uuid != "": if encrypt_hook and openswap_hook: hooks.extend(["openswap"]) hooks.extend(["resume", "filesystems"]) else: hooks.extend(["filesystems"]) if btrfs == "yes" and cpu['proc0']['vendor_id'].lower() != "genuineintel": modules.append("crc32c") elif (btrfs == "yes" and cpu['proc0']['vendor_id'].lower() == "genuineintel"): modules.append("crc32c-intel") else: hooks.append("fsck") write_mkinitcpio_lines(hooks, modules, files, root_mount_point) def run(): """ Calls routine with given parameters to modify '/etc/mkinitcpio.conf'. :return: """ partitions = libcalamares.globalstorage.value("partitions") root_mount_point = libcalamares.globalstorage.value("rootMountPoint") if not partitions: libcalamares.utils.warning("partitions is empty, {!s}".format(partitions)) return (_("Configuration Error"), _("No partitions are defined for
{!s}
to use." ).format("initcpiocfg")) if not root_mount_point: libcalamares.utils.warning("rootMountPoint is empty, {!s}".format(root_mount_point)) return (_("Configuration Error"), _("No root mount point is given for
{!s}
to use." ).format("initcpiocfg")) modify_mkinitcpio_conf(partitions, root_mount_point) return None calamares-3.2.20/src/modules/initcpiocfg/module.desc000066400000000000000000000001331362604102500224040ustar00rootroot00000000000000--- type: "job" name: "initcpiocfg" interface: "python" script: "main.py" calamares-3.2.20/src/modules/initramfs/000077500000000000000000000000001362604102500177605ustar00rootroot00000000000000calamares-3.2.20/src/modules/initramfs/CMakeLists.txt000066400000000000000000000005071362604102500225220ustar00rootroot00000000000000calamares_add_plugin( initramfs TYPE job EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES InitramfsJob.cpp LINK_PRIVATE_LIBRARIES calamares SHARED_LIB ) calamares_add_test( initramfstest SOURCES Tests.cpp LIBRARIES calamares_job_initramfs # From above yamlcpp ) calamares-3.2.20/src/modules/initramfs/InitramfsJob.cpp000066400000000000000000000063241362604102500230600ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "InitramfsJob.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include "utils/UMask.h" #include "utils/Variant.h" InitramfsJob::InitramfsJob( QObject* parent ) : Calamares::CppJob( parent ) { } InitramfsJob::~InitramfsJob() {} QString InitramfsJob::prettyName() const { return tr( "Creating initramfs." ); } Calamares::JobResult InitramfsJob::exec() { CalamaresUtils::UMask m( CalamaresUtils::UMask::Safe ); cDebug() << "Updating initramfs with kernel" << m_kernel; if ( m_unsafe ) { cDebug() << "Skipping mitigations for unsafe initramfs permissions."; } else { // First make sure we generate a safe initramfs with suitable permissions. static const char confFile[] = "/etc/initramfs-tools/conf.d/calamares-safe-initramfs.conf"; static const char contents[] = "UMASK=0077\n"; if ( CalamaresUtils::System::instance()->createTargetFile( confFile, QByteArray( contents ) ).failed() ) { cWarning() << Logger::SubEntry << "Could not configure safe UMASK for initramfs."; // But continue anyway. } } // And then do the ACTUAL work. auto r = CalamaresUtils::System::instance()->targetEnvCommand( { "update-initramfs", "-k", m_kernel, "-c", "-t" }, QString(), QString() /* no timeout, 0 */ ); return r.explainProcess( "update-initramfs", std::chrono::seconds( 10 ) /* fake timeout */ ); } void InitramfsJob::setConfigurationMap( const QVariantMap& configurationMap ) { m_kernel = CalamaresUtils::getString( configurationMap, "kernel" ); if ( m_kernel.isEmpty() ) { m_kernel = QStringLiteral( "all" ); } else if ( m_kernel == "$uname" ) { auto r = CalamaresUtils::System::runCommand( CalamaresUtils::System::RunLocation::RunInHost, { "/bin/uname", "-r" }, QString(), QString(), std::chrono::seconds( 3 ) ); if ( r.getExitCode() == 0 ) { m_kernel = r.getOutput(); cDebug() << "*initramfs* using running kernel" << m_kernel; } else { cWarning() << "*initramfs* could not determine running kernel, using 'all'." << Logger::Continuation << r.getExitCode() << r.getOutput(); } } m_unsafe = CalamaresUtils::getBool( configurationMap, "be_unsafe", false ); } CALAMARES_PLUGIN_FACTORY_DEFINITION( InitramfsJobFactory, registerPlugin< InitramfsJob >(); ) calamares-3.2.20/src/modules/initramfs/InitramfsJob.h000066400000000000000000000026571362604102500225320ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef INITRAMFSJOB_H #define INITRAMFSJOB_H #include "CppJob.h" #include "DllMacro.h" #include "utils/PluginFactory.h" #include #include class PLUGINDLLEXPORT InitramfsJob : public Calamares::CppJob { Q_OBJECT public: explicit InitramfsJob( QObject* parent = nullptr ); virtual ~InitramfsJob() override; QString prettyName() const override; Calamares::JobResult exec() override; void setConfigurationMap( const QVariantMap& configurationMap ) override; private: QString m_kernel; bool m_unsafe = false; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( InitramfsJobFactory ) #endif // INITRAMFSJOB_H calamares-3.2.20/src/modules/initramfs/Tests.cpp000066400000000000000000000046241362604102500215740ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "Tests.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "Settings.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include "utils/Yaml.h" #include #include #include QTEST_GUILESS_MAIN( InitramfsTests ) InitramfsTests::InitramfsTests() { } InitramfsTests::~InitramfsTests() { } void InitramfsTests::initTestCase() { Logger::setupLogLevel( Logger::LOGDEBUG ); (void) new Calamares::JobQueue(); (void) new CalamaresUtils::System( true ); } static const char contents[] = "UMASK=0077\n"; static const char confFile[] = "/tmp/calamares-safe-umask"; void InitramfsTests::cleanup() { QFile::remove( confFile ); } void InitramfsTests::testCreateTargetFile() { static const char short_confFile[] = "/calamares-safe-umask"; auto* s = CalamaresUtils::System::instance(); auto r = s->createTargetFile( short_confFile, QByteArray( contents ) ); QVERIFY( r.failed() ); QVERIFY( !r ); QString path = r.path(); QVERIFY( path.isEmpty() ); // because no rootmountpoint is set Calamares::JobQueue::instance()->globalStorage()->insert( "rootMountPoint", "/tmp" ); path = s->createTargetFile( short_confFile, QByteArray( contents ) ).path(); QCOMPARE( path, QString( confFile ) ); QVERIFY( path.endsWith( short_confFile ) ); // chroot, so path create relative to QVERIFY( path.startsWith( "/tmp/" ) ); QVERIFY( QFile::exists( path ) ); QFileInfo fi( path ); QVERIFY( fi.exists() ); QCOMPARE( ulong( fi.size() ), sizeof( contents )-1 ); // don't count trailing NUL QFile::remove( path ); } calamares-3.2.20/src/modules/initramfs/Tests.h000066400000000000000000000021741362604102500212370ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef TESTS_H #define TESTS_H #include class InitramfsTests : public QObject { Q_OBJECT public: InitramfsTests(); ~InitramfsTests() override; private Q_SLOTS: void initTestCase(); void cleanup(); // TODO: this doesn't actually test any of the functionality of this job void testCreateTargetFile(); }; #endif calamares-3.2.20/src/modules/initramfs/initramfs.conf000066400000000000000000000026631362604102500226320ustar00rootroot00000000000000## initramfs module # # This module is specific to Debian based distros. Post installation on Debian # the initramfs needs to be updated so as to not interrupt the boot process # with a error about fsck.ext4 not being found. # ## Debian specific notes # # If you're using live-build to build your ISO and setup the runtime env # make sure that you purge the live-\* packages on the target system # before running this module, since live-config dpkg-diverts update-initramfs # and can cause all sorts of fun issues. --- # There is only one configuration item for this module, # the kernel to be loaded. This can have the following # values: # - empty or unset, interpreted as "all" # - the literal string "$uname" (without quotes, with dollar), # which will use the output of `uname -r` to determine the # running kernel, and use that. # - any other string. # # Whatever is set, that string is passed as *version* argument to the # `-k` option of *update-initramfs*. Take care that both "$uname" operates # in the host system, and might not be correct if the target system is # updated (to a newer kernel) as part of the installation. # # The default is empty/unset, leading to the behavior from Calamares # 3.2.9 and earlier which passed "all" as version. kernel: "all" # Set this to true to turn off mitigations for lax file # permissions on initramfs (which, in turn, can compromise # your LUKS encryption keys, CVS-2019-13179). be_unsafe: false calamares-3.2.20/src/modules/initramfscfg/000077500000000000000000000000001362604102500204405ustar00rootroot00000000000000calamares-3.2.20/src/modules/initramfscfg/encrypt_hook000077500000000000000000000005661362604102500231010ustar00rootroot00000000000000#!/bin/sh PREREQ="" prereqs() { echo "$PREREQ" } case $1 in # get pre-requisites prereqs) prereqs exit 0 ;; esac . /usr/share/initramfs-tools/hook-functions if [ -f /crypto_keyfile.bin ] then cp /crypto_keyfile.bin ${DESTDIR} fi if [ -f /etc/crypttab ] then cp /etc/crypttab ${DESTDIR}/etc/ fi calamares-3.2.20/src/modules/initramfscfg/encrypt_hook_nokey000077500000000000000000000004451362604102500243020ustar00rootroot00000000000000#!/bin/sh PREREQ="" prereqs() { echo "$PREREQ" } case $1 in # get pre-requisites prereqs) prereqs exit 0 ;; esac . /usr/share/initramfs-tools/hook-functions if [ -f /etc/crypttab ] then cp /etc/crypttab ${DESTDIR}/etc/ fi calamares-3.2.20/src/modules/initramfscfg/main.py000066400000000000000000000066621362604102500217500ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # === This file is part of Calamares - === # # Copyright 2014, Rohan Garg # Copyright 2015, Philip Müller # Copyright 2016, David McKinney # Copyright 2016, Kevin Kofler # Copyright 2017, Alf Gaida # Copyright 2017, 2019, Adriaan de Groot # # Calamares 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. # # Calamares 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 Calamares. If not, see . import libcalamares import inspect import os import shutil import gettext _ = gettext.translation("calamares-python", localedir=libcalamares.utils.gettext_path(), languages=libcalamares.utils.gettext_languages(), fallback=True).gettext def pretty_name(): return _("Configuring initramfs.") def copy_initramfs_hooks(partitions, root_mount_point): """ Copies initramfs hooks so they are picked up by update-initramfs :param partitions: :param root_mount_point: """ encrypt_hook = False unencrypted_separate_boot = False for partition in partitions: if partition["mountPoint"] == "/" and "luksMapperName" in partition: encrypt_hook = True if (partition["mountPoint"] == "/boot" and "luksMapperName" not in partition): unencrypted_separate_boot = True if encrypt_hook: target = "{!s}/usr/share/initramfs-tools/hooks/encrypt_hook".format( root_mount_point) # Find where this module is installed _filename = inspect.getframeinfo(inspect.currentframe()).filename _path = os.path.dirname(os.path.abspath(_filename)) if unencrypted_separate_boot: shutil.copy2( os.path.join(_path, "encrypt_hook_nokey"), target ) else: shutil.copy2( os.path.join(_path, "encrypt_hook"), target ) os.chmod(target, 0o755) def run(): """ Calls routine with given parameters to configure initramfs :return: """ partitions = libcalamares.globalstorage.value("partitions") root_mount_point = libcalamares.globalstorage.value("rootMountPoint") if not partitions: libcalamares.utils.warning("partitions is empty, {!s}".format(partitions)) return (_("Configuration Error"), _("No partitions are defined for
{!s}
to use." ).format("initramfscfg")) if not root_mount_point: libcalamares.utils.warning("rootMountPoint is empty, {!s}".format(root_mount_point)) return (_("Configuration Error"), _("No root mount point is given for
{!s}
to use." ).format("initramfscfg")) copy_initramfs_hooks(partitions, root_mount_point) return None calamares-3.2.20/src/modules/initramfscfg/module.desc000066400000000000000000000001551362604102500225660ustar00rootroot00000000000000--- type: "job" name: "initramfscfg" interface: "python" script: "main.py" noconfig: true calamares-3.2.20/src/modules/interactiveterminal/000077500000000000000000000000001362604102500220355ustar00rootroot00000000000000calamares-3.2.20/src/modules/interactiveterminal/CMakeLists.txt000066400000000000000000000015121362604102500245740ustar00rootroot00000000000000find_package(ECM ${ECM_VERSION} REQUIRED NO_MODULE) set( kf5_ver 5.41 ) find_package( KF5Service ${kf5_ver} ) find_package( KF5Parts ${kf5_ver} ) set_package_properties( KF5Service PROPERTIES PURPOSE "For finding KDE services at runtime" ) set_package_properties( KF5Parts PROPERTIES PURPOSE "For finding KDE parts at runtime" ) if ( KF5Parts_FOUND AND KF5Service_FOUND ) calamares_add_plugin( interactiveterminal TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES InteractiveTerminalViewStep.cpp InteractiveTerminalPage.cpp LINK_PRIVATE_LIBRARIES calamaresui LINK_LIBRARIES KF5::Service KF5::Parts SHARED_LIB ) else() calamares_skip_module( "interactiveterminal (missing requirements)" ) endif() calamares-3.2.20/src/modules/interactiveterminal/InteractiveTerminalPage.cpp000066400000000000000000000072401362604102500273120ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "InteractiveTerminalPage.h" #include "viewpages/ViewStep.h" #include "utils/Retranslator.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" #include #include #include #include #include #include #include #include InteractiveTerminalPage::InteractiveTerminalPage( QWidget* parent ) : QWidget( parent ) , m_layout( new QVBoxLayout( this ) ) , m_termHostWidget( nullptr ) { setLayout( m_layout ); m_layout->setContentsMargins( 0, 0, 0, 0 ); m_headerLabel = new QLabel( this ); m_layout->addWidget( m_headerLabel ); } void InteractiveTerminalPage::errorKonsoleNotInstalled() { QMessageBox::critical( this, tr( "Konsole not installed"), tr( "Please install KDE Konsole and try again!" ), QMessageBox::Ok ); } void InteractiveTerminalPage::onActivate() { if ( m_termHostWidget ) return; // For whatever reason, instead of simply linking against a library we // need to do a runtime query to KService just to get a sodding terminal // widget. KService::Ptr service = KService::serviceByDesktopName( "konsolepart" ); if ( !service ) { // And all of this hoping the Konsole application is installed. If not, // tough cookies. errorKonsoleNotInstalled(); return ; } // Create one instance of konsolepart. KParts::ReadOnlyPart* p = service->createInstance< KParts::ReadOnlyPart >( this, this, {} ); if ( !p ) { // One more opportunity for the loading operation to fail. errorKonsoleNotInstalled(); return; } // Cast the konsolepart to the TerminalInterface... TerminalInterface* t = qobject_cast< TerminalInterface* >( p ); if ( !t ) { // This is why we can't have nice things. errorKonsoleNotInstalled(); return; } // Make the widget persist even if the KPart goes out of scope... p->setAutoDeleteWidget( false ); // ... but kill the KPart if the widget goes out of scope. p->setAutoDeletePart( true ); m_termHostWidget = p->widget(); m_layout->addWidget( m_termHostWidget ); cDebug() << "Part widget ought to be" << m_termHostWidget->metaObject()->className(); t->showShellInDir( QDir::home().path() ); t->sendInput( QString( "%1\n" ).arg( m_command ) ); } void InteractiveTerminalPage::setCommand( const QString& command ) { m_command = command; CALAMARES_RETRANSLATE( m_headerLabel->setText( tr( "Executing script:  %1" ) .arg( m_command ) ); ) } calamares-3.2.20/src/modules/interactiveterminal/InteractiveTerminalPage.h000066400000000000000000000024521362604102500267570ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef INTERACTIVETERMINALPAGE_H #define INTERACTIVETERMINALPAGE_H #include class QLabel; class QVBoxLayout; class InteractiveTerminalPage : public QWidget { Q_OBJECT public: explicit InteractiveTerminalPage( QWidget* parent = nullptr ); void onActivate(); void setCommand( const QString& command ); private: QVBoxLayout* m_layout; QWidget* m_termHostWidget; QString m_command; QLabel* m_headerLabel; void errorKonsoleNotInstalled(); }; #endif // INTERACTIVETERMINALPAGE_H calamares-3.2.20/src/modules/interactiveterminal/InteractiveTerminalViewStep.cpp000066400000000000000000000047621362604102500302120ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "InteractiveTerminalViewStep.h" #include "InteractiveTerminalPage.h" #include "utils/Logger.h" #include CALAMARES_PLUGIN_FACTORY_DEFINITION( InteractiveTerminalViewStepFactory, registerPlugin(); ) InteractiveTerminalViewStep::InteractiveTerminalViewStep( QObject* parent ) : Calamares::ViewStep( parent ) , m_widget( new InteractiveTerminalPage() ) { emit nextStatusChanged( true ); } InteractiveTerminalViewStep::~InteractiveTerminalViewStep() { if ( m_widget && m_widget->parent() == nullptr ) m_widget->deleteLater(); } QString InteractiveTerminalViewStep::prettyName() const { return tr( "Script" ); } QWidget* InteractiveTerminalViewStep::widget() { return m_widget; } bool InteractiveTerminalViewStep::isNextEnabled() const { return true; } bool InteractiveTerminalViewStep::isBackEnabled() const { return true; } bool InteractiveTerminalViewStep::isAtBeginning() const { return true; } bool InteractiveTerminalViewStep::isAtEnd() const { return true; } QList< Calamares::job_ptr > InteractiveTerminalViewStep::jobs() const { cDebug() << "InteractiveTerminal" << prettyName() << "asked for jobs(), this is probably wrong."; return QList< Calamares::job_ptr >(); } void InteractiveTerminalViewStep::onActivate() { cDebug() << "InteractiveTerminal" << prettyName() << "activated."; m_widget->onActivate(); } void InteractiveTerminalViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { if ( configurationMap.contains( "command" ) && configurationMap.value( "command").type() == QVariant::String ) m_widget->setCommand( configurationMap.value( "command" ).toString() ); } calamares-3.2.20/src/modules/interactiveterminal/InteractiveTerminalViewStep.h000066400000000000000000000035321362604102500276510ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2017, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef INTERACTIVETERMINALPAGEPLUGIN_H #define INTERACTIVETERMINALPAGEPLUGIN_H #include #include #include #include class InteractiveTerminalPage; class PLUGINDLLEXPORT InteractiveTerminalViewStep : public Calamares::ViewStep { Q_OBJECT public: explicit InteractiveTerminalViewStep( QObject* parent = nullptr ); virtual ~InteractiveTerminalViewStep() override; QString prettyName() const override; QWidget* widget() override; bool isNextEnabled() const override; bool isBackEnabled() const override; bool isAtBeginning() const override; bool isAtEnd() const override; QList< Calamares::job_ptr > jobs() const override; void onActivate() override; protected: void setConfigurationMap( const QVariantMap& configurationMap ) override; private: InteractiveTerminalPage* m_widget; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( InteractiveTerminalViewStepFactory ) #endif // INTERACTIVETERMINALPAGEPLUGIN_H calamares-3.2.20/src/modules/interactiveterminal/interactiveterminal.conf000066400000000000000000000011321362604102500267520ustar00rootroot00000000000000# The interactive terminal provides a konsole (terminal) window # during the installation process. The terminal runs in the # host system, so you will need to change directories to the # target system to examine the state there. # # The one configuration key *command*, if defined, is passed # as a command to run in the terminal window before any user # input is accepted. The user must exit the terminal manually # or click *next* to proceed to the next installation step. # # If no command is defined, no command is run and the user # gets a plain terminal session. --- command: "echo Hello" calamares-3.2.20/src/modules/keyboard/000077500000000000000000000000001362604102500175645ustar00rootroot00000000000000calamares-3.2.20/src/modules/keyboard/CMakeLists.txt000066400000000000000000000007631362604102500223320ustar00rootroot00000000000000include_directories( ${PROJECT_BINARY_DIR}/src/libcalamaresui ) calamares_add_plugin( keyboard TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES KeyboardViewStep.cpp KeyboardPage.cpp KeyboardLayoutModel.cpp SetKeyboardLayoutJob.cpp keyboardwidget/keyboardglobal.cpp keyboardwidget/keyboardpreview.cpp UI KeyboardPage.ui RESOURCES keyboard.qrc LINK_PRIVATE_LIBRARIES calamaresui SHARED_LIB ) calamares-3.2.20/src/modules/keyboard/KeyboardLayoutModel.cpp000066400000000000000000000042421362604102500242110ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2016, Teo Mrnjavac * Copyright 2017, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "KeyboardLayoutModel.h" #include KeyboardLayoutModel::KeyboardLayoutModel( QObject* parent ) : QAbstractListModel( parent ) { init(); } int KeyboardLayoutModel::rowCount( const QModelIndex& parent ) const { Q_UNUSED( parent ) return m_layouts.count(); } QVariant KeyboardLayoutModel::data( const QModelIndex& index, int role ) const { if ( !index.isValid() ) return QVariant(); switch ( role ) { case Qt::DisplayRole: return m_layouts.at( index.row() ).second.description; case KeyboardVariantsRole: return QVariant::fromValue( m_layouts.at( index.row() ).second.variants ); case KeyboardLayoutKeyRole: return m_layouts.at( index.row() ).first; } return QVariant(); } void KeyboardLayoutModel::init() { KeyboardGlobal::LayoutsMap layouts = KeyboardGlobal::getKeyboardLayouts(); for ( KeyboardGlobal::LayoutsMap::const_iterator it = layouts.constBegin(); it != layouts.constEnd(); ++it ) m_layouts.append( qMakePair( it.key(), it.value() ) ); std::stable_sort( m_layouts.begin(), m_layouts.end(), []( const QPair< QString, KeyboardGlobal::KeyboardInfo >& a, const QPair< QString, KeyboardGlobal::KeyboardInfo >& b ) { return a.second.description < b.second.description; } ); } calamares-3.2.20/src/modules/keyboard/KeyboardLayoutModel.h000066400000000000000000000027231362604102500236600ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2016, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef KEYBOARDLAYOUTMODEL_H #define KEYBOARDLAYOUTMODEL_H #include "keyboardwidget/keyboardglobal.h" #include #include #include class KeyboardLayoutModel : public QAbstractListModel { Q_OBJECT public: enum Roles : int { KeyboardVariantsRole = Qt::UserRole, KeyboardLayoutKeyRole }; KeyboardLayoutModel( QObject* parent = nullptr ); int rowCount( const QModelIndex& parent = QModelIndex() ) const override; QVariant data( const QModelIndex& index, int role ) const override; private: void init(); QList< QPair< QString, KeyboardGlobal::KeyboardInfo > > m_layouts; }; #endif // KEYBOARDLAYOUTMODEL_H calamares-3.2.20/src/modules/keyboard/KeyboardPage.cpp000066400000000000000000000366301362604102500226350ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2016, Teo Mrnjavac * Copyright 2017-2018, Adriaan de Groot * * Portions from the Manjaro Installation Framework * by Roland Singer * Copyright (C) 2007 Free Software Foundation, Inc. * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "KeyboardPage.h" #include "ui_KeyboardPage.h" #include "keyboardwidget/keyboardpreview.h" #include "SetKeyboardLayoutJob.h" #include "KeyboardLayoutModel.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/Logger.h" #include "utils/Retranslator.h" #include #include #include class LayoutItem : public QListWidgetItem { public: QString data; virtual ~LayoutItem(); }; LayoutItem::~LayoutItem() { } static QPersistentModelIndex findLayout( const KeyboardLayoutModel* klm, const QString& currentLayout ) { QPersistentModelIndex currentLayoutItem; for ( int i = 0; i < klm->rowCount(); ++i ) { QModelIndex idx = klm->index( i ); if ( idx.isValid() && idx.data( KeyboardLayoutModel::KeyboardLayoutKeyRole ).toString() == currentLayout ) currentLayoutItem = idx; } return currentLayoutItem; } KeyboardPage::KeyboardPage( QWidget* parent ) : QWidget( parent ) , ui( new Ui::Page_Keyboard ) , m_keyboardPreview( new KeyBoardPreview( this ) ) , m_defaultIndex( 0 ) { ui->setupUi( this ); // Keyboard Preview ui->KBPreviewLayout->addWidget( m_keyboardPreview ); m_setxkbmapTimer.setSingleShot( true ); // Connect signals and slots connect( ui->listVariant, &QListWidget::currentItemChanged, this, &KeyboardPage::onListVariantCurrentItemChanged ); connect( ui->buttonRestore, &QPushButton::clicked, [this] { ui->comboBoxModel->setCurrentIndex( m_defaultIndex ); } ); connect( ui->comboBoxModel, static_cast< void ( QComboBox::* )( const QString& ) >( &QComboBox::currentIndexChanged ), [this]( const QString& text ) { QString model = m_models.value( text, "pc105" ); // Set Xorg keyboard model QProcess::execute( "setxkbmap", QStringList{ "-model", model } ); } ); CALAMARES_RETRANSLATE( ui->retranslateUi( this ); ) } KeyboardPage::~KeyboardPage() { delete ui; } void KeyboardPage::init() { //### Detect current keyboard layout and variant QString currentLayout; QString currentVariant; QProcess process; process.start( "setxkbmap", QStringList() << "-print" ); if ( process.waitForFinished() ) { const QStringList list = QString( process.readAll() ) .split( "\n", QString::SkipEmptyParts ); for ( QString line : list ) { line = line.trimmed(); if ( !line.startsWith( "xkb_symbols" ) ) continue; line = line.remove( "}" ) .remove( "{" ) .remove( ";" ); line = line.mid( line.indexOf( "\"" ) + 1 ); QStringList split = line.split( "+", QString::SkipEmptyParts ); if ( split.size() >= 2 ) { currentLayout = split.at( 1 ); if ( currentLayout.contains( "(" ) ) { int parenthesisIndex = currentLayout.indexOf( "(" ); currentVariant = currentLayout.mid( parenthesisIndex + 1 ) .trimmed(); currentVariant.chop( 1 ); currentLayout = currentLayout .mid( 0, parenthesisIndex ) .trimmed(); } break; } } } //### Models m_models = KeyboardGlobal::getKeyboardModels(); QMapIterator< QString, QString > mi( m_models ); ui->comboBoxModel->blockSignals( true ); while ( mi.hasNext() ) { mi.next(); if ( mi.value() == "pc105" ) m_defaultIndex = ui->comboBoxModel->count(); ui->comboBoxModel->addItem( mi.key() ); } ui->comboBoxModel->blockSignals( false ); // Set to default value pc105 ui->comboBoxModel->setCurrentIndex( m_defaultIndex ); //### Layouts and Variants KeyboardLayoutModel* klm = new KeyboardLayoutModel( this ); ui->listLayout->setModel( klm ); connect( ui->listLayout->selectionModel(), &QItemSelectionModel::currentChanged, this, &KeyboardPage::onListLayoutCurrentItemChanged ); // Block signals ui->listLayout->blockSignals( true ); QPersistentModelIndex currentLayoutItem = findLayout( klm, currentLayout ); if ( !currentLayoutItem.isValid() && ( ( currentLayout == "latin" ) || ( currentLayout == "pc" ) ) ) { currentLayout = "us"; currentLayoutItem = findLayout( klm, currentLayout ); } // Set current layout and variant if ( currentLayoutItem.isValid() ) { ui->listLayout->setCurrentIndex( currentLayoutItem ); updateVariants( currentLayoutItem, currentVariant ); } // Unblock signals ui->listLayout->blockSignals( false ); // Default to the first available layout if none was set // Do this after unblocking signals so we get the default variant handling. if ( !currentLayoutItem.isValid() && klm->rowCount() > 0 ) ui->listLayout->setCurrentIndex( klm->index( 0 ) ); } QString KeyboardPage::prettyStatus() const { QString status; status += tr( "Set keyboard model to %1.
" ).arg( ui->comboBoxModel->currentText() ); QString layout = ui->listLayout->currentIndex().data().toString(); QString variant = ui->listVariant->currentItem() ? ui->listVariant->currentItem()->text() : QString( "" ); status += tr( "Set keyboard layout to %1/%2." ).arg( layout, variant ); return status; } QList< Calamares::job_ptr > KeyboardPage::createJobs( const QString& xOrgConfFileName, const QString& convertedKeymapPath, bool writeEtcDefaultKeyboard ) { QList< Calamares::job_ptr > list; QString selectedModel = m_models.value( ui->comboBoxModel->currentText(), "pc105" ); Calamares::Job* j = new SetKeyboardLayoutJob( selectedModel, m_selectedLayout, m_selectedVariant, xOrgConfFileName, convertedKeymapPath, writeEtcDefaultKeyboard ); list.append( Calamares::job_ptr( j ) ); return list; } void KeyboardPage::guessLayout( const QStringList& langParts ) { const KeyboardLayoutModel* klm = dynamic_cast< KeyboardLayoutModel* >( ui->listLayout->model() ); bool foundCountryPart = false; for ( auto countryPart = langParts.rbegin(); !foundCountryPart && countryPart != langParts.rend(); ++countryPart ) { cDebug() << Logger::SubEntry << "looking for locale part" << *countryPart; for ( int i = 0; i < klm->rowCount(); ++i ) { QModelIndex idx = klm->index( i ); QString name = idx.isValid() ? idx.data( KeyboardLayoutModel::KeyboardLayoutKeyRole ).toString() : QString(); if ( idx.isValid() && ( name.compare( *countryPart, Qt::CaseInsensitive ) == 0 ) ) { cDebug() << Logger::SubEntry << "matched" << name; ui->listLayout->setCurrentIndex( idx ); foundCountryPart = true; break; } } if ( foundCountryPart ) { ++countryPart; if ( countryPart != langParts.rend() ) { cDebug() << "Next level:" << *countryPart; for (int variantnumber = 0; variantnumber < ui->listVariant->count(); ++variantnumber) { LayoutItem *variantdata = dynamic_cast< LayoutItem* >( ui->listVariant->item( variantnumber ) ); if ( variantdata && (variantdata->data.compare( *countryPart, Qt::CaseInsensitive ) == 0) ) { ui->listVariant->setCurrentItem( variantdata ); cDebug() << Logger::SubEntry << "matched variant" << variantdata->data << ' ' << variantdata->text(); } } } } } } void KeyboardPage::onActivate() { /* Guessing a keyboard layout based on the locale means * mapping between language identifiers in _ * format to keyboard mappings, which are _ * format; in addition, some countries have multiple languages, * so fr_BE and nl_BE want different layouts (both Belgian) * and sometimes the language-country name doesn't match the * keyboard-country name at all (e.g. Ellas vs. Greek). * * This is a table of language-to-keyboard mappings. The * language identifier is the key, while the value is * a string that is used instead of the real language * identifier in guessing -- so it should be something * like _. */ static constexpr char arabic[] = "ara"; static const auto specialCaseMap = QMap( { /* Most Arab countries map to Arabic keyboard (Default) */ { "ar_AE", arabic }, { "ar_BH", arabic }, { "ar_DZ", arabic }, { "ar_EG", arabic }, { "ar_IN", arabic }, { "ar_IQ", arabic }, { "ar_JO", arabic }, { "ar_KW", arabic }, { "ar_LB", arabic }, { "ar_LY", arabic }, /* Not Morocco: use layout ma */ { "ar_OM", arabic }, { "ar_QA", arabic }, { "ar_SA", arabic }, { "ar_SD", arabic }, { "ar_SS", arabic }, /* Not Syria: use layout sy */ { "ar_TN", arabic }, { "ar_YE", arabic }, { "ca_ES", "cat_ES" }, /* Catalan */ { "as_ES", "ast_ES" }, /* Asturian */ { "en_CA", "eng_CA" }, /* Canadian English */ { "el_CY", "gr" }, /* Greek in Cyprus */ { "el_GR", "gr" }, /* Greek in Greeze */ { "ig_NG", "igbo_NG" }, /* Igbo in Nigeria */ { "ha_NG", "hausa_NG" } /* Hausa */ } ); ui->listLayout->setFocus(); // Try to preselect a layout, depending on language and locale Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); QString lang = gs->value( "localeConf" ).toMap().value( "LANG" ).toString(); cDebug() << "Got locale language" << lang; if ( !lang.isEmpty() ) { // Chop off .codeset and @modifier int index = lang.indexOf( '.' ); if ( index >= 0 ) lang.truncate( index ); index = lang.indexOf( '@' ); if ( index >= 0 ) lang.truncate( index ); lang.replace( '-', '_' ); // Normalize separators } if ( !lang.isEmpty() ) { std::string lang_s = lang.toStdString(); if ( specialCaseMap.contains( lang_s ) ) { QString newLang = QString::fromStdString( specialCaseMap.value( lang_s ) ); cDebug() << Logger::SubEntry << "special case language" << lang << "becomes" << newLang; lang = newLang; } } if ( !lang.isEmpty() ) { const auto langParts = lang.split( '_', QString::SkipEmptyParts ); // Note that this his string is not fit for display purposes! // It doesn't come from QLocale::nativeCountryName. QString country = QLocale::countryToString( QLocale( lang ).country() ); cDebug() << Logger::SubEntry << "extracted country" << country << "::" << langParts; guessLayout( langParts ); } } void KeyboardPage::finalize() { Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); if ( !m_selectedLayout.isEmpty() ) { gs->insert( "keyboardLayout", m_selectedLayout ); gs->insert( "keyboardVariant", m_selectedVariant ); //empty means default variant } //FIXME: also store keyboard model for something? } void KeyboardPage::updateVariants( const QPersistentModelIndex& currentItem, QString currentVariant ) { // Block signals ui->listVariant->blockSignals( true ); QMap< QString, QString > variants = currentItem.data( KeyboardLayoutModel::KeyboardVariantsRole ) .value< QMap< QString, QString > >(); QMapIterator< QString, QString > li( variants ); LayoutItem* defaultItem = nullptr; ui->listVariant->clear(); while ( li.hasNext() ) { li.next(); LayoutItem* item = new LayoutItem(); item->setText( li.key() ); item->data = li.value(); ui->listVariant->addItem( item ); // currentVariant defaults to QString(). It is only non-empty during the // initial setup. if ( li.value() == currentVariant ) defaultItem = item; } // Unblock signals ui->listVariant->blockSignals( false ); // Set to default value if ( defaultItem ) ui->listVariant->setCurrentItem( defaultItem ); } void KeyboardPage::onListLayoutCurrentItemChanged( const QModelIndex& current, const QModelIndex& previous ) { Q_UNUSED( previous ) if ( !current.isValid() ) return; updateVariants( QPersistentModelIndex( current ) ); } /* Returns stringlist with suitable setxkbmap command-line arguments * to set the given @p layout and @p variant. */ static inline QStringList xkbmap_args( const QString& layout, const QString& variant ) { QStringList r{ "-layout", layout }; if ( !variant.isEmpty() ) r << "-variant" << variant; return r; } void KeyboardPage::onListVariantCurrentItemChanged( QListWidgetItem* current, QListWidgetItem* previous ) { Q_UNUSED( previous ) QPersistentModelIndex layoutIndex = ui->listLayout->currentIndex(); LayoutItem* variantItem = dynamic_cast< LayoutItem* >( current ); if ( !layoutIndex.isValid() || !variantItem ) return; QString layout = layoutIndex.data( KeyboardLayoutModel::KeyboardLayoutKeyRole ).toString(); QString variant = variantItem->data; m_keyboardPreview->setLayout( layout ); m_keyboardPreview->setVariant( variant ); //emit checkReady(); // Set Xorg keyboard layout if ( m_setxkbmapTimer.isActive() ) { m_setxkbmapTimer.stop(); m_setxkbmapTimer.disconnect( this ); } connect( &m_setxkbmapTimer, &QTimer::timeout, this, [=] { QProcess::execute( "setxkbmap", xkbmap_args( layout, variant ) ); cDebug() << "xkbmap selection changed to: " << layout << '-' << variant; m_setxkbmapTimer.disconnect( this ); } ); m_setxkbmapTimer.start( QApplication::keyboardInputInterval() ); m_selectedLayout = layout; m_selectedVariant = variant; } calamares-3.2.20/src/modules/keyboard/KeyboardPage.h000066400000000000000000000046351362604102500223020ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2016, Teo Mrnjavac * Copyright 2017, Adriaan de Groot * * Portions from the Manjaro Installation Framework * by Roland Singer * Copyright (C) 2007 Free Software Foundation, Inc. * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef KEYBOARDPAGE_H #define KEYBOARDPAGE_H #include "Job.h" #include #include #include namespace Ui { class Page_Keyboard; } class KeyBoardPreview; class KeyboardPage : public QWidget { Q_OBJECT public: explicit KeyboardPage( QWidget* parent = nullptr ); virtual ~KeyboardPage(); void init(); QString prettyStatus() const; Calamares::JobList createJobs( const QString& xOrgConfFileName, const QString& convertedKeymapPath, bool writeEtcDefaultKeyboard ); void onActivate(); void finalize(); protected slots: void onListLayoutCurrentItemChanged( const QModelIndex& current, const QModelIndex& previous ); void onListVariantCurrentItemChanged( QListWidgetItem* current, QListWidgetItem* previous ); private: /// Guess a layout based on the split-apart locale void guessLayout( const QStringList& langParts ); void updateVariants( const QPersistentModelIndex& currentItem, QString currentVariant = QString() ); Ui::Page_Keyboard* ui; KeyBoardPreview* m_keyboardPreview; int m_defaultIndex; QMap< QString, QString > m_models; QString m_selectedLayout; QString m_selectedVariant; QTimer m_setxkbmapTimer; }; #endif // KEYBOARDPAGE_H calamares-3.2.20/src/modules/keyboard/KeyboardPage.ui000066400000000000000000000072141362604102500224640ustar00rootroot00000000000000 Page_Keyboard 0 0 830 573 Form 9 0 12 12 Qt::Horizontal 40 20 Qt::Horizontal 40 20 0 Keyboard Model: 0 0 :/images/restore.png:/images/restore.png 18 18 9 50 false Type here to test your keyboard comboBoxModel listLayout listVariant LE_TestKeyboard buttonRestore calamares-3.2.20/src/modules/keyboard/KeyboardViewStep.cpp000066400000000000000000000070241362604102500235220ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "KeyboardViewStep.h" #include "JobQueue.h" #include "GlobalStorage.h" #include "KeyboardPage.h" CALAMARES_PLUGIN_FACTORY_DEFINITION( KeyboardViewStepFactory, registerPlugin(); ) KeyboardViewStep::KeyboardViewStep( QObject* parent ) : Calamares::ViewStep( parent ) , m_widget( new KeyboardPage() ) , m_nextEnabled( false ) , m_writeEtcDefaultKeyboard( true ) { m_widget->init(); m_nextEnabled = true; emit nextStatusChanged( m_nextEnabled ); } KeyboardViewStep::~KeyboardViewStep() { if ( m_widget && m_widget->parent() == nullptr ) m_widget->deleteLater(); } QString KeyboardViewStep::prettyName() const { return tr( "Keyboard" ); } QString KeyboardViewStep::prettyStatus() const { return m_prettyStatus; } QWidget* KeyboardViewStep::widget() { return m_widget; } bool KeyboardViewStep::isNextEnabled() const { return m_nextEnabled; } bool KeyboardViewStep::isBackEnabled() const { return true; } bool KeyboardViewStep::isAtBeginning() const { return true; } bool KeyboardViewStep::isAtEnd() const { return true; } QList< Calamares::job_ptr > KeyboardViewStep::jobs() const { return m_jobs; } void KeyboardViewStep::onActivate() { m_widget->onActivate(); } void KeyboardViewStep::onLeave() { m_widget->finalize(); m_jobs = m_widget->createJobs( m_xOrgConfFileName, m_convertedKeymapPath, m_writeEtcDefaultKeyboard ); m_prettyStatus = m_widget->prettyStatus(); } void KeyboardViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { if ( configurationMap.contains( "xOrgConfFileName" ) && configurationMap.value( "xOrgConfFileName" ).type() == QVariant::String && !configurationMap.value( "xOrgConfFileName" ).toString().isEmpty() ) { m_xOrgConfFileName = configurationMap.value( "xOrgConfFileName" ) .toString(); } else m_xOrgConfFileName = "00-keyboard.conf"; if ( configurationMap.contains( "convertedKeymapPath" ) && configurationMap.value( "convertedKeymapPath" ).type() == QVariant::String && !configurationMap.value( "convertedKeymapPath" ).toString().isEmpty() ) { m_convertedKeymapPath = configurationMap.value( "convertedKeymapPath" ) .toString(); } else m_convertedKeymapPath = QString(); if ( configurationMap.contains( "writeEtcDefaultKeyboard" ) && configurationMap.value( "writeEtcDefaultKeyboard" ).type() == QVariant::Bool ) m_writeEtcDefaultKeyboard = configurationMap.value( "writeEtcDefaultKeyboard" ).toBool(); else m_writeEtcDefaultKeyboard = true; } calamares-3.2.20/src/modules/keyboard/KeyboardViewStep.h000066400000000000000000000037631362604102500231750ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2017, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef KEYBOARDVIEWSTEP_H #define KEYBOARDVIEWSTEP_H #include #include #include #include class KeyboardPage; class PLUGINDLLEXPORT KeyboardViewStep : public Calamares::ViewStep { Q_OBJECT public: explicit KeyboardViewStep( QObject* parent = nullptr ); virtual ~KeyboardViewStep() override; QString prettyName() const override; QString prettyStatus() const override; QWidget* widget() override; bool isNextEnabled() const override; bool isBackEnabled() const override; bool isAtBeginning() const override; bool isAtEnd() const override; QList< Calamares::job_ptr > jobs() const override; void onActivate() override; void onLeave() override; void setConfigurationMap( const QVariantMap& configurationMap ) override; private: KeyboardPage* m_widget; bool m_nextEnabled; QString m_prettyStatus; QString m_xOrgConfFileName; QString m_convertedKeymapPath; bool m_writeEtcDefaultKeyboard; QList< Calamares::job_ptr > m_jobs; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( KeyboardViewStepFactory ) #endif // KEYBOARDVIEWSTEP_H calamares-3.2.20/src/modules/keyboard/README.md000066400000000000000000000003111362604102500210360ustar00rootroot00000000000000Keyboard layout configuration viewmodule --- Requires ckbcomp script. * Debian package console-setup or * Manjaro package keyboardctl https://github.com/manjaro/packages-core/tree/master/keyboardctl calamares-3.2.20/src/modules/keyboard/SetKeyboardLayoutJob.cpp000066400000000000000000000256461362604102500243520ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2016, Teo Mrnjavac * Copyright 2014, Kevin Kofler * * Portions from systemd (localed.c): * Copyright 2011 Lennart Poettering * Copyright 2013 Kay Sievers * (originally under LGPLv2.1+, used under the LGPL to GPL conversion clause) * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include #include "JobQueue.h" #include "GlobalStorage.h" #include "utils/Logger.h" #include "utils/CalamaresUtilsSystem.h" #include #include #include #include #include SetKeyboardLayoutJob::SetKeyboardLayoutJob( const QString& model, const QString& layout, const QString& variant, const QString& xOrgConfFileName, const QString& convertedKeymapPath, bool writeEtcDefaultKeyboard ) : Calamares::Job() , m_model( model ) , m_layout( layout ) , m_variant( variant ) , m_xOrgConfFileName( xOrgConfFileName ) , m_convertedKeymapPath( convertedKeymapPath ) , m_writeEtcDefaultKeyboard( writeEtcDefaultKeyboard ) { } QString SetKeyboardLayoutJob::prettyName() const { return tr( "Set keyboard model to %1, layout to %2-%3" ).arg( m_model ) .arg( m_layout ) .arg( m_variant ); } QString SetKeyboardLayoutJob::findConvertedKeymap( const QString& convertedKeymapPath ) const { cDebug() << "Looking for converted keymap in" << convertedKeymapPath; // No search path supplied, assume the distribution does not provide // converted keymaps if ( convertedKeymapPath.isEmpty() ) return QString(); QDir convertedKeymapDir( convertedKeymapPath ); QString name = m_variant.isEmpty() ? m_layout : ( m_layout + '-' + m_variant ); if ( convertedKeymapDir.exists( name + ".map" ) || convertedKeymapDir.exists( name + ".map.gz" ) ) { cDebug() << Logger::SubEntry << "Found converted keymap" << name; return name; } return QString(); } QString SetKeyboardLayoutJob::findLegacyKeymap() const { cDebug() << "Looking for legacy keymap in QRC"; int bestMatching = 0; QString name; QFile file( ":/kbd-model-map" ); file.open( QIODevice::ReadOnly | QIODevice::Text ); QTextStream stream( &file ); while ( !stream.atEnd() ) { QString line = stream.readLine().trimmed(); if ( line.isEmpty() || line.startsWith( '#' ) ) continue; QStringList mapping = line.split( '\t', QString::SkipEmptyParts ); if ( mapping.size() < 5 ) continue; int matching = 0; // Determine how well matching this entry is // We assume here that we have one X11 layout. If the UI changes to // allow more than one layout, this should change too. if ( m_layout == mapping[1] ) // If we got an exact match, this is best matching = 10; // Look for an entry whose first layout matches ours else if ( mapping[1].startsWith( m_layout + ',' ) ) matching = 5; if ( matching > 0 ) { if ( m_model.isEmpty() || m_model == mapping[2] ) matching++; QString mappingVariant = mapping[3]; if ( mappingVariant == "-" ) mappingVariant = QString(); else if ( mappingVariant.startsWith( ',' ) ) mappingVariant.remove( 1, 0 ); if ( m_variant == mappingVariant ) matching++; // We ignore mapping[4], the xkb options, for now. If we ever // allow setting options in the UI, we should match them here. } // The best matching entry so far, then let's save that if ( matching >= qMax( bestMatching, 1 ) ) { cDebug() << Logger::SubEntry << "Found legacy keymap" << mapping[0] << "with score" << matching; if ( matching > bestMatching ) { bestMatching = matching; name = mapping[0]; } } } return name; } bool SetKeyboardLayoutJob::writeVConsoleData( const QString& vconsoleConfPath, const QString& convertedKeymapPath ) const { QString keymap = findConvertedKeymap( convertedKeymapPath ); if ( keymap.isEmpty() ) keymap = findLegacyKeymap(); if ( keymap.isEmpty() ) { cDebug() << "Trying to use X11 layout" << m_layout << "as the virtual console layout"; keymap = m_layout; } QStringList existingLines; // Read in the existing vconsole.conf, if it exists QFile file( vconsoleConfPath ); if ( file.exists() ) { file.open( QIODevice::ReadOnly | QIODevice::Text ); QTextStream stream( &file ); while ( !stream.atEnd() ) existingLines << stream.readLine(); file.close(); if ( stream.status() != QTextStream::Ok ) return false; } // Write out the existing lines and replace the KEYMAP= line file.open( QIODevice::WriteOnly | QIODevice::Text ); QTextStream stream( &file ); bool found = false; foreach ( const QString& existingLine, existingLines ) { if ( existingLine.trimmed().startsWith( "KEYMAP=" ) ) { stream << "KEYMAP=" << keymap << '\n'; found = true; } else stream << existingLine << '\n'; } // Add a KEYMAP= line if there wasn't any if ( !found ) stream << "KEYMAP=" << keymap << '\n'; stream.flush(); file.close(); cDebug() << "Written KEYMAP=" << keymap << "to vconsole.conf"; return ( stream.status() == QTextStream::Ok ); } bool SetKeyboardLayoutJob::writeX11Data( const QString& keyboardConfPath ) const { QFile file( keyboardConfPath ); file.open( QIODevice::WriteOnly | QIODevice::Text ); QTextStream stream( &file ); stream << "# Read and parsed by systemd-localed. It's probably wise not to edit this file\n" "# manually too freely.\n" "Section \"InputClass\"\n" " Identifier \"system-keyboard\"\n" " MatchIsKeyboard \"on\"\n"; if ( !m_layout.isEmpty() ) stream << " Option \"XkbLayout\" \"" << m_layout << "\"\n"; if ( !m_model.isEmpty() ) stream << " Option \"XkbModel\" \"" << m_model << "\"\n"; if ( !m_variant.isEmpty() ) stream << " Option \"XkbVariant\" \"" << m_variant << "\"\n"; stream << "EndSection\n"; stream.flush(); file.close(); cDebug() << "Written XkbLayout" << m_layout << "; XkbModel" << m_model << "; XkbVariant" << m_variant << "to X.org file" << keyboardConfPath; return ( stream.status() == QTextStream::Ok ); } bool SetKeyboardLayoutJob::writeDefaultKeyboardData( const QString& defaultKeyboardPath ) const { QFile file( defaultKeyboardPath ); file.open( QIODevice::WriteOnly | QIODevice::Text ); QTextStream stream( &file ); stream << "# KEYBOARD CONFIGURATION FILE\n\n" "# Consult the keyboard(5) manual page.\n\n"; stream << "XKBMODEL=\"" << m_model << "\"\n"; stream << "XKBLAYOUT=\"" << m_layout << "\"\n"; stream << "XKBVARIANT=\"" << m_variant << "\"\n"; stream << "XKBOPTIONS=\"\"\n\n"; stream << "BACKSPACE=\"guess\"\n"; stream.flush(); file.close(); cDebug() << "Written XKBMODEL" << m_model << "; XKBLAYOUT" << m_layout << "; XKBVARIANT" << m_variant << "to /etc/default/keyboard file" << defaultKeyboardPath; return ( stream.status() == QTextStream::Ok ); } Calamares::JobResult SetKeyboardLayoutJob::exec() { cDebug() << "Executing SetKeyboardLayoutJob"; // Read the location of the destination's / in the host file system from // the global settings Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); QDir destDir( gs->value( "rootMountPoint" ).toString() ); // Get the path to the destination's /etc/vconsole.conf QString vconsoleConfPath = destDir.absoluteFilePath( "etc/vconsole.conf" ); // Get the path to the destination's /etc/X11/xorg.conf.d/00-keyboard.conf QString xorgConfDPath; QString keyboardConfPath; if ( QDir::isAbsolutePath( m_xOrgConfFileName ) ) { keyboardConfPath = m_xOrgConfFileName; while ( keyboardConfPath.startsWith( '/' ) ) keyboardConfPath.remove( 0, 1 ); keyboardConfPath = destDir.absoluteFilePath( keyboardConfPath ); xorgConfDPath = QFileInfo( keyboardConfPath ).path(); } else { xorgConfDPath = destDir.absoluteFilePath( "etc/X11/xorg.conf.d" ); keyboardConfPath = QDir( xorgConfDPath ) .absoluteFilePath( m_xOrgConfFileName ); } destDir.mkpath( xorgConfDPath ); QString defaultKeyboardPath; if ( QDir( destDir.absoluteFilePath( "etc/default" ) ).exists() ) defaultKeyboardPath = destDir.absoluteFilePath( "etc/default/keyboard" ); // Get the path to the destination's path to the converted key mappings QString convertedKeymapPath = m_convertedKeymapPath; if ( !convertedKeymapPath.isEmpty() ) { while ( convertedKeymapPath.startsWith( '/' ) ) convertedKeymapPath.remove( 0, 1 ); convertedKeymapPath = destDir.absoluteFilePath( convertedKeymapPath ); } if ( !writeVConsoleData( vconsoleConfPath, convertedKeymapPath ) ) return Calamares::JobResult::error( tr( "Failed to write keyboard configuration for the virtual console." ), tr( "Failed to write to %1" ).arg( vconsoleConfPath ) ); if ( !writeX11Data( keyboardConfPath ) ) return Calamares::JobResult::error( tr( "Failed to write keyboard configuration for X11." ), tr( "Failed to write to %1" ).arg( keyboardConfPath ) ); if ( !defaultKeyboardPath.isEmpty() && m_writeEtcDefaultKeyboard ) { if ( !writeDefaultKeyboardData( defaultKeyboardPath ) ) return Calamares::JobResult::error( tr( "Failed to write keyboard configuration to existing /etc/default directory." ), tr( "Failed to write to %1" ).arg( keyboardConfPath ) ); } return Calamares::JobResult::ok(); } calamares-3.2.20/src/modules/keyboard/SetKeyboardLayoutJob.h000066400000000000000000000037641362604102500240140ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2016, Teo Mrnjavac * Copyright 2014, Kevin Kofler * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef SETKEYBOARDLAYOUTJOB_H #define SETKEYBOARDLAYOUTJOB_H #include class SetKeyboardLayoutJob : public Calamares::Job { Q_OBJECT public: SetKeyboardLayoutJob( const QString& model, const QString& layout, const QString& variant, const QString& xOrgConfFileName, const QString& convertedKeymapPath, bool writeEtcDefaultKeyboard ); QString prettyName() const override; Calamares::JobResult exec() override; private: QString findConvertedKeymap( const QString& convertedKeymapPath ) const; QString findLegacyKeymap() const; bool writeVConsoleData( const QString& vconsoleConfPath, const QString& convertedKeymapPath ) const; bool writeX11Data( const QString& keyboardConfPath ) const; bool writeDefaultKeyboardData( const QString& defaultKeyboardPath ) const; QString m_model; QString m_layout; QString m_variant; QString m_xOrgConfFileName; QString m_convertedKeymapPath; const bool m_writeEtcDefaultKeyboard; }; #endif /* SETKEYBOARDLAYOUTJOB_H */ calamares-3.2.20/src/modules/keyboard/images/000077500000000000000000000000001362604102500210315ustar00rootroot00000000000000calamares-3.2.20/src/modules/keyboard/images/restore.png000066400000000000000000000015541362604102500232270ustar00rootroot00000000000000‰PNG  IHDR@@ªiqÞ3IDATx^í›Á•¢@†ßÜ!˜d#€½ÌuÄt#P"6Í®^"#X‰`!·ÿ^fvÑmw©Sï}gì¯Êj«mžÎç³÷Èñì}ˆý~oKÀ¢²)àõõõ“€‰é!ñ›(=ûá\À’h‰TÌWÀbÖ·X¸¨˜¸Êú#TÀ”(,,\¤€5±!ÄÇä Y?ÜÄâÁ³ã¬¯?èÑ/NDw+tøˆkì‚°ž¨AItÒøXÀÊ»NÄ D Ñ; = !Z,ÞV¤ð‡˜»àïÈF义"ÄÔ¶€”È<£ ×6Txpíɉ †+ßVèˆïh~½ )’âÛœ~ «†XAC·ÆÅÓ 3EI—&$ðèWC«!óH4DN¼îi„„BC€Ö¾œbG¼§ß@Ür”€¦itEä ÕÀe‡ý¿fî![@’$⪠è7[ÆOénX †„ŒHtH­†c§XI9Ή]];;ÄŒ Í…mŠÃÀ˜F3À@ü4tXZµüj0…âjM¥8”¥w)”_.Gt·‡°øžt ‚ûTÆæ/Š÷ÎÔ˜ÊÄÅ£W@`J@ÏØO%k`o)‰0¡‚ ž%@|ð«²5) »[Šãe$èkà™IÝ-UãP¤älƒ[E‰€ì¯³?p”Œ³w×ÙTM8:Å*H‰¥#SÅôDÉŸ @ÑîÔAé—ŒÏ7ŒÐ0R[”à3®èôDÁŸø6@ÅL-->æd_G@Çhtñ5+r[Æâ["71 æD˨„–XÎúšh™7Ó2sã0ÿÿù‚8šæŠ*d-þhRÀ‘ÈF^W9 "BÆ%ÌwâïÈ+¸¸Mjþªl Û" €‹ÐŸ“hM™¶¸æ]a˜…>1˜y¦‹·q$¶8oˆ…µ3AHˆ\”ìQM¹‹CÑ#9|ÿ¯Äó+—§Âñ†,œ,žÿ§xî åX¼BsÛ\QD‹ÞóB4߈̉ÐÍv‰¼¥×ævÀ'RƒàÂTyB¶kþ¢ù<üëóÿb=Ë 7…ÒIEND®B`‚calamares-3.2.20/src/modules/keyboard/kbd-model-map000066400000000000000000000076061362604102500221310ustar00rootroot00000000000000# Copied from systemd-localed # # https://cgit.freedesktop.org/systemd/systemd/log/src/locale/kbd-model-map # (originally under LGPLv2.1+, used under the LGPL to GPL conversion clause) # # This is the version from 534644b7be7b240eb0fbbe06e20cbecbe8206767, # committed 2015-01-22 01:07:24 . # # Updates: # - 2018-09-26 Added "Austrian" keyboard (de at). Issue #1035 # # Generated from system-config-keyboard's model list # consolelayout xlayout xmodel xvariant xoptions sg ch pc105 de_nodeadkeys terminate:ctrl_alt_bksp nl nl pc105 - terminate:ctrl_alt_bksp mk-utf mk,us pc105 - terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll trq tr pc105 - terminate:ctrl_alt_bksp uk gb pc105 - terminate:ctrl_alt_bksp is-latin1 is pc105 - terminate:ctrl_alt_bksp de de pc105 - terminate:ctrl_alt_bksp de at pc105 - terminate:ctrl_alt_bksp la-latin1 latam pc105 - terminate:ctrl_alt_bksp us us pc105+inet - terminate:ctrl_alt_bksp ko kr pc105 - terminate:ctrl_alt_bksp ro-std ro pc105 std terminate:ctrl_alt_bksp de-latin1 de pc105 - terminate:ctrl_alt_bksp slovene si pc105 - terminate:ctrl_alt_bksp hu101 hu pc105 qwerty terminate:ctrl_alt_bksp jp106 jp jp106 - terminate:ctrl_alt_bksp croat hr pc105 - terminate:ctrl_alt_bksp it2 it pc105 - terminate:ctrl_alt_bksp hu hu pc105 - terminate:ctrl_alt_bksp sr-latin rs pc105 latin terminate:ctrl_alt_bksp fi fi pc105 - terminate:ctrl_alt_bksp fr_CH ch pc105 fr terminate:ctrl_alt_bksp dk-latin1 dk pc105 - terminate:ctrl_alt_bksp fr fr pc105 - terminate:ctrl_alt_bksp it it pc105 - terminate:ctrl_alt_bksp ua-utf ua,us pc105 - terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll fr-latin1 fr pc105 - terminate:ctrl_alt_bksp sg-latin1 ch pc105 de_nodeadkeys terminate:ctrl_alt_bksp be-latin1 be pc105 - terminate:ctrl_alt_bksp dk dk pc105 - terminate:ctrl_alt_bksp fr-pc fr pc105 - terminate:ctrl_alt_bksp bg_pho-utf8 bg,us pc105 ,phonetic terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll it-ibm it pc105 - terminate:ctrl_alt_bksp cz-us-qwertz cz,us pc105 - terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll br-abnt2 br abnt2 - terminate:ctrl_alt_bksp ro ro pc105 - terminate:ctrl_alt_bksp us-acentos us pc105 intl terminate:ctrl_alt_bksp pt-latin1 pt pc105 - terminate:ctrl_alt_bksp ro-std-cedilla ro pc105 std_cedilla terminate:ctrl_alt_bksp tj_alt-UTF8 tj pc105 - terminate:ctrl_alt_bksp de-latin1-nodeadkeys de pc105 nodeadkeys terminate:ctrl_alt_bksp no no pc105 - terminate:ctrl_alt_bksp bg_bds-utf8 bg,us pc105 - terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll dvorak us pc105 dvorak terminate:ctrl_alt_bksp dvorak us pc105 dvorak-alt-intl terminate:ctrl_alt_bksp ru ru,us pc105 - terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll cz-lat2 cz pc105 qwerty terminate:ctrl_alt_bksp pl2 pl pc105 - terminate:ctrl_alt_bksp es es pc105 - terminate:ctrl_alt_bksp ro-cedilla ro pc105 cedilla terminate:ctrl_alt_bksp ie ie pc105 - terminate:ctrl_alt_bksp et ee pc105 - terminate:ctrl_alt_bksp sk-qwerty sk pc105 - terminate:ctrl_alt_bksp,qwerty sk-qwertz sk pc105 - terminate:ctrl_alt_bksp fr-latin9 fr pc105 latin9 terminate:ctrl_alt_bksp fr_CH-latin1 ch pc105 fr terminate:ctrl_alt_bksp cf ca pc105 - terminate:ctrl_alt_bksp sv-latin1 se pc105 - terminate:ctrl_alt_bksp sr-cy rs pc105 - terminate:ctrl_alt_bksp gr gr,us pc105 - terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll by by,us pc105 - terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll il il pc105 - terminate:ctrl_alt_bksp kazakh kz,us pc105 - terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll lt.baltic lt pc105 - terminate:ctrl_alt_bksp lt.l4 lt pc105 - terminate:ctrl_alt_bksp lt lt pc105 - terminate:ctrl_alt_bksp khmer kh,us pc105 - terminate:ctrl_alt_bksp calamares-3.2.20/src/modules/keyboard/keyboard.conf000066400000000000000000000013211362604102500222300ustar00rootroot00000000000000# NOTE: you must have ckbcomp installed and runnable # on the live system, for keyboard layout previews. --- # The name of the file to write X11 keyboard settings to # The default value is the name used by upstream systemd-localed. # Relative paths are assumed to be relative to /etc/X11/xorg.conf.d xOrgConfFileName: "/etc/X11/xorg.conf.d/00-keyboard.conf" # The path to search for keymaps converted from X11 to kbd format # Leave this empty if the setting does not make sense on your distribution. convertedKeymapPath: "/lib/kbd/keymaps/xkb" # Write keymap configuration to /etc/default/keyboard, usually # found on Debian-related systems. # Defaults to true if nothing is set. #writeEtcDefaultKeyboard: true calamares-3.2.20/src/modules/keyboard/keyboard.qrc000066400000000000000000000002041362604102500220670ustar00rootroot00000000000000 kbd-model-map images/restore.png calamares-3.2.20/src/modules/keyboard/keyboardwidget/000077500000000000000000000000001362604102500225705ustar00rootroot00000000000000calamares-3.2.20/src/modules/keyboard/keyboardwidget/keyboardglobal.cpp000066400000000000000000000126211362604102500262570ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac * Copyright 2019, Adriaan de Groot * * Originally from the Manjaro Installation Framework * by Roland Singer * Copyright (C) 2007 Free Software Foundation, Inc. * * Source by Georg Grabler * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "keyboardglobal.h" #include "utils/Logger.h" #ifdef Q_OS_FREEBSD static const char XKB_FILE[] = "/usr/local/share/X11/xkb/rules/base.lst"; #else static const char XKB_FILE[] = "/usr/share/X11/xkb/rules/base.lst"; #endif // The xkb rules file is made of several "sections". Each section // starts with a line "! ". The static methods here // handle individual sections. /** @brief Scans a file for a named section * * Reads from @p fh incrementally until it finds a section named @p name * or hits end-of-file. Returns true if the section is found. The * @p name must include the "! " section marker as well. */ static bool findSection( QFile& fh, const char* name ) { while ( !fh.atEnd() ) { QByteArray line = fh.readLine(); if ( line.startsWith( name ) ) return true; } return false; } static KeyboardGlobal::ModelsMap parseKeyboardModels( const char* filepath ) { KeyboardGlobal::ModelsMap models; QFile fh( filepath ); fh.open( QIODevice::ReadOnly ); if ( !fh.isOpen() ) { cDebug() << "X11 Keyboard model definitions not found!"; return models; } bool modelsFound = findSection( fh, "! model" ); // read the file until the end or until we break the loop while ( modelsFound && !fh.atEnd() ) { QByteArray line = fh.readLine(); // check if we start a new section if ( line.startsWith( '!' ) ) break; // here we are in the model section, otherwhise we would continue or break QRegExp rx; rx.setPattern( "^\\s+(\\S+)\\s+(\\w.*)\n$" ); // insert into the model map if ( rx.indexIn( line ) != -1 ) { QString modelDesc = rx.cap( 2 ); QString model = rx.cap( 1 ); if ( model == "pc105" ) modelDesc += " - " + QObject::tr( "Default Keyboard Model" ); models.insert( modelDesc, model ); } } return models; } KeyboardGlobal::LayoutsMap parseKeyboardLayouts( const char* filepath ) { KeyboardGlobal::LayoutsMap layouts; //### Get Layouts ###// QFile fh( filepath ); fh.open( QIODevice::ReadOnly ); if ( !fh.isOpen() ) { cDebug() << "X11 Keyboard layout definitions not found!"; return layouts; } bool layoutsFound = findSection( fh, "! layout" ); // read the file until the end or we break the loop while ( layoutsFound && !fh.atEnd() ) { QByteArray line = fh.readLine(); if ( line.startsWith( '!' ) ) break; QRegExp rx; rx.setPattern( "^\\s+(\\S+)\\s+(\\w.*)\n$" ); // insert into the layout map if ( rx.indexIn( line ) != -1 ) { KeyboardGlobal::KeyboardInfo info; info.description = rx.cap( 2 ); info.variants.insert( QObject::tr( "Default" ), "" ); layouts.insert( rx.cap( 1 ), info ); } } fh.reset(); //### Get Variants ###// bool variantsFound = findSection( fh, "! variant" ); // read the file until the end or until we break while ( variantsFound && !fh.atEnd() ) { QByteArray line = fh.readLine(); if ( line.startsWith( '!' ) ) break; QRegExp rx; rx.setPattern( "^\\s+(\\S+)\\s+(\\S+): (\\w.*)\n$" ); // insert into the variants multimap, if the pattern matches if ( rx.indexIn( line ) != -1 ) { if ( layouts.find( rx.cap( 2 ) ) != layouts.end() ) { // in this case we found an entry in the multimap, and add the values to the multimap layouts.find( rx.cap( 2 ) ).value().variants.insert( rx.cap( 3 ), rx.cap( 1 ) ); } else { // create a new map in the multimap - the value was not found. KeyboardGlobal::KeyboardInfo info; info.description = rx.cap( 2 ); info.variants.insert( QObject::tr( "Default" ), "" ); info.variants.insert( rx.cap( 3 ), rx.cap( 1 ) ); layouts.insert( rx.cap( 2 ), info ); } } } return layouts; } KeyboardGlobal::LayoutsMap KeyboardGlobal::getKeyboardLayouts() { return parseKeyboardLayouts( XKB_FILE ); } KeyboardGlobal::ModelsMap KeyboardGlobal::getKeyboardModels() { return parseKeyboardModels( XKB_FILE ); } calamares-3.2.20/src/modules/keyboard/keyboardwidget/keyboardglobal.h000066400000000000000000000031001362604102500257140ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac * Copyright 2017, 2019, Adriaan de Groot * * Originally from the Manjaro Installation Framework * by Roland Singer * Copyright (C) 2007 Free Software Foundation, Inc. * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef KEYBOARDGLOBAL_H #define KEYBOARDGLOBAL_H #include #include #include #include #include #include #include #include #include #include class KeyboardGlobal { public: struct KeyboardInfo { QString description; QMap< QString, QString > variants; }; using LayoutsMap = QMap< QString, KeyboardInfo >; using ModelsMap = QMap< QString, QString >; static LayoutsMap getKeyboardLayouts(); static ModelsMap getKeyboardModels(); }; #endif // KEYBOARDGLOBAL_H calamares-3.2.20/src/modules/keyboard/keyboardwidget/keyboardpreview.cpp000066400000000000000000000225411362604102500265020ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac * Copyright 2018, Adriaan de Groot * * Portions from the Manjaro Installation Framework * by Roland Singer * Copyright (C) 2007 Free Software Foundation, Inc. * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "utils/Logger.h" #include "keyboardpreview.h" KeyBoardPreview::KeyBoardPreview( QWidget* parent ) : QWidget( parent ) , layout( "us" ) , space( 0 ) , usable_width( 0 ) , key_w( 0 ) { setMinimumSize(700, 191); // We must set up the font size in pixels to fit the keys lowerFont = QFont("Helvetica", 10, QFont::DemiBold); lowerFont.setPixelSize(16); upperFont = QFont("Helvetica", 8); upperFont.setPixelSize(13); // Setup keyboard types kbList[KB_104].kb_extended_return = false; kbList[KB_104].keys.append(QList() << 0x29 << 0x2 << 0x3 << 0x4 << 0x5 << 0x6 << 0x7 << 0x8 << 0x9 << 0xa << 0xb << 0xc << 0xd); kbList[KB_104].keys.append(QList() << 0x10 << 0x11 << 0x12 << 0x13 << 0x14 << 0x15 << 0x16 << 0x17 << 0x18 << 0x19 << 0x1a << 0x1b << 0x2b); kbList[KB_104].keys.append(QList() << 0x1e << 0x1f << 0x20 << 0x21 << 0x22 << 0x23 << 0x24 << 0x25 << 0x26 << 0x27 << 0x28); kbList[KB_104].keys.append(QList() << 0x2c << 0x2d << 0x2e << 0x2f << 0x30 << 0x31 << 0x32 << 0x33 << 0x34 << 0x35); kbList[KB_105].kb_extended_return = true; kbList[KB_105].keys.append(QList() << 0x29 << 0x2 << 0x3 << 0x4 << 0x5 << 0x6 << 0x7 << 0x8 << 0x9 << 0xa << 0xb << 0xc << 0xd); kbList[KB_105].keys.append(QList() << 0x10 << 0x11 << 0x12 << 0x13 << 0x14 << 0x15 << 0x16 << 0x17 << 0x18 << 0x19 << 0x1a << 0x1b); kbList[KB_105].keys.append(QList() << 0x1e << 0x1f << 0x20 << 0x21 << 0x22 << 0x23 << 0x24 << 0x25 << 0x26 << 0x27 << 0x28 << 0x2b); kbList[KB_105].keys.append(QList() << 0x54 << 0x2c << 0x2d << 0x2e << 0x2f << 0x30 << 0x31 << 0x32 << 0x33 << 0x34 << 0x35); kbList[KB_106].kb_extended_return = true; kbList[KB_106].keys.append(QList() << 0x29 << 0x2 << 0x3 << 0x4 << 0x5 << 0x6 << 0x7 << 0x8 << 0x9 << 0xa << 0xb << 0xc << 0xd << 0xe); kbList[KB_106].keys.append(QList() << 0x10 << 0x11 << 0x12 << 0x13 << 0x14 << 0x15 << 0x16 << 0x17 << 0x18 << 0x19 << 0x1a << 0x1b); kbList[KB_106].keys.append(QList() << 0x1e << 0x1f << 0x20 << 0x21 << 0x22 << 0x23 << 0x24 << 0x25 << 0x26 << 0x27 << 0x28 << 0x29); kbList[KB_106].keys.append(QList() << 0x2c << 0x2d << 0x2e << 0x2f << 0x30 << 0x31 << 0x32 << 0x33 << 0x34 << 0x35 << 0x36); kb = &kbList[KB_104]; } void KeyBoardPreview::setLayout(QString _layout) { layout = _layout; } void KeyBoardPreview::setVariant(QString _variant) { variant = _variant; if (!loadCodes()) return; loadInfo(); repaint(); } //### //### Private //### void KeyBoardPreview::loadInfo() { // kb_104 if (layout == "us" || layout == "th") kb = &kbList[KB_104]; // kb_106 else if (layout == "jp") kb = &kbList[KB_106]; // most keyboards are 105 key so default to that else kb = &kbList[KB_105]; } bool KeyBoardPreview::loadCodes() { if (layout.isEmpty()) return false; QStringList param; param << "-model" << "pc106" << "-layout" << layout << "-compact"; if (!variant.isEmpty()) param << "-variant" << variant; QProcess process; process.setEnvironment(QStringList() << "LANG=C" << "LC_MESSAGES=C"); process.start("ckbcomp", param); if (!process.waitForStarted()) { cWarning() << "ckbcomp not found , keyboard preview disabled"; return false; } if (!process.waitForFinished()) { cWarning() << "ckbcomp failed, keyboard preview disabled"; return false; } // Clear codes codes.clear(); const QStringList list = QString(process.readAll()).split("\n", QString::SkipEmptyParts); for (const QString &line : list) { if (!line.startsWith("keycode") || !line.contains('=')) continue; QStringList split = line.split('=').at(1).trimmed().split(' '); if (split.size() < 4) continue; Code code; code.plain = fromUnicodeString(split.at(0)); code.shift = fromUnicodeString(split.at(1)); code.ctrl = fromUnicodeString(split.at(2)); code.alt = fromUnicodeString(split.at(3)); if (code.ctrl == code.plain) code.ctrl = ""; if (code.alt == code.plain) code.alt = ""; codes.append(code); } return true; } QString KeyBoardPreview::fromUnicodeString(QString raw) { if (raw.startsWith("U+")) return QChar(raw.mid(2).toInt(nullptr, 16)); else if (raw.startsWith("+U")) return QChar(raw.mid(3).toInt(nullptr, 16)); return ""; } QString KeyBoardPreview::regular_text(int index) { if (index < 0 || index >= codes.size()) return ""; return codes.at(index - 1).plain; } QString KeyBoardPreview::shift_text(int index) { if (index < 0 || index >= codes.size()) return ""; return codes.at(index - 1).shift; } QString KeyBoardPreview::ctrl_text(int index) { if (index < 0 || index >= codes.size()) return ""; return codes.at(index - 1).ctrl; } QString KeyBoardPreview::alt_text(int index) { if (index < 0 || index >= codes.size()) return ""; return codes.at(index - 1).alt; } void KeyBoardPreview::resizeEvent(QResizeEvent *) { space = 6; usable_width = width()-7; key_w = (usable_width - 14 * space)/15; setMaximumHeight(key_w*4 + space*5 + 1); } void KeyBoardPreview::paintEvent(QPaintEvent* event) { QPainter p(this); p.setRenderHint(QPainter::Antialiasing); p.setBrush(QColor(0xd6, 0xd6, 0xd6)); p.drawRect(rect()); QPen pen; pen.setWidth(1); pen.setColor(QColor(0x58, 0x58, 0x58)); p.setPen(pen); p.setBrush(QColor(0x58, 0x58, 0x58)); p.setBackgroundMode(Qt::TransparentMode); p.translate(0.5, 0.5); int rx = 3; int x=6; int y=6; int first_key_w = 0; int remaining_x[] = {0,0,0,0}; int remaining_widths[] = {0,0,0,0}; for (int i = 0; i < 4; i++) { if (first_key_w > 0) { first_key_w = int(first_key_w * 1.375); if (kb == &kbList[KB_105] && i == 3) first_key_w = int(key_w * 1.275); p.drawRoundedRect(QRectF(6, y, first_key_w, key_w), rx, rx); x = 6 + first_key_w + space; } else { first_key_w = key_w; } bool last_end = (i==1 && ! kb->kb_extended_return); int rw=usable_width-x; int ii=0; for (int k : kb->keys.at(i)) { QRectF rect = QRectF(x, y, key_w, key_w); if (ii == kb->keys.at(i).size()-1 && last_end) rect.setWidth(rw); p.drawRoundedRect(rect, rx, rx); rect.adjust(5, 1, 0, 0); p.setPen(QColor(0x9e, 0xde, 0x00)); p.setFont(upperFont); p.drawText(rect, Qt::AlignLeft | Qt::AlignTop, shift_text(k)); rect.setBottom(rect.bottom() - 2.5); p.setPen(QColor(0xff, 0xff, 0xff)); p.setFont(lowerFont); p.drawText(rect, Qt::AlignLeft | Qt::AlignBottom, regular_text(k)); rw = rw - space - key_w; x = x + space + key_w; ii = ii+1; p.setPen(pen); } remaining_x[i] = x; remaining_widths[i] = rw; if (i != 1 && i != 2) p.drawRoundedRect(QRectF(x, y, rw, key_w), rx, rx); y = y + space + key_w; } if (kb->kb_extended_return) { rx=rx*2; int x1 = remaining_x[1]; int y1 = 6 + key_w*1 + space*1; int w1 = remaining_widths[1]; int x2 = remaining_x[2]; int y2 = 6 + key_w*2 + space*2; // this is some serious crap... but it has to be so // maybe one day keyboards won't look like this... // one can only hope QPainterPath pp; pp.moveTo(x1, y1+rx); pp.arcTo(x1, y1, rx, rx, 180, -90); pp.lineTo(x1+w1-rx, y1); pp.arcTo(x1+w1-rx, y1, rx, rx, 90, -90); pp.lineTo(x1+w1, y2+key_w-rx); pp.arcTo(x1+w1-rx, y2+key_w-rx, rx, rx, 0, -90); pp.lineTo(x2+rx, y2+key_w); pp.arcTo(x2, y2+key_w-rx, rx, rx, -90, -90); pp.lineTo(x2, y1+key_w); pp.lineTo(x1+rx, y1+key_w); pp.arcTo(x1, y1+key_w-rx, rx, rx, -90, -90); pp.closeSubpath(); p.drawPath(pp); } else { x= remaining_x[2]; y = 6 + key_w*2 + space*2; p.drawRoundedRect(QRectF(x, y, remaining_widths[2], key_w), rx, rx); } QWidget::paintEvent(event); } calamares-3.2.20/src/modules/keyboard/keyboardwidget/keyboardpreview.h000066400000000000000000000041141362604102500261430ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac * * Portions from the Manjaro Installation Framework * by Roland Singer * Copyright (C) 2007 Free Software Foundation, Inc. * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef KEYBOARDPREVIEW_H #define KEYBOARDPREVIEW_H #include #include #include #include #include #include #include #include #include #include #include class KeyBoardPreview : public QWidget { Q_OBJECT public: explicit KeyBoardPreview( QWidget* parent = nullptr ); void setLayout(QString layout); void setVariant(QString variant); private: enum KB_TYPE { KB_104, KB_105, KB_106 }; struct KB { bool kb_extended_return; QList > keys; }; struct Code { QString plain, shift, ctrl, alt; }; QString layout, variant; QFont lowerFont, upperFont; KB* kb, kbList[3]; QList codes; int space, usable_width, key_w; void loadInfo(); bool loadCodes(); QString regular_text(int index); QString shift_text(int index); QString ctrl_text(int index); QString alt_text(int index); QString fromUnicodeString(QString raw); protected: void paintEvent(QPaintEvent* event); void resizeEvent(QResizeEvent* event); }; #endif // KEYBOARDPREVIEW_H calamares-3.2.20/src/modules/license/000077500000000000000000000000001362604102500174065ustar00rootroot00000000000000calamares-3.2.20/src/modules/license/CMakeLists.txt000066400000000000000000000005201362604102500221430ustar00rootroot00000000000000include_directories( ${PROJECT_BINARY_DIR}/src/libcalamaresui ) calamares_add_plugin( license TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES LicensePage.cpp LicenseViewStep.cpp LicenseWidget.cpp UI LicensePage.ui LINK_PRIVATE_LIBRARIES calamaresui SHARED_LIB ) calamares-3.2.20/src/modules/license/LicensePage.cpp000066400000000000000000000152041362604102500222730ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2015, Anke Boersma * Copyright 2015, Alexandre Arnt * Copyright 2015, Teo Mrnjavac * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "LicensePage.h" #include "LicenseWidget.h" #include "ui_LicensePage.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "ViewManager.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" #include "utils/NamedEnum.h" #include "utils/Retranslator.h" #include "utils/Variant.h" #include #include #include #include #include #include #include #include static const char mustAccept[] = "#acceptFrame { border: 1px solid red;" "background-color: #fff6f6;" "border-radius: 4px;" "padding: 2px; }"; static const char okAccept[] = "#acceptFrame { padding: 3px }"; const NamedEnumTable< LicenseEntry::Type >& LicenseEntry::typeNames() { static const NamedEnumTable< LicenseEntry::Type > names { { QStringLiteral( "software" ), LicenseEntry::Type::Software }, { QStringLiteral( "driver" ), LicenseEntry::Type::Driver }, { QStringLiteral( "gpudriver" ), LicenseEntry::Type::GpuDriver }, { QStringLiteral( "browserplugin" ), LicenseEntry::Type::BrowserPlugin }, { QStringLiteral( "codec" ), LicenseEntry::Type::Codec }, { QStringLiteral( "package" ), LicenseEntry::Type::Package } }; return names; } LicenseEntry::LicenseEntry( const QVariantMap& conf ) { if ( !conf.contains( "id" ) || !conf.contains( "name" ) || !conf.contains( "url" ) ) { return; } m_id = conf[ "id" ].toString(); m_prettyName = conf[ "name" ].toString(); m_prettyVendor = conf.value( "vendor" ).toString(); m_url = QUrl( conf[ "url" ].toString() ); m_required = CalamaresUtils::getBool( conf, "required", false ); m_expand = CalamaresUtils::getBool( conf, "expand", false ); bool ok = false; QString typeString = conf.value( "type", "software" ).toString(); m_type = typeNames().find( typeString, ok ); if ( !ok ) { cWarning() << "License entry" << m_id << "has unknown type" << typeString << "(using 'software')"; } } bool LicenseEntry::isLocal() const { return m_url.isLocalFile(); } LicensePage::LicensePage( QWidget* parent ) : QWidget( parent ) , m_isNextEnabled( false ) , m_allLicensesOptional( false ) , ui( new Ui::LicensePage ) { ui->setupUi( this ); // ui->verticalLayout->insertSpacing( 1, CalamaresUtils::defaultFontHeight() ); CalamaresUtils::unmarginLayout( ui->verticalLayout ); ui->mainText->setWordWrap( true ); ui->mainText->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Minimum ); ui->acceptFrame->setFrameStyle( QFrame::NoFrame | QFrame::Plain ); ui->acceptFrame->setStyleSheet( mustAccept ); ui->acceptFrame->layout()->setMargin( CalamaresUtils::defaultFontHeight() / 2 ); updateGlobalStorage( false ); // Have not agreed yet connect( ui->acceptCheckBox, &QCheckBox::toggled, this, &LicensePage::checkAcceptance ); CALAMARES_RETRANSLATE_SLOT( &LicensePage::retranslate ) } void LicensePage::setEntries( const QList< LicenseEntry >& entriesList ) { CalamaresUtils::clearLayout( ui->licenseEntriesLayout ); m_allLicensesOptional = true; m_entries.clear(); m_entries.reserve( entriesList.count() ); for ( const LicenseEntry& entry : entriesList ) { LicenseWidget* w = new LicenseWidget( entry ); ui->licenseEntriesLayout->addWidget( w ); m_entries.append( w ); m_allLicensesOptional &= !entry.isRequired(); } ui->licenseEntriesLayout->addSpacerItem( new QSpacerItem( 10, 10, QSizePolicy::Minimum, QSizePolicy::Expanding ) ); ui->acceptCheckBox->setChecked( false ); checkAcceptance( false ); } void LicensePage::retranslate() { ui->acceptCheckBox->setText( tr( "I accept the terms and conditions above." ) ); QString review = tr( "Please review the End User License Agreements (EULAs)." ); const auto br = QStringLiteral( "
" ); if ( !m_allLicensesOptional ) { ui->mainText->setText( tr( "This setup procedure will install proprietary " "software that is subject to licensing terms." ) + br + review ); QString mustAcceptText( tr( "If you do not agree with the terms, the setup procedure cannot continue." ) ); ui->acceptCheckBox->setToolTip( mustAcceptText ); } else { ui->mainText->setText( tr( "This setup procedure can install proprietary " "software that is subject to licensing terms " "in order to provide additional features and enhance the user " "experience." ) + br + review ); QString okAcceptText( tr( "If you do not agree with the terms, proprietary software will not " "be installed, and open source alternatives will be used instead." ) ); ui->acceptCheckBox->setToolTip( okAcceptText ); } ui->retranslateUi( this ); for ( const auto& w : m_entries ) { w->retranslateUi(); } } bool LicensePage::isNextEnabled() const { return m_isNextEnabled; } void LicensePage::updateGlobalStorage( bool v ) { Calamares::JobQueue::instance()->globalStorage()->insert( "licenseAgree", v ); } void LicensePage::checkAcceptance( bool checked ) { updateGlobalStorage( checked ); m_isNextEnabled = checked || m_allLicensesOptional; if ( !m_isNextEnabled ) { ui->acceptFrame->setStyleSheet( mustAccept ); } else { ui->acceptFrame->setStyleSheet( okAccept ); } emit nextStatusChanged( m_isNextEnabled ); } calamares-3.2.20/src/modules/license/LicensePage.h000066400000000000000000000057251362604102500217470ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2015, Anke Boersma * Copyright 2015, Alexandre Arnt * Copyright 2015, Teo Mrnjavac * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef LICENSEPAGE_H #define LICENSEPAGE_H #include "utils/NamedEnum.h" #include #include namespace Ui { class LicensePage; } class LicenseWidget; struct LicenseEntry { enum class Type { Software = 0, Driver, GpuDriver, BrowserPlugin, Codec, Package }; /// @brief Lookup table for the enums const NamedEnumTable< Type >& typeNames(); LicenseEntry( const QVariantMap& conf ); LicenseEntry( const LicenseEntry& ) = default; LicenseEntry& operator=( const LicenseEntry& ) = default; bool isValid() const { return !m_id.isEmpty(); } bool isRequired() const { return m_required; } bool isLocal() const; bool expandByDefault() const { return m_expand; } QString m_id; QString m_prettyName; QString m_prettyVendor; Type m_type = Type::Software; QUrl m_url; bool m_required = false; bool m_expand = false; }; class LicensePage : public QWidget { Q_OBJECT public: explicit LicensePage( QWidget* parent = nullptr ); void setEntries( const QList< LicenseEntry >& entriesList ); bool isNextEnabled() const; public slots: /** @brief Check if the user can continue * * The user can continue if * - none of the licenses are required, or * - the user has ticked the "OK" box. * This function calls updateGlobalStorage() as needed, and updates * the appearance of the page as needed. @p checked indicates whether * the checkbox has been ticked or not. (e.g. when @p checked is true, * you can continue regardless) */ void checkAcceptance( bool checked ); void retranslate(); signals: void nextStatusChanged( bool status ); private: /** @brief Update the global storage "licenseAgree" key. */ void updateGlobalStorage( bool v ); bool m_isNextEnabled; bool m_allLicensesOptional; ///< @brief all the licenses passed to setEntries are not-required Ui::LicensePage* ui; QList< LicenseWidget* > m_entries; }; #endif //LICENSEPAGE_H calamares-3.2.20/src/modules/license/LicensePage.ui000066400000000000000000000111741362604102500221300ustar00rootroot00000000000000 LicensePage 0 0 799 400 Form <h1>License Agreement</h1> Qt::AlignCenter 0 0 <Calamares license text> Qt::AlignCenter true Qt::Vertical 20 40 0 0 QFrame::NoFrame Qt::ScrollBarAlwaysOn Qt::ScrollBarAlwaysOff true 0 0 765 89 Qt::Vertical 20 40 0 Qt::Horizontal 1 20 0 0 CheckBox Qt::Horizontal 1 20 calamares-3.2.20/src/modules/license/LicenseViewStep.cpp000066400000000000000000000052501362604102500231650ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2015, Anke Boersma * Copyright 2015, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "LicenseViewStep.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "LicensePage.h" #include "utils/Logger.h" #include CALAMARES_PLUGIN_FACTORY_DEFINITION( LicenseViewStepFactory, registerPlugin< LicenseViewStep >(); ) LicenseViewStep::LicenseViewStep( QObject* parent ) : Calamares::ViewStep( parent ) , m_widget( new LicensePage ) { emit nextStatusChanged( false ); connect( m_widget, &LicensePage::nextStatusChanged, this, &LicenseViewStep::nextStatusChanged ); } LicenseViewStep::~LicenseViewStep() { if ( m_widget && m_widget->parent() == nullptr ) { m_widget->deleteLater(); } } QString LicenseViewStep::prettyName() const { return tr( "License" ); } QWidget* LicenseViewStep::widget() { return m_widget; } bool LicenseViewStep::isNextEnabled() const { return m_widget->isNextEnabled(); } bool LicenseViewStep::isBackEnabled() const { return true; } bool LicenseViewStep::isAtBeginning() const { return true; } bool LicenseViewStep::isAtEnd() const { return true; } QList< Calamares::job_ptr > LicenseViewStep::jobs() const { return QList< Calamares::job_ptr >(); } void LicenseViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { QList< LicenseEntry > entriesList; if ( configurationMap.contains( "entries" ) && configurationMap.value( "entries" ).type() == QVariant::List ) { const auto entries = configurationMap.value( "entries" ).toList(); for ( const QVariant& entryV : entries ) { if ( entryV.type() != QVariant::Map ) { continue; } LicenseEntry entry( entryV.toMap() ); if ( entry.isValid() ) { entriesList.append( entry ); } } } m_widget->setEntries( entriesList ); } calamares-3.2.20/src/modules/license/LicenseViewStep.h000066400000000000000000000033401362604102500226300ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2015, Anke Boersma * Copyright 2015, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef LICENSEPAGEPLUGIN_H #define LICENSEPAGEPLUGIN_H #include #include #include #include #include #include class LicensePage; class PLUGINDLLEXPORT LicenseViewStep : public Calamares::ViewStep { Q_OBJECT public: explicit LicenseViewStep( QObject* parent = nullptr ); virtual ~LicenseViewStep() override; QString prettyName() const override; QWidget* widget() override; bool isNextEnabled() const override; bool isBackEnabled() const override; bool isAtBeginning() const override; bool isAtEnd() const override; QList< Calamares::job_ptr > jobs() const override; void setConfigurationMap( const QVariantMap& configurationMap ) override; private: LicensePage* m_widget; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( LicenseViewStepFactory ) #endif // LICENSEPAGEPLUGIN_H calamares-3.2.20/src/modules/license/LicenseWidget.cpp000066400000000000000000000153651362604102500226520ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2015, Anke Boersma * Copyright 2015, Alexandre Arnt * Copyright 2015, Teo Mrnjavac * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "LicenseWidget.h" #include "utils/Logger.h" #include #include #include #include #include #include static QString loadLocalFile( const QUrl& u ) { if ( !u.isLocalFile() ) { return QString(); } QFile file( u.path() ); if ( !file.open( QIODevice::ReadOnly | QIODevice::Text ) ) { cWarning() << "Could not load license file" << u.path(); return QString(); } return QString( "\n" ) + file.readAll(); } LicenseWidget::LicenseWidget( LicenseEntry entry, QWidget* parent ) : QWidget( parent ) , m_entry( std::move( entry ) ) , m_label( new QLabel( this ) ) , m_viewLicenseButton( new QPushButton( this ) ) , m_licenceTextLabel( new QLabel( this ) ) , m_isExpanded( m_entry.expandByDefault() ) { QPalette pal( palette() ); pal.setColor( QPalette::Background, palette().window().color().lighter( 108 ) ); setObjectName( "licenseItem" ); setAutoFillBackground( true ); setPalette( pal ); setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Minimum ); setContentsMargins( 4, 4, 4, 4 ); QVBoxLayout* vLayout = new QVBoxLayout; QWidget* topPart = new QWidget( this ); topPart->setSizePolicy( QSizePolicy::Minimum, QSizePolicy::Minimum ); vLayout->addWidget( topPart ); QHBoxLayout* wiLayout = new QHBoxLayout; topPart->setLayout( wiLayout ); m_label->setWordWrap( true ); m_label->setSizePolicy( QSizePolicy::Minimum, QSizePolicy::Minimum ); wiLayout->addWidget( m_label ); wiLayout->addSpacing( 10 ); m_viewLicenseButton->setSizePolicy( QSizePolicy::Minimum, QSizePolicy::Fixed ); wiLayout->addWidget( m_viewLicenseButton ); m_licenceTextLabel->setStyleSheet( "border-top: 1px solid black; margin-top: 0px; padding-top: 1em;" ); m_licenceTextLabel->setObjectName( "licenseItemFullText" ); if ( m_entry.isLocal() ) { m_fullTextContents = loadLocalFile( m_entry.m_url ); showLocalLicenseText(); connect( m_viewLicenseButton, &QAbstractButton::clicked, this, &LicenseWidget::expandClicked ); } else { m_licenceTextLabel->setText( tr( "URL: %1" ).arg( m_entry.m_url.toDisplayString() ) ); connect( m_viewLicenseButton, &QAbstractButton::clicked, this, &LicenseWidget::viewClicked ); } m_licenceTextLabel->setSizePolicy( QSizePolicy::Minimum, QSizePolicy::Minimum ); vLayout->addWidget( m_licenceTextLabel ); setLayout( vLayout ); retranslateUi(); } LicenseWidget::~LicenseWidget() {} void LicenseWidget::retranslateUi() { QString productDescription; switch ( m_entry.m_type ) { case LicenseEntry::Type::Driver: //: %1 is an untranslatable product name, example: Creative Audigy driver productDescription = tr( "%1 driver
" "by %2" ) .arg( m_entry.m_prettyName ) .arg( m_entry.m_prettyVendor ); break; case LicenseEntry::Type::GpuDriver: //: %1 is usually a vendor name, example: Nvidia graphics driver productDescription = tr( "%1 graphics driver
" "by %2" ) .arg( m_entry.m_prettyName ) .arg( m_entry.m_prettyVendor ); break; case LicenseEntry::Type::BrowserPlugin: productDescription = tr( "%1 browser plugin
" "by %2" ) .arg( m_entry.m_prettyName ) .arg( m_entry.m_prettyVendor ); break; case LicenseEntry::Type::Codec: productDescription = tr( "%1 codec
" "by %2" ) .arg( m_entry.m_prettyName ) .arg( m_entry.m_prettyVendor ); break; case LicenseEntry::Type::Package: productDescription = tr( "%1 package
" "by %2" ) .arg( m_entry.m_prettyName ) .arg( m_entry.m_prettyVendor ); break; case LicenseEntry::Type::Software: productDescription = tr( "%1
" "by %2" ) .arg( m_entry.m_prettyName ) .arg( m_entry.m_prettyVendor ); } m_label->setText( productDescription ); updateExpandToolTip(); } void LicenseWidget::showLocalLicenseText() { if ( m_isExpanded ) { m_licenceTextLabel->setText( m_fullTextContents ); } else { QString fileName = m_entry.m_url.toDisplayString(); if ( fileName.startsWith( "file:" ) ) { fileName = fileName.remove( 0, 5 ); } m_licenceTextLabel->setText( tr( "File: %1" ).arg( fileName ) ); } } void LicenseWidget::expandClicked() { m_isExpanded = !m_isExpanded; // Show/hide based on the new arrow direction. if ( !m_fullTextContents.isEmpty() ) { showLocalLicenseText(); } updateExpandToolTip(); } /** @brief Called on retranslate and when button state changes. */ void LicenseWidget::updateExpandToolTip() { if ( m_entry.isLocal() ) { m_viewLicenseButton->setText( m_isExpanded ? tr( "Hide license text" ) : tr( "Show the license text" ) ); } else { m_viewLicenseButton->setText( tr( "Open license agreement in browser." ) ); } } void LicenseWidget::viewClicked() { QDesktopServices::openUrl( m_entry.m_url ); } calamares-3.2.20/src/modules/license/LicenseWidget.h000066400000000000000000000032551362604102500223120ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2015, Anke Boersma * Copyright 2015, Alexandre Arnt * Copyright 2015, Teo Mrnjavac * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef LICENSE_LICENSEWIDGET_H #define LICENSE_LICENSEWIDGET_H #include "LicensePage.h" #include #include class QPushButton; class LicenseWidget : public QWidget { public: LicenseWidget( LicenseEntry e, QWidget* parent = nullptr ); virtual ~LicenseWidget() override; void retranslateUi(); private: void showLocalLicenseText(); // Display (or hide) the local license text void expandClicked(); // "slot" to toggle show/hide of local license text void viewClicked(); // "slot" to open link void updateExpandToolTip(); LicenseEntry m_entry; QLabel* m_label; QPushButton* m_viewLicenseButton; QLabel* m_licenceTextLabel; QString m_fullTextContents; bool m_isExpanded; }; #endif calamares-3.2.20/src/modules/license/README.md000066400000000000000000000016571362604102500206760ustar00rootroot00000000000000### License Approval Module --------- For distributions shipping proprietary software, this module creates a globalstorage entry when the user accepts or declines one or more presented End User License Agreements files. The number of licenses shown are configurable. The license.conf file has a few examples of how to add URLs. If you do not want to include this module in your Calamares build, add ```-DSKIP_MODULES="license"``` to your build settings (CMake call). How to implement the removal or not installing of proprietary software is up to any distribution to implement. For example, proprietary graphics drivers cannot simply be removed in the packages module, a free version will need to be installed. An example of where the licenseAgree globalstorage entry is used: https://github.com/KaOSx/calamares/blob/master/src/modules/nonfree_drivers/main.py ![License Page](http://wstaw.org/m/2015/09/14/Screenshot_20150914_113333.png) calamares-3.2.20/src/modules/license/license.conf000066400000000000000000000047471362604102500217130ustar00rootroot00000000000000# Configuration file for License viewmodule, Calamares # Syntax is YAML 1.2 --- # Define a list of licenses which may / must be accepted before continuing. # # Each entry in this list has the following keys: # - id Entry identifier, must be unique. Not user visible. YAML: string. # - name Pretty name for the software product, user visible and untranslatable. YAML: string. # - vendor Pretty name for the software vendor, user visible and untranslatable. YAML: string, optional, default is empty. # - type Package type identifier for presentation, not user visible but affects user visible strings. YAML: string. # values: driver, gpudriver, browserplugin, codec, package, software; optional, default is software. # - required If set to true, the user cannot proceed without accepting this license. YAML: boolean, optional, default is false. # - url A URL for the license; a remote URL is not shown in Calamares, but a link # to the URL is provided, which opens in the default web browser. A local # URL (i.e. file:///) assumes that the contents are HTML or plain text, and # displays the license in-line. YAML: string, mandatory. # - expand A boolean value only relevant for **local** URLs. If true, # the license text is displayed in "expanded" form by # default, rather than requiring the user to first open it up. # YAML: boolean, optional, default is false. entries: - id: nvidia name: Nvidia vendor: Nvidia Corporation type: driver url: http://developer.download.nvidia.com/cg/Cg_3.0/license.pdf required: false - id: amd name: Catalyst vendor: "Advanced Micro Devices, Inc." type: gpudriver url: http://support.amd.com/en-us/download/eula required: false - id: flashplugin name: Adobe Flash vendor: Adobe Systems Incorporated type: browserplugin url: http://www.adobe.com/products/eulas/pdfs/PlatformClients_PC_WWEULA_Combined_20100108_1657.pdf required: true # This example uses a file: link. This example uses a relative link, which # is relative to where you run Calamares. Assuming you run it from build/ # as part of your testing, you'll get the LICENSE text for Calamares # (which is the text of the GPLv3, not proprietary at all). - id: mine_mine name: Calamares Proprietary License vendor: Calamares, Inc. type: software required: true url: file:../LICENSE expand: true calamares-3.2.20/src/modules/locale/000077500000000000000000000000001362604102500172235ustar00rootroot00000000000000calamares-3.2.20/src/modules/locale/CMakeLists.txt000066400000000000000000000017371362604102500217730ustar00rootroot00000000000000# When debugging the timezone widget, add this debugging definition # to have a debugging-friendly timezone widget, debug logging, # and no intrusive timezone-setting while clicking around. option( DEBUG_TIMEZONES "Debug-friendly timezone widget." OFF ) if( DEBUG_TIMEZONES ) add_definitions( -DDEBUG_TIMEZONES ) endif() include_directories( ${PROJECT_BINARY_DIR}/src/libcalamaresui ) calamares_add_plugin( locale TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES ${geoip_src} LCLocaleDialog.cpp LocaleConfiguration.cpp LocalePage.cpp LocaleViewStep.cpp SetTimezoneJob.cpp timezonewidget/timezonewidget.cpp timezonewidget/localeglobal.cpp UI RESOURCES locale.qrc LINK_PRIVATE_LIBRARIES calamaresui Qt5::Network ${geoip_libs} yamlcpp SHARED_LIB ) calamares_add_test( localetest SOURCES Tests.cpp LocaleConfiguration.cpp ) calamares-3.2.20/src/modules/locale/LCLocaleDialog.cpp000066400000000000000000000064321362604102500224720ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac * Copyright 2017, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "LCLocaleDialog.h" #include #include #include #include #include LCLocaleDialog::LCLocaleDialog( const QString& guessedLCLocale, const QStringList& localeGenLines, QWidget* parent ) : QDialog( parent ) { setModal( true ); setWindowTitle( tr( "System locale setting" ) ); QBoxLayout* mainLayout = new QVBoxLayout; setLayout( mainLayout ); QLabel* upperText = new QLabel( this ); upperText->setWordWrap( true ); upperText->setText( tr( "The system locale setting affects the language and character " "set for some command line user interface elements.
" "The current setting is %1." ) .arg( guessedLCLocale ) ); mainLayout->addWidget( upperText ); setMinimumWidth( upperText->fontMetrics().height() * 24 ); m_localesWidget = new QListWidget( this ); m_localesWidget->addItems( localeGenLines ); m_localesWidget->setSelectionMode( QAbstractItemView::SingleSelection ); mainLayout->addWidget( m_localesWidget ); int selected = -1; for ( int i = 0; i < localeGenLines.count(); ++i ) { if ( localeGenLines[ i ].contains( guessedLCLocale ) ) { selected = i; break; } } QDialogButtonBox* dbb = new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, this ); dbb->button( QDialogButtonBox::Cancel )->setText( tr( "&Cancel" ) ); dbb->button( QDialogButtonBox::Ok )->setText( tr( "&OK" ) ); mainLayout->addWidget( dbb ); connect( dbb->button( QDialogButtonBox::Ok ), &QPushButton::clicked, this, &QDialog::accept ); connect( dbb->button( QDialogButtonBox::Cancel ), &QPushButton::clicked, this, &QDialog::reject ); connect( m_localesWidget, &QListWidget::itemDoubleClicked, this, &QDialog::accept ); connect( m_localesWidget, &QListWidget::itemSelectionChanged, [this, dbb]() { if ( m_localesWidget->selectedItems().isEmpty() ) { dbb->button( QDialogButtonBox::Ok )->setEnabled( false ); } else { dbb->button( QDialogButtonBox::Ok )->setEnabled( true ); } } ); if ( selected > -1 ) { m_localesWidget->setCurrentRow( selected ); } } QString LCLocaleDialog::selectedLCLocale() { return m_localesWidget->selectedItems().first()->text(); } calamares-3.2.20/src/modules/locale/LCLocaleDialog.h000066400000000000000000000023211362604102500221300ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef LCLOCALEDIALOG_H #define LCLOCALEDIALOG_H #include class QListWidget; class LCLocaleDialog : public QDialog { Q_OBJECT public: explicit LCLocaleDialog( const QString& guessedLCLocale, const QStringList& localeGenLines, QWidget* parent = nullptr ); QString selectedLCLocale(); private: QListWidget* m_localesWidget; }; #endif // LCLOCALEDIALOG_H calamares-3.2.20/src/modules/locale/LocaleConfiguration.cpp000066400000000000000000000265111362604102500236630ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2016, Teo Mrnjavac * Copyright 2017-2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "LocaleConfiguration.h" #include "utils/Logger.h" #include #include LocaleConfiguration::LocaleConfiguration() : explicit_lang( false ) , explicit_lc( false ) { } LocaleConfiguration::LocaleConfiguration( const QString& localeName, const QString& formatsName ) : LocaleConfiguration() { lc_numeric = lc_time = lc_monetary = lc_paper = lc_name = lc_address = lc_telephone = lc_measurement = lc_identification = formatsName; (void)setLanguage( localeName ); } void LocaleConfiguration::setLanguage( const QString& localeName ) { QString language = localeName.split( '_' ).first(); m_languageLocaleBcp47 = QLocale( language ).bcp47Name().toLower(); m_lang = localeName; } LocaleConfiguration LocaleConfiguration::fromLanguageAndLocation( const QString& languageLocale, const QStringList& availableLocales, const QString& countryCode ) { QString language = languageLocale.split( '_' ).first(); // Either an exact match, or the whole language part matches // (followed by . or _ QStringList linesForLanguage = availableLocales.filter( QRegularExpression( language + "[._]" ) ); QString lang; if ( linesForLanguage.length() == 0 || languageLocale.isEmpty() ) { lang = "en_US.UTF-8"; } else if ( linesForLanguage.length() == 1 ) { lang = linesForLanguage.first(); } // lang could still be empty if we found multiple locales that satisfy myLanguage // The following block was inspired by Ubiquity, scripts/localechooser-apply. // No copyright statement found in file, assuming GPL v2 or later. /* # In the special cases of Portuguese and Chinese, selecting a # different location may imply a different dialect of the language. # In such cases, make LANG reflect the selected language (for # messages, character types, and collation) and make the other # locale categories reflect the selected location. */ if ( language == "pt" || language == "zh" ) { QString proposedLocale = QString( "%1_%2" ).arg( language ).arg( countryCode ); foreach ( QString line, linesForLanguage ) { if ( line.contains( proposedLocale ) ) { lang = line; break; } } } // If we found no good way to set a default lang, do a search with the whole // language locale and pick the first result, if any. if ( lang.isEmpty() ) { for ( const QString& line : availableLocales ) { if ( line.startsWith( languageLocale ) ) { lang = line; break; } } } // Else we have an unrecognized or unsupported locale, all we can do is go with // en_US.UTF-8 UTF-8. This completes all default language setting guesswork. if ( lang.isEmpty() ) { lang = "en_US.UTF-8"; } // The following block was inspired by Ubiquity, scripts/localechooser-apply. // No copyright statement found in file, assuming GPL v2 or later. /* # It is relatively common for the combination of language and location (as # selected on the timezone page) not to identify a supported combined # locale. For example, this happens when the user is a migrant, or when # they prefer to use a different language to interact with their computer # because that language is better-supported. # # In such cases, we would like to be able to use a locale reflecting the # selected language in LANG for messages, character types, and collation, # and to make the other locale categories reflect the selected location. # This means that we have to guess at a suitable locale for the selected # location, and we do not want to ask yet another locale-related question. # Nevertheless, some cases are ambiguous: a user who has asked for the # English language and identifies their location as Switzerland will get # different numeric representation depending on which Swiss locale we pick. # # The goal of identifying a reasonable default for migrants makes things # easier: it is reasonable to default to French for France despite the # existence of several minority languages there, because anyone who prefers # those languages will probably already have selected them and won't arrive # here. However, in some cases we're unsure, and in some cases we actively # don't want to pick a "preferred" language: selecting either Greek or # Turkish as the default language for migrants to Cyprus would probably # offend somebody! In such cases we simply punt to the old behaviour of not # setting up a locale reflecting the location, which is suboptimal but is at # least unlikely to give offence. # # Our best shot at general criteria for selecting a default language in # these circumstances are as follows: # # * Exclude special-purpose (e.g. en_DK) and artificial (e.g. la_AU, # tlh_GB) locales. # * If there is a language specific to or very strongly associated with the # country in question, prefer it unless it has rather few native # speakers. # * Exclude minority languages that are relatively unlikely to be spoken by # migrants who have not already selected them as their preferred language # earlier in the installer. # * If there is an official national language likely to be seen in print # media, road signs, etc., then prefer that. # * In cases of doubt, selecting no default language is safe. */ // We make a proposed locale based on the UI language and the timezone's country. There is no // guarantee that this will be a valid, supported locale (often it won't). QString lc_formats; QString combined = QString( "%1_%2" ).arg( language ).arg( countryCode ); // We look up if it's a supported locale. for ( const QString& line : availableLocales ) { if ( line.startsWith( combined ) ) { lang = line; lc_formats = line; break; } } if ( lc_formats.isEmpty() ) { QStringList available; for ( const QString& line : availableLocales ) { if ( line.contains( QString( "_%1" ).arg( countryCode ) ) ) { available.append( line ); } } available.sort(); if ( available.count() == 1 ) { lc_formats = available.first(); } else { QMap< QString, QString > countryToDefaultLanguage { { "AU", "en" }, { "CN", "zh" }, { "DE", "de" }, { "DK", "da" }, { "DZ", "ar" }, { "ES", "es" }, // Somewhat unclear: Oromo has the greatest number of // native speakers; English is the most widely spoken // language and taught in secondary schools; Amharic is // the official language and was taught in primary // schools. { "ET", "am" }, { "FI", "fi" }, { "FR", "fr" }, { "GB", "en" }, // Irish (Gaelic) is strongly associated with Ireland, // but nearly all its native speakers also speak English, // and migrants are likely to use English. { "IE", "en" }, { "IT", "it" }, { "MA", "ar" }, { "MK", "mk" }, { "NG", "en" }, { "NL", "nl" }, { "NZ", "en" }, { "IL", "he" }, // Filipino is a de facto version of Tagalog, which is // also spoken; English is also an official language. { "PH", "fil" }, { "PK", "ur" }, { "PL", "pl" }, { "RU", "ru" }, // Chinese has more speakers, but English is the "common // language of the nation" (Wikipedia) and official // documents must be translated into English to be // accepted. { "SG", "en" }, { "SN", "wo" }, { "TR", "tr" }, { "TW", "zh" }, { "UA", "uk" }, { "US", "en" }, { "ZM", "en" } }; if ( countryToDefaultLanguage.contains( countryCode ) ) { QString combinedLocale = QString( "%1_%2" ).arg( countryToDefaultLanguage.value( countryCode ) ).arg( countryCode ); for ( const QString& line : availableLocales ) { if ( line.startsWith( combinedLocale ) ) { lc_formats = line; break; } } } } } // If we cannot make a good choice for a given country we go with the LANG // setting, which defaults to en_US.UTF-8 UTF-8 if all else fails. if ( lc_formats.isEmpty() ) { lc_formats = lang; } return LocaleConfiguration( lang, lc_formats ); } bool LocaleConfiguration::isEmpty() const { return m_lang.isEmpty() && lc_numeric.isEmpty() && lc_time.isEmpty() && lc_monetary.isEmpty() && lc_paper.isEmpty() && lc_name.isEmpty() && lc_address.isEmpty() && lc_telephone.isEmpty() && lc_measurement.isEmpty() && lc_identification.isEmpty(); } /// @brief Sets @p value on @p key in the @p map if @p value is non-empty static inline void add_lc( QMap< QString, QString >& map, const char* key, const QString& value ) { if ( !value.isEmpty() ) { map.insert( key, value ); } } QMap< QString, QString > LocaleConfiguration::toMap() const { QMap< QString, QString > map; add_lc( map, "LANG", m_lang ); add_lc( map, "LC_NUMERIC", lc_numeric ); add_lc( map, "LC_TIME", lc_time ); add_lc( map, "LC_MONETARY", lc_monetary ); add_lc( map, "LC_PAPER", lc_paper ); add_lc( map, "LC_NAME", lc_name ); add_lc( map, "LC_ADDRESS", lc_address ); add_lc( map, "LC_TELEPHONE", lc_telephone ); add_lc( map, "LC_MEASUREMENT", lc_measurement ); add_lc( map, "LC_IDENTIFICATION", lc_identification ); return map; } calamares-3.2.20/src/modules/locale/LocaleConfiguration.h000066400000000000000000000053131362604102500233250ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2016, Teo Mrnjavac * Copyright 2017-2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef LOCALECONFIGURATION_H #define LOCALECONFIGURATION_H #include #include #include class LocaleConfiguration { public: /// @brief Create an empty locale, with nothing set explicit LocaleConfiguration(); /// @brief Create a locale with everything set to the given @p localeName explicit LocaleConfiguration( const QString& localeName /* "en_US.UTF-8" */ ) : LocaleConfiguration( localeName, localeName ) { } /// @brief Create a locale with language and formats separate explicit LocaleConfiguration( const QString& localeName, const QString& formatsName ); static LocaleConfiguration fromLanguageAndLocation( const QString& language, const QStringList& availableLocales, const QString& countryCode ); bool isEmpty() const; /** @brief sets lang and the BCP47 representation * * Note that the documentation how this works is in packages.conf */ void setLanguage( const QString& localeName ); QString language() const { return m_lang; } // Note that the documentation how this works is in packages.conf QString toBcp47() const { return m_languageLocaleBcp47; } QMap< QString, QString > toMap() const; // These become all uppercase in locale.conf, but we keep them lowercase here to // avoid confusion with locale.h. QString lc_numeric, lc_time, lc_monetary, lc_paper, lc_name, lc_address, lc_telephone, lc_measurement, lc_identification; // If the user has explicitly selected language (from the dialog) // or numbers format, set these to avoid implicit changes to them. bool explicit_lang, explicit_lc; private: QString m_lang; QString m_languageLocaleBcp47; }; inline QDebug& operator<<( QDebug& s, const LocaleConfiguration& l ) { return s << l.language() << '(' << l.toBcp47() << ") +" << l.lc_numeric; } #endif // LOCALECONFIGURATION_H calamares-3.2.20/src/modules/locale/LocalePage.cpp000066400000000000000000000411341362604102500217260ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2016, Teo Mrnjavac * Copyright 2017-2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "LocalePage.h" #include "SetTimezoneJob.h" #include "timezonewidget/timezonewidget.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "LCLocaleDialog.h" #include "Settings.h" #include "locale/Label.h" #include "locale/TimeZone.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" #include "utils/Retranslator.h" #include #include #include #include #include LocalePage::LocalePage( QWidget* parent ) : QWidget( parent ) , m_regionList( CalamaresUtils::Locale::TZRegion::fromZoneTab() ) , m_regionModel( std::make_unique< CalamaresUtils::Locale::CStringListModel >( m_regionList ) ) , m_blockTzWidgetSet( false ) { QBoxLayout* mainLayout = new QVBoxLayout; QBoxLayout* tzwLayout = new QHBoxLayout; mainLayout->addLayout( tzwLayout ); m_tzWidget = new TimeZoneWidget( this ); tzwLayout->addStretch(); tzwLayout->addWidget( m_tzWidget ); tzwLayout->addStretch(); setMinimumWidth( m_tzWidget->width() ); QBoxLayout* bottomLayout = new QHBoxLayout; mainLayout->addLayout( bottomLayout ); m_regionLabel = new QLabel( this ); bottomLayout->addWidget( m_regionLabel ); m_regionCombo = new QComboBox( this ); bottomLayout->addWidget( m_regionCombo ); m_regionCombo->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ); m_regionLabel->setBuddy( m_regionCombo ); bottomLayout->addSpacing( 20 ); m_zoneLabel = new QLabel( this ); bottomLayout->addWidget( m_zoneLabel ); m_zoneCombo = new QComboBox( this ); m_zoneCombo->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ); bottomLayout->addWidget( m_zoneCombo ); m_zoneLabel->setBuddy( m_zoneCombo ); mainLayout->addStretch(); QBoxLayout* localeLayout = new QHBoxLayout; m_localeLabel = new QLabel( this ); m_localeLabel->setWordWrap( true ); m_localeLabel->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ); localeLayout->addWidget( m_localeLabel ); m_localeChangeButton = new QPushButton( this ); m_localeChangeButton->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Preferred ); localeLayout->addWidget( m_localeChangeButton ); mainLayout->addLayout( localeLayout ); QBoxLayout* formatsLayout = new QHBoxLayout; m_formatsLabel = new QLabel( this ); m_formatsLabel->setWordWrap( true ); m_formatsLabel->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ); formatsLayout->addWidget( m_formatsLabel ); m_formatsChangeButton = new QPushButton( this ); m_formatsChangeButton->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Preferred ); formatsLayout->addWidget( m_formatsChangeButton ); mainLayout->addLayout( formatsLayout ); setLayout( mainLayout ); connect( m_regionCombo, QOverload< int >::of( &QComboBox::currentIndexChanged ), this, &LocalePage::regionChanged ); connect( m_zoneCombo, QOverload< int >::of( &QComboBox::currentIndexChanged ), this, &LocalePage::zoneChanged ); connect( m_tzWidget, &TimeZoneWidget::locationChanged, this, &LocalePage::locationChanged ); connect( m_localeChangeButton, &QPushButton::clicked, this, &LocalePage::changeLocale ); connect( m_formatsChangeButton, &QPushButton::clicked, this, &LocalePage::changeFormats ); CALAMARES_RETRANSLATE_SLOT( &LocalePage::updateLocaleLabels ) } LocalePage::~LocalePage() { qDeleteAll( m_regionList ); } void LocalePage::updateLocaleLabels() { m_regionLabel->setText( tr( "Region:" ) ); m_zoneLabel->setText( tr( "Zone:" ) ); m_localeChangeButton->setText( tr( "&Change..." ) ); m_formatsChangeButton->setText( tr( "&Change..." ) ); LocaleConfiguration lc = m_selectedLocaleConfiguration.isEmpty() ? guessLocaleConfiguration() : m_selectedLocaleConfiguration; auto labels = prettyLocaleStatus( lc ); m_localeLabel->setText( labels.first ); m_formatsLabel->setText( labels.second ); } void LocalePage::init( const QString& initialRegion, const QString& initialZone, const QString& localeGenPath ) { using namespace CalamaresUtils::Locale; m_regionCombo->setModel( m_regionModel.get() ); m_regionCombo->currentIndexChanged( m_regionCombo->currentIndex() ); auto* region = m_regionList.find< TZRegion >( initialRegion ); if ( region && region->zones().find< TZZone >( initialZone ) ) { m_tzWidget->setCurrentLocation( initialRegion, initialZone ); } else { m_tzWidget->setCurrentLocation( "America", "New_York" ); } // Some distros come with a meaningfully commented and easy to parse locale.gen, // and others ship a separate file /usr/share/i18n/SUPPORTED with a clean list of // supported locales. We first try that one, and if it doesn't exist, we fall back // to parsing the lines from locale.gen m_localeGenLines.clear(); QFile supported( "/usr/share/i18n/SUPPORTED" ); QByteArray ba; if ( supported.exists() && supported.open( QIODevice::ReadOnly | QIODevice::Text ) ) { ba = supported.readAll(); supported.close(); const auto lines = ba.split( '\n' ); for ( const QByteArray& line : lines ) { m_localeGenLines.append( QString::fromLatin1( line.simplified() ) ); } } else { QFile localeGen( localeGenPath ); if ( localeGen.open( QIODevice::ReadOnly | QIODevice::Text ) ) { ba = localeGen.readAll(); localeGen.close(); } else { cWarning() << "Cannot open file" << localeGenPath << ". Assuming the supported languages are already built into " "the locale archive."; QProcess localeA; localeA.start( "locale", QStringList() << "-a" ); localeA.waitForFinished(); ba = localeA.readAllStandardOutput(); } const auto lines = ba.split( '\n' ); for ( const QByteArray& line : lines ) { if ( line.startsWith( "## " ) || line.startsWith( "# " ) || line.simplified() == "#" ) { continue; } QString lineString = QString::fromLatin1( line.simplified() ); if ( lineString.startsWith( "#" ) ) { lineString.remove( '#' ); } lineString = lineString.simplified(); if ( lineString.isEmpty() ) { continue; } m_localeGenLines.append( lineString ); } } if ( m_localeGenLines.isEmpty() ) { cWarning() << "cannot acquire a list of available locales." << "The locale and localecfg modules will be broken as long as this " "system does not provide" << "\n\t " << "* a well-formed" << supported.fileName() << "\n\tOR" << "* a well-formed" << ( localeGenPath.isEmpty() ? QLatin1String( "/etc/locale.gen" ) : localeGenPath ) << "\n\tOR" << "* a complete pre-compiled locale-gen database which allows complete locale -a output."; return; // something went wrong and there's nothing we can do about it. } // Assuming we have a list of supported locales, we usually only want UTF-8 ones // because it's not 1995. auto notUtf8 = []( const QString& s ) { return !s.contains( "UTF-8", Qt::CaseInsensitive ) && !s.contains( "utf8", Qt::CaseInsensitive ); }; auto it = std::remove_if( m_localeGenLines.begin(), m_localeGenLines.end(), notUtf8 ); m_localeGenLines.erase( it, m_localeGenLines.end() ); // We strip " UTF-8" from "en_US.UTF-8 UTF-8" because it's redundant redundant. // Also simplify whitespace. auto unredundant = []( QString& s ) { if ( s.endsWith( " UTF-8" ) ) { s.chop( 6 ); } s = s.simplified(); }; std::for_each( m_localeGenLines.begin(), m_localeGenLines.end(), unredundant ); updateGlobalStorage(); } std::pair< QString, QString > LocalePage::prettyLocaleStatus( const LocaleConfiguration& lc ) const { using CalamaresUtils::Locale::Label; Label lang( lc.language(), Label::LabelFormat::AlwaysWithCountry ); Label num( lc.lc_numeric, Label::LabelFormat::AlwaysWithCountry ); return std::make_pair< QString, QString >( tr( "The system language will be set to %1." ).arg( lang.label() ), tr( "The numbers and dates locale will be set to %1." ).arg( num.label() ) ); } QString LocalePage::prettyStatus() const { QString status; status += tr( "Set timezone to %1/%2.
" ).arg( m_regionCombo->currentText() ).arg( m_zoneCombo->currentText() ); LocaleConfiguration lc = m_selectedLocaleConfiguration.isEmpty() ? guessLocaleConfiguration() : m_selectedLocaleConfiguration; auto labels = prettyLocaleStatus( lc ); status += labels.first + "
"; status += labels.second + "
"; return status; } Calamares::JobList LocalePage::createJobs() { QList< Calamares::job_ptr > list; const CalamaresUtils::Locale::TZZone* location = m_tzWidget->currentLocation(); Calamares::Job* j = new SetTimezoneJob( location->region(), location->zone() ); list.append( Calamares::job_ptr( j ) ); return list; } QMap< QString, QString > LocalePage::localesMap() { return m_selectedLocaleConfiguration.isEmpty() ? guessLocaleConfiguration().toMap() : m_selectedLocaleConfiguration.toMap(); } void LocalePage::onActivate() { m_regionCombo->setFocus(); if ( m_selectedLocaleConfiguration.isEmpty() || !m_selectedLocaleConfiguration.explicit_lang ) { auto newLocale = guessLocaleConfiguration(); m_selectedLocaleConfiguration.setLanguage( newLocale.language() ); updateGlobalLocale(); updateLocaleLabels(); } } LocaleConfiguration LocalePage::guessLocaleConfiguration() const { return LocaleConfiguration::fromLanguageAndLocation( QLocale().name(), m_localeGenLines, m_tzWidget->currentLocation()->country() ); } void LocalePage::updateGlobalLocale() { auto* gs = Calamares::JobQueue::instance()->globalStorage(); const QString bcp47 = m_selectedLocaleConfiguration.toBcp47(); gs->insert( "locale", bcp47 ); } void LocalePage::updateGlobalStorage() { auto* gs = Calamares::JobQueue::instance()->globalStorage(); const auto* location = m_tzWidget->currentLocation(); bool locationChanged = ( location->region() != gs->value( "locationRegion" ) ) || ( location->zone() != gs->value( "locationZone" ) ); gs->insert( "locationRegion", location->region() ); gs->insert( "locationZone", location->zone() ); updateGlobalLocale(); // If we're in chroot mode (normal install mode), then we immediately set the // timezone on the live system. When debugging timezones, don't bother. #ifndef DEBUG_TIMEZONES if ( locationChanged && Calamares::Settings::instance()->doChroot() ) { QProcess::execute( "timedatectl", // depends on systemd { "set-timezone", location->region() + '/' + location->zone() } ); } #endif // Preserve those settings that have been made explicit. auto newLocale = guessLocaleConfiguration(); if ( !m_selectedLocaleConfiguration.isEmpty() && m_selectedLocaleConfiguration.explicit_lang ) { newLocale.setLanguage( m_selectedLocaleConfiguration.language() ); } if ( !m_selectedLocaleConfiguration.isEmpty() && m_selectedLocaleConfiguration.explicit_lc ) { newLocale.lc_numeric = m_selectedLocaleConfiguration.lc_numeric; newLocale.lc_time = m_selectedLocaleConfiguration.lc_time; newLocale.lc_monetary = m_selectedLocaleConfiguration.lc_monetary; newLocale.lc_paper = m_selectedLocaleConfiguration.lc_paper; newLocale.lc_name = m_selectedLocaleConfiguration.lc_name; newLocale.lc_address = m_selectedLocaleConfiguration.lc_address; newLocale.lc_telephone = m_selectedLocaleConfiguration.lc_telephone; newLocale.lc_measurement = m_selectedLocaleConfiguration.lc_measurement; newLocale.lc_identification = m_selectedLocaleConfiguration.lc_identification; } newLocale.explicit_lang = m_selectedLocaleConfiguration.explicit_lang; newLocale.explicit_lc = m_selectedLocaleConfiguration.explicit_lc; m_selectedLocaleConfiguration = newLocale; updateLocaleLabels(); } void LocalePage::regionChanged( int currentIndex ) { using namespace CalamaresUtils::Locale; Q_UNUSED( currentIndex ) QString selectedRegion = m_regionCombo->currentData().toString(); TZRegion* region = m_regionList.find< TZRegion >( selectedRegion ); if ( !region ) { return; } m_zoneCombo->blockSignals( true ); m_zoneCombo->setModel( new CStringListModel( region->zones() ) ); m_zoneCombo->blockSignals( false ); m_zoneCombo->currentIndexChanged( m_zoneCombo->currentIndex() ); } void LocalePage::zoneChanged( int currentIndex ) { Q_UNUSED( currentIndex ) if ( !m_blockTzWidgetSet ) m_tzWidget->setCurrentLocation( m_regionCombo->currentData().toString(), m_zoneCombo->currentData().toString() ); updateGlobalStorage(); } void LocalePage::locationChanged( const CalamaresUtils::Locale::TZZone* location ) { m_blockTzWidgetSet = true; // Set region index int index = m_regionCombo->findData( location->region() ); if ( index < 0 ) { return; } m_regionCombo->setCurrentIndex( index ); // Set zone index index = m_zoneCombo->findData( location->zone() ); if ( index < 0 ) { return; } m_zoneCombo->setCurrentIndex( index ); m_blockTzWidgetSet = false; updateGlobalStorage(); } void LocalePage::changeLocale() { LCLocaleDialog* dlg = new LCLocaleDialog( m_selectedLocaleConfiguration.isEmpty() ? guessLocaleConfiguration().language() : m_selectedLocaleConfiguration.language(), m_localeGenLines, this ); dlg->exec(); if ( dlg->result() == QDialog::Accepted && !dlg->selectedLCLocale().isEmpty() ) { m_selectedLocaleConfiguration.setLanguage( dlg->selectedLCLocale() ); m_selectedLocaleConfiguration.explicit_lang = true; this->updateGlobalLocale(); this->updateLocaleLabels(); } dlg->deleteLater(); } void LocalePage::changeFormats() { LCLocaleDialog* dlg = new LCLocaleDialog( m_selectedLocaleConfiguration.isEmpty() ? guessLocaleConfiguration().lc_numeric : m_selectedLocaleConfiguration.lc_numeric, m_localeGenLines, this ); dlg->exec(); if ( dlg->result() == QDialog::Accepted && !dlg->selectedLCLocale().isEmpty() ) { // TODO: improve the granularity of this setting. m_selectedLocaleConfiguration.lc_numeric = dlg->selectedLCLocale(); m_selectedLocaleConfiguration.lc_time = dlg->selectedLCLocale(); m_selectedLocaleConfiguration.lc_monetary = dlg->selectedLCLocale(); m_selectedLocaleConfiguration.lc_paper = dlg->selectedLCLocale(); m_selectedLocaleConfiguration.lc_name = dlg->selectedLCLocale(); m_selectedLocaleConfiguration.lc_address = dlg->selectedLCLocale(); m_selectedLocaleConfiguration.lc_telephone = dlg->selectedLCLocale(); m_selectedLocaleConfiguration.lc_measurement = dlg->selectedLCLocale(); m_selectedLocaleConfiguration.lc_identification = dlg->selectedLCLocale(); m_selectedLocaleConfiguration.explicit_lc = true; this->updateLocaleLabels(); } dlg->deleteLater(); } calamares-3.2.20/src/modules/locale/LocalePage.h000066400000000000000000000055701362604102500213770ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef LOCALEPAGE_H #define LOCALEPAGE_H #include "LocaleConfiguration.h" #include "timezonewidget/localeglobal.h" #include "Job.h" #include "locale/TimeZone.h" #include #include class QComboBox; class QLabel; class QPushButton; class TimeZoneWidget; class LocalePage : public QWidget { Q_OBJECT public: explicit LocalePage( QWidget* parent = nullptr ); virtual ~LocalePage(); void init( const QString& initialRegion, const QString& initialZone, const QString& localeGenPath ); QString prettyStatus() const; Calamares::JobList createJobs(); QMap< QString, QString > localesMap(); void onActivate(); private: LocaleConfiguration guessLocaleConfiguration() const; // For the given locale config, return two strings describing // the settings for language and numbers. std::pair< QString, QString > prettyLocaleStatus( const LocaleConfiguration& ) const; /** @brief Update the GS *locale* key with the selected system language. * * This uses whatever is set in m_selectedLocaleConfiguration as the language, * and writes it to GS *locale* key (as a string, in BCP47 format). */ void updateGlobalLocale(); void updateGlobalStorage(); void updateLocaleLabels(); void regionChanged( int currentIndex ); void zoneChanged( int currentIndex ); void locationChanged( const CalamaresUtils::Locale::TZZone* location ); void changeLocale(); void changeFormats(); // Dynamically, QList< TZRegion* > CalamaresUtils::Locale::CStringPairList m_regionList; std::unique_ptr< CalamaresUtils::Locale::CStringListModel > m_regionModel; TimeZoneWidget* m_tzWidget; QComboBox* m_regionCombo; QComboBox* m_zoneCombo; QLabel* m_regionLabel; QLabel* m_zoneLabel; QLabel* m_localeLabel; QPushButton* m_localeChangeButton; QLabel* m_formatsLabel; QPushButton* m_formatsChangeButton; LocaleConfiguration m_selectedLocaleConfiguration; QStringList m_localeGenLines; bool m_blockTzWidgetSet; }; #endif // LOCALEPAGE_H calamares-3.2.20/src/modules/locale/LocaleViewStep.cpp000066400000000000000000000130221362604102500226130ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2016, Teo Mrnjavac * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "LocaleViewStep.h" #include "LocalePage.h" #include "timezonewidget/localeglobal.h" #include "widgets/WaitingWidget.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "geoip/Handler.h" #include "network/Manager.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" #include "utils/Variant.h" #include "utils/Yaml.h" #include #include #include CALAMARES_PLUGIN_FACTORY_DEFINITION( LocaleViewStepFactory, registerPlugin< LocaleViewStep >(); ) LocaleViewStep::LocaleViewStep( QObject* parent ) : Calamares::ViewStep( parent ) , m_widget( new QWidget() ) , m_actualWidget( nullptr ) , m_nextEnabled( false ) , m_geoip( nullptr ) { QBoxLayout* mainLayout = new QHBoxLayout; m_widget->setLayout( mainLayout ); CalamaresUtils::unmarginLayout( mainLayout ); emit nextStatusChanged( m_nextEnabled ); } LocaleViewStep::~LocaleViewStep() { if ( m_widget && m_widget->parent() == nullptr ) { m_widget->deleteLater(); } } void LocaleViewStep::setUpPage() { if ( !m_actualWidget ) { m_actualWidget = new LocalePage(); } m_actualWidget->init( m_startingTimezone.first, m_startingTimezone.second, m_localeGenPath ); m_widget->layout()->addWidget( m_actualWidget ); m_nextEnabled = true; emit nextStatusChanged( m_nextEnabled ); } void LocaleViewStep::fetchGeoIpTimezone() { if ( m_geoip && m_geoip->isValid() ) { m_startingTimezone = m_geoip->get(); if ( !m_startingTimezone.isValid() ) { cWarning() << "GeoIP lookup at" << m_geoip->url() << "failed."; } } } QString LocaleViewStep::prettyName() const { return tr( "Location" ); } QString LocaleViewStep::prettyStatus() const { return m_prettyStatus; } QWidget* LocaleViewStep::widget() { return m_widget; } bool LocaleViewStep::isNextEnabled() const { return m_nextEnabled; } bool LocaleViewStep::isBackEnabled() const { return true; } bool LocaleViewStep::isAtBeginning() const { return true; } bool LocaleViewStep::isAtEnd() const { return true; } Calamares::JobList LocaleViewStep::jobs() const { return m_jobs; } void LocaleViewStep::onActivate() { if ( !m_actualWidget ) { setUpPage(); } m_actualWidget->onActivate(); } void LocaleViewStep::onLeave() { if ( m_actualWidget ) { m_jobs = m_actualWidget->createJobs(); m_prettyStatus = m_actualWidget->prettyStatus(); auto map = m_actualWidget->localesMap(); QVariantMap vm; for ( auto it = map.constBegin(); it != map.constEnd(); ++it ) { vm.insert( it.key(), it.value() ); } Calamares::JobQueue::instance()->globalStorage()->insert( "localeConf", vm ); } else { m_jobs.clear(); Calamares::JobQueue::instance()->globalStorage()->remove( "localeConf" ); } } void LocaleViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { QString region = CalamaresUtils::getString( configurationMap, "region" ); QString zone = CalamaresUtils::getString( configurationMap, "zone" ); if ( !region.isEmpty() && !zone.isEmpty() ) { m_startingTimezone = CalamaresUtils::GeoIP::RegionZonePair( region, zone ); } else { m_startingTimezone = CalamaresUtils::GeoIP::RegionZonePair( QStringLiteral( "America" ), QStringLiteral( "New_York" ) ); } m_localeGenPath = CalamaresUtils::getString( configurationMap, "localeGenPath" ); if ( m_localeGenPath.isEmpty() ) { m_localeGenPath = QStringLiteral( "/etc/locale.gen" ); } bool ok = false; QVariantMap geoip = CalamaresUtils::getSubMap( configurationMap, "geoip", ok ); if ( ok ) { QString url = CalamaresUtils::getString( geoip, "url" ); QString style = CalamaresUtils::getString( geoip, "style" ); QString selector = CalamaresUtils::getString( geoip, "selector" ); m_geoip = std::make_unique< CalamaresUtils::GeoIP::Handler >( style, url, selector ); if ( !m_geoip->isValid() ) { cWarning() << "GeoIP Style" << style << "is not recognized."; } } } Calamares::RequirementsList LocaleViewStep::checkRequirements() { LocaleGlobal::init(); if ( m_geoip && m_geoip->isValid() ) { auto& network = CalamaresUtils::Network::Manager::instance(); if ( network.hasInternet() ) { fetchGeoIpTimezone(); } else { if ( network.synchronousPing( m_geoip->url() ) ) { fetchGeoIpTimezone(); } } } return Calamares::RequirementsList(); } calamares-3.2.20/src/modules/locale/LocaleViewStep.h000066400000000000000000000045161362604102500222700ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2016, Teo Mrnjavac * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef LOCALEVIEWSTEP_H #define LOCALEVIEWSTEP_H #include "geoip/Handler.h" #include "geoip/Interface.h" #include "utils/PluginFactory.h" #include "viewpages/ViewStep.h" #include "DllMacro.h" #include #include #include class LocalePage; class PLUGINDLLEXPORT LocaleViewStep : public Calamares::ViewStep { Q_OBJECT public: explicit LocaleViewStep( QObject* parent = nullptr ); virtual ~LocaleViewStep() override; QString prettyName() const override; QString prettyStatus() const override; QWidget* widget() override; bool isNextEnabled() const override; bool isBackEnabled() const override; bool isAtBeginning() const override; bool isAtEnd() const override; Calamares::JobList jobs() const override; void onActivate() override; void onLeave() override; void setConfigurationMap( const QVariantMap& configurationMap ) override; /// @brief Do setup (returns empty list) asynchronously virtual Calamares::RequirementsList checkRequirements() override; private slots: void setUpPage(); private: void fetchGeoIpTimezone(); QWidget* m_widget; LocalePage* m_actualWidget; bool m_nextEnabled; QString m_prettyStatus; CalamaresUtils::GeoIP::RegionZonePair m_startingTimezone; QString m_localeGenPath; Calamares::JobList m_jobs; std::unique_ptr< CalamaresUtils::GeoIP::Handler > m_geoip; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( LocaleViewStepFactory ) #endif // LOCALEVIEWSTEP_H calamares-3.2.20/src/modules/locale/SetTimezoneJob.cpp000066400000000000000000000065511362604102500226370ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac * Copyright 2015, Rohan Garg * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include #include "GlobalStorage.h" #include "JobQueue.h" #include "Settings.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include #include SetTimezoneJob::SetTimezoneJob( const QString& region, const QString& zone ) : Calamares::Job() , m_region( region ) , m_zone( zone ) { } QString SetTimezoneJob::prettyName() const { return tr( "Set timezone to %1/%2" ).arg( m_region ).arg( m_zone ); } Calamares::JobResult SetTimezoneJob::exec() { // do not call timedatectl in a chroot, it is not safe (timedatectl talks // to a running timedated over D-Bus), and we have code that works if ( !Calamares::Settings::instance()->doChroot() ) { int ec = CalamaresUtils::System::instance()->targetEnvCall( { "timedatectl", "set-timezone", m_region + '/' + m_zone } ); if ( !ec ) { return Calamares::JobResult::ok(); } } QString localtimeSlink( "/etc/localtime" ); QString zoneinfoPath( "/usr/share/zoneinfo" ); zoneinfoPath.append( QDir::separator() + m_region ); zoneinfoPath.append( QDir::separator() + m_zone ); Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); QFileInfo zoneFile( gs->value( "rootMountPoint" ).toString() + zoneinfoPath ); if ( !zoneFile.exists() || !zoneFile.isReadable() ) return Calamares::JobResult::error( tr( "Cannot access selected timezone path." ), tr( "Bad path: %1" ).arg( zoneFile.absolutePath() ) ); // Make sure /etc/localtime doesn't exist, otherwise symlinking will fail CalamaresUtils::System::instance()->targetEnvCall( { "rm", "-f", localtimeSlink } ); int ec = CalamaresUtils::System::instance()->targetEnvCall( { "ln", "-s", zoneinfoPath, localtimeSlink } ); if ( ec ) return Calamares::JobResult::error( tr( "Cannot set timezone." ), tr( "Link creation failed, target: %1; link name: %2" ).arg( zoneinfoPath ).arg( "/etc/localtime" ) ); QFile timezoneFile( gs->value( "rootMountPoint" ).toString() + "/etc/timezone" ); if ( !timezoneFile.open( QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate ) ) return Calamares::JobResult::error( tr( "Cannot set timezone," ), tr( "Cannot open /etc/timezone for writing" ) ); QTextStream out( &timezoneFile ); out << m_region << '/' << m_zone << "\n"; timezoneFile.close(); return Calamares::JobResult::ok(); } calamares-3.2.20/src/modules/locale/SetTimezoneJob.h000066400000000000000000000022131362604102500222730ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef SETTIMEZONEJOB_H #define SETTIMEZONEJOB_H #include class SetTimezoneJob : public Calamares::Job { Q_OBJECT public: SetTimezoneJob( const QString& region, const QString& zone ); QString prettyName() const override; Calamares::JobResult exec() override; private: QString m_region; QString m_zone; }; #endif /* SETTIMEZONEJOB_H */ calamares-3.2.20/src/modules/locale/Tests.cpp000066400000000000000000000045731362604102500210420ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "Tests.h" #include "LocaleConfiguration.h" #include QTEST_GUILESS_MAIN( LocaleTests ) LocaleTests::LocaleTests() {} LocaleTests::~LocaleTests() {} void LocaleTests::initTestCase() { } void LocaleTests::testEmptyLocaleConfiguration() { LocaleConfiguration lc; QVERIFY( lc.isEmpty() ); QCOMPARE( lc.toBcp47(), QString() ); } void LocaleTests::testDefaultLocaleConfiguration() { LocaleConfiguration lc( "en_US.UTF-8" ); QVERIFY( !lc.isEmpty() ); QCOMPARE( lc.language(), QStringLiteral( "en_US.UTF-8" ) ); QCOMPARE( lc.toBcp47(), QStringLiteral( "en" ) ); LocaleConfiguration lc2( "de_DE.UTF-8" ); QVERIFY( !lc2.isEmpty() ); QCOMPARE( lc2.language(), QStringLiteral( "de_DE.UTF-8" ) ); QCOMPARE( lc2.toBcp47(), QStringLiteral( "de" ) ); } void LocaleTests::testSplitLocaleConfiguration() { LocaleConfiguration lc( "en_US.UTF-8", "de_DE.UTF-8" ); QVERIFY( !lc.isEmpty() ); QCOMPARE( lc.language(), QStringLiteral( "en_US.UTF-8" ) ); QCOMPARE( lc.toBcp47(), QStringLiteral( "en" ) ); QCOMPARE( lc.lc_numeric, QStringLiteral( "de_DE.UTF-8" ) ); LocaleConfiguration lc2( "de_DE.UTF-8", "da_DK.UTF-8" ); QVERIFY( !lc2.isEmpty() ); QCOMPARE( lc2.language(), QStringLiteral( "de_DE.UTF-8" ) ); QCOMPARE( lc2.toBcp47(), QStringLiteral( "de" ) ); QCOMPARE( lc2.lc_numeric, QStringLiteral( "da_DK.UTF-8" ) ); LocaleConfiguration lc3( "da_DK.UTF-8", "de_DE.UTF-8" ); QVERIFY( !lc3.isEmpty() ); QCOMPARE( lc3.toBcp47(), QStringLiteral( "da" ) ); QCOMPARE( lc3.lc_numeric, QStringLiteral( "de_DE.UTF-8" ) ); } calamares-3.2.20/src/modules/locale/Tests.h000066400000000000000000000022501362604102500204750ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef TESTS_H #define TESTS_H #include class LocaleTests : public QObject { Q_OBJECT public: LocaleTests(); ~LocaleTests() override; private Q_SLOTS: void initTestCase(); // Check the sample config file is processed correctly void testEmptyLocaleConfiguration(); void testDefaultLocaleConfiguration(); void testSplitLocaleConfiguration(); }; #endif calamares-3.2.20/src/modules/locale/images/000077500000000000000000000000001362604102500204705ustar00rootroot00000000000000calamares-3.2.20/src/modules/locale/images/bg.png000066400000000000000000005260221362604102500215750ustar00rootroot00000000000000‰PNG  IHDR T_,ŸgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“ pHYs × ×B(›x€IDATxÚìýçwÚÙ–6Šöy¿qι羧»ßîÞ±ªœme $DÎ9ƒ$DÎ9£œ%2ÊY²]{×®;×Z€,»\e»Êµ·ÆXƒ1~aÍùÌô<ÿÆÐÄ8†ô/])ÞÄì¨Ô7®q'f>ásÞ¿Œ–._AWEðW¤>ûWp3 m|Dè†ïú"‡`H³´‰1y€®Žr _ä+àÌPá)Ã_è÷“³4,t151î—9Kðùp~à(˜ÚÄ—ø øL¸ £²]õ¥®,š" _ñ¥ö^Ã"ìˆ/÷ùl}rDèd±Ïgé’°ÆU‘/óùÈ"Éü4Eð ݨ¿šEþ’ ®ò˜€¤Ÿ0à éöÖ}H‚½Ðý¿ðÜÆ,yl=ù€ÿ¸óç½ð’þe@Rüw’P&‰¦ú² iø$=€¤ô’@Òo’~Ò¸³»y3¼Ž*õƒ{nƒ¡;+ѵ’ï[Ïì|r÷Q<€¤~d$ÉýIzI é$=€¤ß1Hú|ðH‚£`î ý1 énrè6X¹wÝ€=7còEêåÓLmœ©Mt­8 –/ô_ÕzÜ!÷â§;hé$ý $‘‹cxI¿uØö’@ÒHzIŸÒð1Hâ§6Cãª(Eü¡Lҧ܃¤Î'¿!¼’ü‰üj ÷ˆÝð"C……Õ†£tUö!,x‚Wîº=Â;Yš8Scjc,-AQwS 'Ý6I_Â=€¤¯&“ô;Ip£’ é$=€¤ô¯”IÿGŸ¼‹$Ú‚ÝN«Ü</ªèzE‹†#7PÄ^&ùŠV~å½ ’>X]‡@ S‡²>$t“ÒÄIŠˆ¡Ž£)Â|GÛ ÷*Uêy†„ž!‘gP躇Åx‰<Ã"òˆÖ< ÑÛ†%^ª,H‘FeÁ1y˜¦ÄàIc´¾"A~\ˆ!\…Ä—zI éó¤àï$É@ÒHzI é}9z¸Êè Ï8î`ù¹»ñ jQ¼ƒH.§FÐbt-üOpü1œ5AoÆÿD ƒ£OÒ”¡±žÃÇ¢"OiáN¢•ËAÏSwÀÍÇ€'’F1H"&©ÕHÔFmx”h?¶a'„ô‘Àô+C ’REFå!@6€oè(K Šm˜ocËír£_¬õ¨'ý2ƒ—#·M˜ƒ¾P–ŲGtÓA½9dsÅÍθÂè§IC;U䓸Æ$žQ‰—0k,œ‚ÒØ†ä ÀÁÄ ‰4€ö|ÒHzI éWè’|I é$ý@ÒOvá°.Ñ'¹†ÌßAWÇØº@ZtàŸô6\ð÷Ùï ’…ÑC`LT1* ‰¼"ïÈG‘øáy¿Ð3(òR$d¬åA†*B•zùvø&ÎÍP…¿¨«¥o¡¥{3L(ÿÁ™A IæÇ³±^X^Z GgOËô‚eûp‘.‚À¥.1ȳÙ'¿–üxbÓ?—7zIÿ*=I ’Œ é$=€¤ô’>±ôwšo0tÐÅ9út?ÏF MF0Hû= Ýh ÜÃBCäjÃ<]ˆ¥ ²T†Ò?ÈwöòcRŸ|2ªµ&¥QšÌ£šŽOº2:k’©ðÁ™‚%òôql/è¦a*†2H“û ¯/ºK¯Ûüs&WZc‰k¦£SŽÄÜâV¥RËçªÙl9_¨$Òk¥'Yhlïìï4·+µdfuk³x~x¸ßlneKË+ùÅålfn3[˜¶‡D*ËÛØÏ6Q†Ô:ijPEÎa¾u“¢24ÑnÓÄ;ýÔìw©ýái2ôˆ{zQÅžqE='@\JCµ?uT<™ÐÙfXšp/Ï)ÐCñÅô܆7<;¿°žË77²¥By»\­–·«¥êÁÎîÎv­T¨ìÔê¹­‚Ùux•R¥R¬TËåÃæîÅññA³™IÏ&ãéÜæf<žr8¼ÉXÒïÄ"Ép(¥V—W×W6*…R£Z«–*¹ÍÜ" ¥¥Õ…ùeX¥|ñ°ÑØ\]Qì|¥*´Ž¬ÃçSªå¨"ÌÐ㺅“Ú3ýžtÚO¦ô€¤ X¤±Œ*<õy3ƒW ©"è+ÈëŸõt=€¤ô’@Òï$u{Ç®ÞäV±‰‰S2$Âжº…XðD¡H"ï õS¥>š"ð„¢ê]hÚ™ØÜ*fæÖfçÖšµÆnc`ÁþÎîánsfvÅdÌ/®\½>=¾:9Þ®l E€G—ÇGGG'ûûG»{çG‡g‡×'ÇoÎNàÍõj}qaÕj÷N™ìÉÄ €’ÜV®R(.-®–‹¯72È1÷r¬}\GÏ9 ôµ:u4 ¼Z?éôD™êKƒŸÕí(ô¿ªØM“HºpƈÔ?"ñ =ý|÷¸ÌÃS{¹*ŸÚœ4Xâ"­G5é·{©Ì €!|åb¾TÈ•Ä{$>ç ¦Ýþ¤/”9=8€ÃÙoì\ŸŸã<;<„³[Ål~¿Ñ(æò…­Üñþ>œëÓ“³ƒ’g‚Gü'p*áÉÅÉñåÉÑÕÉÉÕ)<9†?ÜZÛ(låÕêâüÊúZvqq=Y „gE:ߨ"ˆÆâP¯Ò=IµVô’@ÒW ’ºlSª»yJ”hIâ;Ç&²3£¢Hý/ÙŽ!¡[9QLÆ%Žažùɨá1Å0ÈÔçs¥ËããZe{·Ñp°¿Ó(pr°~tp~xxq|/–‹ådj±V­&€¯\ïíîîÂóü À#xr²÷öðÿîïì4kõƒfà€‰+Ž/ŽáñòøÀæ ™ƒ%br$tV8Ÿ~Ò©C ¸C÷¶ûûž®³ŸïìçÙúZñ\`²{8ÖÇ£ÆAsL +ýÎàBbfÃY¶ûçE†pÛú×lzfõòôøíåyµ¼=¿°îô%`mnäà0¯äÁób¾ ÐpuyËá‰UKUx„Yptp pºà¿à 9|8äÑÉA'í §7ççð¥ß_œ¿>?»>=½:=¹<9'?\]þøý›ß\ýøúâ‡ËÓ³ýf21«4ºGÄî}@gò®«­Š©¹½ÚœL$óÔéU¿7Ëø’~óL|ŰÀI•ú!>i/?ù'…,‰ü7EìCø_/åöÛnÞyób×’øð”¥k”¼>D„’¬¿¯LR›”dæ$=€¤ô’>$±ïo6ꤛ„‹^ åÛ¡‰0ÄK¶ý%ËÞñsÕ5Ïl·²õr ÐÀÆF>_¦ð§£‰ùõõìÂÂZn«îü:8râø[pCÔ|xØÆ èxý £Î‹÷,€Mf!HÑFN<‘'ð¿G»»oÎNÿq}y¼Ó£}3 Ì£5,ò½`Y^2&9¦q±¯vKt¥Ñ+RYƒ‘ÌìÜŠr"@˜]Þ˜Éc(<ƒ÷3úT4¹øã÷Wo/NâÔ·ë3óîмPë¥ð§xJû¤-¼¾–Ý©5ffWœ¾øÒÒz¥T®+{&‚DG€{PÒèx"=÷×>>97 Π¥“ý½Óý½‹££Óýf£R©W+…l~a~9•šM§ææç–ÖWÖs›Ù|6_Ê6×ÖÁ¸Æè)­<…m`\ñtT? °£ôžÌ7&óÑp+U›–)Úš¼CÝôÝÌLˆS =TxCÁðIú -¾ ­²igÝé¼³£q¦ð§ ÉZŸfè<¦k+Û˜„Þúsa.&“Wþ¼üð›ï g’àfæ›_]Yß\ßÊndɹ)kX¬ó°•†2Ô®Ó%:ÍL é‹Z¤çª¸¥x“@jmgް"ñU„‡¥AùtÊ_u†—…Iº:~ÃÏ®KñŒ)±)£°Îq ­ÖÃn¨ôû‰L¢ÓÄGåQEð/ÆÚ ½"€G:Æ>"5Õ~C†‹l#z$O:¦’‹ÎpŠœ „]àŸò&f†6D±†ÓçŸ'=€¤ô’þY@ÜCpf(8EáN£.éJ¡«#ýB_/ÏóŠçƤD>µ9±±žOήc‹…\¥R¬r¥ji»±]ÜÓªsíî¾¹8ßÛ®6·· z¸7?D@é¾<>~{qŽÛ·w>Càgô„|ûv¹ârùyb “¯cI_ñ‡ÆåOùê|7¬|1>ÑÇšîg£5ÄÔ.Ì-\Ÿ ¦Ÿ“c€q©äŒÎh AQ£Zëü`ø¯ï/ÏgÒs Õ€òƒÉ}v²¼²±º²u~txzxðn2ìòõZú¨èÝ#½>=­•Ës3óJUP;üø œ«# ÷;áPÜfóêžH«ÔL§’³¹-@ð9ð†ß\M[“?‰A’"„àg¨£¨ø¢ øb+¾è <*LqŠØýtÜô’aêaN‰´n\Ÿ_X¯–ª»ãý½«À:goÎOv÷±Lq+÷úüô¢íÎLt°B§É|ð÷çåB9“YÜXËîl×?7€#LV.TVVÖSéÅhlÆáðNO»B¡D&=‹&­V×[ó|L÷œ>ù—Aåz¥è•>øKŸ4K]â>qò“‚¼¹8Û©n/Ì.l®má&ñ6C8o·^;=<¸óûIÓôéþý?4Z‘f£OI_‚N#5ŒÞnz•ºÙv¹¬3L[lÞ­õÍó÷—×g§dbîOÆ9œÿzÊdj¢ñÌÙþnµXœ›]:?Ø«•+ÉÔüÚÊ9-¤HþãõÕõé1œ‹+ÂVØÇd>BëÐfœú}€¤›ßÙBévºåæ `ˆÀƒE‚Mqg§Ü¬O™ŸŸD†ÂOZ¤éÖþ#a »›n÷«aÛ&0Ë|¢ûððÖYX4‘°ø-þ¥hz=‘Y Å5–¸ÈRM'êȘ2„Z q1tp‹½ϨHêpF0š2‚‚Çð˜<<®Œp-cò™Fs^¨! ÐÏsh¦žàÌÂÂøæ\®b´'¿£{& :•YÇ ¢\¨nn6Ösó káè¬ÕöSW0‘˜Ég‹[›…b¡´¾–Ý.oß)6¨–«ÜLn®göv/Ú]Ûƒ*Z-.®• ¥Æv >§^© xsz‹¥9ÒÉ!–î›É½=£(zFåNWxvv)Ëp¥¦¦¢R(tè®g ‰¥ÓƒÖY÷¯%9¤.ô ;¨>'u¾ñþŠ$N­NýûõåÕéÉ >.Ô½¾¿}vÖ¨n³Ú¿>§:½‘j©üú ½.Á›ó³Ó”1‚'¯Ïp©±5?xçóxw/M›,^¥Þ1È6¾dš†…7bœú½d’ÞGñu§I…‰×•ø†øöQ¼T‰ïfáWFe>Š tó ÿ?oɃ‰o€o‡mˆŒÞû]òm„Dè¬c%cØ]ÃuÏ(MU„¥¦¤Ü”l ö®²ÿ»Ä”špÍ3UA†Ü©3G<¡¹IGœ¯q‹ôA¡>ÈRâ\‹< žL8‚Kx÷Ș<4¦@D¬"ŸÎ‘Y\-&gsLÄ”¿“Oúx_O:ïéÜèÈCp]Xú”Á9?¿\XY/›| ˆÍN‹<4$òÒä>¹)6éÊ,®šÝ\®*ÐGûùîQYp3ѳ´‰÷U?e@®Ü'¨7ÜðIzI é«Ï$Á•‚‰J JFh¼Ñô€'Dpƒ,K„* 0Uþr©Z."æÃFµÞ¬í|HtØlN9(º—tC/]OšÜT.[Ø®l— åB®¸°°¦p™ìÚF­TäšáBCûû¯ÏNß^ž¡¾™£Ãf½®Ò;¨ÍúÚVff)‘œ››_©Wk§û? öÑØ?ÿúü0“Zo6,úŸW‚ÿz%úï1…£‹'gšÛµ½Z-Ožìí¾=¯ß<ØAÌL'ï|Ë{AÏþû¦Ï¾ÆENx KáÇ«ÓÓtj–Ê«tæzµúúìøòø1­À®Äa²¥ýf³Yo “ƒ*§»õre&=Ë“N<Q£&4ø$ú-×ò[‚¤iÚí@ "WG0G÷8ø~&Å|?1†*6N¢äøC­' ÄpAÆýðŠÐÉB`åÖbt­{þWƒ¹>2“„1æ2Õ$îŒ)Â`x†¸Àgk£,-à€ ]ÖÛgõÖ”b*Î5Ä%Ê󡃬XG2ò†æ’™µÍÍ"Ä*ÑäRzv-3·ê Θ\išÜ?(tó´~»&_6»ÓkŠ®ê확µÒV¶zÐܽ:9lÔMˆŽ9Hïþ,Äé’;„BbÊdæs‹+ù)ÏNVý`´'S³ëáÔªÅ;+ŸŒŽ]`¨±õ/IA^»ÜÖI§2ÔQ–P© &âú É‹r€#•ÑQE[ê‘oŸv&öê;¤‚Ü¢ÃM`Ç lÛÜ,è-q*öp„0ìJâ/‡J¤×sÑêúÐg¶&û@Ò?+HŠ<€¤ßHêÞØ7f™³4RÕø VÆÒcÈìÒ5‰C`Kz,†Œ« »3xúlumk»T½Ûst&¦T¨¬­fÓ3«T¾©Ÿ©çÉ­O†åÿñ„û”ª`I¦%jç8W;ÆÕò–^šâÿø#•ÊÕéM^í¤G¨43E\ÙÔ¤%°¸¸Q¯l<ªWkG-ŽÄý{éï9C­ÇhîêÕé67ò…|I7øK¿ô¯Cšç4CϘrÒìÏof/QÃ5¡Mãr°ßéÿÁFë 0·±µWo\c@Ù9€ CÁÈúÊúÁN@ÒÊòj293;»°S­¶²j½åéˆôÃ4"rwÄ Íu#¤wGÛ~“rÛí–³‹“pÁ£"2D 22°STExúM`©ÓžYÙdôkú%ËÚÏwÇpΘ\³±gPà—û†EHapDâ£HcpÔ¤êD`âíZ& g m…Ï»-5‹ôñ IŸ`iârSÌê‹&Wm¾YùT”*vÙ|3³ €––—³¾È‚Ζ0Ø“49"¸SFƔɻ(›NM:Òbcô%ÇÑ˱½bšû8–^Ö´Äà%V‚ñeÙD„¯ øc‹ÑÔr$±œœYvgF„Ž!8dû9ËöŠmïã»)Øþ0ZÍÝÉÏ—IjW[ ‰É_Pnkƒ$r¹c8ÿTšÁøR>_½r°‡+Ñhᱡ1ˆjí}⊞"ñD¦#œ%7O*}Z+7jKW…©$} ó’2I ég€¤NôsH­O¡¹ØËÒÄÀ04 ¾1­´Ì ŒIT¼£¡§" >CeŠè-ᙹÕB¾¼¾–½j'îäxÀÜüp}qy|lqDÌŽÈÎvÃêNüO˜&4Íί®¬åÌ6ÿÄ´ÇHyƒ)®ÂölX¥ö›»—''?\_þøÃÛ¿¿~{~†‰”Ž/ºz¨ßm s†Æ¬KÁO*ËË+›¾Pš-3÷1 (ÚWŒ)ðåÏiz¥ÖÜÜ.¿>=9?<:ÚÝ=ÞÛÝÚØ\ZXÜo4þuRGï⤫ÓÒ»}ÚÕx~âõõüÜ¢Þ`ކcjÙí ùýQ“Å«Ÿò2ÅæWŒI°_p ã…àBú-·»oõ–Æ0†Að¿4XÊ WIl 'F‘¬²wXìU[’è¢Ñ– Ç—w›Ç{{əم¬Ù“¡¬Á³Ù‚f::3·Q(TVrØ2 §I÷œÖšajÐøn i¥ÓÚ?ý…eÖè\P[g†8îGùd„Ýÿ˜": ö¿à8±MØSklm-·¿³kóÎ0^ÅD°l/׉{ #ãê°;¼´´š×X“=ð¢ÜÏP‡G$~ƒ#S)ÕjÕÅå­f­±ºš“ƒ£à§'ãÓÏèÓ/XÖŽ*%EÕ0äi õ´xîpûÛ𤋆´'uÖ=¹œ÷û§–#ÄD$·¨ÔH“‡ÀÐq”n§/UÈ•ööI§c­R[]ÙJ¥¡´Ç—\XX39b#@Vp¢€€©¸E©s‡œ}Çœþ¬ôטF˜:òÙ?9íH9à €¤ÎÑásû’~â&Ãûå}{ù$}E™¤..“d‡ë¯ónwŠÈCæSÀÛ9‚‹õj½ÙhZK£ŠjâV††…ÎÙùõB®´°¸1;¿6¿°vzpHFœî6¾à¬5øÚƒ]ˆÉšµze[¢uŽò'r[…¼¹>Ûß¹>>øñooþ~}oÛ$ÓÚ Ó¾Drá•}ÔQÔéž¹·ã‡tíl×ÑªÕ •vÉÄn‡£³t±ù1Uû’i8À+‹Ü}lóË1M?C?Â6åÓ¯¨•β0;_-–Ž÷÷~²ÏéŸ'½›B»>=Ù\Ûü_êSj¦ç’ÉÌêÒòüÌÜWûŸ/Ľ+©¯ÉCt%†G­ Í­Òo›I" O ,À ¤¯Q"@¬‹ÀÆÔרÄ3åʘ=³]x\æ¡,Éô2‹Ç„HKß4÷›Í…¥M¸¥wQ#ÝÛóÓ·˜’ô ñ{ÁI;®o×'3cD!¸K¤…xP¦&ÁÖ„Yê["É'f’ºk…mƲ(]“zh'Uâä;ø.¦Ò'›Šã«FWfËìp4 ƒ€0vŒoÇPøSa *mgëa[_±mvÿ\4¹&ÔGÇp{“­·hÖñ4>ÑkcÝäîôî|H’úÁ—p38{zäïÐtHŸ¿i$Uœ9E£ŠG 'Væ7c©¥™¹u0e6wŒ+3;}±å¥B¶T)VJyx¬î5®@š¥pÍÎo¦ç·¤Sñ1Dцˆ‘TÛÅÙŽhO²ƒ‰?fòKÎÐ:÷£7ŽŠ[Jƒ€ñϸDmEj¾\¦êŸ$…@Òo’X1.ôÖÔk ©ñ ¦Q£@L؈ÈE†’ƱÎ߉¦×¬þ<ìFãl|§ÚÉnv–”·KÅ Ý¿:EÓã$ #§ãkQ§‚À‘øBé1Á”ÝËe*D¢ˆ4í‘˜Ú @¢hlN 0e·òõ*„³ÛX‘£;it¸…1÷Zjmvv9YôRW¤/m¬ç’™%®Âñ˜¢xD¹FDH† ÌРÀñœf|Á0=ŸxNÓÿŸß°à»vkµëÓÓYxô—¬Z,{<¡ýFÃë§}¾`R®w¾bLbîÑcÙAÉ;ê¶÷š¤_$uîvªGiŠ È[ÊY½s©¹Mod1’\¶ºSb](_Fc\Z¹XyƒáÎêZž%wè­‘dzeqq}c=Œ-x‚—?=3·zŽÚ{É­~pD@<¦˜‚'këy“3EWøh(Ër’Ø]%$TÈV”¹¿gëãAùÃ6"!i;†f¶³ÔÊh:54"õˆ=£høÎODfp>‰Lº‘:#žÉ„h°DâÁmt%¸p/ HÄ3¤léÏ´t PÐ&ºò(¤öKx’H’ø$ñŒ)™yV45Ó9c÷£Ÿ1ÝÖ’hˆ;>¤šŽºsË+ÙÍ͂˗–hœg°1V`Ê®1ÿ~£Y)Uövv®OŽßžÖ*5®ÆšôéÃÈ…sKäTÜ/ÈÃþà|"8IRÉý|²¿O~pñâï {Âç ë`8@±€˜)b7 %H2CêK‰è=€¤ôY®1lNØf` ZòìmmîíÚé¿Û=ŽG‚©(. 1Õ!ˆ G¥8Ïý<ÜúXy-LSF)òPß3$ö¢¨¼!~”çL3 opfk³°¾ºÕ¬7N66²ss«¹­Â^£‰’:G7É B– .²•åb¾OÎÛ½ ŽØh˜r#©2ÀI»»•ÎŽ{u±¼°°¶º²ŸÖØntUÙöÛµB®XÊásÖV³ù\)=³´¸´K,˜ìÑÿy%|>¦ûŽ¢þË ê%cjHè€sÛŽ‹Š=úÏöœfèåXzXÓ/ÆÿýB ÐYwªÛÿ²…¶ŸL/Áão®s[¹ÿfô›!õ·Ãšgô©a‘{TÚª¯1ßi?úÇð낤Dkà@è,äË?\!OÜ3çð¥Y2ÛüüÆ»ÜÏQ8"ñù¿¿†Ûum-›žYTô×Aùÿ~.  ¦zW&³r¼»¿[Û)äJpÛ_aŸz÷ÿAsîU§?ó‚>õ‚i…ÝDWGÞI]§è¦êý^‹ô™¤[W¸´×ãBÒ–&¼‹HzOLjÏëÅ[\J]\8!DéÃY¢q5.M¢äS”èU·äù´]dKm|üe’ÌG’IÂ}…@’!¡±¥•ææsJݹµ~A£4îû! MŸÐÀ¬qý\ûˆÐÚËœèg&-Äafý8Æ&ëhw¯ÃòO´´é¥>¶iHè{†Eº* JpuQª,à’®Œ0µró-üŒ‰ÐÄ "äü€ÚÀø<+#XuØßá¨ü\-á­OÓ¥ˆ#•ûñ—Î|:òô’>S³c’à$S¥ÙD'±ß&Ø· jmI&]bDÒÚ2óËù•õR¡°½¹Už™Ïª¦“=lkÓá&l0LüÄmhÀÅ:ˆ 0†½=}+Sæ°z“rƒG¨²ëL>ºÀHåêÌöàÜÜÊüÂj­²}|›1ˆ¬·—gß_žƒ_ùñoom®àÿóÊ”5–è{Ä0y†z®âª~õÔº;©wë;‰äœÉêhÅ—›TF·ÙtÖžªÿÔ'ÞÇžîãX ;D­ÄHaê8"¬DæèaN>¥ª{Æ4}ϸfÂì­”J„ðúaÝ‹®OO¿¿8_ZXz2Àïg™àf«"c”* â1ò[ ¤¿{U„Ò$Q€ø¯Ø¶ù¥­ùÅÙ… ¤| q» °»t‰’@{áØœ~:¨´§¼9?=ÞßÓš‚ÃÜ©gTõ šv€e¤ò¦bË0gR¡÷Ì/lä²å¹ù5償«tr•®®uPà†o‡ý‚àˆ×QÜ’º·°›˜à—Ûº)…:u7T®"äšöÒÞp#á«–¸JéÛä“wþª½Xí?'oëtRßi?zŽùXD•øy4ŒÉ!x cSöI𨠒"¤9~3  ʼnÜO»àVì瘿ÖŒ ¦WW³¸®ºÛ·‘À6aJC³‡åRU1áÁ0õqm,•/šZYYË ˆnDì¦+#WÓÒ{µ ïÅI¤«;Uóó|ÚM¸©wÑ&š9Ÿ»´'4gàêÃTAðhp¥¾`é$=€¤_Î|‹f­#.ì6ö E’†%Á1EGg´ÝðˆÉv‡%Åt"3·^.V›õ:’h½>ÏåJjSØáMú"‹ %*« ݉LÖæI’Áôrý<' 0©†?(©ü)·?µµ‘Û.W›µ:^ ¤@rÐJ#+|“ÛÌÃxÝîŽMÛÑخãÃü’9=È™ÒLúm®ˆÍÌd××¶V×¶Ö‘ZØA2÷€ŠîlT«k\‰‘%³òmCB·@”N"væÖ¬{× ûǶ‰üš ëç Î@Y€¥ RE6…Ñ»¸¸ÙaþDlïÇGoÎN/Ž›»‹ ë›ù×g§à)ÏAêx«”ªydŽ­p¼bL<¦jQ´O¨ú^ºqcêeÂ+úÇcF¸Ù†Dnp½t%jÒbjbcR4‘äoX—>êýüLÒyÕ[Ù]{Ýä{¥ºòí)×;¢»ûç·þäú«÷ã˜íI• ž¤NR佊¹?s¡±\L&Ix)1åf| )p»PL(öÊyFŸ¤Kír£Ê E碉…Í*÷5IÒšÁÈüSt¡§±…·ç'ߟs¥Xri}£X.m»Ã‹¨LŽbK2àyGô÷}-àã&ÌøÄ60:½®Œ"þRtÏpôRqûtørt š2.†d¼ˆ ÇG é$ý\£îÆ›T]Š¡Ž \Ïé¦>¾N”Êœ²ú§½ âI¸³Ã–‘±5ÿ¬‰3TQÔp tÒe®æ¤f*ÑóÕñxÄFµ0¯®ÉÕIgNˈõ´ì™DfÃ]ÖÙR,¥ÿ%Ëò’iéçÚ!tá›Üt4-5žD;ìÔÚÀåìÔÉä|$6+VÛ K ”YXXϤfW—ÖVW·’©ù)K@3á¶8B «³ºë_äsöê¨ïû+\#íbµ\¬È!¾Á#‘{Xä~ɶ=§OrÍüi¦Ü¡7‡,®|o³V;;ØÛ.Žš ðˆ¯q|,i-ÀCïªæ‚\˜›—õ«ûè:­9:*õ€@ @iw­OùóBü_$1ÔÑaqÀìÎè-Q‹_·Èv¹¹•ÍÜéÛE¬9Ç­‰ÌN~u~~t7ÛÊê–+83ȳ¼bš¸ð8ý‚1ÝDZRш¸&GìluH<'œ:’É„ØNÄ8ºøIÍ™ù¾nÅ{©ÆoOl%ïý“[ßûS½21ÝÖ*·u´ä>—VÚ8â.ñuuÐwš·P»:ºpREìéãÚPÃ"ÍølLÿ„¢écêå¯É³y’¶¨Ñá(=¬)Op¶Q­aÆù}xrÐl^Ÿ¿9;¹8<´”œÙGóÑN±s@¤>Т‡ˆáGÝÏñ3Heàˆ°fŠƒÁåçób Áá îl‰¾‹àWŽáÔ ¶ƒN?€¤ô‘ )V+d':Õ¨™µÎ‰\Ã"‡æ.¤ç³€ovÍk„$Ž ¸™tÏufV1/KKv ¥…å>od!–^ñ…gö;Hzbw¿¶}}zŽáQÏíhͱ^®ý9Ê/½=?þþâ¼ÈÆFÁî›vZòõsmà0^Œ¸ ›Ó›„°`Ç5† —ÇG[¹j©òæütvnEªµ³tNoPÎ÷—àx.w·«Û¥ÒÙáá& µ0·r´Û„ç÷Žú²Jø骥íJ©M.Ò%vBÒ3,öŽÉÜÖP02—žYšŸ_ÉoåÎÐhxDTÈ;>ޭ׋Ùì^£A&òàÑûH¨ÿøHk0ÿ¡Gü’1 €`X`£É|pÏД¡VáF÷óªl¿U¹€$š<4&q{ÃpßÆÌ®x­² Ží5Ü¥'GáÈìáHíí6jl×·6‹ëùÕÕììÜj,¹è ÍhM!‰ÎG“8áÚI'bmD<•N¤˜?•ƒ_›š#lõ¼‰™,¢ÌÖáîl±‡&ó³´qŽ1ó™àéþFNŠ®ŽQÅhÞ…®Š|âgvsÙÿü…þvoI ©›é1y3¨UH¿! Òl8"B-AT©_aJ,­–¦< ãŠGPMǦݙ@t1š\ Æ‘½5æ´! ’nz6G•áA‘Xì:øö>®¦g4Ã0ÏDáÇÅV¡Æ“Ë_Ÿ|~šœY£Šœ¯8Öa¾eÊmÔvÊÙȯ­åE:ïã1㣱ɧôé^Ž­‡5ýœ>ÑÃ0ö2jÛSªÖóQ-¬ãúï(š^¦¯´ ³õ¯h*‰ÆÁê¢ÑÔñþþþÎÎÛ‹óze;‘œÛßië–=ʼnzµ¶²¼¹¶ž-äJxœm‘§r !) 1.#bÏ{Òhö­­¬U‹å‹Ãƒ£Ý]øäóÃ#·t„HnЬÊ~½ëì½!]`UžDÛÏÐhLaÙDHd ìhª0ߘ”LeèêxW¿ö× ’f ‘{TX¡H}<ÇÀöœ>õr\hi}=·ˆIªåj©PÞ­7êÕm¸ á íî%’‹,©å%}¢Ÿc†{{;¾‘‡ÕÐDçâÒ[åg(ƒB#ÒÍ «É _¢[—Ì®ÿ,zè¯$ý2Vžˆ£ðð\ߟ‡¸’>_)‡ÌÕ#—/õ²ïXZÒ•…¦Ù¿(³=߇/e¦0¯„6"ñŽË¼‰Ì*\ô [”*˜†ûçÕ¸öÕ¸î)UõݰêÏÊ¿ jžÒ&‡°º£7¶Éq ª½&8ïÖ'AjÁR/aX@?àÞ…ÄdÂÀI|Ý4¤Ÿ!‘á5úH¡Yâ¡ã„Ú›0nþù_‘âaÑðVÒÿò%õÂ'°@Ò¿,Hz§“ ÙæÏ%m Ô‘-õA3$tôólÏ™–>ž›" ÂVODR³ë±Ô*Ké-äË¿:‡À÷êøèíùÉA£ 8 ^!Óû¸@Ž µ‰1eâ›iïS{QבØMÁf¾ÚåôD§ñ….u˜œ)»oFb ⎟~®m€kRLDz%–\ò…æcéµ@|ÙYd«|¨]Zà@öìé!¾uˆg}26ñœ>ù’9õ’1©5GÖÖsÙlie%;mü¥O<ÆÑ²ù¿__þøöºZ¬§=ëk›ç¸ôF†‡$i9l6UF÷ŸzE`•^^Ñ'ú86ØBˆt+j!Ú4©¯‡cy2ª£òŒ£S¦1ÛíîãfãÇ7×oÎÑ”Ö{{qr²0¿²0·°ßhœŸ<£w(%_í£É6Ös¬®x2µϬ+TYÀ`KOºfG¤a®!ÕÖÜøJAIͶé¶1_"®ªô@Ë<›ŽÄÌÎø„%èðÆcÉùµÕ­ÕÕÍÆvýÇ7W°›*ÇcªLZáÞ~6nšv%¯NŽá/1Ãd³¾³¾Q‚à1w£æ¿Î¼Ø­ÆÁŸçɾnô¾^I’éÒëh ‹ti4,•}:íg‚¤NÃòÎjëWá a âÓ÷vb±ºD‚™:†@,p( &¹q¸m$¾Až½—D^1L/é“):ÀF/Æ £B«Â‚`÷ h|Á´¨•#+Mˆ×»˜ nåÉ-ŠŸ Í1¢,Açá¾EEÕ@xBŠ_é%ÞçI !''É3ûÑ/G`øšBˆN•øA«Ü½< é_$Ýε$Ç$šÁÌ.ý|Çw£†§ã“OÇMOǧÍ„kÁĪ|:9& À¦Â<@´'m±íRõ×ççG‡Û•Úæf¬9D3T)’BR ZÄn‚@’*ÊÓG¬”Ku!6$òÁG¡½!ñp-Cœ)ªÐ>lÌ‚;ÖA³3hésº—i Ç ¢š[ØÀSÐ¥å•EhA¾M– ô¡õü^£Š/Óeî¶ù%cŠ-wd· d¶¾ «㨵SO ŽÌä¶ò†.gf–ÖÈè&v;þÇõåÉþžÂèyDQ÷0Mý\+œLLÕƒÍ&)W†(Rÿ¸Ì-R;{éúoDχøyNgò5f›/3p„j¥fŠÊRüù%›)Ô-Í/¢|Õ¿žXÛ‡AÒÙáa!›­ ùléòø(›-ò•NšÈÊQºøö~¾‡&÷³42 ÐÖûšARª[¸ƒŽ· 5¢úGDža¾]5HϬxéÍl¹X9ÚÝ»ÂjÍÕRÕìŒõ³¦À)¢PXìîåÚ„Ú@"³’šY°E ¹ò›ó³b¡l°ÅÁzДáŽfÙ§6ñ|e é$·C»d·<0¦ h-òúšüòߟTûù™$ô½ÚiBxÿXûºœaN„$û–z÷M“C×àbú¦“š)aœÂt䈌,ŒÌaçˆÐ5ȳ½ŸYþ™õB¹Tc²·³»¹Y\^͇“«T‰‡§E|žpc0ÚŒä-Å™ºUwwA~ Ü0[R†óËjš¿èÊò° 2ìpãŠ0.leîíTûyßÛIˆE=ó•gC@Ò×’î $¬œk‘¹©#ðæGT½Pã™_Ú(·Ëåúêj>»Uº8<ÜßÙõGÀjc-w/Ï5 põsmT‘«t3dªÀJ /”h‘#¹M©MHäÀxQd!‘!š§P¨Ê¦I •R¹^1Mˆ*P†Æ% dA©RÿŽcàÓ0r¾`L¿bM½bLà"Ý$ÄU€ZP«`)®6èÌ/-gÑïÚžÒ¦^2MO¨úW4Ù­•kHjíðhkm=•šÝXϲŽơ0®o×”»ÁäN$ç#Ñ™dr1™eЧ^ÒÔO(ÚW¬éa“Š‹p8ëƒû ¢còаÀ:ÌÒôŒk{hªq®Š+™öj˜Gc‰5ºI‹Å™ŒÏÄóKKëÅl¶V*= ¤;«Q©l‹D)ï ?ïï×·˫٭­ÒúF‰‡¨ó‚„5§mâÓ_-HºK4¯%ýIÈáʃ_ãÍçJpï½9;9ÜÝÝ­ï(‡CV}ß kx6î©8a‰x–e^š … ý³z*$ÒF„vðÁ£òP[•%ùs ¾n”ú*ênëauÕªêȘ"8" ŒHY`DSF0ðwƒ¤[çç—€¤4aQº÷gc¯œ .•†Ó*ˬÁ1ËÆ©¾£=øv1-œDȉ©iÏÁ©¢¤ú†òúç+–Y1Ìe‹ˆp KB¸Úv=™^fH,Ï“`KÁ¢r5È3Q¿Z„EDî4Q~l!HÂ>¥GCÊ`láñ‹fMÞIþ¥¢®uDvß— úxŽÎ5E‰$ðéLâ_$9@ÒWšIê²Ýq¸Da_;ÁMÍÈi­®eÇDvxÛ˜Ô§4§d¦S¹`ëöóì°ùŽAT&étê:Ú#­þDÄ9DS9¼ŸŠŠa« ¶®"ìA!,÷€ÐCAc;>x…‚g†Dn†Âë ,dæ7£É¥ {Rf ÑenšÔ5€¾×9ÀwöpìÏÓOiÆ^–‰à'‰!˜Ì¬VËÛÛåÚN­Á:¬ËÓÓZ©¸S­¾>;%œ¶€W›MòxÐl‚Ç:hîÂëkË[ƒ,#[ÎEìAL$--Õ–pÂIÄù!ëìXlß~½V/—w¶«¿¾üáõåÛ‹s2ævŠ©á.ONJù|­\>ÝGp÷Š—ýË­ÃÃÂææQsÂâ¿_]œîÏ/¬­¬d Ùr³Þ€պΒXÚØï$½+êÜ’¹E·J+Õ8_Ò'GE§/=7¿¶]®žìÇ’‹ýœé2 õÁME„ GåADxˆÇ¡Á¯`"1"ÅQµ’º™?ƒEú-ARê¾Ö¢e?«U“êzl„àX›a‘®ðK&bVß¼'²¬±f8Úè¸:Šg}¬{»˜Q¹í^_NÚhà[P;‹Ø î¥Ftq¶:ž­K½? Öº7”Ó)_dY:‰næÕ¤#‚]W YªÈiõfÀ@‘X‚¬ýæn¥XÉmWV¶Âñù`l1–YuPézÁ´½b;^q=5&õªÍI•9&Щ"WÛÊTùáÃûyNØíl¥km5{qLH±¯ŽQk¹¸-ÐÀvÐeÙDD:—¹'ÉôìÆÜÂ&¼ 3 qÙÓ“+Ìý…Í­½Z €àÛ‹³4Øß¨äóÅlöûóSÔó¹jà±Ò-š}oM“y°üx'Èxm¢%È€Ïá8.¦@pßËœ`‰M,¡^g´'R ÁP<O׫5ÒN(pàKó›[Íím"D|ãq[ë_ $‚,峙̢vÒ=3³¤4º¾c6sUhžrÄŽXÕq”ˆ¢“¯û}d’º¬ŠÔƒmIW¬êíãÚ_2&”þíJ œŸb"§Q‰ZY+ºÀ®¬ÛÄ+Ô’®SÇà>äºÒH¿gDºdºH#[ªpL †° Ò-aª# ¤ƒ†NXˆ¬^r}<§Á–Ìg+—ÇHÏìÃ÷ç'K+…QÊÁ …²¶þ$ô†q®q. Ä{Èe B†­ºÔ­ICB§Òf躾ê˜MšÔ3ŽqKX¢‘7¸Oz¸Îg ËcÚÔ#Š õß.Î;”¤eÉóãó#L pzR.”yJÇûU<ÏäÊL8Òï¬Áž2¹36ߜܣËH‡8–Ò S¥º:ò¹Ø¡~ò‚³` {,Ã6¤î¤—nPQ›‡ý¦–ª‹·BS”ò6z"®LÈHS.4pÙ¨ƒ$†6)5¥eÓ©nfµ¯-=€¤¯4“tÃÕ¦MŒÊý\ KáÒšãóKy¬­ˆzбìë±jÂÏ’ZšÍÝFS5é§ð¦¨Bë”3Œ.NØâÏhÆo(†—,k?ßkpÔl!rËMñµõâÛó4°E‡‘¶%ªšÑ°Þª¯Kƒ–˜`¨ÿ¯¿2þÜ/{LÕv§Š6oZ9ëå{Xì÷Rn{×ýßÐ ¶pÊÁ–yÁ4 ,Rcp\Š”¹PIW…ûùH7I[èƒq“;‰át&®M¾Ïöq¡5X¨£©ÙûG%±¨b÷(r:Á¬üG7Às8óÁزÝ?cr‚9Y¨UÐä»”%­A“½ÝtfÙâŠ'R+jý×çˆEéòìúäøÍÙ1<ó¾µUò„æ ¼¤à|?Üo`º$±>‘æû™¾“ˆR%ôÜ]Û'Õ ~HµÕÌCÊT8Ì&"Ǹ:ÁÀŠ~mÉ¿î´$IÌääc£Mˆ'cŒÐôÿ’†ô/™Ij .ñíVw Ì ©=Õ·kà³kÕm€)áØÜ‹qÝ·C ±Ö5Â1>¡¨9Jg8>ŸÝ*žîïÃÆ‹$–ýÑE€2CøÛ:$pŽàÒGí Åvjˆñhy%;,´BÒŒˆ™ù0 z,Þ €xÛæfqLìh]j-_bÉlM™;;9?<øáú¾‘¥ôôóì}k/Û4Ì3i¦|µKc Èõž1!R>úñÍåñþà›ù…DzÙœQO^S4lc/]ÿ’¦yJU>–Sx“CLeϘìѰì^  ÉÿÚ+ qµƒ õ¿à7(›_XEgU“^¦Ôúœf|:>¦jLìÖ íîoh œ„¢Û ÀAŠÈÝËšd‰&Ó©¹³£ƒ\_VŠ•õõ|4>ouEóÙâéá‘\kóú""åÔÓ ƒ¯ãŠõNw(‘Ȳˆ‚ùâøèâø¸˜þÉ¡Òáai+{²·ûúüts#M.´{Ó[ì[Š^jðÛs½|7CÝÒµm»¨ß Hº]æ&8‰ êИ,@CÉT_ωӮÈ´„î[ ˻նˆGé4i}£ÿ«‚¤w+’éZ2 ’Rÿ ÎR÷qz{z·';ƒ ÎÐ|rf½XØ.—·v÷^Ÿ8‡]sŽó³ÙŠÕ›æ¨<ƒBM&´„Ÿ’nU‚n󀃧gj“ÃB˜ô64Õ˜èJÕ“Q5‡íŒzŒ"¡VÔ‹ †q€ï`È=ã27ÄŸþÈ]b§IOÛ¢˜ŠL»SFKhn~íõÙ1ÄWVí5vŽöÞK·†%½ÿq}a$ðFRH1¶í¡?!´p±ä2WåE…<©oXè„uC|±ëŽ@Cu $µ¬¨¾ 4Ñ1%ÒA‡!4D´ÖÄÒà;àŒáFo¤q [†" ŒÊƒBÝt©kâ܉ Äÿ#bÙ2 MÖm­›ô×€“@Ò×’X]ÂI¨ˆgSO'<Á9‡ÎâNKõžÅ¥Íõ<]l~LQóÔîõµœf*øíˆF7:@LB‡¤³ö<¿8>$tÐÜõEæÇ$Î~ŽSMÁ>_^Ù:ƒÚhdæÖÇeN¶Ê›™ÛX]+èm©a1ÄL®1±]g‰Î. H»'Á–N/,nüíò¼V©A$TÌ—1 ãÞåÉñòÒCâzÅ4÷²-ý\ë³ñÉÇT­Xï<ª1>ñÍ0À ‰­Íüùñ˜€µÕ¬ÉVOxébË“1ýSšáɨI\Qu/h†çcúGí>ãþÇ3îw#ªºá)UóhDõ„ªz6ª~9®{4,ÿsŸäÏýŠæ„r2 Ÿ¡` ‰"uÒHw¶oá¤öÓÚ¢n0sOGõO) *G£ŸòJµ®G#Êg£š!öijQÕ£õ£aÕw5ü6øUß «¿Rüu@ú]¿ÎÓè'+K+û:œdÜ8õOŽ“Àîç66övêhZ§Ñ¼»¶’…ÛÏ­àðÀb2TÝúö¿Ä$ý† ©{`‚u+·'ÆÑV‡ ŠŒïå¸?ćÃùfáÛ,Ãðù£2߯–Iê†GR~Ä7+  ¾+_’ÃÑÔj¹TÝßi^ Bÿ34‹zøöüô‡«s€gHàe'—/¥fV –…‡fZ{8ÖA<\Ö•*E³ Ÿ˜IêüZ.†¹’©´xjÑy+CC;]åÒÞN·")¥õE—^8¨~ rÇ&™ÇÓ+ëëÅZµ~ØÜ=‹z|O.(Œ¾`lΙÛÚ*@¬ÁR³Ö(æKÈ´kÓX ÷'vÓû˜ý;E:8Ÿêv ¾B“yøv8Eû—IÎ$ÝÖþC›óeDáÇšrÍll•Žö÷ϱîŠÞšÿ2.óln•j•z"³!4Déò[fªB¸[?4Žºô¢L}eô¹æAm/ô©H¡¹¢asgC9¿ßzöí$}m éFœcH‚]¤p{Xì}Ŷ¾b#•Žiˆk~EŸìaNF+—ÇÇ©ôÒKºqLhqú’¾`&=»²µY*˜àL ñ¦GøfªÐúU;Ä· sô,É´Ù‚¯ËÌ®†ã Ùl©T¬ll\þ4@C† 5ÕrLƒ|;**[„OÝ…¶;ž¯ƒ“˜7M'xpO좎«¿ *žŽM q<®µÐ$qØ´hß"ŠNØ*C|ÄG@ðÃøïÏ}Ò¿¼brTV»cmó]É”> ¸‹2ÉT:‘*çó{5D¼y¸Sß.UĆð3º«‡‰àF[—êw–IºëÚ]¨ËˆÞwJ­îŠ{ºƒQ JW€ëÐÛküs,2|7$rÁ!ð&¾ HêÚ5­[R[Át…P›£Ö’€°ê¨¹÷ýÅ)Db­1.$¡66{>[œŸ_„ç Ö(Kîø–¢Cs'Œé¾ÍÉJ}8¶AE4-ûÉÛ­Ž"]Ÿí(îãAå*ø.Žžpv®&ÝÀe¢J}¨€ç É}cŸÒuçb©•ÌÜÚÆFŽè5àù˜ã7çp¼¨í¯TtÞjBú\ÕíƒÃÝÝõµüÆz.5³ÆQûúx¶1E°$±¿$H¢H¼ô6HêFHlmÂ]O$†D^•)–Ë Ÿ¡‘䃫ãcx^.÷%ÄçGGð¿þðÜêjþ`woc³ä‹®èl3LM‘CÈ×]ØD•‡Çñ0r§Y‚ƒ ‰¡˜ïê$ý+$A+“Ô%Ó!j°Å¨Ö«‘Iû!L„ßÏwÒ¤.ÕTH¢<Ÿ;fæÖjÕZv³PÈ£i#¸AÏŽ¶ÈÇóó×'hK— ••µÜÚFaf~=žZ,æËpsã…:oÎÛäY ºðdlR {‹ҩX×1"°Éô>¶Ì2.± qMt‘9ml7`3CÔØ¨ÖcÉE oZnô+'ýK4»Øk¯RÞŽ¥W¨BÛsú$à$§?s~Ø’E#·\ª¤g–·6 k` 6 ¥BÕžÓ["ó‹ÙÍÕuÌôxõúôä-"{D½M—'G׸ßমàXhúZĬ¸q¦.ÙmgïÇIȽ¡¶nÒNê)rD89,rõ±Íp†©²UâÃcJ¸ÍÝ´éÚ$(Œ9Ÿ7æ ÏÚÚþs¿âϘ>äÇ·×ÇÿÔ™$¸O|//,Å" §Ë·0·¸8·´]È»® Ùg¬MKhÕF1Îþ°›b-åD&‰4Ѱ6üÜLRªCI@ö>< '¢4™"OÔUcH³ÛsjtÜ’à•¥©Íq£=eñÌlo×Áìüpuþ·!±H\ CçWçþhÚpõ ¢ÜËã“R¡¬6…û8–~®¦ Þ±r¾c?±'‰ÞnÜn Ä`Æ(8zìã9,žt³¾s…Ãïsiƒ¹:9A‰7™7k ˆÞÁP×·ëû;»³ ›#Bç+Ž“© ¸CóÙly¯Ñ7ñÕ"Ê›[åJ¹¶²VôÇÖøT¶c"xzI © ’ 38BpԯɬaWƒY¡HýS…î!¡{ Öà„‡¦@\ŽTÔ·dïašžÓ&žŽêë‹1 Gn{FQp'e:—?”^\\_YÞ‚ývrpˆ±7òó ë¶M8­œð ÕNõT`Âå*]C¼i0m±{Lâ¢É<£R÷P„à$ ò¬x>ÎÝÇ5³äXc"3[n§‹­#<ëßþ‚9-1øçæ7K…ÊNmç’¤|ê;Ïiºô o ÆvöÕ›s”¯Þ­í”ÑÔQ EZ”«??¯—Jûõík”F:«W¶ÁþbŠmTþÇOŽòÙ¢5~ú!¼¦·û`Xúû3IïÉÖ$Ñâ¦ÉCÃ"7gAHw!~ià’‘àx«ÍSÝÒGPIäìøhDÝ7®˜²x!ò#u·ßoé­3´Ü½:3n•bqa~ ¬Õê†ûj©ÿë†&uª¦ÂB}€­òqõQÆïpºíPß­ w.÷ÓäAT&@=Ÿ{‘ÆmÉ´H·³qRÞyØrw"µÐá spœ`_ŽvîÑQ­RÓMŸPµßè`;P%ž1©wTJ´2‚¤‹£<÷×Ù_íD]·,ÉÝsþ~Ô¡tïräˆà§gG¿V‹ª6·ëk(ÂQ˜Ó®¤ÛŸ~‰g„;1Ø—Îý$<:Ç¿çúìÌf"¹ Õ:ŸRTß ©ž‡„dèÚ£»ïf7߯g•úxú"òœu$u÷*ÐÕk*Q¯ýÇ:*´nläëÕB)_VOø²Ùb0:gv&ä¯Ù›]ؘvÆÅzÏgSÙyq’Õ¾Œ&õH!_d¡¯ìÕw!VßÛ…)žYe«Ã=l SÈ$=€¤Ä3Ì«„hàÅÞ>ŽuDB|2?]æç¨ÒɈĦHܽ<ûâ„tÁ}6(pöóh!ÂF;à›—Ìé— Ó³ñ ŠÀ äüàpúÛ³S@'•Rena]9áLÑ|GQ?Õ?£a=§O=Ÿ|Á˜zŶôó€„ ‘ø‡Ä~*n £ê¾o€oÃ’~$ÖÆ³õ°,¯˜Ó°ž3L4©kLì:^0ÍOÇ BK¨õøC³_Ú`‰<Õ½bN½Ÿ›U^¡Æ™L-­¬lÎέÉõ.¡Ò¶Ž…À ùrv+ŸÏª°O¢é™Ì|>W`'Ñ8L¶0ËvyÇ­ÏϯۼI8F8daìšüÿ0Nê”óol„.É1"él4õŠªàwD”’w¨„»[zQc X±pêãQýãR3‘ßÌ Êß)i^µ ÿo^"‡ÓHŠ•×g'Çh®eÓê se&ºúÆÕžiDh§â¦—-7jÆvcvaÓäL 4Q‰kgg©¼JSTl =l+’J¡c@=¬i¦Ì¡›OX£úé°TïYŸŒêŸÐŒý|¦:GÄ.L2é†Ç<ùOšÆÑ† cþ´–Cå?¡ƒ††9ƒˆlIèÂËÑÏEÝÍ ¹‹"r’aK³dŽGTýzå°[þ:¨zɘ|A7>3~;¢ùcŸâz¥ê—¿×?¡jþ:¨@Šëb Cb˜ú™úA¶aT0ý×>Á“)…?ÕÇÔ?Q>Q ° ,™•%µ>£éžé_±¯?¡z *¥íùÅÍhbis³°×h~Z_/h-ñ!ýÓ<À·#°"rõr¬i“Fá¦Oöp¬pCS%”+Âæ “¤ùˆi{ûДòƒB/E údè‰ø8"9h7R8á[yŸÝ?'Ÿ ΃£€0¾ý›½z:Œ-¤[YÉ/¯f}á9åDH¬¨MžÊKÛ{ÙÓ}ìé~޹‡eúfD àé/ªÇTícªæñ¨î/ýÒo‡å}kÜøˆªûÓ€ê¿{dêW¾¤O¾`˜ž#‘8”÷ºÅ^Š4Т®iu9ü,‰uI³$IHú(÷†e/IµŽøÌÎìéaN>²ÚüföüÁßW "ÚJ¡i·VÃÜâHTøûË‹ë³SdЛ;€Ÿ$j‹?” E猖ÐKßÏ0ñ̃B7î2‰´»L’ï‡ÿ§I\c®>Ü3LMâÝî™ßu& yÄV§v„葉ŒáXjIü¶[‘ö;¹­‚×âL<›@IDœ~FO«1o·„ZI?x7¡¼yXä¢)¼nÝ®ü¸j8¥ð-X#I*á…DéxVæy!ÞƒÓ‚‰ #hÔ\êâ» ÏÀ ï9ÓòŒ>ý-Åøœ>A™Åj;ü~¸·+DŠk—¨ëµo®®nZažÌLáÚþqÕ«QCbÒ›C\¥³k8‰ÖÍ€À‡3(òŽHüTYpL¦)Ãí¦L}:QbG2¦ŠPdÁa±Hä‘€c2ôp›!½la³y$ÝnÅ”6霕O§;\*4ÔpæÇž1‰;ž^^YÉ2åu;Ǥî$HÕVosÐwÈ0›Û ã…»?ñN»q;ÃÖ=€¤¤ œðœ©KЕá!>*œ½d¢a±Ýúž»Þ#›Š°â>€ ‘>,4Døº0G¤áwLæçêbãX¡Í 'éÁbªÂ"cÔàHi®&ØËµ÷pìDþ¼ŸïðH«‰¿é£J½Œ6HºI&éRÈBꢰn·Lnz™e¼$N“3µ¶–ßÚ,Bèî .ð´a Ih˜‘®‰v„{™-Õ—x 3i=üegÁÝàæ‡ßX¢ä$}U )E”{™Sp« ò,¾ðÜÙÁþùáÁÉ}QÈÉAk ã3´Â†s~ú·Ë³b¾ ¨¢k¥I=}\$v;„©FñvêL&cm©æBõÓež¶u˜oOͬž!×~øúôx~) æi˜#tA?ŒmB«ky@9—'ÈežÁ÷"6&‰fæVFÖæ4 Ÿf½ lÁf’Å#0h0 åÃŽbÉ¥¾µ—cíçZ_0L`¼–—sð¶ ,òöü´Z®©ôŽ>º ‘ÞÉÌ­Õ·g˜öi¯Þi<™Ù•ï/ÏöÍl¶”Ë–+¥íÍ­r4µ.1Ɔ„øÍôÝ_¢'}`Þíg¤û˜ˆX_)4ŠFäO©šaº,OzÉ“ßEÒááv±X-ÁpïÖLjÿwoqa5ŸSê*ƒ3)æ‹€Ÿ¾¿<¯–·—–7ç6˜2VÂÂ*fXT¸Këþ—˜¶ßHzŸEúý¤;šx MÔ¢™V†‰%µgfWëÕ:"6Ü®“»ÅáIö0 ¯XÓ¨’"õ"²{T"‰wX|îm%îÎì²ZYØØˆiÀ1ºæBÉõI÷,Sƒs šh‡Óõi|CR2™äé‘<\+¥K òcÊ0xÙQYˆ§â+ëÈ&” ÕJ¹V(Tá^Ý©5ÎÐNÜ;jî⨑ë’Û_¯aš¥³Ze[®³ÐUO†Äÿñ˜ùbT%Ñ:íîh4š^Y\:Þk^žìî4a¯A(¢0ú|‘ù¹ÅÍÍ­jº¨5¶+µ|¾²¸œ›™Ûœ™ßâ¨Üý<\¯‰Ì";/€A¸åS±Íâ—;ÌæÊžð¤3¥žŽ™½³ÁØÊ¤38$"á%B0’"ÆíÛd’\Ë@m‰;ÂDs\îg+=6ßÌ~³ù·‹Óß\þðú¢Yoj­©A‘Ï» PÅÐDÛ¨(Úµð+Z´XèÊÚáÇÜÑEyIÿŠ ¾$¡“Òαa‘«‡5="tºƒ3¯ÏO> vAKHhì¼%WeÌŽˆ' FæÊò­9ÞñôáFï>\G#A?Â5`€ ¥/•YËÌ­‡â‹î@Æž…O°å Ïõó‘ÿ8šÎ \/“¡]jðÌÁõü)&X¯Y.Uuæ`à P{†x–o†ÔÕÒöÙ!¡±Hˆ¤[ŒÛݶ®Mz|3Å‚Jo¨Á?DWøXJ]榉"­Gm YÜI_x‘ ‹Üt%ꥈœdJzXŒ—Ð="vÜ4xvÂI¥õqû3€$zÐhèï4“dœ“0Ì·s©Q¹¿ŸkLC“Ø77óàõ %×=”öøuÛ¥2‹S¶€Õ^\\Ëeƒ>Iïí)ŒÞažen~3_–›"l5â à¨ý¾è" ßw£T‘½Q­½9;‚r3[ÅB®du'ûØæ!¡‹&G¼tEpi9 î“£òýuHÛË0¤ÒK!6k;°‡——·$:Ï”5ÔËšüC¯~6a`ƒ'°?÷ê;'¨›á ™^~1æÕ QÂs†I õ‚ €¯>ÂÐÞÆZöÙ¨rLl1Ûýss‹ Ä®Ñ<Ýo•„.„M¾°°>Â1€ecѬ7––6R™åÍ<øøõõܨÄù’cÇ\2Èyw&?`¾HºcôI2 ‰HýƒG?ËøbXÀ“0ÉøáW;éÖ!ö,lnN:´]©æ¶ò[¹õÕ¬/˜áèÇES¾`&™Y ÇçKõÞã½ìiDš,ƒí"h‡„úSz-@Ò¯l‘n5kco‡{ü\uÀîËL¦À®OŽwª5žÒöÇ *BHx‹á.4¶î'¦JYïös­©_>·zflž´Ã›žrĵæ(K‰ÉMÐØ© O:ÒÎ GÇùZœ ‰üý|Ïßœ™ÛHÏmAœÙÜ Çκòëjrgý† ¬e½ºmu…c‰Y0¹»õ}Äå}ø·%ab¤Ãfvâ^½N*õD÷ü¸Å¾vrÏÇ¢GøœíJ=»YÜÚ,F’Ë®àœ;8ç‹,„ËáÄRjfe‡š^dºñ5%—xvnƒ.h`¨Zå0€,t¼MÞe»=:—èdáÎé¸z¸6ŠÈÁ¹žÑŒ¨úÇ£<:mzŶ=c˜å:Û6$Be ÀLtT" 3±æO‡‘Žd˜Xº8)Ùÿ.2I?Ùöú$I`/P&iæÃ#ß_3H¢#[×XÞû¼‡c·yÓÿx}QÑûöÛ›³Ó‹£#0-T˜uSžõ,áÎG9›¶ÞêüüºÁÈ̬¾Á2´° ³[%ŽÂ N5$T,T$†@c"–Xă°göß jW•-w<¡MâfLÔmÀPø©¥½íÊáîîâRvu5{ØÜÃâD-^GøŠR¡²±º%Õû¾R8}É3ü ^ „3ƒ,ƒÂà•}ýì)@Hà{ÙŠÐO.]v\5|Ä©î“5®ÍÕµã½æ)ÖÁ¸9öý–­©Ujý í_ûD£ü‰—c*"J//mV›vÆùj7_ e Ô »oû;²—Ý¢5Ýö3AÒ¢ø|ÇäÁ~Že„­¡±å4¦´R,]Ãé=ý*qa®sœßÜ<@ºå‡p‰Ë…ÒÌÌr1_ª–*b'·”‹Õx xtvvMk ò­‘«tÔ`:U¶Od±û×I?û\}V‹twà_G],òÀ°Ð¥·DÕ:ìñãý=¢4²¾žeˆ§Ÿéx6Šѧ‘~áAHÝ"©x§$ B‘ø†ÐÖVü4xúý]œPA5ú¥åG »Ì{\¯z:¶¶žW[ÓBÔ=ÉÖFŒÎYÙdìÏ )/¸aðÊÁèüo¯|s –ð«Òœ&­¥°§šµ:„K¢srtH&ì:¿ó`g§´µU+—Ï1l"î'Ѓˈ­þx<;hé(œ`Œ{ø>‘8”^:¾»‡çéã{E>*"Ú¾é"ïkö6!ZŸƒ™ îØ€¤.Þ„î³tçŒu‚ó{:¾ H"_Ì›˜¥bqS\¹ìü ôûÄ&[“ôLÒÐÉÔÆ†…h6M5€½qvtØ Ýèg!ø¿¿×hzü‰ÿ÷ãå˜àÎë³ÓsL³ßö÷Á¥]"úÃÖ_íd· DP”]_Ï׫õ®ÎÛ—4 [j&ìûGXúû‹S_dîiÉDñ¢"ö¬kKË»æÛ‹³«Ó›ÜY{–v;&¹ÁûtTû—~)¸Õ7§§ðN‹3öç~Å‹qã Æd×:,pðP¡Me ÷CxŠ9B9¸:=Ù«ïˆ T}%ã¨Ãá ?r\]Aá>ør³=üdX:e Ëõ.¶Ä‰/À{šMÜ›…Գ៾Èâ3†ePà¦}hâ¦u·üâLR—hN&©!‹<½týð˜Po47kµƒFl±S_aJ LóùÃæN«èyÐb’ÜÃLó kÓŽ°ÒàVOz7Ëù2_…$YP‹[‹¸%ö®^Þ¿8H¿ ’~’Äïg¨/IjC|DÿËþ-Õ¨1 å4az}vŒÌþ¥_À0nóÁ¶êL2²>¢ÆÚMH8"ò p­Ti gŸt&¯ŽÉ-Ghša¼=?=ØÙU™"ƒ|Äi}|d4²Ù’;¼ø˜fîãÚ•“‘Jq{L#D=×8ÛDªõàüþÒ+L$çá9|ÂÑî.@®|®ñÙK¦¹37$p>3 ò,¾Y;v“ìv’¼ÅêßÇÞä#ŠæO}òÅ¥õb¾éH œ4ifÄh©5+{«×Î$ù?$1}H>ç帑Ɩ|‘F¥šßÊ&â©×g8©Ž#¼¯ªÖ7Lnc}cmsaam·Þ¸:9!Âæ§‹ïœc¡Jˆ€=´bÂËS:9S#HwÙ?ŽšQP×¢‰ÿÅ1ß?H"Œ>­LÒ;l[ïÄâ">þõA ¨…èÊ ?¶’Ȭ5jõÎ{ðûË3döOýŠØÅ(‰Wµ2ˆ¬›ÙþÔ8É:3X!À2¦ \C|["µQY{€·Å¬_—˹¦Ìé—,3Uì Æ—!Æãi¼`F ¶¤@í¦‹¦ÍÎèþÎÎQ³V-äV–×ffWy*û>ãüûcÖ0S]ÈHÿÍ×É×ú¾´î)" Ú!De_z6öwµ"3:SÀâJ ómÃb/M‚…á©n ª,„›ÃÐB¢LÊð¨<„m)Z˜¿Ê7$tðlS` É^žˆV¹ðà ¹½]Ê媅âæúÖv¹º¾ž³:c©ô\âƒÆ.™—„°¿Z©¯o”¤“ñ‰~ÓTÚ¶ÕïgÅìü/ÙV`ÁŸŽHÀô1Á·c’TÈ$}Þâhùf°‰cLèçXÇd¾Ažy\bõ3åbû*öIÒ÷goÎN\ÞÄ7ƒŠo‡”ÑÄ®¯¬ùûÕÅ›ó3x?`¦£½ýwIܯ  ¦ýâëó“õÜsª\3åA)„}Ò÷ƒªÔ¡øbޱ@·鿚øŽ^¶õU?.š^YÝD_³¹SkÀ~Øoì„¢³/Çuß ©ÆÅ–Ji{aq%µ °MÏhˆÓ™x‰ÐŸlófÎQí 3ª]¶½·gÑÄü[g³ûÁF£ÙUnÛ'utD%€Ã,ø«}mÃê¼ì&`¦Z¹6¿°¡3ÙJO/Ç 2†‚}*Ág¶§ãä^‚«@ä0 OÒ/`÷!{•©E™gÔÏÖÙÞíê߯/·K%Onš²íTkpi DþŠ 7†•ùÍÍÝZj<>·°°ŠZtë;û;»äö#}`pãå³EžnƒéA¾s´Umù …¶nX°#¿GÔ9|žqÑŽË‚„¶øŽï˜Q +ßÎýꙤÝ׈4 Ô‡pè [ï5êSl¥?_ŸžÌ/¬¿bNôp¬Xž6Hʬ¸æ’ú¸4z'œØû4E¨çxN7iÍ‘£vÿbÇRA|ج×eÏŸT<¥;Ÿ«4j¼¾Åÿ÷KY$¹ôã÷×o,,l¬¬dIŸ"X¡z¹Ü¨”àüᙆöé$ž˜#œ¿/BW·ì5ÕBðâTú矶;:l6v,®•oØ^è“ú_±Í£R/º2ížà»z8ŽA žÀã(j¬öõ#jl'C•x†…Ž—Œ©?ö)23K×''GÛ‘ŸÝ¨V‹[[{õÆÅññëÓÓÕÕ-¶Ô$Ó:67òD[ >Ûc‰…@d–)s¾bY†DîÌ炦&1¿µ´z'L ¥m3¹£;9Žùº‚8dM´“^Ÿ´:_Êb¢N@EY*¢Î9„)ÄSDÚ ÷D’Ÿ’ºáQ·zw–/ggH`Äé_Dñɵ£`HÕb¦b¨#xŽ3jhºˆ¶Ú%Õ{aÓíŸLµ¥”4ó‰Í÷i"æ.8¢¶ÐœÖQY`‹~<Õ?¥ª#ñù¿_ž¿=Gå­R¡ ^j~~§r¾ O<§û™Þ¤Xíˆ'fçVggW’©…ÅÅ5¢¤ó± S àüÓAZí“n>½5þdÜ4*ó¶¤H¸4†€æOƌü©™¹µ«“#O =Ê›|1¦ùvPùjÜÈZ¶6ó¤âÿ›Ï…:_ÛBxWrÁðì®ÀìÅÑìœï/Î|{ýýåé%üÇõEµ¼=L—Ë‹¹ÒÕÉq·VFGV¬ù½¢]UKÕhlv¯±ã ÎŒ‰­áÄR±P]XÎM{æP×…ÄÇ ;«%pô)ˆ]Ã!»ÿó“"] Ì ö})Mg7²…lN¦6ÿñÙø•£Ö™!~ZZÞ8ÿzÜÃÃÝZ ÂV@¨j=·•O&ç–—ÖççWáF‚[UQÑ\ )̬¯#^P–Ñ·ZRt©O)´u÷u1t–>=Ä·³Ûº_=HJÝÉÇÂÆ*÷~¶¡¹<‡5ÐYF¦Àbð| EäL Çô§qæí*ðûn?î—I( ŠÈôÅnw`Κ[XÚ7¶[GEØN>ÃæM?„m2®Bz#˜éF«§c±ïäþ;£Ò@Ç<& =l¥×žƒðï¢  ~ELð¨7ùÿý)·—a\ZÚúþ┄OËË›/hºGà ‹3 ¾¶Ž&T?Ü~£±²°PÊæ¼@ÒÚ'Ç—8z<9ø]JádR9Ÿ¨ô‘·O`ýF!ÐAsW?üŽ¢ëEÂ2.ŠÈõœféýØä8ƒó|m`LâRLEBñåb¡’Í–=¡yõtDg‰¨&¥Be~q“-·{ƒé7ç§¥¸4`[à±õðdvtvt«ýc;µº;4ÇQº M†pÉXãiå0S&ÌO©ŸLgˆý)&úW#r£ª£È_«Â4·%_ÓÖ±1fºÿyg}¤¿-Ã@x;cTExD›R¾ØJf!»°œ‡e.ò qF+ãÞ"‹ÿ¤LÒ_扶Ha !JÄ^…È~žŽj<þt<9ovÅúÙ“½ÌIÃbß Ð;(òQ¤XBÓ’’bg‹ô³EYvÃ쎾¨­%Ô‚PT‘¥H<ð·¤7ü}R‚1^›j}r·V½fªã½,Ó€ÀÎÔ&IsD ØÜùŠ9=ÄJ¤s[Å k¸‡¡LÑ<¢èžOöó¬ƒ|[×úlÌÈQØ Ó~ÉëôÄgg—HŠ¥Å<ÙîR:yo¦wÿ–bW»¶M¥T¥‰-Ç&FÑp¦—4ZR‡ɘˆQ6h˜gë¼¾ùÙøDËôEïög ¹R)_&…œ”Ú­í°žAs”p|KP2‰"´‰4.ƒ94a j&=‘ØìþNB|¶°ßÜu{BÓïnﮟ.ÆïßÒÐn#'ØrðQ[›…åå L¿‰€àÚZV¨õËýC"4ÀLh^‘z”2<‚@RŒVý2œ„ýb”¦Ç?¢hŸP”ß JŸŽˆÇ¸Ú¦B¦š*¦ãɹ½FŒø× u~| ¶¸Y«Á=suz ×ý¯/_Ÿ^žEã³ãJ†h2Y:Æ9iƒ¿’M)_$%:m‰¿ÜO£P!¡˜„kâ;¾BútÛÛÆñòhœ’Lˆ<˜c&Fx(¨²@/ÏÍT…&\sc²À õPòuQ¶&B‘€­÷ÓÐx`䦸ЦzÏùü éŽëd’qüÓqÓ3šÁäˆÂÆ*m±œàb=Ü!»³;ýŠmz[÷Ú–°ôm³vOÂŽz€gÇvÛœƒ|s~Òm…Z@Û.À@"µë/ý2ýt`¿±?Y¤b%›79b•M¦wºüI¾Ü ïDQ¡P)vªÕ£ÝÝNÙî·öÿÅA Ây8³¾¼œ][#-_ZåÊ»/ótÌðhÔøŠizLQ¹ýIÂ]÷úçb‚ØCã5p-ðP€¡=«3/œ¢áÇï/ÎÀtÜœðÃÃz¹\Êf/Žï ~ßËáI(cO^ itæs£=ý‚iéaÛúyŽ^žãËú‚eßÁTúºPâkClu`Læ}Åuôð\dØvHèEbÉÉùËO)ß­‰OÝ¢}o‰½|pê]oNbcš*"šJ.­á÷ÿøýå¯/~|}pºÂɵ1E3d~HêÈŽÞÄåíQ(DØ“"æ+¾ÀP{r„7%Ñ8æç–®NŽ~¸¾ôz‚ú ûêò†Úè¢ò'U“>@Ç|µcTŒˆ¶ÀÁcIj8§D•:Dk#'²˜­áÃxK‹;x˜ÞŒÝ7õ»T—îô=«c:ÛÉv‚ó«D¼-»Ç‡Ã„:¦Å„lㄺé~ œÔ˶ pÌ}¬)Àø=¬ix…­À㌎sˆo™™Ûøûõù?¼ýño¯ÿñúâêäëHŸ ]Ûs¸kÏ®ÁÆÍÔÛÇX Ò·ë Íö±‘~-þ"D¸J¤`% Æ:¯X–>.R(ìçX¾Ñ<‚}r;1;Vog»!ÒyŸÑ§ÁyP0K,À‘¶•)u&ÓK³s+“Ö`(: a+X„J©²ÛhfÒ³‹óË'ïïàéÌ®·!÷î¹Å Ý»„D‚cxfk3?¿°nóe¸ºÂßÇwá2|d —‘¤bëÆûyd?7½Û¸-i Ýf~8?½¬) G;HSüÇcÆÿç?ú¾r%“{³Ž~cj¸ç76 Ôƒ{fa~U¢2‡£³ùl±ZªrE®Ìüþe|ˆ©+*×8Ÿt…íw5æØæ'# ÝÜH¿ !Ñ¡ Ì,©Ù¸¯ $½Ë‚ض€ ðð3i…ÄÄÁˆÔG›(Ð˵rµ€•ðD2‰¦×ƒñ%“3)Ðú™ Ä„@<]RNÅä¦8Uìz(ÈP’ùgR8 aÛ]éÀOI›$½ý~O*‚H?›g[Æ&ˆ4Þ`ª3€õoÏN¯ŽWД]!ÂÒ-ÖÖåÄmÉ0ô}º—= @ôû!Ž:À”ïÞÿ8£°ÿã›+0ÞÔ¿?ãMYCo°*€¡¿]žÿãúâïW`dövšP:‘œ‡­Æmg§Œu—©£N‚|·^‡£(nmUòùFµ õ똬]}€cȜɑègOi§¥ìÖÉÁÒsDý(=zxØi9'55¸%ÀËœ´ez:œ5`ö«ÕÜÆÆ^£Î‚wA€IDATqúsVPˆ~„Úë“#€ezKLdªLQƒ-N¬¬¬æ·¶{p}»Þ¨5à±RÞ.ªðº?¶ÌÕ†úøN$ú¦ ÐIíH‹¾ëŽ8`×zkaO°««]¼ÞU†Cú†š¨QEHeNlnƒ±E­9fófœõtThŒ³†Û÷ƒ$IéŸÎ$ÝFíÙB,´N•øQkß9À53Å‘Hb»T®U¶w¶k'{»Ä|ÃåPãxðìQs·Y«7›à‡6×ÖÄÊ©öT?×:À³ òlƒ\ë<áÛ…®A‚~Ô} RW@ýh“…‰Ìû°Ð‡AØÏXíÞþî&ñûVçtã7kq÷ÁÐ[€/‚j–ˆ3>0*´>VÒUˆ¡/„á°>šÖÀ9H¤‘ÄnJ[a{TæG jc„C3Z¢Ð¬;tú¡È DgDª¶RÙj‰ÊêöÅ——×ÁØ‘iÞf†=Û´º–Óš#m`ˆo}6>1(t3Ôa­5%šˆÜÄ '~¬+éäÙŸÒŒb»T¨Ü")Áß·õ„# ˆŠü~$+pR„öp õ_ÿøöÌi‘¹@Ôáç;•ò^½†ù'÷ÞC‚&WËÅòÚÚxzÜä~׿v׿`ïÁ–«–ïæf¡Z®nmäJ…j³ÖŒ¤VÙšP/Ç6(°ÓÕ‘îôK`µXô ³JB@&ÕX³›ÙìF¾V*o¬çäïŸ{ø½c2€òoáFýMEKÿon}} NµÆ•Lx|1Ç¥BQO¥ÙRÓ{ÅÿýR0a Áëð'ÉÌ l®Hr™"öâ ò9@’>…Hxa;¨¤P¹í+Iï‹ÜÝÝm=„- ¶ÁðbHìã©Ý¾ÐŒÞÕ[#ÓÎÔòòÙfW\¢ó®¯åÕShr âr§?5;·— ¯dæ7•æ$‰}†P ¸-ªuÇÈà ƒ ‘Œ ége:ï=œ› žWÂj\ARôÁœâ™)‚i–Ìfq%̮Ĕ=îÌÃï·ûf˜ª U†(²0ùd˜ˆ’2nZFZ]¡Ä¯Àõ²M$Éü`(F…Ó3³k×hòã>¸½=ð»€ËÇø“Tü±GgÐfÁlj¸µ0‚}sq†x´±‰¸<9©—J¥\îã‡Â¾ž¾@‚›µZ%—kno6›°Î~Ý!‰í×gHBªYßm^-öêõS4ñzp¯xÀRÖ;H·Q©67Iìçâ<2DÖ)Æ^¥]Ÿ¿=?y}zŒ ;¦<@z\'§Ž1ŽGEÃHrµ‡55,´cý]R§»¾w±Ú2)-¡ u‰áŠÓ;«ÕôLîóvއQ H„ &=\G?` ¡ ÜTyü g¶Xïè5!Oeø}ù­LR·p1!§"Ôƒ<ë¸ÈLZ$Z×üüR&•™Ÿ‡ó‚ÏÔq÷ ×ÕÉ æà•iÌÿ îóh·¹±ºÍd×7×W×àÚ7«Õ•¥‡'ª™ò2¤Ž1‰ƒ&qŽK¬}ÇGØËsôq‘LìÏþ||ì8ODŸ/Ö–L0ß…¢Ú%§»U"TFFáa‰àθÜÇPøhòÀ€ÀMáN$b §†"ñJcòÀà|â¢Eü¤€ˆÂv‹uϣʗ§k{:6ñí°òÑôUÑCS 25c|£@aaˆ&êW£²gÃBí¤«X(~4£ZK‚s/Ái\X\Wý,U€Ð¨O„çd\Œs\{;·‚ôVƒ©j©rØÜ;oíçý÷Á¾ÃÝÝå¥R¾Œ ç{„Dx']à*c" è´¶Dkw›ÅÏ•¾BAUÎI]Ç“™µF›Óòú£Å\þoW`8¢‰ùÍì­Ôôo’òþdóÛå* ¤Lf)›±»C#LÅ[©Ðš¹ÒɶþÛAéóQ%]<ý’¦ášèR'lìv¹-ù‹AÒ­4 yE—Äù­AÒüMO´ÃÔyÆÀy_º |b +ü‘KeN2%f‰ÚfvÆff—±äjxÛµSkÀn‚{¯ÕtŽpqX†0¸ÍÞ „FDTq¼Íª×Å[ÑÊaã ’Œ3. ¿K€òÚk%¹qJ¬‹:Y"†BSzØÖ— Ó ÆÔK–å%ÓŒújn”Œ—‡Á¥µÒ¤kŽŠ­1E«C €Ïø¼bN¡pWêëGaªe}- ^í}÷?¸êÌìòãùŸû¤™¥T(½;§†gP0[[;³µºZ+—gõµkÉx¥ÍÕU@H*„ßäǨt‰Y¦ê¥2‡R6KØU>ÞªÔËe@H¸|ñ‰¼'¤V ;ú‚œ:]Ý’¦dìï TÎW,ó¸"0*ouÚà6›È»ˆo1ô8*Hƒdލí¢{½Ð3¸GËOieRP1 `ɨ ugÓÛsðI¿ã"ñŒ2!žLu„‰Eâ OÊ7<ꑽþ”«ßÝË$ÝÝ·D€×FDÞ^Æ„nÂYÍçN÷›×§G¸[â„ô©ïíß›9è~Þ)Ê€[}}~ÚV(›wzòýÅùß.Ï•òÚê ¨uR‰9) Õy´¦€Í‡ÆH)Œ^ªuò ¬É/#s€N½ªÝá„òí¤Ï‰àÊœw’hÂÉy†„.€b[$Ñc\Í‹q}sÒl‹º>9ræž3-¡xÉDÄê•x…î!¡s€ï€¢Ÿç¹q&‰À)?Éb»¸–Hb¹P¨6¶Q£ß¯/¸¾€õëËVOôѸçó£ÃŸä%#°æNuSîí5¶všñÌæV÷B•åˆÈ»c{DÕM;bÇû{W§è “;þ|»Tª•ŠÉÔ<`‘a¡ °6žÏô⺡«—cýŽ¢ÿcŸ¬—®LˆÔohF¤0MN{“é¥X|.J{ÉÕå͵խxr.™ZpùÁÈìÊÊÖÉþa0:ûŸOX}ãêÅÅõs¯‘š÷iûÎ)äÊ‹‹3s«ÑVšÛUod ™~e¸=õ–ìv–?³â¸„JëA½†¤šÊ¹Æ<ÌP¸üI_8"–˜ƒ|‰ÚÒËõ$åò•|¾˜Í.Ì/¹Ý!­Á `n·V{{~ú÷«Ëï/Îv«ËëÁpJ©·SÙª^æ·ét#~®ÆmÒÙƒ‰U³Æíî¹iMhgÈîS"!UØ}FGÚäJrÕÖ7.¶jM¡ÍüúÊZµXtùR…B™$ ÕÚÞN“tªž’ ‰óÃÀèÅ\Ùž™vÆ(üé¿*… rÌL9ìzw—}oǯ-!³&J s 3Ý8þÞ³{ÛnŒm+˜îÔËnÆb°À;}?î#Dk´ey‚$ç=¦˜\i8:ØP3ó[bc Þ¶®Ÿï‚zŒÒAz‘àB$ÁßâÔ¸]3iT¶Áª¼›„hËw'ÒKèƒM€]ÿ=>wo\r¥‚uêu3²Wþu(0È!iÐ`GPlº«ÓÓÎäü×0d¿°V,èù‘¸íhw«@àºìlo:‰îGGõ¨`}=÷_ÏùO¨š—ôÉWLÓs¢/†Ý„±ŽgX„äí(xáÞÔ>,öêí€ûÇ K°MîKÎn&f6ùIGZeN0^ŽÚÏVù™ ]æe«C4 @)dk@PñQGíÞ¼Dò™­»iHê–Ä&4xI¼øïâ¤_Bp¾—´é ø Pj[aLL[ý§û»×s¿Ó¥û3¯úÁ» }8m»‡FQÆâØß./®Q5µ~u|ðÃÕÙ߯θº¸8:ÈnýÑE¹1H—XibëßB“ºh2ߊücD˜ÐKPÄþÜ›¬4'„®>®}\bÓšügÄë‹„# 'ä÷E ^7Y|¡Húh·IÆ1ö;<µ÷ɘ‘·¬­Âžo°îï¨Fµ):¿¸µ¼’Ÿ[Ø %VäSQ¤zÁG™ƒ|çêRrõ²§­îäž¹ÆBig‡dXŒ#¢Æ~ÿÞ#§‚ džßP`·†3«%À^uít€)6ù‚3Ø8EÀeÁÀ+®î¤ÍÍâ”35È5ÿ÷K±Tç „g××óùl 3ñWH„d2{¾RðÔžacÓTb ÄœD‘ˆtôs¦ûXSê“ÿ¥_Æ“NƒÉôÌ’Ë“kíRM¤²ôÓÕxÉïS}7(’jVw\nôs§ÄZCb`h',Áj±B¤âŽßË0ÛÂIõj­^Ù¿]ÙNgížè¤=>†Z¦̶šý½NèC•#ì~èØ•‹Ü4¾a6=³‡9¥þ~uŽaÂþÏg<–Ĥ7¹ggW©ÿ–±HãIcÜ p€¡NNˆÐ^ÇPÖ+e¯?øõɰtgßIWuæZŸ…h»ãÑs €{+k¸JŽêJ£HÍ7ÀPø¥Æ`<½¸±žKgV잤É…€»QÛÙ\[Gää¤c¬HÀpoDîuuS7åÜos„z—ÇQjL"¥¥—55"F˜t ‹Çñ@„­ÃB'\Ž1ÓÑ}7iÔ¡è>öl šŽ¦c(#:8®QIk÷J¶Ê 8¤nõÐ6"‹¼ªïhÉèHÌͯ¯¬fWÖò ˹xf ,•;¼hrÏôëÂ÷<¢hàX†±t—/<“ËO°Íy·›óÙž¯®dÿ÷sþªZ®rœC*:´)ä’s¹Ãfóæ · u¿N´‡ x€Q9—« Aj¥R½Zým‹ïï&0eÌ~)›-nm}$H:i××Á¡åÖ×ÑPÈѯ4Ì ·S¹X™°E¤z/E`aHrƒO¤vM9RöÀ<ÜF{š¥ò³Õ>¦Ü v¦c“xÀ-.mæ¶JµjM6zŶJô×§G?¾¹ OàËçJðÉÅB¥+mm ùJ­Z_XÊN:S"]ˆ*rSÆP |™å/p>©Uw"z·Ù·ïD2-œ$õ9öî°óß`’™ Á%aŠÔðâùøG: 'úÍÅ9ê½=ø‚\í ()oœzÆ–‚=²e§W'h†¢Ín—ªÛåêòâŠÒè"jö(ÁÓJðu!_tim½XÊåz·ÉY]ZIÏNLÚl6/ƒ§š2{š;€Æ.0Éy‹{uØN²¸“Ö¼²]Þ֚ЉP©X«?àûËSœ–ßIdV•S¦Â@mo{É0=Ÿøc¿’!6ƒ½.åQ·ø~;ÛõcÌôú^Ôx°è%x}µµ™wzbphXñˆôñ!A·»'>i Ò„&Àp£bç’›F"Eâåkƒ››…¿]œ‚ [^Ù Åæ{Ç”B…õÛÑó™?œ±:B¥ì²ìÆfµ\Û©5"ñE®ÊMA¦Ó=&ó  ¦+›á ßÞܦ ¬ñøÌõÉáo_#a£”— GgžQ=têv€=ÅQ8}>3ŒŠígNô2Œ*£›'3;}ÉýFóꔰߟU:C ͽúÎáÎ.r,1;m y‚³jKbTŽ*ÄÌ›éGá¤îNXR¨•ø¶þ”H> ÇçfÑ´zÊÿœ¦ígjc‰yÀ"§‡_U÷(i›%m€ÝÁÍä6·&§=½ãÊ¿ªŸ3§ŸOÀuoM6}6¢í¯‡L²k&£U\Csj¨­!JW†ÀÍO83kë…XrÙH/-mÀî€]æõdï Q;;ØoàÄÀÙáÑ-í°û¸•I»ñîvµ^.ïîœìî4ÀÎ,/,Ù^†À0È™ä«\£"E앺‡„.4’)õÃ6“ù[]’÷5GvSØúÄÔÎy1û–V ™…Ü´w‘­Cæ—!b¤¨ äH% × Zäã$‡$Ö±A¡»‡my2ñúT2½ fꇫs\G9ûÓýƒfm'Ÿ+[½³/ÆTCX±ñ9}òù¨öù¨Z¬¶WJ•·¨¯èîèÓ›³S¢PôÝ <™ÌtHbwªe° ‚’“܉{„ [[à,vëuðÊ¥\œôÉ×7ÝF¤àç<œ¿öpwÛƒ“6ýïoÈiÙA_‚Nf6‹T K³ fŽôW¼ûã½>CŠï³ókO|Ga+»»]»:=¹Àœ|õj½±Ýˆ“Ë–`#ó•7gÇëkyžÚMLÃmÜËšîe<4ág&mUåÂ-þC¼>E-P¨ºwp°‹š8«˜|‘EŽ ¢×ß9‚(éƒD¡™Í Óû$DqÂI¨Ç«ÞÀƒH$<‚‰;°‘Fk±ˆ5ε4¹ýëOJ¿óì&€ýæÎõ€•Ó×HC£–JÏëL¶Ü9"° °M= c8:¯—²¹µ¥eØÙ-ÄÕ8i[]^C¼‹UAЈÐîîéá-Žñ vn3P·â{B™H4¢qç?šÉìŸ;ž^•O™2'…o~4¢~NUÒ“4ÑÔ“Ù_ûDƒ,Íêò& j[õ]¼ˆˆ4\u¸‡¶+Õb¾4?¿:@Wþ¥—¯™ti&<3³Ëðk÷›M€JoNáP÷ꕪÙ¦m;ŠŒ1¡!ÂÕùJ©†oʃK¬ÔxÐØ bKóË,¡ñѰlnn%Y‚ÿÚÃTðøöÌìJ?Óð˜ªó„ç·²e½-5"D)%X`ý¸Öçã“E‰äx$ZÒRaD¢%sóÃ|ó 0µÌé—L3Ü”¡ø’f:üŒ>ÉR¸d:GnåÊ-AóÕÊÕv:íþÊ,!1Lé Ä…J‹ÉÓ˜ccRïâÊ‹êF'}$Tb·õIØ­<ØÃ±?¡ª{ƵGÔÿóJø—ÙŸ”L©Åáå³Å_3“Ô¹:Qx'·Ú©J“~0(°ÿÁy›,ž—£²'£šW,3ì^ð‘½,Ñ£h7ʤÓÚçÂI¿-Hêæ†î ¤1e„©ìi¥)òŠaÖ˜B‰ä„"h ï£t‰C6WW7WVÕêÚâ"à$2öÜå{ößM'ì×ëùÍÍz‘Å£ðìàŒ…"}žFc&5³º¼r¼·»µ±5?¿¼²´æð&D:ˆ€QlÐÏwБ&h·H&ºäAn´ÙÉül;'%ü¿¤ëˆ¦K¦åÒöo/!ÂÙÜ(ˆ‘QLªBZG¤€ü}Œ«‹àÈ8€Ú29 H^‹}<<Ÿ£DÄÙÒŒp§VW²-ÛEPà!2VߟŸ®/-C˜Y—ƒ4‰íù˜þ½²o¤SÖÀn£D¬o±^ŸGâ³ìÿ¥_.R;ÀcY]qÒ2ÆÓ™¬o ¹°°z°³Ó!w5 ¨ªì—À7õhnoŸ~…,ðÊ[[(ÅØî©½•û©36›„:ÀÐ^½¾pÿv£RÙ.•!ÓýóD ÛÛkKKp!ˆlö¯v H¾t¥X™™YúñíU%Ÿ¯är×gg$ @î.x܃±Š¥a#omý‘ùQ¡åÛõ÷ÈYz8—¨®ÅÀ|ÜÕNÞYgøGêäè ¼z½J¬p5þq™§ëÁ»¸èvÓ\ø¾”É'Q%'‘9Vò_ÿFWFXØA”Av<µŒÌ¦R ` âB¾†[ëšíÂöÛÁIQâfHcœhaÓÚ]A?f2ûægæfÓ³›këg‡~T©žª‹o B S´2Ìû÷7ÍÎ!$ ³ô÷Þßèø€ˆ ¾VkëùTfe~a}»´=¿°aõ$‡ØÆ?õJÌöðß®ÎIÿ5ÑH:ØÙ…kY.UWW¶Þ8G6Í“™ùr³Ê膓ŸÌ,Žñ&¾íI´™Îm´;})Ê.RÙ(ÛЭ³Ä“!šÔ­ž;<©xr±˜/Ú8?<º<<È®­_x½a*ßh¶‡„*ë?®¯È;ÚE½Õ»µ¥ÑË–N×Ë¥ëc´£ÂÉ âa² /èSt™‹-žšY¼"1V;É«/Klý<š’“xD†°j*Šh±D®ŽùѨΜ ÅæâižÜl².Ovjut#½'¶×hX™˜öü¥GðÇ>ÅSÚÄ+¦eDämhz+Þ&¤øi¨t›U22® ÒpSœ´W,Óü©Ç£:±ÆU)”?,]ù%‘ÉÃPx‡cæ=tc`Ú,ºyP/Wç—#‘4OfúvPþ’aºPÅ<¨2ÜϱÀiai¿lðkIݹ@Üú§Á‘j¢:[bÄÌìZjfMe ‹u®df騕i; ‚\¤YµœÏƒoØXY©•Ë‚&@ðå°ýÁzܪV‚óÈ®­B:y§‡’¼g·^'l—'­k¶ø`§™jÂ;.u Pë¢/‰µkÄøÒ`µZñdЧQeÁQŒ{(¨f‡ZÂIž© :ü³3óëžÐKXéÎ~žÐO?×Á×…Òs[Ë+9¡ÎßϳòýÛ¸ÜËÖF„(㫘Š$3k‘û#³ìÉQ 8a‘½Ý[½|p¾¶¹]Þ¯o£ÖõB%’XdH¬èÿ×s.XžJ±|ÙÍ»äZ·ËÕ)[dT0ý‡Wâ'…\ïòøS`ßÊÅŠÃ}< ÈMÈa®ËˆßÑ€ƒÓž]_o¶óI_UOÒ9N}ÛB¿I«ø.è¤ÒP¦†W÷U x„;y¯VûãiäÍp×1‹ÁåÉɯUk;ìž<Þk¹øpû]žžbtpÜfìð@ÞÕêZÎìŠC´¼²²‰¶öǵñ´ÂÎ}”þ€Ï©WëËË9›o–¥ôA<"ñAø¨­µÝ2-§Ûd(„²uvHYÿm\†0u‰Ë\K‹‹?þøý¯¯Þà éÎþJ‚’Àîno¿Ûxåﯯª…üõ)Úœ»µ:n㨢DÅî.@™óöÞÇtéž|DÃZk&³óß×ÉÛs”âÛ ¨èÇ7W…\‰)³¼¢©'¬A›;¦7ù•·PieˆM£|#•k|AU~×/µ¹ã+˛֫µxrÖÜüK:ý‚*ÿã+áÿý-û?ž!ôð˜ªeJ¦Q­MèÆ²!¾ ų1=Sj[Y†`wÝꎙá1¾!žü¦_ô§^á(ϸ´¸ÑmÒÁ½›LÎÎÍÌ6ë¹Í,üìZ¥ÆRº_2§G„ŽÿîQ˜]©Z1ߨ”;Ãp€k«YÀpSöè¨È6„8¼¨ENê{q”oeþQ»ØKšþÙ¨Æd ÷ÓÕ ƒ ¢ÕCŒJïB‚‡˜#“™Ÿ²¸ û”=âô&Ø ÏßEET“x,¢E×ÞòüTºim‰cGP\.Eô›‡$…iu57åˆZ\Qø1àónhE¾¼i¾>=ÍmlÅ¢I°\hl¡¢ÃÕåÕr¾˜Ïæé&]bµe\0Ñ3®~4¬|L5ÀU¦HРiBbhãƒ<;‘’”¦éï1“Dì1¿!]ž>ló¦‚ѹÙùu·/åò%—6àv}GIÍ BD.E®ù|qk K%C< 9§7öäèü7¸¢C žÞG]ÑÍGÜ饅Û°ìÆFaž¤Ë½ƒW?ß ÷j›‘ÜjÐt0Wšr¥æsk륕µb$½ÆÖ„…¤g"0,‚›ÜÞDZ>¦M=¡Mõq­\µÏ`K¢K®À\2³úãõùúzž.u<Ÿh}s [[[¥B¾²²š[ZÉBtñý9²9陑ƑL/‘ž¡{åâø‚¨õååKÇÑ!TJU³3wšÞì¿8>|wÆŠT7ÜÁô½j¦?`z¤ëDùvuzâ ¤þóñ¸Ç'qÔ»æœâæêjeî¿>tt9¿±ñ«ˆ; îUF‹³³ˆŠ©Ñ@EƒFc§íÚÈ=y†Y‘>>Šëà{pv° [[°ް Ö—=Ÿí¯†ï:ÞÝ=ÜÙ٫ׂ³Þ.j8V«T>¢ƒ“£ï/ÎþvyFx…~yª¾9C!ÍÚzAg‰Óåhlk@€„Vˆ H«ú¦»_X–‹qµ“þ ±Íjã¡rÍ"µ=•š+æ D7øk«%ß ’ºMdv}c¯Þ ÃwÁÎŽeü¢‡s§«¼¾Tã`I¦!ý¡Gòß/…ýûSÞÿï;öÿý óߟ ¾”ýÏ+á<ã¿ÓLZCVWT¡wÍ~? Ðj¯±Û&Ÿ£KÌ4±…!µ¿¤Oüi@õ_¯ÄOÇ&Ÿ3ÍOÓÏè&@HÔ2¤¶tfÂ;£‰y@cϨªï†äžÉh;¹¾c7qh‚KݹR>¼ Ž¥¡4x¾Q³n»?ÖÛS3«Íj¹Q©ÜLB@^­³¥–ÿz%{Å4SÅ’Øàh#! >íÍùiµ\™¾V¾S§g–àOàu’Ã[]ÝÔLºWW·îŸß6!ƒ•BpÀq—ˆØW5óO9¿H"‰OÜ9w+ýÖÝô ²Gç¸zH¥^©¬--c˜õe_»)D&•\ŽÃsÐhìÕj€™>^'ø¤+Éô ¿ªÅ€Cš…¶¶Š¡ø’Ê“zûù.$ßK¦ÞÚ•]ò·Ü|+$"u#Ô“„5A#T‰¿c{É0RùF—;RÉ—°ˆÏÁ¡Ö¯$£Í®­íá·n´/ ‰Þ»×V·D*]<=Â1PùS#¼‰Q¾‰«pp‰Îãôg–6­îSjùnXñ¿žp…*$>ÆÌÜ›³Ós̘¸¤¾]o6ÛåmOpN¤u3%f–Ò%Ÿ ™\)«;c´Å2›Ã›ÌmæÕ»;ž£œ/=’ÅR‹È=àÛ´³ý`/í7vqïÔê,©å?_ˆGx&«+6¿°v¼Aœm²oÉ AäÒÒ&SáêáXÁÄÓ”Aì ˆLM@Cé_]/¼A¼J§¿<Ÿ›_hœ³ókvo²‡¦æH¦qù~^Ê„Å@%@fÅ­lffi~a3]P™"4™ÿ9ËÚ/@#Ù ts·ù…uÉ{Û–;£ìLM‚硆Åpê¦mVw8‡€;›ux¢P%¹É…išë³“ýF&³ÀOü¹GðhXþÝì»!ŪîÍø‚>ÕDZ"mK©gTêÅ“Þ(ß@oZHs#u$}Çÿ­¬ûë.·á…®,O—Ãy@!`?Ï"Ó{çæWáFÝm -³÷ :&î[0YL7|¯@ikˆˆ1 p×ÜÝ&?mÊÏ1T:;:8Ù;X^Ék-Éq…“µÌàHŸ3,›ExÛ~cw~a=•YÑš£ý<ÇÀA9Y Ñ–˜™ÛØèîñòw¹ÌVî v´:#[­¬èɽ8jQ©}ØâÁ ึ¸Ø¹' ™\¹“F:Á¤Û ‹ëÏFUOFµÿßoÙfgô¯/ÃêçùùU·/¾°°Z-U÷vš·tKÙìÖê*a÷ùÚÒ×I‚[®ôsİ÷YÂøÃd< @)çó°Á¯p8p,¹ Ò_…™'÷ˆ÷!½g¿]_Z{$óè×OÀ=Y¼³,U`H„‚üv¯R‡v5ÑÑ–Å*ˆpÀü©MàFÂØåÔ’2ùí œÊÖ.-®üp}IJò¤•‡lѯ$‘ü9"4Ëç;SÓ µÏ9…×®î&»Ä†éþ!L,q¸»_.–sÙÂÖf¾Cóõj •Žpë÷áveÛìŒ3ÄÓ cg»öúü”PË·(çQ/ö–éA-;;«k…|ùpwt8Á…ß©5övvá++›³s+§‡ñÄü_û%bµ Ç£ï;üvnW‡Û‰àªÿÿìý÷WbÛÖ5ŒžòþòÝvï}ï}Ã÷<ÏI;W6DD2* €  ¢’$ ¨˜s ç¬"ÁPa‡³ï˜sR¦RË çÙ»µÕl”¥¸XkÍ1û£Þ§ÿÞ$àiàTßžž@B—ú¢FŠO ù7E“Š  hxòÇVÁ³.y+{²…3կעRhîF¨y²Òm5=ÀšÂ«ÊÆ‹ð+,Å-žØKê¬ßà½\ýzÓDú??Hª–‘j.fs˜¿lï0µñôÒqÇÒò¦gß÷‹~0î×jº¾½=ˆ ·×ùa›D;J P«yñÕ7xƒ¹InþR@ :på£ÃQý¤ªÄ? gÈÚÂÕgÖ Fç³9žÔð¬[ñ¢g´‰­nájºúufǬ—|&G¸«ä£]²<«l0Ì›oÎÙê±K6‘X_^¾Š‡. žÜÂâ&}@ý´KÒЫ˜0Ì%cI4T==XÅ;[û«k[‘Pô@ÒÑ{§ÏfÃ>ß!æ„}U ‰’àþ¦b1À(_ $-S$Ø‹µ+…0îÝÛƒ 8 .;ê|}x„ÂõÁÁþÖlO„ÿÁ ¾ÏÇkC §ˆô™_^ÝçÉcm²ÑÄö$9ædÔtöqÈÔ IY’/¦ntõë[9“Oºd¼Aµgo/‰z÷<ÑP–ÁY©@¶Þ¯$¡]ÿø8°¿?€Z¼™ ÇÇ:'a+eðHö1¢’àDö(ƒ¤¢ÉÜÕ?A¦ØÊr7Ï, #¬©;V\Ï0L ú¼Á Õ¤5æk®*KV4cAå9,ÆŠœœ‰¨zC”ÑH¨M'ÒÛÛ^Tƒs¾;µàøùìÄã N[ü¾0u9Ž‘@{zjÙ àór‡‘ *ñÄ`Vœ^f‰=íИsÒèVjgä–ž¦•«mfO6³Ô¯èªïÛÅÊ)ûooÎÉbAöóªøÒ–Å$ÕšqH4_±x,±ä^:H&“ácPWQ+0Ñ¥ÂÜ7“ˆ(_‡ÀÒÉäÙ÷„Áî'cñT<[Wù±Wò¥w#’ïNJ&“ó‡Vd |1Ð$yr•©hVL /Tž‰¶‡ÉÅ"ÑTBcŸmçi‰Ò?SŠ$§+‡t–!…%<‹Ìvˆ"j½#ÍezÅq¶ª¿XÀó¹·¹™M&‘vÌǽÕú*±PI*¤R_¹ˆ(ñ]fÚ¾Lør{߈Ùi Kl+2p‰ƒ%ŸÅ; ªÖH‚ˆô—^¬nŒ@’ñ[»„¦f®î9Mõ#Eú„"~Ò!|ÞÞÿ¢…ÑÃú=>¬âŸ)Þ üóeA9Õ^0˜‡áˆƒAçaMY1I³ôûÛ׿ÿüú·óÓBî`o×;muóÅSm 騤5‰ã!F"°vÏ.2âÿ¿ÅIÌ~ոƚ¿•DŒ$ª½ÞÃtæäfe0ˆ\éDjqyscs÷î÷èbõðð—³Sø°¿ÿös&s8Ö6vsé 1¶„ºº¶Ëë[y:¡Tgì¶C‚»„Ès©“£A¹i@ýú—½ã/{”:ÓB[×y=ñˆ~ƹ”G¥²žŽ9€`7—ÀPL³H¥Ò!2²x| Ö·{eoÏ·³íé±›éü¥‘·÷@vÂêši Fä ³.7lfÙdz}}woÇs˶wYHt£T¥† ŽÌ1€×ãÇ|C·´‰©¦ JÒ†l¤\Ĭùm]ø8^¸ëÀ§è‘ÌPðhMËØÜÑglb뇠ÀÔ…üË Ñ ¢ã/Úøú¶n|¿~¦â9hé²Â,ÿ*Þ;Gå;b\Øz™O ’Þ³”A“¶‹HBWd´Í®£ü$—ËWZï¾Äï$™„Ø¿4×öþ“€5•J•ë\RÄñ^þÈÒòf$A­Òbžœáí\-!«åGGÿzs¶¸´Ý3 Ř„£5ÕÊÕ¼¢*Íð[oËEÈCÄ£V¡ÂÈiqeçSçúD§÷qïR‰H$ˆ"—tI¾·½íÙÝñbÛ–\gÑé»VáË™@n øÂ$;ºßžtpèpRá+Ph¬çú„ý~¤å/­Mn <ŸÇ(ϘNRý¶Û0Y;ð÷™©³âRÈI¾ϾZoújE…}v­™©XXÚN'Ò«ëžÍm¿×Õ˜×:¦ö ÖéƒpÔÁ×C@ÆÄm¬ëJšAJö|] ‘Œša0…ßµŠŸPd?4ñÛÙb©Š/ ÅÊý½“üñg~¼î’ŠUŸÂŠ(_.ðxà·jÄš»Ã—__Ÿýz~z˜Î†üa§kyLcëÇzÓ?´ üí¿±gØ:³œÏ nãYñxRgßÜØ{°æ2ž&àÝ’§’¯a¯i“Ü¼ŠªúcéKô£Û§!jOlA¦-sFëâòÒêëbö³}!èmlz¤ãÖvÎ8 ¤n¬rΨȽ“9²ùŠm0Vy¡ÁNŒ¼áÌ€–žÓÕl±Ñ½´“ާ޲ˆõ {Ï·¼ÿ×?)ß¼b eÚD,NºQ¾}¯kvyye>c6 {}Ùx¼€«køàq?/7VV&¡¡áûŠäôÂM•¤^ü`wôx⩉Iý¢{)OÈãÈ£FÉCüˆd’É£\–ÓÁãqœËMö6¦¼‰=ALSÑHàÌ͈ôÂ/Äk"„Ĺ}‘†ñDɬkÈ98±,Zi°vc67] À™ÑÄ3ÈpP’c¥Ù`!sGœJ=šÑhæ›Xƒ¤9–b¾*­„ÈI×ÊO¿ $½ßhC‰ð¹ºDÖÎ>ƒÍ¹~Ž‹¦åüCbw9L’¥bÝôÆUZR2ƒüø¢×vX>Š%åÚ¿>e´Ñ¥RÕ´kn5AƒZ¿œ•÷ú××§¤Û~ŠÄÉ :|?ãZíàŒ×.ë“Y‡TÞ°¥ƒ7õ]»To]"Â"¨NSÈ“ßúÔ›4*f‰(* #áÄk« H$±;'´6±\'žQ›héÿßOXƒ#F¿?|r|Dj]÷–E…ݨXôíîÖñD¿œ`ö…/Û$Ï`£X(É<$öqxV±Vò;*ßoêcÀíÞÝܼ—×Û£À½;;_JRá*›ð¼Tøåüì ŠÀWû­{{>©Þd_‚UIø|g…<ööñŽÍ¶òMBÀ£vžBô_°€‡£½ßÜÁ›äIô’=ܪâA®˜ËJڼ⾢ŠÿöŠûÏ—½Â!…Ùl_Y^OÅâåÏ®S|ÇJÒ¥T&†Ù°éÞ«ê{R8¶:eëÌD ®H-7ÛKS†ÙîþɧTY+KÁkû$Z¾xª‡¯üûK–{q·ÒÞù`wì. ©~ÆçƦdÕ³iyU«èÅÚžMŒifþ×=}FJ53΀]\UCüy ÐF7Vz$þ 5WΊDjë8ˆY €$Ôô˜¶¸6²É Þí°þJ± GÅ ÃàÈ´Ö0«Ñ;Ñ8$OÞ=€o‘LûCÛ£O¯³©å¥µp \YÿX_JgšçM±ÅÓ€ÐÌÁ­ A7©«GâlãNIG&÷··ƒ¾@!wXzì@… šÉÚfçæ—svŽtfŠñé¾¢•©laO!2\c`Eƒz’àµü!ô@`ÍA \[šØ14¹À—Û–×<ó+Žl®à§^±­…g K¬¢±YÎð O†¡@ép-l§Éí"*Êl ³bqèþêJI—l‰™É;UhbKL;Û^Ÿ7ˆwè{/(,¢XLDB™8š=¾eËùw¶Š!.Œ¥‹h nv~}P>ý¤F }T® ž=‘Ü ·8fWâÑ8öO¯oìëÍólÑä7Í´ IÆì™D žÕL2½°¼ÝÉQEÂQ<,L¼K/:VŸÔëò¯ƒêå ®†‹3¤Â—ÙÚÜŸ_X[[ÛqÍoXf–“±ä9¾…ÃÃfHÊòzá4Ê_¤$!ö÷ó™Ì×`?B& ް˜äA*GÐãäDºf÷½b€õ‘†g2ùù;‰GXG4ì÷£íé‹Þhܻ̯­ïH•ºõõóRéø‚qÙc‘¸ßÊç*Ê dPôu ÂxniͫЯ@¨låiH‚tŸ%1N\‘`øK5œ#}rÑX8ކ"Þ}_ÀÌçÐìÕy©xr|üù÷€$rçÂ>_Äï‡'<„ïñø×Ö·3©t,ŒÌíáâ:g×$JSwŸúI×ðÓ.ùÓ.Y]þ”"þÿ|G´!Õ¬ãüC]í/ Ð~ Hú°Úl2M|]ì3 €2Ùw§åSüžoË¥·'¥‘QC+]<ª™ ØÎ™¶¸"}cœŠ !fä§KÌçG.¬ËIÇ.qvÚ eµ[dîì76²¦dÆT¤3ñHìIY”3Ð¥Åu™JÏý©}ðï}Ï;òQ½wßœCA"8$ßÉX®ÿ+æD§ÀŒíkí¶ëA[î&Å­Ž~ã+šT<<º¾ºÅHsä#Ÿáêª(§ÃÇ™_’ë–W¥cÝlikôUöœ>ÚÞg  -´!™ägŽÌ׺iW‘JŠ¢iHêBô¯YÑø<œy8MÆS¿œ–ãÑ$¥_×Î×Y«FÇú´mžŠÀâÊüX:‘"Dº×E‚5æ¥6žž"´"Q4Ù\Uˆrñ“VŒî^I"Å3,ú²^îÓxöH?™º—F˜E#QDL̦2K‹Ë!¯5Ä‹…kgÜJx¶ ÀDþýä{)æ!‹€\bu}ÿY·ìUþ„2üC»äÇéKš¼¥ÔÆT¼¢ÉþÑ,ü¶epjz>ŒbZ—£ 9”_¨jÖWêÜŸlX¸6Ü—Ç ¾Ý]xñA€Rƒ•Ûß`Í×ÈżÂ%ÿÈe‚º0;;q\ÏûzpQÜþâezýš#2îˆFƒ.ï/19ó…éð„§p÷sdóŸYÁ¼~¶°X8ÚÜ#ùgwaiã÷Ÿßƒs$ó]阱^`…$s„’< U<ÃÁ|rz¡wÐ ²k’è}£{;»‡™ôa:›Ïeˆ/tM¡͵áIB~$Ó§_jà^ é‚cˆã]‹™Þ½cJ´¹ mù—³Ù]å?›E=½e‰#F“ü,Y¹¹¹ô}޾ûc¤B•¿–Ž'% ýÓö¾Iý d€ó’ñ$[ jîp¯š²·°T =#mìÑÎ>ä÷ÝH÷y¦Úhs×|‡†ú>¶Ü©7ÝÊÕµñàÐ4ôªD J˜jŠ)ï׺*G"®ÙÅþaÝÓ®áݲ'éó.ñœ{ãu)sîîúFÔÖv¶ª•=@ í²˜6NˆÛ¤tƒ9 ÛÛÛ¸Úš8Zƒõ áÉr)>æ„å”N$MV÷„Þ%UY¸b …-o§KþÙÔÿœ¦háh:+m+©½Õ&ù?èFG(Ì\å" ÎŽãÚ½²îñx‚;»ÁÙEÈ3ÑH¼»orʸ°°´ýº\ØGX#GøE¹6uxIÕa6·²æÏuÙRWMpö‹“.U’* Ó"‘k¤ÈÒΛRëçÞžËxç¾B*#5 ´vÚõ¤]ðCÛÀOÂ6ò¿i` ˆÇS±žx¸f*wÈ£®õy…®çòÊÎw­ƒ-ì‰föD;WÓÈœxÙ;ÖÀ{IW½¢+ HûGL€MÉðD¹Úñ'\ìÏÆÒ µD¨ >òÔ¹}ÝK°X òGåµpŒ+úp޾¸é¶ÀV²³¹yPå¢}=ÌâZ&yŒ¹"‡7XÜ”Ž3ñ¸K†~þëŒJ¸‘µC4c~|üéqñ:•|â*ñ¦T\YÝýÛ«>\Û\4Ÿu¯[g–°ScHpL¦V1‹’Éíßâòì2VçªlÜF©ƒVšÈÚÎ׳óiç隣ŽbD¥ñìîŸ`Y2ÕuL<ØUBIUùÝéÉ—jå>¤ÝVý1xnûû÷ ï {‚Ý<åÿøA럈G¡@H6fÓ8C^{p éóƒ¤úóDcwÇÇ««;ª Ëœ{-™Hk ®ÿÇÿÝÒ'Ѽ.rÉìÖ¶gymwdj–6 k`N¶ó °½!6ñŸÇbE¤Ñ†õ#ìö¹t"íóGÌŽM•vÁêZßÛ¶ `âøà°tƒùyÜ“ÑX!›‰£´>õ?šE/{O©ò.þ˜fz6Že3Ô œeÍW#;Ô®+#]î¸aîv÷ åEêY‡hueë÷7¯³Ét>›«6ïßJ8BK1Šú}¡6ðh*zÅP¿èyAS w-"J#~´¤*YÑ,pßÔƒ¤NüV=ƒÆæÄ·òï;‡ –X˜ÑpÄYáøR%ùòë#´–9/Á½`JmÔAûU öyŽJ‘ ƒ$¸)äÆmtÆ0𮥠-­<=sÐàõø ´KF|åc濽â?ë–Ã#ô‚&AyÖ%ýë –jLWÆd£Kï ßñíïòº–0‹-ɦ¦çþó•.2Pt/{ÇÙ3_fibM42ÕmÜIxP‡”¦\ ™8.;Å~¾Ù.bûö!+ëzÇø/˼©½öìì ÷eq ùëÉH„@¯v‹l[€Ý¯S„¿é€>×-¢Ÿ©Ã_bL çŸK&Ë»Š›ŽuvP_ë"™SÜ;{{RNÆ¢‘é;Ä×7­ƒß´ ~Û:ˆMxú®Õ_ÏOí |9Ÿ d†¿7‰~¢È[yÈy˜ò5„Rò¤Ñ"¶52Çû†F—[®"M‰Ê¯qé;›&ggÌç!Ú¤óÿ.í6ò“\omg³Ä½ò^Ù R Úñº7 eßÚòîìxmŽåÝ]ÿÛ“Òy©ð9£Çª$]ÊtÿrvòËùéÛÓ²Ù2÷?¾£ÉÔVÔÃuDd'^,diƒ}•>hnåOc›Õе29èR'GîZXñe³elùóiö ¢žðî¤t†‚ãñíë’XÑ¡¨xÔJáM´r&^ÑG¿iwò'$cÖn!šáBúŠ„3^k»©mt1-UÁp6J¿ñ‡ö!Ù¸9—ÊÀ±·çÛßó“‘´ûÞDø•Í=¶h¢§_ýE Ë©³_fÊêÁÑø©ê@ÎÖ+Ö Éí¥$Y»„&¸Â¢ñù ã’mvsiu/K¡ZÑQþZù‰Kÿ1Î*”Œö*Â90¸ü ©ZI¢ ¡G¨¢ŠŽ­µ!u ÌŒ¡ié¸=ŒÅ#ñû"Á¥€Î9»ú”"~IW¶°ÔͬñFÆØ«^Õ­ýL¾Ô13[B“k—ŸÃ“Bö4„u ! $à·°ÆÚ9jjßGjŽG'GùiÛ µ_ÛÄ{Ö=ò¿ŸñxbM2–@±ñKlNÙD"Àž )ÿõI878=²w–¾iõî“IßÞ¼ÿ¼‘{eép¹àÎÞqÞ i øózO¾\±ÖðMÇãÄ$äóAlG4)Ü¿~¬ÃS2‡›ë»f›Û1» [ϿޜÁFeai‹+Ö5³ÇÛyZÀ:]xÈš¯kçiš˜ãLÑÔêÚîQöi^ÀÆT<ŽÇ’޹uŽdº•3E™ÚyºÎu`š­¨hÔý7Pl 70T*õôìÜÊÖÆö‚{uBk0Y­Î­õMµÆÜÐ%üû3:§_žM¦þ8I5­£ nBÃ3‡šô5«»ý]¤}~úÛ9šgAS²:¡¹ÃÏüü=$Õ÷¼/éÔ%l~~x^*™,óÿxÅù®M4ãBòw¤èäÈ 2ñûv·vW×}¬aEh¡cé-´½ »z$žÜáõ†9E4𬫀2ŸÉy½AµÞµ¼º³·ëCFi7lê°¯¤â1âB ×¶”?Š…ãZ“»ÀGŸ®•§m`Mv Ít<ÒÅ”]¦"ÝÂìámX†ä ºEæ¶ 뜉XblÊ.’i”jS<;Pi:›LϹ×[ÙcŒ: xÙ)ýÓ}–b¾"wtQ³yÏrîn•¤E’¨B \dö°­Onå›…rS(Í$3…Šááõð·Jq€TZɘ­‰5Ñ%DèÑ’>#HºDK‡¸ ‰Ž”GܤΩS`¢ L³õ:ãü9¦©Ý{þ9—ƒEº´¼ÓÌPB(lãLZ…ü¬kxRg;L'k¬¸Ë— ÏÎÎÑuL^BÉGb}Rý?ZÄÏiJÀIs ›ï°õ^2– ‡c‹+»£Z—ZïÄ4óüçÏÝR)ØHdøz(Ò—6Nl©™Ìਓ/„Np]‰> 7±h•ï ÕùÃL†0ßKw{®àƒ$"/@À/M·"UÃ6ÃIãNN4xô)¶ý]ßÊʖݱHaËèüQždª‹?ö¢{ä)v½„¬•*4£Cd†í"L{ŸîÒ§±ΘXi#oJ¥h862aoçN¶óõÌñÎdÏ ©JÊ+c.Á)/γ¦WXÏæMöŒ*ý©SúS‡ä‡VÁ÷Íýß·‰þÙ"ú{W5>]::ü"·ƒ¤Ú¯C(m8ЧaïÕ+-`±i¤×‚}^K7µ~µ )—L¤³ä"`Zëò9‚#G!wß\\Ú|Ú!$}.çÜúy‰ý*²×Ù€g¿ËEýÞ³ãCu­[daH=X¥ ¢#y$3MhÓÍ;Ý[FûêÒÖÔ«jfŒvpÆŸtI¿mtqgŸcÞ\ù=—ò \Ãb’¤ú¯×gÛÛž^‘¶™£¡ Lt‰´ùj„ñ[Ò}B265Û3dý©K.1ËÕ¶!…a©oûs©Ì}ÁnùgÀhqKUæ&Æ($T¢‰0좊Ә¹ªeÖÅI^rä]¼ BªM·õ Úàj3åó݃ö¶>s#[û²wŒ%œŠEâ„Z[M®··Ä2üçÅÜô•µ½q½‹.Ò¼d¨;Œ½ì’{k›òÑûkõµ1\ÛƒÏb¡cf[ï0<<3ýÓ ±Ùç §ãi,Ãvô€,è O[[˜£æÚ¸ÚÆø+úˆÙ2{vœ].•Žn”J‚Ì6oÿþþµ3ADo,IRifŸRG¾o“4ÓGƵÎ|6÷ÛëÓªüýqí‡?+ÃæYz#}|¬ùõöòy¢šˆ&˾œŠc‘èø§Rhçözádö·¶ü{{_VXò–NeKTêú§·åÃxVng}½ðåçð/Ô4P.ûý¯üI¶«cI®¶BF„úeœIª‹­`ƒ "®KªûsB8mïÓ¿bªŸ÷¨š™ªA¥E1å¤ h›ÙêÆà$ú0äÿsUE_ ’ðL2*wzêY;mñõ­\ jp¦ZØ“€­^ö¨zGÿó¿‰*JD¢§…ã;Tó¹$r«€“Š]c¢©ó€à€$R(Z_Û^[ÝŒ’I¤Þàa³Á*R¨­í ùÈ„ƒ'5<í×:Èœ¶¹6`?@Æ ˆ‹vø¦Œ”j³Î8k³/f²°õñí [äùë²·ò§[yZÌiU7±§ÚPÑ 2ßhfOüØ!¡òF½Þ :dº^ÛÎ0‡l#†Ó}L±¦>£ë›^Î0R§_CHõÛ·#¤ f"NÍÓ†ìí|Í3šŠÚ7µ±±w‚'Eï/м~ñΔ³ÃÄ5$ê?¢ ZD<ÕÊlô ŒjË¢ÚwMÃtÚ·»{^*}%ÏC6™Œ…BD°ðÑO‰H[ÿr~òóYÙh[naMPúõaH¸ÃÖlóLLœE*µh·šéÛ ¨B6ÛÞ{–¾‰£mbM4±Æ)ýÈE!o¨a<†ŒiÁ‚7Xq~C-ŠÀÔÙg€ÀÚŒ2”heÈ»ùÊ–\1nÊ$’ÿŽ•¤zéÄnÛß?|_žÿѯV±>iEËá^QõÁ•¤Óês%¢1¿7¸²²½ººcYRLØ)ÜñïÛ¥Ïiª§Tå šɸÃåÞ”ŽÛ5Æùl2ýö¤„NdÓÏ»o7öª†Õ§{Ëë »¶9röÓ@J†Â±ùáI7Ä®ž^âÊìX Zhì@m”Î~};_ûœ¦xJâJ4®¹µS@'ÄŸ'v׊P2©ŸžIÆâ¯ËEŒÂ‘¢R"–0Ú—Ø4´Ž©}צU}1‰¥p÷Hœp}†vžfTãLÇ+ãåÅûÝÙÃl2•Œ'—·iý$‡QÚ¡tÃé´ñGW.+=aðFWº±6G¹ÄÂêá´ÁºÈDé×½bŒýÐ.¥öMŒiœkk{Á@4›Ê†‚Ñ©éùî>u+SõEö¢gŒ‚·ÑxýBÁÒ].ØÄmôz·Çª!ÕÁ£Ç þˆmXíê“[ff×¶w¼óÜö¶çî>VÄâÙúÃfÛ"K„€QCï8<ƯzFä*}6ýùìä. TÐë‚nZ•ií££w'¥ßΑúöäã‘ÿò³ZøaB)6|Í8)›Hx¶¶¾øæ}‚å¡}¸zDìù-9úšœæª²À$!!Ð;·Ûr©< 5oò/þ)à¾ÇíìO¡FÖ&äŠFZÙýÓDî¸& WQè%R5²Š9ò<Àã´­¼©Îé®ÄΥT[U“¶ië¢xÑ ö#qÿ…!sUè“'ÍÀn„['z±Ò,1¾ê‘s§ÖV6â¡p")|Ávòǃ¤U3@êPzôþ=Â@(µ-c'ÈâušèèâébÜ¿”¿ûÌIx(ô^sX5S*ÿzs~ÎhsO»†Ÿu+z`º…¥†}‹*2·ñu/zÕo•õ h×7öóëÍ åwÃÌñ6ž¦ôÞñ½Õ ­HwÇÆ:ÃNªÈ><…fÔ¥³ÜaK¯ØBEV8fê AxœºFxp;ú´/è£MtÅŒk9ÉIØû PR±„\eø©™ÛÉ–›í‹ÉX¤œ,¯ìÈ݃æÉ ~âï.ÜÊ@ €àdàäÛ9ãƒ+qg¦m±*U€ÚX©ŒÑêfŠ4¯=C°MŠ”¸°Ú¸?¾úñüËx.ÏF´ ðÚvv£jÅ—Ôðªwüi—ÀkOÍjõ>¥Ž<íFÚ•¸%8•¥zI³•‘æêÌO®;ÜwieÞñÊ£U Oƒ?Èá:ûµíÜIɨÕë äÒéÃlÆë íìx±BÛÝúk¸€”ˆ&Ƶ޶òûö¡'ÔDÓî–r'µz;DäŸÏÎîX—"«’pŸ!ÂÜ®èCÆ~‹÷ôHùÔbljH„;}Õ•¤ƒÏöö×P¡IÅbžºZKŒ’a÷±¯[\z,£Áà]n.6Ìøwwï)žü©…‹b¡p<BD l øˆƒ_¤ò‡ PϦÒVçÄ=,J‡:œ÷8*aãs9LZÛðÆ!r]‘jfPaí±Lé]+K£“VÖ ¦’*“Ò¤ž?dkdOHµÙx4“Lxv=ÙDòM©ô¦jìú§ $•°è*d„¸÷¸ÊËð†±pô0›}S.Ÿ‹5ìL¶Xˆì>o@c°k,3ÎÅ­­½l:sÇé*ä݆ÏùÞË¸ÚØ,²±éÙÚö©õsÝ2ùZÚùúvžöQØ€‘œÂ×v@N|M#CÝÆÓ¶ò´âq—Ö¼²¼îuºwé°É ÌèǤŽî¡6gíY©C{¿áCÓÄF6´¡‰"@Œ98ZùÓè;†Ž>];oª•9:¤2üaØä"¡èé1"rÙÝí}Ù¸õ%UÒΑ«í[›s•&2v ,½$_ÉÂŒؼá ç*‘uë¢òáI7ý‹îyžÔóî:a›Î¬®í.,n¶2pq°øx¥ŒDJ\=¨óhã­rU‹2 †hÎØvš˜µÁ-kìmçkÚ8šföD [݂̓ŸtÉèÂ×fæx+¾?Ñ‚˜Ëšv¾¶³Oy6t3!ÀŠ˜Œ¼Þtt Ñ<W¹ô1•02ÅFRÅRê‚§‹2`îâŒMϹ7¶·½™ìbóäß”K?Ÿ–ï’eÂ`¸üÖ–‡3¨ý±CòŒ¦ß%0:äMÆBA@Þ¨_|ŸÖ ©1˽­­¯g\¿åÇã1¼–ÉOþ“TpÈ¿·WüÒ— Nöl8j*\„‰…oF"€œ¾–¦lyÙ,b›ÕÉÁß~‘‰ÀÉû*t_òjcîyØï?H%BÀ¶ DzÉôGŽýKàu*š(#%äâïoÏ!˜9ý0‘Ã÷|!-áwð^¡ ©« L3¤¨HÄÄ¤Ñ eС•%±²‡-L©õýJÒ°‹64Ó9`êPÛìó¥#ä¼óºT ò’„¡ò¯øc‚$,ºÇò’äõc=LÄsum[oš]ZÚ øBgD³xü¶\‚ÿr¸V(,)3,Séww÷¾` ·/ïZIªÎ°Ü7B3¾Dó´Sü´kä%}à24´pÝ‹…µjjDlü™º…:¼a{6•ùõíY(Sjça‹íAV63téŒ`lž¯šÅÕG+Wæ˜0¯g6Z7GfìÕÑghbN±ÄFñø†ñÀ{ï_¯ÑE {‹µ..o±*¡tjnnõ ô·*2ׯKEØRá}4Ó³ô~õ¸Î5¿¸åóÂ#4ìÐ3jÔ‚‹ƒ…gG !䌸¹Ê%Ò‰c£×²æ9˜@ƒ}÷.* ‰¥X \N©oØGà pCä输&wXՇĤìäžìqA9c .±ÖîîÇדá€MwgÇCã)›iÕ„-K&¢‰mÏ \ÛF›¬s^O ŽâNS¡T)cÜ­’ô )à äú¿7 šYh6Rh&"‡Ø'Ë ‰~Å^´ÒµÅ.l°Ït‰lJ§Þºjvl°Ä–Ö¾iBˆ£‹ªé•L*3ãÞiåbëÎnè·ó“w'hœ>ˆ¹—÷—×—!”ùûb‘fÀ¯ˆF¦¿o—´ñ4}Ê€‰"0ÑÍOºUb…ñ0YÇñ½¤Ô³5BÑ@à+ÇF5rîIU£ï¼T:H¥ç£ê@ò'Èœq¸È}Qo¯ŠJ2ÕÙ’b"`Mßþ~:‘ø\Z+#ŸOc›<ö[ñ0¹Ýß½„|ŸÒ©X,׌F³‰¼I:?Âc}°‡&c1ø{ÉTÞ\=&BógEDœÀ– ¥j‰á§Ãt&ìïxZèÃÿßïº]s«Ùd:ŠÁ'*ßo‚õûŠ0á!½´¼=ªq0S?uJŸtÉ~ê’=ëVÒ„ºÞ!ã%”í‘k˜ŒáYì¡é ü˪µöB *±°B2ç‚ iØ…oe®îA[w¿ffÆýóÙI*†êW[u„Ï ×å¼T|wZ&¹.ƒÌWt½?H":Ì¡§ Þ¶¦ÀVyóûMS+ßÔ-²rbH]ˆ#vªË™DrܸØÖø1³ [§(GUP$%U*¼C¾W…7e4¢ù¶ŒÄˆí³€´¦[¹S¬ñ¿…d¸S/èãOº”?vHèJ¾Ü¢ÒºXb3[j«çØrW¯´¦Ç¸ðàJàÜ„F˶İYÚxº»d¹!èWÅ+_/›ÏÃõ{Z²»VÚ¸ˆ¯ý~£­rbŸ$Õj3ä5`\VÅŒe­tãÅL6ZáèŸÊKêKw$rU*@# ”¾)Ñø:<Éíï8’éo;F^öN4s4­\]Gÿ4Md¢ Ú:úô ŒñføÎ€©?ݯp8æ6%“‹½Ã$qêaï]Þ@_$¹»EV2°€½TÑ‚éìÓ·²Æ¤£æÆIDƉÖÂ"¯ÕÈÓ’Š'ÙƒZ€VÝ8©ñµkçó‰@Ru£ªO'’‚]¨ö׫„ÄEŽ¢¦Ùøc¸[qI|K>ÇUÎ_m·]ºþ×þ¡ÚóCJ’ýÆn®Ü=;ï÷ú|û>ïž' =@–†xRÂ1ç^oaª™èÙYñÈ.R“‚(ùCû Ý±±ëƒ„$bNLF®`Y!]ãÏ"ÃXO‚©\S+* á¥rÅõè˜ü0¦¦VÄÞâÁ` kÐÞ½ïÎûÙúA×NõÖP]íÌOñ HŒûûžÝÝ/Rª“Ia£¸\Ò`}ÿR)À N¾2%n€•È Œª_wç'& RN>¨Ä1€Dy\="þ<ð ÁÕxð†þóI9›L dú§]âçÝÒç]ÃO(Òo[D=Ã6Çä“8œæ³«æð+ŠàU"·ä³¹ÓãÂ{šÅ¤PK —Î8]«½‚‰ݲÝ#Ïhh6…"˜FdMbP ¨!D“%T&ö€ªÚz.ðÇV IdéB#Ø ê&|kIÝâ ƒ,H'ÉÉ’ÍÃλ¤õÝ<¥|T¿¾¶‘ŒÅ“‘(njæÉ³þàá=¸ ¯Ë¨&l˜¶wõŠ:{xýÒõ•5ò˜¦­.‡k~~yɽt˜N½=9©ˆA¿ïóu $=Va¹V¾&ZõD!&X*Yóì Å‹‡“P»mM40¤.ø]òt›¯Ö“¬°‘7³Ô‘ilš;¤¥pF(,™Õ¾Ž§ŽáC%bIOBù4ÖJ@Ôu¢Êx©çý•€¤*Y);$©–®õQ©!$ø1>|u÷.!ÅJ¯ ;Í"¦cßt#U49e€å9±øµe»$`D2~{ÛÇi_öŽ·ñõݘdÖ#qÐÅöŽ~sO¿zgsë—³S’Ôú#ÒÜ*ˆ²dkç¥Â[diy°º¸´²¸Ëó—óÓ“ãügƒ)‚Ä1}jv(5¡$n…ÂÈ¥Ó*‚;" ܺü½¸‹>h5Dõ°Ïõû¸Ógòûaˆbîs$$ôaâÔ†l¼àSÄãD†êó7³Ê˜•'çP£Ÿ^-à!ñFÌîBþ¤…Béº _‰ø8UóöO'q^;½8. !:×cxÎTÊ 1¼ÁÁç½×G(àD÷ ¤P âäS*’·îìÓä ;0 ÛM¿Ìdu®´³FþúœóÏ&AcïˆJã\_ßË":<ÿ¹jµ“ꊅwht âÀzrŒØ¥£<¬Óh86apuóÇáµp¦Ð.&²Ð¦I¥h„)¡õš&ï)›`–Å ÄdŠÐ™6&!]Êú*5;„kCâ_ˆ¡:wØ6<áTL:(<5•«r»3èÉŽŸ¢œàÐ9ã úüçØãúž$¤€‡°løÅÿõ_m#£x·óbñÝÙɯ¯Ïþõæ, ÐØCíÌ‘&ºì%UBcKºÙ”D>‘ŽGá:ž¡Ú‚ €Õ~>;É%AVfuUQv’?®ïß“„æa£€S"lX†zžÈÌH-c»8ªF—žiÂ(—Q8F\¶Â…qÄÕ@’°Â8“àÅ$‰œtÿ°þ9M…XÆB3½"5ôž§IC$qG¯J¾'”\}ì.0®'diåiÛ9ã[›Þ×¥û UC º\Ó O{Ô¬aǤe]61×Á×ÑÄì çh°H§Eã°×:™U+4ŽâŤ*H²ÃÎßÁM¼o‰òª‡‰Ìí}ºF¦’¡—4ÕSÊp+K!™Ž…c€Îá„ómœ X¨4±­2Ô¦p_2÷ø·I5ùîöD˜ŸÏÊo**ZJDâ+«;“úî º·o”Ê‘ÿý9½opԻ熣HQéoÞ5¿a"ôŒ²/ÀCá0Ä™ºâ2-„±½¾Pò›ç*iÒç*`Ü…Ù!=‰é;0ÉÀ6røz„x !še^žxúRãu©TÈë…«}S«—Ø×§b±³+fŽ$‘.a¤EŒ„CÒ¦zŸ1öè5¤,¶=¬zÌ=Ö›;Àt@®ݾêÉüw|P±[¸Dì#cpõô¦¹6–ò]…(Èu²DV¤Š8©_ßÌÑ=ü]‹èi—|T;›I¥rïNÊp¼)—ÐQ*®oî#…ý\n{Ç#·tq”­ÐÆÃÁ軓’\mka(_ÐU Lug¿H·ày#c¸ær½Þ‚G‹”KÔAtVlÌUÀWÃò2Sb§ h™2çMñ/xrØ>6a ùüÞÝ}±Âð¢wüM6:aÊÄ£ÙTÒnŸíåŠw¶vq§ÿð^ˆõ_oÎ ÙÔà°úþHg Ç£Á€Ä_ÎÎŽ2éåÅÕ¹ù“Õõ¬½ŸÞ§ìékèÅÆÝ£Ï»åO:ŦdT==¥› O‰G´FëüòʶÏã/²>O`muÓ³»W;/aþL<3È£W&k,ƒ ^ ±p¸vV.¬%R@ºAÅá&°bQ† W±;q\µ†5||7É8pó 4Y š‘ž¦ Ú0g¾VCªPýoI„¡ri<ª*¡bé§ 7›>Ã÷í2Åä̹ð)2ÙL2­³,µp5¨:d¥ Œm\ @:X€WX“3Ε­m[îÀàÆÅϲåó“:¼¨$H¤ö)U¹zX„4l¾Fé7"‚SÝÔ«Ô[GÔö9÷¤p†°0ãl=‘ükk·}$TB Çöû<§JsM¹ÀR,ð”óÓ¨”X«-]ÛnëÁ¾~Ï©’ï^Ò¥²14b}¥=Té)$S…;l6ÙH¹ˆ&•º%Èb;X#Üq"„ û›F£Oáœ[ÛÜÜsήNêlù?^ñþÏÖ¼àþ³Yð}›èûVá¾àþï»;hT†Àd´å? ­Äþö6àEÌÌF‚Hæû´0.i=ì[Q¼Ã^NŠÙ~Üý)Ænà×å2ìÜ™j¥ÿj]ü½†TÝi‘ó¯o³b‚CÿªÂ$` z•Âr"?éÖ¥0° ÒŽp§àç!'?/•N>ËŠx’ÔÆøüþ\R…4 öõºáüO6™$ÊÆðþïN‘â¯çgðR‹×¥R}ÒÚƒTF:jù¾]ÜÐ; -rÿ²*êì×A†ÙÁÓµr¦`o +ŸÒ”Œq½eù0“{]*œÁŸ_ÜtÍ­ïïú&tÎg±lܪ5Í73O(ò—=ª—=ÊW½ª)r¾tÚ`q·q&˜“aÝ–™Š«’¼¢ir ÕçrdL[ØÎCíåë7‹Ê(îŽçó7‚$\Iš£Lt¡¾G mãMQQ Ñ53UÝ<•§ü¡Mô_/¸üÁ±t1K¡é6ªÐBÃL|¸w ½ªŸ:ÄO»¤€‡þ×Oœ¿5ôµ²”ô©Ù4Oªka)¿kú®¹¿_oÊ¥½9ÿýÝùïoÏ~÷Ž_ÎN~>=ùíÍùa*q˜Œýöúì÷7çoOJs ëƒ#ú1}ß ÇüÞÐO«T˜~>-/®l·°T­\¤x×%0cÖ«…3EG&ž˜º0h…í¦™£áHM +»g…<ÚÙCÞ`YøGóÀâ&ºâ]‰„T¸Í,5à*H‰ Qð!0¶pµÍìI Ćôž¿6V]ª^¿·Œ®ÀÏCîçÆ[¹½ópÿ¨¿½“ðp{$NÜz@N¹Ø½k Gó‚¦Oå’©w§§pÅßž -él8 îõûKÅj—Šp ò™¬L©ù_?öü³EÔÈoìUöòåÊ1½P:Õ@—½ «uá¼v£®ª>!vu°Óð…‘\¾ÆÞQÔû˜n`Œ?é’×&iè‘‹•Æ­-Oéè0 dâ ¤¶½}JfSÏÞ~{z,NºN»V, Èó ’H R±ˆ¿ÝñãIØœà¶÷é©hªËAd 8¸Iâ{€¤z» â•]W­Ì©‰iwñðàän¼æ¶FYC†g=cxNÁ‚t(ð†÷Š9étoîòzóÙŒev“‚6l—ÄÞIËõ“ê*ÕÉDÍÁê"¢šD›±1±¡4b’Æ_eÿÒ ü»W’È5ÄQ-Ö$aîW, Á¬òèÙÕ‘ÃK«òx ¨âDÔxöh+M(†ÂgX$·–ãÂrøkŽô ©£¡ÈW&,‹ÐX.ë¬û…îÄ_H±YS½"ôuÙã &°»3ÄúÃL6Œì{Bn÷ŠBéÎ?â$ï]2{ÄF …ˆ˜!A`¨ÚÓ© ø1ïÎÎ×£~„ì0)éÏ_µÒ&>=À ¤XBèä©$ÕåããKὌUP¡÷ÁkôÕã ùý~¯—T@k¿X)à{—‰ÅByww[Pð â÷Ãð0q¾"óe››ûªI›hÄÐ'Õ ëø]ŸDgw®˜l‹ô>å¤Î>¡sÉÇ­ªÉ™—ÝÃÿh–ÝÔ+ïd)»¸ªÅåÍw'¥_NËÇÙ\"O'Ò뛥n¾³¢11Ìžkãi!õ"Ó¤ȈZy:µañ %j±x<í8K°µß¶J»Ó|$Õl€ªD(ì[»ñŒ*9zÄQ\r!à“¤é›\Я°å©–¹Ê%´ƒˆÌì‘B´ýø¨ˆu’°¢ ááÖ4—‰ J¦Æ—ôQîàD*ÙÞØJÔ€uà@Ñ…ù%—cö4´¼´º¶²^8Ì•ñø‘Dòí{tÓ3- ÅKúØ+úx'o²³ùu "®R85wVåºHÔÃ!6ÂCçƒÎ]†fÖÄóåSŠ”ÊÝÞòäS‰Õ¥uÏžÙ\ FëìA:özÓo]øÃËþ€'Ñ5öŽuòñh›ØÎ@v6óõ´¤zâöý…pÜXƒÔA˜t–ÕÊÀüÝ›ù£d<á^ÜPLÍôÉÌL4sµ}úV®¦©æ ƒÁh.ßY[‡0—‰E%ãŽö><dÞ­¾$v—•ðHº2¨uQ¶½Œ–ˆ®¦‹<Ÿdή&kyõïþ[W’*Í5Å|gŸŽ£X¤#vbç Ú)"”½H&æú•NR®^‡‹r7§ ¦k:I=á· #êd)FÇtdš)DTF:µŒMÚº‡þÑÀë—LÝ®1KJÔðbϯ˜œéä!ŠX¿JÉ„‹ Nµ©Gf´Î³%F÷âο^Ÿ¾)‰.)À-ä2ÉpöÅOÄ)ù`†›dq`-œã†Ô¸¹•%óé„yj­½«\ÏxÎ;PÆÝü¯$Õ57HŠCÑ(Àbèõûk µkÆß²Yr©!§’a7H‰¯¯U+Uç¥R ây<þÈVw¹\ØçƒSº¯+IB €ÜC(××*zJ•ýÔ9ü„"{Ò%Ò5ò”*EW>§Ê¾m>ï–ÃþþµºF[8“íí,""ŒÎS>‹ã¬³³_ˆŠ‰wtRgêš(ýÀ°H2©rÍ­Ã& FÛ™ÒݯZcõîû ¹œwo?‰>â’& )ûÕƒ$ò‡òÙÜÞ^à(“›[Ú}ÅÖ2p¶MÐd`$+ÑI"Üþ;Ç^” ¤N¸³Zóî=—ðÀü‰Ž"ÁÈÎŽ[Úå ¶¥VßQ‘Â6ëÞŒEâÄþ¼XÜ\]…}"è ±ÄH. V#£NÅàa•¤r‘…*V¨ðQu·VD™¯÷”¾Ÿý›‚¤új|Þ6®¦G:Û¯ZàŒÌREöÑÙQÃÊèôÊÜò¾J7 Æ©³uÜÉ…ëŒÛÜØµ ©9töO 冠×wz|t^*"G±ðö¤ F™Â‰Ú†~¢HŸv 7ôHˆBÝ ÏóÑI!ï÷… ~Ò1ô’¦ìì3`û¼ Yÿ-W·ÈÊœtÍ­Š”¶)ã|Iv!’bÝö™Š¢öÖçFº:®8#Š£Ç%hríÌ6ìÓ°Á׬X?©ÍV ¶#çïê<m˜N/èñìmmŠÌW…j`Ž´ÆÈëÃL† Ùwbj˜ãöè">.ÈUÕùÁò ¿UÄìÒ,Vñíí=¢0MIò®ù÷ö.¹‹ÜQˆ öÁþaý7­âföD+·ÒÒBú«#] ÿ–Í>c_Hü}l ÿ G¿¡™9ÞÀkdL¼b¨›9Sm|]{ßtç€ ·À*i SæjåLR…æV¾¡…£UjçËÈ=¢âïknÄÈ„í›Ö¡î~-WbìÐwôñ¯WÒNœ·ÏWÔ®ó8ž¶šÇá…3ò¦¾™bƒåO0Â)!ÝHlNðˆ iö}bæb5™® %$¡$¶w Mm<}_ßÞR×Äžü±Cü´Sü„:òìåÅÕ_ÎO1]úÍ’d3ËKëm é?ZÅ´þÉÑI+„ÈžAs ; N$Ät- ï“*ú+| Ë-$r0ƒì·0Ƭ´?‡l˜Æ4 ÷ï»6)}`rHišÐÍÈÆŒÓ܄ƶ³ã B‰p(—H”iaÿ»T’ˆ?¹Tp}.•eKÌý&:6å ¾6p‹éR O¬¸x©’y{·² „F¶\/zÇiçÜd?§w»ÔÅ#œ‡Uõôà<–·æ6ÓÙ×ÅBù¨B)Hâä5—ʤé¥å]4Šìu—šnh·ÝÔ™®£ã,\=ê•þ;U’j"ݳÚyƒc{k'k¶[hÞØôýþóù¯g¥p0&™pÁ¢£‰±b{m_VB¯÷nÃ0éQ5±§šè#"™Æ5뎆ÂAÄ2³ÜD—CvÛÄofŽ5öª ¤HÇLùÜÁM³ðh9\«/iòW½c}‹¦»DVº´Z‡vöH\ ‘A£³Ì-lð$Ɔyß°~eu›QÖÖoºŽ¢û™ȯö67á+l®·/“Ê|S2ôz?ƒú"¢Cb;;ñª2SS'ሃð_€3ÐxüW"H]½DD©Õç¢Ñ õi<½¯K5Ñ›Õ;?Æ. Áe ûýðñÌ/ž#Í‚PÈ»·GÔ#ïÎa ç0m]ø¦Eô”:ÒÁ×c*f°T[Zb;]jßp¼g{›xßqêûæ]óëO)ÒVަkÀ€}¸m=UÓë m0Šl¾W⢽bÚ\:ds¸ÕŽ`P¯Ž‹vv5!AË­S`âI #jëî^ —μ;-®èz #£{~i‡+³¶õM÷G,ù…îÝUÚ»Pª 6 =5LfµÞ×càƒ±½ö¢’n̤/Êæ(#Ä8ÉŽiݨÛÕÄšlc*Fupüz~¶º²ÁÒ.ú®]¢ÖÏzö½›ÛÙDrueS °õˆ½?¾u>H;Gv°¯Ã_GMÇš¼!3$….â/Û+O×N›g–V×v{ûÆ¢¡(•722n<Îf ÐTyåY'pïsX46†uM`5/̯$Õò-X<Ñp¼ƒ;ÑÀœ€×ZŸfŠÐÜÑÔÉ:©Aûú¹ÊkïÑû*ˆ–D˜þLõSŠdgÇG\Hï^*¯RŽŽÞ dÈͦXD³„’Â’K'R´)ؼQÓm¸¾éörGô‘Ç¿#Hª µÕnh+k´{Ь5¯è1ëùumŠ¡`$ŒåÒ¹ƒL.›ÎL˜Vz$µQ€›‹ID´ã¤Ôg·uôŸv+Ð1òïÓ7²§šùT“~wR!!]í°õ@вº¾KéÓv˜Rbùà¾/©ôjÈÂsþ•.`ƒGAHW½2ß«$]…Q¹XvY•“`G˜á±DS!ðç³2jzý4¾â›Ö!4NÅŸµxv÷×W·åc–Nþ$*#I]U/÷÷Ò ðó4’*{OͯjEô‡±à òozÅœ`ia+0ÌŽiTžjÒàˆEâìÚSëìÞOB »3¯ÃR„8BäƒÝ>3Hª&=ùx41-©ˆÇîûûÄ.÷Zú6aC‡qÍÑŠ}¾ˆÏ0,‘¿dHð‰ˆ_(2‹žííC\â"Ü©z÷§»Vùlöò#\róíî~ ´zm»»wa#¡RÒ =œ[Þ5üŒ¦låi©Øø™p«ßÖ©…Êe†lžJÜͯw丄™ª¬eù,,dÚ½¯ëîS{÷}X¤àð¦â"6³ÏÚ¿éT2¤3té .”÷\|pR_éhÎß!Òã¶Ø°Uè…wµ’t7S QVFQ™ÎÛ äñÜaÓȤÝï ä’)«}~@2ù¬Kü¢gþ Y»÷O?ëi I{4Í]jCº*í‹äÝ äû ©ÞÕ|Vµ}IIiÈN´¾¤kL ›ûmÎåL*5:is/¬Ç‘„Rø(“¾o}˜(±BÆpþ¾EÉ¿H"³gEêaû9+ûŸ<¾ÅÅ­Iãrï•"0ÑðÌ‚J¢î«¢Ûø@yÝV'W1‡uüLÇ¿ )Õ:çQ6™Í£œö…X¡ö¹\:ë˜]ãˆõ¨PÜ;ìÄ“nî[FCÿIw+#-VHf2Wc”*²4±§„#Ͼ?—BwÇÁ£“Â1 ¤¹B$ßrÔ…àŰ:˜O¤³ÂÓXœëӖŽ=ÿëRqnq‹-5·p<¿èV´1d‘P¤Òe ¦N…ãób!ŠNMÏÓE†Ž$´MXHNƒ:hëàM./o¼)—^0˜x],¾;)]©k¾‚´•£ÑÒG,ä?Ò¨H° ìD¹|à9srJD‘Ž˜£Š‚Xñ©iI¤bAb@·[L¨jîlD"ˆd! ¡"ž‡ôIpœ?z‡³-Uø‘2EÀíãÕ>X#µ àÚý}RÞƒk•y$ÃõK¼"Àñpß Åêv×/\aÍKUæoš›ú¢–Fq@pdþÚ¶b:ÏwÚ®Š(r®(ì_´°•]2ÓÊÓ)L‰H„Ìù_ª âÆüò.Mdì01pÄæ(’ ÎÞ[Xh.{…óØÁ–HæÖœÝ.·ÛjººµR † s®õˆíýæ‘qƵšŠF~sšO§D2ݾàþÐ.L‡dDfDõ´¶ñµÍHÒŠ†ú.Ê}îz}Ì;}¶K•$ÕâµS98 Y]ڛؓ#“Ž™Q6nµ;W¤Êiù˜iwÇ›ÄNCð|¡»?¸(ïL&%N}~T—‘ªÎ‚°‘Ä‘Yfv‘7¥âÖ¶Ÿ'³¶rõýFØ{h¸°„²*Å›]¹wJðœ÷ˆnÉ6»=e^eHl@ÒO]òiëb!wð8'C¡gw7[5ìƒoj¦çžSe­\-TÅ8i¾þѺ‚ÿ ’®mê×÷ÖI]Z3[ ¹ƒ§áKô&ëÂQî æò›J$¥c–§Ô‘®1+^7iÍ«.o5éÑŠ›,R‰£‘5Ù'·Ì/mcÉ€˜h8î˜]obª〳›z•;Ûž2.àÃMÏ&á9Ç£q¤Ï˃ûŽG‰y®ü÷BÔî3q†t~ª¸Ôª 7IÝ"ÉœL&â÷“^Iñs©Bך5„D\®£#7Œ3’ØÇ”ø»í¬¯CÈB„›@à“¶Û*“w‡‡q,ƒtI.ø.±>Î1@%Lô&oB|y!éùà>"iš ]¢KþXÝ.<ÇwüAÂ-…š¼ÖãöõŠui9\@.oIäSC&ÏŒiß¶uðuˆJWeE'eä¢$q){ä®2†ç`ÁÊýá²Öº©Œ3Ã¶ÞÆÛßñ¾½Ò¿*Øqœ;ÜØØ÷xFÇÆs†–ÇÙꄯípÝÔãa·Zˆ<–?¬UwçJ•û2'é½´¯&C¬˜'q _>3®›—¨,Jµ9¦bqçì*H݆D3')ýzºØÞS‘²W‡gÉ0dØCÞ}Ëìô@Ò¥Lz‚½(UE[­<u@ÛÄPIT¦P 22nž28²É š“BSµÞ»K(ÁÏ@Pöï ’n(gX,ç ãÞë OÛ×$ã.–Ĉ§ žÚº‡ìˆL†ï&QˆÀ]j"Ö07fXИYC°iYÚûõ/{Gƒú` B õ>>’B$£žËr÷Òvß°¹½Ï@©â$FݰäUâùŸ éÖ.^òÙq]êl`ŒHêM)-‹Û5¿ Fϊǰv¶·=îÅÍIãBW¿¾iÕd«®/&ÕFTjÍqÔãj¨š@0FôTë\휱vä6®QíÜÒò–Ïüùôö€Ý…«‚ÿíâ©[ØãMl 6¶õÈê@‰µ­ÏHᎭ¯m¾9)îÄrEÆX~¿o?Qe(|¶zÒ5Î…ÂA: §äßÛ y½¨«åó­.-Á?‘{Vèþ¹SmÎ1Ï|>Žò¯}æàƒäp"J©áƒx÷öŽJQ¸öú|H´é‘B(6-Éd’9$Š”ð‰.®Ÿ¹Â-ˆ`ŸÝcl'zm ®3|Ýßó÷ItO(Ã|mg?q1ŸÁ%‰ù BR\›4ÚXí•"Oñ“‹JDE=x¦½Ï8 3D‚áÛŸì6xdw­<éÓŽÌFY˜_p"°òòëUüDg à×Ë'ÒÔÅFo•÷ÿK­%Y©]pMæ{‡çz$³´A›Ö´°½¹e³Í9sªñéÞñÇ@=€IDATŽ ÒÍž®gÈÞÊEDZTÈÁ#º¤¢ÄƒØ^Xü ÞõÞ½ÃU’®â$â={g;_×ÌžbŠ´áPt}}Oª2.¯ly÷éD 6]ÏÎÞÝW,$y°ÚëýºÿÝA|ØqJD2oìÖæŠñ!¡ÈŒ\cèó'HºiÕÔªÅpC»DöÖ>cC¯¢…§íäM dÓb¥‘Ö§ZÛØƒ¬öƒÂá!a&¹—v)¨°oÁb°®Zà»Ä ¯× "{øù6ž’+‹kí(‹ÊHs ëËGlœ0ÌášÊá¸ÖÉk2YÏ~`Lëø[ÓÐóÕËÞ±6¾®Û€Óv·#~$¹˜:Lß4è öw'åbZõž(ØóRÑ(Úù`ƒ_ʤ»ÂÚ`5_[Ø„ òøöö Ÿ½•«ÓvD’^øñÌùÇÔúqgRÀWdy¥-ˆ_Q@¸sÅëö`dMŸËÉT¥Úô¦\¾EéÜ#À|ÀKﳯ38g³±PéiƒAìZS_é„@ýËùi8…üÿE÷ð7mÒfŽÂ‰3_Ôê3‹W‹IüñUد$}p;®ŸeÆ5{3G72a½Ý1‚ÌÙ|¡.Þø÷9ò­0ÕX¤€·ø£‹ýãKœ:"ÇÍSleHä"4C yD¡È{è$]BH½E‡g”ŽdZ0¬Ñl#j …¯ib(ÛXJ­-\mbÎ;Xò¹v¾–*4cA£ù÷(,ÊÊ{Öã{—ÈnI7à$Ò7E‚Ý™.2˜g–6·DÒJ¹L&O-®xÌÎ-±QÈßï¾-\øBÿ ’® bÚØ!°´÷CVªÒ륃l>›…[ùëÙI4œ`jaùXìKª)»rÒæ¼TÄél~iuÒ‡Dx+ nYtXÏFZ¬—EìÆ!{;wª•;ÕÌ[[ß;ÍϸV{†Ÿu‰rƒDeŽLÿÔ!}Ù;ÚÈkbM¶ K¢©NþÔ+ÆD#k²«ß Ÿµº¶æ—öd“³-\ͪª>l4Í,¸W‚¾,R‰¹oõ>”g{;ÿ†¤ EÎQ&C"1GC¥ýýû±‘êXÕ„X]Â¥pA`}%±379H“1Wõ5CEܺIþOÁy"%±ì.âZ&ûÛÛ¹Tê䣵£ˆ?ıBÿ}Ïï þz~–¿Î·æ˜[¹_GG”~}ü(–>‡èað0®ý øà€:´¹Ö$‰mõæ¡X)z^0:'CÙ,_ÇÂU"87Þè !!1d.þØ*ol¥rŒ._¼þ¸ƒ;ZyÁÇoËÅzQû Cæä(Ý ¹›*F­Š^¤ÈiåIô² {À¥LÓp ’`»&—ÍÁÛu Œ€™È¬~U±æúŠÑCJdwI—ù_ÕˆŒZœIÇ­ì±—=#/hò¦ÞÑ;†Zè2÷Â&™œDûúÑá]ÚCµáá$V¢;H§¿x% çG¿¾>K'’ÉXâ!•¤+ ©^Ô„H`*å“ñ$u@pI¯¢á+]l^XÞþ嬌áÑGÅVø£ÉX éæaçíâÁ\áÃL¶ ¤¹É¯J æóg…Âo¯Ï΋Åt<éÙjL‹T,g0[/YV­$ÙþIïÑ0‡çz„¦A•!ÒS9 ·{å¬H¼PY1›L)'g~ètpT/i²Žrcc¯tDžô±p|Ò¸ÜÆ7`§nšß—Ð}¿Ž-J ȶ°';xSß¶kMn´ô-3ËÒ1…£ìäŒR8cjýü´mYgZèj_öŽ72'ÚyS½ƒÙ¤kw7ˆ‚oþèm¹ Å& òq»ÍæŠü‡iÔ8CgùQÌ긗PP:cAµÏ p]kK9"@E¾ÝÝ–)‚Op ?¹¾ãÉÔzˆ°dàƒ±ØkSX^®²zM¥Žðš‚ d—KŠ‹õtÀG'Ü b¼×K¤Æ‹0mE:¢›à‰ÝGÅ<ÈòîôdÞ½þÿû®›)PçRiÈ®é¯ïFàÃfm…MÃ]:îÚµˆÇ£u ¢õï‹î ‰GÙTf~a¶6Zÿd [ÝÌÑö)üW )ÑÅprFæÄšeÑä2}xŽC’FŒQpôV*IËwn·Íc+¬÷ž¾1¯Çw-I"s$R»ûÕý2#Mh  ¢NÖ®RIA7½-²äX@±nØ …8ÜSë0µóµ=âb­Mi)^˜½Þ阻ò¢j'Ç65©Ìê_Áƒ$¡1oå"_fWjæZ8ê¡¶@ê ¥½˜Ì7¹2%1l"ó,hol¶%ºØ^›Ä{äfáÝ*IuÃÌ>t©£™=Éž™_Þ›[ÜÑÌõ Ù“Üq­q6—ÊKp’î3Êqz| q' *ó‡_$,˜ ?¨ÖX¶·ö‘•àc€¤›ä4a÷Ë--\m·ÈŒDNEè5wØ ÆNòŸÒ@ôŠ’Úê\[ý˜q©NsÜdé”$R׊ž¸±±ïó£á„DízÅšlï3RUU'ª`)þIÕ4“á@î~Þ%ÞÝÞ‹…#ÑP]Ûê°V$ÎÒ¾¤+ZXãÞx+sì e¸“¥ô{CgˆÇûÜá¯gåh8Æ’ J‘­«ØÅTæ?* (à@ÕG±’®çÝŠ§è™ÐÏFCÑòñfÔ›f·6÷Haé(›ÛØò.­î™›,$3è¨Záº9Ê%ü ý ’ªl$ì»×#mgïoï¼;-Ÿa°é2ŠupÆ^ôŒ¶°Ômœ‰ÝÊ¿7ˆ¨¼±h$zV¸ƒ Øh_ibO!O7ÌW«ÎmÔøà³=äûÝÁŸjaŽR¹Jää\7Ù—o%c‰Ãl¶„Þ d ›4A²©´ß<@v~¨áK,kˆwf±ŽmSÓ]¬d(½X„ÍæîiÀ…3c,¨µg?)NB…+Ÿp š­Ãr©äü‘ ®Ï÷BK±èƒ=T}L»pl½3ãê&…ç\±ÉZÐç;Â-Åd†ÇÙ,¹h‘8ŠžÜ³ª„ºlÇù_ÎO66öžwŠþë9kDmF#cX³ê2›ý‘ç"¾G„G”XW¡¢f8LäCáMHEêðY¦ˆô)j¤Ó\ Œá–T@/Mä–6gæ6V×vÏQ Rˆc€Jêé%J¿¾K`Žºæ—÷ms;-ýfl«@d“¼Ð]@Ò{»*2¡šE.ióÙ´e¶xxð~Y4ÿû›3ÈÛŸv·!‰–Ê´]¯ÔÉ’a„TñðX¨WP»:ŒÌ[…0B&—ÉõHçh’Šnpå}®À¼ýX¸é¨ªÛ +6g4É,M:ßÂÑôÊæ„êå¿´r'aŸë2ÓÅø öÈB ½ŠÜääª bås6¢á þ'Úî’ê”ñªù ÙV¶Ú½´³±¤ š;û§)}ú>Ù4gP#ÑïîúŠGï×ßq¥ÁÞÙ )ß«‹ÿh ‰vìÎ¥ŸÚÅÿ±¥ow×Cüb?I% Óuû‡ Ón§{·WŒä[8“MŒ1£m©ÞëÁtÅSìy—ô{:°cà ¶oKX}Žoß,å΋ÉøïÊ%ø_µa©Kd!óX~bž‡?AÒ…Z:žÆ‡,‚Ÿ„LÚ0m-äråºÛ‘KeFu³Ï{F™ê~¹yqygw/ Dê¬!ýðyCþT;_ß)0aÖ—‹(l¡Rg§ÀÜÌŸ28Cþp(ÚÙÚÉÆã§U²·ª­òžµ½IÑçË•SºÎµã°Â¢»†åV(¤b1Ølö.í68B>l½h¤“JWüÔ 1äóQ<Vg¼JŠÓ° ú±¥ü½0 Y,U¶Ö×]&“)N´×®wø€pßœœÜ7V>Fɾ’˜ÚLÐÒ?,DH ‹«¦ÿÏ´ÿóC6j† sV<¾*©E '’h0=èFíÄjRO±É%“èÀòÜ÷G+†gP®~ðzP‹tgðGqûÞ'ŸÍæ-aq¯š ùlî’äŽ×*;A ³,3 ‘Ê9VöõH*Á¥@- ;¶ÛêI,L¬éñ+†Z9aÉ¥’åãê§8D{ŠcnU1agˆ í},Õ1S/r ¸¹èA®t‰`›6@¸æ/ÿ±Ië¶sÁÛ MZ¢¼˜Ýè`±öÏúƒ„;n !UkÍ“š7‡ˆ‰#ÓÔOlÚ§g¶]Ëþv®vhrÑäÜü CæbÌ1ÑÕ +×iÖ “¿ÏÅæ¢IÂ54,Å éÓì ÷­$Õ“0•j²ØžÕ¹&Ÿë˜¢¶ò´/zTB¹Áhs¯¯í’Þ*Šþ‡w]¨à©ÝßÞN@þBí6ÀpÎbåô7Mýÿû)SožGêw{Ïû‚$R]pÌ® åF½eI>ålãéZ¹š§Ôù¸ýô£+IdWƒÈ¾±²âÝ݅JHŒøð0àõîll¼Ç‘¬Æ)Ru¸¤}Áî “Ít˜˜òY¬²ˆÛÁ =â?§Û.@6ó±¶öO¿¤ˆÜó G™4ýƒë Ђ¯dÌöªWÝÆbˆ´ó )^õQ‡[àó…æ7³É´{eŸ7âèY±|‘ƒ†ì“-}Ʊ)ë¬{–É»“2©]wŸ,Œ²y<®u—…F~fok«&ùCøÔ'Wª uf2ý}b¿]+‰ÁІ­ñ¾”G2šÃl_È(ˆOíWj|@ÀIˆN~0÷˜Ð“͆¼Þx(D`î- $€pyßœ”r©´T ©§!³Ø—Èc\xߎhE’þ×!F'¤tû‰ÁvàÛÛ«·x«¯áÁ[Á_Aæ}~éCD¥–\/ÂCxpwÕ±P{ ôãñ•âþ‹ðI' s­,üÅ·8P9;<û6O„ª« é>,FäÔ養¬-\=S ‚g8DŸaMËÖÈK𢉥¦„Té²ÍÕÊ+·ÎÐ- oVÅ)é›Z˜]‚iÈâ¸Ê%®Ò½¹†OçXôô.0.Øß•A±^Ù<}>‚;ÜkJD„'ŽÕˆð˜ì2[sôáÙ®!gÄ…ßsž28cžÝõø¢ÙTæøàˆ: gI¬,™¤j%Ê]=j0m±]•ÅäÔ@’äkIïuÜÐNàÆTªÙ6ž¾‹?!UÏrG¥Ÿ*´P <õKª”90¾¹¹·±¾ EOðª»{-…$L!¼{”Dâ6ä ç¥b<–à Mýï'¬o›xÑp” =:H*Vp’Õ±ú}»ôI—öÎ6®¦‰9ÖÐ#›u¯½.Åj/ÈæÑ(œ!Þn­®Â¶Q_¨÷K¿â8ÿ<<Êæ4æ•vž¶£ÑIÕT@hÚà“)jü;‚¤§]RÁò`çx[.ÿúúàQ2–X\Ùi «šØ“OºUOºzóB>—­qùë™"d“ûùì¾O̶ðô!Äè˜[¹S³s+gǰ)fs`åS [àŽ†B¾ÝÝ|ÝPä=³*“_XÍ9Š“ø³Çæq׆˜r˜8[&‚ÅHlMï5XNšHT)¸¯¦_g©vÎ,æÆ¥‡1åkhÒªÂÍP¸Ö z{Zþý—wû»¾6ºxHnX^Ù†¨u‚k!õ^uÁeLá(ÅLí»˜4Çv%è½Ï¸ˆÿXþ )a_?üJòL»››1|s3µç­IøÓ.÷Æ ÂüËùIùèhym¯gÐØ%´¢É_ù,ìŒ>èbä9}g§Ž÷hIñ‡¶!·{õ4Oö…|"ÿ©SÚÊÓ MË BšeÕËÌÞìAހĨ C6 oK—:¹£K<Õr—ÐØÂ™ìèÓÁ[ ¨Wf—½ïN s+¾®!GMà€¨Š N,N,gæ²]«ô¢Qïð,Ý'½²YšU…ֶ±hZcÛšq{ 3;XÑÆEÙKžT<=aY¨—Z8SÈwK>WÑIªïÖû˜~`0í«I5œTcp[¾Ž>C'Š-›!ãëuÛû Œ±nþ˜Þ2Ùp.™&½Þ»wÇ!Gñ’¨‘¸?¸ÔWQ…NË»{~çì…-Ÿ6Ï]HÁ>.HªöøÒ‰ÔÂò.]¨{Ù£jd޽ ÉxÃzÀ—§=Ž[Ë„Òñ8ìUĪÒ2dkõ!I’ZêvŽæÝNcá([¨~Ù£lïÓ#ÃIâ¸ã’fÿI¤rx±;!?Τ~{{×mwk[£³öð•=“Þdk’*Ðël«ñXê¼X|wZ:­X7^šÊÆÌ‰Ì¸ÎÙžÀöãFH_1Æ%J}6?/?ÿ6 ;èõÞ·PÁIiìØ _ûûèM>z$Ùa‡†hDˆÙíà Wd±Ôˆê5ÚÖ׉;â'dD‡éôùƒLWÈoð(›»—}tÅt á†DÒûéL>ºNaUÿúúd{Ç;2fLÆ’wyÛ{·Ûªó ðæoOŠ^_ð9UÞУà j'õ.Ô¬£Êm<+áô'C:Z7”ˆÒÉyq~s©LÀžÔÙùƒjX´,©ÌŽÂÀEZz0³øÏv™ÿGÛB3•7Ö'R™-³Crý+ªøY—ôŸÍ‚fŽqŒ¦;ûô¹I¬²)Í»»¾ý=ÿþ¾?yÁܸb!èÓÔOºä¬‰föTkò)u¤­gP=®ID¢Ÿa¢þZsÀãÉÝ“¸}ÉÀRØ,k’<Ÿ¢'HèÌp’°1û°ñûCŠmx¸VtÐãúaƒ·Ÿ_9bàþöv&‘€Ï~uN­ÆÁ¿Ý9BDÕûúÏ{Rȼa¥ž+Skìkk;Heíà ÖöÍÄ㿞ÀmˆG?w¹5;9x2v÷1=Ì‹äá¼(8UéíÇØàn(A½'ÇÇwgÜŸa+è†nI+Sáó~=?MÅ“bµó[Ó+Åꆈ]3‡äÍ ~0b¼72\²µð j­½|˜KÇÊ)'@ ²®ðªÓþ·!$¢„_ɸkË5 ‚â)—{%Ά^U+OÓÖo„„ÑvAˆmŽ¥˜ÓÍlkíÛðÚµèÍ$3jËz/AtóT±S5½ Çfæ¶7·ý‹«>L@2ý•ßšrޝDªŠD ·bâ‚¿ÞÆ›"ZSÞm™ÞÿZÛmuM·Z'±rÃàSú§»¦vN¢ Œ¯èc]¼q¯'x€¼rO««â8wgGF •`÷@L‚”O¤¸ gûËù©lÔ †œþñÛmõ“n¹ƒd<±¾±ï˜[Ç^xÉÒcOÁ (†¹Q,ƒè )rÉ«ê$CH…ü¬yÙá”Áõª{è›Fî<¡ë¦€wuæ%Øà² 2Ï…¤PïþÛK¤=¡)$åОpÓÆG…7IĦš*4£2§žt«úå&½eÞ9»r˜Éþ|Z~S.aŠ*,c ¶€/$µ=íéàŒJ”Ó»Û{ñ`(fyƺ…ÃÒ¯;ƒ‹yvvÂAH¢²õónžüªÿ-’Ñ(ìˆnŠíEÖš,䄽ØúkFHï)ôânc-ZÄsd\ãä:°BJ2þºâÙÍ ä+Ddá ϋŷˆwˆ³ø ;À¾Âd^¤|Ë‘ÚYÚ ú|Œ¨dˆ>oØç»övà Pƒ§âZP8o?Ð]ÿó'öŠD:fù÷Á ¶UXæ%° IýîÿáæL¥MO:n3 C0aµÍµÒ% ˆBdÆÜp2P\c3/Þ8ÈlÏù MV.íÝ•,%ªqF:ø:¦|¶[hîè3 ëÚÀ¢ »ºÅޱkÒº¹±šXbÈÈ€íK—:‘¶¸uÑñvÀÀÚHˆb%E^[•Ü‹x_Ë’£ò—»_¦¯vÛû‚¿5®ûy8gœ(›`KSét–Å‘ ÛÀ°nxÔ´³í øÂ°ïú¾{‰µ„õj!àC[Â'I~ÿùõóŽå„é& ÇIøSã ²"YûH[`MÖöÝ·'%؉áøíÍy"8ͽ;-¿.OQÄÌŸÁÞ\,¾)3É”jjæ?_pþÑÀûG#_>n;EšoY‘ÂÖÞ§ï²!»xœÀr‚eŒˆÛªOåŒøo’ªZb X{–8Ì@œêA©•6dobŽ÷JtÈ·míý&ŠÀ´¼î…§ëM©Dö÷üÞýàêÚ®Õ±¨5ÍéÌn£mQcB,Ñ—]Cós‹§ùCRØ;)¼&òçÍ1ùzk 2ûS^ªvØ!dÿ")ª6J 2m­E"N­Ósúø¥¶|TÛ®Nc}½M7 ‰ T"tõSB"p*Œyï’š^EZ$Ô$"ä—R̯…è«ntWµŽê_@D…'äî<úÓØWઢ:€¶x(Dãî{ûàYGâ­ ùÒÝ2Xžÿzs o²¶áeˆ-°“: "§X‘^Ü× P²FuT³t¡¾‘5ñœ¦À|dÃÀ¨ø×^ ¤k–´†s€Œ”ö¯R¤¥˜‡t´”KÌae`Μ‰hB¡ZÖ*$Ó#´äìÅu¬ÚAœF0"Zò9lÄDäæpÁ ºåF.ä²ÀöA†~þ{‚¤› YÈu碙À%xÃv¾®‰5Ù'3ol ^ðîžoν¶±±g².ˆd:ï¾vå;:WÎK%ßÞÞ1®–~‰×ërqv~5¿“?åƒAÒÕüé±¢0Ñ@‡ùֶǽ°á^ܘ›_sͯMŽy÷ÚÒòÖÖÖ~,KÄ’h/?ÓÉVþÏ{h}ß.1à|±xúi·ª³ßÐ=h©H™áQÇn‘Vf­þGI5ãÚ- "Dͨ·bÉçjåNAÞ/àã ©Ýî•ýÕµýùŽy¡®ø¾]ò”"ù{ÃÀ“Ρ¿5 üµa¾þ£Yø·&Q_ßœœÔ÷ã¾ BÂ|AâZ¸ÛtÛ‡ª§9B’‹Wå¼ao®ˆV÷Å;vCйá¹6"¬òù·—GxëðÙ“‘È'šË{ôš©À5<Æ~Dpqà›€ó L¥"?¬è aUÉrµêÛÝ=~Ð-& À¬ f»_“­ålÄh!†Áßåz,…ËNHÙÈï¿£òg…™”JÁõžáþÝ<¼r_þ~mÚ4Š>ï’<£Ê_ÐF¦-‹¿¿;G‚¡xÿÈL3× )-K¯èî1°’˜òùñE‹kgT·ÀÚ™2W g’&F]¼ÞŠÊ|•Xíf¿72O0MÙ`Ï š³S-ßäk[û»$U†ùQ˜;(ˆijaÉgÑ»ÉQL<(ñ‹ª¾cõ òÜL¤-<‡ÿ ß$de7ú]ƒ…£ÊP?žþ[nçHBî¿-HºÖ±¤¾ÝÀÁ;l9Ϻ½ ¹z&Mü|vòûÛóH(ÒÞ+.À"'oª¿ºä75¡?R»í¾5ž_ÎOÏ wJe>$=&-}]D×Ycp5týÔ.ø®Eðm‹àU·D ŸæFh’;†`{ne*:¹£mlU+kôE·üMŒÑÆÞ±6ÎäÂâö»“’cvÍl_š˜vwð5í|E`¦bË6XÃT!€$çÓ ¤“JÒE=©ªíæfWtÑæ‰ïa;OW©«K}Šɸ«¯{ɘhbM fWÓÊ™laO¼¢«šcŒñ—=ÊVƈP¦YY^/~ñÇ ‘y³ÙÖi|”9¯Êd%V0Êñ›d2ЧÒ`38rt7ÿ“bUb‚aŸº³ÀϽ®@.• x<Ÿ‚rþ)n@*ÞVÒGÕb<ØEØZ¯Ëå<©DY*‚µ¬·c PÓ zÀ”´âqïîîi•ôsm@¸P;‰5¾ãXe $Â}¯Zn’ a­&4{OXCF)O±ÌD½0avßQ/þ½FÞñq4k¤ËŸÓOºdãºÙ½9%Ã}fÇeÀH²ÃzGäk‰ƒD†–ïU<ÁWÎc—¡á¹^‰£¡¥£T@-pÍT‘™*$¢Ø¶nܵ¿æÀÔ¥Û-:j߇¿ÛÙgà.WÂrçEö4±½§içi-ÁÑ…¸ø¢£©f›»D•’ƒŠS9D&tªøg¨ï5ém+9‡ÿæ é t²`‹7ÛËÞ±:¤­L•Zç:Èd~;?0Î¥°†§ Îp(ZÀQ.wvu€ ³+"RÙìv;Â/°"ø-]xg⥠@rCÉ=…$à/’sÄÍP2øFd“à¯ÃWˆó×ÁûX¾D;ÁdÈfÀï‡çàf¢·ØÝ$‘fk4E“½ê}ѣК—~÷ñ±²¹½½@ÿˆ³S`å(’°ŸÉ¨›£˜ëFƒ`ó´!e@ßʬTý9ˆt5λ.D­šX³ÝN{àÔýiJ¿¡~Ú¦ê}»Œ­KLÕ(ÇSÔÜ7ÈJDáf"½79ªêÙÕsFs-îZ>ùÇI—'1w•‰…˜™£­<ý²^¡fccÿ(›;/;\Ë?µ ´ÒÅ~oàõêI'XÐÏášø …`‘ÃJ»åHcߥò' vJ„Ñ×°‘%¢ñd`!K OÎSEVÊÀ4<«U@ðøÌ¤ t'tÝy[.nãHA:qNH [ùÓ­\m¦?v+Ú²T$šAáý/PµÅý*ÊHùƒÄ\~(éŽ>²µ4mK¸¤qÇ!81ØIBRO…y´ÄãàN)‚Ñ‹W,}¾8<"ó$. !Ê6VG¬q¥o?ÏúÁà WÇ>+ˆÃ¨…Š§Ûš„°æнu‚œõä¤ú?MªŒ;“š\Á^™D"„ï…=’N¤Þ”oi¥U¼“ööîÂ@Ê(ñ8Ò¬Ã&D×¶ö··“Ñ(¼må=µ€oS‘H!—;Ê8\+LÁ½lpÄ 7ïïùÎK…“ÇŽÝï›8æÒ™ò’5ZXÜxÑ9ÐÐ=¤™ž ø#F=?ùíüô×óÓß~ ±C œyÚ%A{Ù;ñ¼w¢…g  Ùñ§î׫^u`zÚ¾ò¦T€„‰LÆ„wV@ün8–Vv9R oÄÑÎ7ô ÙYUUû?f%é&´TûI•Ž2"°÷Ø& óFÛ¢ufA:jæKõÜÁIϲÁ9/±Öâײ Ã&É=¬¬ÏÀ'Ý`ñ[œãNòG鵆^ewª•«içkm®õÍ-_s²{ÐÚ3„tã r§ãà‰ÛmwŽ ªEˆð>ð‹>q«„ëúˆô)8 ·ƒ¤zAÌG2Ñx„ùÑÄðþˆ éN‚ÌáÙv¤Ä0ß#qP­ÌÜÄšÕºr©t"šHDãëüÜüZéƒ5Õ|>—L†ªµô6Ýn?àM`I@ŒË¥R‡Ø"y%V¥˜<Ò|^B¶\››»Šqã«.áßú5³ÆÛy“p41Ç_vË8ƒ“|ñÔö¶çM¹ô)˜u¼¾¾£T›¼žÀÏg'ÉHˆðPÑ;œÒÚd*ÃàˆþUþªw¼Kh¢UW8kq2¬…(0Óú§v÷€ê¡H4MƉXÂï †ƒ‘T, >¬Ýµ:ªuNÜ|-,!6’‚u×”òÿI—–F'„¤ HBrmÔA[wÿ”jÒêš[ÝÝñÀööö¤ü椌èG_Ù…0m=ÛÛÙd‘ïï3ûÌÄÅòD)«2…çžïà¶FÞóøà ‚i(qÂA©YˆYoý‹{[D ÇU‚sÍ ®l®Ç}§ŠºõýDT&Á¾r§Åbé«×ºübÏ0éEb‰/‹BÄŒx²Ö V¼¼ÉÇóu©¨3»ŸSeLu'_×Î×S ¶ÙM×ÂÎÔ±^‰;WVDãFà õR˜º*üX?ã¿‹ ×vŒH–« ¯Ï‘nIõç 8„.™¡Lˆþ  é=ݪÑ%¸ýøCðC«6¾¾“?¹½ãýý·7ÙdzyyÓï ~°2\ánã9áÒZìw¥ƒǃÁîâW û÷wÏ.ç‘ùëÞ®10úFîÿý¤÷¿^ò^ÒU\©‘'56±Ô,u+gò}ô eø?åÈÇ­d¶³ß;pßr¥£üúÚ®ÁèJFgÇyïöÎîæìjUÅí|6•9ÊæLö¥.þT+O‡íåmðôÓ¥N&uФ.šØÑ-²¶²Ç‡ÆœüaKWßTWߤ@f14ÐÄ<±Æ5·æš[RXÆu®L2³·çPX:ÌDãÏvÛÍ išCÄÜ0-©‚ã  î«ÞÑV†œ50昙OÅãÇ_#˜ô»ØkÍ =lS'Ëö=´ô¾‹Èñ1ü•_ÎNK‡[ë.ÇìöÆÎqîà´p×ÙïškJ+M5#lÌŒ´ÁÞ ¡ÎóbáM¹X}ÏÃ;H†'µù;§ÝîYD§W8/N+õlÒ¢Êcõ ãzŸéKu‘L"yãqÕ*˜ü‰n׎*bM@·põ’Év/&ýÓkGùà·Þ”J ‹?vHšXÈd`ºcÀÈ–Ú¶w‰X’#›i03†5-l¢7}­ëBªpŒ58„µn¬Nt‰ÜÃýj@RÕnBV—ÀÈ[ù³’ôH8 ¤e¸ˆ?¯Z” I8ÍÏ{Æas=/bƒ¡@ø •>ýàð~Ä!$ð¤háãߟ}CõóTjgc#‹5Zî‹·ÒY‡k™+o¢IþãïI»€%œ€TcwÇou¬²ÄÆW õ úø úèsšò%Mñ²[¼¾¾ûóÙ bsc#¢Z [ÂÇ|´âÁAО›_…£ïÎNr8‡+†z˜sJÂë/ge›s¥“?Á’˜hBE`në7¡RŸÐÜ-¶ó•sJÃj{¿©‰1ÖÑojå雸Z8ÿQÝüòòzGÖÝ7:5=ׯobŒjÍ ÉXÒë ·°Õ°ß³* iñOt=H˜Æ¬ö…-‰.EFp Z¸š:e/)‚À¾çíIùc„§ýAä›ó÷o´‘dàÑÏóñHŒ<ç5TDägP3?œžý€Î4ËRÓØâ~¡|a~©xpxrçɦ L>öÂ~ßëRñÍI) [ló µe~aÝëñÞ—ˆÆ?ˆ½*$•££x‹Rb1‚“<š½8‚lY?ŽÝ\Ķ3p†Ñp4ŒÄB1¸>Çx(•8{e³©X"Ÿ;¸pPÆjqÜ-"ÉÞåþÐ8éýËHroˆ‰ë,á°/ÐñÚÚî«nBHŠÀH™aµ²¥ö½ÐooNç—=È©m؉4Ñ LÃs¾×Œn°j–öÊ¥þÑE– ™¡¶ ¹6¿&„ ÝØ cx–Š*I‚¤Ç»¼ÑeØ (ýÓ<ÕÑ &Žñ¬I‘Ò’ŒÆÏ0D¨)ÙßV#!¢®'!޽½Ç¥L’” ÍúýÅûs!ù½A¿7ÅáZ][Ûñîî“ø ‡÷öƒ:ËŠÚà^^ÝGÉxÒêXÞÜôä¹;GPlìþrvq³ð¼¨l* 'ƒÞ‡øs,³­:?äõ$øÝÒq›XeUO/ŠÕ³zû¦tÂM“Øáí{#s‹{K gª•§iåL4±Õ¯c‚³ÁèŒj–’¼¯è5{½ÞÝ]"3s_ V’Øh ΟÚEÿlxIÔšæ& .½y~k˳µµ¿¼¼ÅO=íü¶UôÏÑO”á'éóŽi£­œGhà^z5jà¯ç'!ŸhxìI{ÿ“NñÓ.Ù+úh3süeâE·ìïÌ‘ üºŽÏVk*èõùö< ‹ºi§FoúC×F†"†e÷ž‡p#2‰$s@ùC wƹtIg’©\* !â Iű*,%c rêçäaGOT;}µBøŸ ç¾ÏI›Wfâñx0xi¡€ÇÙ ¤k/é*J¿žZán: ¶÷ø2ë¨ÆÕ%˜¦‹í}J[1ÇYà«–2W—ÈŒGÒ–°D$âæ2‘µ[0±¢š^œX8EZ°(öOµr£EÁŸ é’àjbdä© {®‚¤Ak WÇ•CÈÛ“Òñ‡¦ú Ø–êÖê**Ì`¶]`ÿSÌ×HŠøýé»MÓ\ç{@œbI\# @<‡©”nz6ƒ^ÁÔÊð7Í"X{&Ûb;[ñ÷¦6öý£÷ל¿¾dß:ÀM¤2Eë&©R4D£|È‘­ôû›søæúúÞÚú^0Y]÷,-ïÍÌ®ÍÌo9Ü»áPT¥sMÛW$êyH˜sÕÆRW/ ø/&òn›g¢º1“üµÐS ¦“„@RÆ.GIÔá*8 â&$—/écßµð3.ÒzDKrþÈç XìîÑIëa&ûö¤|ö¡²%ì¾ÉH$èõ±˜ÞÝýÒI R±ÂøŒ"}Ù£lb޽ )žR‡ÅJ“{q#ç³¹í-O¬ý[£¨•­¦ hŸvÉÿÙÔ?¡·fRÅûc2ÜøÎÌÏ-ÈTº.¦ôû–W½h`»§mãNÁ…}Ò5òm›ä?_õKT¦ß^ŸesWé€ä} .¹óSF½ivƹDPî##wT¦ýýíëµõíï›8sîõßßžŸVH'ÿĪÀ+]H"b‰^ã;  õ*þ wÚn#ó‰gÅbËÇçpç´ö¿½ÏQéîpBïzIStðuÈ)vÈF—8»EæÎD瀧FÆè+¦²šV®RDÈ{¥Î,’D(Å}xŽ9² Ñ®ñG—„cóôáBžIGsp¸Å¦Z¼1 ý ’þp Û ÂcD´5s´B…-O"Ƀä²äc" Ç'ê¾ÿÀaoJUƒM°­®í¾¤Šÿã)ë›æþ¿· Žig‰ŠI6ÑÝM½ÊçÝòçTY[ÑÊVýõŸ)‡‹sú¾ ‘)zÀYA¶t| ù|>oÞ½$•«b¨Ö…•ÕÝ\:÷î¤ôö´ô¯×§‰hJcZèèÓÁ2¦Úˆ™31 ªع°îÀf=X8žU2û''é&ém¬¸m uøŠ…dÕE‘¸+Œ=Ss¢‚«k.씎òÞ ®šâÁK8ö×ì'B¿7¸µåÙßó½.ß(åZûu2X _‰2òÝN ÿÛ›³…ÅÍFºòc 6’6:šX}RýÂÒ6 €h?Ÿ•®-.אַí«&í\ÁèêÊœÏÛ“»z;ÖÏ AˆD[i¿6ô=ïiåLvôéaháj™“CcŽ¥•=—{[cr[g–vw}&›{o× ¿UàïÂwâ‘ø”Îêr-t³%B©>Λ“2Á+²[Ã6 ¹Õ¾°½µaô@/5Y²£l6#}HÌCòììã¼?qϽ\…,Pü~ÿþ~")¾Ÿ“¿)Sñ„P6ý¼[ÑÆÓ’ù_´s Ù±™šòüé™Í­U0ÝÄžêLS…Fd2h…à 9ŽŠ¨N¬±mO˜×úNž uâK¡:–œþpü$ýAÚ $’¬MìÉQíJ~¿-/D¬Ï££Ç“‰Çkb¬ŸH¤Œ ¤$öxaIH 3É”jÒú¢kè?žsdúý½Àa:ƒè¸ä E©|Dèif¿ìq/nò$º'ƒîÅõÓã„Î|•› ê ÓÞë‡8§È³©„¨NHÜ.µÝ>×Þ+ù®Uø”"™4ÌEÃÈÖ*—Î u™H|fv£Of¦öë`Á#ßi‰ƒqa©H œÝ7ȈÜZáAªøÿ!½Û®"¤j¹¨bÍFÞmZ¶‚ Î9|ÔÌ´qÇŒ5ÐFi<ÕQ&y÷{‰Ï9Üô¢¸Áî[{N°|_žÆWþØ>ø’&ëá«^u‰$ Ã1n¿nˇœ;èõúööR±X&‘ø` ã¬PÂ3®3H¥sÀØ%0A„¥ L¿b¨©ýÚ€™±¯¬í)& ‘Ž1hhçªÛXJ~Æïñ•Ž »(‘'ùîe$@H}ƒc?¶‰šXjØÞ(†.‘"4u íõìÜÚYñø —dÑļ{}oׇ²‘ËÄpø¼§kY¬Ðnlì>ëà?oç<ÞRþ¨x-ô|r"½Hø Ñ ”¿5.a²#xa öî8þ¢>ÇÿÖ<$¿Çˆ“L,f2õλ!AÄæ jžuc¿Œ )TîTÄG{¿qÊ´üÛyyqÕÓ3hnæê»–^‰£wØÕ1`¤ŒùðU £Ó«²©y®b–‰\oðä÷ˆíܺôéOô'Hº®Ý&vtZ^1't¦Å·åÂm^TòƒƒÄcý ‚Â’Â>š[y4µÃw§åÍ-ïí‚ÿzÁvÌ­½-‰Ì Ÿ_ÎNgç‘@Ùsš²>ÊÔCV}zœ£¹Tæü¸ð¯7g¿¿{ýîôäM¹ €Éç @X¯±Go._!Îéo¯O“±„Þ8'·öô}ÛÌÿg‹¨ƒ§^ߨä„͆c••Ú7ÑÀˆ6ÙÆÓWåBª8NWÐÂ-dEÑD6¬3¶ô‰Oðu©PS"¸ vw<€¶·=ß7ñ™c©X< ä’I2ˆZ®éGcû8‹Ý]8ªÞ†,ÞL¹n¬äOœôòûázÖÌ=k—–Àër1à ÷L¼¤«Úûtàq…\±Kdnåj‰Ö.ÖìЫtî½.—ööCÒ‰YšÈÔ>€šðB¢vK¦–øŠYþˆ±‘FȺfÊ\õÕåëCþ ’þˆ•$ÙÙ ž÷ŒéÌ‹¿œ–oÑe‰‡B™x¼R:ªÃûŸ$Áâ=@Ò#U’Ȁ̡fzöÿ~Ê¢òTÑpŒè┥´±¾'Ö»·¹ý“.ÙìüúiI¤Àn¹l.™q-MYE2íЈ®ƒ)ùþµuyyëôø6jD|ø£‘PÄb_è“è`#ü‰"{NS¼ É˜jºÈ°µíýùìÄï 3„Ú—½h‹¢  ¹ÖîA+mÈŽê²1d.Ò8ÃHèvzò ÙH]þDëùß«’Tm¨¹ÉP'À£N¡•&4<¥ ?ïzFŸ„ãKÛÂ7u ˜ÛúÍ­|c: ÍÍÓn…Rm$Hºx¯à]óç³SC¿½> ;4Äw4u0Ú7ç^ëd+þú’÷÷—¼ÆéêêvµŒ„@R"–”OØzU€Ë›˜£Ï¨ÃÝü±Ý/@êŸOOneŃƒ³R)ŽÝ~ˆÞú-3ÿ¿ÿ|>®›}BA; ¶%‡Ý…PÙà>¢ù Ak[ß4£n‘YüÁa£ Ú¨X—¿£O¿ûC«@¥6æ3é·åR­ñôÊv±à÷ú)<ê]# K!SEÖFÖÔШ½„õ‡.з®ñÌÛ…Å»¹¹¿¿ç#b’!Ÿ/‡ÅuÐ@Y"‘K¥ÐdF,–ÅÈâƒÔ5o5µ÷„Ëž"<¤¯Ãåß—–öû°]7~ŽˆóÁ1JYˉXœ>0ñ¢GÕÁ‡ç#$ù„Çv¾Ž02!Bv˜Cæåµ½ŸÏÊXÄ MgÑÅ5ï´}…=8Å‘š{%vÄ:R,BH„¨Ò=há*Ü\%H»#Bú$ýá@’’€¤YÂkkaO̺·~{}rSŽX¯Ã޶÷%E~”rÒÑQ*‹ƒ…ÃÃÇIÖß–“±D_ù¿~`P8*ØÎð¼ü9Á^O0‰ÿþî\cœû{“н°y†ó@9_¨­wøY‡¨9ÜÔ-þësÖ7Ü!…!¸­H¸A˜!Pÿ­¡ÿI÷H+o v‹6ÞTs¬³º¯g MKÆfºú4-<lHðŒAnT…G¸Å†z@¨øÁ®©zܪ‹„ [ª€¤¥?2Hºb_ˆR—ÈÖÕ¯)¦ÞÀÆúŽÙ¾8ãZ_3ÛG&lùô Â8¢¶öKuÜ!McÏp7Oáóx¯mC°»»uÖlv%ãó‚{9—Jþþî ìÙƒ²©§íýß5‹žSGàv72F¿o—´2凙l™€x´Žß”‹ë›Þ®¾©&ÆüØÓ.Y3cD2jšu¯ç³¯‹Åk!8‘áX{LÍøâº~ìȳïçŠ ¬ ŠÀØ#¶õè¿~xØÉÅììê°Ûâ©mÿ ’¾jD! û0ÐÅ3­<½dÜ‘K¥oªU’ K»‰…ú)d„¾½=2Ëóñ RjÈ6âÑx;Sþ×Ü6hŒ³g¸ýQ4¥"¾Ûß,-ïàˆŒæYàûéìêêŽß>=FSÐp¹²©4~¹¥†DT $*Ó_…|-чíFZ…Æ6®Rjd (0·ð ](¿·!Ë!¼EáþÚÓ8• µ¥£ë@Ò½’Tóô&‰.qõKµ‰H´Ë!aÃrñ¬˜S*¼…²ÙÃtæ(“)ä3éƒt*‹×(qW¹/°O½>wø?ž²¿i|ß&ü©CÔÖ+åŽQ8#?uHê”61ÇÛ¸S ¬‰N¾¦3ùM‹hsÓC´ U!oøÓfÇêwí²vÞžÓû¡CúŒ24 ÕìïùñPÕñµ‹p’wo/~ƒÇ-þ»»¾nþøKºª£_O"$ ‰‰Mo!õJgTbHt‰“”šN’ÌdïšáÑmãkŸRG^t ±úäë[¸ÈúúN*”kŸÒF!7€¿ŽÚ|HÑØÒÎ7Pû¦fç7k¬¾B¥ðáŽy­¡‰4p£¼X-ì‘oÂDü~€·ðºÈ¬+bUy0€®B^o,òÃ%ÅC»!ŸÞ¾Æ–õ°Ò Ü÷(&ÉöõvÀãŠPf0K,ðOêìtþèÒò¡l&" 夣©WÕÈš„P‰H™RS>ÛÞ§¨M†OáùìZ†Æ]¥üa0;+jƒ5»£áøÞ^hiÍÓ¯°µð4ð&ðôbrÒ<ë}TCèâ—"ü ’¾nÔ iÍ@ »ž·pu’ñ™ƒt‹ ÞDƒ8)`·@)Z$ ‡Éò¥4ë§£É×L<ž€¿õHo‹*I'¥L2Íÿgﯯø:'ªUéêDýt<Û§ÏTëœppD“ÿxÉáÇÃ0döØ®¡pö¡Á"ÒÝózü´þI´I Ö*fÊf»‡¬ýÓ°ÁÅ”š…¯¨n4Œ¶.–|þ}x´xGxô'Hº$1Gæ‘U°Äñœ¦p:çì@Û[¾ŒÓY¢VUg®|Ll(pð-Ü"?ðú¨Ü‘oÛ¥nZؓ͜©FÖDSÝÂÑtòuÍ,„Zùº ÓòÚÆ>sÈÔÂN•Î/lÖ$F x`"MthŸÓG™ê&ö$¼Õ+ºò»VÑOíBɨ)Ÿò'uK cúRØçƒ­ý´X¼©+¿55=ûc§´…3Ù9`$C¨’8 ·ÛÃxLZd¥-€Ôá+š£D˜ÉÉÀæÊ¤¤„Ü41Njçkc?Q†ÿóIÃáv-|¬™ºÃÜÝö´³Fš¹ÈLp¡ˆuhWû‚6ÒÒ;2ip½;-àx_•K*Û•×øk`Ÿ`Çú÷¬ª! {ñîî}¾X00€QÀã!Sºpò©T6‘8Æ$³"œ¡ S:‘ùýáWU_á?yHw™s¼0ÃÁIéQ& àéuÎö‹'~hü£©ÿÛAK¯¼›?ö¬køi×HÍBlMÛ;û Ý"3>… @’cD·˜Š¥vvý‰h|qy'àÀÓøö¤8»°ÙÌ}FS¶r´Ýƒ6øÅ&ƼÀ‚ºÅø{35ÿID$sõ Ù;ú§{„º½]ß/ç'ù[o˸¾}œÍúööb¸õ–®±X¶j3ùh½62ÿÿH½6’`å2Ù>ñäÿõ·öæÞaŒ§Ç5~üÅ£\&£™vNhì µå¯/8ÿãûÞïZú{Æ\óë¸wFZ 0æ,VåPVKôËÍ ÌÉž! ëåÃ:§ã.'wÐêFúÝxríáðè¿HZz<´P¼@Ò©Í\rTKnP?º°5–¯«op`­Lƒcüî¤ Qê¿i•PÆN¬ÎPÑzàLuðõ=ƒ¦x4{*WnkfO5±'~è åÆh8Šþ±]ài!ŸŒ¥¤ãÎÞAÔ> öë[8Sm\M#cüŸ­ƒ?´ æù|ö ^˜À:œ`µKÌeôO<ç‘K¥¦œ—Ž×W·ÛØ£­\]÷ ÂIè­DXp5™cÎùõx$¾ººŒÅïh w—‚SÐë­J•sà b@¢H0H„ŽNpÿŽ £Ô[$]­ºü´½±1ðÏÒ½¸ð˜Â›ŒFžý\"±±éé`ÿõ÷§NÉ‹nùóî‘çTôõUïhk¼…=ž4¾®³ÏOlUÌ7@Ùΰ‹6d›^ c\ñtGý×&Q S¥7/º·˜Cúgôñž!$ºÛÁ×ÁÉW±È©Œ¶,~q–äŸ éß$©–±íù,”ÍÔÇPXÆ_ˆ;4ñm#ï¯x´>µcn-ˆ`ÉàSRÛ¿£`¯·åR2`ß9·É𦋭½ˆc4ËQ.AŽN²".3¬A¢…Ÿ>×¹oÆóß$ñ³’„ I²9äË6hý¶eÐju¥ñŒ\¢B!À5ïÕ»¤Åh³D{1jô¶vöhGƒ¶l’€J5¸oÀ¢£O À`Ùê¦Ïµ°Õ3dêè7tôéÚyºŸºFº¸ãÛÛÞ7Xž<3ð¶‰Xrw7 PXžt«Z¹SÍìÉvîäóŽä+ÕÖrþ¸¾Ôz^.CF]]!CÖ:U0’¨uó¯c-\M;ÚoðØZÿt+_ß;d¶º¶¶w©Dê ?I¦þ¨Æ¼"Q϶õéÛú¦)¦.fx¿ÕÆ×5³'{G¿mêåË÷·wà¦1U±2ê…eœPˆˆF}»»ñP¾sLX­ÎîþIÄ ¯à$;¼håé»ô¶™9ö濞s&´ößyƒ¤«ao>H§ å«zý$:¥âñ¶å&îæ@ý÷É;d“ÉvgŒõçÌ=s´F€»ÆHóJ^/\´ Ç³³±/^ «ëû?v ~ß9LÁ©ÄCReDð9¯Uø•è7ºÌCD¢’UöJ¦^±9ONºúu}(©ø‰ªxA¥àd€"0¶r¦ºŒªXŠZò¹øðiß?AÒ $q«œ¤\EÞ361í~s³ŠÝÕG’‹µ‚;¤V+Æ(Û¡PM)û‡æà„SÉD(ˆè—>„øtÆë Å#É\*ýËÙ ‘‡!ò¾·¾3P† ˜Š']sëãZÇð˜…!Ô<¥Ê©ýZ†Ø é8C6Ç”ÏÃ@ IhaÉÝØFq¡^äðQàÅ—IÕ‚€8]⤋µ£Ìw© ÉõÒ8éÓ?H")d¦‰1ö¤K>¦uä³dƒp||Jù÷÷ïàKŠˆ„N±¸°¢7v²O(2dn óxè93~P(ï3PE¦Îs¿Â®ÔÎÓ-È:™ÉLw Œ¯ãMÌ1ñ¨ÕâXñyC神á*²ÙÝ ŽLÍõ N· Z‹²ê;‡%*sÃ)b`gŽÄî÷ö²xæ”ôªàƒ^rãA­CôèÆ¢ñùÅí‘ÉÙ¡1‡Tí:è¢iy)M¾)~9-auéóâ1ú­Âñ›R!›L¯¬{-ñ†m]‚i$qÔo  ”>ms¼g`jÚº EH[ `*Ì`¢õ`¡E@Hžím£Áýýx8tš?pº–Ú8ꎼ"dƒÍ¬…£¡p”2µý»6ñÓkn¥øx+R,8‡Xâæ°òm-ïBlÂrÂZ©Œœìà3¢ŠG"ð¡àÃñcS1ùþÃ#$xV 9xÞŽ.õ‚ëÃxÐçÀ «WxqZ,þrV6ÚO®Ñ4©B„›1%®B†cÈf‘NÇ‘…sC@#õõªÁ¢“64C™ûe&þ°Io]F£>Ô£aË&xÝÊÕÂ{Ö £,pî>Èö'Hú“¸Í­JÀ¶i"d«³‹Ûÿz}š¿³Ê-ÚƒÇIZåñ1#‰D«×Vÿþ°\Ã>_—â¯æ‘XwøäM¹/ޱòÍmµ qðTÊéZÑœª ;[¤yEW62'Ñ8’;B…‰…Ž=ÀkXÌì‘…« æãqÒ×PI‚'– ľÎ~›\CŽÊ1èè©ÃO§ˆ49¦v}üÕ¨€$å"_,i8ÙÂÕ*&)1ò|&se$7zRø¼Ì¡o›…Ϻd/ã”êÐCæªñɰ"%j ´÷Ow S–u¯/rZ*¨§—»„fܳt ÌT¡©…§{Þ;þœ¦ì䪖·Ó‰yØÎ …7¥b*ž¶Ïnqe–¦º¡WX {e ›t€ ±PÙ©¦Òx+¿¶¾«P›9¢‰>‰Æ`v‡‘L25¿°Ná*_Ѥ­½rµÖUÜ30ý2,sZ]ÅUË3ÜËËfBÀëà0Oh bÇHéÔï ¤3¯KÅób‘°¸à”‚^o2)bñLB †GøÂ’¢ËY¡p”Ik¦]4¡ž†ŠIv4$¶µð 4Á9·:¤²µ±¥1ŸÝÀ²º7ŸI³w76àŠ‘¾i`ð™Žr9C°ç³Y°RÑhϬÔÈ—ä2R•×… Ÿ+«;}CSÚiW,#’¼äáË&’D”¼€¹ž¸ {tZDpžÃ!•öÊ,[Eè„HÁUÔàÞC6*ˆ%‚ú怄bËüÒ.®Ö{¹Ã–f®#$s;_ QV‡hÆŽÔÞçãDãþI0¤e"&Ù+q 6±P¿±éùåìäø¡Êú°0·’Ùqm{Ü`g;öÊMevì;ûá8ˆhL¸Á? ùwÀj¤IžR¤ÿöþ³«‘lÙ†Ïß|¿½_î}ž{Ï9{ïöåñ d—È#‡yƒ¼Ã{/ïðr˜2ݽO?±Ö’aªŠ*¨jÇ9* D*se¬3æü‰®m!s24¹ yW‹Bz& ‰¡pÁ?E_Äü¾ I`¨$ÑÐ,CîDÜú(•ͯÅ;­¨×pž×އAðë°Ú!b¶‹&qDv>eNÏ®žIåÙÞãòºZÉ$’œ^ý·írÔ›—Yæ¤+ܵ—«ñbµÏš· ðG»¥ö—ÜqOxþÄooÏÎYF¼ŒøËŠ)ìUì€Ä·‰3öM#TYvwˆÂ|r²µ•˜°E¦g×à…rØû‚588áˆs„J_›Äàö··°?-¾­†ÈðÏWâï;7í·-} ½60³=8jòY§¦'¬ÁížÇDpX®nc2) hRd:Ãu¦süšúÒ§Î¥Rq\08Å“œÛGŒ•Rl{W¦máè`a Ö¤ÒÝ"2KtS¿žW±Þ’Û®?¤jûé<ɲóy8Nßÿ©Ñ,êÁ@½äîn|k ¾Â‘Ç!èËù ü¹°Q©–4"e“ãýý)Ïôí}ÿëGÞÓNÙÜÜÊ/§pyá¿Ê‡ùd üq]œUmñAà .tò‡Ÿ0‘Áˆ|Š'×xø‘¹FǼFÊD^xFVNW¿C>äýíç×ø†ú"k@JÖ&œÀ޶¡+ =‚¤Gï6X¦Íü ¡Ú’Œ§ÞTËŸäòý…@Ro]p@&÷°9!TÁÓ‹@Òý¸M$ÛÆjú{%¿;«nmî>ch`3†g?ÿ.\ña­£ËçЖÕw!Óé¿HªË[GÄóÝRKás­ª&f¹Ú+Æ)µ±|íed¼ÆxˆÎ#a3Ìâ¶d™H^Ögkåä °Í—ŽÓñøöÚÚG×-áìïçréà¿ZåíªŠÍ¨&$µêƽêQ/„¶©™§ Й£ÍÓG$Ñ¥¶W|Ó )ùîo¿¾ÖŒhýX˘‘Ù±†Á1So”Ù7žFÚÖc–е¨^rFµc>õ¨¯U0ù‚©5ŒX[[%ä³V>Ù?øõâÌâ}Û,iîhåh_± ü±.áH'hfvíÝiõ߯Ï~}}úëÅé¿/ΰK(…l>A¹ÜHc¯¿¸"R»»H°c{»LøÑõð~6›M&áÅ›jeÂä~BSµòGñÓøã]}önñ¤ÑŽí&>­~ ´F•ÈòÒþ~&KÇPn7Δç×êËàˆ œ‹ "WLygxòq¸•ßµ+è’ÑÅ¥·• \®­­˜Û73`˜ gOÈà0Z®¥R!›0ûzúÆžt¼` 3^î[åCõ×Ëðx ñ ÁV’ÈP6@"¡Úöº„dkÎK'¹L^:8õ”5Ü£œÂFC—oø‡µÜ~I`Ôgá¿ÅÃc,…vŽgLCdzå·_Þííÿ*I€cb[›%ªýÿ@±ò Õü÷2‰Ä vR»OÌ…‘ˆ%——7’±d|7™N¦¸²ñWìašÄJ¤Ï` ¤¤ C€hw!ýË‚$¾…3ÉÈ\›È& žM/ì"V6žƒ¯LµŸ¡ò³5A u šéã5Ø?F÷*BB¿>4Ó£öÂò†g ®FÒÝ,0†§W Qº„m!¾  @ðÌÌüÿy.èè5uˆH?Zá¡ILƒcýröàbi+|—k, x¸Rû žÑê^„Ǫ|r,ö!q,Œ°úC€h!œ$«á¤§ÌáîÞ‰ÍÍØáþ¡Áî”XZEÆ6!üEû‹ž¡¾äŽM:ˆ´4™°ƒÓ3LxþÙ¦xÂз &ÚcAମpxz©Xï}º/Wc8Å ÝÍÍ]lÅ…Oテ¤ñŒ}!•:ÌæØbýSæËTb†»âO«ÐøÏ朞—¾ "¹©Y N5¶µõæi¦SXí!5ø1å3Ù½l~}mçÛ6é¿Úä/ÙÃñ4£ª ‹›}Öv®á'šòÿ<å|ßÖÏ—ŽA`$ŽŸ?ŸŸÎήþßçÂÿn–µ 'ºú,t"Ù…ü(¯š«¥#*e‘A %ö …«­×ÄUÚ®•pê›NfÅû Î?V·¾á#HzIŸ’ă³|Tº c#O€zHXÇ­!L-’ü©ò‰‚%ÈI"™nlkûx¯ðà é¨P äÍÓO7.¸b¹P*™mþõÕ-ø§vÄ)R™^°Ñ`^$žºÛÚµ w†f!40dq$žíê³sÕSžÈÖ m“Öe‡« ˜½ËïªÞ2¿º‘4yVzO³y.¡Ò½8ìè×Ñ‹4å.µ“JÑ•nL$â©7§5Ê ìÜéXì£ ¢üÛÓj>•fŠ ˆhÜg¦õNb+r?!œòt”cLÝë!¡j¡YgŒØ=óRƒ›ÞÑ3Ä Ö´!èc¥"b¦‹E¦ÑddfõäàP3@6œŠš  =8ÿ:åŠÑÃ|îÝùÙ»³SØ$ ”–ÌÚ…è«&DYí7ñ“Ú¦ƒ¿Æ&zrBä¿!nd“I¸ªç6Éy’Û[&³ó§ö~øÈeÀ…´WìÁ&¦rff‘¸"ÖxÓ''HV§Xü"é„Hd]z£q¼ÕÕƒ\îøQéÖ¿nØÑÎ`õµr ÏYz,|:Ië5ª†Ýúqoìkð%{¤™3òS—ò¿šúÚy†L2Kæ N‹'ûù‚Ý=CO4qÇpŽ1…yA^½³ÃÞ`(ÏT„‹ØH~ˆl´~{‡Èh÷̽­–0‹´ˆ¬¼èlBá\…¼ç×Mò$ý @5)€:nŠ)4BÉ1:B§xv½ô‰ÌćIeœµÄ·¶ÉøîF«S<®‚tÌÌ>ãý {ñ„fÐŽ,¼©”]Þ™—=Ã4ì „Rઠ$•M_V’þ ‰ŽÄ lMˆE2¹:ˆh½eÓù|&?h™ÛÚNÛü« ¥—©ò± tèþŤÚ/F™J7ºÈÚ|©ô"m7`®lrg;QÅòiÜ^ùðº%þÄg¥“`hºG2‚­Èp`.EàG[C<¡Ú!‚è“"WW2Úlï5w!„„U­ke$tô¨ý4™›&uµIìØ0ÎQoØ:½µ×O_p&z”d.ÚC´…'½`jº¹ª “kiaÉïûƒ³‹K›±¤/´Ä”Z:{­€ Ùr«XmÁâ^_Išs!Yû0¤¡ª¸æZ<Ø_š›ïè‘}ß©àˆ¼Üëþ'6 &š8ƒÁðÂÏg§¤As¼·‡dÒâñ½l¶\Ÿ8û$Òt£ºG£ž!)"f0’# }Â:‚³œ”Ä–&_¢ë÷§IïΪRñÿ}.üïr,Œ·‹&ÛЋM4‰±[R;¬Þ.‰ù'šª7:·°» jÏaB7,ƒwg•ðÌj›p¢£×ÒƒEã°V\ø¦âɲ6îÑ£ ÛNsÔî&þ$GaCj¨Iz83»&PYŸ³G:Ä“l¤€Ó­‡íµ=‚¤¿]» ƒ$DþÇï°ò þ"±`¶aÜX]ÙJì&¦À*ü]ÚmUˆW¹á$~<’hyo®­eêÒ០• ÙÍ¥Ò¾à¬@>¾¶¶-R[ XB‚]CžR]í)½ñ Ö@ý/ ’(…kXlt¹ƒ.wò Ó|¸ 7@’×3àWOΪ&¦Yð( †HP Lo/¯%•㳜+Š&ŸkÖßÅO‘ˆFJ;$M1dŽïhºPYjÀN™ŽíÂJ(¿grhA\*ýr~ºµ¾ñŒ&oæwKí TCBšÔ54¿&›®EvØqµÞ8jo7€$©½G寯®Î.LH"?¬4½ifu=±µqVÓëK«±©ÀÒˆ94阦!lw] ›8ÑBíìŒ|Ó,HG¶×7ç—¡ù`di~aÃæš¨ R ÷™é½c ƒ}m}»ÑD–bÔ½o.jÉݱíUÓÂÁðåuµº¹ºÚ(¦@ašóri/›‘(FÿÑ"{ÅÅrØ¿©%É7\oœ!Á,•R&ž¤BT¬ò™ à$2Ãq‚[xwIlHÐ@c(ø‡Éh%§oðˆÀ;Ÿä„O‘ГÉ|:}—ǿϧw Ç#Ó+­ãeÏHwQñÎV‘¥EléØºûä{ÎÔuðÇ}Á¥­ÍØÂâz*‘9ÅM7ØPΊ'&çÌ+Þ<¡(ÍÐÔÄ®U’¨1¥îAÏZ€£ötK<¥U¤™Z^݆¥REœ‡C2ÑŸè·qüÞÕèGô·—š­wÂdV½íͼ±¶!Z¸Àaåî1âþ ‰2T"¯wÖ×s‰ª‡?t\›UÁZs©X,½» ñ÷“šT>º°´N ŠUæÁ8lixÍO¦Øp½÷ÖZÈ_$Qð1ñ$—K48ÍÓ“ ¦%Õ8Ia@ìëQûùº`tag{;­š˜ÁŤpc1éRí!Bú¼¨h7Sã{êkÉSŽ,èWV·!©}wZÝXZÞÏf>?%"é„»Clg°X ~аÉêf÷¾`£b!ö–q±Q½B¼±úTÞn¹§S:E“¹YJ[å0ÔÚkk˜ž0_pFáE³ÀÌ”;C6ÕÖ 0ËMXÛ½wzn³E>€¿^œb·…fþ$SìAˆfLÝd ùU±T>šÄú”ièäbÛ»¿ýök*‘õx K‡p‚)·w÷[Ùª)ÀIÍü±Á°Ç?ÿî´B´¾¨å °éMµrЇ¹nZv”k~ÏF ¤â oÏ@ ÈjàEl{ðÍ­Ï üÅÕ•u‰r‚&zÅìèµ`³BKî`BäáO´ð†‚¡¹ƒ ’2BN aÒÉÑÞ^]“q³Ë‘ò÷„¢ •ÚÝÝK§áç÷óyìÇw' kO®‘Û é#ø•|*µŸËÁϯ,,æ3iÀ|õ¤kN…oªH÷A5èzB×Kt.¸ÉDÆ\1º†¬³b°ÆÇT ´]ljŽ ÿ¾CÉç39\«;<-êӌ›…&d8@8Iáë£þõˆAlÚø_ß ¿™o|ÅãËÍédæ¬tBFg²©œHƒôZ;{‘¸6E'è#qû$}HêC ér^@Gšn¨îÝ)±´pGuãžD<…äSO>¡Øþ •$[ÙT*“H@ªWKI¿L2GeÀ‡¹ßÄöö5—©_?,ìMÏ.÷i,MÜaä+„n•‘=þvBñ_$¡®"ÒIBî²)"Ê…KpàÃ8 Z4Øf•^<-*½ðjc€Ÿ’$‚?ÁÀ¬yÁ [¼Èý=Jw›È4n Û=³SÞY®ÄÀ ÌL/œãɯwg§oOË'…Âa>Gé`?±½Ëïü‰¦zÕ3Ô!6¢-uÐúmb{“ÀüŒ=ñ’3Ö!ï‘Cvëà+mͼÑ=C|…EnpÊôv©Î.5LõzFmÑ¥ÕݽÜÞˆmfÐ2#ÐúÈŒyKÙ{dv£kviiv›gñ•ÀÌ©«êÕ˜mºç³ Ü,…ç9Ë00hͤ’°UÞg=#Ý2S‰?ø*$<ÝR;$ÖýZ[dz²m„üJ¨×Œa㻉Òáñoo.H3…|Q‘xR@U2–<ÈcFàÑ{EáyÉÂ.¹½Mô÷ÉÌüâÌL¹^﹂“;<Ì¥R“¸Ÿè†§¬‘gÌÑï:´/XºïÚ$b©îu¹Hq’ Oe,Þh)…;¤{™  ¨rƒPõP“è‘M$ààÇàHìì$°GdD€Š*Qãlq,ƒ´¹²RÂÜÞZ™ŸŸDQ;¾Px¬$]—@äheeÛ\Ê&s°TþçõÙy±¥¦ç6¤C&–ŠmMÀò£õÙ‘!gD 4ÏͯãI4Ø)ÞV+kk1¶ÜAÃã\¢¬]c&„qJƒ¢[/sÔÞv‰cÔ:=0âVúíÞùL*‹¼¨kZMÅØn²K<ÑÙgí’˜;{-D‹îá I éï ’HÆO0{Áíj!Ïóæ.Êw*&Qárë£Ôõ ßËf!ÎBû á©ÑÛagcÂýÙÇò-2º64 ²°3„$Öv‘±…?öŒ®áHôƒ£Öç]ýß´õÛ!ÿ¡SùC—ú ]ûŠ=Ô&oá¨ú¦£‰†#Ñ…T,…íÉö*G‡Xh±tVÄ"¸OwŽÜì‹ѸQ‡°xxøËE•§° ¯7™“ð¸É˜èb(ÜØØ$XŸŽ¬‘Û(™J<ムQ~Ø^²é2Ü‹nùM:E—{˜J/—ƒ£Md–ê]½¶hšNÁˆzÈÙ¯µvðŸ2´ßwª¾ïTJ4æHtyØè*&_0Õÿj•þ³¹÷ŸÍb»+üÛ»7'û·«FU*,ˆ€õÍG•¨ßÚ«"L/4‘„u)»Àe¼(aÇ}])ߊn&6h ©ŒZoÉd áБÜÞ†(´ E×,2ª7æùáu6•‚óDLó:i‰ºYð ŠlÆÉ î%ÅúøÛß*ÕHf¥âQa`ÄÕ%Å›DvÈ ì\dd¡«× ½Gííì‡îA®ÜX=9"L8Äà.žÄcI‘ÆÕ"´`—ÃZO«ÇyhRwW¿«³ÏÑ)±µ‰ÍÏÙã¾ð žó?!ÙâÁa©†¶‹û¹‚~Â×ÄCó (°ôÙ(¶/±A?‚¤¿c%‰¤òµà‹›n,Åš aKu¶L*}QA5ÒòÇ@R›¬Ýô,ŸJÁñÕB2rÇ£¿pÉ$ÎÝ#DÌ|&·»)­°ãÖU‘ÂÔ°Æûô{þ ©¾º"ÔT?õ¢>ÆôvÌp×ù:Œ/I3N‡ô1Iu„4ËAÉÆˆ‡ÙNØ€qéX‘zNR‘kJ»h²™7ªó@vË—ÿÕ®ø‰¦yF×¾`~¢kìÖý@Ó6÷èÇŒžÙ™ÅØÖ.D ЧF‚¾¡j§jc$? ±~{;‰ ÑjbZ58Ò–ôr`Õîá+5¤K%âú£Še™:%føà,•O11XfecQÉpT<„;›€´à §R¡O;B„‚‰&ÞX«`^wˆŒ€ÿž0ôð_õ 6s‡;E£4Ñà§vþàüüÚ¿ßœßöPy2ÞÓ±‹4eö2™•ùyê*ݨ,5¸A_»hwÐ}>|]©¤b±ØÖÖ^6{ŒÍt;;Ç{{E¢v‡÷hs´·¿…~…ÂO ´Hø+ð)âxÁ‡…¯ðÃù<üE@¹Tªüwí»:ÙËæû4Mö´“• ‡ð¬ihx y<3å®—Üq‰ÎuPØ# 6¸¼ÿ¾8Ë$Ó|•½E„fÜà'‘›ÕSÅ:ŸDïç©§ä#~§i`, RÛS‰Ì›jþîñþÁÉÁ!æk£ÓH'3§'Ǻ1_‹Ð` ’1Èð…ø>‚¤GôP ‰b&Õ&€PÓÍË»`óxB×N‚8 ”Zßk!R(@¹ÿ0ÈWI¤†„œ½ww‰UøÝþ.òðªVþýúÌîžé · Fኑd¨±×ö·IÑ,u¢pÓ¨„|S„Ûm IÃ4–/÷#„¤ Šð8Â{æÝ¢5„Q+šÖÖ9­ÏÞ*œdô™v¶?ŸŸB869¢“öð”oÞ^1r£H>ðè¼\$å¢Ê·ó÷aëßÞ^ Œ ¥ibYƒ¸ÈÎSµHÓa£°àÆZ"}CÂÛà"iƒ<˨è j&ÃîàÒT`ym#™Ý²ÌH‡Ã=ˆhèÂm‹£ ýÉœ€QyMkÛÄ:wxv#Ÿ),.o‰T–§¬ÁîÈ ¦ÖëŸûíÝkØ–ª·/*È‹nêpÖÊ6¨—ÛY[«¼$=È“Kt˜Rñxã˜Æ®ß]HÈþ¶Pˆmn^Ó!T'âÛM„w·¶‘I[ò_hövs³xƒzõ7i·åSÙöÀ÷ª6ÑbéÉ.uO°ÜF˜&±ö ‚f€&…•f Ï®ýzq†Øñ…ýL2³±¾£÷µ '‰-,Q4'sØ}KŃÃ7ÕÒ¿/Nûùõoï.NÁ?OK'™d=¹ÿ~}žN¤«Å¥Á¡s¢+?vÍ-âð#¤ôVAÒ#Hzâv}%Q“nXN&€Œ¥äÎfþ$]bœ_…èsQ.#Oƒ“Û·š;ëë¥?[% ðT’;;™Dâ´yðáöð*ÇwS“¶`ŸÆÒ!1BCõÚî’ä.zÞþÊ•¤ë!àjˆz²®á*ò_ïIÅ!@Ep4ø1]¸†ÞËÖ$ð ¨paß_IÖVÁ„vÌ÷ºR$d‹w§ÕŸÏªoO+oNË¿œŸV÷³ñÝs´<Žïbç÷‘ æèèíY5Y|Õcèìµ°”*@N*ÿÔŠF¤€t}†ƒ¤(þ_Tg‚ïÀ6 ~—¡ð´Kœ‡Äà— „ZØ¢<¤"ÅÅyîÒ&¨{¡ørbȧdþå•w`±OïîÀVêÍÜÑç Ý”oî·Ÿ/®µÛÈD ¤cL >Ì篃$üRŽÍ•$AôeŠýlPÚ s#»w¯µöY vìÃÄÎN!“¡¨NEl܆¤ âO’Æ#ùLæ´þþD ‚F>®üÍÒ¥B*+V™^ö ¾âŒv#q8UGÇ[I¾ÉA­·p·ÌÍ”;üáåB6oŸŠrú'Øý“/˜úW즵ԬwõÛ#õøooÎÉáñÊêΰÉor„ç7àÙÝѡɩ)߬/8ß%ÖŒ¸¾íhŒ½âŽ#$¼@=t¹C I éaÛmW“T~­ág!©bg—ÄL—LÐÅ£ ƒ}ii³r|tQ.^ëî“ ³½¾NfFîÃIúú ’Bˆ¨k€sÄIô""Å/§ Á5ù¶Sõ¼gžóÌ¡FO? $‘õ¹^G¹'ëð ’>õS¼/$áË<ÄDºA6þ oíÇ]"$lIÊ¥LT.Eò<¬~ó^6V¢hC5!ÂÆƒ !¶µu\—¼¯lq¥Ò¯5}Ó&{Å&)8«¾xê8 ™¾Q ‰ 5úù¥x ª‡Áÿbä$ŒWbŸÞ3€ƒC”ºpã’_÷B'Ó…|]mºi øiRWk¯­Ehi[»û½fØùzìÙdö¢rÝÉ‘¨'gðý~>_yq à"´ñEÊHår6‘@Snµú„¹Ô|¾€Çñˆå ¯!ÙËbÊ|8Ž ÒŒ«Ý}Ì߯?Sù»úÝâ2^ñ¢RZ]Ý©íb3–žÇƒ½È½›€$ÌDs2'½ßÌ”ZÐà'{¤™7e'-´>K{¯­«×2³°….þÁmjFªwô Ø"3+îÀOd/“!Ӭř(¢„ä%ww/*R"üZ*x|BP`¬¿¹Î$’q?>†§&]}Ú3Ê$6hí…$…ºûìxŠ% _Ù>¶Á4z©˜Bý5¹“ pôú—w|¡EÊÒÄ6peÆÍ­x>“GêGé,Gn4Ú#¹|¿ÞùŠ;ð«”ÙÆJè!¤oÔªF"h:¤/…`AÒß$ݘ “Y66v3e°£X[ãϺÿzÕÛ«6² aâä‚Njw÷ôÞÅgI¹PüëÖ±‰õÁ´éàÃ^”KžÀìO]ÊŸèȽ R%2n 7‹[o´ w‘ym°%AÅÂnŽ@êO²A}”鳋IJÒ­!‰_«!!Aí®~»xxfÀ¸ ›åjÃÜÂÚ®•^p³ÉÛÙgjÜ¡éuH^ßVÊç¥âœáËÇÇÜ©¦Ì=·ÆòñÑëjéu¹¸°¸Á‘M¶óG_pF›ø“mbS[¯¡ðpÔ5Ç’zë–Òñ.Ÿì LúeÏÐ+îSIÈ!ò,—ÌT×­©£~}jNXNBLvlÒEƒîbƒyYÿǘã ×õú`FÌn7VWçÓåìïÒ/Ë%“7¥Ò裡è âåÞX¾êq ˜^\kÞQ—"‹åðøí£f’¤Je¹r+ò!f;ÚI°s#¯ô z#÷‚z"ÂT¢ùM4Ñ©˜êì³Ùg ™üE M5ÆvSâ»Ã;wZ:±NÍðfz/š0h⎵ñG;DFšͺ2±¤ŽºX†^CœŽj9¶¸q=‚¤Gô¥@Òµ9 ¼©„ë.刻ÐÝoï;Å“ÿϳޙÙUâšI"€ŒØööGCáíÿÛðMÈä HÒé¯ù¨CÖHætÎnd‡åº^$7ãÖ@3ÇðŠ;ŠÜ¸Ð¼ë™ù'ÂHD_»ñÞ$Á®fkBZó‚β ´GÂÌýì§ñ/ ’–|.4í¯ :—KG‡+ë)®†pt"×®[ Np?jóvKƒ/™Èü|Z!‚+^«g˜ƒÛÚzbõο\œm./F£ #&ï¸%`wGõã^¾ÊÚÌë’ØØH‘Ï_/ ÕÄc0šñÓž®>›Xã1¼þy›3Øš@` YKk§hÒ\úííy# ¦ÃCx0÷s¹ò> 9± Å•ñ±ê’C @í¶»MÕ)+·£#Ô+Ĝ뛽B„÷÷“;;ÙºwÛ5É€ƒ\.“Ln­­`º¿-¹½“K&~½8ÿå¬üóYùß§çÅ£T,ÏÊ ¶¡±¦Ÿ„fßp ï.tù½ßbuFò©ôyñø× Dtý÷Euv~C9êgÊlÓwIí]HÊI—Maé Ãsu‰säÃTúpfïCúLJäÖBÇe$¾Ò–MgÏ1¯™J`ˆª$<#;W¤#?ÖˆÍpR:{@òÌNÒ‡‰Aå«”$òÀ§ØËfáÞ'’ _c››H]ý¤ð»° à¿ R•þÞJÜe±÷㻉âÁa6•±y`k`âŽîäb¤ · XL ¯lTOrC¶ÙÓ7¹±¶óö´Œ®´ò'ž±F›xxä P‘ŠF*Œøê‚“T'ºnÍÖx‰Sû#HzI_$5VA®A%œøXD‹¢ßúÏ6•}jºrŒÔ½*ù}¡Åùåt"Y<<¸(—Þ'P:8@‚o»»©8àE!“h•O§cXËàÄ>€J_ðñ¾¢ÿ[¯$áú5ÅRO^\Ú|Þ­ú®KÓÙk†]Ò\@"FÓ~ózçîØU„‹ŒÆ]+fÏJïÐ4·ædù›·?’ìð_lMˆ¡€-?PCHXÆó† ŠÎxæßÓÞkÕMWæC‹ädÖ!l“°2‘dvá#¤{Š’‹6ZÀIelRÄ qØl`A¾=­èY^Zkåšø“íbKW¿ƒ!ŸêAünØZáÉõ¶Óãƒ7§ÕÒÑ1úuøÅ#@h Ïfr©Dfzn“-·³dv®ÒÅ’;i}vDístË‘Le·ÔÙÙo‡Tž£öpUSL™£]bëØÚ{ͯ¸c/zFLÎéŸÏ*Åz…8{ YElëA®ïÎÁ¢üb3XvòAŠI~¡³ŠÅŽÞ+( I|!½€X Pïû~«67—ÉMkÀ®ŒFßSÉÊ@÷ï,ºRˆT&Ì,-mxóýOW¿ö"{F$Š×ÛJé¼x’ˆ¥ Ù|&•]^ݱzæÃ>±ÎÃÚšù,™uЙ_Ú†$_xI¬™¨\¥U4à09¢DyÊð'àÁÜÙØ8ªcÄêgt°{ÚiÝó''@ˆ  s/›}…‘rºomm­®Âµx„èäïùH£²ZENŽ;;ðâæÏ$Ý^߈c[·ËÀò÷³(¡Ú¨px´¼¼%ѹ:%6¶Ú‹[º5$œ¹!„F^} ¤C~‡wÞá]èQ8:%v4ª¦Â£jšš"¥@{+6ºrAÒC¤;üù!ê¸b8Õ;:¡îß$5ìýÓõ$´åS¯Ÿ±†û5¶“ýƒÓâÉÎVüŸ-²ïÛeÿïSG¬ùŸw¯‹WçbHDƒ¨\ÄA!¤² ÒÎú:¤ì— éóœñä6)•°['šâÆ;ùzzRÄnth¨÷Z*"¨ôîôW°’g¥âë«®édúi·ú%{„VÓñÞŠ>±äÓ’Âlþz9s¤¿…€ü’.ÒàTÔB4䆮Õw#ÜdâKOÖS¦!K_”k@4€IDATK7Ã=9¾ä’ITYL§vç#ïKqwc£øþÞÙþßTÊçÅ£“½|*–˜žYœðv G^ö ß©æËF“»qüìÜòʇ¼…ØÙlzS)AÖ‘Ëä—¶\ÞÅÕµÝór¾ K‡ïgó©x:K!-ãr‘Md/Pé pF©Ž>ãØÏæR»;X@¤|^*‘'½tïšzBc1Š&Eq¡ ‰î!¶ìg³¨8MÒ¤‚¼j±xˆ37xϛҲ„IêI©ÝÝl2Y::$ê •÷ÏúýåqÒA~/:³"5Lµ‰‘Çîˆ!Ä«ƒ¤F•¯šÕ´.„ ‚þ.©³»Ï”ZI…ž=POAu·`£ÆÃGt÷ â}ǰžZw¿ÖžG0ܤ7r~bÉ DÇÁäÇ ¦¤E»ûmt5w¿¢¦$¹™2û÷4ÝÒÊ„Ú×åÒËdõc—²£"3´×‹Õ©q7­Ñ餀€Ÿî£;GŠäĺBðE¥ôî´ ÿ„ƒxªìlÅææV§g—Ç->¥Á¦´½J½]¢6j‡‹K›¨nŸÏÁ¾˜N$0Ñ í ÷ö;…£¯¸c´~;û×’.[c/ìÓ¡L#qÑù—ö×Ô6ÿ8Ýv=$Q*ðKlÛë2ñuo}#f ×aÔ!S[Sîø®Së Γ²b•_"° xpëPøðj|Xg®Óº¹ØGÍ›ëDã“*r‚C‚–g'G‹ó+Ú»a̱³¹”-?Fšnø'ìý¨'þ¶ZþõüôM= (7`…ó"LµyÕ£ãÚ˜*Au‡‡€“Øñã3¨ÊÔVZH§þè„Éåœ ¬.¯TOï‡*à=kàú¬þ9ðkôYáœ$A,úèdbm"¯PØÝÜÜËfoÖù/ïYýo:ß^ߌmm¨À„$ûoxú~¶Jã¥+ÿq`kûT¤wÀú ±”n. ¨¤«Á‡ê»‘Y<„únÜ/oÊ\ʬð]JÕƒÀ­á$yAÒG·rql¼~À7ÿƒ† v”TÖÖåibŠk‡b(Ý üºÌ ÈI44û÷IJ3¨1„%¹áÒ1dÎ6‘Yfpæ3ùŸÏ*¾ÐbwïÄs¦ö§.Å€~òíiõ&Uó ŸGBm×¾!Îç%©Dÿº||t¼·ŸN¤¶6w]Þé`h!¾“ØÝ‰Ï/¬íår€œ`H'Ò#Îoۤߵ+~ìR?íÖüØ¥ù¾Cý]»²…­7ŒÙívS¤ÖÙç÷G~>«âjµxb˜4ñÆiX1Pu#[ès%Ë.AlçlåF9œû ¤¿$H¢ö»pÔ~XÃl”Û©‰-lyF¦ÀB4ÄÉ&)+ìo3o¼?º¹±KÆaÕÁ-ÞÏåö2$² G,†À¦FúÚC$ÀâðWÊw—¨×G«8(ì# ]U†ÞóëG¸’zrëäD©^g¢þ·Š% b±ÄêÚöëÊ©ÅæÕáQ¯û(UOå–?8ÛÌTüßç¼oš„?µ‹-V/®}nóäädoosuõëóù+G.wˆ¿~‚ ~Ó8åÖ.ÜtøŒ»˜”ýÑOZ·æHÅ·¶ éÌÑÞ\¨T,–Çs|T±ê3>U½«`.W ã¼ê¸’id.=ÈïÛ=óí"cIÁ[AR=fN×BC¸V›Ð<ªiŸêoå0ÌBœùØ $ AÒ‡¶†Y†´>$Ïе¾ùðß‚Kª A©GôÖƒOý5ä¿H¢0Îjä$Ò¿hNö¦‚‘eÈw‘Ö…ÚúŒ®nc«0:¡pIÖ!ˆ¨‹AÞä¢\~S)ýûõ™Ñê£ñõ¯˜?´ËìR¶rõ4ÑÈšºWmŽÎ,//oÚ§¢šGfjNtŠÍp ]²>[W¯¹™7ö‚©Ú­þ‰6ð]§êMf±yЮPD9ÜÖV¢Sdììµ]×z¯í>Ë ¡’ =Ñ»—”ÿΕ$*…¬¦Kb銈 !ºÜË"óÈ:*ÿëƒsK1gp —ßÝ=Ê)¤'ÄkáÍ/nž—KU\@Úþéx–å~6{iIûe¬ÝqÃ÷„pò>o,çÅîßø¡»ëù^ÜÙŽõ*F‰ü3¶µëvŠû{éXœLQÜsÔ´ŠQȨÑû߯zŸt«ŸÒ¾iS|Û,òxƒÕº¯ígRàÓ騿&ÜA2„œ0ÜSøšM&!}Tz FDÃpà ¼QÞÿð)–J,)^«DâÛ1&ûT‚ƒÜ¬VÂn½ÅeLáÊàÙ=X™›++dˆïI~‚%ý¦ZÝË´cÞV‘ 6…T’‹I”Ê ïºˆ×ußa«ü¬+[ow?ÒR~¡Æ_¤Ý6Ô#=AÒ\="ÿ×±ÎIšù¤Ctùzú‹Vóþ°•$rMc©ý ¬wÜ!6¿`¿êvzf­¯íÐE#ß¶J #¶t"óî¬zm6é¿Ýû9'ê·¯+¥Í­ÝØNÂìµ²uOéÚ—œá¼6ñÆšy£€~^qGÚ£m‚±&ÎPÔÄS!¥W–“Á‡‹t`]ý¶Ž^@N¦áä+öÐ?š$ÁàôYéqW†LÁv±©&¢½œùÿÜbÏDlI®ý ÿ~°ã¯ ’°ä4Š­Ý2—PíÜØL‡f·8joÿP˜¯ñwö¹èr7]æv‡×ß”‹Áé.©³½×Ú&2¿âŽkÆüë뱚Q–"„}ˆ” Þ·o} ±‰Ï® Üј —‹î^ßB®ƒV‹#ðÛÛ øÝÙ™Å)—ïçóSÈgJaàŠ9R¥D<Å“OþØ5ÐÌjæÿЩje)réô9– øÔ˜Pk•bìt,Fê7GãØÿ{íÛp›ÔÛÛ5y¶;\aøÅ½\n}y9‡uCÿ.¬¨t"ì ãñ“gEþâe²ñ¨‘é9@x€Úáëa¡/Ö—–Ž0§ªü‡d>Á\YÝîuõÙ{®q’n >uíø¨@ßÀ|Ϙ0„J–€hóу…‹ý¢ÇJÒÝ3YŠ)ŽÚ'š~'Iéùâ@ç¯ ’j&¸Bà Mb¥õÛ°l’¹[2ù‚eø¦U¶°´q^: G—ÿó…èŸ-½BùDb7qQ.sxàw·¶ ù+ß7擦C8ºØÅ×uð†ž1uÍüÑ.8“~+%†ÔÉ:2±:§á £[ê¤z šð zò⪒FÊ÷ÓwÊ™™8s£³kÍü Z¿£Gå#þD÷`mß’þ>·÷¯$aë±0Üʹuy5ö°°_ÈæÃ³›6ß²l$ÄðdÒ¹T2ËS¹Z“3[nsúæa›TMz+°Wm¯­ï¦÷ó° ‰˜u|i•¿OÚGa“Ë¥³*½i{MøŽ˜w77ßœV*G 0No*å@xéK×Änƒ4†;ú#M=ntVŽßžV‘¢Ò _ º Ú‡4à—)ð;J1¨QÄ,ø•£BÒ^]åÿŽŸ~ñ0ŸOc¸h%|òð)-½R[ Ð-¶µïŒàòyLðMtà?ZÀ¢'€Aù<™ö%†Áð†D¢RÇRgØ„þkmi ùc Gr%÷rù!£¯M0‰É×,óè„ü§ Q®.¢ŸéB6uô,O4QÞÝoƒ¨+œýx9ÿ9ÒzIïIrd´÷¾ ý’îÉIªaÑÐlÒ¡÷íZŸ…«²MÚ£‘Èl.‘ˆoï¨ ¶o;T?v*h|½/8°æu¹¼Ÿ…X¶ ±éô=¤È»‹¯¼=«Bjb©Ÿtk^²‘§O7®±°›ÏÍ ƒM°T+’!&õ°º1W‡m¼ž›Žp•í%KçpzËG‡8É;Îer<¥­Cbe*ÜðõÆùý§ÛAÒ§‚¤0O«uõ9úõîÊñÉE¥‹ç¢óÛ¡¹­LfÏ^‡e ˆµn¦Ôæò/&ãéýü^ùîP¤fØx¶WWOŠfûI•¤õõ/*ö¹¢ó¥ØvœÛ?¬u|×,l¦KçfæÿýæâxïÁDÆÏŠ'{Ù‚bÐõ#]ßÊoŒ¿âŒ<ïVi‡¬‘ÈÜÉ~áÝÙ) l-ŒHô€à½;;{]©|T+~žˆhßå†V‹E@Ì_°&wvR»»”ÄÿÃå<æY¨”‰ÇiŠœÏ).Pe1çi lo*Ú\^Žmnn,/çS)XL†ƒÓØ\YA8S(àNÊx„¨@ÄS?ÅðWXù¿û²!”ÍÞHezÎ4ÀžÂRº‰Ï„8ºIˆn‚$ü¿¨#¡ñ£y‹ŽôÃA’£ñÿA6è¿HzŸÀ#Hºg»‰‡çh}VvÝ䙩˜bÊ,¡èêAaïßoÎÞTKðB;êý¶Cýc—º£ó‡æÈ  '÷3T‡Ýî ¿'RŸ2´m lâd)§ˆ‚šIÄÔ]ôµv ¥—‹…!Jx£á¨9XÁeÄ;›ùFÙÀxõøð‚ŒyCK-"]æbª|Dº¸_ÝÙŠä6ƒÛGôé ‰˜Ø#§>£ÙÕŽûˆÁSWï¤pÀÎè3ÁÖûŠ=ü]»zĨœ:/á)ª+Â<°M&°4bgÿ_ˆ„tSÅþÖ­$Ý“\bs…ÿ÷þšêM†P“K&>??Æ”í¢®ŸÄc)ÕˆYÁóÇÚE-ü±§ ýwmR¶P½µ¾ùï×ç?ŸŸ½;«>ûõâ¬x°·¾²šŽÅ/ÊåÒûq7Jã¾Û]ŠI€²ñø.Ø\NÚ~.5ŠBi€{à'iw7¾…JSghÒ¶BFí—Ã_LâÙÉ¥ÙÙ3¬ƒ@š}zâ[[ûÄ;²AÅ~U¤âqOKssðcðƒ\n{}ý>r Ç-¾=-OùfÀB»„öÛ´OpÐ$æ:`º€ .quµ±SÁ¥ÄÌ{È#HzI2D ,\’° ,_2w¶‹ý:§'8¿µÿííÅ^®00ê}B×=éÖ>§«&,¾|&©„'ÈŠîÓ\‡ˆo%Tš^²‡:Äæn©ƒ…)Õxª"Ly‚6b ›Àè7Ÿx{…zð¬8Cæ|Ñ­4;ÃÖ‰ìd2‘aʬ]}ÉPHkšêýCaÉð4!»}"áú$}NH"×™„Wö€&µ· MíbS§Ä G‡ØÔ*˜láO¶ '¿ïhéX˜_>Cε·èñ m›ƒƒB*Ç\ÝFËͼa/ßZ[»¿½É)&•QÓ­kxBxÁà"“ªFOö çhªîðavÖ£ã³22Ê5;g:Å“­ÂÉ6ádG¯©™;ò߯D­ìÍ )œžŽÎ›í¾‘1»aÄÒĵ2ûã;1OÇû JHWÈÎXUrg9”Å…„Ù°â9Å­¾¯iqƒÔ PG{ûèv77…<Ÿ‡›qsu• ÜepŸ¶®ÂÞ‡ Ræ„KžK¥S*“ ŠjG"ô\±û8À×L2cq†_²tm‚I:°­tõY°…­Rè›!à‘rbN=9Çц︻=‚¤Gôg¬$EáܺP%) Ð×å%±8lZ­‚qšx|Ê7^.îî&Ù2ósÖà3†þÇNå¸ÙOæ¸Ä}M©å“BÒÏg•¡I_ ´KbÃ5¤F„tÙ»Q1º]—¬ö §`ÍÁÎTN=chžÑ5…láíi…˜]3ú-´~Sád+]€É”cQé0™Y~¢ðã#Hú|N)&áÒ žððc†rc!{G›`Be°ïlîT?6áUÅIÄ$ôJ]Ýô‹T•`//¡Jj>ý+IdÓuzfþ³©¿;òŒ®û¾]:ižzW-UåÁI¸µW,dó"µýg¤Kbê’XÚ…Ïͼ‰§tÍ+–öy·ê‡vÙ7Í’§4E—`è»V‰ÕîûíÍù›jå¢R¾(—)ÅŒ€c[Ûvry„¢êdmòÕrnx´aß±„ øZÅrJ[b¡2À£ý}øû¹\&‘HcÌ´±²²<7ßÚ‚×ûxøî+€ãöâa£q, ½$úP9ŠëMýïï ’*øÚ–ŽwwOhÊWœQZŸ…©˜ByK¿ ^ˆ‡goÕCsåú°@ëãkƒdNûX<‚¤GôIµ¾’@Ò,¬Äã1UÈ–œd ¹‹Öù½±‰3j´G/ª¥aSð Ý™â˃É>*ì½;«ž—Ë(ÍÚÞþ¼*7ˆ_/Î7Y2@-v<Ñ@T°Ã×&Ho=Þ/,Ž„ `ëíA 5ß+Î`‹`R>8•Žgþ}qº¾kÖ  dÏh|]€°)ô)Þm ést’êíQ¬‰Ä'yY 7Sájâ ”¦d<жüAßÓr2@n£]óý#Q &™ÉÑù? íÑéÎgr"•ùû®6ÞèSº¶‰¡ …fßžžÞÓEäêüüI2–(&%Z[<žâ©œ­¤¯†FeEÆþx+oì%{è)Cg´GœÞÙ§Ýê¶:œAZ¯qäM[<Ø?=>:+ÿrqz˜Ë”ö÷~9?û÷ë3 ÈkèøøÝiåu¹xzr|²_È¥ÒD«‘kŒþ1‹¨ü%R׿ì\"QH¥òyTaJ$^WcнÏêHEÀÇ\uEu ƒB\Š•¿ð$æG5&Ї‡–ÀO4m‡Ø»IgŸƒ¡ð`ã&§ ¿…o‰‡((…ØþK„ôXIzIÉvÚׇgi}V–ʯšœ ÌnkÍó=xF¬†“¤öv±yÜ:ýÛ¯ov¶“}zw3¬?ö´{€.öæ!ùÛÏæ }Gú"Ÿ¾Uœ¡PžW :ÛD“t™Y…ÔÊHwRÁ~ßÕ+OaìªlâŽÀU‚Ò§s.-oʇÜ]}v$º£ò õ …Œ!Ä_DŒ?¡˜ô’>ß–„Rì­KvÕH÷’hýŽÑ¤Éæ/ÿ(=åŠE|±xŒ§œÒxrûK –Ilk‹4zþh³Üµ2O¹´ººó’¥G Ü‘i]\ÍÆêä67§Ï>»d˜`zv5Y* ÔöVÁøK–ŽŒÊvŠMMÜÑWì§wþ׋S—oî‡.5Àµ5÷}ß&yÑ-£q5å˜ZoÖYF'\£6¿?D]žÛÔ šUZÓ¤Ù=4æPéœ^]'[^>Ü'äÂÆûw9…(¿è¸²ÆNNö³Ù¥ÙY$¨ ¸|w—(!ÁWž²ÙR½Š ÿ›À,%Ê14à`ñͶ±­øï†àO¿­VÖ×¶;yDÀ›é2‡z2ª‹vH¬ ¹“Jf®—‘>Ë¢à$=‚¤?HâcÔÝge(¼FÏê»jÉÙdØ$¡G8iª»Ï¦Ÿ@RÿkrNÿÈì›!Mü¾Kóm›Ìœ¿(#“|:}F î¤J‡G:Vßs¦¾]dÂŽ³¨×F•‘îâFw+ø ¡"q†Œ±ƒå®.‰¥£×Ô*42Ñ蜗!÷MN-g7ņ jî€Ox›ÂÇÇA’ÂÅÓ?‚¤OIbt'aŸ–rªY`lç G§Ί'Ÿ4þÓ¸“å±µ-¥ó œ•k²×»5 ë?˜“<ÙOǬá¶©ºÄ“Ï™COºÀô¿/N‰ôÆý-ô>Ùdz{#ÆL*zÒ­î›Ú…“/8#‰èÌ:6ž+Ï̯µò†ž2 Âq¤ÆyÎ4üÔ­ý®SóM›ê¿›åÿj•ýÐ.û¶UúÏé¿Zú¿mW}Û®þG‹ì-ŠoÚßuª~èPô)‡ò9|«˜F}ŠÝKŽ …t,vòpÌôCã|n}m„­X„¿ ‹ @1µÜZ]%grV.ïe2Y\Fjñéº øMS¹¯…¡Yb/·7¿°ÖÆ5ÀMiÅs3–©…7Õrxnë{Œ)Ÿè‘¥hÙ,~´›ö’AÒ_$uI¬L¥›;èŽp5~öjQõ¨ý,2r¡K€`zµÎµõØÆfB?ìQ8[„F$o i"KkuFŠû‰4ûIÃ>’þýúlÂâoáŽt"Bå§¾ÙM»µ¹v³õVS)¬W’0䊴 'àÇmÄ)\@B¢®HGn!`0Fú‡ÑÄ.­…º@c…ùc8©’ä é“CR½ïFÝ,,þ®ô´÷Z;…co´rtøyµJ tx˜AJÈd¸¢>” 7A!ù|uŽâ»››â‡å«Ž]÷q·¸ß¬~1O‹Õ¶ç¬¡ÑÄ –ž!Ò/ίd©œ?\>©«•v¶b4¾æ9CÓÉÓõH­m¼Q¡Ê¶²ºó¶Z&eØ•-®ég ÝsÖ`g¤•?Ö)6vḬ‘tKmt©½»ßФóûít©ô½†¯VšÄÜ)š|Åþ±K1ivþûõ9„šd,¶³±agg}dÜûpœ¤ò|§  ßÜ‹J°,4Þ¿ _á$S¸ÈÔ¸ŒHŠ'’;»D^üŽ‹ùAP>Aö˜à…Ö$»oä)]‡fŒ€k Æðë2àÍC£kþ9{Œ!sàÙÔ…øÚËø’AÒß $é!?ˆ*¢Ë¨!%²tIlð6H¬K;"ŒvKí{»ØduÏC¤[\Þáª\b+¸WÜÑoÚ”ýKñðx/fÏËå;n$[Svõ]I×.×û˜IW¨Ü¤ØË`¤æÃ‰n†ÂóŠ=ÒÙç ÉÜ4©³[æDª¯$qàƒ+¼’Á@ß01 óõ¡ñ¤»””AÒ½BRÃ} ã^›·«ßÞ. gßž–?jÜqǼŸ0g!}§d'‘Ý+—J¥àý÷÷ö÷©-|=ÆœßJƒkýWƒJ¨V.9½sÿhSv÷™—|Û*ý¦¹ohÒ{´·^*>”­V >^]\œžÁŽ'åcDÇ!¢¾Í#á€ÕµAc Wë`HÍmBcg¯…ÞÉ¥ó]ÔÁT¸‰bŠ ¨"ͳ~[W¯¥™?ö¼K®PŒ§#ÑsŒƒ« ì¯!Aªt€Òvvˆ:’£,²)$ Ðm/›%(j{u [ñt;Äíà¬ô]30¹mlóêÞ'ZÞÕ»éd^ZêbâQÍïps Íëmlî2DÃ?Ò4ͼ±®^4XÊS9÷òxèÖ7\õT»ØÌÙIa¾¯ :ß$}€Wú5@Rÿ#Hz‚â'õnþÚÓmDTí‹ Ç¥ÿ. ˆr;† €hš&ì3¹LN3iïµ3´²¶‰Œßv¨ä:[.•ÎÄw)„>Æðc¿\œÚ¦¦Û„ã$Q¬íÈ­¢d7Ü ƒàǺ¥vH‰ÒÁ xá©]dê‘[åCþ!ë¼Î4£žˆ$êQ"º|Š¥òrÔ>dTãByØõV¨õÝd&½g‘<‚¤û‚¤†2’éj™”¬¢7Õjñððá¶ðâ>¶èÊ]5.}@8BÅS;»Ùx+åÑÆ‰-ÀÐßÅÆ)~újP @’;°ðÏ6U»ÐØÊÉÒ~סzÎÐøƒs°_>‰‡Â‹€D÷3™“ý½2 —fåKIžìÄÿ¾8ͤ²Ò!O³À„„?p}—ˆÄrêWS{AÂ’„Uô’5ø¦¾§4…Õî#Pm+\Q´Déƒg ¸³oO«ûùBtzqgsç¸]^XHlï‡ÿ­i4\dꡲ!2Ö¢¼I¯kæ'ðëÙT*Ž9vùtæ0_¸ BÂeνƒ|׊•Ò›jùФZÛ7­ò¬!ìI`A,û>k¯ÎýÛÛs@±Óó›Íä†Ù)6±ðœ) nÊ×xôÀ×?²"ù\tuÈæ½:Ý_pË~¬$Ý~\¹ªq‡½ð/8ÝV/Ï4c®M°[jƒ†ÇßïGíjÝlµ›©@Cpt™“Öok¿ïT÷k­©D*¾µIDö>î×}„*IÃF?š&•¤tÍýç*0"úÚaâ5]Ó Ð…èj{1ª@}t“wmm+½¶‘ N¯Ï-næsy©{¹ýÍ­”?ºÆQMuõ;(au÷ ª¢C¥J΀ÞM !s1,¼ÔðÐÞÐPš}IŸ’je$¸_XðÝÛ!±¶óG¦g9¯îîíz'KZ<[¨v&ØÈkíÇÕuBº„e`®ðÈU.™$Þ)…L6¹ –D]!lOUY¾Üv~Š5/FÌÁÑÄ+îÈ ¦¶™3ü]Ç“g’)Ø5¤U9>‡@a6™Ìb 3ˆ»»ðÙ« ±%ìIwQ.&âÍ8Re©ÜX?6È£ ä)™4ÝR?à¤6®lâŒNâK‡…Ò¡>…~{cóK‰"ðQDrh_'ÁÉWOÎìÎ¥cñŸÏÏà†ÎL/ŒLºì®àîÖöñ^ÀSb{ûyrßá¶ÖÖòét•“Pê ŸÉ$vwábÛÛÛðÒ²:AsÄÄ„§g7¼¨ñà ßUñ$@át"ßM¸}3¶©È¨% R›_ö ¡A¶~ÀS:.àuK"­û°°—Må-uõ9!]!PL\Õƒ-€È©ÀAÐ*‚;jÿ'E¤k•¤†ý—2}‹ n8iÖŒ¸=FoN=?‚¤‡­$ET“³òñYØuÈQ¿ú‘F´t»Ó?ŸNRCËãÊ!À̈Mt™v/ž‘ !N±T¨E…§ÆlêQzÈ8鿚¤6Wô··¯c[[)¬€\ù N*H1°Èе’´µùÿëcPÑqñ þÓ~–öu9˜ØVí.7]2·Ã·’Œg—¶ Æ0Káèî·xBË[Ûɽ\á¬xòóY¥-¬®Ç­žEÀ|t©«VX@JßÈê68j/zzuÁ‚lX!ÔñXIº'‰I ©£wrÜì-îïße¢í³KJ„ä K”È>`5¥Æ…*•*xð› ÁQnó„§‚|Oqýड1÷Eqä§Åã™… f¿éû.U›`ô'†¡K8¼¹¹ûP·ÆBi¸Ã§ƒ xq?›Mb;¶³º…QÓ¡àñÿ强µ• LuË\ØeÒ¥4ZcBK)éC>Ó)1· 'i}ö&¶ÆQNš¦v6wÈ \TÊK ËýríÒÜâeaé!ÕñDØi>N$<½±²6Í¥s;[1çTð»fÞ·Í¢Pd±´¿¿¾´@ç‰"UŽÚÙØô|¼·‡šnÇ1ã»›[¹d:ŸBLpâK r¯«Uø­íµu¤0ŽkrçeXTǯ«ebÔ?ß<ÃÕ5@ŠNwäy·Œ.¤‹†~êÖüHÓ|ß©yÊxQ ¯(=H$»ÉÂÓ§ñÛ< ¯V..àAÄ«µØ†gÅÃs½#sb|ôŽÌCfÈB¿ë}Hð_EHa\H£†È5 T€¥”„#ÔwÞ'ó’>$ ¡f w ЫôÂ-‰ôO÷ÔúM-Qxöv§2ôÑ{LIBŠÔltaAm`;ÄÑ"@xT ျû„¡çÉ' Ùü»³³ÝÍMØÎoˆ¿] ðx¯¬nõHM€±à)EÙ¤6ØHÜnGj:šSé¥ÉY«öô d#AéPP2âi]}H ¹— øta±ÖÛ,²iép€Öç I¬¢ÉN±Q¬u…gÖ“±L>+¦“Y— ~†!suõCÚ„«J¢¯´Ý.ÿN W’ é ‰ØÈøhýå 3ŸJç¯/J({xóFÆ[=U³µ/•núÔ’& |:"³”à Υ¢å~ òq†çËŒöè·í IÏÙ#¬¾‰í­øö«põ=Éèlíð1S»»uã6Â’S:9ØŸtLC‚yN£öÇÍ¡ jO…§’&utI,LÙT«`œÓ7²´¸òËÙ)¼\ð_/ÎFÇ-ÿõCg$)ì? "uœì¬.­ŽXŸ¶ñ8BE'G)O¶±uM,ÍO]Ê:ƒãnlf²y/|8K$× Ðd!F3™Œm¬o­®Â ¸Vç•á 9`ݦP‘2±¶²îñ͸½Ó»ÛñT"}^*ÁJNÄ’3³«“Ö@¿Îòœ®ú¶Uþ”¡Åí›éý6–ÂÙ£B5¡Žr8Ðq±> ¥n©‹!s@œ©y ;r9F#¨‘1j"gHsò¾ ÉÉ¢ ő͒…*)5â!DXD|SÔ=  Šú¯ÇvÛW’xˆ¿‚®/GQG•ã>( +'f{‡¢ø<Nú“€¤Û¹J HfÂmÀ²ôWsäÀP‰…­aõwˆLÏ:›+tzr´¾¼9ЇAR '•Kº1o o¢[êèAž$53µšs…p±nºHç3M-Fæ6WVc{¹=ä£yp˜LduÆ™Ž^ d™€u2g§ÄG‡Ä&T;è’IDBR âvgŸ½Ml~ÅÁëN†§Wÿçâôu¥˜Iå 3±ÍöêìwÒån–Ê/4„ô¦Y.Hêÿð|R×K  ÓC ICé$Í>8ÅíïPI"“ÿpûä:s>Tüb ©¯À‹<ö3¤B¶¢DK·®ükón¹\7§‘j£òòÃC%„“–—·:x†ç,C›ØØÂñp‘éa4¸ß÷aaçÎRìœK©îòÉÁá„5ÜʇG’x56jÜJO‡‚¤dÝR[åƒM¼‰—LÑâ9Þ+”v6·zåC?¶g§çáó6*_ßh–PGµ¸¼¸ò¿¿g|×.ÿ‰¦þ±Kõ¼gðg¤‰;ÞÌ›Ðö‚5Ä왉̔ö‰îåN€ÔJÏ0”„5°ëŸŒ“D͇dáhÑ‚€ý3à5˜§Åƒ!¦*ÈÑ s 'ý AÒ%ZB É—õLݲãò¨­`Tð²®V¡‰&‰Fçö2étìRaöô$Hp××wY2s›ÐD“ê9e„„ETµÒø wg¯Õî]üõ¢ú“OùàMd¬ïöé½Ýx q±PhpvË\/ÙÃLL«‚§ºG‰FÞè¨ ïh™¹Jû¤-â /ïþöóù»ÓÊæV22·=ê˜ïQ{ùŸb4@“¹Xj T”F S®ÆÒ, .°Hà'»¥N8OáçʬýÍA¢›¨¼°’aÃS댰I †é—ç&­±ÃBòøÃ\®||\úº¢5-€€=2‹‘\å H0“)ýl2Ãéû¾KÃÚž²ùJËÎVì jÖK×™¢öux[H“rÉdrw·–/a¿°“ãý\Áá™næ ·Œ=˜Ä{¿@ÚUbb¼9a/‡-^·ŠL¯Ø†^Õ¤Lcjg«ÿÕ"ý¶µotÂAu÷¤ËvQ.¿®TΊÇ›÷ÿ¾êëê5uöšº%uÁˆ|“!sy[Ì’Œ¼Ïàá“}„Öû'œn«/ rãÑk6Àêoï`Ðä^QNÌ`œ"Ÿèáõ—I„µM áàôåì…ôµa4¢ò6 L¬Þ!ˆ¿\\œÜ1B! g¥¸°´Å”!•L£®ƒ ÅA¶»¨·›0Ÿü¡åßÞœk'ˆ/5b»I÷mB#‚/¤[‡îæéãD.¸ ˜f€xR…W"m½–œ1ù g{+žKç’‰Ì~.TØ[^Û˜Ó¤°=êÉi®ÆÛ…”Z&˜R $g(kiýVºu÷áa£cÔ@?|0¨ôgIµ$äæ}°’„€ÛÑćÝåÿ|Zù:x…¬RÂR‚¥K”!¿²46éÁïíÒéd,Fê._Àõ¶œMeÙ}£ßuhý¶VÁ$tñ¨ÅÙËÎRP؈Téà!cµX¬¦4‹ !€–W69ý£¯zt€3è¤~\ŸØx_Ômq 3•nˆ|]”{ý,%¢¿äŒ=aš¸£þZ9º¹ÙETIzªÙ!"uär{ÙœÕænekàÒu!m'.Ï ÖUÝÊi ÐRG¯ùKÿ¼S¢œ„~~ƒ_Sâ>::ÚÛ;ÈçãÛÛñ­-øÉ[‡à®ø‹K‹ëíí4MìCÿŒ®…XÔ!—éãÖ rć¦Ò$‘õžF¸2Ta°¬£š”+_‡:|m˜ØN׋ÑÛª5YI‚àÆ u ¡sЇ’pBW ²T>ƒeîpop’rlš… u¨NøÜZI¶ËˆTÛ¯]=J7è{ £»Ï.üs¤Fª|}q„…úHÏ@Ð8µtQ*.¯ÆQƒV"÷*åýAÒûp'UL‚ÑÄw–ö~½8;kpYúèñóYÅ蜆èCü"<ìã Ñ__žþ…`ú’7Ζ[vwo«•Ú;¿.á¥þXG¯•­ò`:Q=B÷7ç n+FÃôOŒºˆõ ÊJežÒ!p°¤šÄÄ–Û8JGÌÖ£°3ä.‰Þ3¿¸g§üsÑÈB&U˜_Ü2ºæO›ØÞ-C‘ˆ­ñótÁ††zä¾YΟ $QJ*âá9X–¢Ú×Ëâã5ƒÛ+ÄmÔ´­Íÿwò s³K¿œŸ¾fE§„Ù!ùTŠnþjjFT"-ÂtÎ%“‚÷íá×ÑÞ¾P6ñM›ŠŽkr¼d|×®Ô ;÷rùñoA~€'2t%ãq8˘22{])y Ϻ=#t©Q[pñXp[¯í6éÑKå†ET`àg;N*\Ý}Ö—œÑV¶>ž!\æò½oÍÛ³jlk›ÁWr¥#O»•ÍÜQØÉh7õ9<‹§IÔ>&‚JN@*/{ÿñRÔ§Í$S–º×€;;p}ö°‡ÉGiæ(ÜŽÿÐ!{ÙchN´ '_±‡›9Ãzcds3~PQO¯õÈ]} k%ùÐ%ß™ —ÚÙÔVX£]’b’6T¦š×Fôï’.9Iäqµ5×ÐÆ©;Âù0^ºÌ=\[\‰ÉGÃ,•—X)õ I44ËÕ†:{Íp•Л?Ä2v”9OÿÉÚm%%ŠÌцc!OheÈ:‹¼)´!Á#HúHº¼˜µMÎJÛЫwº‚ßÖëÕÇfpŸ¢ØZ*mÏØ#¯x“}6xœºú½öV‘å%wògŒ§´/,mRcáh 9>y].¢+Xº×§¤TW;‚5õg»zÍ\m+Œ©&7j~¦ÒÓÕçlZš…–V±¹Cbíì³w¡égvHìÍB“rØsrpxR@†¿\œ¿©”^WÊÉDÎá[QOÌàádÄïfªüLU Gƒ2¶‡éØþ©*IðÄâYHî†LÑ„ñ1Õ%±6F´œæ"³L ƒ¤žavzñçójéèðkVtH ¹¥âáíL"q¼¿Ú0¸þÕÎü3¶µu„û5’Î1GGe°ü³UÑ.2#oµ^sW¯©…?þ¯™Ë3'ÝŽË÷š‡‡ ,0é¹\é¸önxÖÉ&UOŠ©xzÌè‘È>AHš ÿ=”í[M‡PÿKU}â‹ R)Øùžt è'‰8Ó=oÇÛÓJ.™` µßµ)”´‹ÍLÜÀBR´µj7%Uâ¡P€x“HSj{ÉýÇ þ”;ðºZ®]Ø!:)¤µú1(Lj&[à_-Š6Á8 ¤.‰å{D ²æ³{ÿ¾¨þŒ$3U#¾f™ƒXGÄßé9•kˆ³Ñdš­ ÐdînÙ• ‚*5⤇ª$QÔÊ•H8!¶†®,¸Ýš‰éÕµ„Å»ØÖkƒÔ”`SRLúÌ0{$Í@‚Í´wtžüïƒèëÏíþ éf¿ï3·BóåmàiÃl Ú/™*OK1çAÒG*IuTg&©Pœ‚•÷‚=üS—ª_5žŽÅ yPŇiŒdP9O¯¬ï:¼ózZ“\•C6äµF£³ë#¦€Ë3û+²:$ "üüñÞþôìòÀÈÄzZ¿ùãjx§ Åñrð…´ß‘pÃMGÀN¨ ŒØçÍî¥ñ(_ãÃ5jSáæª}ß²/²>nŸÕMø–V¶Kûù\"~Q­Àæ}TØÛÝIÂÙ®­Ç•cáŽ~·t$jö®:ƒÖEÑൔ(ú·I†( ñŠì=Xú3àeãÑb<*ìaãi𛤓$?¬4R/{†´Ã¶Ã|ÿ‡‡)˜1}¼··ŸËűaêòZ>ÍP¥T ö€ ‹B¡ÙûØö®~ÔÙÂiASôÀIÝ}–ézŽt"“ÌÀsúÙ-*xÀáÒm®®RÕ¯ººò±~wV=/—Œ¶P+ÇÐ-™ìÂlb´*îïRy% ‰¥„a¦RSD8Iæü©[£Ò›õÊga>4q†}‘ßV+ñ‘þ ]Û!6!KÔ_ó`‹ÉËù~Cý˜ôô N¢õšþ«©O¡5 Wªt''q¤ÿ/ß™|F!gfWŸ1t-üQ¤rÔgmæ1û&–WwQÎOë']½†‚TÓƒ¤¢[g™k›`Ý[ºGå냞ðúˆmž7àéQîÇ­¡ÀkmÐû¤«Tß­´#׿Úx’Þ‰éŕݥÕXhvSgœ³å6´h?gHí*'‰Ip’¯¦úý@ ‰ªÌ!ih¬I®ä½lI80a-Ò@[ 7îp é£í¶Ë}3£‘'®ÔÞ.2=gZØ©zÂé ÌLÏCýåü¬‚çŸomÃaÉü“7•Òéññúzlm=¶Ÿß?(ìA 0«xpЄj‚“ó“½ýáIo3IÇ¢¸ ëÑÕA™YÍA@ %š­=™ 9 Oãõ—³éüÆFÂZjQ®•Í=½gÄ8ú´N¡Ú10ì\\X¶{çÛ£Bµ½[bîQØy*'wÀÓ%÷ÈG#s‹;»±Œ;¸ŠãK€túa³U¾û šþñAµ·‘&,už.ÊPzBBÊ ×jºhL‰Iº»ûMÜQ‘b<C3n_ÍŠëÊfÉÔ©Xìð÷Iàˆ?h%©¡4R-î,wï\FDšÄò}—fÄä+žžÜkØ­Ng âÔq²p¼¿ïvß‹í&¼ùvÁðæPw¿ hx©ÒÝ{Ó$©D¾hpö Í둅蟆^ådW"?ãöU>?==>2[=­=êçLC'ä`ˆàêÁ¨Aýå–ÐpÅ] üªýhÁÇlâO4±Ôs3‹Ĭé©C½==Í¥’‰],(z÷BJ gfÖZù£íb#  $ªÉCk"“«ttô"B'Ò('è« ôェ—e$tÂ_[¦>+Ã]K&2C–éö>'O!(CPIºÁ¦Txn¶z0;+9™Ý‹ù}›w…qÉcûÜŽÛ_$!©zocYŽ¥öhB¤µz_ï¶úm¸$'Q"@¥Uõw¨$Q£¹µÆ%à$ô¼! Q—ÄÚŸxÑ3ø´{àûvi¿j|suã¼xü?o.^W+%L¿h a—ž Ø˜ó´xrVD†PXzî×ê/C ª7ÕÊ^.ß§±>g "Æ·ÜU#*Ökà&`õÃ65Ÿ'¡½˜Çjš¹üB˜óÒå.ºÌE—:iýŽWì‘V¶®Gnoá£ÑúÑÜ]F$($Ê á`Lç –jÚ sâ’Ë<ôÉlî? ' “EƒsDø»5ƒ´Pà•ÍÁš0¸½šÚ6*{>›äoÓn«%R5µID‹& “xs·±¹U0þ´[ÛÒ£–(Ǭv_|{çuùä—‹³K´êAEÄ‘ñ}rpÁó  _>ù”aèî·" Y% dðÖ”Ð0= 3W"ãzšRÓ’£ÆÁ¬´PH»›y£¸7E&GÈßâhëÌMli‚i Œ¶)'Ä…ª}Ý'³¹ÿd I>ÅRmH€gw7ã ®êÍ³Š±ÈÌâŽqj‰‹o ¹8ü†§DjÄi›[¸Càì»jùK(Þ±Ü_“»»¿Hª{¿@%)›Hìnnæ3ÙŸO«™dV¨v´ŒÝýÈÐQ”D“?ÑÔÿ\õäs™O‡‡Þ@"”OÆ3©ì”wÚd[]¢±&î8M‚R–rŠ}•SüI7@Ò%Nª·º¦:z­­¼!¯/|uÛï²H:+—~û÷/s3³¯èÒ»Ôm‚I¸2€u0G›L„„¯m—'?X?“ZmÆÏRLuõ;ÚxC koªU¸•€PÏ‹‡ÏÛ¸ë+k¿œŸn!4yx÷rßmvμ`4qG_± 3FœÒe«}¡çëÃÆgXE¹&Q†H„ýö)ÿ"dž„ù0¿´ÍV¸XHî$Pç]E$}TܸA' åÞµ¿³Ï% om§l¾’.GÑÿ¶ ÙB ú="àFʇGùlAdˆ6x€JÒM?ù›–a éc ©‘ß;Ô€.ƒ8xK,­‚‰§týO]ª6޶›¯³¥ñ7•2DÔ‰‘TËûù¤¡ð¸^TnW¡œ2gçV›Øº»u-‚‰v±©KbíØ;û4)Rƒä §(Á¢£@À”™k*ÞDÞ-fbbZ(,_ˆ#÷õ× ™­Õ^1’£„¹)Q.ÂM†¯’áÅø¬à§Þþl ÉÅ aÀF6ï2ܦ¥•˜Ö=98HƳȲôÒy&ÚP „w›Ø$TãÛ»¿œŸ^ös@å‡ÄïÄIª {—J‰/’Ò±XMã—/JEH0 “VþÒÔAM7k‡hâK×ÂÖÄc‰×•ò'Ö`ˆ®wéd_7dêât †!/ú±[û’=Ü&4B]zÖëÒÉþ'Še\‚¤† WÏ@PÇ;lLýD×;>;-~LO²f¥R*½®”6Ö6<Þ0#JSÃÃN—ÖÚ‚íÆÒÍs¾TÙE¨Å×ÖkªLAqìJ'Ã#æŽÙ¿šDÏÚ…‰ÝÝ“½½ÕÅåR£ˆèSP‰ýä$<³Fï7½âŽwˆ&[ù£‹"v×6OäñuõtÅèRGé DVˆhÖërÉá[ÀV^¬îúj é–éWÌ‹Ô%´Îîç÷¼‘Û@Rôo[IÂË2L²M‹wmÔ¹Ä×"§—ÿ@D³“ÆŸvÔoðøÿ é£í¶†kuY#­wß‚lÔFña]"AK¤$ó”ixÚ=ðŒ&Ɇý¡¹B6_„}4–†Ôóy·ò]ÉîY^Þ ¶D7Ú.GçåâÎvŒ-yÕ£kì\…•Ö;)tÙg,S ޹¾¡@·Ô h Ρ]4‰?Â4EÆo,&}øàÕUCàÙFúl 7"ªÝ2ýd™®üÊ5ïdª«Û7èüÔwî¸Æþ\ ‰”Çá¦ûiR”F³.XŸ‚Ó©Üaá¯õ“éQÞåXJM' (ËÍ‚I…ÞVH'_S*_Eα&}\«_Öߥ†TFÆûûÙìîÆñóz¨7‡÷Ì&””9¤%žÀ| oµÀP1 @’±U0þ}§rsc÷mõN ‰X°!Ãפs Ä1ù?O¹ÏY†—œaxÃn$!fÇl7éÖ Hõ™©O_i—•¤+0LÌÝz”î'ÌA®t´ÎTO>¢–DØÓ±íÝáQs+Kþ”>ð„¦náBô`Õ*Ó—†’›ñí'o¸<H U£ GZýb©ž#Ñ=íVþØ¥nbþ¯{–WNOŽ7ÖÖJŸ(ô@>ÎE¥œJdeC¾&¾©G1OY;\m©ŒñÞí­÷Ún®ÊµººIeÏJÅ\:7hôµ 'ºú,\B»’¦¿4HºÏçp}ã‹ ºÍè¢<‚¤‡IõîÛ4U¿¹(ÂN#x`ÅÐ6!„$+S‰ñ«˜1ÐL™'({=eè¹²ÉõÈY±×wñ´>:{ÍýñZÁvëûb÷'ºŽM·Ÿ’p4ÖœÈkæ%H ß±îx}Ö“‚}´±éö×€½6§n™M8ø`›ëýc¶å¨_ qwB‚‹ù¨æÅË„ãvá„aÔQȤNëþ¯_z‚¬NÇ·¶.*€Ul¦Aºo¿K£ Î!ÃQÁ*ˆxä̧RêSäñöMµ¼±çÊÍÏY†¶) ãžãýÊöêE;AµÛJùmµ‰.u ŸÐ¾íPÁ#Ö*˜d*œ/šØC,¥ë ù0/0TK–.w²Ï‹¹$]&ÕÙhù!߯oÚÕBÙÈñ^á}÷´ˆ|ªÛ›;4²YáÌ»$fºÜqsŠíά)$T#ÄTn>¶Tǧä¯ÕÑå.HÛÅÆ—tYls+ŸJRí¶ê'Bó2žÞÙNˆ4®ö^.&!þ¤ýØØéÇû@L]·%Dt[ ÞvI,2½seuçäðP3êcÊmª1l“‡Ø?xdXKàHM˃õAGƒÎÓ\‹Å³“®E¦ NÉÇ«çZ_A'émf?õí¶F’»ž:°´:ÎÉÿVB†Ï9àMáZÀÊx¬$}It»0U­!…¸>"°}2‘]¥g]ˆíHìÕˆ0]Šæ“Ñ(ÇЯµ ½¶©éT<]Á‘å¢RF)/‘Ö=ºþ úW=þùî>ë –¡G9… ³ºÈ‡'>®=p!]cÈ¢¡™kÞ#·Vn3 D_%ƒ²‚ùwË~þ+w€šú¾o|_%©¡˜ªÑ·¥Ž6¡ùC Oÿüž9€ÒáÑëj9¾ãö6ñÇ!)‡Ý· ‰FNQäÂOä•Gá  Š8úà6Z¿½£×PƒïÈØ/„5JOév»ç0—I,Æåðã½}ª(~GíSH' ÙœjÄû’kDò­Øo`pµù;0r+ˆ¡²šÏLÀ©öÈ-³ €º†L`des3šY7˜g†­³½C!"jE9T~ÍJGêX½+k ­i†©ô’ %_¾©Åpo4ÿ><ÔöxÌë3ÛmïÝjk¶$$}î{!4ÿ’¾HºMM¤†–`iÂcƒøùºKó Bcâ’ù8$àá¢Ëí"ÓKÎè3Öà´W,M¯ÊìðÌlnÄ×#Ó‹Èyêj²©ðoo/TCH4¥‰3y5–ÿÑ¢QÓæÕª_aÒN¢KØg*Rdk”¸þÌ4£3ס(¡œì¯æÝ6M±¯P}Hä!}„ñhN’êZ]“„0ÝÊVë'—ææ¶Ö6ëö o'6WVÒ±ØëJåk·Ø®ŽÔíí¥b1øú€U4òqà ‰Æ#ü•ÊÑÑ{§÷K ›üÿÿ8;ÿsqÈÛJy?Wðæ†>õ°«K0ôC—ò)CgÖfww¿Ha]uT)„ûŽI$!Ž.QÖaÂû'Üh·Qqb¹¤:ä®oZå“ϯ¯ÏЇ· ý—Ë©x¼_=Ù"0Ò½#HzUŸê½ˆÛ³\m˜ŽŠ©~Â.€]† .ÀakÂ4ಉ®È¦R©Ã½ý1“W(mÇßUѨÊÝ ;ZÀ‡‡ÃæÐSö8wÀKøC$1ß’®ê$‘Sò¢í×»"3«ŠaO§hB58Õ¯u§Wýá‘Æ…}lj´ ñ삈„îø×I8¿E`Ž¡ô² QŒR:ølÍçë y·uõÚzG殡[u‚X0è@Òµ­ö!@’ÔùØnû:•¤÷UkÄóˆf¨òÝÆ}&4&"%à!N´Èãº×Ü*œ´ôM›ò›vžìmëѬ­n_ ªé!5É‚„”Ϋêá©f¾ñ»’n}¢nsô‹àùA\C ™*$ÃÚF2Þü|5üº05>Zµ·Ev5·@ú+U’®áBbVC ÙÃwàÆ!à«óÉèÇôX0Båà iÈíœíç’©"þò¨Djw7ïçr§ï‡_®¡­:Û^¯ çT´×v˜ÏÇ·¶n-#ÝT9‚zØäÓŽ8——7Ö‰”ÆÿjêƒÇí§nÝKîìîbMb¡õ[»ñäj”£A°Ú¨<„Û—&Ý«’á(]îâHœy™˜÷W’Ðûc­ü)Tª‘:±ž¸ù‡nƒD9y˜Ï–n!º!âv¹œM¦úµ¦6‘6~Ž6qr³ÏØ}km¿³w0¬š¬æïYèêµÐ$6ÄÒú ioA({ÎÔÑLl7“L3Å#O»”Ž©èÚÚV.•…³º#d‡äÐìœyÆÅ×$!©$É]<ý‡+I”b бt¹›­r®­í&“ÙfÞ8\6¡Q¬qZœ3Ú 4™+ €Âס"v8@ Ipç­íVô1âaÁGp“¡.€w9mwÍ盕$m¨SlÍÖ‹ˆ=a’0sÃ]¨fi§ß”ÆýÝ+IW n$É=êÇJÒ×I7Ÿ Òôä Ñ³+ hªÔD&ð¹uº7iêczšk/™[ã/Xz¡Â¸¶¶}Q.Un¢Hy´·Ï•›šø“T%‰“S ¹_p'8êÚ$IôÜ’Ɤtÿk²v–7@R°SlãáeÄ@âÀaÊÀ¿iMóƒÖEôñU~6™Ò­óúÿ í¶‡Ií¶ß$]9Fæ$5¾Ã>ÚH`  lLZò’6\7’°¶‰&¿iWÑÅ£+Ë[¤AƒUÊ[›»Ý}“­"s{)ŸBx«¡Þsy®Xas¡Á ‘ ÈU9œ[ÜÚ\Ûž˜zÁÔ¼ä »K6Ïb·ÔÖ£pÀ0±X¡©’iL¢3I©xc¿'¤à‚÷,byU'æØŸ¨’tÃ@:Ú »í’X¨ÔøcX0„½Û•)Ç1kÉA|`Ê?§’DF²ÆâÁÞdˆÂ™ Ô‡*IâáYŠWNœ@àTÛc“®õu‘Ú¸³Kl¦I,]s§ØøŒ9Ä_=+q@sížbqðòÛSÔ››_ïÓ9šùãÄì… |A,eÃv{ƒ“t53!z(D4!¤‹2ž’*€¨Œííç3Õh Clfõ[¬îÙÙù £c®“¦!–2P½ÍýIûUIª»ÖSð(BHl\]¸ÁåºàÜUƒM´ÝªƒçŒ T1H²5V’`•ÂŇ;Õ3ÐYöóKk b9ÅC8yzŽØç5ÆéþáP>··µ…E]kº=‚¤Gô•@Òíd—ºÞ#é^qHSL1…”!úmÿlSÛ¯ÑDw‘(ÝéÆ}G¾`Ð_ðc%{Ò#bÙøQÔÖä.!¬²á¸WvJ‡éDæÝiù¼x’K$²™Bvoaq|Š_TJêAìä400:çLÎy¡ÆÕ"4¶L½æAcÀæ]p‡V5ã~–ÌÙž;¼& õ pªk}'ýé@Ò]ò¶ÛFÿ0]7Ý2Gg¯ùÛ6)W¢Ï¥RïÎN¿Èè.ÞäÓiÀ%ÈýéJœüŽ£m¤ösX($vvHAë>~ý PØ\]ÝÏfO?r‘Áò7•rdz…/7³eÆaSxzn†Èôú~¾ðóYåM ·Âä$ðâäàP¨u1nH š¹#L¤OèŠn€D.ò+€$؃ùx¼ =YÚHwŸ­£×”¹`íýÐ) ‡f½8+R^¶peGª-m"#Æv5„^"Ÿ:ÝÚmš0„žZÒ7A’ ^ s ?:Ž,.¬éìC/Ǥ¨8Ý%±tŠ'è½ÃžÀl|;Q=>¡VÈÎVÜZ€ P;æ~É|ÅX`”S3ßEcÿðš~q»yYCH°ÇkM³Áéu†Ò‹c B|ØïòÎ9<ó‘Ù5È Ù2˰9dó̪`*=D«[Ú¹…wk·‘¿Û[¯$ÕáNÝ—ðû†£L•¥†Lò26ÖÚX†¨¨6Žm0¾e¿‘ÙPÝ©É_ªâ¡ËÒXÛ¦@’hxN@dˆZŒ˜PtâèR=1˜ÞˆÌm[ç¹(é Þ—Bþ’`c~IŸ ’Þ3m$w³±²>KázÊž°Eã»I8!ý|vº—Ík&Bßµ«àñæø°©µŸ¥öÑÈœº¤înΟÔ5¶SÏ8h •NNONNKÈ­6­Ý­­·§U·oº“7°½{{vJ&eÈÆS<<ÜÏïíïŸ! ™“D, aeÒ13»°YÈc½­–6ÖwÄGÌâ - 4SLñë¾Nú ƒ¤+&. 9IŽêI­ÂÉçLP6¼0¿X9>¬~JnoçŽ tÏbZrù<à¤{z’ õÈD¢É|Æç"IrgrÉx®üϧ•w§UHàÑ ì¨ §9Í‹+kÛŒ>3]kÛÕ.6ЉVÐ4•»?”“Áû9I(Þ*¢c“8† ­Á.X‚]j{”('ö2é‹ ª«­íl*#RŒ½d¨[øã]}hÌ–« a^÷gL-‰jÓm.Œ Q€’Œ.uJ¬z.+IX¿ ƒÉ]/ê•…e£cºY` ßÁÎÙ¨ {ä m‚ñ6Þ`'ß0bôö’îíéFœ?t*;…£Oèúö^3nŸÊ ©ÁÀ5G^“WAÒÕ>8Ò:ÂsõÁaû¢Õ»( âV)ñEðÐú ©%4½º²ºmqE-Ss2ƒ[5ìëÜL…“ðÑ¥ödŸú Ó°aÁ¥Àjà˜ŠÍ€Q‚ª 8ë{¹½…åøÂJ¼$ÊôWpÒÕþÍ1ä+ÿ^¥]s4~äólhvkܹ FÍõ®~”ýâŽÓ%¦`d™2Ŭžgâñ×ÕʸÅ÷ÿûÏÎI‹ÿ·_>®Kø”ÐF{†ÝyÉw ã¿(bs+x«“d,Œ¥fæ6¤C>[»¼„;;€$ªÇDbû6«iüŒ¼©–ÌÎh‡ØŒ HŠ©v‘‘ÜJ´u Fd@úŽ:I˜†\÷çI͹åH]ÛËnÙæÚú¿__…k{TÈZÿÙÜÿŠ¥•Œó”6bõH«I„?uxª’€N˜éà ©IaÔ†Ós¶ ÇY}ãù½©ÀCfïX°<££ÆœK\IÌ=NþD׫†]°þö]ÞifßÄ+îX›ÐHÇRËuûúÈÒU™å oN·ÕmèÇØD<w-{BË<®DtIbæÍVyiR—lÈ¥¼fßä¸5Ê’Yž±†‡Œõ(Ò‰…'´»ßÖ£p×áêªPq mŽ*rÒ@J›ãŽÅX,³±•̦ Êñ–ÚÏׇø õ$JÇ\@4õp%#¢+Ñ+#ÌB­±ùŒðÃ=ˆfãé‚Ä»ƒ[/àkC©)q’,bTk¾©{wÞ`©|Òá°'´>éZâi¼=H ¹¦&Ï¿J$''|s¢å¢õGI_ULò$=Hz?cér< Àv±©]8ù¢gˆ¯4ïR‰“½‚;°<0êôÛç×7…\!]YXÚ:Ú;˜]ÜæªÏX£%W×vÊÇGåze¾æ’ÉØææñ^¹Oûg6×w®Ñ?)+%¢¶WÂyvµNï ö•sä(‰à~§pø)k¤Yhê–9 ׸ˡÓkAÙ¡4€¤é¿$Hj¦dÜk¢à ZŸõÛ6¥@:”ŠÇÏJ'_b¦¬Z,"GÛDâüPL"Xd{}=‹áüâ'×`±U*€v77/*•{r›>üë((•2© Oana7‚pÑ!6ò Ó÷ì>|HL BÁpF0ˆ (†58É;ŸÒ5NWðçÓêëj5“L)´ÏiÒïÚ\éx&‹F™ý¦ÒKCb’.<¸ôi=”H’»¸º™¶“Œ.6V’DÈGÂ×%±vôš:ú¬îÐÊk}¦ç6;$æn™ Uµübf‚LhÞYœ¾ùT2£ñt Ñp><ÈÓ ¿Ôd‹°Ý4‚¤«5¤ÚÈpÿÈ´7ºnššãÃfË6C®'"0¸!EéÕ¹8rËóžá'Ì¡þø ) °ic#ˆÁŽ>+K>EîˆÐp;¨Þ «ñð I~¬4X¤£ÓÈ}À—¡twöÃ^à…×dÞ¥&žw)P& I„2ÁRºdÞM°ÎaªÈÀ-q,Í,Åô–yl¨f*ž~])—±Jòƒ“r©Tjw·Ñ²ã÷Iû¹ÜÎæfrw÷°P¨bœt÷C ÄL<Ž`Ö†}ð8’Óy%j¿ V$*bÞ~"Øe»»˜d1¹Î\Dƒ“8\Ko(àŸ>.ä £¶:MÜÑçL½Ú`||vr4lòuJl€`2G­Bð™ )Œ]`#}ãµv[ïÈ<² ‘:¾Áþ<ðà»KÇ{oOËpËÌîùŽ>;™“ÅN¥x’W<.ér'_í 8Z&Z‚GÄä}qƒ€$2ÝF䣮P09ºoȯ5Fþ§¦ÖQºœ Ær—€*º¥6—oÁî™— z¦ç‚×»ÓJ>›—è½t2WaH2æ]cL¾.ÇC£aÁž`hv+¶ÊiaÿHôäàps+݃¦•‘wÀçn¦7!Œc—VòÑ K:ˆù \f°Ôþ‰K593½¸;`š­5ÅâV¦Õm¾ÈiGíó=˜á—kÈñE·¤#Ó\Ê_\_kù ±{ \(î©$Í6êFRnZ|Äß ˆCzˬl4‚[“”Ww¤n¡ö£«â“׸ç7ÝÐ#˜ÐöU@Òe±Ëæ"ï“ÎäavœKåÂÐ#Hú¢ é:‘,eÌ¿†GŽ…3Ún©££×ÒÎlaëz¤fÈÆÒÉì›j)^iæ;Ä–ì1åˆ÷dÿðMµœNfàEõä¸qˆ€¤£½=I„ç‹,ð×ÏÛÿŽöö_—Kp°»$bi›g¡[jgÕ"cÍÔúê¼+Z6h Z6$®áGÿb éê&7}éURãq»`kyÚ­0˜ó¹ŸÏÏ*Ç'hK¤t<~ ’~o¨D¦÷N‚s»»« ªÃ½½…ééB*…ª¡Ÿ^ˆú”ã6x§g¦‰3Ø.2áÙigW¯Yøu+I7õ`ñV¹Tá‚´,…«½×Ò!eJF[#mB$dÐÆ5[}UôYª±í~ÃT3¶îe‰âÓA’6„_Ã5¢KbÁ^%6–ÊM !Ä „§°Jõ®ý|á—³êÆF vhÀOŒN"½!6ò¸ôÒåS¨Î¤ô X£ö±5Ä%:Ä»aïŠAšf§ˆÛuÎr !ñjôñ°w‹jr¯ÚùÿuŸÅ½˜Næ½%â©L2 bãkÔ{=2¹æ:%h ˜)wa¹ê×ÙˆÂdœÞÞw-‹§»z­l•Ëv‡\¡õÇ"ùŒ=*ŸØŒÇ²™TžÝìyèã õ!ÙØ´@o‿w0d°Ì9k¹Lá]µdr¯Ð>>ùH8ÄÕf ô GJo·P`­œŠÎlÚ×ÕkKõ¢uÐk €Ú ¨Ý@ Õü®S õ @ö/ø>6 ¤pýò".|\€]“SBPuiÊkJŠIö•*IŽÁÞÓ-uÂ6ù¾kžÚ8xãy¬$ýIAÒ•àX×j£<’–rÞv>eèZ…Æþ8]2±²ºã¬2ú­hEr"» jÀ•‹§'ÇNÿÒŒánÔùõìˆ*QAP€ È<ç»–®ý•@R#N¢²1쾉,ühËs¦V¢]š_://*•âÁáCmÿÈY6‘ˆïìTaÜV°<)ÝjdñuŠI—Ô¢½½Ý½löîÃn°†÷ö`¹ÀªÞfRûP³oÊåd<ÅîŸxÅ%Î$øÑóH Î<,é éºVž'g(ý,U€Ww:"€£q}<€6:$ÈU «ÑZÛ…ãf›ÿ ÃЋJÉœïàÂ÷¹¨“òé Iƾo‘Þ‘yøŽ|rvèÁKéFXÇ(bÁ‹t­m“lpj?·gøj× ®±]bGÞÀ*4Û¦UáÚ’  6Jäðºð4:ÛYЏMzŽ"öEà຤®N)æ?¡wÆÓÚ0ÅP† k`rÚìšU»%{wïXxz¥ŠÃ#²=>9ž]Øl[$ÑeŽ:žh»7‚{ÁT4¦ù½üþÂJ¼o £…M¨8XF®È„¿ HH¨"þ Rt~þô„k‰&÷@Öä oÀ §±³“ÒgpÀÄ5'Ì1Â13ˆ•Áý®àÚÄÔ"|@Ä•;úF¢<]ÍÏ„˜ÀéO-¬ <-f²Ã•‘Xù†i6rŽºŽ«á¹D”wV¸ŽPk*ˆ#5¨Ëgó­nï¤3[}£QÄ|Ò7¥H­ YÑ1±‘¥°ŽÀÐx ‹í˃$Ã4iåŠî¶é ¿Éã$}µJÒUw„=‚°‹’îná#GHì:ÄænÌÔ¦õY›yã­ÜaÀIdºu;©NJc‡öL,–ŠÅâÛÛùüy¥èê¼\†ãSkKµ?tr´µ¹«õÒû­-BSÊ݃‚£‹ ¹è@=oœÛ!ëMµGhÀ›ú‡±Tü£¤žMµ^ ìÄ¥üËð¤K¡1˜²Éä/g÷’'¢|d ì ›=ÙËÿö?¿üÏ볟Ï*å“_/N>?Ãݽß*ìï'±kÊ]ÖeÖ§ +Ž/tþTïí«ÏY†nLâM9Þküp§„ƒ_*"½¯’D!$Hô¥#Ñ™…]‹w¾†(;HÒÃB•Â(rg3Ü0>…GSË¿ýò:YhãÂfÉÑ~HÒ†»eÇ Û9|íÕûé#ñn«·ºð™ 7q[ê[ÔÃSû™ÔÒò¦+°¢ vôÚ™J/8”Q¨áQB¤‘AľÃ1GxxÅ#ðuV2º»> Ø¡ñßE”±°MêµÏ Yg1=²2\µÒa³X46b øµ“íx ‰ojæM¶ Æ×7bïÎ*…½I[xpÒ§Ÿ uö¡ÉA¸€”Zìõq3ܼC"±øâ«MsÒQ„ŸàÂþã×Y>µÁ1<;†Ziˆ x,•îà~n~)fõ®HGÂt…›©ð*Ǧ͞eiF¤õ3vÍ« »Ôª;’‚}CAÚ+k±&‘£Y`A¬¸ÄˆÍ%ÑóâI:Ǩ( ¤…?Ö?6'›AÍA¬Zyu°î²­V{¡ÇàIMî£É½Ýr¯'¼^ÈN‹ÇÃöÒͬՓt5ÙñPØÙ´ˆª½¥|mÍL¦[ò5@RIP 4Ý€K¢ù÷ bì#Húƒ¤÷ÙÓòꙬà6Á8™’e£R¶·&؆G)ò'ºaÈ胈_9ùˆGÒ)&Òž–J°o%¶·w1k$ Íî.äúŸ±aJ‡ ·{dÈgê%oüwâ9¾Ž·-4Ù~€w€PµùŽK>àƒá¤?HÔó–z&Æ#Ó~‚“hý¶v‘ñI÷@'wÀj÷–È8÷­SW†êøŸ—D±26]¯b0q^)½;;]\XÑ›ôÃV•ÎØ«áöêzåá`ô¢\z]­üŽ8‰4|á`±íe2gw¨ ÕmyNà’zÒëjõa?¼ÿ›je~a&kLâ™yìµ|C÷,¬¤/ü5Ûm5’µö*¯zr¦zržÛîèŸBö‹¨~Äí¤ÚàÅŒÓ*4 æL,^>ÜDæ„*s3wVž< zÓp†!Ücb¡A?) R$"BüøOcJb¸7qG^ö~êR;²©Ò~þxÿ`Ìlâ 7qGá:ÅfxpM^¿Þoï–á&I¿ƒÞš!Ä€_Pü³öÜd{&4#ôÔžf¡ÅX†°sV:ÑØxTcãk ’F„;àá©],…§«ÏÞ&œtùæßV+¿žŸ†§WÛã ì1€`p»e²ìÒ¯ REq6®äAއ8IDL²Ñíº}s†mð\Æt湎~d¯K„î>Òån†ÒËÂò'06Šà#LÑÏcÑaÛüÌâ.|Òv±¥ÖX$zÂd%hÀcÔÆYl¼f(=4‰q7^Ȥó€“8šhbdßtº½¤yá‚™ß\÷E·øúDìþ‘°Î<‹¯C¨‘/ßa©ý}Cáʸ³³‹»Ù-¡­I ’|Ý}_©’äõ'ž¯s´k_E~k²›ƒ—?ð>~÷#Húヤ:V¸6'U·Kœîì5Á3CJ¨Ò.Që¦õY_rFåzW6•=»[¦Nv HSòù£Bá°PHÇb°Õ¬I?½Tðë¼X\YZóz£NwØæ C³3³Kß´X9ÙÝ Éœ©‰;†Õ„ñÐÇÀI¨JÉvjÁˆà$,RŒŒK±ÎÞKö0ì+tÁ@r'þîôÒ5LåÀO¯ñ@^åOÒñDЧR†Æw“.ïŒ\o}Ú­ü©Kõ}‡òÇNøªú®Cù¯Vùwm½Jíh6™Â0å‹ë•°×—#$‘¯ä¨©`ÜIÅbŸ$M ë@¼ß[ºÅc¬¾ñvá­ß á€ɯ>Y…\µ „‰úØêAXª.Z¿ýUÏ rvëµ4qÇÅ{>Ù^[Ý^_ÛˤÜÞh§h¬±”jòåWú+ÿíg³¹d¢rtpŽ$—`?¼|xK&Oö÷¢Ñ9NßX«prqòD4QîïªøI‚+£‹5ubæ€òo<œ s‡ÈøŒ©A“ÎÌ,”Þž—±ìíi®á~>Ÿˆ§67vV–7¡ÅÙ¹ÕååÍt2UEɇ™d:2½Ì•ŽýЩ|Îо`š¹cí¢IlàjÆ Yc‡hòyÏÐ÷íR“Ùu^‚·=}S­À××ÕÊE¹|†aÓ—àúPðÍA.w˜ÏÇ67w66`%¤ãñÝcìòQÂ)AÁÝËd6–—s©ÔCÍîUñav„Ÿ3 ˜kŒšÚ˜%ƒ1Mð‹F¤€¤zO-Ð*q*F£ùLa*¸J“¹yµs#ÚKÏ2l…KJJO·P ªGÄĶ„äSA’ .C/HEâ§ÐéVxu¦éâþÁÚFrܹ0l›´Ì°äÎWìávÑ]fo¹Jk|'+ çZ€ã‹ñXªÏ‘¡Ôn XßÂ0&À ‰TDƒXh˜Æíéš0<2Ú0úEØøû]}¶ÜñIG‚&_ }|XØ+dóNß"Sá '2à7' Jmm*®6@%x‡6‘UȈ€´§¥V]'‰\[Â×Á<*¿7º1³°+Be_½ÒƒG©t!Â2ÄÇTþäÙTW¯…ÖoåéC5ÐCL¥jŸ=Dñ¦)bP­Fá¤ZÑõ[é8&Lí:“ºÎ%Âl- ’"°:„“|]®6f)Õ ¥xt-'§ØWˆ§«`z@Ýï÷¦R†ÄÝ<5ßÙk…‡uÃ/{Ãô_°’tM#¸¦ÇÂ<3d»¥¶.‰¹E0þm›T$ fCìåòsókÃF_—`ðÛ¶þÿzÙûßM}ÿh–þwSÿ?šúÚx혻_gÿ¡Sõm‡ê%{ˆÌ7ÑêŽý#+@¬g ÿÕÂUë-Ùd"½ #s³KëÛŽ©ðæÆö&¢=¬_Jùø8ŸNö[bg'¹»›ÞÝ=ÆK 0S!“¯ÅƒƒëVöu§6êdªØbe/—Ë$ ­ Ô½Aùõוrtfå%KW.E6gõÕˆü@àÉú=@Ql¡ùp¥×è^š]Üá¨Ü¯„V΀—ÐVdÖº\BUžpMusЄ©.„-«§x÷òš@¼u´¢põþJ‡Äê -ÿrVyWE%ÌŸO+KË»°ðž1tÍÜá6Á­w2YzS-S×ùÝiÅîY@âXz VcmŸ’:ÑBEÝgG§-Zâ©o½šRÓC‡ö>ŽÒió,,.oç2ÙË4ï™ûºØ»Äðëh»ÄæÄWvtd»›ƒX…ÎKà*`›<âÝFÁ\Ü õ¨ý}ÃáµT`z‹‰¨ªæ(×0'/Ñð,j×ÀWÀ5u«Z ™ì•ÈÞNæ te!õÜæPmÐŒpž0É=wžhA­MndRS]BTÈÑà"‹g¸5àn0B¹u©á$Œ)kåÉ:z#­½,k¼¤¸~è–{h×d±˜Aœ¤HŠ~A„Ï]zñð\ïèüUí°à `=ñÐììRbc+«š\à飢k 8Ìz# ¸ÞÑyøH°òˆ©òç<' é÷ItNñÐ#Êi(ˇ±Íd $õj­©dê¬Tütú*HÞÃDéU¦R¹dò5Öý»uÃÖ§¨Â´¼²ÓoðvHìX/ @’³¿f»í/…EA%”„fúlh§a Ó&ïèýO´µ«^rF`_éê%Ž¡>Z“O™C/zF]Ñ¥$_rP^Ø ?URÜ1q¶‹ÍMœafïp'Wóüÿ~Î{Ö­ø?/„4ÞœÛ϶Ëhg}–dügx&à ^ŸÊ%© ]ã$]¢"ü~~÷O·‘ñ"%p|?ï^jež—Jkk;ÝâÑœ‘n¬LÍÁlʃ§û}@A<°C³”>Wp5ŸÉ/¯Å‡¬s¸eãÇûz¤^ˆRÈ[P'S×66ø±Á±nm­ÿÔGŒlCðÍÐIð¨" ÓkžtL”Y<<|].y‚Ëͼ‰'4Í3úÀšv`Ø]=AÍwr»ĸ‹L™Y”ˆŒÄ$¸N™åë§5¦¥QçG7ùOnØðG s|>¶ÊÓ*´p•ÎÍ8¶Û».AŠGgÕ «pÒÛ)6Ò¤¨xƒ~÷rVŽªÊ² )ä‚QH  t~’$p×**#EÈOÂn+ÔWÖѹv $‘‚J¸ÙD?h¢€n Kía(œDb€C^¨tËÌ…¢ø:t‹‰äºðŠx÷µÅ%î€$+ö· 7ÌíG>2_bˆòH?ÿ9>…ŠpMŽ¢¨×º¢¨UEšWXº3ÖÉ»FÜ<ÄTÙ‡·£5OfœñÌâîÆVR6:ÃV7NQ†Ìð¢ØS=ð,+]èÝ+IBT—{ŸƒíÖ€‹Þ6ph£•Ú›xcŒ¾‰íírù¬½m/›Í$“ŸÊI¢6-øõäî.lf•đڈ=" °þöælv~£Slaȧ8Ĭ·Ê÷[`Lt“•O†™QÒ†±ˆãž“”è[D¦oÛ刲*w`;½¿æJ¢ÂGLú`Sa)=µéÿRÉ¥T$`ñÃfÐ"07 Œí"Ó+öàÝ:ဃ+›üï&±Ã=]::¬ž<ä8[&_™ŸÏ§Rw¼¦ŽØæ&@«ØÖV|k+“H¤ x‡2ñ•nÓ}|LÈ"––6Û¸†ç=Ã!!QD/—ªÀÍ Iò;$ÌD|ÐÖkë3xK‡‰x–«ñ[ëTÏ ôµÎTÃRb¦| "?UCú¼$¤ö[†(*IöYa™ÑdÎ&Þ„@a[Ø8­iÇÍ/lö馞ҵ߶J_Е¡Èâ›jM$ý¢\žtD»z-°¤Û…“=Jnß„j~dÚPß`P5æèÕ9È ©ú0äH"®‰?É–ÛVVwÏJˆ±GIfàUqœŠ§ºøºµ©:°ÀvØ@sX X!LM c&8\d”Eô¨Ü¸šR+_¡}™~øMî¥ÛB·l )剻•åašR—»nº¶ÝÅ®ê’-„LsôÓ7ßz,&‰*IDLòñÓ•+Žº5jácá>é¥ÔBÃQ»¶plI7$njsß}M~Ü–à6œ,¢'Öxõá£Ôá64–ìe»Ù¢6úœ9¸GôGI³]}6¦ 6„õ¨|ð§[¦g¬A»{¦ô¹[šµŽÅàø DmùtÕNK¥ÆÝ±q›,"?¸í­Oao[9Ä‘ Vˆ¾/ƒû ’nX—4PtëÚ¡ÄBa+Œ¥dã!èV~(ªÕ„Xµ‘`]c}©ÔLyݰÕ\t´·òF›yc|¥­»wìû.u·ÐÏdOON $]T*—ë\£öø@6m;;€¡Oö÷‹ûû{ýA’J ô¦ÈÌrK÷©"!×°žú ¼4Äøò飕$¦Òëld’Ùë42ØÂ8˜€¤[k7v ¦ÝÜÿ™ªí)zt`÷åx¸ê©ñ9˰¸´ù¦R†KzQ.³{æž3uÿ÷¹¨­G߉¿=­àJRÑåÇí`{»`¢‡(-]mD8%hpHS$ [5%Ô¸T£¾å•Àµ€n¯,ƒ£ãÊ œ,£wžäÁ‚í¹êâїꈂ5fø¸ÖàÃÕk„ P¦êmQ®6Lœõ ¤#‘l:ŸNæ"sÛöÀ*«ñ?¥wIŠC°ºàOÜ(OÜc]ƒÑ¥¯[ꢼS®á*j»¯+nÏ]ÅI,äêQÃ}ÃÑã½ÃõÍC寪„¯NÉÕàÒ¸*&yÃÄ7ò©8é@‘*†;ÚÝï |=ª}Ø7b·—›ãB¼¿¢Œ“²ñ{Ij7Qiô™Kæ”èÜvÏüAaÿ¬tWFQãEc4͉§Û>okDYþñ1À,ÈþaŸ+¤ÓÙd2ƒn0ê:j°I9>=9Öû¤³”hHMŽ>¿/ð§I·k^ê)‡êÚľ6áz­­ øp)‚gãAèúÛM`“)¨DtÈžÛÅÆVþx»ÈÔ.2>eTƒ®ÃÂ^õá@`‘ã½½­µµL"q÷_<Èåâ[[ûÙ,a°‘ã¡Hßg?W°º¢OéÍÜq„Y»fÏ|iû»ƒ$¤¯£ôš=Ë›[I£kž£ö ]éz%‰hCdóšc6€¤{öú©ùöŽ^ «ß¬ pTÎV¡ñU~w;ñî´J\á:‘&¶þ‡)W¢ßXßz].¿­Vr©¬jÄOë·ÃÂ&"&dY ê.‡d}¶‹ÌmBKåm›{uîÍÍÄërémMt"'Ê£›yÀñòÚÚN ì’zOJ>änbYJfš4Ë0S'‚I6Øæ¬ÏÖ-›Ò[Œs,uŸ ’¾äjüÒáÐÀät"‘]ÛHñuH5›ÿé/¢ï“SQü02¦'4Ì|ˆ¾‰Š !Xº½#—1ð£g{Í’œ²æÕéGBCh~9æ oPö«nt‘û)dKB¯ÛüÕ€‘!rÃÃ$rwq;‚¤]æ„›‡‘ýXl¡Z¡.ÂPúG싹LÁâ]븢w«Ü"â6lÏxÆ2Š]“HåVbkLN:"¤aÿ©]‰ýL~Òix8 ’øëCžû°M"š"l˜ðÎñímø+å+Dâ†xp(ò6 L\lV@1gù5Þbô†wlô/’ÞŸÀÕ‚r »üNôšF%u`lt‹æ~ã庆“º–é’X;%V€Ý‰յ,#•Ë€¶wÖ×áõy¥r'lô#aù¥âñý\®±t`Ø_á¹€E83·Êîû©Kó„®G Ëx  Õ/qk†§4"¤z%)ô»HÔGÕМ]î–‚ÎÀªzb6§:H uDé †k ^bî› ø ›£]âÉo;Ô&{ø¼>/¨åu¥|X8ÐŽ¸þÙ$líQÚ\á`xž«07ñ†HªÒ–4‚#ò)éP`mm;¾µYž ,llì”÷4'wv FÚ†¯xòÿŠ )»*nlÆ•#~¬<9Š.÷ô†ú†Ãä2¢'¥—&GªÖ“®%›wY€§rû ®Ñè^^^Û5˜¦•ãÓ %aãhk~s*±ÔÈj­ÖÑÖ׬T?ÊòùB ‰.û(Hš¹Hj̯(£×|]>ɦò4©‹]›J5rØžHÂÌñË)l‘!eÐ:./æ„ñ w-&ݵ݆%øÂdæ –×Dó¢ ‘•'xß-„k§ñ3SŸ<æö’¢’t³/Ëÿ(ßàlWŸ%QÂ@VîÔCᙵL*ûm¬=›D´Ÿ}º'Éún§W§™Ž s¤“B¥ƒ¯+•Å¥ ZïD«ÐLœLNªÓk·ö°?|¹þ\ é}µ%šÄ"šù¤ršàö.ÉcK¸ªýÃÑÞá(@¥‘©Sbéì³v Æ`z[ߨnKloïe³w”“('vvb››€ªõ%tQ.¿©”ßT+ˆ,õ*ðxðêhßd=§k~ iÛEF&¦³=˙Ԯ?†¿_»Lb£bCéåkýáÙmg` v}t°O×¥t¾&HjØ/K’´>ËKΈÉ5;aŸnNÒD£pãÞày7¢¼uQ.ïí‹|ÙÄ 8X}ãŒ~+‘ëÄ-¶º®ô€¯]b·zþýºZ:<8H'3ñX2KìîäR©£½=Е¶××!Ñ:ÞÛk¤9V‹'{ÙüÜâÆÂÒ&Gáè–:y>ÓÔR2‘ÛÏï/®Ä§çwlþU{`Íî[ƒ®­ÇÕã6òEµu÷Ù:¥n­q:›Îîì$5ÆiR|mMwÕT‰á¥ÓÜ• t“ÜÈI" é!|Ã!Mÿ Íb¡™«Gí6Ý$5äWaB{ecw©åµØAa¿w0@“¢iÜÖ¼1ë×’ÄHʔƑW®jr&Êmí¤…ú Sí|Êx'õ.& €IDATÄEcüŽúø7âF1ån†Ü;/ÄA3Ľ´©»%í&é6ÚÈ+I¿C»¬ Ñ`T<4Í­%RÑ»´f©^/ìj¸-DÖEý®Ò‘I¥ß–‘Róg%ܨ¡)›E#ij Ú˜ê&/ü•ØÖ€'T¬ÂE¦™ÙÕ^•‰!™l'Ñd¼{ùj%%]蚈٭¥¿Hºö¡$ †î»P´XPX€8%ÆbÙ…Õ¸Ðj»$æ6‘™.™ØÝN¿FFa=TÊ`‚ãöÚBÒx¹"\­ˆ”Æï:Õ-ü±±‰£r»ƒËžà’Ý»àô-Z=óðÂèœõGVWÖv"3ë²á\Ø®>d ÌÓ»ä^õDdie{Ò>Ãp³txdküè@ O“Ûˆ©L–ö°Z‚·V­ã$ƒ¿HÄV?_6™^š_7:¦'³½§½×Ò%±wI]RSYë/\NR®'p™JÒCƒ¤k¦ßh¨‡5ìŽFçw=áM’þ¤é9{lÐ(dò.· wy}i)]¿ÝÖèŠomcE¥ ®BílÅùÒÑ–úŸ¯„Ïh2ýˆ}w'^¼c#øíoª•øNB ›|Ò­mLBÈ&솾Ic€¾¶–~wÄÊϰCON-z#ë²JÅÏUúúÊœ¤Ú…"ñª>EnævöÙ˜2{ ¢™;8bô!……zù@¥7•ÒÒòf—x‚£° ¦ˆh'!ÿr±¡aÊÓ)± ÕŽx,õËÅi±žïQÀ½î¢ÐÒÎú:Ä ¦Ñ~[-¿êÑ¿d· CöÈmÑ™µèCÍüÉg=£OX#OX£M|ȬðضKìt™n+RåÅ#LºÉȘurN¦ËŒ©½<È<­™C ‚í²™œtË\t¹»‡´h¯T»ÃuáÇp­û’L¤:‹ùž÷‚‡Z„.t’Êú¡òªnCúÚ‘k ¶$RÚù„ãòFG‰ZR½Ôçg©¼Ý²©1ûÜñÞ¾Õ³Ìðõ`Ë9bjKÉÕ¦Ûp¡Ž´Ûˆˆœ9SéÓ™f·¶Ó6ßKí§<„.o)È‘wIZ4©ˆ4r°—ÂIÃsH]æ ÎPræ×þÞ-íÐl·Ô‘â:n é!@ÙÝa›çjü£ÖèTp…£öÈÆPLÕhIÑWQuôš ª²|hÀRëʤ2çß|þfvrpÜÝ…Ììã¤/jqŠõ*÷s©dùð Í e£†QçE¹ ‰#dŸÕãã!c@?tù—†,Q¾fª[jïè³Ó¤xB{ À¥¼¯uµ¹˜›ó\Øñ¤{fQJRƒ6ZRB6 —ÔÕUøáÚ¶ Ç[“<•#O6ÉÃÖ«Å"àï­ÕU¢'YþàˆmnärŃx [¬Lcü_?²¿m“~ß&ÿ¦¥_=h…ƒur—¶€-@Hëë;ÌÞ±§ C»ÈH´"ÉöVcÃ\åCÜŒ„¿#H¢1ï80»Ëe ã,­ a è]ˆÃ_¢’t¥ï†Ï¤]8 ×–.µr”®—ìÑgt­Ñ<Çò•˶iÉééÑÄcŒ~4ƒÆ 8IS£þ°°n›`Üá™y]-¿/a#‹ê7îáëi©øæ´’Œ%Ûø#ͼ1H ;Åfé {k3ΔٞsPk¯_ï4G¾•IçœH€§ ³×Ú!6“Ý£ Bli¦Ô£ˆsÓ£&Æá>ŽÚ+ôÁ7-žÅ¥ÕX![ˆÅ2þèºÞ4ÃðUéHX¨ âyCÀ²>@|ä=\s¡Jà(VKíDbñêˆÖ»c×-±? Rñþ½<†PDjæM#q[2¶H4¥?é@3qhýcËWÔ׫•” Õºõ¦éíôòJŒ­öÐdn¦â­±Úë¡4’9I5?f±!ÄÇ–;TÞ[Óýª‹HÕÕ®(}J% ¤™:ÜA“~t™ þ6duUÍ›mÑk¯g|–;k“äwy~AÒÃ$\Bb}@2„Š/>¬«ö‘$ƒ¤™±‘H*Ó¥ö@x…Ì’Üsoƒ´,ŸNŸâ$þK[ÁC"¸¶²66n^^Z_[Ý^[Ý,AXð ÿíýåwcI¶îžÿô~x/¼çÜ;öÞÝ» “œF‘Åh1“Y²ÅŒfff”Ì U½»îŒˆ%yY†4əٹÆX#‡+ËiKZ±fübÂó 9:"[k›ŸNŽvöÖV6ú†fžŒÌa!ƒ0F¥Õ@™(¥Ëc½%ñ˜,qhB™¤*AÌwI„“ î;»“ÃÃÓNOž¥H ±[|ì–že¯ØÐ»¼´ éøàÙ\c ÷ ¡íãã­ÕÕ…ÙÙÍÍ;V)Ê$ÍÎ.ÎÌÌMNövÏŠ½­ç7¶é Ïò÷z]رµ¾ùñäè‹#°– {{ÿóébcu¯îø9²!Eòfb[k!î¤Yz¹ê¶çîkf’Jû jØ{´9«§_BÔii¤¯I$;hƒ¼ Aƒ)J Û’¯îz‰kttúÓÉI…œúòâj§?[#í„OUhŠð ¤^“$í•pÚ¯—yÞ‹]]¾ÔþÎÎùM:&GHIr÷ãé)šY^hNf†›$®·Ø–§Aée)=³³KG¨ÛØŸ˜\ütz4=³è äÚF¾9-´\íÄG‹3W*þ”¯ü-@Q¢ÿ½´]l§e’¬éF¥™ûÊC.tÇêš±’ ’jC*3ú¨Ð”àêŠ[(567·šÈMÉìIKw_ºoÖÔÕ‡|âp‚^eKRšn£›1c‰GrÖ-×»3”d<Ök ¾v”»«I¨qÛJAù°”îAì¥Q -!GÛ‰s·5º’RKì ˜LÒW*·eÄvtI.mw'™ É,«–ÝÒ›Î~BöIÅG«G’Y€¤íµµ³*g’HŒûprÜß7èí ìÀ^ˆÜâæ§§çã©Djpia™²¤8<$θû;»k«ÞÐGí«W¢l9„$¥¯˜@Ó›ÊÆ“ö Jn£ôjYìÿ™7‰ï’l±|ߨ¥#Ó¨òÁaš£…h/ü;ßÝîMííŸ>AÉú²&‚öaMn®¬,ÏÍ!õ¥¥y¬M’ ·µùïomÁµ½¾¾±´tZ8|Ï7þGú?ë4¿sŒéÜȧÓãÃÝ/jE"ÔÛ?˜Ÿ[ÒØzß\H8{—’[I…ù^c’_’®h—…ÐÌI>j¾\á÷iHª$Ñ_$lF°ãFìd‹#¢uA\êyÕìÔÙüHN¶´¢È-þxZÜ\ßàk½{drjÉáÉ5©C"Tk‹ãI{ä1úVØ&Òu/-.>=)Ї埃Ìj¶·ç&§NöúÆ_ó,¿ñˆžz¹‡¥ìÖ‡õƒê}û+Kk½¡¼P×ÃVuËLAdu*ïhëÍ[»s*G\íFÞ#Æ5 ‰ Éeƒuö1Ûeÿ<”ÎB¦üôò¸´ü™ÚoÕÿ†@ô»Q0ýâ#Ä@Ò3M·]QCv^Ö­¿¸ãR߃! Û…›”o »·¹559{rxðˆ¶¤rÜYHZ_H‚Xy°½Œ&ð×p.Ü^ß\[YŸœœ=ØÚùp|TD9 þÞpýq~:=5/7ûyšwONi‹Öɽuòž:eoƒŽnþFu IjÆþíx¬»¢ù†‡ˆ•ýûBÂq’*˜¢<ì£IÕ‹½M"-¾wW23rƒ¢ñC›µñ ãÂÌ \óSSp—w76€¿±vö—"ì¨ò»¾_sdwwœ%sÈ s³ g¤ÙÿK?áãÉQ:7Ü(u¿ºP0r.‹bsÀ/t Ý3"ÝdªðÌ™$ÒôsY*-%JɃ{_r’¯¡“tó±ÍÙפð[`/ö(œ½á!mw7ÊÚûÆÿ8=¡ î“0I ösXßâšØãé£kRéLþËATá…;11÷×??Âr:?*–ŒMŠp¢þ†‹dkmíÓéÉÀàxƒ¬ý½´¢b£Ò dnOàeŒXÅâÖÚ†³+ù C/*1ëB ò.¹-¦t¤àO‰9ÄÑÅ› ž1Š(Mãè¢l]gŒAØïà8Q'ëæ©=–¶h·?ÛéËÄRCÖŽÄ;qg½¼û÷f·ÂÈõO¬-¯Ã¯;?:üpTÜÙÜš˜\ðE‡³8-Þ_ضƖ (Ž. ,(²$ͤè2ÿ ·8­rÆì7PšZ3¶ž!}ÙÐs"ÝȶrC—ßIùç-°’ìWƒÜC8††õ¢Rk¬Å™ð„FÆ¢™ KWžê㦼Ûâì–+b’„“( Oâs‚~@*ºÙ}h;78JMˆQª/YjÏÝ7“t$‘´Pë ò¯ÖEä—ÂMèÝ"ôDý+w?KÀÄÀd’¾‚ÀUAä{M·õø$©zÞ œ[$ž¿8.>z4 ö8åïll¼$‘ëüè9ÃÏÎâ߈²Y'‡…2U¾¼Ý½O§Ç¹üH*;¼¾ºQÜß?ØÞŸ‹¥ÇìÝé®`<3LŒj\ÉÆCKnk°`÷¢OwK¯ô$þh™$*6áã)dspX%±i8Á×É»ß4Ûã©Áó£Çw&‘lÐêÂÂÎÚppµÑ%³oû±—O0$M אָ®,®ìo­oînnì +À»ûà›/Ž ÁhþÏüZàn¢ReѲò9=Þ_̽‘ ®RO+í@_Ñgú¼tU¸![6å|!U’è®MJ$J"Ef)1ÆÓøÚ–¢‹§jŸ›ýãüä„vƒÛOôáîîØøl"3ˆ ¾‘ö8{úççWŽÐ Gí/ír{“3ÓóÃ#ÓSSóçÅâÅÑÑÎÆæ)€Hápynnceµ¸·ÿçÅ™³3N&ÚñsKo“²XêãÉñÞöN—/epáßÂúqy3urI }Tˆê˜ ©-©mËËéfS@-˜œHõÍÄ2S±Ì¤»g@dæC‘D ëñGúçf–6V7 »{k†ÖØ/\'_ãÅ¥½"¼ª£+ªîÜë¹·º´šËùb£bc©‘©|õJ¼G¡¹<%‡tó‘´·-UnÆ "XRkBhŠ)mqSW^ÓÖO¨int+¹ÿ½ô $=/!‘MªQÙƒÝîP£=¼6À>–&”韆Ïdo{wscKÝšåã¶9ˆ½’è¶$¥7˜!ò¡HÀ’T¹³Þظµ»kˆÊíIOdd{wiqMÛšm6ÅËz•pÝ’4Áë„ݪ³l5lÏ ™ Ú Yá(]9ì]P¶­©,j¿‚Pîb éeÄ$+Ô’î¹y—3Iõò.ž>ÄÓ…ßKºàÕíKÃC{Zxüð6œÌàÄ_x>µå/f’`+Yœ™9ºÜ;÷ïÞ›ŒH¦ýøYZÂû=ÅÍXÈi‡Nš}ƒÓ [‚Q½¢»Iéci]ÚSöé†'ß$]Eð’®1IwcÿTâñåÒ5~टY掞ć“£G䓈ÄœïWÏJM»÷lqƒï_š_ÜÛÚ>/¢öí½ÍÍ#2Ö„î/‚§»×¼ZØþ8?]^\i»^ó]ªe¾1"ÄãK%鸇Ý}‘ÐiøÒ%Àl)£CÙªß+~>°'©‚“®;9Ü—óª Iä*Ü$9rØT‡´`û8-^@U¾¦sttš,'š²ÑÁ§“£½­:‰»AÞ…Ò6¦p‹#Šª¢ÀXú0[—¼æ;~e[š•mp¾Í“¨ÙlQ©#ÏýóâìÃñ1À–ά“"Éx¶&ÿªIÑ ìµ¾º~¸»ci +ͽ}<ÿxrN ¿uBÌä"€SÍØ9ŽgŒ9zú`MϬÀ][cáäP,3LŒÄ2ãS“‹Ã3"ʳ‹‘{·7·Î …Íõ¿þø°±¶é õÍÌ,’ü=ýtWþ~òá6œæ>žììLL-DR£O–¯Ô+(T¢FÃ.=æ¨GgZlI ÃoÎБÃ`—’Ø®ŒgQ7ÚÙW#nÛ²Õ Gð !¨JT72ÅKcTdйzû;ƒÃbìå‚ô®¯f’¤WäH¨@`A¾9áö ööûGæßJ{{££p²™ƒŸ˜•X‚KãóûBR>Y I•Ç…{YË\y).ïµGÖV7£Ù¬0y%FÐtçH2)õåGޤgÊ$]ÿ¨ï¿H®RæÈã“P’˜‚ÓÓ‹œÜS¬ï¶ Žþe €jC‘”\žŸ2+âþ•/þÒŠtmË×>Å^°ÅÂ)ÄxÅw½¶¡ U#*µñ@“Äv9 ÷TNú~t’®™JR±> $Y(ï?¶ÚKë§&Skwìù$Ò´877÷A ¾ö<»»gxxb [â”wÓ{úÚ’oøtrŠö½nvÔɺqé’È&ôÐ2I*2¡S2û´fZÜy•;§Ð«£ÄÏœIªÐq¨0 ûF2IØMr IÕ{i”„…Âá7µÀß'½åÛÆ!L‘¦1bÚøá¸¸°°ü3ÛÆÑú‰°'&§ö]ˆÒ¨b®ñ~ÕˆÛåØ~ãÚßPwöÿõ³D¦íHf†] “+"ÒõÀºåhƒ¤ÂÞ¨êý­ÙéìJÀ©ÉíI¼i¶‡ã€ÚÀ4ö®t³ r!xjüh›·¦à÷Z:sÖ®2Å3E¹š@ƒ*Ш ™MÀКXbhì_`©¼í=iWwBlð¶z’›kýùìâ9ÊÝÖJŒÏŽp›TáãñÑéááÂü ВĪ‘y¹ºˆ€LÑSšYÜ™”¡뉦¥9ÅÑ…•¶˜'<¢nÍãáƒLÉè#WB¾¹§J‰ ˜ØÛXJÜiJnnÔäŽÚ½Q—’>V× Êm*”I¢Cõ²1¢p ñMDlIØ<ýr{Rd‰š;³=‘¡îà`01jlÏPbf†$ÝÍ„:çmià$ø¹ÈÓØ7uõO.{"cð‹l·A*~7µô|yÛ` ék{·H¯—wAD`kÃSŸñ¬ì£MˆjßâììÆÊʜ̞îFrÁ­ÕÕå¹¹''Ï(ËT‚'¤Îg»Xr Nìz+†#f€{•„¥¾Ý‡:S~ïT¡»]~û€€Ú|S «N ÁÓ× èþ©Ñ¬±ô|:=~®|òÀ7óÓÓ‡;;«öîïÿëÃ…ÎÒ­5º—çæIYíA £¸D#ÇGg¸ÊöQ;™ö3z鎗ãäC# ôÈLåøæ”Õ;´µ±=:±,µ¡~™“â¤ç-·ÝÀy/I-½¥ùö ™ôFm+Æ(êjñ½µÃÃØÌöö?¤ØÛHZ]^{ÍwayÏ ß@f'aýF4Q…;ç\¸Ú[ãÃÕ4oÐ]/m{/éx+u7µ`e7B2ðÕ~{gòôð Õ›úÛÞb ,/®ô Löó-ÎX³ ~Q¼Q…š¨¤Ø…kˆqP¿6KÄ[rJŒºjP¦„£‹’¢rÔ ðÔÉ:áWÿµsTöŽX·?=11wqŒì{‰äÁ¿ðƒƒ=€¤ÙY"Fõj®*\€Ûz£ƒ™ÑYND)À#‰Þ—.<5³28<ˆ ›:s‚Rÿþå/?‘®zW#"á–ð,ÅIX?‰d•šír°ÎBc)nÓtXÊç4Ò 88¶89µ,³%ß+ct|rin~uvfù´phíÌ5¨V|Í<’°@eOY©ð»®~`jXUðÁ9{‡Ô­9>²›¡R®CRéÓìGX˜LÒ÷Iu2” †Xà dq/äSD’àÚ^_‡<)·U;™¿bcuumiéìiÙ¯[P í¸pVƒsäìôœ³#$7z”&¯@ÛÃÕݰkþÛCÒõNDš`MÅã3¶@§ž8©(ü Æž`ú|ï¯ìø»:?OÝÙ‡f’Ú¯êEKó‹g´F!Z‚kfwˆ­h‡?Út” ¶Ôñ0§ñÛ2IdcXÒêÖ¾ìÀ\09)4§ñÔK¦D¯¸•÷ ¹/I¶´ìŠK᤟lïXÛÑ‹llñ7ÂÄ—çº"M¤·ÉÑ¡?Ó}ÓÀ|ÎîL“ÊR¿È¹/-µ#ƒ <þF‰Y4ªzÊ:IUª®£$ºÍq•!Ÿ1™!Ís¨™Ç’‚[õ-ûh”‘9È+OON//-­Ëí)¶ÞfÄÕÓßtöä;‚CJ{’_:Ù>#$ágÉ–©Sxíž<°Øøä Rè2/gnƒ$ê¥;s¨ÖØw/H21ôU!É ‰§ ±Ô~¾Ö³·¹ÛØ£3IåG—ˆn£*Iõ3I++8ªWÝ#cq(Ã‰í¨øÇéñìô¬Èàkl ˆ-”‰7™˜¨6$Ut‹_¹ÊßpÛZ}¾LÒm=Ý—Qï*6RÀ¦Fȶ&U—kVØiv6·î35y„ûŠ6ñ=yøýúxzœïýGhddâôq€ÅI££3R÷kž^=>ÅžV×<<„ãøòü<ò"­jgn[)ìî®âž¤ÓêwAAÂ2•[Fg°^á…°‹Gp¯4©T;“TG$ݵNy_^’r%GUÒM‚„Žññ™µåµ/Baß}84ÏΟ$ù€ž¤ƒ¸GƒƒãÿýF862_߿܆64X´ŸL‰´(m/žX^”ßvcO6¢BWÉê™z’pл"’DÉ ÂRÉâÎ¤ÊÆío’X-½"œIºbZâ ýI)¾1ާqQ2z·þÜdù{½©IÞžÊO†“£±ÌxwhHíJ ‘•Ÿ‹Uyx†GnR‡XšJ&á²OnTõ ÀÓôƒÌCéʤ±uF²Ù{/õÔHº…z?GÂJ?Q¶&Ô  ð 1ôm¶4’ÀЇióWöx)%M9 Q?Ü’€—ÇC­K±\ÿdW`­E¡lµP ®o­ÿQ£*k£3ÆfE&éj‡ÀÁ‡ã£ÏgÇ[ë[# no°¾5‘ÌŽ/.¬¬¯n,̯$²c<­ÿ­¤›GU$1$“ÆŽÜØøB05%sd/XêP”e˜²î`»gn[ZÙòDˆîú¬j¸G¬? ttIò©’ìN&ˆu‘ú5MOü?^€–I¢ø½QÙÓ¤ð‡å,miÚieȸüM÷yewDd I‚}jŠÁVyáeŠE9’ª4_€%ºˆºW­¤“£ìèö¥v·¶Î:í“lhw77Wæç¶·O«P«¨ËÍNLîìT{ž Ä!ñ½P4Ëjñrua’cÛ²OÞ¾7$‘_ä@p"_”3%Í]ü¦ËœDm’Õ‡$úê[©&nx k%&§ÿóÙIñ}ÓgpO×ÖùÚö6±I~hPL©k{ÏQNŒOܯ_›.δ±ºáêŠ7)º`Ó‚Ý”61”»m¼ô‹gn‘ÒÓmd€¹dÔ•}öé¶Ë‰6ˆ·ˆ-‚bc€‹í®ä“¾AH* %Pœd§|KÊ“PˆWP;v¥ösÔ¾Tnüϳ“¿>žþÏÅéù¹èšUØb2k Þ/OŒ¤ÇÓýÓæŽŒØåàÆ¥3-wdàw¡Üƒ­R ÒkHA®Ž‰­ð%XGQh¢\iÅ¥:|°ð=ÀXD»¼\Í)RîR›Î óêhGçšVO‡¯OlŽðŒÑfÄmHe¥¸äoøî±}srÞ-îí­//o­­–*È×òIû…ݽÓÃÃí­ÍÕõžPƒ¢§^Ñûks{½Ü+0 {+ñpu1~_e_&€¡&]ÄæÉL·ØÃSPaKÒÝl.=’2@ý €Û,=*18`ðîT,'Q-ê-á—~]ú—Â, ’[ʵ˙W¸ÑƒzËt[9™„~,A1*£‰;—¥b*z.Ï.Î\îɺÍë ËTæ)`Ko³1ÂÕ¹ú*ÐV\8¼ŠnÀ8’žGºØ’4ë£D ¨FÜñßM&£+pZ88+>²£¨ü¯6–—‘,2q¢­' ;;H nuµÚ}â¥ëðÃqqtd’­ìjPùB‰5õÔöí{@Rù˜%Æg8N!›Eü˜ð°D>ºðIþ_»°ÀOªz=O×!‰ÚÒÐÑ?˸^îyÕìHç†?žß§ž fossnj ðÍK.-Ý¿ƒé°m­n²$‘ÂDþáýW `ÜŸç§cãs\µ·AÙ+¸ ’J¡ŒÄLrÁÊK1V^rà‡°T½åíŸ.\%$JÆÚ™ƒ·Ð¨ê ¥Æ×––I%#ù-CRßM UÙRÓ)‡ÅqC7j©ä©½B}ïÔÔÂîÖÎÒB;úxR<ÜÛ;ØA¢;À çEôäÂÚÛXÝJæ&|±!O°On‰àN4ÏQ¬K€rÃ!8š’KÌqœŸHRs0øÙÏ HRö6ÉYù¥áé%$1x®œ£wþXÑÈ:@ÃÆ"k’Èsãæ¡`#Ä{ųM—Ï~;X÷²œI"’Të)ö³ÃÑéhme­ÅâûçlPx¸ÚÂ;}Mœ¢ð!‘6)\"_4(½MÊ.¾!"µ&z¢#šÖ\Ù²Fd- k=F9âq]’­—¿Ô‘G øº0]X²¢”\y]·£y·¹òøNSÍk´/’¤ƒ PÖ–Øv3‚Pgü‰@!î\鸓¹Qlã²þí@oæVCPœI‚øŽ·û¥7öÂo‡ÿ…ʽæIUÚØ’ba†eþZi×{3™üptôh@RAjYYX€£zŒ«–F~^;Õ»ª9’&åmõ*ŸG·ò1¥ªå¶ÒYºIío6Æ©™‘‹gHh¥læˆ-QÙØ’~ÉJ…ü€$z•GŒ•âp2©÷½¤C n‡ ~tp¯!|`ë"¶Ö‚¯aoØ\Y¹Lº‡¢é§Ó“•¥Õ÷åÜÌÜÙCÜvö.Š…tv´^ÞA ygÚÓ2Ó‡û|ã$«/(]å–ኋFÙÕþJcµkŠÛÏ I¨ÊGÍ&•ÏéíO¦ÇTÖˆÈJ?ñ~ÓtSã95ÖN*bX¯UÖêäžFy§Pï3·'ú¦††gÒ}C#³K H¶ kH?žýõñ¼°·Nwúý±Q™%T/먗u×+{°Fs‚kDœlÄ5Äø&t+y¦Geiú.üEHºf§“%¡øO´Øš|J”"n;u\ÏòbHräÓ>Œ°K‹3Ú+yŽ6Èl¼š¥WGì`‡fkÐøœ¬´:ÉŸ¨Éërt°²f ä!‰L·)܃´vŠ>Ú:l,¼Ä@RµômýMJN)§ù¨ÍZ¼¶5JÝÃÃSn*~?ȳ}{{ynŽt–T©q{g}}qv–®xTmíÊÓÃýH<× ëlR&’Iz9H’`H‚[–ZXXXk Œ Kæ_ܺ^’®%“¨Î¤:i×[3þx|¯uE”ñf´½ñH"8ûùüÄ`÷eÆmìLBŽÝå™ ;:Ï>Ÿ÷ Œ×IZë^ÒÕ{½' ¶®&7Ž­ °Ô~¸ØÈ55s¡Ê ¿ØñìÞmåzÜ ‰‰‡­ I.» ¾Hº©¸Yêï)éëQ.ŠÅü5RdññÏõ+×õ3ÇñŠïVÙ‚¾è@";šÎõLML,LLÌm®oïïvûRáÔH 9¡t¤}‰ CGÎî4uf|‰±Þø˜¶-Ã7ĬÞþ`j¢#8¢ïÈkÚr†Ž>SG^ß–QØ“2GÂØ‘è}m¯É¶¶ÇÔŽOëT";#¬\×C]zrêGW—•Vxê³o ¦‚³3‹Ã#ÓíÞ„¹5lïˆLOÏŸì-ÍÏ8>FyÖíù¹¥ÖîØÏÚÿýZñ·:ÍÏMz±®srrîü¨¹óbÁíͼwŠ‡Ý¢¸P˜ºª]r) ûµÀg©|ˆ],±ŽÀ ¾#'4%TöxG ßØ™YÒ*WNÛÞ_Òô"¥áGæ“î“I*´¥‰73žb+ù¯YÓ,tVŒ)J¾ã7åY²ÈÕ¤4£Wñ:ÿ&Ù\“«l’»úåî>ô'¾n¸­èOwÿíÁôŠNkY»BB \f½#Á1ÚÎ\™ŒÅÖûB’)ÌÕo1a•#’ªÕ“„CR?œÐj±g‘Ã3ÚÌ+ä/\»Ìн½¾yöém²Ém¯­­//ÃɾJ CG¥º0ÙéÕ¡Ù*4n£üÄîÆF‹¹»FÒäs äY‰|Õ{’¨L’=ÃÖøU½D</hCÍz¸¹,_†™o¼îkôLå¶ò¸Ððv¨^á…ƒþÐÐ$Dð‰Cž­$=P¡+ª®,­ú‰¥¹¹ÕÅE8ˆ£#8î:º@ vû|ÜI1?0Ñ ï¬—{‘p³)!¾:݆O´}µŽÚðx¶´õ»‡É{W@°EñþìGa–~¡€ÞWMí™ÊÆí«BÛ9"¦ŒïWæ›ïI껳“/oðÄÍ£B\qF žŒúÃ.ðZ#éü˜©ÙýFØþ^Üþ^ä~ų5JÛ4vƒÈfm ;=Yµ3žÌއ“#k+ë‘äP(>Ô78eêH78=øzdl>ž™lõåí)•=¦°F$fø~;‘ÊMLŒÏŒŒÍ$sãöî«¥p­Ô _J‡ØPÞëÆŽ¥ËÞ$—•’¶n}à=vsÿ½Éü_uú&™+“^[˜?/ííììds#Çok½¬³VÚþ^Òþ÷“DïY]^;)~:=^_Ýлãl„ï(Í{´£D­~—ÂEo˜É’9  ì1Ð+4„[q RåN³µa…#Ѩ‰ڳɾ¶!%»: ù¼™$zô ”)0%M¾!9VEBÈADZธÄŨìõ–<ƒ7NÐ¥âú_8?œiTx‰n).fJ³ÊW\âo ÙRœý£ýeqe¢æV,•;?>µ¼¼´añ ­—溄¤ËÖì\Ùs˜<0 $U/“„>adÐKt­ÄVT\‡ø{p½¼»Fè Çû?ž<)™»ÚÞÖÖÊü¢‘î«CR…Í@©ã‡tC§‰ 5Ó€æü0ñðáajÍ #‘·B7Òr”{j$]ur/0Aƒ*ÿ‹¥ JLa+©´Åp^0_÷DF=¡!>:„d¶¨ÐÅ!–&,³'£™)ØççWƒÉQSGFb±u4+gˆ”6´Ý–ÞªŸ½:ú^Êù¡|ê¸â¢nBÔ¤Œ´ÂU=ï„mo›-’§Á4:ƒ­ž”Öª“vÔË»àÉ‚ ¾®ß›] sïâ<œ( ŸNàÐ8<2«v&¸ÚP‹#)CRÔ”‰Â™Û3´åAÕëaõòtat 3ÅÅdD&sd,]}ma‹§ßéͪœ”ëFIy2Wr67¤d2š _b|wk§34Ê3&Ï ns‚ Õæ_ IVìi£ bߘLe&©IÝð8†ß”’’‡Ä‘¡ÚÝ™f(§7Kk¨ý¦á-Wïp{pTáDGÛç‚$¹+O&0K “Iª2$a¤‡—äá„7ÅVûàaSÛüÛOð©%ÛÛÁööêÂB• ‰üØügfÖáZžŸ_[Zz^ç8òöaã<Þßóúâox–Zi·äÂ!y €òÞŒ¿­l±”§6`´ã"5n¾~Áý}¤ëD*n§ €4Ê»úúÇþ8?½—}Y n.)w>4ù‡œqO ø0ú`{kbd\ª4çsƒžŸ_GjR·½8*æ&¹-= Ê^¬¸“,[c–ú5û :ÁF"µç¼Ñ‰þ‘m[ÄkšBJžÞå-¯¡Þ]n«,QQɼÁ­ê.Hº¥Q©4fO9™”-83Qf¨rjŠõ6)=ð.$¶¾Ì#}¨{Œ«5iÃ,mw…Çô­©prlffy`dN#H¨Ðˆ»”ô1X£‹çÅÂèØœÔ®Sø€´àŸ ­) gˆ¢´LÒ¥àÓ¥~R)gAo»¡þ†*ÂëÇ5D¬w„ŸY'ëú…mþ©Áøß †_9¶Iwƒ )ŒsK>*p± t ZEúžÁÉÕåõ½í“߯3´¥¤¶ê.rdé­åך£a÷’>< Ö<Ó·¥Sù©6ÿ[’ۓͦ´Ø^†¤üCîO„$ ÝlÔ8oN„S“#c‹[²A%Ê®X 9· CÀ>¹³ïúˆiäéÑÐbÅ HJÀO¯—u¶´ö%ó³mÁá&]L|Eå({ÿ7C¾àb½Î²šÀ «ªlb•‘–rT¤qúc2I®>ÔQÏ@ÒKBÑ·EÚ-¤Õ,IÆ‘”ÞwBW49p^,$X!JH†{seeqvveai{m­ðBÃùgGG+x êü -ç7¹ÊƆÆù2Ûo\3ló¤àlwµeû%¼Û*ìÜé²%Uõn{ $‘¶¤ј¨—w¿8‘Üç³Ó­( ›¹ééÙ äY»Œ×Uá±²X°0>ŸŸf²¯¤Ÿ>~ÜÇRLµ‹€õ»»ð7;ëëKsó‡Û##2cwSI- ÷_–¶G®Oí‘®m–ÆOµo£?Gëç!°]At¡ƒ>jZxÉLÒ]Ú3gµêA©l@Ä;`{&ŠÛý÷ÿ·×·yJ¼ñ*0‘¶ž1D=—ªEe9ìŒøÒT$]Nl6ÄYÚ0-¢Ñ6KRjMˆÍÑ&u°QDÓÁhxžô÷þ¿þÎʤr{›Èêaceå ——À–çæ¶VV¶V×>LðT Èx *D–¹#ÛâÎáý•J’•†üÉElÂâf&±KKp¡C‚X!…=LR—mX’€ü+®h8RJÕ ¬D¨õçFÝï\Û¡û-ßΑÚU–¡ÁOe´»^åoÒ†¹†8¬–&„` §”JŒ’-sW­Wx=þÔîÆ¦Ú•lÒ„Ef ÎÈë,õ°±Yœa2Æá{x´ ÅtEh[FåÊèÚót¹æÒLjÌ6$%×[‚>-®ŒŒB¥4b;½u§ôiã¦I™#÷,å6 —i"µ@ÉÑG[ÜYSgãfª”>Ï–+]À'ò{F” IÞ  P°«w(‘›QºÐÜ>M*÷Ð%ˆ:œ4Až&H$ìpôRY6^IàŽ£ö—ÅÅo’+ ‚uVá»~) €êCÕ&é. ÜQÆ[|4O¨“uÿγåòcX©ì3öÛkk[««G;~–&n”IZ}H"ÿü¼Xü|z<<4þ–g|/í‚UĽLTRá©’ß›ÁíãËm(“„r“5’Ž×ÍÎñ±ÙÇGmÁ.×Â.Žgf€\IØpÏÞøïù²FÞÛÜÚY_¦ßÛÞ.[¬ÿyq6?3+3zê=x’1Ž7Ëœ¤áÙQPýyÒzR–œáíJÝ gôŒàR; ‹z lÔ‡àb ©rqª;†~vtûS ³óõb'ÏP¶<£p.½çIhN!el•J=Âx?&r}tf*5 ÝxGŠ …Mˆœ¨n1ÖB Ìxô› Ô{IÇÕé~jÐ6HÝu·Úâ™›žY˜Kg‡:zR2“Ojò5«»Þ‹œ ‹OlMˆ¬™òÊ‘–¬ë òp´A…%07=ûáä¸72؈LjcÈ1 ñ³-%Ÿ… ½¼,)–Ô#IŠÞ/Ò–´&n,õ@DÂßV²…ŸiŽ)¨IvYªË•å¡Kâ¾™$\Ücå”Ò3&xèì¨6 ’J|–…§}ì}7î˜7õ$Ù3@å24µ„2„<Ôn–*çÍܯf5éÊF7ªÜ.YjAE΂h£¯¢­¼FáÛØj?IÕÎ$§$šxz&dÒMí#hk’¹çfÎîe0r„7³C¬´Kv²—‚$`𥹹õåå‹çÈ$v÷¶×¶æf—dºÎ¿×x:Ô ‰«lÉŠV¤§îÿvt]Oþo£ª·Iٙʎ<Xqe­€»°wvggvv7 @LKºzco9ú'G'‡tÛA²€IÇ÷ÇÓ“ÕÅ¥§Nî¡ XÉf#µ§J'iê‘)k²4Áp uûª\)žu÷£H${lR2tÃâliz#êP»<¾øk®‰oJ>$]xeHºMe ¢‘¹â¢õRÛV¹4FúŠ`mp5fäæ–‘2™1 ¸Þìï™žšŸœ˜]Y\X??.œ çÅÃÕ¥•¥ùÅÙéÙ±Ñ ƒ½þ-N•‡à2ä!‚ŸÓ êU[¼;k+I³3‹*[´^åÇ*‘8(Ù.Ó`¥~¬ÌeI±Ô7,q”:÷í7‰—bxV)"Ñ>‡ÜuÑíªJ”&?P>‰h‡ŠmÔ…Û ËÎxÎ Bð,jü²õ7¡ßø")HjH˜-;˜Ø24g™ÜCËm÷šOvÐK¨uƒî4&Ðò‡‹2IÈ)¹êþüÊ/`éPI/3pKçw"2ÁÕ!#¡ßx…É»±¶~z¿Â|ÏÖêêæÊÊËäè´2?¿±¼üôLÒiápk}Ãäô¿æZ^s­o…n²=àR™èg’n“,5$ÁJžùp\|Pr‘øåm­­­-.®...ÍΖ“”['OŽGF&ë…¦âÞ.ìRÅ[„>諌žZY7Î ÆÅ–Ô•­ÑžƒÇ“:b”l ´áeÏÀðì?/N•øF4'EúL1$õàˆ”c ©â€ŽÍlmu÷ãÜöËCÒ5»ë…4T*Û±Q#rp‹y†²ÛÒðÙ ÊGÇŸDÛëöÏó3DEGÒ½P^xÄTdok;™ÈsTÝÄR|Ù@ŒçŽ‘w¸^Þíè}8*àÙ…ý®@­Ì+0E‰Ì7Úß™ 3Œ«º‘7ÀÍ >ƒ®|ƒÒ+±e¯åu¾Ð)½7<Ü[q;w‰}¶RéI§èš–eg7‘%ÁVû„8á’¼¸4ËYÙ¸-À‚QMŠnx·e6*K¬’<Þ½Zn—ϯ¨û–Þ 5û†3„hÀîKÅÅKR#ÓåF©³—®œ”V–»ú9j,ŽGPI°“¤Ÿ°¼ .º!­äî߸ÖÙÙÅ“{t&C’õ¥¥mlHòb×ÁööÊÂÂ>N_=’Î …ù¹åw|Û«f×{qk­´Cˆ=0!aOuÇó)U’¤´$»EŸzDV<&Mª^·7ýéy’<´ÐÈ»‚íÛN …ÂÞ¬®§Ü\ÓkË« ÛÓûëÓÅáÎîÍjI''›+˻エ[¢Æ‰ZÒ¥'W©#XD´3ŒÑf}HçŽ÷ Î ‰£ÂÜì’Üãhñž‡È»ÍÙÿÔ&¶;H*ÿ@eëÀý§Ûª‘IúâÖ^vÀ I<€–"ÓmøFb‰Õʺ`ÍðQ8ê#mF‰;IŸR±ñºŠ)¬ê?.Ήì{í5߉Ӗ¸¡Û^êIÂ)$ ìŠF³ÿóñœ •/2ðF؆5ÛÂØ ‡á²4õ£Èæîq}2†U#n«˜»Ûȹ¢?²¢Zu}ÁßçØF—B-‹#àú&Òþ–;²Bkº‚åμ‰øáYsû†=CJWþƬÐÿ"­ûr/.»VÊH>TÏ€ž"¢-‘\Å7àÔz¦Ù”Ù’Mê0[ih ÂýöFG<áa;íêÄîzIj豤®Tö6©m@}ÎKíÇMv} $½@&‰ÖJ‚žââ'ãziÛÄäü‡ã£âý2I°«m®¬TIé.5¥¥gù¥I‹ ËRw­¤«N†ÛpQ<õ ÿ/ I¥nÂ&eôR€$GWÕ¯$•Z¶±¢„Â34žO.:¼Ù­mohUhöM†·ÇEÏseQÿ?zó3Ö?µ—Å@QÛüXؤ‰>Ól†Hzšd©è–A @êø·ÈóÈÙ70q^,œ %mâ¶–Ź…ÅÙ¹,o󦳸 CZû‘ô$=»íÑØMGþyq–JåëDŽFe/œãXµ¯¬XCÊ<]@e8ºS;[âN‹‡eµ‚µ•õhbÐÙÏN£H˜LÒwI׉RwÄ ò^æ­—wOO£É_X3åV¸ûdúr{mmwcýÓééÝ] BÏŠŸOOF†ÇÄÚözI{­¬‹ƒ)Qž¹4†Ùjd©ÉWwŽ ~:;¥ õ3Á¿-ìm︼™FUÏpÙô}’îsã IDÿšoN¶¸RæÎ–‹Ëìi‰ã^$½Æ£%ö@*®1aî꟞]m óLI®Ö[’ÜÙW&BÒ =2¾¼³µÓ){„Ü I,œIª(IÒÛÔo¤¥«8…_(>9iÛóɾ™HfÊÑ3Dr?Wzæ)‹A2ñƒˆÉRê½îÞü_ŸÏ[½ik{â¯}ìxÃOŽ’¹©¾Á™Xv‚oˆÖ+úöìÚêV¦i!˜ˆª)9´eð“ô4o,m2T¥tE6 v;ÄIa®&ШðþÆsüÔh´´†‡‡&·×7?žŸàÞCÊôê¸8?·(UÛÝm^çUÛØ“A0š›žÞ^_^³6øÉ«Kk"½·AÙÛ¤ò"OJ?÷;…¤L#:id[ýÃðîàœG±*e’è–m”<’¸ýãcq™œ³VæçÉ”~õ8‰È#a,+BŒÊdúXRg­¤“« òqù£dçé"JG,”››_ýp\üx\,.!^ªÊêû‰eC-ìv¥ž$¯ŒéIúN ©ÂŽ^Bé%ð\v«ñZÖŽØôÔû-¯LJe ÁýâúÒj8ØÿÒÚ;ÀÁóøxwrtÂÞª•¶ÖHº`§ê(óÚw¢6¡¦c}qñ¬xDû](azpŽÕɺ`±UHÝRoÉ#媚I"I™3Ë1¦ y»w@n‡—‘”:²÷/·]ÎRFѹ+ëôw…F¥VÔ‹}T,„S“Mº8Wççj‚¸¡(C:Ü%X†£'>žœÓwö³Zü$Ý0ÝFëIê«üÝŽìM#‚4s;g¹þJAÉ0ó °8›[°*]Y¾)YÖΗlð¸†8RöDž|kXj¿Üé),!…ÙIÎϯ,-®ÆÒ£½‘¡¾¡; ˜Ü¤6©CÈ CU:3¦Î>©=Mzõa]Â.R¯èF_\uf ©zå¶KJ¦$_‘rßábWj@¥4YÿV¯¨Û{ƒÙÝ­§Çd!VYÖ––áHúÐö[âCr[*û)=I£c³k4óô¡F•—Ýâ“}Ç”%„G¬h0DŠ4AlãøPH¢ºMÕþ߸ö³'tÓ“U+jynŽðky<—TéQ©ôv’£‹sóî ßòVÔG¥‘àäfN‘ÚD­Hjä³c`©rÑ™þJàýîllªmþ÷Òxd Xãïžnë{Iï6’I‰ ʲɜdëÂJG<–×9¾HþlÚxâòF¸_]\|P—$Õ-wrüçùI¯/ÜÚ“ºßqÔµâvXHoùöNOä.ί¹2Ÿ£Ê¥{¸AáE»’ùŠ–\"üÈß'¥ô8H* ]Q½72[ZaO‰ÍQ±5qHº‘G1š SG6•ŸðEúyŸ?GHgQã‡' CR·eˆà[kÔFæzîŒÑÛB‚$6ÈL‘ÓÙ²‰ î¿Y‰‚½ûçfqJ“ÊJ4×SæÎ>sWŸÈJYÛŠK:³Bkª¥5ËN;ò"K¼gyºP¢§FâIå&––VUÖp4=Ö?4íöfFÇæÖÞÜ[i·Ú•ˆe'mž>”URc4Ófi#ðñM !‰B–¨@c2I/“I’Ñ Q2Ó–¢Ä“ôa®6ÀÕ Yž_Øö¿Õé¹ w*;üñä˜tIØoª'·Mª0Ûkk‹33§Åbñù~ Þ,Q& ×7þ·Fk³1ܨê^ŽE]¿ßr[“Òƒü5mY¡åRÌ÷¹DïCRyøŸ¥ö5ÉÚ/ŽŸÖNtxˆÔ’VW—ææv76à¾Ãƒÿ,>!,ÞÝÜŒÅ3 }[M³é–¹VÖ}úÂcŒ*´Y©Il™%´³¹'º÷oÄ÷‹£b41ø^ì®—wóˆÆƒ(‰IÞkn†¤¯®“tÙš‰Èå]ÈöOþëâddd&?0~¸³‹²†·d@ Iå~¸ãƒÃÕ¹ÙOÇ8jò•î7Íö_ÙV¡Ú½·±v½èLœ«†GgšTž&¤›'N8å}¼$ •ÒLmŸ±q›lå."ô‰!ßž46½o¹rÜCÝÖ¨*eïì Ȭ1®6ÔØ‚ûD–ßœ„Çùhƒðd)Üý”ª¢”6ŠÁÚCö4†¤HydífH‚ÍÁH kf1Ùd½Ñ‰xnFåÎ Ìé ÿ?©½Br*[‚hªåˆ£s qbRCý/ Ið‹:Â#{Û;ýà …ݽ‘޵žñàOC¤#ПïÄÖ®ÌêÊf27Mn¬nê[“–ÎìÞÖN";O`­"`éÎ'rSJgJåH;{Uî¬×Ý Ü`°»×€IOI•ʧ8Ÿ)ÄN:<уÆ,µ~Ø}bYj…ŽDjö ØÀ–fg hø¢º•Ið»à‹çýáõö·w\žÄkAß‚ˆ£ö—OKß#$•·¥NâQŸ©Ða«Z& ‰¶³•Å çã·wvö·¶kÛÎÎêÂpÒÚò2€øäÈÈÓˬ„r>MOÎq¤Öÿx§ü…m}+l‡—¢0²X§öªÉklñ<ƒ}Û;úx|Šö×I; 5cÙ,&™¢+nÓ>ö½›aõÀ@Òc ©¢ÛäjSJ¦<ÈŸ-KÂ]6?öÇÙIqïüèÖUýH"ŽÎScc$«TÜÛƲ°ì±×ø ~ᇻ{I‹ +<·AÙ{.<Œ$‘QÎ}`)ñ-y®LÒMDÄ«©­jÛrj÷•Þž/C~€voÿÎÖÎþÎŽ³§ úášà–D¾@\@RCB¸­rGfljy|jYîBmL<¤›¥³)H0‚7 ?º©Å϶ ‰/edŽÜèäòöƶ¡£Ÿò»Å‰%bƒ2L—ji—êØem™ò4¦¡ÕgêîS·fÇ'—‚©‰fCLhŽáùØH“:Рò±Õp‰M!žÖïòæú‡çZ‰FU¯ÜC,mPj‹Ì1¶6ôZÒÛ?2ÿñ¤¸¹¶5;»ªpåÐ$­)!»Ÿ\8I÷ ýwK·Ut³•2‹iÒœ!8ÄÖø!®½¶þÔhÔXºg&&«LHå8»&r']^F³H¥Íò‰¿—üœXjè¿ê (£ oPíç¨Hrì{ƒ¤;%®Ò3JTô$±5wâöhrðÃÑÃ~Dõ0haf±ÑüüÚÒÜk¸ãËssÀÇO¼Ý¤AûkÌÎ,r®ÿûwY¨£ Ä.äPkK•Õ~É;B&ÇêîÝÍ-,‡qó‚íÓÝ|#lãb?)ˆ茊 G¤k’¼W“÷ÙÇ9Þ0ôPHº>ÏtÕï¶DH¨Æåhƒõ ÜŸÿ¢GÓÓ!ivb‚d•àçÀ½8:ºMÓ‹°þç³ãÕåU™±ç½Õˆù4GÒ×»ŸI7-à²#YéÃÄ8•;/¿6õr;$eHëŽÔk÷÷ûãÃ*Gœf&”l.‚É\y.ò‰ +J¶f š¤_žXRº2|s’«'å¶›C\9“D&Àfiü<}'„²ê¶œ®£xòIQ9¡$ûfû†Ô­}x<8{M]){Õaíªö¹ˆª¥¸Æ8ÏoÒFYڨȜº”.0¢.%–&ˆ qƒ¬–„ÎF•ïµÈ¯*•ŸLæ&øäâ;8:Œ¥iMÕ«¦Î\Ghh`d~tbQfO7›â¨d½Án†¤ê@ÒMs‘¥;Ny.ÆáÎÂÝ$}…?5¨3™¿þùù`{çem÷¶¶`×\_Z‚ ¹“>$nï¶÷$kvsq‘"ª° V’lUZn«/&‰;{h)ñ'e,î7݆â#ßÊlPõ¼n¶çûÆ>"1Ò½ûßß‹ããµÅE\ºE•\Ø0€ŒÉ.òôì:;;áxKÖú ÇöVàDCņH3Ù`h4D) þ/Oø™mšZ¸8¾yšØnanQbè­‘tA|#K2ÜRÎ$]×D¦"*mæ¡w‡¤Gd’èf£¥M%-D6â‹4xÐæÕâ{+ê”üK +œv÷^’ÊÕ4úXÀm%i@·dv¤^ÒQ‹:¾ý°Váõ“e,-wª8¾PϽMLòºååGg¯‚.ãØžkqgÎìƒ †£K¬‰‰©…tß ¿4XZ6È“»p¹M†^ŒYVŠ…ï@š±¾ü%™·¸-ý_†$*‘ Ÿ‹Ôžãè Öp;pVŠØ•Hm4ÏóTó ëºö~!•LÊ\Ídiïü’/>¶r>)]¶£C^Ä8E&0ÇÅÖ„¦°,ÎÑ…a6©@lX¬æèÄäÒäô2|%žfRØ‘¼J“:ô^t3y8ÝÖ Û›g÷Ý&U4°¸HzÝÊíÕwÈ™>`ån¬®ÛÚë׿¸›Z¼5â6´Ccït‘-]Ê—qmJ3 C³ÿ­¨ÍÚÁá ¬öñä(î{#tÁÇ]´è@/uæ!ÂÏ'@]*wS‰|tÙÙSÏ@Òƒ Iv™X%Hh·#+-d33OiPj=ur¤(+Òõæ&?n,xU’»ö·wFÆf»y±)X¯ìeiB4ÇÉËío£ƒ$ÑUUzÖMl¿Ô /Ic—Pəîvéû–ÛÔ ¼Ù˜P·æF'–BéIl+žÂ?‡úE$éÂð4‘Ž1>’ @-" I¼R&éÆ(G‡¤RÄ2¶Æt‰4!ñÔ’¸Ô•&:s¢[ö:$]7ù£ý™»êŠœ¹´D.¥©yÆxGpøâ¤LM÷´¸ÒÚÖŒ%!¢@pùh .ÌÒ &®>ð_@<šbð>áp…©S4¡al’^’®[ð[O©†c<œ0ø•cmë Ÿ^ ÜF/šàÇj_Zºx‚â6üO™üØk¾v8všä"¬>HËôÛ„¤3¸½ÙÂÏ,ÖÁëy+p~ˆ{&“H&‰@ÒÙó)`QÉž£âôÔü{ùW–؈£õ³Ôþy7™·çpL¯0bB›(:ÀbPûÞð[uö.…®oo»[ÛFWø•e"ù¸Ö†eHóåÙ-½ gÙÉ;I“½“é@rjplIÛÞ‡X™3[áf 鹞ˆxIVtG¨š>Ì‹ðT [a©/|õŠ®&`jOY;Ó]þ¾LßäúêÆé½à^’J‡ÆÃ§¨Gsff©Í——˜£°òM„“.­Éî˜A¹ ’è<4-lÔ~¤på„–ŒÀ‚dŠ.1€¦µ³_lÜ&/¬|ü曑‰Ði{}}y~ž4Œ?Åút{c«A⪑tq4A|Kb-×ñ%e é>=ITd 6ɤ3I¨—w¿:'&f'Ýï,^Î$=;$]GFgþ»^ÿVØÊRzÙÚ °Ò §5™+NÆöÜ5+ÖØ5aàŸ;¿žFÚ߇w××?Ö mmPxxº 9“ý> v‹ONAÈŒÊ Á=Ç7%–DnpvmeÓØÙÏ3%eN&“T%HJ™GlK‘Áx¬yˆdU¶: ´Çä–ˆÖ%G†§‹»¨kí Î`ŹÝ÷σ¾<$•µ¾N°ÅÅQ!‘c©{Ùš2ÕÉT¸“]Ï(ß§'©¼ãÖÙRÄX(=%s`çV¬c)Géê+Þºw{·]—()/¦‰ùþÒÑ;lóWp”kM§™ïÀÚêÖÀèÜVTÃÓ¨€·o| 7e’heE¡%ÁÖøy†0ü š£AeÊF+ÓR'@(2YËÒ¾á 'Ñ+»´4&JM‰±ë[ãÜH{p8–›V¹²<#Š ¨ô‹%ÚŒÉñ‰©%]{†£ ³uáþáùÁ‘…‘ù™Ù… ^C bñ{· $±Õ~…{î:<ð7ÔE¾~òCø#CmQe±J¥ˆóºÙÙÑ=/T‘T0<ùðgbÈß<‹-Éîææ2©{ŠsüÃýí©¾ûµÀÍQû¸%' ¤6® ’*Éw7ÝöU2IWÚ·q2 i¡µô¾—´·X}ŸNî»g|8=Ý\^®$`?‡Þpÿß-\‚!êÈnéÀÑ™‚Wøƒéù:ÈéC¯…íÝþÜÙaK^7´9ìög~áØQ&’(Ö`Ý]š¡É°U>¬“ETCgÿüÂ:w´ÌL …3­n%å¦ÜVH‚» 4%8ÚšX,®¦–À[I—¾5904»²¼¾¸°¶¹¾  ×iá/•Czoз Ie…I@¥³"mqy2Ê4b‰KJ}Ü9ÚTG†.¡T‚¤¶û@¶9JÚÓ#csÃã‹ê¶ LÿÆsÀ‰ jcìDU8AI¯ú9”L “S´NÖãò¦·wÎnRÇ9/×–W[l~¤B©EFèøN "pÔ-C\BsZÓšëšd&øxxGˆ¢åö¦ÜöìZrg"*Üq*åàJº&(6†zÂk›Ž‹(ctti/s„¯G+Å-H¢Kv÷.Ž Û»JKø¨B4:õQV髹ÒÜM”ý"$‘Í£ÉmH` ¶''Î ßW9Ó*×­¬›-É%9Ø+T‘A–̞銌µG`sHâ` [ž1ÎÑÅxzÔ–ƒÝ3$é)HºW&é6¥,2¹CéدÈHÒæ_ÐÉFjËl®íìníÊYR/§÷n—¿_^ê -c-ŸDP _6ú•&òM(í902¿¸°nhÏqt–&¤o˨œ(]߬ÕË=]ÿQæ9Z±ïÊ×$²Àw6){`{#8H»ÐßÀ9¢D’ž’ˆˆÆÿšïêê‰_ŽK†nǨp{qnnqvv'ö·¶ v¬,,¬--ßvw׊{Š{´—çæàçœ<$‡ß ›4P2¤Ä_À‘qanÉÖ©•v¡<+ÊÄñÐDŽ¸â ¯h’–I¢ˆkka«"ß{qG½Ø5<<ùéì¤pgÑHG.ÍÏ#1¤'goTÃZZ\VXüï$ÝBs õ!¨ $]éÐ/õÞ¡š²Ð}%h_œ_ù„:«öoh¢:*ds£ïÎFŠ0²(%ßùm¹ëz¦¥”@Cºa¸ƒÏ /U’`sŠàê~ˆzÆ&Ì´ ;”…ƒûщd¦Ô­YNYóQF.)°¤+ÈL„QOŒÿ™Á}Ó”“¹8/ I”·ñ}¯Ë†V¼[¼—u+]ÀCOOH uØíÖ–—·×ÖèÙ„„ÊÊ7¨·µµ8;»¹ºZØÙA:È·ŸíÈÝßÞ^˜™9ÜÙ9))èÜ]›‡ÃâlD¿³¹é ek–ÿ®×ýʶ¾â9_óÝoDmurG6À/ÙCR7IÎ$U$“P¶F¨‘tÊMþƒíÓÃÂÑ-9I8“TÕ¹ÈÝÍm·7õ+¿]D2I¨')ZQn“9Ëóÿh‘H½âÙW—×>Wî|ÇÅþÁÉ߸ö&U/õÉ&è&£’JÓmŽ›ôÎNÆ–äÙkmb;2œhÖ‡•ÝoD¶®ôöÆò–©ÎÈí7Iå‘7€øXj¤QÑU+óò 2•RÞ¦Å%»’{–Û® £•;/9á2Qrcñ}"½Þ-sfaCW¹rCcKÉþ5ÅÓëå]J$aU/ï†/ใűùE¶ôR ótHº|)”N :ù:p5Î-•`¼çË<Í•¦%R_·e,ÝJgåit£j'ü/®>ï„£ 8Cv%½——ª§IÕ_Ô+ºø¦Æ©ô5ê"^Á¨88ºQUמoh‰Æ;ûBéICg?qY!eQ,¥+gèDTœ„Ú*I“æ³AR^^Ïp‘Ÿ£hr­:$©QH‚;þˆ ’74øS¯èU›½+óóOO {H‘ö`{{ea.ºmÈÚǤ¤1eqff ›N=þ“k¨„~Îþ>„žu܇tü%Ý[¸>´Eýl¹ë ×ôŽo'l­—u6*=°Ò8?OÂx„å¸à {›ƒJ>£ü<IO(·Ñ¸‰fR°N†¼°ä홤BÕ µ£íîÁÏÿˆJf{ŽÎäkQ*·‘~^ZOÒ»’¬–ZQëÖò$)·%‘T W«7ùZІݸ£BóåIÜeJ”76\3ÁÈ>]¤[?Ò=‰ru´CïÄí†mv8 žÍÕÕãRÞè‹6ΰƒ#A«•€›Š­”X¶-ãvïûHО‹££SR]çßêt¿7;j¥pÂ4äh‘/úQØ (^$‰GE~˜¤§d’è7,ÎiTö°U]™Üðç'Ž…$²$þ8;ýóütcu½'˜kRt±5(_+  )^*¬è`‹}Åw§²c@Þ§”ñBÛaáðŸgK « ²¶Fe/O¦·lßI_h}ôIw˜àÐ w罤³QљΟé»ü}A •.Ž {[ÛÆÖÄ[‰‡¥ ‰, "QA«ðÞ·ÜV!-t'H}tDºlKBjŽÈÅVî@ºX1òŠjåM&gŽKW’ÜD&_aO]‘ #HDýYþÂ~kª Wñ²Xi-OE…jåmŸõâDÑ›­™»ûa¹Oͬ Žz[ÊÒÝ/µ§({? BkÚÑ3ÍN!A[K¹ß¡rÛ3@(3Ælƒ>ÌÕ…á!Ä_„M1ˆÇ^hÈ!,_íCl϶ "F°ËÞý/"†·ÉVûÝ€ -æžÍÕµ'(sÑakmíž=F×ii{{}y`hsy™^PƒÐCjm_Þ÷¶v}áÌ+Žé§& ¼B€9Ôu¤ Ry#ÄFØ7Ñ’¢JÚ7IŸ1ôär[¾tˆ¢Ú’Þݶöè_| þ/IGŽÍíP4¯±õr”ïDm Ê^\zHˆpk&渒H&Ì‡È ¯¿AÚ–ë‡sù§“£'ÅÅ…åtvDgÔˆ;JâWÒHår[U=Hº$Ad®—uþ½Ñªq„¶Ö7Ï‹Uiz{Hº1r>ép3Ãáæú¦¹-¡qÅiuazóÐ}3I·ø{VnúÏI%ákìq›-'bè‰XZe,׬«~&‰ô5ß&XIÏE_ÝÎTŒß¸+PdFtÛ¯¸þq߮ˉÆhÕn`Ì4îgJpˆé&+iwòMIŽ>ŽÛ’2HÅ}HJAøÃ&¯A,ª›¹jÌ’“Ò:ÇzUË,ŒI*´=:À:V´ ¥Í{\ ¢É‰³9lÑ•€Ðç³@tàóÙ1–2Û['›Üco‰Ôäîææâüüþææe¼8<„¿$àw' Šûû¶¶à×ißð]M*/ éCEáÉ𱡴-M›—ÌÞVì` 鉙¤K©¡R[Љ©5òÏóÓUªIÖsùÑW,ý¯lóOlÛ;l–Np›N¦8$ Ü`äI*nXð 0õŠžZI[sKGo8gpß‹œïÄ­µÒ.61rQi¤r*½Ô¸Í@Ò7Iá:I;WÝóNèê fˆ•Ç7IÓcc$OYq=—EÁêòšÞiTÁ>'“¼d¹Þ§'é%#RYlˆ¦w¹ªéH‚v–½ $ $=€é’Ew%ïI×Ùèz‹žLXá|#É ¤°$A²NÖQ© w8á&'ê2€]bv{*$Éœ}Ør.¬p÷Q-PŽl¹í€´+É\¥Ž%×½¯jµ"Ý IbGVöÀÀteþ_íÃwÇRCýùápg÷èà`se®§<Õ°S®á(SQqÛZ[ƒ¿übØ\Û`Ë]?5YX*/–?FÏ q“ßÂF7.Z’ž’ÊmImð½´Kiõo­oÜèw[ HBêû»2]çߌï%í àepu¸Oß’$ÞïHÞµƒSÙê¼,ŒI|­Ì[#éÀ\/ÖÖB²Ý¤öúÜI_U€Iúp¸M éëº]Q`…ÓÃo’à˜Ÿž^œ™Yœ¥.øzffceåô Þ´3dawkÇÜ«WöÂ=áG@úíAÒU¹ÜÕA‡\…2þ·I_Lµ=1“t¿ÖzJ>¡ÜTîÒ‡pÖ¤ìQ¹HGºœ}rÚ×¥qÁ§ŠIJ}¨:¦ "/={¶¥µÌ÷•“}ƒ/uUBÒý!w2µD ~N´=Û7þ¯D$ikuÄ-Û_ìÙ]__YX([— ÜR±¸»±±03s°½}G晜7V×ÙŠößxNžÖ_&$Ú@öž6# $=$•ڒ¨-IÙÉŽüy~Z¸Vq«R¹íÃñÑêÊÚÕت^@.ì÷¸ ©£é ’ä7¤ÏKg?«ŒÿWVž+“DtD‹û{Z›w‘ýdÙ% Y…ØsÔ(ÉM˜§²«"iÒOzm”úêH/I_Uq›è]a3®h½¼›oÿ­ÁÚÞ“:+R†$ß$]7š|FH"ª‰ÌÈ;aKíù\jó©Dò²ØoÍç“êó£%d•¶nTÑMVóºñqc éæ^%ú… ni³$Ò+ßü("Ññˆ4Õ­i±ýÖZ I÷Àˆ{¨’<$Y$…XHpž-!At¡l<2Ä…ôÇ%Žì·–I*ï¤! ÉH*{”–ÐòâêÇÓロm ¤Ý ¤xôäCîoWr¼vD¬ °ÓíÏÔÉ:›× Y I_’.Íž¬)>R• 5*½¯šu{>?°¶´°¾´´ÅÙ·VV–gg×pÖðY¶«‹ã£ý­öžÔašp¤j¯åýñS»’î>•}1?Í@ÒW†$\Q•ãǵíÃ2Ї~j²zü™ãT_Ûï&“´¿‚f‡·ÝézE/Zn‚¤Ì#⌲ ÁC£ÊßâÊÄÓ#¾p¿®s¸FÜ.0ÇèvòëI"\¬ ×w`£’LÙ|Œ¤>ÏÕIt1Ix#ð‰ñ (ŸD]†úO|a‘ÆðC.ôý|S öNáíÏ×mÜFK³dÈõNÜéô¤þ8EO/lupUÕMâ.1e¬²µ¾an ÿƳÃ!†è?‘ZÛCmÕHz.H¢ëó¢žÌÖÀ+pƒþÑhæÉKó Ž]#R]% [OW…A„tTœ›Y½¯›]X"LŒ«è½Õ÷É$=1ãË@ÒWoÜFˆÕ¦85ëƒÿÕh ÆO ‡'‡UË$•”žRÑ;yæé¶Cxк|éwâv8ŠxÒ¸]IrJáï¾gKøfØØ?ì,µ2O¢ûÎúàXÿ«,ˆ 5|-@šG†gJhÚréþYgï`“6& Í^0ô@Òm[Âãã@’æë@ÒmoçÊ[Cù€”Õý|mïèèìÿ\œn­­­.,loѬí/Ò„x|°om ~=ðF„LF‰âþ•þÜGuÁ3ô,tuÈ”X'pÑ-T#é¬ز™ÇGGÏAHä'üy~O ¾á;Ýlµy9çsÕÇp¹HúA2I®~X¥l¸õ5ëC¯ízGpsmý¬ðœíÛDÏP./8>Æ ‡p†<¥ÆPœ%}FHÂWØXÝè½5ÒN¶ Sq²,Ð*…ÿt湆Çð€;NIèaú‘»ûJ÷±¶!¢[d&CÌtÏ¡¶,–êH:úà£HõÏ4¨#qMÈ2å¶ï’ªñó_ ’èS<øÖÜ0ÒL ‰Œ¶$ñÔÞÁá)€¤ÅÙ¹õ¥¥‹L#¡¢ÌÁ@’?œS=j‹¯FÔÎjÁòǦxùxô`e é3IW&ÝlHd‹x¾jv TîÅù…‹ã#âÆð”Â+lHŸOŽÇF§å­uÒNJoÝ–,Õ*=Hú ¿´Cs4~2OÃÓ…Øÿ/k~`‚´žxZ#Waw®§§»ë{ëkŸNONΊ‡'‡È ùãÉ1DÈ“Ãùæ{.õg„$rªÜXÛ`+:je¬¯“¬•¶Á“û‚Þ°´†ÞË<ÊÖÁ‡Ý÷’oDÅ­„‹Ã]æ>GVº£«uM¤<‘1_lLjOñM b;F5›ÚHb éE ‰NHBk†gJÁ%Â*Wìñ>'¦æÿýïÅm¡øÀ_\,ÌÌm,¯Àc\¼É“«Jôùô$‘¬Xd†n–²«QÕ û.=|›àI/ I׋nB,›aº^áý…eÑš;÷¶6Ñ\ä£ÖÏ &$Ø`+ŠÄû$î÷dLÄÅÛ@9‡T:t2™¤3“”äh" rül6D¸ÚÀ+~«HÛµ²´rV,<šË!ýÀõáøèÏó³?ÎNŽövóÙþŽ®@[wØæî±¹{¥j—ÕÙ339³¿µy¼¿÷çù)|ÿe¸ë yÏ›I::Øšz+lmPö`/D¹ƒ¶ I"kº^Þ D2é¾_8ö–Ž¡'ÞwôÃ}MªòòºW4¦Oþ³õqdcp˜škÒF±åJ~Ä)I $U5“Dö0u{k`ÄQ!Oºl… I‚  ç÷fW«7õ¯Ï–ææ×—–Ξì.T®˜Ü=â„ÝKŽ÷÷»z“¿sLõÒΦTU¡‰ä 5öÏ@R• ‰®ÊH’I¸ƒ;ÌÑúç¹~cûFΫ[{ÕÇ“£ÓÂa»7ñ–o¯·Bâc ±íRU¥2F3ô£ô$õ ÍI® m±ÍÆGhTöü£Ñ0>>{^,><+³×糓O§ÇKóK s‹kËk#Ã=þ¸\ßö[£ö§ý/lÓ¯Ôeþ©ÑøŽc(í&‡§ÛŦÝWBüÀ³BáâøéðÙ!©¸GúJ =ïĸQ2H* ë$5£Mò–²“£ ã¶ëÜS>|…{Zæ£÷·L­È$Iíé®ð¨Õ;À5ÄŶ+å•ÿ¤’_’ðî•Ó´öµùGZý#-î¼Ø–­p„ÿ„÷A™«õÿÂuØ;b}¾ØÞØ\]\ÜßÚ:}ŽÿÞææÚÒRqïV±œÃݽ?/Ζ—YŠÖwâvŽÚÆÙ€Ì—9ƒ'šÏ0TL’¬Bƒ>amð­°«pŸЖ§ð²A:ìU[k&wð5ßY‹«l\®ºZ“%oÇ[ÖI?D¹ ýü$¡ž_4㦠ÖË=MŠö¹ù¥»3IGWS>¥%wüçùéôÔ¼µ5Ø(±³eîæ–ŽßYúÿªQ¿¸`ÖË»”Ý O£]ðŸïDí¿óœ¿²ÌÿñNùK½"Ÿúp|TnâDS,@Ü›› {ò<$í¿¦ób!xÃw5({Ðckº4n+CÒ{Ò¸Mv\2{ÊM‡• ,$—µAY¥¶ó­ Õy‰ 'ÿL ¾™˜”_Ò÷áÝÆ@Ò¿$a­È¬ÐŠ„MÉÒ7ÒI'´ ‘¤FU/[Ù•ïŸü燳ÂîÞòÜܳL·AÔXœÈ÷ßösà¼uq|tz°gsù~fY9?ªª‰ ]'0Ïd’¾)HºšK'íÿq ™q»ÅáEå¶B¡¢ÜFz]ñµW,w)ØØ.ŽŠ°.Ž ƒͪŽW|'lEÈ M¡\ï&$’~1<8üñôô`g·¢Ãh ¢ÉþÖ–ÖÜñ÷÷ªzYq±¥çï#ñÇ@ÒW$ ½³ é¶'¦X¤»IêžšœþtzLñjõ RáóÙÉç§pj‡ÿ »\O?ímmo­oÌÎ,˜œ¡×<Û[Q[“ªÂW3"¤„WU$ö/YM3ôCB’Mº¹Ÿ'ßÞØªJ‚Ex¸» qæÆŠ€r"†Ô …'GkË«““Pqÿ˜éÓééÉÁ.Ò7˜Þ ÝJo¹ýPú¬„ô CRîÞ߆ÂëÞú¶/œI"šI°–ØšP¬ÝlïZšƒõûЧ³SXWg…ýâîN.ÓŠdûúÇ#‰þTfxbb6ñ‡slEëï3œãßðÝ /¬d —‘úîëtP„t×z` éǃ$1rØL¾{±¡?ÎŽ?œ•ÇÍH¶ò¼XüŸçk+k£=ÒböÊõ]gÀ퉻»®®DsKç[a+KÙÃnéåh<}>X{ˆ–´X~È -ÂÒeMâÕnFâD9Ú0GåyÅÒ¾µÖɺ¹2›ÞäþÏš¡Ü¬v‚‡Ñ$-=’ö$¡¦òf7¶ ¤³¥¥×õJÔ&~ZgÀãÏAÜúH  9$ÔWdMº{rý# úöÏ@‰U¤~ïhëþÂog ‰¤gƒ¤–^X—pGH7 Æm—-ktè'†ðÞ9jÿ[¡ËÙøóü¤€¦ñב˜$.=µ' 7Kþy~vv¸ovöþG­Nr?sl¿ñ¯ø®÷’.¼ñ‡¹úP“²…$*-ñüké[ƒ$L$°WE‰Ý#Š,–´„„+™ø ®ËÛ·ØÙWµ½í‘™$ºÞ^WIܱ½ö­÷2O#à À_¾—´×K;±Xjƒ…/`bëhÂF 2Ô]’{¹"¨ýå7Î@ÒIs –4rÛDhŽ0–\½ÂûNÔ^#l}+p½:ß Ü5’TGSûa5r´È¶œ,9>ÉáUw‰G¥VHø| ÑŠ‰0úÉ¥Ó3p^öðÁ²ÔÀú¡…÷ ×ò;ÛôFà4ZÛí­Þ¶ÎƒQ I…½=8ĺ:£¯yŽF¥—‡D1âV´»ü $E®ýð+àÓ”> ¢ÉB¢ßœP8[;ðv<ÑQ–.ŠòpÔ#|¥‰ðí $1ôì!‰*¥Ýv•úðnË¢ýÌ«•õðÔ]ËssÇ'Å=”^]XXVã6¯µÅ%±Úõ·zC£¢»IéEêÉ(Ep×!ªÑ°Õ1.ÃiíçÍ!}Ã-ÕøËÁ÷Š<ºÿØÊ;XµëÑå¶Ûö 8ßãÄR{žî¢A¤åe¦ÃgôÓFE·ƒ½1©®³^ÚAÚr©ä~Î!¬p5Aêap䫾¿ÍLÜ‚Ë;bƒc4ÎTgˆHõòFϘIº2ê‚ Ýp+Ú3Ê—Ð’€ÿ—« ¡®Zª 8íÙ«l”LÛ>I?T¹M’` 0¯7dyk„+V¾©cpAIJŠÂa½e$$OI[u²K§/@ߥ´NdÄ ”Daiü,•§Q…F`Í×J»þÑ omïýóâlgmýTØÛû|zŽöÕŠÛ=<}躣åÍ™¤GAyáÔ ”ÙŒjŽ•G' ’=ÙÚÖšvöäë”>ÔShJ)%$üiÓP‰)·1ô=@’ [I£uò¶¼}z|=´»Kss¬ûŒž$X ©øçùI?ù^ÜŽct´ô£“|{'$à‡7/Aa-Í7 Ç'Àš÷¢Öƒû¯?>n­®ÝVn»ÍØ"óÁÎî¿>]XÚ¢¯šÝ¨‡Ú)ýßx)H’>’Ð:1 Ù=鵑RªqàB+@R "œÝ)_t¨Ý?`ëα4A4jŠ ÌI¬™~'1Ä@Ò‹†¤+~m(y“hR¤mÙlÿiɇœ [kkëKK§ÏѲ]~싸Ïé¬xØ×7ÄQ´5({!™eË·]¹ëç;´$îIwÌmIÊYSö6V]’jZ »;ÇûËss’H˜%_@>?*Aíò_ž‘’Ó‡ã"Ò;?6µFÞŠ;Q³9eû}k|xJ&‰rÇ3%ب5>ƒT圽¶Ž¤ Q–:(4‡§/Š…t~‚£õÕ)zT~à9…ë&”Šé÷ç$’HzétÙ`‹JøqXÄ,yÛòÜì)ö"”ÙÝÜ\[X(ìî>¢Öv„‡/ÈU>¡'¿Xø|z2;5Ó¬r¿u9[š‘;N˜Û²’’2Wþ‡ƒ$4–‘XQTEÙ[yªë¥9éétÇÞCÆdÐÆƒ ©¿º‰¤+“tóxù}” oÓæ¸?$]ÿ±4ui"D‡º[|o„.…¾mvjz~jêŸÎ/ŽÊüÉ!jÙ’®'ìËJô8ØÆáؤö½8ë­¥ËJöúãÓ3COOÖ–×ÌNŸDÓ–ïEsr A5“á([ÿ^§û{½ág–íµ°­Ií/)¬¦î¦Ç•ÛÊ/ËD¾.JrÄ@áZ¹Wl ÌÍ.‘°ÿ餈u/·ÿuq²¹¶ÙŒºX“Ô=Hb é*$ ¾!H*Û‘FXêÀ{q«§'üùìôpw÷´PØßÞžŸžÞ^_H|'‰ú‡çæ°–æF†Ç“ɼ§7¦·yù*÷;¾õÐÍFεhÅ—Ÿð’auÿ I¨q;NÅSGÙÊ·,ŽÚ·É ]á”` ‰¤¯IÏz=’®rR–X?•§d¸ÚÀ{©ç7žóçFãßk[jx¦Öîd$>(7z~ã˜ckÖH¼xxÊä½n¶ýÎs4Ê)§üz"Hd•»¹†X™I²fú5ëq+’#{iÖKϸãŽîÔáU…@µÂBáÃQq{}ËÚžAs…Täg ‰$Ú… nµÁo ’Ðá%HayüµsdöÏ'ÅÂÞþ1–‘\]\|¨Œ$š¼8;Õ[Ú^7©jù†·<ÃkŽé5ÏòŠgûcÅomPx±(N„_Vп2Ú÷ƒC’är¶+Sº²”¦­•Š)•ªšRb ‰$’žIWI‚Vw3DZF/¨’öŸYæ·‚¶wB÷o\çQüÍk»^ÚÖ$m{Õ쪓u5({°‰!¹eB qéÉÒÔ òÏUnCçUgD$¤Òy“$[ȨXTÊ“¡â€!O¡áµwœ7Ö6:}i•Å_/÷@ü^âI $}Û„ì#ðÊf©ý¯šízk÷§³ã£}j´í÷Y’¨± ümHåìäÄã ü½Vó3Ëò;ÏùVØ^+ëjRöb1ûp3Ñ´%RWÇLHHú‘!‰žœ/¥ú¨4’À’Vºò¨Gɲåª:ìÆ@I $= $Ud\(N²Qúa|c¢b£ÂÓ ëäh‚_e‰Œ¡&U/Wã0ªWxá/[ü {¼Å‘$‰ÙRb[æ>b“Dº‘Ú ü¢ëO(M$©”!³£vlÒ/ÛÜí˜ØÞØ‚ˆM¶÷>ž±Äæ7|WƒÂƒ½&†[3Š2Qn3¤LÙl•ÎÏÄf膤DE»¹G2 $sÚÞ3´²²ÎNã³#å_Æ@I $}ût'‘\}ƒxÈÖ¥wŒoË,!\¯ô5ª|ld²äê *¿Ü1µ¥¤VÔõL„ ¤÷óµ|$I!HšâÍÆb (·&ƨùèT³1ÎÖ„ÙÚGí{+j{ÍwjìþÙ™EÔ™ztO 5©º[z¹%qpzé>Ë$’¾$!üót‘÷’N«ËÿÇÙéþÖ€ÑúÒÒÚÒÒ=[¶×—7W×N ‡ŸÏO?Ÿ:- [\ï%p³(«H¤‘Y“bÊ@»Rz•n3ôÃCR®¬ X:¨e„–Œ¡³aa½'6!¾TNb ‰$’¾HºÖÁC%‰ -Á’¥öLdЫK¬¾!T¯ì}+ñÔʼ¬d0'2D¦ˆàÒìù^2ô’ÞIÚä&)0Åø¦ØmÓ©åÒ!©EÀÑWjKt…U½ï$µ²®w¢6®²kbb£c3Íêî:äÈÄi¤$=Äd’Húv! Ïÿ#Hbi‚l•g oà_Ÿ>üyqvqt´± ܳz·H–î8ÚY_çËÌ¿ÔÊÌO>7˜Ïµv…êÅ.x<]O¨R^HâK-ÁÜu… ò5I´W>«epCšÈÚK>’Hb éû‚$ÙU!%Ú)1‹¬oM´úòÉÜäÆÚV2?ÉÇBlMÝŸ0žIÑÕ¤.‡~ˆ0’1Z¯òÃK=98HæÆm ƒ+\+m÷Gÿú|±±º®´øœ¸ÈE½xÚ°NŽ“d é$i¾>$]Q’´¦aUð ‘w¢±Ê¹03ÛÓ^š›Û^[ÛXYùb×vqÿàÓñ¡ÆÔùïT¯ÓýÜ û™ez+pÃmÂa;}Uj‚=Wñ`\÷bd éZÑ$ç³X × p3Ä@Ò÷IúØþ@ÒAOâÈñM‘‚bl¨ÂÒÀsŸûxR<-žÏ‹…£ýƒ¿>œ Í áfC ¾M|‹ ÉmTó rÛHª´õ½BHH:õQ-.¬Âë,"%ÌÃé™Å&y‡Î Å´ä4 ‹TN. mŽ` $1ô¢!©BI²Id)»}OfùÿýÆ£‡Û[€JçÇÇwCÒáîÞ?/NLvÏÖ¨ßp­µâvÔoˆæ/¨J«:nU½£Ç¤ë T>‰š˜ÍT4r1Ä@ÒIºï ’*sÔ„ m,¯Sôªl¡Õåµ3ÀŽ=4s°³ûùì¤opªY*V¨uÁ–~$½<$U(s^J"ñ Ž&À×ù×W6>ÈøÎE±8<:[#j«‘t½w6({KÛA‚ætûà3I $}5HYè™4÷¬ÌÏý~¾ã‚½þíµ5RPûâ\ÛÙááöúšTeˤr&—UÙ°."|ŒüÓ é‹OÅ I°0à-»òÔG_÷‘è uÒ‚TékÙU‹’Hb 黀¤ëÇE¬ÁHA’а`«zúú'N‘¨ïáÎî§³ãí-­#T§ð" IÔ–”yqH")m"õàÒkQG 6x^,áâ¨0>1[/k¯“yð [û S%ñU•í N‚× ÑÿI¾è§àÿFô=‡¤¤À·—IJ4ªüÖÖàòüüÿã?Ù CçñîÖÂôôi¡ðEH‚§÷>\ŒþÚ °»{ź.¶Æ ”Cª<.Üóyþ! >ì ¢;–_^&ôg³1J.êoL18MVm!1Ä@I/IäÂò’—™$Ž6\¯ðvø2ÇØ½BñÖúv2=$³[|‚¤û+ =’pwDžÒ"±㑤åÂïe^–ª§Ã—?Ú? ö)Çûs³KB§FÚ„Ä%zNf¢çt9¬SŒ•eG{K¤)‡ôil’Hú:dKÃ-ãh‚FG¯×ŸüÛ{e/öÇéÉÜÔôêââ§Û°ŠÒ^8œfI¿óÝe/¡Ò)'û Búa!‰xþÑŽxÓ0¿ˆ¯ñ¨p´Qé•Ví#b ‰$’^’H& ×™c¬Aå«—uzÙÂÞþÞÖŽÒÜûNàè\ ±rãö=Óó„$c´¤^›-O±Á_6¶øk¤Ý:W|fvéãÉÑ)99<ØÙÜj¶¾¸Ù”&xLx9ˆ—½{ÖDáîçhƒ úá’¶:ÀÖ€´$¥ÛÊ@I_ ’„Hq;úNØö·ZÝ{‘;ŠÿëÓG ¤…™™»u’wwÿ¼8èz×l~%hãêDè ÖªŽ ¸Mû¡M3?,$á÷Þ‹ü>øì–^’^,"]oÎÀk5ÃR1Ä@Ò3@WÂCõ¨˜Å7ÅÀ"*ÿ[Q»Ê’zëd¬?oâ"ÔÉpßZÛ£!‰oŠ6#$ý#"èfбµÁZ…WãŠeò“'‡Ž xƒøpr´¿½“ïŸäk±€lÎŽÐt3n*ßÞÜvvEë%®zIWãÃA”R .í_Ü’`óml ÏüyrÐáëc©CðKHb é¥CÒU¡ $€1?[jÿ¥A[ÃÓwvz§'¦÷67‡úúVÏ®UÜ!‹çGG‡Û›öVß{‘›¥ö!×ìíü Ÿ’Ø` éŽGŽ#§‘ˆdðSP†XSÁ~,2§Äø3‰å3¢ òn¢ÿÉd’Hz $`"§wÿ$PCІ%A}mM¡íØÇe’šQž! ¸†Ð Ñ¥OïŽ//­}>=:CHûG…ݽO§ÇÎÎè/l+rš“{ÙêrV0'ˆòËý;.`çêBXÈN„ç ëjù+’HzÙT®µaw[´Y-7Mš¿¿4 ÓSg…ÂÂôôäèèîÆF…ž$åæv°??;Žf:w½ØÙ¨êÅ•ò8lt‰°GD^’Hz–¢y H»ÕÇ)ŸrjóaËRRþQš`“ªž_¶ÚÏVûàB_küõ².ø-Uʇ1ôA’>LVZYŒ ðZÓ°õ£ÉyìU ±_Q‘­^¹ ~E³1ïšlM-»'³¹¾ùá)!‘üy¸³ÇUvÔˆÛá‰ÀU¶(éÔ–Ø*L9¿3!æÃÅÖYš Ÿžœ‹'‡‡[ëësÓÓ· ÿŸ"ÃÅåù¥±Ñ©6oœ§õ5becç'> $1ô„Z"–”Ø´uå CBk¦\q{$I‰Ô§>Ül £?uèO¬’ª—uÁi»j¾!Š·çþªÕHâ2Té6}Ù¤XÄv£:¨qÆT¶P½ÜóVÜY‹FV$´d|qV,lmu{ü|™µ¦ÙòŠgc«ý°œ„%#Û‰€Q¹§ïÊEþ“Ib ©J®gßuD¢5W!HŽçÞÏûV®’ד­Hb é‹$y¬Ì7I $}$¹&ë¡IÑÑ(0üÚÐb4»±ÔôøÄ䨨Êü|aw—. yzpHæÞñ ?³mïDmµ’6®>D†?K|¹kñ=W–¥)7™–)nµid ‰$&"Ñ{’’š ôµ-[î–ŹۧI $ÝIæÏUµæu}h.ÁÁ@I?R& »Û¦a diüïE.ÔPϑǣ©؇dkuumié´X$v†§‡‡…ÝgkïÏM†FUO£¢«NÖÙlŒ¢ã¬íJ³öÕñ¢ qˆCjÅú8ßœZÓÓm7NÛ¼091ô£@Gøº™$z2I„Õ’¸š^–Ìý–¥~Ó íèìÕ\±hâãéÉæêÊþææÞæÆÞÖÆÄèx·' 5¹ÙªÎ:…·Ié…wQIô/H’ %«LackRféÝq·7ÛÔâoP‡xÆ8]iã3I_~nñÏäã’Zªu#Hb é¹ ‰Ü~éW<.ŸÄ@IwBRìŽé6éã"0I $Ýq)¾ ƒÛŠöífcŒ­ ÕŠ[kØÊP0ÖÞá+Lî6o2‘-ìîŽêŒn½É­Ò¹šeV¶¢£NîiPtgàNÒì=IøBå6¾9ÁÖE¸†˜ÀkT‡ø¦¤ÔN4[oÖUzz& ·µf%w]ˆG\]H,·²·)0Ä@Ò7’IBäì¿ÏÙà¡ ˜$’n[Q|ä߯s”ñ3'²$ÐÈε¸ÊØ’0ôïIíÛXU2ÁÑøÙ2çOuÊ÷EOo0“Îwuù¤*³ÑÒÆâ«®îƒ­O§ÇÓ"uÛak½¼»ÙAV>¶ôõªY¹'‰Â Ôœ”Æænib—(©Zã6¬= ¶ÚŸó-—Ÿ­ösÔ>!zØú®&´žOl$’^ ’ð>§rç”î<®ÇåHb é‰ì *Ù?Gäh*®Àµ¿AO®ÒÖÉ@I_’¨Î$ätkŠÕɽï…ö&~‹@j´X[µFçÂìl<Ù÷ó{±«ÝïóÅfææ§§\íZ±ë÷f'ì pž”AœTï/ï¯%=$<†cC)%r•sH·9*<’ZšT½Àm w¿ìê%Çú™®>©ýXN2ç¥<Ás&“Hb ée3IrGZ3Snc éy2IðÆÑ³‰fÅ%¿ñoœùF¥·z‰$’^´'‰â$<¢/ÂÆÎ|S¢QáUhìáp¼££W£wƒq³½ëç!K¨DÓ[[« ó{›áXîßZ+÷ðôQ$&i£4"¡*I $ý{d’*’Ið–áUqu¡÷"'WéæÉ?Õˆxb­ÑìâKzskßàòüâôøøÑþÞ§Ó“ñ±ik{”«îmR‡¸†¸Ðš—Šk¥7RP»ÍôçÙmI’X˜N*Î@øÓÀóAÎ@›®=ˆÆ²Ó­ÁQ¹3'¶Uzª3Ä@Ò÷IÌtI‚¤g¿ã’zHb éß§Ü&£[¹á¢¬? “ZyÏ;IG½ÄÁêfw—Çßë g3¹H$%ç¦g6VW ;ÛG»;£ÃmÞ¤Êꚣ gVéÌÜ‘"ºçÄs”Ûz`_šBsœv%àÝay44×ÊÓEDÆp»``d®Õ?Ì7§d $1Ä@IÿÆ$n“Ø.>V%"1Ä@Ò“ß@’ö[É$Ñ“IÄè€ÔÝPéÍmRõ¾âÙ^5µ°D:¾ÔÔÖî‰FbW§ÉâN§²ý}C_ÒëO·ybj«W` ËíI…#u£ôÑCŸç§M·õÁ"‡›Ø¬V\<=b£ft…Ùj«% ´¤¶D‹ i‚3™$’Hú~!‰Ã@Ò!IŠ!É‘[ÓR'I $}«ôÕ·oèLªà$œRBr‹ºp“Ò['n}ÛleI,l‘A(7‹äf¡ÊÅS´¾nv¼uÖ*zYÚ0¼#‘9E ‹~UH¢ú ¯Ý>9 áqà"m¾S`.L/9’Hb ‰¤çr›)·1Ä@Ò3Iå/¨Ž"×O -¨>{ð KíoPxj%u’¶:‘ë7–ñ5ÏJꆨqÛšcÍŒ«íÏ_+“”¿1“|Y^ÄDØŒ!IŽL3ô¦rF'‰$’Hú ‰É$1Ä@Rß=Wvi-W=CãúØÙB%c EjC„« ñtáFyw¬b«Ð„ ˆ M·=‡'¹¬j¶$t¸0$…àwÑ̰ ’Hb ‰$’Hb é>)%*«„ p"K’ô* M1±5ÅÕ‡U=|S»¿¥éµª§CFU½Û(N‚‡Íå$•Ä$éxÄ@I $1Ä@ILHb é®.¥KTB³ýD âJí91ÆÖøE–]Vûº9É7I²’ß<’îþ²BÁ3×éHb ‰$’Hb ‰¤'HºB •¨DÑü ¡)ÎQ`£#÷왘jC’¬IÈà–¶PŸy“` ‰$’HúƦÛHb éû‚¤Ü·’h3¢eZÊá]¿O`J²5!‘5#»æ¬ùôPûÒT¥½$’Hb é[Ë$YHú IõoIñªf’šž’*œkaK£‡¤g­ $1ÄD¤3Hjb ékC’œ)·}q%ñt!ÜfwõBR~…МÀ¿¢ !É!)ÍnñWoïDd¨&$¹û¹è#ª$¡O ޶bkªJÏ3‚$KÞ…Ø–©Æ¯€Ÿ wΙ“Õ3”æ!$Eªõ,à‹¥öáêdõBR–ÝÒ+­ÚÏÇ©šð)ŠHÍhã‰Vkãù·ˆH’ø’ªõ8ó U…¤ï>"!HÚ†µjŠW’Ì("U-\ —]+íÛª‘XÕŒH’ô8óÜö ÿt+‚õ —8›%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/IEND®B`‚calamares-3.2.20/src/modules/locale/images/orig/000077500000000000000000000000001362604102500214305ustar00rootroot00000000000000calamares-3.2.20/src/modules/locale/images/orig/bg.png000066400000000000000000005322541362604102500225410ustar00rootroot00000000000000‰PNG  IHDR ™þH«sRGB®Îé pHYs × ×B(›xtIMEÙ  8>¥¿2bKGDÿÿÿ ½§“´,IDATxÚìùwW–Ç瞺ϜNb;¶eí±I b“@;ˆ}ß!bBû¾X¶“ôtÏÌ·ª A «qb:¶óÎùž:EQÔJÝ÷©{ï»ï?†•^ÁLèWªwlÓ–Š=å”Xšpëv÷Žxê@ëv³¤v¶ÜÝÒ³˜° ·r:ØÓò›ƵbI-ÝË̉]àtZ·‹a…·ÂÒÒ³Á_Wdäª|-Ý Oíï7´ôä*}ƒ“6Æ(µN}"#_ø ìUO‹í:@= 2G«sö” Ïàg`¯†Z{­`L<0ï­µWJï€ÄŠÿÕg`¯z[l¯°‹A‰ þ]+|ÀÂs>ªÇ´¥ÿ]¬´RšH ÷¢ôŒ®ðÔÁÖÖ$XáÖE¿ØìGð×7pUþ¬õ*¥´°¬­,Mf—¯~öª›¶W­¬A Â-}ÌÀú ì £áÖ–ØÜrÀš°4Ö§h¯zh{ÕZÀš°À"€Eë7,6ÛXµŒu¯~'€Eë3,9,X°`À"€õ QÝkXðŠ7²þÂòwé]°%$€E‹,X°`ÀúD«ùÕ~ÖLˆ#w÷ŠL‚iêîß'ÿ] fÀ«vw°~‡€…#‹,X°`}þ€…ǾE€ÏÐoX~£©:*¢ËÈŸÁr?WU+ß»ågăÔUÝ[ăõ;,âÁúÈ^ `À"€E«E Oþ‡Ž@ò/UÀzg^Q;ø˜BÓ•ù¦Å§Ñ=`ÁX8‘f’>`ÕÎ×CÕô=q½Zo·V¢BÝΑeSVx;µõI¬}bJÈFËÎL±2þöC2šüœa¯ lÝÁ¬ºÇ>WéÇ¡¬O °ð,àrÀ"€E‹Öï° ¦X4vÔÁ“ÿÕñÇý‘²;°"˜ ‚9@'u^"|d–4Âf>ˆ«Ž™ÝÕà”‚'eŽèa„y%5ÑCnPKæ˜tt¾ší7÷‹ŒbCߘ¾\ÏšXéYéG•–1µmTeåJM\™‰5aÀÌÈ”™#1öŒêÚ…úîqsט?ïÛ°54xµ¤Å•@¢dÞÚ ‚),X°`À"€Eëã,<Ã…ÿÔÁÎsF„ªÂä­øo±Æ9½äÈVÄJ½Ý²:CWÈï_ÕÝ«'“Lmåó…L6‹¯Å¾ÀêÚjb#‘ŠF&[pJk™2ÊgS³ÉŒ]¨° IL¨`94å¤ÝZò|€Q´à _F«ŒE‹¬`Q) °`À"€ÕQÕ 4ñ!u°cD‡%NU@ª‚M.Š? *"Ú€ìP¿ÄQm¤vL{E–n‘îDÇzEæ®qÔ+²TÖáL¹ðxôŽábÓÔUpÍË W-iUò}Ò–½ª1àÈø«XSîIçà¤ð„ƒï5ã°J§JšœóËìíBC¯Ø‚Æ[4휜õUÑŒ#Ïo¤ ×'G‰õxv#ýúêâ§—7?Ü\C¯®Î¯NOn//0ÿ7¯þñšÒ?xýãÍõÕÉñÉþþÑÞîN¡Œ'ÏöNö÷¶ó…H8¦Ôš:¸Ú§Ü%ì0‡K‹3¬öwèÀ¦ÌÁ)Ô2,X°þ-,X°`Àj¶‹ƒS÷…ÿ”þvÁ"(çòÖ—#±w™;GM]c*u›úDŽÔβ ÕN¾ÜÁ“Ûy ;R…:GM¦ [µä׬„†&ÍÀ‘ySdÞ–Îz0ZQŸÈÔ!\é5>Ô~ϞÙz›ºbþ†ä4UPÉàLBR#fÝÏ…baË;¾½ã¬‚(®òsäÞ¡)‡v­Iæ‚ÓúÈØŒK­ xBio(í $‰ÂÑÁQ©´OÍ‘%sX¦µ»½1¯](7dz§gu-žJ%S»å×WW×çg *ÌÜ^^¾ººzs}•ÏdÜNÏ¢Îìñ].ŸÛåó{ƒ.§?ŽFÃkÑðj v8|~_Èfó˜LŽƒ}QgÓ›cJKLjY\¸&ˆv‡äÎaêjT«>VøpgIX°`À"€E‹Ö/¬Æ Z­* R‹S5™RJ/Ä¡U/¸³È1BhŒ-µw Ü)«Ã¿aó&µ†rq1—xÚ®Õû©b±XN¥·6RÅL1Ͱ%Æ™%oikowÿxÿ0IÂÉÓÃãó£ãíírx5]ËùÃ)_8mvFVÜüÉ¥gì™gìÙNÁ|¯pþùðb§`ÃÉ1°E‘–ÒË€EM’Öý\È};õU–àvØ%ž )¢b‚€4º!Fé™Z +—#̸rÚ•`f{ÅœSm¤9 0mZÔf5a:Üïj£ÕåÔc†úŸÀ"€E‹¬Fºj䪷>*0JµVl+U&@ê€Õ˜0·ñ—žržqæÛù‹/¸ ϧàm‚VcÇû»ûà‰Óƒ£‹““—4*“°0I,=[ÅÒÕÙ) zuyqv|p0KnΩiõ#fNvK»™tn-‡Ïæòää–Ú&~{~y|üÃͲ„šþ±ùþB—`©kÔ„†pðU–¢³ÑÝ8hHFKŠ´0'N‡%£b}äx!jÉ‘ã[LjÚ#ÖúD3‰g»@߉N|#KÓKÞÍÍÝ\n;M™l!8ÕœÞØÉÁáÍÅùùñÉùÑÉhõ‡£Éd2çòD%ªx­ ¼¥ñ‘9¯ª.Ž©·4<1ÓÚo«×áa@1ü(†«ñ wvzs~º·]Z1:ÄFöÆbT›UvWê;ž¿:Æ"€õÑÚ+´R¼y €˜Þ!„éM½õAbÈܼðTéYê[*KÌ0 ăE‹,X÷kúßùyw=UÌ +‹rá -ÝŠ„ª§ÜeÅ‚Çç_µ9#ª—Xmyšy2 ž]v¢ÿñæêâøÀD»[Îk)¢â|gk8RËOTUæß… ¥½º¼©4Bx"¶‡÷(µ‘‡Éí!y UƒSTÚVŸÄ†ÄùîqKǨáoù±[¸À/uð{D–Þ1ýSöô³áù¾ 4©uí”ö¶·v7ÒE>€ÖåKÛ-˜³º"p°ý߯qFˆl.Ü|ɼ?°v~|Ä@MZǯ®.ÎSYxïnê¹"kçk¿‚» § OÎýÍ5Òáo~¼½ùñææÍÍ5>R.®kj¹ð¿} § 2èáÓÊn¤dÓ‚j™Xa¥þE£3}!™™Ÿ«˜ÖÖªe,Xgˆ{aºÜÞ‘¢¡‹îTE•%ôj´ð±FXB«aS´‡˜YóÅ’XQ–åCrɇ,lŠ,X°Z Xüû2oªþŒ Z1Ñ1:Q}ÒÞ=f~!XyÎÓµñõ}ã†%s¹P»;û¥|îâäøˆòTDV3#Sú­Í-§7êpGÓ©Ú{À8£ÎaÃÌ#üׄoæ!y×·?¾¼þçëWåÍâì‚ ð4H—è„=|:¼ð‚«ÎHuÊ9ë̼Íb ¨µ+áðÚîN9Oõ ç–VñõiúZÛxË=Â…½½ÿ}s‹H`ñøàp«¸e¤Z{7_Û6¤äN,„Bñt*¿ºº‘ÜÈîlïlmnç³ÅÃ݃»ðw7Þûž)®ÞÑîîÕÉÉùáÁAi+³‘Îg³¡àªÉâZÖ[õ»Ýî "ˆ ®¯%ⱄ×”©{†åm²çCʯÚFÌtŽêû',,‰yHbdM1.=„ˆ/yÁ oEÏ»˜Õ «qh‰ëc¶W÷¶²uyƒ‚ÍèÛÂ0þ$¿-`aåæÇ­©ÛÁGX¿'À2À"€ÕBVWÕ£BfÝ"k瘩M°2$µœk©ÌVqsWo‹J¦m¾`Âé‹!­[·b?ÚÝg²¦@›ù­r©¼½µ³_ÞM&2þà´YØFƒ VuÛ„ƒç§Û—?\_¤j­¡›7ÓÉ_xÎ[únPóhpæ1kF01›H¤…Dž8ŽðxU.Ž˜Ü§£T*èêû^‰çZÇiJ¦-ßõ«Ÿ*§l…\ëÜÐЃl*V¹´—É„Sú??m”Cë¸Çóãã³Ã#l³Î ÕdnÎ895·»µý?¯^Ñt^·—Ÿ^¾œ[4|ùŒ_Ìå/pއét~Nç1;Béta»¸]çNÝ^µŽý¡x7G9<®AÜçÞxðï«777&“íÑ ö—z‡Å åÜ<’¼Ü~¿?œKeA‡åÝý½£ý}`â)i=C•,…fåßÿ×7‡3x{q|„è$:'öŽ.áM½kTß#˜íã+áÍb‹õã .s—P'˜\°ØƒÙt EM3©l4²>¯seú¾ÑE$œ J z[ žiœHˆ°ÕöªùBtª[­ê™®}ƒŸ š¼éÐÚ¦Þ™¨±üç@0Wà(ýC ðkXÉ,¯Å¬FÆ 7V£°St<¼W¬ª*K`…ðÅ›@3N©®Ic®!£êIu —ÓáêF`À"€Eëì`Õè4fY1)JâYßñþÑñá‘Éuz×Q1îëwyC÷h«|:]礩×ùÙ%ÕÒ×&ý²Èà~yÎ'l-—Éüa·'¿ŽP¤üú÷‹§ÜÇÝcßõL<î—Ïš~ÎѶ ϶óæ9£ê³ƒý*ñ éÞ`°r'Ì&Çáî’–pxwãôäI;'Ìà'ÕFÕÉÁÁ¼Þ ¿×ÍE#ù1Éø§' ΃å¨C),§ÃírúÊ[Û€TøÃ²Wô±;æð0Å}A¶˜+ÌhuO»xm=ÍœÁë ì”qwèhéÇíë̽à-‡×'Ð|?4ýdHûuû8kDùd`zdBSÌ*§_½A§´îøìè(Ÿ)(f­ÃT1-oµ&€õo°Wu¨Ô¨ÆH_ÕÏÔðÅ”Z¹Yxƒ’8$®ÔÈž4NZÐÿwXI÷e¡ý”c3þ9S8Ífr%É\€‹…•ûÞÀXÍV¸S¨Cç=º X´¢–³dvvStEûøª_Ä´V<ŒÈäbZó ôad*l¡ö¤ZX,X°`}®€Å›¢s5ú ¡ zõu·þ*²>$'¡(]´µ@…z–HÏ™Ô/™;Û»þ@|Ùä÷â™ÌæöVéìè-*MPs+“y°êp M>~Oy{›G+Æy†þ†¥â6Ò›rÄæŽõ¤¿½oT$Õ..[vw[ödP‰ÊX ]1zÔ'Ÿ™Õ¿¾¹ªÝ é¬Ñ` "—Ú}!<ˆ «¬á0@g'ï:<¨ñ€¥O—_à5ôŽ ‹®ýåÛÎ^Ö¸ÍêÚÊoâîà*UïÈK:èÉMÓ+oçÈëÉx‚/Ò$âɵh|JµÌi·rùÛûœ‹LíStùD5Ôñ©¶Ìþ©ÖÃÍ30¶@ý>5W[o¯êh‰?í¯õÇ4ŠY3u)•xÒYR<éÔ ²yl=—/”5ÆUxV†åt¥•ÊX¨Œâ#¸Úè !ˆÌôx`0«Ž±Þ°4á.¡¾ßqÁ÷=ÇÖ3nì.÷Œéá÷ÂŽº…˜êº„ËToGÁ:8·ó^ðæ_ðfŸSjã͵óðU¯ÈÈWUµ²;âÁ"€E‹Ö{d9 ýèQ€ÅÄéþbn¼;öˆÍ©Ôfq³|°w^Í*—| a<ÁvÞâ“~U7_£7ûPIƒR3ÎRU(&7—ÔÅ’ÖÕø¨°HÓ€Õ=º‚kXwŽu8Ũ®¿j3m? pXåÅÊ£Úh ýl¥‡¡F #§_B ½Õ9jT,0PKB¾…S¾[»¤~¬3Ìf°YX°`}r€U5ÇA M+YCƆ)–0£Êt`=º‚éÄ€\…£gÌ80¶ ˜sèL4«h\Éüã!8æúÇ–¡Äßoo-Êe‹±5”¶J¡ª“ÁêWjLå²×¿j·»c±äF2—HfQ<M"×èŒA…©Zçp†€VÈ b2Á›äÈÂáx>[ -ttŒ®Sp­wIþüTðu×äw}ò¯º&»8SœE>•FX°˜ËÉTK£ (©çÙHŒè¢ø±ë§@DŽª½¿èû¾‹»¾¶Î\·‡aŽ™"³m=–J4¡ªmHW<_h‡Ð‚~Z,á} y½Ô |Wè €'BZÆŸ%‚ ˜öˆLøHŽ2ÿ2!L_ HëýéÊ‹†`2¨†åLQ77›JlrÉ—B3ú_ý¶¸FÂ8Ô-óZïÔ"ðQát%6žÒ5oŽ£9­qÆ2 Rj¨ÐÞ ›Å›ÀÛT.WæR{÷5:±š¬j:ùÝ›`*íA˜¡7~‡±š,\ éB(Ë¢wsd-7¦ñÑÅíì(¼28aÆz{4EJUr¯\ÚgI,}ôÀœ c5@?ˆ¨Ð§ÔŽ ,XŸ° Æ>˜lª»r@h&q˺ua@´Ä¨ÒtƒöÞ©ŸàÓðjê{µTÕ)ýºS"ÓÀË•+—¨"ìÙt~¯¼ ­KÕúøz&›Ø`âw/é-Tɉqe1iàÉM*uœ±™Í–Í4Û| ³ÒVéaˆ©2 ÕÍR£Ê«â/ž|Û7õ„¥ú[¯L(Ñr9:?<´ZÌ!ÁŒBø!³£Ï^5tÄÚûF”3K§(=zY×u3tüñ¢ïÝåñ†Ž6™ì½<õóá´ˆð]Ó™ŠG•$÷ß°šLNªmÂi+¤âQUê† 5eÀ|¨ U'íþ©Pœ¶ðþòãbö7g¯jã}ÜJ@Ÿ-§ Š«t3@i‡†ÊçýË Ñc~"P9T‹î@h#—ÛB‡ „`w¯f2E—omÅR/Pé åF%»ÅÓÛ°)÷¸Æƒá -kù|¹´½ƒðÖþ!_á¦éí×Vò2‰çZÓúöÖ^&[š5­q`¬_XFÐ'GéCíÓ®1c÷¸‘òZMÚ†&­((»Q÷^û€‘¬ftA¶ŒâÈFÆú€¡aÜ>Ø[üy`À"€õÑVó}‹ÐâU ~ø†4ØÚ¼+7žöñ·DãÈV¼þøÙÑIm }CGŽP¼olþñ òQ¿âÛn J=¹}1vº=¿œš6NÏ[ÐCu6ÓéËÊZå³›šEk0wy"ˆâa òPÁ\5kzÚ+êbOÍ-Û‚ÁØîöÎ McŒ¥k–±˜œ¤Ó“H490ªùÓcî_ÛÅÏØ@@Õs–Å®NŒÀ~ËÛ%¤xcþ÷)èV¾Àæ‰þüXµ|yqz‚+[]/ds¨­… !=|ÒÉI5êY=RÙøŠ?>ü­GÖÆ‡ ê£é Mø½î«ß °˜½7 T£ÆÍ¬pUµœ&U|\íá¼ ‡9ïÊQhEC—F–ƺöïo¯\È.G´¨¹ì+êø™QžD³­1ædÓ™íØZ6¶–‹¬åG‡wý†zM:I¥ ‰MÙb¨Z/”-Ç«”]±à´¸cǪ˿¾ºžÝ,”Ö¹es “§ÕyFf‰Æ¹³½‡@ygØÁ¨ú&TZÞx._ŠÆóVO\µèÅ-Æ?«úÀ€…Má¦pÐ…bʆ$Q H…%¿°"!Ñ[Sxh'œ1AΤ!MÁF5Ø 'ºB«@uŒhb@ô¦ µQB+€˜I‡%€E‹ÖGXÍW|¡®†ÄV5ÍŒª6š1=°’}"‹fɇ¬¦|nËæ gÒ…Æ´'¼ó!«éí_ªÿk§ä¯í¢/ÛÆþòlô‹¶Q±rE»è°;"+›×óbCBõ¾fÍ,˜g¬c²…Ž¡Éÿ~<üÇïX]ùŠÉ_OÅãiX–=ÌU/˜{ úNiÌ~>þdpú»^Ù7]’I•-Æåñ!Âk–bæw X«áÕB&‡™ëº:,—5ÚÎ\*cјÝáÑÌê$rÍæ„¢Ê™eÖˆâQ¿¼c…Uõ„ÁÑ‚&ªŽ®øÓK¡Ñ»c:ùëþíUÕ” ñrj «b0ïÿgïLœÚȲ.ÿ·NÄDÌ73Ó]]]v•ml̾oZ  ЂІ@B»ZØ÷}1‹m\^±««»ºûëùe>+-EQ…ýµ=¥ˆ !¤Tf*ó½óÎ=÷\Í`¬ÞGíîJ­»(‰mo°Ýk6Rg: ñŠ,Ó‘Ni•9¼KUh—èµåW.¯~-ÀR&c©™9˜ã:PõÙcµ]>Ú ¸7ÖwGdÄÒ3ë=¶8CÆ… $ÌŠùÂóþè"=×V>h®ÐŒ”4Û(#mîñéÌᦞñR•˘~ùLJij"âöL¤WšºGålæè}òpº¥÷Ï€‚2?&ƒ%2¶çÛÉß` ui}wPk s–ð@>{qÉ€À IÎý±Üð ÍÊ¿Ôó™Z7«x`Ø>'ªÈ`V`}v«0-R°vçO¹Å}·°ÞO6&áj#A+B$wk„â3O.ÐBo•i¸ÀCœ"²þðv"’Uõ8i)HÛf¼ËÿTÑ[¡2ëM£:Û|S÷ÇRíŸÊtßVu]®¯U›¼ãqºomîáƒõÓg?½;C/õî¥è¯w]ÖJv锜è÷<HzÆ“m=Î?UôIu@jÚ „í¯Ÿ=ýñõk… £«p¡Oÿ݆ üD—žBé:Ýu@];»‡»»Gûd‡_ʧš's3‹@áû-vRÌ ¢[¶„*¤Ö:ÉBtõïJ ™¼”Jï=‘c”­ê ’ˆ›GËh¦×žÔ™Â‰Ô"ؽsSo Í¬êð†£§Ÿ"³ä›úlá!ï”ÖÄG‚@.(©ÚNöµÏŸ}•ýá^ÓZR:kºÝšÖˆÿ~$€Å"3¯ìô—iØ7œHgWŽNOž¾$Ë)+ ^œ>Gbüôè†:=ã˜qëd­á…b¢P†ÿh­Y¤ñ)ÛüÔ‹ÍÖ¯ý `Å‹ë‹X…Ъ0¤F{œ!!‰4ygÆc˦Ñi•9)*‰¤Uš!Ô?6Ø‚cA–Åkþ`JáÏ ƒ ˜ÔÛîÖžu$˜™^ž›]iÑüßÒÎÅÅuÚÑüã/ï·7qÉúÇ»·'GÇý¶<j-Œ7I2^N)¦R»½÷_Š‹:b‘D ™È¤¶Ï}»Æp¯ÉZ¡qA6TvŒ–5z|!dï;;LJØbÁÊ$SÙTFnãÒu¹½;›œ.ïÃjuuSTdm³þOÔßTöb”…ÞYšfÎWŠRºú÷,ÅÛI,”k»Q v>$úfRÃ`C¸ÕḪ»üšÁPbj!š\˜žY}rŒ:íù__¿dþñÍK«'IKMP‹?:=7¿ñÏÎè•»³}š^Ÿžß,jLb+d8PÊÝÓ#y›o¦Û*ÄÚ7X9¢hR‘·3>¨¢¦‘*õ©ÌrvvCo ?ÔxœãY£cRkŠÓ•\"Nv<º`jÊe?  ŒaJU¸ÙWW·íÞ$rïJ­ëAÛˆÎÕ™cuTÕ c§à*B(Ï è«ßTEÈGò.'åQ …¾º–Ò\dÜØ±|€Åž·Ãz_C—“Q¯@Õ㣖ˆsó«‘hÖã‹™‡VG0ÉxüɆ.o™Æ­î¶öKµAœ4Ž7­$¦òã7`,6õ)ŒÜ”óÏ!3ò:GpNà5UCE€UXÿ¬‚ºeí~>“l¤^?ÁÛXÒi‡’¨;_Ë®H®à|}_Tn,Æ'fscשÖ^ZZÇ\%Wì”ÞHí„‘gìîW´š –qF+¬¡¶×Öº‹ÂþLv±^cÒ÷»#±,ys=wƒç§OÁI˜A<Ú{„M<ÅŒ¬/OÓ°Ùh Ü®,—ÖÖÈRWÜä÷›m_—÷üña÷íÊîuúÿöÇš!«{g}ãƒIÄïK]¯ž>ýª2Y\럞Cž=‰¦¾k0Q7'WA™¸R’AytEºúw,Å9SNyk‡¤üÔ•1Òi‰wYRuXoí6#©c,=™YEgcN 39"¤ÃO +æÝ“£èœýÝGpŸ[[8õK®ÊUôVæqÿööÕ£ýÃ!/TD”3#V>V`=ÓÔ¤`ôb³1®¾qŠðÔ¸Hƒ¤ï·ŽÜouVuŒé­ñ™¹u_hŽÓ%³VWåÚP*=¿Ï™`ýF¬*­/Œ H%ÿêR Õ¯”¸ €åä" Eoh†rf~Ö¥¥Í©Ì’?”jî´7¶egöwàÔY<ÅH ŒDqW^^ÝíwN5ö)ºCqìÄd!غ>ÆRË6„œέ…÷°Kä‚ñãø¸+Ÿ¡”o@I$ÇŸE€UX_ÀâN+XW”DÉ‘[»+Êe‰ÙÇb§V?&FVóÕú Õ@8ž^±Ï0Ú |E‡¯ÇBwCNìlï‰ì‘ÔhïÅó+ü3a³hÒBº°ß ±ñúúò>ž_äux 4¥p>>>>: Ë1¨ 0‹ï:“BʲÍLJÇS©¹P$EßeÓ°Ì·µ¹»¸´aóDoUÀZIy«. ZÕuû=¥DaÛ09šáÜk²ü¯]0œ”7^DWWì…ß~vr’žšî28lΉ«ïVu_ù‘={C\²^ÿ7,å` !·u ëm‰…åçø4:$’_ÙÙµXr^7D£ÝïH¨ þååÍ¿½úûÛלÁ‘hu‚þ™ì2·@ffÕ9–ôM¤ìžèúú¶Â¹ùJ”I8sö;â\~LfJ5åEߦ¼¸aŠP|Vl$Wüøá~W0P“!&LϹ5Z!–+U„"ý™0µÕÄMF)xN6°Tã©Ô1\°Í | Já/îê7:¹°4Ÿê´§»G¦É¥*HE<ùÍ 8Á`)«Ñ'tÄ *wwö‘ÿ›†C}CãÙ좨°É·&9Ø}t¸ÿˆáèìÊ ŒV%&Oš†÷N`Íy]ÏÅ­QÈé^§‘† °2‘¸b—˜È?~ŽëÃÝb·~¹µ–¬øö"À*¬/†Áã ŠZJžÃÁŠ(Tð\)d%MÇÀz‰oˆ›êøx_¸–%{稜4‰¬iPo”·Õ茞âÖ¾Z,þpvaa}a~©Ó_Þ¼¢ÍËÞö>^ LÃÌ(Œ8—vSÆ&šjyy£Çäí«míc¢'}˜™dŸª……•ääìÌÌ",KÉ7ʈö½´q”U¨ö¶÷ Á nnl®®l­­nß®î¹SÛ'ûWå½ßÕ›«t’<‚ãbx"ËSß;ÑÐ3A\Ú+u`qþOI;p’'ûïB]B†Eá'?â7Ú´}S=@ó]IiÁó:î+ Õç°Þg‚{ƒò)|£ ‘ )°ao¢Rm‹ÄçþõãۓãŽq÷x/7„†HŽ‚‘i8ƒ}îÜÕU· YÁoìÅ©Ï÷«Óg'‡Ç²•®TáÁ+r]ês!î@êN£µLãå+X—údÞ` ùÁXù˪\¤ž“#PÅ‘¼R ó'ÄkÉræ!3W]Þ‡‡}û-NîZ¯XFWÚ11ÛãH·ÉgéÐ*`uKKm~/r¯ÓOð{Õux*µÃ¥Mfºj®­l¿Í™¶ `P7¥ñ”’©…‡ªaÉ´LÎ)7ô5&Š!bJΔoɯu¸v63ËØ{c–ò-Yv䇯®É €¶\¢(~VÖ]8Àñu˜·©å(2XE€õY¬B¹ºœ¡Hë|ITa Q ØdŒáè Ά“+ÞÐü€3ÕØ„ÿ/U9zY›‘áo–Ñr“sºÀ+U’¹èÒÊædjÁå‹O¥ C¾&ehØ¿´¸67¿B¥^¨”bÑbYΛœÕ¶ö–7¶7wòÝÒQSñŠûpoçýùÇhtnnÉçùÆcýJˆ`$­êiê¾]Ý‹íVI“‚ Ëʜ룂®’>Œ)ß5˜oÕ Ü£¡^õÀÝ:£®ox{kûõïB]i–7t=h2“²aaª 35*NWJZ°p¶ûŒ–))’ƒ ”LJÇOŽO¶·÷¹AE¨˜qÊ]XXãÚ#Œfõ¦1ºIrìÁUþë¯ï(ŒeA–¹¤¡_Õã²»c-½ –ÀÒâ:¦š¸Àì†ã³,BìÞDM»»ªc\0|ÎÒyKD!±q“¡xuY˜/òU…Чð ~5ƒ¥`åUêH nää)¬$QÒ©2Áãc cIF$¼ªµÃÔAÏͯííì#] bTºR%²\ŒŒ,•egIËðCµÓâ¤bæÝ‹ïáÚG'2f7˜³X°’Tå~áxek4©ìQHÇ~¹Ù¥Ü –þjªIÙ²5Ë¡q²%Û(NàÇœ›,î,išÐËÎ*:üé"À*¬Ï`6îPFLAJ‰ÚxH{ÀSm7AúU„˜öÆšoféIBÐàH8|Ì•+ñ©…çO%«åíÍ]ü¶Ö73³:s„Frw`–dU¬Œµ›ãœ«òöÑŠviÜAí^®vA5ë]Ó3+ÐæÿúñÔÌÅügçÛËõ£„pwk—¤‰g,®îv8¼·/Þ¤í7ÙáhÚé xÂñÄ4<Áìܾ£Ê”ÀŠ­®l@waãŽXžO »ÃcS6W´R;B[{vIt)‘åÉ ‹ÈJF)AØ:\Ó>l´ŒÏÏ-eRÙÕ¥¥—§Oß<;}}úô4>"I.¢«_ÆXéôLr2[ÑØÛcÁáZêÜÒÜ7A ‘FcT°2…F Ÿ/À’ï”ç ¬®Jš|- hSýâ)]ƒ˜ O¶$sI·.âÔiñ ï!­œÎ.ټɖžQÒͤžKšlßÖšnÕ™ï·ØÈ¶“‚ä,I\HDE* cts²Ç1ÕcŸì²³’—ÊŸ7Xªª[Á@W¢¨<µøµ?H\НÈ=ýf‘{a"U<Þ`™’¹ÍŠòRÄXr»°ž 8£ «J;R©±k £°•ö`<9+©['OíìÂÙ[µæF½waqKèÝK,”w7 óÿúæåöÖÉ5Õ1$û—y-ãYN`ÀÊ\¯ä߀*päœ|ž³¸" &@ÈËÉä»Ú­ç¾¢°Šë3X\—W7Æ«Fĉܨ•ºQ|hÊÚ‘šâ¾“ %W¢©U«oºu F60§¬œ"”N‚pT z_…ÖI‡cz_ˆº'?ytÀjlkë`na A˜sÜq*u¾ÑÐÜÊÊnfns4<§·DpÍ¡Œ¨LíÆû ´ÕÚgñ§§)ºy´wˆ]ûë\·côXÂÛjjff)I#½jí²‡£Ù•¥ X®åeȪå¥uäVNO‡w¨) Ô¥ÆZÌgp Z-rUß?~Ê¿,îxmǨÐZIr]ÝhI ã ³©ËÙÒíñ%`È2Ù…½í] ^<}‚Ó‹'OÎòÌE‹èêêà„/ÍÏß­î¸SÓ{¯~Ð4iîoëÓHD\`*Óå‚’Ï™Á"_ãO»ü)Têøq “€a…ŸàZLͽ–;3‚ìóe‚<¡ŠðÙ“§ðÏί2•öX&îÃ[¨Üä¦Ðg:d>4p»)ÚmOJ…Z¦¤Þšì´$:¬ ÀÖu2D7g°”'×BÌwuBó|Õ–N0X—JÚoÞ‹&@â8'Ñ#„^-§îï K€YŒ´ej×Ý&ë·uæoªûKšL€­ž!¿Á죳EY›­¾Ë37¿Î`%rˆrÎ3á óã«—¨àwwY¬ =–Bb]ãÆÉ ÞókW Ó¸Gà³Ü¿>"º‚¦JsŠdäyþ±V`}&ëj§uS‚·™SÜll™j8½5<…ÙÙØw…e†×;þuE7>eêÑÂúŠŠt¡k¾z!þ¹i°Ú„«/R¯ Æf¾„ÍE±R\ŠË‹ë(Ñ4´›CÑt÷ kØ„¢Pü޸“©y´YX¬Å'ç¿Si˜]G˜øPåÂvR2²—‰+¹à!#2ç¨Ö,l–’¢Z­-ççN|R€uqÒHëš êã,mžÑ(ñ1›ýux¼`d#”g¢ôR)ñaÍ A.SøžrsÝ» –; –»M–;MšD‡gþöö59@ ;ð÷\Täy ßÓãÕ@¨ ƒ°á=Oý^mðÍÇÅü+~¸!išës«ªLŸ„¸j·MKܘÔÌàb»Ï"À*¬Ï`]µÐ̧î‰k8–àа4¯ jÇ»ÇÍ®–ÊöÑd 2훂ÑñNdÆBY‹'ÙbÌqÑ "E(VoH;0‘š^AÒëŸòM¤“S ñd6Kcí# ÈŽ<õ…¦åE›G?œ_Ü`¡/*ËŽÆ,î{­!µ1À@Cz®¤ÙZ©²8Gã¤éNø÷wga&í®vYÑÄôݺÞ?”v„c3ÿùã0OtþÏ¿þÅbóÎÎ.3c)nX`/|WŠâ#ʰEU||rŽ•"šªÒ¶†<~G†¿*sy~áGòr0´)WÑFìmn>9:‚«+rW×X8Áj:ÍtÂyÐj¯ÐºQ³©Œ~0zó@Lquº}õùUê'Z ~­qTÝãÒ½(ÓéO™^¬o·þ÷[­¥MF÷XŒ´5—(E²‚¾‚»Z]ݬo·ÿ¹Êp«Úè LA܈åIöÚc탒¶—ÉF] EsBÂU—Ö埴¬ÅÍQÚ¯âTn°x¼bk7X—JÖ„ë²³ÈîÁJ ¤Å¢A*l%3. ]Š„º­áÇGz÷†‘-é“£ÇAooíáC6™ò‹+Ö1 °®oxgW­e ¿ ¤o× ±¤,!$}nÞM]£TpŠ=ÄAT|äãB+h*r‚t Jˆzœ^¼! ¦µÝ(töiÖ6E€UX¿­.神ÃdCä–œ–Z}€"›/‹`F&º;¼mÿàHlØ;å d2Ó«±yí ÃqHXD®as”µ5ãëõ¾æÞ1´íh–éÞZÒ8x«²»±Ëeÿ./à·GC³Ìx ÒØu2½Cö×7¯ÿvÆRì‡@t¦º]èʽdF°•*mµ5u¹T½î®Ñ¶n烦òsU›¥Ng¿Uküª¢·Fkí5ûj5CÃÞ0.ðÍãêò:pM¸P ?;»$ÔW…ÁÛ`Åþùã»ÿüñ‚÷ƒÝÒµ:·„®dI>QÖfµ;ýt¤DñI‚ ÌzÅ•äàª'ø’noÓ§¨mÿEtÅÊ;Ÿ¼]Ùy¿y¨¤Åö@å,Ó¸:½ä£›˜ q.ª/‹Á>X¢åKxˆºN7yŸ¦N§Ö@»ÅÉ~ÛD(6ÍRé ÍšUBÏ#’¬@0U©²=h±7¶Z|Á4õ"Ø1К“†Ç}Öȵ·ªÎs#Îi• M½?[€uuÜœ˜ÿÍKÄÇJòX(YÅžt:â‚Q’†Â³F¶`+(¸sÍ@hoWò©¡¶ºÏhívµêGš»FtöZíp•Ö^Úb+AË¡vJZú*c`À™rS¥ô³$¯ä˰d˃dûσŒv98Qìhƒ)CœÕO@\eѨ±?T æašÔoõzÈp‡oÝÜË#üLE€UX—B«ì´’Mhå‰)!I‹´®ê/{Û WÅÛ|éÏžon=Ò †ý±yòú¨,1…¢¶e}mÇHw[Ð øe5eL,Q†ÝBao¤¦éº$Þ¬’+e*4îÊvIíëO ¹MÝnú˜žÈ˯‘ñà‰Rš2ÕˆÚà[Ø@³5<št„kÛ4»eÆ¥áFy»—âä -Ú,;l9…Ûµæ»C0[˜yÞm´”«&?ÆŒN_¢Uïü¶ªçA}ŸÍî…ÊB¬ &r§7´´¸šoå§ÄÙËç_‡Æt¶óXGÿ(…ZUɈ)Lbx¬é¯Ö¹Ô=ãwafnos;™H=;>–·™s¬‘ýœP›I¯üîQÔUÞWrª÷A­RÃtg£GŠu4…)eÒ¢¡d0¹ÚdŒtð½*>'÷fcÎEÑÊtÓ«ÓSäí&ÄUp*•žÇÆëZˆ[V4>[£ZI©RˆÛR.þ6kbj^(Õ°wßÙÚG§è-ùf±|ë !/”Ý Eø…⪩¼àO¹UKÏ¿`‰=„†‹ðí?—IPJ…Î÷ÿŽçÀV´Q¦µºý]¦ z;âì@»ˆ;õ¾ƒßÖ Öú3Q5ðm½¥<ÂÀËŽ´ —,9¦,Q®L¿Y¾H(ü@6?„ý‘/øÌ§³³e¾ˆ¯à$äCÀ›d÷@-Âíå&RgŠ«°ÄÅZÈZ)¶~ÐN Fÿrè¥ÖanªêÎqw»l1êS÷:-#A˜ª õHÎÓÒíké‘X.Ðo€<‘_=F‘œ ]¿*ë2Û¼{»ÔRÿ?æOŒO$È€HQ«•«Ûú^$ éZˆçÖ×=÷ÍšmÛ\èÌŽŒSÂÇObïÁXz?˜`÷ ÑXÖlhR÷FB¸12†ß?~,ÑoïÎPh™íc©© ¯…WX3P °¹ºÒitííÐã–â©A{pey{À5‰‘àÞæMá|Í ñe,¡GÌa¬ˆèãÁ +àÞ ®j3S£Š<—,’Ýß?y‚<ë_ûåÁ½FË{£5éŽð¶Ÿ>~B]¡,“Î#§.3³¦ R_y¡_áÜùE0X7/ÍÉ—:\0êãun^~U.Iw€Uì~©¼. "Ašw/ƒ†çµYräqZq~ª³©ªh­Ôz(w«J­Ø·özÑäÔblrQ?ºß6ò@åb˜b©Ì’ë­ñsq‘êˆq#ÄòûŠ`SŸ‚¸b˜57¦6\Ã7XcìóÇÚÕ"Àú]¬Âö5*#¾r»Jƒ~IëðŸkKÕ®û*wI«K=ÜÜ< ¡G¿+Åp O 6ÖèúÇ©¦¿,4Ïöö$“Õ“hÐ>D÷’s‹´ŽÅ;Åj;5½Ac2rˆBR ‘dê‘rÕpÀI>½Ì@\XpT¥-ÃŽÑêøñpÖÌ$R‹éì*To‡qï!ÎÊíú)³2»“t„c1ÖØ=q1QÉÉÇSꜛ5†{5]=&Yr(]ç¿PJ/OOýIªÂÓí Òb¬ƒ§ÿEEï'É J. ¦îåD)ÿ-œÚ~ÀâWøìyY°F‹ëóX…èêý@/ë( ÇX[ÝñÝÝzˆ’ª[_Û=Ü?"IÌ<›cpÉe±0’H#²w}‡«J3‚st @®=÷¤Bb f@Õxx(“Û¤–JV„˜8á$>X §\… ž/ÊYŒJ롚.úÃPD²÷³JëªéðT‰ºt½¤ßÄÒ…oÃìÚÌìz§™ÞN0ô8~Œ•m¦Lf Cv¾ƒìå…¬­($ÔÚÚ¦Jo±9)Lùü‰P$ƒÙcC»¥¤Áx¯ÁÌÔÓ šßñó ø(–’c±å-ý¥Æ[5ýßVhëÚúZ;Ìú²Z¡ÈãñEÃq„_é̾\;ˆ×¿{8ui<~ôˆrK@ 0Ò7®@º/-o3m˜=®œÖ<ñù¬Ëo=0–QÂXðĘQHb”:²a7ñ=$k œáòã‚gíÀY,r¸àºÉËà¾6ŠÈ}ȧ ®‹7¹sM¯¯0_ýòÖÕšª‹®Z„‚«ä¥£È©5À"’†O`P‰{îù°x¼1ÀJ«¯ô¿ˆÑEð18÷ O{B 6 H]Ù¤T¨e€kf²s8ÃÅ#V­ÊàúaœddÄë³…°SÎï¥Ã~txäjìpÜm¶¡¦€îê0_ì“-"¿û²€‘s©Áülæ'ŠBžãâÊçt]È¢þf`ÇÛŠ«°>ƒU8Äc[…UÉÝ3úÙxj±$w&Á(¯t柞]­ïð‚!0(GS®ÃNSäÝ…ùç(Õ2Öá¸$AÕ'0VBi(†wwi[_ A?Z¯çÞKc¹DÞP >´ú°“SÙn°Ç±y´½äk;<÷ZÞ ŠØ° Öf/káóI>Å8¥\‘Ä"ÍF(NTj·VW9Ì|!”xþìä1s9!<µ§³KßÖª4Žæn_¹‰èx~{…®WØöVâ±Ì.\'øøáþþ£½6õôø˜œ Z ýzkÇ>Õ`¬$Ú—ü`}¬áÏmJ‘ÕWh=ja©jžÔš"I %þ[ç* ;,“¾ðBzzü¸r¤-9=?=×+ä!w’ärþÈöýÓS,àWW6iá:LŒ¥†< «7E}ËEQÍÇåÉ–W êl±†T¨¾ »ñ_é† [-zø€Y…çöçÎØ¯2ZkWV?j`ÖuVa0®î2tW€žÙùM±nä&„“ÜòÊF¹Z–Iv­mìoï<ËVÊ÷€Y<ÖÉf›ÔS°o3†ÝÙnûÒHyÄÊ©´˜+ñ¢dû.-Äà À"—G£SÙ 1PÕ%Ùù°ÙjÙç•c=ö0Rzù^b%ʨñhuu§µ/P¦qc‹õPãÆ†TkŸØ—6¹’««Û¯¡ÇeÖêuNP%ÖæÊŠœŠú^¸?<;9Á@Jéì<ä¢cÉüÂ’¯¥å-u°¶{Bi릴"ò•ËÂÃV[G¯}l,â¥Ñ=Ò«¿HœD®c+!È“ƒƒƒ¤ˆ±òƒµ»µAaA$žEÛ­X£6Ý®î»S7 ÆóÌ—L¤—»†ñI Ž/ŽÁº*W(KL˜}ËUv‡7þö€ò…¥mv’æJgkÞ,²ù<m:•h2Hÿ-¤¯¾\€U/ËÍ£9ŽJSQ ²*ïä„¥³Š)†1N,<ÄÚ†˜]ØÆ«O.Äó«l󿋏2•á7â§Äò†¡ ýqÎõal0Fj;Y¾bLÀa9q‚@W²)$h:»Œf4HQ¥R0>“̇G•jG9iw¹ÖKµÐÃv/Cn9Z®Ù«¶/ÌöÅ2FþaÙU?Ù½ÃbžÇBâêR zu3ÜBm™8ç2ÀòQM)—¤t¶t‡-“ߊ °Šëú)BÅgeRäï1wÌ€táùé©/tŒM¤†FÂON0VÙÙ9  ZI3EL#ô*¦_­Î‰Ö[ÈAò»cÔŽGÃêÚîOoß`ÈÎ~ÊÑRð\å -ÌÎouZè%qTèØ“{*šœCY5™í2…›{ü85†U:lÃÉÁÙä'…´ŸÔš=&çGÆ3þÔôìÆÆúþXhØÚêvvf…‚,ˆ+zàÈ-tàB^’fâSP#kKË<Îέ µZXX0íï­//ÉÅk âSx4À9ùÃ3ŒŒc·‚®8“ÊM.Î'ÖŽ¼:µ)æ·+t·Ë´ÕMú¦6ýˆsìU’Ø\]==>.ÞOŠ`‹Ó²¿³Eoœ.ãHsÇÐW¥íßT÷R^@©yäGÔ…-Ò—Å` ÙìÀyŒ¥Ì”£¬n`|mm¾Ars-•œûûÒ}yŠ•Á„2ò:ë”ÎòÁ§› ãKX…ÐJüÊ“…¹?qø2± Qtߌ-5èè|¸P˜ù.ÇÇËe+R9NsoðúëÆ’aœäwÔZ2вŠõAbu5r€¢Œ¦Ùj3Àèp`nìh”Ḝߔ’ÅŒeX¢­ê·º¢ÔÓ\Ñ+‚UåâÂúíªž[5ƒýöo@§Å@‡8Ù=v6£SKýŽD—5Ž¡<èÅ%º´ªO9QŸ|pød ´–‹Ò´¼6šçÁ…‘»Sm™â²ûÁœ YΉWχ’v_Zg¡6ù\¥m`Öu–B_10iT}¾èÔÊÒ ­úÞ³V€ÄÝkkÛ¥ÍfÄàÜxxF“&û¦ÊÐc -.máb··{ب¥P¼\ë©Ô Õ- –dIîïŠÒ9XŒƒaæE#*²(1AW’™ûp¸åKWèðC÷zýSÎñ)*þfæ×ž?†º`¹IŠ[¬ñÈ å:oI‹£Ï:1»°qüèD”¦³ÃìªÒg0´±±ŽÏÐG¢Zcíì÷lìžØÆÚŽË—À TÓãH§YÉ­/-E3•­ý°#ýC>ã€÷ t·¶»Nc†Qf½(aÓ¼÷LpïHÄé¸ÀòÑUþzH`,¡‡àÇ%mz§¾_ÕeÙÝØ°²‡‚·WBà,±¾´Ìó£½ýµåÕ3^|ñ\p]…ÒïßÀ"Eˆ)ë÷O›ßTõÞ®6Üi0=h±#ƒr%|¡™j}€ õËÒ`Nº+&4ïõra—ŠCªÁ p ýÑ<êôÜd¬„âŠÒj ‹ºñ/‘Á*„VbRTxw(:…—s|RÙ Xª «Ú«“)ÓùÔaU0žZf°âŠ:Ë-™³ ¥ÐÕz!'½À*ä& ºAªØ?"OëæÜAñ{I¿cQ7¿‡ŒšR"X/Á~Fž·‚²4Bb­hµ±¾»¿{¸½½¿»CìmnlSòs# 9œü0Z{ý&KA.Ð]¢' üá¬Æ8VÌV|¯èê“'ûäKS@ªÌç¡Õ€¢B 7ÊÕÜŠ°ŒG‘?Â2±ü ”nœ­5Í)åÅïcû…ÃäI`Ö/¤ e@g¤6Œãtð£Ü áðáÁ!ù¬¥å 쬆FB÷M®D>t»—N‡Í›ÈL/-/oQè ÀÊ|zn‡Cªå1£ª$u!Æ"Ü}ÖàúúÛ¤4¯k(Èú›×E¦[TdýT‘èÙØÜç=k«;ÔŸûƒ“PeÑ™†Grr¨™$úÞ¬¬lãeJê„1…Ž·jûU=.JygK×;Ii!`HîÝv<;·63·Fm#Þ¤m=Ù«ÿëŠÞo*ûþ\Ùs«Ú€Gñ?¿møSY‡«k{ýŽhu»«Rv?j¸!ƒU¨;o+¥• q™aÏ•ÃQa¥ú'—óýö5 í)P›~\¦ Î4‘Y• Euµq ÷vJ|Ü,•¤Ô8c1Ê:S,Þˆ+† åÅ«ßÃ݇`ÔHÓx£m "û1vÔÿz€½Tˆ®ÄõÐÈ(wlì±'\*²Í½Ì-9é¥åeQ¢-ù40OKº²Ý+Ü%Þ‡‰¼­©ü ´°Šë*€¥ Á\aÐWÍ}AçX >À;1=ì4Ú&(å¥ÅÞýÆÁÛ5ý]æ­þ{‡&î4ÑiáL^ÖÈ+B-¼"ÝÉÉôRK߸h7+)Á;Ü‘Ä+$º|0Ò±JU#cax{ÑÉ%XnŒX³ÚûÇB‰…µõ½¥¥ ³#¤éu¢©‚loîÅ’³¤ö„ (LØüüz³Þ'5xÖâJ*·Çi²0J>Åì¸ZÃ0-.­ ŠˆÎvWXÕ=R«±Ý®(i±¢Ü/mµóø€çÍÖûMžüáAûú» ƒ|qω»õýßÕ¿.×ÿáa¢´Ú¤ÚàHfŽ O¡¯ » çw¾€±HÂ"tà|~ûÿØ;ó·´²tßÿ¥÷§{ÏsŸs»ûԘʜç'PQP”QAAfÅÅyŽ1s%•¡ªºûTŸ¾Ÿ½WØA±¨t§*‰U>Y”ÍÞ{½ë»¾ï÷ý¾ÕÚ6­Õí›RiG¾¬ê¯jºÕhü²Rw½Ár©z€ã”Ò~³É ü¼¼÷ó[ mýV»gsmãÙ£‡¬"Ä^.÷ðXr¢Ì“$ïÒâúÂÂZ<µ\ßãéè÷Ö 6Ñ(¤ÜJ¸?gKva²ƒ÷ CT½1ÞÒyB¾£˜÷œ2X…ÂN‹`­„Ôº±?z q,÷–sÛ2ÕýH` ‚ J!fØtQ‹úàø>í¶ð³¨h¾Ò`-×äS®ÔÜô½À*>æN›t5 ®9ýèÒl®è ï(uãàI#«BP5^'‘—!  ÔÔdb‰Ã†­‡ÈGV…ŽóÑýûƒC¡>Ûx,±½Ä'𽬸º»ø«{Ãôyv·öIöŠ„2¾Çÿ‘,e 3EôÃŽ¢Ü Îmní¿øö)giwçÐæN`bRßë_Ìn±¢-,miÌÄT"³\ÍBÈ(¦•5IC‘òŽ¬Ø•Á+¬2 ´+Õîÿ‹áÀ*°NoYûíÌj2÷ÈËÚ]èj뻜8¤—ÑÚO3ŠÚÞ|ñÄÂ-•õ,Iŧ1;[RMsï„üX2àQ†Ê@<­öúNÇðØ$Ü a¦¶¹¹GæŽH÷eäçµ²l ÔBÅ_ç€|6âžXÍ­±?ã£IgçôøÁCž‹l‰T–¾4•ø]i=¼³Ýெœï§®'ŒZ‚îr[ÊjÈtD»½¤ÿ¬Î ºØR^G–°ERRmð Ø'ñùnóx(6Úóƒ]ªÕAü´èÜ ÷ptϵ»']þD(š±ºbÀ8‹3V­iéóŒOÎÓdžƒ!@³éùQŽY"§Àã· NŽÓó«XÕSÁ+ov ›»½EWgb¬B[|~KÀ,Ùo"ŒF›Q'˜1 ²Y3KUFè™ï­¬1e¾¥ú²¢ïÏ×Z†Gýô§ûƒ(±ØµÇ§¦Ýî@zföpwokg,Ò«]&$Jt¾œØó(r/­ÝQ`Vq Tñ§,åäì¼ÿ7lØ `ÈB¯’€®ŠÓ¦”³ÁŸ5‚„BÉ™Üß_}‡UÇ ·”ðXy°»µ?Ít}×Ì—jL×ð¾W»99Ô>‹Z6Ä>‡`¸¿{ŒÌ4öxî´aÃæE#!°¾R<ñ3XÁ¢R©bÏpbssWgŸ¦ÚÑéOp´§nXL/,ä…c‰E<¢±¢&—Bnh-«;…´QcŽ3ó”ÚÓ˜cí&1IyF”6\-2ö"£ÓâÓ/R„«ƒU@_&(ˆK¡¦Å/¯÷$ûÆ®5 ÝT9p=pø’< ß'ö‹2œz†}ÔCÉN!ÑÑþÝûG÷h`,y$¾|Nt „JŠåd"» é*Ûw(3„úî%ð`¬ojh›5À1–Óÿǯ~x.ùð‰›kÛˆ¢®Ô™ÔèÖ5v¤¯¿ý–úñåsW Em#$–w<…%cáfNNb"èyB¨â`øƒèå÷îünw}M¼¹øQ B¤iomN k¹ KŠ’ƒ%,ò2ÌR¹<¬©ÊËk¤‘¯~â‘Á+ü¯ìq/Ç_f0‹4è­ƒÏùñåwÛ$Qx|xxÿàÀdvØn˰o1“ G¦i3ž[L.:álâ­ç`‚ég¦pIMUZ »6©ªã·à*0iÙß(EX¼K9e`¡±ÄÚðYHdW×vˆEÊjÊ\ËÁþ!%5ÏWÕ—ëÌ(5Ù+gY.ë>¥Ž˜nJ¹%Ÿò>NîÅr1-é.œ) Ÿ(Е4·¼U>­ÄÜ?茳“ÄWöÇçÏœ"^} ³[9Â&ÑËtÜf-¦‹ña–2ƒÕew›)J ‚"ñEPTáÁîêY’öwF¼Ó´Û"_üJZÅžaFà„~nÎà%Y©Ùõƒ½#äÈ ÙÍ.kŒÀ¢³ã:6­±&ÈÑWuŽ©‡¤Xq°.Ö‹I^ˆ®8?¨¯Zd{Ã7MôÄrŽð¼O‚Yb@›×ˉ­í˜ÁÑ[Æýá4ꨉØüþÞÙ1~©²ÛºhlÎl Çüñxb97ôK™ß"Ex—;û ´Èh@6m}BÚ8NXÁ•»ß>EÔc°K€ª!‚±ºMú„ìlÐè¬_neSo “;»®rÌdVZIþ“ùÊ|Y?¬fí(@ÿ%ÏöZX4 VàˆR Ã>X§:Õ(O„tƒ­¤g|†¸¡¤úª´‚Dd|‚y’U¹äÁ)?NùÈì+ 2ñ×­µmÆôLæøðèwoÅWãRæ²Ë»››+KYM—¡ºÝZ£ê¿Ó4ÀÝ‹* mŸÙ9m›m1{€õ3¶IïÚ@H·Ä4?÷ñª0ÏžGW@"¤¢iÄÝ©ehrvwʯWKÙ Ê¿¨è»Ù2L$©•Kj$bXU§ÎÂ'L”[¾w/ÂSê‹!¢º'p§}¤I‘ÄCrÈmW²œƒ1Ž„%|È“ˆ¥VâÉTÜ矔¶ò feÈ/öwÑæ²ƒÅ´™, Ö©0Xúþ—.}i€%>QÜ*HMÙ䬲ËkqN­­ï°™g€¥Ìæþ!÷ @PÅþ›bŠ®ÆI*´r«Û™….3C€ ƒÆöNd°¡FʺýÛ‹ç4\ÿÇ÷/~zým…b©UnûJ–•¸Xë,€¥f;È}™ŸêU¼(¦:¡‡6R6ßøOŒ>é‘WDƒš²¶Ñ›*û¥ZcE¹*=êìoªú)ÐCH‰¥ÁOGûGäéÿûûW¤uèõ‘ž[qú§o5™[zàž&í¨ÁnêqÝh¶Ýépò7Ù\Þh½Ñꢬ„aÃ:‡ðˆ² >®BãD Fv’2ÆŠ¶aš„ÐZ‹¸É ¯ïvEb ”.R.ôRnÌŒCUµÚÁSÖ2™œ#"Ý„4žš\R7×w ŠI(¼d2ä'èv×Öà·x…-$âù¿$@öZb|L’´Û<ÀÞWÒ ,‘©)ÕH›‘` ¬— [Hí+¾,o†¥`(.8 -%‡Û Ê“ï òQÝk[^Êq´¿ŒUúøáD“ÉÙGÇÇ~_ÖÀÐøÕ+·G£ÖÓ “ªÓÛŒ‘ó›"|÷Ŧu€U:9( Ü•,aìöqé÷ï2[ÖJXœàï??¿Z«±_k´±BlVå<®Š ¾ P%pUëIA'ŸX|òK¬"m)¼È£ñ7âJѵ%©€a$áÌŽùGw!®>©),ŽDIBëêÊ øËUÈFû¯Óä¾u˜Ížìa›(,£.ïNÊ2JünIK€oq{D‘^Ünu’÷˜_\â !øª¶^'?úÃ3ø&ªû<ê~wjne<–鵯ԛ¯6 Ã{qÑå,møŽÚKƦÛÁ“²`ùØcì,f7¡ÙºžñJÍÀºX¥–¸ƒßLõ;­ŽzýD­lïÙ¤oA¸jŠôÚ&±)GÈá0O— •–qøp£rG(Le¯ö†ì‘ȈÖÉ¢Q¶A‡6C †)w6ƒzœÙz¤Ã@’í‚Úàé4ú§¦Ó$h]Ȱ*;†oµ÷¹&ãók«›ëkÛ¡‰™¦®á‰Ø9ÍCÙqtgk—úĽ݃ÉHœçL¤Í­=™ZäÝ¿{Ìÿ"™ä»8‰/kÌR){hE€EdyŒUÜÏŸa£U¶4«Å+E£à'kʈ×`PqŠ8ùWktZ½9—]! þ 7V«˜2Ü¿{—GÌôqÕ‡¢“åt÷öüãS£îˆÑjÕ{ЫúEâøï `•† ½ŽÙn{ZógzЕ†Y\t¹°h‚'gnàN+o”~‘ÆxcÑc]¯øêF£Ñ4|ÿ.U“"LŸKt´‚º»··¿½½‡fU8`!f¿··÷øÞÑ\:‹Å·Ö×v÷–²Ûëë‡;Û-Ý6LÔXz¹"…÷~÷«ÍšêwΰEÓç˜Á*®”ž@Á¦®JãJ¤ŸÈ١솙]É[©,_Vö‹Xuêdõ:MUY•P@•B„(âƒx§øôbNeë·¬îOÇüi>KÊ ÈÆZòñK LöÁ[t¶À‡½o(ª6øµf>8¸-Üüt •PÖ"™ˆÆfÕ:ûŸ.7þŸ¯êlÎÈÁþÑÞÞшo¦®÷`>hÃè »Î°U„´ °” 7 MqO3÷ SN~À*ºh¬)š0Ò±[FÔ,¬/åH‡‡®7Ut¸êº=mýnj›Å…5+lîaá€ÿ&_,© Šc-)†…´p¢ÁºH^¬R"w³tS ÅhYë0ZQQÿüáÕ__Ø×èl±ôüÂ*IçNƒ³C7¢ôP†Iñ¢Âß?ÀbH©®©ß_ŠPYó=='ÉÝ”wz‘ÈøÂiÔJBóЭ*ZmôìÄ•èš'ìX}Õ™¶«§hN–Õ:]@¼_Eœ Þë•j·lýúvˆ‡düùõFi ¨—Ù¦9øÖÁ( k§%Ú,u7вº“»Ä[äj£M3àE±š[Ùà>ÿDf"T1a³+O þÙMõ^mûW[kÚLîñ¥ìÚìÜŠÖdS‡°ØÞò½¤žâ|SU^H*ðVq@¥žZAœbÈOã(­ Z¶`‚6zÚØ¼ípJqÃi̛ݳLÐÄšæ›{ìÌo´:Ë:\¬&ž£IFW- »©X‘I¾ùŒ(` ê”Å{xU„í–‹* €U°ª;XoXw>+KnÙ!Wìè7ö3ö1²üè1ýïÉuc³53·Úm‰Üjs’Cä–F\¡Ó –B¿%g ³÷GD)?žxDnUÞé#hbúR­eñ& )+¿nãÖW›&1äEüŽ}°f^„ssóëÁhF?«G¼%'+©pŒÄ¨¤›Š _<£†qaqc*™›_K¤VF|©Jõˆä5ÅèʼnFBø^·fÐßi ð—+TF€”ðö„ú’ ß-H|àÆx€u»•_t–kÜô2«Òj ¦"W˜§²:,ÎXéµOˆØ3ÿe ûFÃÀeökžq”I/D <Ÿèêñýû€*ì<¸ßôPHSyB•5ýš&§æ&&gy´E›zœ7›íô à (Îæùuñ-ø»Xqu¾5X¥é«|¿ )nŒ:ƒ³»lÿ¸=Äóä!¦—»ÞP²¼ ÆzÔªÉÊ*&f!´*ÔJ2Îܺ@’¹ F; Wä¡0^…‹=¡ìmõüHV‘Æøð‘‘$.qOŠºN©é ÕôøÁd½RàN»ÔMùVÛè •½ÍàÇnFkô¬,¯\€¥DûäZï@8ÑÔeSëFâÉEôfG¨®mà}Þ@Ý@}çÆÑì®+¥ô…·¢¬ÇÊ.©+R“z:;åÑ­‚´ÞfHoÌÖë9Ô‹Þ—Bua­žÏÓÜ»*[&`y J¸ÊæNõÚß:Ðr ÔËÕá·†=Ó1˜OÂ:–pÐ^ÐÅv‘ÏÜ•âä^Ø)œå!ãª|fn€¥¾°i¸X?°<àQ<È :! ›P†¹~~OÃxZ¼@ZÛ[û¸±7êüæ³ä”ŸXAwˆtù9Ãàv—rÛmôDë3©†¼³Ñdn2•Ke6‚“ÙNk\ù¢¸FŒ@W®`kfö¬´b¥_ Â)ìÝ©YYÝn5Q#Þn LÌ ÓùÃå¸`Aìþöò»äÌ CááywÁαa÷4„%$ha6CE®É&U•z´×ÂÑ>:µ@íkÔ£®` ÓyÚPPŸlKŒfñ2f÷#:´pØÊê^ˆ±Þ`•ÆXR(EU’æ@í¼T¡U©ȯ}ÿÝwÊe:/•ÝŸ?~$QV’˜ý჻÷(䛈ÆÒ(l€YÂ$Ëú?ÛúÜáM’zV ¸…ضˆ¾úk°Ä“s­Á*-l¯kuÁþáèâÒ&qaáH졯fÒKM=’¦“•F°ËùùX ±:K7Í8Å‚°ŠÔÇÈ|¦ju‘ú>Ò‹1%·x*±Ø54«ÍtÙgYkeG ‰_᤻H>ìz}„¾È†Ñ$ë‡<3ÃÞ“3n÷&G}ɉ©…ðÔB 2G-=77wî}¬¡R"ÀÌçÍÍe­ŽÐ_ntüÇåÖ:µu6³²¶²¾4?¿¸°ŒñÃ_ZÞ€Dc©ú|!ËXÒ=>ç Í9|i“+ÑmŽªæIíÐ4Á­°T“GCrÁ.OZÜ3ÑÄòLfml<Ó¬”uà JóÔꥬ\X‘a(óškA{éŽb'wcËÚLS\t¥Œ@qbkÕ?<ÉýCla¾±ÁâµØndƒšï˜nŽçkŒ’mÅÖ¾ ù¿¸ X˜4F£ëç– i§ƒC¢’“¦®•,áËw›áBüH¯âŸ¾¹µ±[ÑFhóàŒGÎNôx.Ìý;ñDêgÒ‡êˇ~Ðæšb' ú‘[>öÍ58 ¢ý…$lïtÑø,E%[+ñÑì´"±YPEy»ór½…˜¢EUœAwãwZßåB7&'GÚéÌâÁˆß?{Æ#Áe<:[Û:ØÐíñ%"~öøÉß^|>Cç®5è–úÏ¿¾¦5Tßñá1Æt‡÷––w,c3œÃFá;Z¸á½£hIx“=çqº0€½]¯3ÛœGû狾<Á]Ý; Éîɯ…®þ)Beœ«Xz5Ý’çhowŒQìòMïî<¼wLܸ+×Üe—7¨J¾ÖlSЕh—¤à¡bh…ÞüLJ˜+BR¿CºÙìNÏÌo†§³ÝCÓMJo¢7R!ݺ­SZÛ †F°\,ðâðŽt´Â)ÑÒÑÁ=JjˆñäT/ÂÂ`¨žêý¬b{ßjéó7õúZô>½uÜ<ux§Ã±¹!÷4¹µè[èNÆcV®êO$Ñ £ž¡#-ƒf‹G©ÓÆE/ €uÆ€Øä6j—‘8¥€-È'£#‚Ó:7ziš©üøš7äqG`æ³ÙuงÝëî`Šø˜˜ ΪúwÔcL*RÝáxv4˜A—PIé¬Ê1¿¸Ž› ïs¹­ÕÜF#ÜôlþD€£Ó›Ë¬ÒðV‹ó³ >[Ù¥5¦.S”Í®Q«ØÒëqÇj:G?+ïckÈ»1ø­¿¿”\ãùR$•pçºÑl—zNK¦8cñØ2åK±-‹OghçL' “ml}mK˜ÑŸ:m œjèúïW/1g"ÄyKبò¡£ñšÞ ¯ì·ÎÌUñü=£˜ÄbBùQ‹)kÛȵš•fpo[J˜ž ú ºžä œäý=Žœ²pâû°+R®2Þhè°ü‘dt*ŽÎê­!Ѩ}žŒ®&”^ì”q°ÎK¼*N éŒEKŸ¬ÃD ˆµâ™;äJ¼?‘™÷HH¡:,¥mS«°kifmOˆœ‘Î6i9}‰AÇD¯EŠKej/Åf¹%p¿}:2½Lë…úþ˜Ê(1X²@›Aá3«¸w>»3˜+k£È†fäö§<û8<èa»k0Ì=!Q¶XÑ„Q_Á ÀR̙ᱥqá݃{PYs™µ…Åud¤GÍθ $ &i,˜ÚßÝ/ÜÇ2 Ñ'‹®³¢È7qç®V‡¥TcƒüeMœ"A«µ¾†Þ{ì/ªŒ_ך¯¢Á•½R1ý!#‰6—òJeS¼,oÜ ´)DÅ.ÿçˆÁâ8ñ `N è<¬°ä²X å@â䕎î±—ÞB¡ŒÉe7Ô:‡FïZa®ñ(“PR¯±YF' pÅ{{‡°ÄÆÑøµ¦aì–—73‹°G_ÕšC‘Y@b.½’¹+ßxR ”ÝðÉÉæ°¹“?>{|°³ŸY´GÉAo°ÿ†7laiŒCKæñHªF=ò_wzé-$b캨|ÁV~|"šÉê-Á[-ºb *UøiLFìP„el˜ê4¶ÿ¼Ù53·œ]XàGâ ÈïTbSE[Ã:µ­Ëà D’:³·Am5Xý±x†r6|Åßl…Ÿcf*I E±Ql½ý>‹_?Uf…Ã& B¾¦ÝÔkþúFSvi…Ks.g›-2GËÀÉ_Y^›˜Lo­o““í4¸œÞ©'÷¥ÂÚŠƒ¹>„ƒ.6/p#+4¾ë|¬b×+ JM›;-»|«¼]†©ekÑ:04ªèJ.¡/®J7W€÷’ú’aì§«é"»5‘L‘uâ0¹¶¾;3·ÞmdæƒZÉ ‚ñÔŠor©Aèà?àæ»C·ÛÝÕêa:œŽgnHBO'ÝîØy~²D2>ø[;Ì8¢«HV2 Ouæá U½lXx~ê¿JÌkþŽØÓ:–Ä(B *Î-« 6xrŽÒ|ÞX )’sC2uœ¶3M®Þ ºHe—W½Ö…u{,¹lvÆt¶H·‰ª)0qÝÚ•ó •£ªv*” OªÀh@•¤¨!ÎvX?¬wöwUÞóAV¡ñ‰$¸¶¾=Ê3ß|4X’ƒ *îÔ(µý4€#-xø§ï_g2Ë7ëõvWh%$ä§fÂÆú6ÅÒà©ßŸ¼Å”x)KHkÙ\“°Á¤Õ |T:w[¯KRªæ-˜™Õ««›,Îp\}ÃòÓØ09";[¤ä`±ô ‚ªp¯Cš0Gçæ›M–ª6Ë#˜ìä¾·³w©Úp§ÅF"©¬Ý!»9{*!ÿ{<¾Îg•¦ÔP#Wk  ¥Å¹þ¬ØñO,|v»ëJMߥ*Ýåê>‡{òѽcƒ>اç×ôÃSõ.Y"â—€YïÃ`ªÝ‰#„ΉκÖþ–ýBfAâó”¾°Ÿ0Æ¢xkñüÙcbñ},j‰ÅÛ›»&{ðNó@(š&ãÉ•ZÉnôÛp¸YS ­ÈŠÑÕÀë£ÿû1ãUqå qZv3 “¦©ì°o¬ïÞ0Ó% /àHâ4êEcÐèªÄÜI²v"Beîо¢Ç%j!Ê$: I à Ï5ÈêRzKTuû=á9Šc($¥Èqb"¸¿wä §ÿ|»·¬}”hk~­Q’üôý+oˆ¢Op&°D=f :Š1IÁÂàW`,ƿђAêQÆcÉ÷¾ÎzÄèK “Ö™¦yäŠËJóŸ…}/„‘Êö†3†&渚üq‚6††9ÇwަRóÓ©E:áIRåïïN§¿¢ÓO…{ƒl÷%*™”ó§_E(ïÀè çÅß`kè€VX“ñXÂF¥è/|ª«KX<ÛÉL ƒìç?s—ƒ~gxš7h¬ÿûRKS×Z¨âÖÂ<'¿Sø:»š®Ã9#QB݉¢üêÈW/L#‘?ÝЀÆh̬üôLíˆÝ‰¨=¬£ßsûh›n„Œ:J“˜'µ™’,ŒŽc×ÍŸ—ës«[ÐZ¤õfÿµz3Y$v¥ I¾&Çù¶~ÿJn‹XY¸£&ÅNè4œ¡o:‘9›îÞ;Ô Ž5w¯­má¼74I¦–H&rr¾}üH‰Â4áÌUh¼„]¥J¹¸ØXŒwg°JmÁß[½Q« lhhíëê<ÜÝzÿøp{‡mâ§Œ±8°­ÕUð“Øì* PY;›» ­\nÓâÀ@Ò8êC"ê,A (\Q¼ñõO» €%–Úò ­ Kx|”!#ŸÖ‰“ƒ£ ìJ“Ã82ÛQxC3W·•µ8á é+ŸXöÚ­ïÎ]Õ%§e|%a»>‚ýÊàhìTÒJ0glóBÑLðIîñKï™bƒGa>äÜäÖæþ½Ã»ó™EºAPõ¬³†/Õ¿©î#rv8süOmê‘…(u”QI®e³T(¿øP¼8èç!×ýÑcξ°üXè3+Æ™«Äßÿ¸­'4y«¬ÍÎzŸYþöÑã_>0ÙŠçØËîšøº\ûYYi$|@S¿wÛ²ðè&Mà§o_ak˜™_¹R£×›<¬ Šé#|п„±;+(xë–j˜BÂÛMóÈ„ÈHòæBj V£¡ G+óýs™eZA¹¢WëR“µK¢Äd¿xbb…Ú­µ„öEUÆ÷²ëz]ßTr!·¸t¸{@5eñy dÉ<ìg'z –/05ŸY¾»ø"ŸZGf—Ö'b™ååíD:‡šYaÁW¸õ)Òf¥AW¿À’Ì ™ÿt~¨Võ…‚ÑÜÒ2æö „DòôSƒYJº!·´´¸K$ç¹aDk9²‹#ç+ЪÈ✨ët”·ÕÊê+Ñ£CîgÂ( l€¥Ls¦’ºHªR¼‹-/ø(+Ÿ %f×—W¶aN9óQtv¹v€ ˜µ%iÔ¤ ¯Ú­ïjó+æ DHCoƒwŒ$gîòD&‘¥Ÿ!™BcÚÑ/õ¤Âá…­šÙ%ÕÜ„¢³(¸õC“c¡tc7-Vþp ÞeokcØê:ÛÈ.£÷/·»>»ÕUÛj„Y'‚_`ŒTè©@ëªó¹Pk5ífûØ%JMSÿDi9KëA•˜Ù$»€ž1ò&ì²Ñh÷×v:ææs¯_p#ñv76P˜ñ„ûû«‘ÉYÿxrqIÊ™Bï=g<‚VçÍOi'™jÞ$v"žÿ|çå¬ jsä¿Òð°ºÏÁ"Ÿ0…Û; Ly¥8ïù«¬Ò­âDþE”àVt8Ï8¸³z/0Þq›øá[Oˆ!2=¾±©JƒÍÁ°Íeû…°Q }Eå|Ñ‹¹\]§=;t7Ì“ò6`™ÄZ‰‹ædñs²òüXÝn¾VÛ»½½«4žãr«ô>Ž)!’ÃòŽ‘ZÌH;\í½fßÑá] X‡¤¡dî6J.Üi±^¡Ë¡ÊŠfbiišíÛ*DÐþA“¿&zT£pï4†öwöaËNÍd¾Ek]Õ5´•Ë!ä? DòñE(ßÅwg'ÄnõîÁ!˜@ÙUÓ°ýáÑýÕÕ½Y²-¥h‘E޽y ÏÏÀ¬40Wqrw|Pd:*­I”4ÓåZÛ7”]\âxÈüŽ8}Ý*€ ˆ^•ÕÇÉÕŠ¾ uX¹jPžUR¼ ãÃR‹š*ÉеÅq½ÑÊöûõI yOÐÕñÁK^éŽP|–5ô‡"3¤\ o9.«Åö„R•õzü‚>ý›U8NÓ­Ä›ú%Ãmž¾g´ÿã™ZE‘&j*Á©f6ÈgJ¢h‰"¡÷XÅm#\¥8º ÿ~ú«0“…ü‘g&ò)xK [¥wŠ%E.ïjÏfŇfj:Ýö1 4ÍW»Þ`I+Ÿ³¾üôúlª×u½ièF£…d\¯Éë %¹Aÿúò ƒÿI/Bäü+Óæ)ÕOM©@|ÒÁãÂùóJ~BGg³ÞäwÙg„'g» cè®®Õ ^©3W´Û¹æÄäY]ݪ×JFÃLá#Ï×Ä@Ù`½EW|ô©Câ³=ô_TécÏ‹ExQy"FáëÄÙ`8yh›X”ÜJm‘Ù…õéôªadºF‹„ö4ÌR[iö"=Q‚ƒyW€eŒ¡s/oµÎ¥ç_=}Œìcg}ãòöºæ®Ï¯ÖÍÌ,LÆçX?>µÀ͆Šž" Á……•@hjv6‹G…$†X_AWù“ü˜ªUËh”¶ƒÈ™€ %(¼ÿÞC Ö]f‹9ø)¬Ò¼;÷•äÆbJœ¤ü|V¥p(öû°ëu{™Ú=›Y_Ím§3¹ïª$¦²Òg—6¨ž©é’b…°Œ'êvyrê´«¯yÁâÃ~áå]Þ1Öe§Ý; Swõl~>G5ë×Õ“#Ê.K©Î¡ûÅÕ“c,Êî…še¡à ¹¥— {ž>x ZÐ÷ LÆ ,Rrçw°PL~Ë.eg…òõjí {l¡Ð…³¹Ùl ¦Ù`¯äv[ ¡[­Nº‰¨ú˜³“™MÍ­élYÂqÉ´=»¼^üºz Çèas^¸¯;ÜÝeÀä_„}vç÷žgÁZÉmªô^©ñšÙI@ô*€BŠT;˜b¢Dñ·Óouy¼¢+f }tö„o2™ÎM§×GƒóXv…ÄzaIh•P ÊD·Ò.y‡ÌÈ •Åeï »V3Äâ-:뉒7J¡_­8›Ò‘‹õs ÅUrñAüY]ýr®bXûÙ¥357â¤é J@ ÷.ö åmÃS‰yà ófˆ†Çõ;ò¦[­Ã”°2`ȯ՛;‡ê:,7êô݈7“@Æ¿2mŠ1Šbv‡¤‘¦4Â0Û—'°P!?"(áyy›s<‰Ã¤›M ÛG\×ö‰Éxfa!§ì‰€$Ý{}Õr®׮Yç…ÃG†u¸w$«æ%*N2AòüéÛ°;™œ'þò·8 ¹Šxhcm õzÿ±@N‹L¿°KN.VvúÄîGY\—]˜Y§×ëßÅXJÛ„ºèÜËúš;Í—«º.WußiìOBñH4…\ì“"±¸sX‡Ý“Z∠Çà9¡p}mÓ1I¥³„6Ö-‘FÕÇ^“®G ëý“ƒ½´gÚ, aÈòé1X¥'ûÛi.Î óåÿsw&nieÙÚïÿõ>ý|·owuU§’TeœçYA@˜T@FqFqžcbLbƪîêîûÝïwΖ¥bU>cîóì‡:…ΰ÷ÚïZë]ïRºNám‹  JöY¡7ÉI†_ÌFÆ)¾ Æ0ûÞ^r‹“Á¡AïJ}ZL¾Wðèàãì}ùüù€7Ž¢R9KN €xŠ´Ë·}¯Lcd)ÂGŻ٘I,¿ÉêTq `MNÍÔšþVС·Ž &">Æœìµ>®§Á|ë7÷›ëÛû°K3³)> ®D€kp¦õøJƒX\ÎþÎÎâÜÜÓ‰q ¿(°,4Ü[•=è) +DoÙGu=Ôi"@ˆ]ÅŒ³kŒM&ÉØŠH'ì‹–Py‹µÍà>z~ÀÇ€M)qÎJrÚ~¶?÷1ñ×ÌÉ9 „g(f¢e­ K3Z"åRÆh&x&VyˆŽ&¨MJPÒâùP&‡ûi”¹Nïd÷›ªì 6ÃóÉ ™–1¶¯^®¯ï´Z%1>öyVCކ/Ö$«eXéD#L9Òää€okûì#ríÅX4~¿BK…;7CÒlÂåñ–/RÁyð«ìs€‰¼Qfš]8éäªxA¿ç‚f§Àjl1¾_m)n0W«¬ß=l¾]¬‰JpêÅúÚ&dzD4ª»''yЇsÑáy­Rw·v"–N¯/¥×Ôz·cxŠ’cøû™æíì%’xKl ƒ ¹ À_›ëm‹ö8,üˆ˜=ÓÓ©[%Z¼£#¥ˆXÞ5åå©Êˆ} ™uÅž3”ûs¢Êè3Ó`ÞO@U?å­CN¯RÕÿÍCM¿3ÈüT¼)¦+§„C… ¡y&eS ?]­¦Óké4ùW‡¥rýa‘ô$êÉ}q~ž –°·—‰±èKÃ~„9êÛúvÖ× í*ÆVŒ“ôÜ—‡¨Èi0rÌ5—FÄòpEÍZòC|9†(O¢éÈE›¸B{Æ£é¥õÈPpv$”àÕ>4itĨ$£ë.\{¦4]éX†ÃE'ýêóws1”ôZ6ü¼©~B ¬FnµÆžî=Å1vwögçÖš ~ÊJ>À: â)ͽ…«ä.H»ºØ*{u«îQ¦·Ýàœ›곚4F8ŒGF‹«Ãè ŒÆ|þ¨Þ2XÝæÀr±—gzÅøÈ•º0Ù¨‹!,æ! *}cNò<Ð5{ˆÈ·1²³Â¢Å&ú±TÇ/÷„ жPc_˜+(ž?n²É¸ÊÅ;¼¯Ð˜¤ªÃvWzqØ+çãÇ3˜™Çñá eB_”XýZNÞ ¦­B´Œ“iFÞ.Ú Æ¢8RùT©ÜÆ~»¢‡X3þ*š!(¨ cñ,x% UÓá™™]ú¿ÿ€YD*âÙÝuŽ— l÷åTRü/ו—‹pÈøU167·Ñ»’R·¾¶Eû]_¸ Ùw°»\{Ì•²K‰îùEçXì©d qÊù6 ‰6ôÖj¬Ë;ð®=lù냖Zµ¥¦ÅŽN½ùêŠ4á.-,àzBc·ö—Öë†ýñTryO® nñ—ûê¢:S:µ*˜Ä-ð\‡ƒ³,ƒ¿7|UÕ>TÚ‚j JW'‚•Z)TY슓–ö£†^æX›%à.U9‚c ”£SJÒj6ÚÂ4o Qo42ëšpùgºü=1'^á Ûëéå¬ß³¸»…· •€ñPnUš ê,««Rɳlm05ïäØó|j½³Œæ6f·#w‚û¹‡D²ÉC3³‹ô6=W4Nа޿ þËýšƒ½Í5{<žÐ”"æ*à4,Qv÷5Û•s&щ19Äê`,ñŽBº½4Œ……§öÈ러ïp-¥Vö6×_Zñ£2N¡«ôÂÁÈßP$[¤ög¾IÌQl{s)#7jsâÃd«dÙ^ÂdÕņ(xØ¢;?À";Çg8n̰”õ¬ +þ$‚R1‹­¨¡·°ÞDX\Xp8½O¶¶?qJñî51­…ÄÂh ¶²˜NÎ/ìn¬îí.$æú¾V½£Le/k%Cä®ÐxÀR$¹ZÒ´ 5®¹¨ÙIô³Å5gŠNX‡sðl4 T)¦VjáD݈̓M—Ûú°Æ Q‰Z£Jã<ñš…±‚Œã œ`iÈC tqÚd á¼_Ôyí‘úoÕ{¨ºþX}ÒÊR\o¸YØúíýÆÿs³ÐüBšÛrщ Æ¢ü…íöÅkÚ«e!šrz2L dl®„ƒoWZff—ß³ZŽd¢ÐVü+rgj,hŸ®¬lÎ&Ò:³wbj–[2 Å %J÷h¡tÊB¶úƒãmVXØ*ËïH‰×ÅÔ2­~DS!@°¶²eq„K›Ñò±UÉXA ”DáÅ»‹dü~íèƒ*G»M·7¸²´ ¨B!ŒÆDO,ÛÕ1âé$ü Ò©;þ(±«ØØ´yÀûCAÓ£rus[Oq­îA¥þZAûr]}»ínEwAµFã-¥ž ¯ù³0Ü W&‚ÅÉœ‰B”U/lWæ )µïôÕêüXbQ-F?,ÉîÞhjaa ‡wbj:Ù¬uPý–ÚZ'Ësœ÷y% io`«øùõË@l‹Q¥=™14œvö8%L6kªÙ<ù‰âgz¹ÊP¾¼^±¿ËsÌnñD‡NÕGMv bQó¿°Ô9Õfc$6µ›\†h‚•Mè¹< 69ÞDÏŠVZk1äI aŽªÔÖ›%ÚE£á)À¿ªh@Ô'•HMûzS„\ AÑÆê* =%¢Fõvƒâ˜£ î/Ð=‰]]:NÑ\<²¹Ã(é°˱‰á­LÎó†Ì)í˜ø<Ôð̺Rdä÷9yžìÀ2ÿ³Ù÷b+ƒe¢tØ<äÞho1 ˆr5õ(k9`åú‚,ˆŸÅ*wI}Ïh ²·±~ôünô‡××êÓq®‚^IØã ÉqBYœKŸ¾7o¨õÝX]DÇÃá‰HdÒéÒ³¶\å¨PÛkÛí7;}f  ¡_6%Cp#nŠÕÙ` D• ªDR@èª ü1I¥¡ËkìÑ™Ü*m_™Êö¨Ñ¡îrCqJÌü‘9òeÜ5bT€nûXƒÞW¢‘ÐU‰Ôí’áæ•?‰ÓCÈŠ`ã(•§Äøô"­$ÈÚüë§÷ÿþé†ûߌŸ?üüæ$£ðá(ɹ(ÆRd_=}òlg{~aÝ䜠öAáá­hÄû¤´pj:%bÈÙ߆8ØÛ]^ZE’Fft¡"J”É0z€\w«­ßi(ÑÖµ¨º<(é· ¡_’-cusceƒVP&æ—8àOTðRAIEÞ7w*MèÝH ÊüKèPÈ¥¿üsz ‘•ð‡¦MýþÅ…ÅÉ鉻Jà‚áD“Úß–%d°Š­ˆàSJAS¿}请«FCë[ôDz!…Ð6Á…WÄE&õ€¡œ›MŒøÃz£½YcZ]ZZ[Z!ÞþËûw¼n­­ û"Z“³Nc­Q›Ñ¡À-Á:ˆÏŸ½ŠP¬–/ZE˜ËdÈŒTQ .N‘’€ÚþHwéµ~w¬¨ÉFÇÆ­õÄô,@x¾ÿxÿFȈðÜa ‰•¢´C‘çäÓ…ùeúûN'Ò­/•qi b¼2¥|G -1K…³‹µ‘8£=¹Zy*Ï Åe¾?‡+3¤U,»£¼*Rl­–01¹Ÿ^-¦7õ¶1²½)ctŽg|4§êzk¨UNJÃR KJ îàŽmonÕ÷\+èК½‚ ̇ót&X^\d/'ê#²iŒ¯‚n¥b»0Á¹ ñæÕ9O6VBkÏöö.¤CÏò¶àE–Ãå_éqávy7™™B0-Nä'˜ÆLN1¤M$OT1DúHÕfh0HX Elw`Îèˆ7u:ê\> "ê&^+Ûá{1ÿÙïD§ ö:¦ðÍÇðKAW¬¸³µFÿwœ¼Ÿ'n»1ýÓp‚q%âêúc÷tU\ß‹MàÄ0™r¹ÌŸ+¥Í´À•ƒ´ãÛÏY‡s>¼<üÇÛ#Ê÷Þ>'•Ón­éð–©¡–»@9€î wöÚ`––pnð\õz‘ #¼™[ÖG*TwÊ´*­£0äòFÙQRÉ4%<¬¥©‰é&­8­5½½²].™Y‰jæ–ÛÚ8¨F¼[eiÖn®,ÿòîí¿~z‡è\zquf:Y\ÛõÇ›õ{Üñý㶺¶~*Æ]#q‚(÷kÌýîHS§ãÏwUˆ”ÆÆfÑ›¹þ*Ëàˆ7ÌU?Û}2;·ØaäKšõ#˜~!HËÄâàSëÛEù•~¹ó>‡ovznse>&·=bu·/Ü9Þ!Qq¥œf1°wÙ'EêÆêúðHðQ¥îÇrír£TŒ“ɨ*Fá³h\)¡Ñ3r‚¢ÿq—l¸´>ÈR4¾ðŽ;‡b[›ÛD^™´àªŸ¤j€C¢È”°q³cðù %øô©ù$.þöÊR$<¶·¹1`w;œž¢ºnº J+–mt©DÝðËùÙî ð‹SÍfhåDª” 9ÍU® ÖT“)ÚÙ?ÞÞG1"xŸ`ðš)ÊCd@²³Æbµç^]4—^W„¤ó/ì@o_ƒ‡ Anoí±?9G¦ÚÌÁZí½Jq±XþTÒÐ|©Ï^L®œÇz~+W%—4ô|û@ã‰e¸˜Xo9M‘ÓZ57ŸW‚@¯eƒÈvA¯&^SŠå$'(ÞeÆŠ÷–[ªˆ5\(QÈCAЋP×{ù›;;/•sæþf#€‹D'îóSà$Þüåý˜½àH@ïLϤ+Zmx˜dlȺ\+ꤼ ¸–ÿ·a‰¯B”•麾¶‚`“ÁÇâ?¬ÉÆXYÉÆÙéþfË$ž À‰Lꃼ%Ò‚Ur4Hí*W;+[(ñOO͉åquÑKRÅ/3ddò‰Ov#ÑIC¯¯Q;ˆù(lè%†u¦Qj.97“ -/.·ëÌÆžMC”7ç/iÑ ‡0#¯RƒL‚>EDàX¶¶¤/߀‹Ará±y­5ШóT¨mw+·J;‹ëM…õÆo¨þt»ñvYûÔԂІ9QÃ,G#xØT\²ÐT¤ëqýñfMC»U£w˜|k›XØÃgÏØY‰‡ázÎϧÚRVˆÚþ˜Ê4ª1#ñäóý0“Œcù­ƒ½'>_x~v^orÞ.×%fim·ÈR¢B²`[}‡ý»mW_ŠÙØdº¹;PÖ*r…’„)ƒn–v×j D½>)3ˆ¼áød €E:µXîöÚj „Ç,Î胆þª6§ªk°Õà®oð Çš«Jö“ƒór…RïÂùEM— ˜Åi12ÏÄfŒ'ØîŸ³Ž7cY¤Qøôôv|Xm¼^ÌþÑAª”¨²±^ߨp`Œ‡þ¥ÐüYTŒ»\Ø|„Ï 3Ùn¶Þ©îaÞ…RÌ —¦¨4‰èˆ¸üÿ5K\Ë)tUƒÔšqÛÐø£zi}§7:—Xbš±Xˆ¦ˆî @¢éxœýc}y95;Ë]ÍÖǹI“ƒÝ]â²ØØ©Í@*ŒÀsJ&1Ó/ö÷“)\¸xåÏ` E:T]ªº²¨²† ^) y¥~ ?÷¹ðþÒü<:³Pƒh.ßF4 dÀn$Ó(•Çá>\˜KšúGjÚä KÀâ lŒÑÖçÁ•¶ûË;ð€ýe~湚‚€2œ¡Å ÝMúáGvJmhâY ,h¤)¡}x:™Z§"¸\#éôb`‚ÖèöR»SÞæ¶8c3‰ì’¾/ð˜8‡iÀ/V.íÔÒ“­—Ïö‰% ð2œªT|û¨ ­¸µ5•\âçºGƪ[m?”týùžª¨Þ¨5yBÑÊriVÝbº]ÜêÃñ;• ¥ÇÜ4L:(–»ýúªr°ØnDWÐ/ÞÚI+±xYìƒ{lp„¬xW=lg½8TU>ÌlßÙÜT¢_—0rUÓ¨Û}/Cp73äSbQT’ùÃ3¤bŒýtzå¢zÑ  õÇ¥ô†kdºÍ>õ?ÿü;T :¢\¤Òlî*¬\IsëíÆò‹™J1Ò(`ü•UþÄÌ;:xöæ3]Kþ‡MŒ ¯Ü@àÏžäåªÞ’SdlaôptÆœpy#V{CÜir7´Ü,l«o'q¾™a8‹áØ4ªÝè¾^ØŠÀÌ7÷Uß­®1¨â…*· Jf;>RÇ:{#ÃSÞà‚?šôE’Vo|œæ#»GGÔR*ÇPL¨¶ÐØ5bˆšl1«3FˆŽÑiöÝ©î}P?`´G}á¹É™%à¦Û?56™â”ˆ~á·€«:ítw8’ý™WÄÜôR#K±Kàžw‡É{½°­JmÙßÝ=ß@bêKËkÔÄ($-HÑ4¤àž}/®ë¾]¬&ïÏ'ÏñyC,pާp•;á@õø²‹1¯-/3-1 T H=³wv銧&a‘ß!Ç%ÄèÁp|ù¥Šx‰îõrpŽÎÞßÜÑ8 Ýr&j>)(jÙŠÌ:ųºÐ,\Y‚Ó$ »ú´v‹·Z^¼f)Nln÷äÜ¢Â? ƒ@30«Te³¹|ÏövEÁ`víÕXÙøwI–JãøåX¼2.?'Uí-H´ôÆNû÷…?w<¬ë´û@ý—»ÍºÓüŸwšÿrOu­ íFa'Œ¥µ §'âŠÀâ·»CðPþD°´FÝK2‹Æœ·+MdnUo–t•É„êA"Of¤ÿoЂxgT¡#AÙØ9p«L÷_w[þëžúq1š‚Э˜ ¥sv3™˜ßÝÚÂb™Á_Ü*®º†tž{•&bNKéS;ÍÄÄ|¥Š ‚Æ#"Žúi2É0VÉy 8ƒH±›ì‘‘Ñi·o"ž~X¥Gì~yg¯3+KÙŸrKJ9+Št&'áÈ÷ÓÉÅš6DKH!â'YÆÏŒÜžê4’ÂöQ¦þ ¢³ BN-GÇ:³çÙÞœ˜Kžùüazbª]g›{-©®ÒoªQm°¹ü½½¬Áx³Hó}Aûõý½+ò°¢]’Òº¸Ù(70fñçÍÿMK5¾R÷Ƶ’„J‡n€Ëê ·êñF–—ÖÖW·Î“» 6A[VÖ™ l=ûÍEBBNqˆ§f¡iNTu€“Žûp+²¼bx©/1Û#^A(a{8"†ê $hÑ£hâC !vu¯¶¯¥{$›K-®‘¯þô©ÜÇýÅòÒ†Ç7AÉdW_€bah%‚ÕKîŒþN>+Þ‡z59µÀ÷SГg’?ßß'‹ŠýTXTFFÇñÖp¼sÿ7).¬ï!ÛŽ÷˜-,ɡĵ²3½(‰ä.vÞ$½EpòЕMŠmåË,Rfd*•\ª²©åIŸ]HúËÌåûÅZ¸tÅ#—=vä×=y%›”Æï?1ÖK,>™2;¢tËyÔ<ÌÂçR%2†Y¡¬ÓH xL4 \Ž`°äâ”5÷þvàË<Çàñ«X°"®H×^Nƒnó·ŠÛ¿{Ôzí±÷±ãk× ¥WØ£ð~TzwyKïß ÚQê{Pm¨V[»,Þ‘ÀøÄäÜ{9=$JC±ÇðØP`Â8„?N‹–ˆ÷êúïÔö>hxX׫ÒümNkšŸ[Ï‘sDé`my\ÕÚíJ$Ò¤çpvsç"&¾3›{‹"FŸ3ˆVêå&” ýáio÷w5•:qKÑyö¼±Ãñc¥…Ò}ÂW+:5Ý£Õr®Xå!wó‹ÿþÍ¿?¼GLˆºÅ‰©yrе­}j ´ó® :DqHX@u\N¥ô½#]}¡º.âvƒðú«„Ñ90ë,Á¤lª{”ö°ÉY§2YhÖ3:%zl#èÈ#›¶»LtÅ”²'ÏŸÝ-lB;´Mo¯U–·{¿ùFQÇb=²d@XQ£*C+¯€VÕ™¶-¢t…,-Çg¢«üµ«°r› j¬Ñfã(•%Õí$¦]Fû#ô5§6^¬’lÍã4 ò2‰•<Üìd0Üñ:¶eÇC|æ‚ê3D%Ì4Ÿ\ Dæk:GŠTä|„¦C¨(êôÝ­³ííì„>ìøð|Fó ÑÑEj7a`Ü' •'0µ¾º Ø$œ t8ÿý=R¢à­Ý©­o6xâ ;À1µÌù ¬¨Aã'”lµ²(Îôˆè¯Õ¬süX®¿U¦ÿ±¤=û”­x}ÑI™~z¦øß™çξ~¡Uö¶ò¥#Xr±Åg (kAh¸ãH¹$å}ièŠAj˜8:¯œC„â|ÊŠû‚Šb„¢©£ZÎ;:Ûb´4@çDÏl¤¥3pz)ãX"¹ó9Aþe=SÊ{·ÊÐÔÞ ÆÑ^kì+Xóóø¯WdY¢ÀI 9»'Úiòh nˆSmÙì±Þ±±ñùíÍÅð;þù¾u‚tŸPJoÄÌ“ÆÆñŠO<6‘¤ùâ«fW”ÜÖôìÒôÌR(–°8C¿è ܪwÒŸGòHÒ»ØxBrj3_˜Ç‰nwl|îa‰xIMk?bW˜o¼Ìl€¥P¶¬2Ž ½X!÷íÏT61¡_â§–ˆ«(ºóÕw:lž¨ÍAyüFA=¤ßŸƒfpgàã€pñÆÊõ}`-´Ð¨Ô­î¾W7@—ÐL­G¦°"Xr¾àÐÇVn(üB½w8G"¡èäôõžÐ¸Í9:3“<ºÌVbr-L(4ÖÒÑw¯B÷c™þz‰Ž’jQ‰TI-/j7k\%’° õ’ø‡¢!ÞlQÖÅZÍgwy¿ú,yÈJžšwQç¥j˜îÝ:Ë0en¢ À›OèÑÄ_EH@ä ~uû!ÜEbñèâšÝJu0Ë™6—©Å>ÏDUçHF/ÑOÖò")?XàÄÞÿí±…¨T‡ÂÓ‡[Iõ‰?œØXÛæÒ@`¹þú[ù<ù•ÏâXò ¬¸ÄÔ”²ÃåXA„»VÓ»Ò€@ñýÊîl O$›A;:›¢5êÁI‘9n>Q†ò[W6EøÅ#XXBHߟW‹ó@ø< Ä¡TöÒ”½ð^ÈѰ8ÎSžÉñ—¥ß‰¤!F AK=ÌÎÇtÿÇ^l@™ÁÍ– X`…2ÚØ&1åXö[e†{eî¡ ‹‡‹Ïί1®2ÀN§‚ô¿ìsÕˆrÕÊ{ÈÏ ó½ô`ÿY¼£ÃçRÃË#q{_„c³z«–R<>‹µ=§¸L°ž_qè8t°À?é¾GÒ }Ž- bòŸ …§®=nƒJ‚àS«Ø^J®L©ûÕÆÅÃþqþ-®§èE˜ÃØ*/šô#rî#(Ty¯3qþÿççwx“Õ&wI“ÝÛ•æ;pÅ*ºo–èjÕ½?G;Âj‡9ÇUd·Öâ¦Q€"() ÂuÌu0Çqv¼ûÆ[ò©,¡2Õ $XúéÔ41>C•U0^Ó«ÃË›!Ü·'@¦òF‘öé?)R¡mH•èË$7eòeõ-M¢Ä’þX’À¢"”Éeæc'GüBR€°/°”âÁã«nâöÆ'ëc‡Ké•­]xµoøž b,úö‹® ¢9@ІÊG¾§®a¤zîV[X·*ÌU­(ex¹—­ÄJ'\å3+*rãÜÊÉH9ûû í}Pà(×ÿù¾zs}‹{’[9:¥­ "fv57Zž;ð‹oóœÃæç“eÊÍOO‹¶E—‰`va{ ^Âùû:Ú%‰”Ôê¤ÏÊvºšúª:† Õž‚O ¥238kŠ,Þ=nÏ.•VIí_°¡4í¢#ÕÊî‡UÚ‚ªÎêFmI•:ŒýqòÝ[e_¿²‹|Ö6Å«òÀ=bRþ.âž0(ûBu BPñ‰9]Ï`uKw8zp D~£þ6¨QÓ geyíõ¯ –\Í¿£`×v¶v"±i0þêðùE½Øgÿ¼3ÿJ,Ëö|þ›½VÿÒÝëõ«~Y™•‘™1a8Ïâ Š3‚ˆ (8Ïó<‡F³aDTfV½×Uý¹çè}¤()¼Õkå¼ùç|÷Þßýý>G3Py!c¸…™¹ÿ0Z\¬•2ÑEÍqcc»ÒÒ“eè ¨eiÕ@æ°7°ý“lP¦V…‚±žÛ5ƺ½dr”Ro`ŒÖ_TU¡ÿN]ˆåăr»E<¼´²03KÄŒàopª§wŒFí¹PVD€e Ò¢\´&³ÝÝÞѳµ±ÅP‹áÌÑÁ!gt…DÓë†&W²°ß¢5ŒíV#yë‚}Éa3ÔΜ¡ ËU- ÅUÕ#Ó]™å.ÈpJ=1dä^ .¾2*ø·â[£¡z^øÐ0Ù…È+G_…™Þ?³çð$¿’= 耠ÕDŠô¥B÷>ys Eš|@$"­Ì¯Y KÛFa õýÿøõ3ˬ ˆË¥Þ?ýìñOÐÈ-wŠAvy+¢óè§€õIô¦–ØÒµ]½¼õFÑ ‰Çþ!›¹ âÕãé»bÁ|­h‰\ø[žS"¢ÕÕMC]ûÏ™5?dÔü9µºÉˆm“f5ƒVÆâ‰F½âîƒÿØnü±²—ÉnÁ³Ûõ ªf\TÉyTÚb<ñÊ;¡ã3O¼X·FÞR}²´ŠªÚi4¡W—„Vp|ypl3ŸÜË£Üq£DÈN¤ÜÕíЙÕ6­¼‹4uЦ1µØü(¯ñ^FíƒtýOI¹½þÈ"=ÞåÅe.M‚f°T?N9hû"+<*1Mµ*‡½.žÍg,v6µx3‹Msji‹CtokhUyksçÝ-È$L£¡à$Ù”ÈGż$¥ô‡!; âæÆ¼õ½Ñv ä?~ù„ÞÖÚ*Õ àÚââ:=Øäœ‚£³¨Éc§S î’Äø;·a)`– xh†*ªî_d—˜îlíd5ü˜fÐ×¶Ð/)PbNÂZ|pøJSºqa×I=eRM¯^<'ô¼2;Còöý«—Å5]!&ÇcGE á£K^I­³µóÍóZ5q°¦>ÈÿÂÉÎ×JCÀ¥ì/}éœQ§ÛŸZÒ¤ «**¸’©UA•Ê£TOM(t÷*XÖ<$odtdÆKŽAÆùëÆ@‘)ÀßË¡$~ŒÞì*IçBø›ü¶ X…Ä¥ø¿†¼ªñXáM R±¤@êìý½CnýÇ·±ßlêÄ`ìU‘h”ëëll—63b!ú!´U¶ÜRS§{pq‘Ò¬ðù»ù-úH¨äZéJI.nM.nãYH-%”µá!œ|HÇya‚ù4“?>öÀ}ÙJåœGìÊ‹ ´B_°ÑÖÕ×?6<2½¹¹ƒ©ëƒ¬ê‡¹õuôÖ,­ó8ǼƲŒÌH®¯®&E HÄlܤ†L.šDñ\y±´ŠL;×”Þ(~H˜;™v&êÝg/„éƒ]2°×|)Ð!u•½ŠæRYJ ‹¨$ ›Ã×oЀ–æƒÔ‘|@µÈæôŽÍ jØí ÞK¯A„þa®éç´ò¤´¢2Cm~iµ§ÛÏž”˜ë 9fÑÝÊ4:‹¤ɪƒ}¬÷ê-Oój¾{Z†±ñ½ô*’q)Ácu‡~N|”&&çŸäQȤŒu›$äñ‘æú xKgn¸&åµÎ䂺G9Õc£ãl*à!“£…­<ƒ#]çÀH‡”' !LªrS6´Ò¯CÒMÈ:¤èÚ›Ú‡žíÉ’?ì4°”­µ÷ü\ü/÷‹ÿô°Äìð`•ÍßX]ž,5Ú«€ƒIU =˜˜¬ã˜\)°»YZ˜Ç·„º8Fd€%c äicDa°õü·/NNY_¾BžœJ™uii•¥P^àSärû²´Mé ºêV*èŠÐç’åUv|«‹¡kƒñ–W7`uOõ¬*çU+e¾¤ó¼¢ô]Ó›[CàäË«QÚã&gÖ{ƒ‹izOic¿ÎÀ:O=–‹t{Ç8g°ûJJlÈâ ŸèprjÚ8“ç{çkÄþð â_à”òZ…!êÎÖ^š¦áOµ„©šúv÷ªQ<#$xpí$Ç#{ý@N4çÒ3‹ØAf©íQÁÏÅ¥ÍÁá"àB£ ¬¿½½¯vêÑX»£ޱ'SIÒðdÁúŒ$ŽŸÑ¤ÜÜâÍÕšÊjZrtMÿ;©YQìä9xµ½ 6„G› •¤·s` ^^'ÂÆ/5Üa²Ò$EÝøöÓ-J4|ýƒ2•çøŸ’ Œû嬧•PÖ‡+×óíͽ–ÎTK.‰îÂö ΓJ(¨©²9*Kº“²ßT¶7·ú›’^s#O ß>έÊ(ªÇ¸íÛÇ%ææŽñÑñƒ½·/O™ƒ‚0HAóFfgT4ØÍÍío“м½#µ–ˆÕX©["ÕáíŸÊÐ9žhš’5fˆD³kdUý%EAÄáþAÌ)}uù–#€»Ë™˜4Ì*Ù¨¨CůoM¶žÿõcþwOtyº¦†æî,­5¹Ðœ^jG†TÑ­“Ò>çµ9XÒê_X¤ø3 X†¾k`t‰êýLùÒ×7ÚÖ5°¾º½¶²‰Ý2-®åùå™éùlmÓw)†ÜÒúµ5²hÀ)605ž;Ü=´¶8˜BE¼ ÀŒœÁâØ$‹nÛ4*â½ýë+«œ#ë‹ïdêöìïmuùU¸)¯¶w( ÞÏ4&Y¥»Ì]©‚—”‚á’Á,Q³óñ€”«oVÛЃ°$®òÍcùB=¼ÜÒ¯Xw×ô¸üS˜øÚ»Æ‹jºMÎ``x…î“ç/¨œ+r²w‘¹Â½´ïd¨+Bqá¨*keåéYˆí±e¦%—ˆù³MÎ&r¯4°XVÃC[As|1?·VV×ñ}zMRž Û>Æ“üzôVƒÓ䢎ŽñŒ7·ø3K-²ëÿ’Q—£o]YÞ:` cc'`ø372y¸VHö:ÕXbâÂw(ž'Ç<å[3·€T"÷"Šsc³ÛóýýqãU75i•-ݲI="Óu‡ÏAþŠýô½´9€ñ§Ô°²²©Ñ›ËªíÜúë®ÿkÁI:x66÷Ûüs쀙`åC¼¨rµ¸úŽ÷xÚß 'jõ.ò-™Ã×Ï_ Á(‚›ËKLâ,y yHC XIèEÅ»ÚÞÜ—åÕ©°:^XX×Õ´\é¥Í ­IÖ䢿LíANß’ÊðZQßûEó“‘VìãõÉK´²†§í¾Ý=*¡’°Ï {‡’ƒô²ê&·`ËÂJ“kxl!Cךܥ*ûŠ-PXR¢¥Ñí²éì÷°’3µŽ­Í½K”â£êQÈÕæ¼ñjëðã “­µ ±ùSVÍ£¬J—;@#ŽÅý×§H?¤[ÑY•eJ‰ó",™\Á2,Й|^?µžî=±%Þ!l¡a†ù#¢' s‹Xa¦T>̬|ªiJ+kR슢•ŸÛÙ܉ÃÅù‚KÎR8¼&Q÷Ý“R¬uØ{àÛRæ@xóQFyKG/W¬o`™ì‡yæ|½#»¼*œ*™¾RÙW¡èФÉÑÜŽâí…g +ü|ðÑ£¨º¦_¹±-.,9Úý9zÇýÓã3­š ÇÎæ³™8clbÞêìÍ(µæÚD™R¶1‚ó¤ôÕ$w¶j5¾y’[W¬oàÎÒƒöW ‚ûá‘®XKÇ@ƒ½§ÐÐ\Xf¾—Z‘T`†Ñ Í_õäê…£«•8µDHA?§ºÇÒ9¹´¼M;èjai‹Ê2é„ ­ƒ™Ùæ¦~úê¢ `z…nþÛ7¨l´x&‹MÊ‘$BKXê- íTˆöU]t¤’måøc@Wd¼¨gÕX:ÿœ\ö0§úûTߟ”ÝO×yºû O±˜^™Áb÷"-¶%iš\Þ1.Ëñ¥·ÇE•%9Έ¼þqRÑÆWJ¶ýrT‡c%ÆØtÓSÌJØî69 …vÏj´6‚ÌyR'´ÊÝ$þƒÇJòk!ÝÞ­á·¼×¼(0´ü˜Yuòì¹urãsH¸ÑÌ«¦ÔèèùÑóéÙ•]J[Á±y[û  ›Ö4˜©¬¬òŽlÍP×fu¸'Ƨ /G~Š`]wü$ù%]1¶åƒMÖ½ôŠ{™uõv?»Å,3ë¬=\©³3‘Vd‹MRèÎWÚª]ó «Ã£³skþûw¹3³Ë"³á ŒYÚžÙÓtmÙ`BVhq0§º¯Í;ƒÐèøÌZ­}¨¤ÎgrÂ8ÙXßQèÞ)b²²ölw$UΪ£KM4þ?ÇÏØ_ñ8K)µãΆ£ÌE`¸‡+5ˆÇ^æ?¤Û»2¹}öñLh^CÈË*±ü˜Yû¸° s›dõQ® lP©hÙóÖ÷J•P±ÐpX`aúKaÔhõÕtqSîç[Úùºo)üA‰ñ_þŠ“Ìÿ¼_‚gí'?ø-9ÎÃÝg=ã ’RÈF2xF.ÐU6wM¬­ïž*¾è8{¼C‡Zø+PæÇ#eÛ¸ƒ# vîcÃWlZâHÖ(óÞÓ;>3»"49•cPË”×¥¯álI KÖØ²µfZÀ8}Ô1(®Ç¬ÇÃsÁþÝìô#Óú}jeZ)¡í” eHc‰èû#¸¹¶: ¡…¹,d”³Rॠ>ƒÙ™§Ïÿ†‚Iã§&‡Ñá)ÀËUÂxTLU€Åt’×DUÞ—}oçæç±+Že’' O=Ìk ¥”ZâH-uð»*z8žæUôõ¢«|þ.É—ºP×õ1À D80[ßÖ`ïKÒ8C»[v×HªŽ†AFËï* ÷,CC'Ï,¡ë6 8/ҴΧŎœr'>Ô C|>GߨRÚškì‚áNßRVy»¶iHV¾!ë®iè%¶Nј^]ð`Êåæ+?aS\_Ykwy¥£|Í™',ÀŠ<ùXY¸s¡‘}T‘(×÷·gèßÌÍ­È[B òç$>À ¯ÖÑÇçñþœa¼—Q½+v…Ðë€ÈçÌüZµm@SëWIîRšK`•}c_?¼?»€æÌBÔ¨wwöUK×H –*4z¨h921alP¤J]ô·3é“)»”ØéIÔ„J ÷" «T =ÀŠ8ÉÓìÜ ,¥ÖÎæÜà˘ÒWoè!­köÜ˨aO…ä(8ì>P O)9F¨d¨<àè*"Àò#^Å¥¶¹Ç‡Fægç!aËÛtS2à ¼\ÐT+öŽ[üÖ¥³æÊ ¶Å% 1ŽäN!w^ÑèñøF? cEÀ ²j@T¬˜¨Ý¦ Á[’£YEu8&mol^yßÏD¾‡ä7kÎuá/¸Öî|×”TØTR×½°¸NÛ m€¡¹ ‹WSíâŸ~›jttôQ>¾CìÂÆÈ‹°vŸ’E€/ËKï×üÎy9\.À¨Ø cáÉÄ¿ÜFˆT×톫˜Ž9‡ ÒR ÷vj–´Zÿâ©5”‡&mNo½µ“Þ^–nöôvÏÐÃÓS­‡©ëféæФ¦ž–€±½ƒÓëë»çûà‡÷c“‹P“3ËZzdµO)¶çVvj•…tø` mÃÑ!È«°Übkõö†»{*êZŠô–ÊZ›ß×ßäèüöqé¿>,Í(¨^_YOp€YÙ €O¡ZfDoã@®Ì–ø‹£½ßÃÓå¥M4)¾O3–×wA'ÏÁŸ…v` x EkçH£xþK³aD($?t}S³k’ø^x¥N,î‘Ä:xÆtìôŽtûGUIèkÖ®PrS\K§E«;˜mèÀø6/„Ãô{t†T"êUâHMMç~VýÇ÷o;ºƒZ£½¡Y‘ù”[Û?à™´ söÌ–ÔV9‰Iñ½ù©)àK"Þa×±Ç1'oþ–¥ÙYvÆD;IÛçú%gxë³s«#3c;â.h'²eJrdåàµvV´²Ih±Ò¬e#«möKCÿH+sòvv=ÐÕ¹¬  °x³jDHV@æÄØu¤g\†è…á#Hq³GþËÏEãc3g‰ÂÁŠ]ú…$*}ׄ¤2ùÿ`Ñ»?<傲øÑÞþû¨q„üû§3IùBÀ%AÖêƒtÔí*‘ÁšX‰p¨2´ÛvI2qEdÔNLó ÀŠVƒPê[‚,µˆÀ/Û}ú^iª:‰ÿ/…î,Mª7IÌÎcÂ.]ßλÐp®kö—›zªš|ueû+±œK7Ã{ÎÍãÌ`¬~Y+„>ÂþZ`$f§²h¨uº=½îîþÙé9n¡$á' ÀŠc1¥ŽoÅ¡»}–Ra¨‚Æ…ƒEÈÂö‚Ý—K‹÷~ví™õ$,sŸïN˜¿Â›¹‹®¨‡ÍN«óöM°ä­¯m¥5ÝÏm„#ŒTæc ÒM9.ôòŒn,YÀèÊf_°y&G§ÖjÞñj;ù/ÉQJ?|½p$T²¤OŠš©A×7{Npt¿à´q) ²·ú¾O*.«²Ïͯ ) ´âdi2wºÉÙ(A†ªz º õ¶…ô¡Ñ¨ñ¸Èfk  ¸¡ÊRGSÔƒ¾?‡ŠPÉ0Nó?)M¶1^ ®npL~¹´X^ ®On{ˆêÔ8ä’–Ç–’ê{Ç`pÎß?YRÕñS¶)¹¸…êd‚<Á¾'Q$cµ°Dàä•#ÆŽÕ² DW€]±~a:™±‰…‰ée„0¹míìf,QLrfâ4C#3ÅF'm¨€Ò6˜Jo„¡Õdua ÕþþÅöÚ:+>^ä5±!íŸ§à‚³ÊÑÁt KðAƈb\âX>ÏĮ̈ßRc•MQ¨zÆ×A™B0ª]7,‚®Àdô–&Úé²*=‡‡_ïZ©‚µ}(Ï(¥³²„J;a”1~g”u*Dƒ%æ ¦¶{08Õåx{‡çg|½ã_qW,Ëòæsém)ÕêÎNÏàPp¢¢Áe²÷ìllÿýÓGD·ÐŸL<¬ØC:²ÐÌ-UúKk{ Prº¶ À 4ßÛÞCOëèðiù«8tª"Ô¨‰BÖ«wRum‚Üç£" ºÒÔ sáМepÓÁçéD_õsš!r*: «=ú¦>½% q*ÏÓª`aYSÙ<àœ­o >ÕvdUxÎÑo|fíyŠ•Æâßá"2·°Î¥ôœ9îoo(ÄÜZœ––ÖŸ±c¹zF²ôíÿKdbULuúD&Nø(Êdâ«¶ÆEšqN¹‘ßXéàÝ{!.jiñehí@„BUOy y¦ôŽÉ/(gPÜ0Á{î”t{ä’2re&-^ÂŽ9˜µ×¡!ŽPVz™¢Ò”¥wÀ°—æÎrG”`VÃù½c°vD¡ë·ÁX*ºË–ö’šZ®Á]VïöøÇ¸¤@êϧ°—NU•¿Fä Tþ± Å3.išà]=Î7k+­££S;ë›òÓ¢¥°o‘½HXóÿÈVœÉC±G¿§§T¬B5 ïvÇ}:axä9 uN¨%‹Y_\„†˜P­R?Ø}…46CþüËÕ•LÆ|8-JdXY E³pÊ1¦f³ØtX')S°¯i­J ±¸q(]ïɪô¦ê=eõÝ#£sNW¯¾¾£L,Þ 4“ZÉ…õ}ézWiµóäpŸÕíÝÉóϘ•"å¹%>ÀbHq³¯´èЉ¶¾¶I ýˇ¡.Q|•"ËKkÖO•©ÕåéÞÛݪD' –Çû¢èNÆe 8š©mö¡ÛA厮4vhúÝ$>¹Ðsr_ZYGr±“’3¨ˆ,W_p~ljugûÐ70ÀâoÀå ¿7õ ’{ïS]{š¾S_ugrElêEõ>¼Y²E,ŸF:©@Écùû'h¼š™[9Ø=ö)zèd­·vt¿çÔ=Õ˜k¬¾áñyg×pqC/ø¯´ñœ3Äì•ɤlð`>Κl_Sµm)EVXy˜o6ÛbD?½ýßHr¡{A5}¥–/K-_`ÉÁ'Œ +18r.ìSMs–¡#Kß ŠK‘eDˆ+õbðš7¸GB Ó£÷LI®š·skÀkŽS ?_ÆsÞb°O†qócA·\|• Çœ/*Uv¯w‡;¢Žs:vôúÆ`²õÕ-}}'"¢)Z'ÐJ!•:“ ,s³‹Ø¸ò<ÆæIÌ>„æd„?‘YMä]hË:Kì¡ä•³&'…D!vIQl#‚lúêJP™¹y%TÒ‘e…1A0GB9›éÊ÷êÅ „ê'ôê¶nI}Sëød46V· "ÿrú„ó_>yû§é+`_ꚺŠDk;¤v=}ó¸Nhk J;C‰¨[iz7&,kç,UZ.6±…Æ6Lß^ ~±DÁ1œRâ,ù$“YwÞóúKË.péFÇg;»''癟/JÐ`AåH•æé ÊkÛWv·wöN£X;1,Y—„BnrxïgÕþ˜ez¢qHÏæAa«–úC²ä Òº€Yø R;ö¶¸ÇÿùÛ'X&s 5¶~°”òŠað@]ë¨Á$V«¶»úf{úçì]c•ÍZÿØ›Sµ.dÇ!fUZûÓËØæÝÙBb$Sß^eé1Zºä6Ô6u#I+ùÕ1c°XN‡Çs ?å6ik»Èm”™yÎåãËm`ÅžDQjâUÞâÆ~b_fYÛøø&Œ7ÜÔ }æV5zÛYõ`Pã¥ô•”ø¢K…5S *Ç„¡e*¯Ò#ÿ©®)äÞ’Mý ™šÒJÖšRTð ´0†òvŽÑ2UÑ2¥¿fð+þ/Í e¶IyõnyåÇŒTÕG¢=«¬E_ë°Ø:‚ÁqVÒ±ò¸#(·Ý´¬’pÅn,@ùL®ðĽ|€d¿Rü0AäÈá`1x‘àGûZXãE(,ÄßVhqv–-?¼ÁM69&Ô óÀtM ŽQŠööÈqrñ™!×íhñ´!g‹ßXZ‚t[mî(2X!¬,¯“Õ¾åDzùÒŽy¨·o,Ooo°ûúƒ3ó kû»‡­ÝJÔ !õºÚH¹@W$ È&D”˵0pFh-~(–î h^[ï!Èûøöõ»øÎìø,5ÙKt¢›2Vä¶2HNÁ‘éÌ€Ts·o„mƒ¦9xâ=þጢúF[×ÌÌÒê ÑÆ+P—ŠÍ¿j‹ñüè¸Ë;ŒìGr‘кR |"û­dàqµä<$[U…2gŸ£klx|9œ/¬îήR¦ï¥Påè™ÞÝ}Ö=0ŸYj:X¿þýÓ& süƒó#‹(†÷ ÍÑé¶±±×ê™È7zP„ÏVJZ.æQ¡•öW8å nW÷ˆ»'Ø?8qxpôëÙû¾à\A•‡DZ™É À*=ïÔ•¬Û¬ÅIù…V¸¢ÇÁT6vON-*?*ª®´`’4,bƾŸPÖWlÄsL€!ÀO’Ï$1–Ö2|‘ƒoü\Uá â’õǬ).8’¤¶îYΈ¿Œ9}¥²Ú90šO‹êº+êÛ­ö®©‰)è#Þ¼ŠÙxJ8”Ÿy{Ç@ê)¥Nî&¼ ‘Ÿëaª?*hZ˜]Œ]Á(s$ü¯°ØG ~¨熠7%€,“ºÓ?§Dxéç0„Ø8ðPJ4N›ä`‘8ž…5®U(?TMÝÀ’ÿš™xß•µÂ/Òù(kèN9:ß&î¥k›ÜU&WžÎü}²Öâð0½~ýxöY­FÛE=À‚èq{GÒJ¬÷9žP?A ¶”e)9ª0‹ß ŽÎ@.¬¬ŠnÊ|…µ}*qÄÓ7¼ð·³÷]}ÓÝšZïâÒæß?~P$‘T ÐÌ¿FO‹¾*Nü¯ïßN|3šê®];!è„A¾Ahæ¶<,°ÝÏnH.4#„íœA´©¤Þ§A])‘¶ƒç“ø6íx`qÖœ ‘”J‘‰ÏÐÚ&§ÐS)t‘î²£g±Ÿã½çžÓM¡ìû(VÌgA ê:ÿW½qj%¯åcâ’©k-0v4uŽ—Y†$ÀºUúJèˆÂg¯³tôôôºÝ¾ƒí÷/_ÞòÑcíî¦Ã6“‚´ÜV©§Ç¿³«½û„Ø{`¸«è*ñ]SÎH™‡Ž‹.·|‘ÎÏD*E6Þí5äÅö-„G—6/¥bËH´+;àM ¤rºiç'+꡼ }4)xÁç@„âL_ 2Ü—ÛWèð¤‚<ƒî4bÕËËë}ýãŸÞ½Ÿ˜Z ¡þÙ ±õî®Éæý·'卸þó·¿*”© |ÕË ©¹¹Ugç@‘±õ~®éAžÚqV… ÖmJ~ðX„&è ìþSk#ê×â†þ¿58¦äOTŒ²êŽ©C|ÂØ7ÒᕯTv +;&Ǧߜ,Ì)ü×™µo!±ñù#]iû;»tø«éÇÐ?‹À ¥¯2)™=pÞùä[ÙýŠ;Ê*ÿÛǘ¦•×¶k«[‰§±ü×Çåß%—ÿ”®‡tEìˆþŰd®›¦ªTs¡¨"ì2Ã)ðÁ€œ7L‘K0K5Ñm#È@¡Ö1äî›*1ùQÀÊлP+€e,ÏñjßC¡n:>µllò)îÑ…àÅÈeWSºá<8@¡|›aè$}Å·"y¶Raƒ/xîâ§ÚÆ:&É sÖ|šŒ1d¡]“*³µˆ ys™¨—ãTà­m}Ydµ÷û*J€;Æ¢~Ç2:ìÏ!TèÓ®ŽX„¸T€•m€¹9\i¿úÊ󓛊JIúäkMެQVÖx´6ë-Šõ¼÷pÿez9¹\vXüÜ_0dµôrW¾¶…°¨hn:ÐD­ ÆÓ˜Y¾ˆÊäŠ!©ä!–›%_÷Åë×¢S,ñK„4íí±ÄÝ%|×û~´…ó P›__PöâT\CÀ·„Äf¦ädy ƒdi$¦ »•¬ò™¤¸ÔÍ7ædÒèØœÁä*«ï(1¶åèÅ©¥—¼ ÜF1G@"߇',íš {Цqjz *s´Mf¼ =FŽ£»oÌhöä–;ä6Òî U2PIl€Á~9Ï2\¸ï‡‰-k„ž;¿Ò j˜ÐŒ€Yaƒ_I,BI–âõærû×(|nlQÞú,rŒ_ªd&c}ÊŸ#ÞîÀÐàðÁÎîékém§p¡þöùÓoggª¾HV¸b/øT–ªÍÍT‹–›u´›ÊŸ_.Ô[ÿü´â/iÕ?e×ÑÍäìZX ûx•ZEqX\gØ‚)ó“"[v…@W2Ý"Еԅ’?Qç#fI¤uitB † B×øÒõFö L¡Èê|ž{Rìx\Ô’¢ƒŒÜE$ËžH<ô‘Í-ýô^Àë2Úœ’±ÊT Xê\©o’笥“ !ø×<~ºcc…à§Oï hæBŠ<ýýUÅ5+·Ü ÉLÉÿ5^øÚK8XÐÕ9 y)ÂGl¸*¼DüÕÛ˜*ÃòÓ®+Y^—û=ûjˆ9CÃcU}i~aa~izrn ?¸º´"ã® ´ì‹«Ú©²€²&rC LÏ*È’–šXs˜u7ãHH\±Q±ÁÄ]1»TK.Fø^øIt°†¦©ø9Z ôî°/²š…Ö·ø'Tn‚ ¡ù6â@¶vtdïÞ]ñ®ö$½ÎðƒoA¡Ü‰kˆ¢ÞžÀÖÄÑúö†·Û‡ ÂáóDâÃÿþñŒÞ/ÈO?fÕÝW cÌIxÆ4Ÿ^3>¹bgD@®Í=ø8·æÛ$-BùzrBêV•€*BíúºŽ'…æû¹æ”…‘IŸ5¸JˆÔHë}(.¢¢ÀÎÎ"S 2—qš®ù|u,•:øù7|ºÎ2* 7úrqSqEs 0´½±µ¹¶~¼ðQÄCj\ÌèŠrØæê†¡Úš’£ÏÑKÊjG‡GyX#êÍ-î¶ok›{gc&2ù\Iß±8,yª¢ ÎåÑâ+‘_Tt4ðòÊòF{W Ð`ý6Yÿ}ZUv™ÝÐà¶8ûŽžqjŸC*ÍqXü;*ÜÐúà91ɘa³«èŠ©ÀÄkƒªâQ8̺Txb„&·˜¦Â×Ï¥NrxN€Pû^<{>¿¸94¶Ð¬ãè’ƒ¨HÉfW*qF‰iHØ$+ˆlIݦÐ8ƒ{ËÔÕŒ*t©’±2Ê\ØCU[ºñWyóòµ ¡ƒÓÓÓ‹'Gx°Ÿ{Z½õ²§w4³¬]RÙTÔôÕ]¬È#ækU.i!9UÊE+¢vèø¥n8Àâ†ÒU`¬oYŒ¯¬õú›ëˆ£Æ°x~W¶Š«•*35S¡jÀ’ôAÅ ¬Éá.G|RTÒZ!/ØŸâUV;#~®½»»<ãÄ{WŠ!³ëKÍÉÚ &€yͶÊÂÅÒz%=ˆÏ‰«s‹à`p Ì‹Èe–ŸSPçÂñS‚è:dÕåî»pÀ\|27®?y¶³ÃÑr£ÈDÆÑRÜßÙáÊ3‘nÿi¡ y}.NlJîÂüjiu+N´‰Žæzæ3ܾ& ²ÀU÷©†oŸèîeÖ~ŸZCÛÓÙ‡"—=P•š˜\L+±­Pi!§@ŽŸ´BaÄUjßë³$§êBx*ƒ–…¿§%(lñä·ç¯#D³j J?MõiÚ¶ƒcfrjp`X‡ V§ÒèñÁáÚÊêËãã[Ô\?l®¯gkjòJjpkÙÚØ^_]?ÜÝcA ÿÛýÜû™²ªï¥ê󊪆¹:dòAx<‡á‹%O®€Üò/ÛýÇ3Ïò$cuÒÔäeëÍM£Þ7Jå‹=Óߥ%ìË6··ö°àEñüCض7€%R@ÏHxKw©0)ÑU™€)L,)b ì¸Õå-6‡楚b3C†;£¬µÑÙ(=ß F®4ÍžË7¯n›Z‡˜‡°é  nƒuJ™ŸIÅGy*T/yH1[»°5E' †e „¼Šöºæî"c[QeKª¦¾ÈÐ<5µ€w܆öŸQC¬lt“¾{y¿,¶†ö÷&Àºý ÷;‰\áQŠ®¬âŽ!k^X2kNúãšÌÂ*Wg³ô6"Ì7E×Íî\dO+wIŠ¡ìreÎg*LyÆß>moíš¾lr þ+°€Vý"V~Ì—@Õ%•è°þì÷S[I¾ö÷½?½õVí}ï½³»³ãqÀ69'È !$%9šd0ÉN¬q˜°³[[û~N7´Ïp@&ìñª.•Œ¥£>¡»Ÿþ~ŸïóÐ1’HöŠG«ø(qúêó!؈žu ³¬Ý\åÕ”ŽÍÎёуý½µ'ÄŸB™Ÿ™š¹JÄrãÉJYeãüOZcsçá«\.™ðn;Ü\[/*³e;äÚîfÔ𱻩%-ž®ê:÷Þ¶–7„qOþžhL*¼q´ÍUm0\¹ëŠ+~‚IJ5‚¢ÏšÞ)Ðp ˜Ý¢}Ÿ<8s *Fêù½ºÀâ¡lhàóÏÓÆª#€ÔÉd³”VRë´äÎÉ@¨o ‚FÚJÆhÁòóãóX…¨ðá§ëÛÚØ³v×zFƒ [ݯ#ÊâòêêZG­®A¹ó0^`õËs9>‹ÈÆB™©*X{|^žnŒVîfÔ唹Ýí!TÄ>heûÝ}Éf©Î”I¢Ï~«èø aª‚ãiŒK)Ê'ÍdZ-w T—ˆêT€…’¬¤BWi…}ku…Õ7è_²"µ…®Âƒd3³°¸Z×ášh¬Êî„H4°„<›¹¼©ÙÓ!LŽ0t„”¡‡’^ôw‡­um–jO¾Åñ'˜\.õÿþåg°nÀOŸ üÄJ&#= þÉ=o—ijz|ðÇô(×™Éú¢8øœ™>¾bíçÞíÕqÓªÕDyšìÿ¢1F?1äDé,rå£Ð« ËiPRØòùë{„TR !™\ð˜_@›”4º|Kç»—PxºU|¾FÚÎ=¤˜{sE™3$´àÄç·Iå$ ÓŠšˆKó]F¨Ì„ðéG¡ÆS¤ÿhö±ÍÕUܘQܘZ`ohé•ûùÚÆîô"×C“+¡°E¨gE­DÈ*"7çFDES»A!Á0Š”(›ùâ¨ìRSUW^…·È1tÖÌIŠP“Éñûƒ¯öµÇÝ&‚uI&{»?øÓ!>ˆ?üòîÐÝ܉Œü¬…]ÆiDåòtüç]SBvõìô¼Wh«//ûh™§æU&æÕ[ª[îç4PÀ…Íp|ž3`“ÅÎÖvya1<0F0>#pïˆU°E>îÉ¢°¸7”(*èsEÒ€,REV˜}äÉ&j+®hB.OgSäËÏߨ^H‹{—mq'ŠNá+嵤Рœ`E£×ÐÌR)6Ž À"Îq7Ëáï9÷ ä*¿`]œ_É(mKGý¡¦·¨>ˆxKÔØûSK½÷ó[Æ'œ¾‘¼:1ZtKõðr‹/ž8e¢.í}/CÃ'¦—ëÌ-k~²¼N©êó]Á1joù Vôv}g¾¦§–iíà·N{>Ԙ샾ÀD‰3ÌçÀ:=EXÓŸÂ%M·æVSHøtU±°œÜ5&Êç·žîØ|p‘ä:ÀA  ÀyЃ¡V" ÀŠá4a[ÀaiB’»ãV¦£º±{w{眎 ²Á*®ïJ)õËAW!¼ ûÂ.vÞ¡¹éJyÍõpÞµac,úàõrˈ±ØîH˜Åe=éɬÐÔç¾O+n)¨l7a®\Ò çLlŽÜ=UÊòkŠ`©'$w$!Žá”hÆÚš­ßl| ` °ye¶a\'g–Œê>‹q<ÍæêÕÅTè½?YÞ(u 0•3ƒ¤l‚›Xÿ6©,>§>½¨!9¿>.£úvZÅ_’+¿I(ÿŸx럓+¿K«ÁZŒõ}jYB¶µ¯/‚@W¨?üâÙî¥÷¿ŠùVZÞJ“æ;;„Lh¬ëÌH|’ežF0›@þ—Yªˆ²jbÿ_Ø·`iv–Wþyj&ŒkÌ!*¡Ô¼ø®Î؃›ª¥}ß‹<Ìuèéƒ{ôŒ½˜—²ò¤ñ†goYGíÇ5›Nv)P‰q²6NNæŠû;9µÀê—+ЕX€Xeе‘•Ll{PªcÉ@¬'A³šð@£dáf³SÚÛyVëêŠËª.(o)©A.±Ç6sU[jq3šIƒV¥µäb€ZKf©ýjÖ .é@+±ÒC«³ë~Æù0“<Ë™aá‹t8`iÁ –ưêE)QjƤ•z‰Þ'˜Q”¹—íøk’exd(zþFîáA†å»+è’¸ßÃÌòþþÁ͕ժú–{•÷óIhQÈšÉ2Ÿ4G£qi˜¥• ÿËE¤mïdÔ&’¬iÄ“äA6°¬²?<þƒp5aæE7lì6×VµÃÂü;Õ«+?aÆÆÏ‘ƒg]:¿.‡1³§ü‰ 5™{=?ÀJ/v'·J€¥"XÑVôœ‘þQÓ,ŽŸ\ìÅí’ 6;›ó_dö+ Ô¬R‚¢ÕkÕ³µAº$Œƒ [ñçy²øx{}q‡ ž–Ê€ÄXЧ•ÿÔc,³¤ ± h#­îôrÍg†÷]©ú^YØøõ,c!'¢Øxg·aÚY‹&ݹtä¬s,N¿×??;wªüCîÞàÏÒ…jf‘f.w{c’e—)Bõ}„W™ß°Ð!šËÌv;Ãþ]jm~e›³5ÔÑ;::>×Õ7ZRçK09’(q ì?WÞþ7³´+–fxrÌKƒYÌÚÌ_àEðe\¦@Ì(ÄEÀƒŽ}ùÒ¦ê²KÒ=¯rffAçâð ÐϼMQ~^òô%‡ì‡·oÙ3KåêCCæwafã?ò!°øc®ïðRløU†ýŠN2Ц!#â¥ýóǸ‡AŠ "òžË?¾9€·óËû·KWdÕÜN+'ŠLCãáÁI–Ù/Ò#ãs%õ¦Í6}ã‘y•D¡˜½yE¾Ý¬¶–Ä}cš 5Ú"B¥B²GóûÒÚÔíÒ@~ƒïJ;/¦e™”ÐJÒØÍvÁÖ=ž¯NÇUòÕ5ãŠÃ2wSÐøÞÁ8¶²;ÐõÉÈS¶t2ƒb²º¨äb1 j¯‚@ÛßÚæU"}qÙXYK˯üZܯ 9Ñ䬱·9\þôB,,\ÄÁO\ ®‹º"ü:MVýÈÅ ¼ÅDU—'Þä¢KÌÈdj0 &Þx;½¦¸º.9¡2ö@x(î}ýt}sq~‘~Ë…è_䔯°ø"_¿Üt¡,8O|f‰‹  לK*òYàK‘ÜÏOÍÑk„²QVE/CŧÂNuò|Ú¾ÚÀžœZBª„OŒ p3~™¹•Ä·ä o>ٞά…{e^/°h'òžJœB!-5Fhò‰•;$Yß+a‡êÃ×”"”Ńl„$—‚ÅzÍsC¤@X)cyGxoÂR:Xýärën%˜mŽv'ôðø'õ.«OÖ³‹íTÆœ—ó!T¡'' ^aî$o“Dÿ¼gVa¿Gõµ&oL|™t{nB Á /ùtu…|ž<Ô„ú±Z†y¿všŽ<“˶ô’ûr©^rI¿-C!&s®$¤u%±´° –£1»zYEá9™Ð5‘«}ÃCðÕþ ª—Ü#™åGÊ‹ÄtXÇå¨d"•EnÿŽËª'²ì©­sð»Ô:ÂTùU]©Q x$^…Q}Pˆ°è[¿ìZ»}C+£Î‚z_êšà€,:ú’©«7Mh”ß>m éç÷hi˜âBVÝÔÔì«ÝgN—¿´ÒÙßy-”vž=tØ^½  ­.S°ú+Í~ªEÚ|Á‡¹ ì Z@E)–6«4ÔÉÚy¢f’ÐT7X;eOÈc¦[5Ÿ¸ɉÆÂb¥.ÛwÉUE•­¯ööWC¡Qáë·MÍÛÙÿîàÛ…²ào`ň¹ÿºÌæÇV?c ¸ŒJ²Va,Þ_`™ËÜ/¶þÀ$B-e:xù½Éf_ÈÚ ±’©“Ò£ìuâ [œm/ö´Y{flŒâj#Jê5Ú²ì3?mH^ `EÑ5)Ö#-ûÑ0‘÷J=E¾úÊ"X2!ˆÁf g4D¥¤õZ²¯¡}¸¦9R¨DöuU„§ÀqQ°)|Á{ÒJÚLe½Vô9ö¯˜fVÙ¼M*ýS¼¥´Ærúäò€}Ü8r™¥-<9"^{´—¥ñ‹L¥UîGó+©f7ß2“¿ì …If°Ï¦!.|yÚ?ºÑÎM ®›”Œ2æõŒwAóù‹î)] æ™[–®"|Å3: c®ÚâøGASñyÌè ZÔÛk²qÜ ÊåÐŒfoÿŸ¬q¹ „0LZ܈Ä-ÞÔô0ß§%£lñüÑìÁŒM;É>Q0V޵}góÙèø‚ÃÓ×Ú9x?Û—eç[|=uGCW‚åflJx H-õ—غw'*9(6…&Tjïݶ?<¾ Ûµšbí nËôqV­Ð.÷{j 2Ô;jtj&¢Ú‘è*†Mó"ù‘"¹~8õHKÀ¬À3ÅÔ`­u§æZo§XïfÖoÉ*¬éíé¿—RTïhý?ß$XjbhU¸H¦‚«,^‰=%®·_x­èV)¹Œ©1‹YÑçÆ¢WÇ™-°!a·Ž[Yb;Wñ Ê›³Õ6x¹gÁ¥y-¸%ïÜÿN€%GÎìÜ“ÝíݱÉÇ)Ê aPű¸òJhT=y—Xøä ÏQzQSŒ<A ôÈîçñãÕÜ /\ÅûyîêÆàÀÐ x5'GG÷·6'&ØÓd‰€Üå… `G ú‹NÒIÀ,çˆDZGÍq ˜øšR„ nòŠK4Áy~ÅTÉ×rÁ­BÅ f[ÈÝ9Qß2‘]=î…ÂXgKa)Õ± õËàÐ/ïATò™‘èŠ"Í‚Šæ;鵨ÞÉ„2åà4ŸpסÎÞáÄ<Û½L[ʱLƒŠ2ŠÙc€äBj^Mkçp~¥oåÉ)ù£úQ À¢vO‰|ÞübÏ2FáMtL£òåXR¡@êAäÁ„ôîÌ ý¿yЫØxK·4¨E2ÆbgÌŠâövyõÿE‹ =ßÊLºõ‹ðdÌq9¡5‰Ë/ô]¥:ÙÓ7ú×”jðÈIê<³§Jî¼o&JùIdè:ù#Óá2Q¼BjŠËq<ÈoBï)¾°Yæ©$#*‘¨bK ƒT/ñGZj)‡õ±)¢ózµwê7ÈP%ºKëºÌ5š­(Ï€A¡(æü4ó\ýlÉÂÄ÷×”ªÛ‰æaÏ©Xá?Ã^]O/¬ÇI1¿ÂÛæ¹ÚC¦Ú¸Š#«šI¡id ÊŠÎHeKº«Yå]2¥ÀŸ,ï„Çs@^é~V}g`¤½{¿¿òº6<•Ý­­g«O4ý=ÅÇú_°dnkcKŒ¢×¹d¯{Ž0–$ ¾YZåD¨ªfd.s@’2È<:ZC€¹Êjæ|Äd!Ñ4BåÌ£Çå ݾžÑW{Ï1‡—. 4v™ìטF·vŽPLkp¼0À:§Ç‹d›ÉÁBSïõ#ùë‹`)§N„­jeËØÐøRySv0< þé-²~o#c ¦º#V)÷â“‹Q/Ýr´&ÏQ^뙚œ~¹·Ë @Æeue#Ýì¼›i£&HÛ:ç9o¥U ŽÌð¿QTFŸË)ucêLl[ê½)*Ʊn¨ÎÙñ|gkeu+«¤ÙRçš~L R¯ÄO@‹Ü>X7ßÈ÷‘ëQÚÎç <Üd뽉šš"£8ÊäÄðÅGXæ¿ ÓCcŽO6­€S¬T¼Ñ¡ë¢)±ê€Ô†åâ÷bÎ'یӑuW$(/ÄÍï7Ö7qߥ֠•¨á*á$“%""&"›¶?±Æ#AdèŽïù Ÿ”eתAy$a¢ÏÜñÊö,¡À´ê¦k4“¿¾Ã8"ep/×™`nA&”ãðªr\9Ö+l¢;IçvKÓxFy[tƒØUL–ªµÖëI*’ïG†¯$ü[; È0Õf™ûÐ ³T4¾Úß=~ì#÷zátSíÝLhéMÕv¯ÍÕŸßÈwe„ðãerÝgm„†–A,D)d¤MyIÆøŒúö,{v‰ûÝëWTvtE"ãHoOMͽâÉ[^¾¢*)_ü-,cç†gŠÚ ښ⨔ e,8J¸à†j‹³v'–m€ ·ãnŽ3Éä˜]†VuÑkNz£åçš ñs¾®ŸÄß )aæþHþÊòzV¹_ŠíXeWXÆÓ<¿ ÍW °¸¿¶Á,«wfveptþAA[…3 B½Œ~S[$Ñ ÃŠ —T>QúÀžñÑɺ™@ÉÇeVW8:z"åöN*Z ¡3ÃÈÆF*g\VÕîÙvúè ÎÏ-g—yÀ÷¶µêNfv}øJÜësã·Íw2íCïdÚîdTm=Ý„í •xE0´?`fõ%ˆ"STç‰OnÌ GR]¥W "¢ó˜‚=z–ä¯ttÅ Uå AWŠ%!,}ÞY`^©Œ»h%„Ë%e`¹DR+†'ÈIMOLP !yîêâØeu¾»ÙN¢'zí¨ü:IŒV¦þa¦2Ru2D¢oŠ\ÄW€Su \¥ •üLH¬ä+û†f©m2î ˆ`1—]Öž"d茪˜!`8¿;* Š8Äv½ØUŒóà©‹‡œU4K3ôA#Yê, 7t ÁÍÓÞ Í\.«ëyÅõHÈÄç;‹kÛ;ºBãcÐfæ, HЉÉîŒË%CAãúfWö²Jé;Æ-çM)½ÍÐ<ƒ‹›1Œ[y²F¡·3Œ( YªÐÍb ]}”Ê*·;è‚ü&–áñ݉ÏwK"9 ™N n+÷W—߉³N+ c –ÉB5îN¶³¸¦}scóB®øLyŒvãK?À*ezâ A `V2Eøšöı¸—މ€¥Nó“øZƒ¼¹B›ª»¨ˆ¶:Cóó«ÐÉ6…§‹ªýuÍa‡wØéµ6…u ?Z4ÃÄ‚‡ÀœÎÌNráÛ”J4]É hµ,E­Èä˜ëzÆcANØÜ8=4Â_€zd“ ›ù®ÅëgŠB¤ÕÌ®eš]E•n´`âMn)ο8é# sySø7|( j† Frgа„¼$ ›±F–fÑIc“ý'’ˆrš7a™Xˆü@9 Rœ`Dᆨ¼».©Lîõ];xÞÌ£¢:¼ØÛkí¼iK-ñ Ï ZéB!´cRĈV©§“­A%¾>²T%ç@4™wJ.õ×8|ÃCãï^¡ò cWF­ÝõÕMÜ\‚áéÄŸÊQ(ÒptÌðÉYZÉ&KJLlЕ1á£ÖÒÌJHEŒùýc±B³¹¬´µcwÃsó·çÏmÞÛÉeߥ×g–µMNÎînmÎÍ.B?ô ×QÎs:=ÇŠ5ÎOxsÿ©›½Ð¼’KÚóÊ[ý½ÃXe9ÚÏ,n\ûë"Ë~SEªcv„탴ÓaÓ¶+t°~+K=¾•Ž^bY~¼–cmÍVòôЉ¥B¾çXWo_ÀRWO°Â)æ¦bÇÀèÄãξñÙ¹e‚F¢^¿xAê™,!ÝÿþùýàØB¡-$mÀ¢y]JoL–j !P? ¢ãôLM]ÖšCë8³´]ÛËå7Ö6užåæ ÀBŸ—n­¼ºûéÆvïÀ#“ mÈù! ]ŠVÀÁ/Þ>^ZO*pÝJ¯EÛ}_(¼œ((Ó¢GŸ)ú4aÕ‡$…”„ŸW”bàA,ÎâfôÙéׇŽE9úÏ+-ÖÙÞˆª³¸Qr›(Ã$µ¢Ç‚ ER«Û¨ä_’>Áíã箣ÞS6ò pSÎOAnŠõ1¿¢åVZ=iA-V$(­ú,Ó¯•9GeZP§õMoV{xI:µäO#Ó€©¿Ë@$lG7κh°Œp™Ë*%.~TÉdLPðærˆ©‰ Ód‹ º2b'Cë k”SÃEœ-·ø¤âVoG̳¨¬¢ù‰äÄdVÖ4‹§¹­oíÉÊèÈty½rƒ¬ª _7‚ÐsžX® Õ=³Tß$ø" ¨ÙФ:´±­¿±µ/ÙdoñõooîœVÔÂKÀ¬—b@J_z*HyUE¼¿©å¯/ìî@]s‚RÛOŸ-,¬9}æšîÌRmaË® §Â³¢¨ßÊêô9UÒG«ª½•ikö‡A¥±¥€0WJ¡Eød„ÇöŸíU6…2«zeàD±ôóïëò%„ `a…TáIËVøü½#c“ ?ê 3·ƒ{Aô±ÄFé1dm°+€uFZYb¬!‰±˜¸Ù¶adI„¬Âv´E"Ãsï4òvj‰Gĺ¿K®$} ½É ÆAd*±  )ÑìŠNOçhYS˜¨¹Ì\@NJí"Ž026‹»Ç6X¥¤;žüËÍ,öÌ €*6r„=+d ÙËPôšyúnC-çDnLk&µd…Ÿµ@âZY\Ä%fE4ù~[9ßxp‹œ ñFkšŸ×|‹¥A¯œ5üQî&ßuü OéNÎ蜃8 er+µú2¶úÇ™¸~Ã2­ŸðÇ©„®#µ±ðÖÈ1¥'’/Ö‚F ºÅ…¥ó<«“Ó‹·²³•¥ÐÎ†í£ ó¥·‹¼‚™g8MéúÛÉmˆãŽ*€uº%¾Â¤zÅEQYÈ­ê*¨éªkêDˆïÙÖv$2VVÓòmJü8ö „úyÅ÷‡Áü Íí¹BêZ‰1ÑÕù–úŠ1”%»Æâò¡K61µ842SÑК•tá£ì¥ðißæY¿ÄQI%7ýSKE˵í ôd±Æ)>üÛßßî<Ý G&›¼Cµ,!ƒk„YFÿ&Åõ.ÃÀf—#Ä«|˜¹9=}°©¨ðŠ!•P¿R-ÚÛÙ#1dµwa°#7:J´×˜Ùü`]*|5*Óyù¶‡¦& Aâ2[7ŽªÀ)])–qü=¨Ýi­)šñà'0–ŒC³ÁMÒü|Ãc Ž–¾'ËkÈ.ô„&`Ú±£ØûA®3ÇÒˆ|ÉD!Øîù³½ÈðL™½;UóƒêÌÛÚ²¢~³Z£êøŠÒ¤Ó(zNÜÞç+Òmâ/DƒX¿¼Ì!’W~cuŽô„XþáÏKI|5ÀOŠåh;‚¥âa±-ßÓûô½»Y^T+•·We’{i𷸞Œˆsµ¿™]ú6¹Š1… èJ*6" †­)KËD°ŠÎ`)AÈ[dÿ'ÆçXb>®¤Áþ‹õµ§œS|‘7_‹dÇŒñó£+@ ýdîÑë2½h*áÜu)Bã¶R/cMìjÍ›‚º>s]Ò¤õ~8¤Rosí©ÃåƒÊC°Š›ÄÌ YU[’…¦ªg?Q6h¼y—XªÃga,~=Íêc•Ù{ ^x|‘IgKï@dâàùËÝ­mö|d””Ë9–ÒV¾€u“¨‹½Úw28Gdkna…¼*xÇl;²«e-U$ziMZ¯¢•6õ LOL-¹|CuAÖ{j îå8Á¸èóÆ’"\TaõŠžkC‘T}ae;´å´²õ&…Çû0Ùôëw€elQÂØŠÎµJ(tÃtÌ(óT´ù{†žmïRï)d5ð‘Ütµ÷ç–kÞVt†x,;EõCŸèç'ØÅ›=Õ®¾ýÝ}«™ÖôÌR‹?BL:«ÌK»¶)°·õL®X`÷ÑñYdE{CµM½zö»¹Çâ¢J½©)¹Äïní>¿æ0+–tsçI# ÅØ7¨RÝhSöŒÓUḇ š;5>ÎÂúz3,ú@€R…å/= E䧘! úá\È Ú€¶‡1½ÎûºŠmÄHã~JŠ‚s”V³|ìZo 8•ýÀoßêAù©Ðêí«×˜&äÙ‰ tÕ-)äçË/M0”ØÁ~’HntøÈ(ï)¨l[Y^ý!zI ‡Q-çï®rtFFçÙñufQ=ÀR-:ÆÒó°0¿Ö _öÐPE¨ •œRUý }ÀT×öv†Ãc͘¢êîïŽrÏZõà¨ÕЄð:odí_m¨0Šã–:Èi¹Â\(𱄖DmS7„FO/m}eƒ1i²Õå¥gOÅ4qî/õ¼~5‹ìÝ8öX82€Ã:IÒÖ®±šæᛤè,áN cZ iÑ µ×H•kÕÝDs;—=µÌ‡Z]}K?AYExõx›zEBV4& ~ˆhÓn¬¥Dµ+,lg@Š„ècu"Â’_è‰eo_ OÝM±°{üäþœ Á3.¸¾GBÂ8ö0½„¢þ ýýý»©é…ȶ¯ÄÞ_Rßc©mó´÷x|Á¼òvBAqÙµÙV/·G&ÉÈ’7äüO+ì—‡åÕÀ†‰EŠ0:ÆRYÃLUþžþ1ž°æö~H²vW÷îö^WWp 4hò‹6T˜ËxˆYÚÕ³ûõ,ÕÒ‚g39½42±8õh™$`dt¡=0å >‚’,RÀJAŽJxͰ²©?ž&Løƒ†®.• Òjt AeÔ©EåÃá!·`kcCY½ÎpØOÞ2n“Ô‰¸V€EäOª3‚¹õTzfloWø›‡ÅNªÀà<>ß142kkA¸[CʹŽiJϬ¥“N¥Gkø"ò.š½hó~ÒGr'pÊYˆWøï¿¼÷ÏÞAùH·à%*Õ õEK”R Õy†Ê\Z¥Ü=Zr¶z;ßb·Ï”»nl1–B™Q|>ŽÌž*Bª•ˆ”ÕÞ‰‘_CkØbïa cîηq>’Fyå‹’eűx,n:ÚøžSº>¶ËH›Uº—\_ô3‰±=Ìm¸—U—­¡øïRÊãÒˇ¦Þ_PWW¹±ò ð4“ð>üb"X2yAûÁKÅÜÀâ8§e VV6Ì­ÙÇ¢YG?++«/Ðêêó/VÁêò2BòÀ›kN‘³LUÈ+oì°OO¼>]ßníͦFF±81Öï¬3ÖÇ$;D;ä7ßM« …z§)È„ì¡Èð}zm–Å\àÌ(i\}‚€ç;MœžY¶·<æâ+}²ÙUª¬‘Äœ’ÍžìÛ³“S‹—>Û òM’}Oß²åCéüá“yÐTHøÈ1qXŽO°ê™HÊ&«­ùLNd̯gGÈçý•¯ó–ˆ²¶.v9ÓƒÒÏŸã-##3?½=üdLNîÆ ·Ó™˜,Å£à1 ôGcÓNqRZ^y„pyöû¹sµ/Ýâ!‰ŸZÖ™TÊkwvuŸ²ìd¨Âí¡}ŒúO˜X4°R,þ’êÖµ•UcDCvøç÷ogg;=ÁŽÞGë"Øb{vì ¡Q€¤ÝDº§yf•ÓŠ Ç íCD¯‰Ñgæ^Õ´Æ®©ƒ[xU ÈC{$ÆR›¡ßÖYùA³CÖ † ¬-Ó3Ñd öìní¨‡ æðð´©²ê–\kKZ‘ûa^ƒµÞûdiU}†0'*YEu½’Ea:æyuŸ%‡OZÙp8ØP˜ò]†½»oŒ¤<¡ÐÍmØÏ ¹õY–f<=ÖV7Irs+ÝT5f—{í­áÞÐÔÔ£¥{û?¿}£h j_DÞrõ Xj8%Ûsùo1x/j 3e pÜLå Œ‚2']Μ#cHôŸà.Ážùéé‹v†‹ Q§#ëø20ºRÁ*½v”r˘_t7›­ =áKs§Þ¿~tœ$ÞÇê~q`þýñvþ­”Š™™Ex‡Qj„"?ˆ\>u²(çÒnÑUÓ Q¸âGO=Âòïÿõã‡Áái$ɶÇ4?05‡Gæ## ¡á³½v‡(PëÇü ©c¼wp!§v@ibÑŽVç9MŸ"¤¼Ws§}´ø£è¤Q%82ÍîJ#è[%ÇT­+[4ÖDr&²Ã(t æ²ÚºûúGAίé1Õ÷ç3t€¢tM *E´Ò‹!•H€å’¼€¥šÞ¼…Ø$wœç©oÞò's*;‹ÛMN%ƒ@õ˜˜œS’‰ ×3C1~ÕNë3,…®Þ¸övô›Ë‹ ËÚÈ¿r+zƒCj‚‹T>£Ám/¨éXz¼§2&¤W)“#ÃûÑ' Þomlây²¸ð¤¾©Á³Õ§;›;Dõ! e•û¨‚̨葡i¹@û`:'2Ø™Ñ@˨ØÝÜ:x±/7ʼ ]Œ¤'5>Éæ–³;Ñ些Õp7½vjzñ×ÞÞ¯|1òÈÒD\Ç¥ÕûCDLGyü Æ@«¤‚& S D¦Ð2¥îÀDîåÈ?,çÈ7Йç»{SSˆ‘C‘é»Ïå=[ÞèKè?åÁR™DkÎûÌ+‘wai©üºs…*õCÔ–à+(!«½cc.º­Åqwv؇°¾^0Ô ò ²Âà¢úL*Qq5ø-E„ºhHì:¢2tLÒ§.­æØä¡5œ—<Î¥{ŤJ¥TJ~]jAC}Sໃ³}D÷‹«}~’ŸÑØ‘œ`³õΕ*5ɯ«˜cmçüüGKàA^SyCZKœQÿñé%8R` ,ìªÊºm­ÃmÓ*‚…¿Ön°|`«ƒ5•Ñ\aÒp+­.XQÛRר™iíâ8%iܨGT Tå¼Y9Ò->‹Ë@"û|KÏÄ¢ÿÌÝøoÀì#Ísó°@“›Ï±z»£$ÔÂC“m!BY—`¿¾ F3ö›`Q$ÒÑùK|Éïäwô„Uhç:–ÚÍjŽËoæ’%`;õe\ÕÑñ9®sL¦Z., f«¸êÝi`‹°ÊÎÓ­ê†öÁá©§µî€ „¶ýö΄©­,ÛÒï‡vD¿èî¨ê÷ªrp¦3í4`æy!“ $Ä @Ì @ „˜GaÀŒCbìÊÊÞëïžcŸ–-¬”dde"N(®…|uu‡}ÖÙ{íµ–WÛ<ÆÑâ q&m­s°.«¨èjZ¸9©ƒ¨~1‰´öÕ¾²SyGt4¹Øþmª1£Ìº±±õêÝüÿæÆv^u7±U’±”^½©;õv]GN¥#µØRÛØÉòÀ;»63»òèàE@¥øê`äØ:>8„_“ù&$iLQ­d°Õ£Caîð®@RÏ ÄàQUWa㹘˜æ\MhId­®äÕF<À%Ï>X8óNÀüwârê̓è 8¡qœoüsbEz±éèàðõîœsÑãL"~ƒò¦‚¼$é.€;ZÖÀJ)uÆ.8<•^7N&±Ž¸´ 5WÞ|¼N4Yfj5ó k+«[««—R‹)`Æ¿;¼rÔvƦVVÖvitC´=ØAoS+âYX˜ÄSƒSÿcnSwŸûÅÓ'ïý|jÿõë«<½'±b$)^Á{Mrl|HÝÙåÔöãÌSaÕò,Åž"s ¢g1é åÒ¢Ò:æÉ"ËZ€t ;fÿ-CßIÓ5‰+ƒ°¤nd¢RƒC|ßh•]Õ£æÏ°”ÅG0½# kjÿ…åíâÍŠ8Phî)¯ë¬à4øWÎD܉!=Ë"‰â:ÏòϰxxÚ»Gá–}›l¸›Y½±`Ö‰k‹‡¿ÐÐ>å[ë]Zñ`@‚I-mñáûËy¸‚âÈ[Å{ ¬éµv°8Å!=܆«™â©Ÿv"¬ˆI » C…oÅ™ä=|°BËViËŠµsV‰¹¿X)™ÉR,•¸Vçø½B4ór“Ëã]Ú ì’Ö" "lø¢Þ:”PäÀ %ÕÕ9!|…4MÓ÷€ÕæüKG{‡;vÖ–WŸK¥ÁIpǨ:˜Øgwîæžg‘U ÕÜÉäG&)°²Âw€%X_Ì»’{®NˆÄy$-”Nr´Ùnv;ïó9‚÷p­†ê”©»Øü3ÔÝžRmऑ["óÕN¨¯º}wÒ+ÿÏíÂÔBóæ:8æ$ÌMZ¢Ä©”·Â'êˆf€àGNbMd6a'üvŠÂ R˜¨tjø²ß“Ò ûá'‚hÁv0•â„5‰æð,øM6èÏ5t--oqÚ©—7ŽäƒŠtÖ¨–î­Ð¨h0ïO*q4· P¯?¡nf¸g¾¹•ÖνÉÅ<„®$eörbw¨"Ø€ÔµH±ržT}:}£S0 ”XÏ{}xÁôw‡U ó(VÃûC. Íî¬Ú‘¾±×øZZy§¥Ç?âY¦‹p ¸Ç×+”úžŠ:9.a¯_€¾d#,½©@@dví5#ŒïX ½nŸr1]ð=ŸEŽ®Ôã„î%Sþgä`Q¸A¨ ²õ«¤Ê?þTŠ‘íËø,Sk?¢DÓ¾Õæ® N/„h¤ÛÛ{&ÿþZ4×\EÝ“㜔’WJ%…E-9ïäÞŬ£fÜЖsý£~¢C²py°FoV(À" j5_}WF‘ime…øœ>¤°nsŽC~§¦ÂÔËúäC4—çOž:zÜÍÝÅå-ž;™Ç’ö5\ˆ‚ºþJSWƒÕ5;·ŠÆ÷0×”»ñÓx3‹ðä‚àÙˆü寓ó_¼O‰d2¿òx*zÍ™ˆ9<äHbø^þ¯&J)rwv$¸¶ƒÈóN¢Qi”óN,É0•é9>Þç‘™"³Z£8ÙàÛ¤ò¿•—WÑú °{iú'W Ø (äÚýîþ¥¸—ò¾¥Q4ºÊì-4¦}èódX¥±#'k t{g-úüò“ƒÔw)¹˜<ô@Ïã£c{ïL–¢Ux W2 ‘Æ °&…ÔË`ª®¦æþîCµ`ãšV›)EÍxpeéRVþtePMÔG ­–¤‚–’Æ1ÞV¶Níî1­·.6ŒéPL…äŸÂ¤¦¦†÷žB<1V&q#DÔ% ¾šsdi·yöL+%ó[ô–a]Ó˜$¹ƒªàl_O€Z%,×ë%½©‡.n‚;äwé——opäWÚê,݇û‡»{”?¢*H—«]a_úY2XêK)匎ÏÞË5þ)IŸ¯o9ØÛ—œƒ8,ô5“m8½Ýr{†ÞIù«¸"CûÚZ€›ìª4º€STd^ŠT9ƒÕØìô4!òý.ßgA]$WlNOŽÁ%Lˆ'$Û1 `5ܬËVÝPb±½¡ÑAV‰R¸Ì’’‘¢VÂ3‚DTî4õ-”ê.åîœ ³HÎ?[ØÌ2h”¦á«ß_Tçòûæ°ëF>´w!®ƒceÏ\{åËtÈì¥üI”¯ #N bÌ‘ëËËаvRY”ÇAÖb‚?Yaž¬«¡OÅÿJ!ÁXÔ¼bP«Ù!‰ñÿ]½ìvݺ¯+Ð[··v5éö¤i°&íc¡ÛG)bœ¼…H;= "™\ÊÍ"÷ÆWâð8’K|,„l€eËss’·Ažïç™Ùå{yXžP³SÒ;’eP~ Ü©h™aÒd;º)ø­!I;YFŸoþBœCÀëß_¿L.j‚qŸºÊšEoÑ•î]tÅë‡Ð®Y†^"¹ÖcØ8™ZÖF[›N(DX]ó[H~Ïlæ5¸ƒµ¾D. õ÷äÐÙPjšEÁI}£§ hñl L®ò£jí^}‹§ØL2€5öðáÑoç§cÞõöÁ%J„%æq>/–̆…KV…±W¼Î‹ŸìWÍõcU6ÖÙÙá’KŒ•XØr;½¶µc‘÷õµ@´A‡gž»Ÿg@ݯŸ¥‹ÃxõËi›sŒßòuRŒWgqXb·Ø MxÒʰ൥•kÝõ)eö¤"˸g.Ls´ nb¾ý„E’D"þIì`ECÂEa|q9[ÙAjY{FEWf•VÖdåÄ]q°BJ„c4rç•…Œ¾”¨9#Nù|K}C^“mAcæŠÆ´9¨˜„áåßeöîq¬-e?r h»˜l}'o|p?ý´ÆÉÑ~;i àÒS ž}Ñ~V‚\‘ÇïPÙ9—™˜…,YY¼—ˆ'G‰ 8ä2]Ç¡’vĨ§âÌsªcÞXaêä`‰øÏ__ y@WAñ¤°ué.µÁ¸(Ü Ôæ~VÜ‘\Y%©&›-ÂË=pØ|K$‰:ŽÆR2”²Î¡±#_qxpdïûëÅ9ë(¨«ÅFWvµ¦DohÜÑ͵å‘Å™Pž;UÂsš‡§N…ß²²¼™Zj§ôAþIÑ4%ºR*íáѯ„qœÎª¾Ñîò-Y5ZH´öÎ=:zÜ;¶\`«é ý hÕ?¾ê[xPÓæ-nšH‘ô’ð‹WIE­o÷Zœþ¢ÆqK·¯°qœ=4÷ø!œÐ€;íCǼõj<ñ'ÇÀB¹Øv%›'…’»*¨ýªðV×`…ÇXeâÔ§–;ñRÐ+¿^ø”Ut•»ýT’)%©UKiä°ºUuwƧXŠúº÷pŸl±¹§ÉÖ…_¾§ –Ô¶8Ü?ª²ôQ¼_lMÌ73žÎ¯tOÀ’Á…Õ!±ÙCMÆ=²5ëK1»Ób u%2ÕÒ¿E'ú{ Œ€°Üå¶¡±§‡P^žtôû5­õ†¡†¶q£ÃcrL{Ët[ «INŽÖÝè&%F®tÅ~þ/öŸ¬ºþ+´Mô­Hý”$ùëš§¹šBFý V Ì[/8ï:àÝ;³ˆG¡,‰cñŒ‘ÊV„•O°ä+‰+˜‘¶ŽAä xÒ⣃Ì98Ù ìü˜eÎÒµ54÷·w»‰†çWaU5–ùì…X/†_^hr£gø·6wZÛòÊ]Ã3 Üî4{ÙHø–ƒu°Þï"$¤rÌ y …:“­} µÀt'ÛDîýn®™‡DL„ñ@¡0½Ì–­³Ñ:JSÝI¡ö·Ü ú†®ÛYæd4*:Ót]ðü”]_]kå–ûŒ“·Lf°í#ÆPY%pOüðŠÊOs¨”öv”BDL_zØÆÃŒûuUÒØ0–€2g±žC¢h&Ú;Ñà*0!]%äÑâõþFëÅɨgñ~y§2c 8-ID ùLT4,IÑÑ*H•.{çð‹'öj›ûa•Ht%¥ò€5ŠD€®|ÄU,ûxÕY/QhÒ Œ…¤4ú É­h;—Tw†°&Œ3–n?©¬žÑe® éPAâ0Yõ,Íø7Û5,UkŸ*4I‰w1ÃÌ«”rÐJ‡ÁƒoO×wJΖfö›"èõ/•ßx©hiÓT¶°†…ü®©×jWš) 'À»Š•”ÛUH0¿¸ËyýŒ^„Éß^½4[»›l.&¼øq°Ôârgû¡~mtbž]=9:–á&~ËYޓܱæH—Cz68â½›UóÍýŠÿñU–©¥›, ‡—[ÕS«h›7ëƒÚ€¬É¤6!,]çQI\E1]ŠÊ’¦¼Î_± Ó™]0ÙÛ£´Y„Vpx ¸Pß¡¡ä§ü&´†Æi-åÛBäì3ÔÕmÿ`m»÷ã}v©n¬­³bææ‡ÿÎ0§rä1ïVb52îàɽþC ã- Vï1öÎx É…’Ð7#ÀÓmð1)Ÿ¦æ…§áíq-€YÜ9üU} †•07Ì–(F˜a"¯ÿ—V®Obí %ñ왞ÿÏ=Þ Õâ'm×s C¤`1ˆrQ"Š"Ò[ÅïbÑ5L+q~¥}||:½°>¥¬ª€BW¡Ž¥¶¦ñqˆxü¸‚ä\_fñ`â·3ÑgT8‰ÃÁ¼õ7J1DøÆëÞµ=›kf•Xd¤4x@¥K¸rS(”ø‰÷¥Þ=|/¥;#Y+Yß$ƒC/RK €šÇz§ý²‚Ñ _U¸SÓ@«¬moéšÐ›œÍmƒ&k¹©‡“‰ ;*Œ%%ÈUåû³˜=#+’]cní!€Æ`©Þ½ ‘”F”H¾yµ *ô¼±ˆ„t)“€9{Ö¿úmªá»´êÿ¼W–¯·omîþãõyßðlŽ¡Wæ¢e#!wèJ,Æ À’OG°W:ËÖ€*´÷ä;z.œ1B-0 ‘…6——«ÿë/g¯’…B–÷ ‹ëË+[K5ù ß¦ÖTÖ·moΕõ©Ï]¢:söª0ªûH¹&~Ž$÷HF—£Ã©v"»eWšÊ¾\ àHP§¯³Rƒ:Ú`e,N¯JáýD8á©¥œ¼%Ø ­ 48™sÈÌBQP;¹´õI4(oFs<ªžx)ô$¯ÉkÌtF„ôÆŽÛY wsÌUæ^´|yœw¶÷±í§1EZ¶„ùŒ[…Êh s¦ k´Üâ.¨vÂ|½—ß º¢ƒ[Ù<(9Óßpò^@ù¤5OfUöèx§ÅË¢°E(«à¯¾ Œ%u•é äU¡%õ'¢wðPºëê“2Æk0É ½ Øø—X¡…*÷(¶ÁX /èŠJ-–Lf‡{~aãhÿpdb®ÚÜÙî!+ÌRÏFTf¥l|F€E«´ºuue#2 ñ— ݧ Ir@ 4˜®Ÿ²ýŒõ+CÎFh(?îèÿ¿÷tߤT}›R•®³ûükÿüË…wf9§²æNPÒ@TÚhbVPXüÆ*G¦x•ƒÔ2–Ú g¥éÚ¡&°ž+m†ÍNïáÞY+ ëU¦x¹ºÖïR«S M·R Jªü*ÙðuŠáwA7­×a.W3.©™Õ¸£@JoàªØÜ¢ìY‚€ï‚Ž ®zc‰³º'eæø`ɉë?ÀGž ©ó2 OÎ?a ÊÆ¥u7Î'u½óÀÓìvÑïß½ác *¯v©@W–{/ª™…_ºCŽŠ’%Ô«˜á#´Ý”BËÝœFœ Û†iîcÕôøð‘Õ9®G\Jã¹¹)œ¢·ÆÎG¯W×8Bcå5¶†k”ÿïª^Ù|Do4K PBW*§Åg2™‘)öLÒ=›ª"åN…±„ÎBCÙÕ ¤TšªT¼)iòT•‘'“ˆ‚†$Þ6tPêþõ–:é—¯Ô¹–ÍÓL!)¥übk[)’ÿ€|÷ú—3TîçÖT4áqûâY¤¤ÕˉüðgX ¸ÉÌ|ñ"¹Ç¨ö™õÕ­Î^7*yº–bƒ~éâ궒ʦÒÚ¶Ò‡ÙÖ?<>;69ßÕ7iíE9öO‰•ß§U'äYî¶ší#ìçáÎ~MSÔì¬J'Ë&É*„Ê#k0˜ƒø¬ÐGCeÑU”‘¤º/‰ ‚Ôévôûi̬oÉ­ê*ªé¢wä~ Ö\l£’ˆX’„ì„‚¦¤|ÓìŒÿúÜ`§‚œÎô|v¥ÝÌš”˜É(0¤öº6"X~„RjÈ®qP|H5ʼn×Å·ÈþÿëOuWÁŠ€©y2RÞYª°ÊÁ6>] F)ñEfð_äû‚½bX\_Êp²@œ¡ ½µèãã(éJ¨¦âÔ~x“_¡ä¸"´ÊNÒK]2áÕÅôëЫ{’«·ý”×t'ÏRaìÆ°_’kG'—2ôoxî¤d@'L—1,  l'ÏÌ:ýûˆ—–5M×È«zë~(ˆMæq¤ „ñåƒ@š_«‘Ø¡Üyø¯&Jd¶r÷Ïác›o,e·’MebhÀxãÃÿ,â¯b”˜åÄŸÔQYÞ“ ¾7³²W2ÃþõV„«ª!,ÊQø1Ç|'ÛÜ30½»½Ì"GŠkGr~ÝêJ`~nU˾F“Ë%vsÓÇœÁŠ“ÖâõX*rcOqþ‹Ï¿|'³úwK¿M1|ŸYÿ]†1¯²­«ßSר™§·ß/nù!ÓôMJÍ·éu?d›ïå·à±u'»b#Z YSÞåÿú˲«ËšÎC ÔØKÓJ¶¡Û;Ù çûJuá%B…±B”ð¦d”DÓ„€ºˆ8hÏdTtg\YÕ®t}7ÕvÃŽ8V9Ìw;>Ð Ö»ùÍ)…f«£omyÄ/{ ?ãPÀ‚¹MùŠðÎÕìù™`ØÈ‰V*kŸE#AmUÚÌ­/-îíÅIju¿çk°Ô–0°3Ûêò…"!ô\Èl‘Ðбñ@lkÆÏS"îÑJ=´)•((«kB:ç–Ã;=(zp숼ƒ`Ë5%áÃÁð«·E)¼òÁ?YŠþÇpß’ÁÂê *wz³ Q!¬xŠ xuŒhù`$ÀòE»`co³«¨ÄFUxôeUiÚWyŒš~xè¹ÒM¹nðCƒ`á¥ÂT¸F¹!!Õïa þ/q,¹Ä–]­é"#@Á‘Á†y¼^>\jÈw²ßÿ€¶7B±ð~‰+´ÂõhtÆnBa n¤2··rçAôëèuß˪.©nõL/ì\«µHr¹ÜëR«&\€K>Qñ¸,"o|¿4¼t²ômÀ¹™®7¶ÿgbER%¥káÖ´ÒÖï3RŠ›''}??z¼xØÒ9žkè!³B‰i~Œ½ïå[x~’JÛjZ†Ž´Ö©f&zF§[¥¥¿¸Þeh©n©lÑ,?yhóëÈË›áKXêÑø —lŠæšrï’Ö(VÂ"á‰?a?•\ÞYYo-®iÏÔÙóLc£ãha_œ^+–f|ggñ;$¥ÄæNKssO"6{€Ç îáÖ•Y™8ñÕN…c0Wìz²¯'¢` Nb€0àBÉ4Rx¤«†ä<)ÛÇ44˜¤5$«h9x“+‹TÐJê5¨/R‡Á¥|à8O"{‚lìxð%ÇÀ`Šá¾’Ô+Þ'†Ú¢Ì`)ãó§Yå"ß\d%lþãÕÅé3"𣃇ŽÞ™œšXÓŒ*ÛT•}º\”í4»ÀêhàÄ+êwV9|zmrgøÂŒ¨ºñø^H·öÙÐøFÀðQ1”Ü2ƒ÷Õ‘„zòaïÞ– õ+f¾ˆaøž)E7‘)A–Ý8ŠS.ü!»Ñ3½D“ÿß.ÎîV¶þñN±³wŒÌV¤KCaVÿ»ÏŸ¡ÀãÉàIˆ7À‚¤Œ¤Þñá$!þ'ñÍÿK¹jrÒ_PÙr/«6¹À¤3vwLON/ygWÝs%Fâ_%UU5º0ÏÚÝ=°vy2«´ÕË‘lCõ)MA ²«oÄVSʨ8$’›Üß9Àúo¿LL¯”˜Ç@à!ì>¥¿/`©Ÿ¯¶ƒB'Y‚ÓPÖ"ZªÓÐÐOJ<6ƒ‚:挟cÑÆÂë/ Tß« NÐø<Ç&}“˜k°Äát…B7õÂfûNz§ïæ[5^”Á‰·,ºÁ=þ;¶´Š”JLš+¬m‚ QO²Zh% Nðß Ñ쇬X¨dâ °B¯²uéT¦YÔ‹6*ªq°>ˆ¯Æb]« a˜/bžÎÔcÝR^ï\\ZßXßêêußJ©*«mûíåy$¥Ñ$MZ››£@™¤[…y`jfÁÕÐÕ¤´+1ºç[º&)Òs­ßÊbMݬ °| `‘í7¶¸(Ù\¼xö×óÓÀúæÊâŠÏ;¿µÀFézRydŸ?ü•O6%_?xX_ §œœÒgзƒäâÄööÏIÉ[ÆkT%” éMJÁ)«›š€ß_¢ƒú ɨq×Iò_˜°à„GÁ4—\Ú‡^TßÈ,ÅÁJË`F¥‹Ó^b¬Ðó«q"Ê ñ¦@ÄRVhh‰ ˜ÁÐK¼R O °©¬¦Iòj8Ö~w ¸X±°Ý%ǹQÑ”>š'0ÎÅ5Îí»#n?ª¾­íƒµvn¾ß/.œœ”bùu…qAz”*È¥JøŒŒþ°vvÇsÊ[þx·ìÇl¥R8€t„}—n´´ ½âMt§âæÈ“ìx¦æ*ޅŵ__ž==:`a­u9=Ø™ó/¹&Üã>c³ë»ÔÚ{yË ~:¹k© [?¸IòjaX÷Î!öÛ…–ôzÍ8c€M±ÍQ‚']ýS&ÛHZ91¥ß(Úno2XQ¬fÍÜ3BƒcfÚtàF“ßs†¯ãŒ¨êbpeâšÁR’•äPÉE‘¥Á€œ"üÜöÔž`Ø`ð¬2W _È|HCbÎ EŽJÜõ)ærÒ¤[îZýnʀūÜ<ÐN$6EþžÆÃ0÷'èÊÔ:p'¯ +ÖÔò.r›»I¥íD­‚7 ×ã2Û§;† {€ú Æ’sƧ‰W `E–”še¹Î¤¼XqÁXÜà‘h¦BH¢ ã$PvºÎÈß_½D»ÛŒ*÷w÷qýŒdJ¿*3á3ÅBóX¥xfh'DÊè3‰¼8<æ­iìú>¥âÛ´$‹RJmYúŠñx’#,ùc–1½Ä’Qb!ÃÄωŸ'¶«wtiií·‹—ÈL“f è³ÁOÞ}°ms Ø;k,=º\Ù¹:¨³È‡_gõ G,Û¬|CçÊê•DXíøÃ/.mÐÇ315?ë_^[ àñôèñИ¯¹c‰¬ÚÖa@ÿÖ ÀúÝ€Åñ`Mñ»Ð8ΫéÑ›º›ÚG¦–W!ð]Û|ƒr[âQbúXÄIïMµÁŠ–±=™¾b¹áþ•+3¤iíþÇî¶ü ŸúSvΞ‰'´¹ñèqN¤ÀÄÙgd ~S’¸F7è*üPÒðÀx=Ür¼O×”ÓZk–>%¬k´¢V kïáaïД–ÁÒl°n2X‘,?„ •ùç1ɬr%µ%ä7f[쎾íÀŦk+S aåéÛ•IìèJl‡©ÚƃK€rý„{bltò`wOÑŸ#ÿN#mÿ’@͑˨‚»6{þU¤ ™ y|·ì„…Ë3rx¤:ˆid­öD˜bn&Â\MÑ iû·€)4ývùÑ ùP²VÒ©`ïÞÏ/?EˆÈ¹I`ÔñzЇ(qp>YH\š7=ògž¹²LÔm@W0.4iõú±ÉeŠŽ>_¦a€«4™É]!Uv™Âç;îÿŸBî‘9°PÙªk•ÁRt’¹X3qÂXüî3É/¡ÒLáèÌZVEûÑÞE¥G‡ÇÛ[š¯gT4¥ ÃÏÖ"Á³4?«ðôs2:•õíéE¦ÿHÐ\™Zh²vM..mùfWë­C©@«¾¼?æµÜÎjü)·aÏ_žÇ%@<><šñ-ù| ôóS+dùÅO#îsU˜¦¹WÖ[ùÕΣֶ–]3€³UžÀÁè£T4O4wÏR´!2ž]Ý>SrY§Ù1NfÅ`jÏ(kꜪl컓ÛìèõÌ-lü÷oA¸A¬‰€IÀâ[èUæD)g¤Ëb—ÅIb±óÇYï,Ëuëü—è„ç‘›*Ú¼ˆú-€Ê Ô|WýÌ ÌPÂ6¾¹­?·Ì”[\mirlo Í…˜Tµ€ä!àÊüöê%xË;=×Ö9➘=ØÛŸ›_ÙÛÙ‹ª^¹¿­Ùù= ¨„2`ÿd&¶|ü¾æ}œŸOŸA—|ñüzƯ/Ï©yÿô²,ËQªZ¼²ÍúJ#}ñø)Â;óÒ»ªdQß¿R§š€sr¡…ÎA*ƒ”ð˜ì´”UýÐÈä2½D;;‡ecš«˜æQ'] ¥©Ðã`vÚñ 6o©e¸> î¼X_"ÀR—æf]$„Dk ÉofߌŠö¥Å ØYW»S&\$±¤zo,½Tk[“?¯m]£¤v<3›k‡Ô!7º®ÁÙ*Ë Ñ>:46çõ­â ¤oèz°µû·WÚ꙳!WÏR³ê# ”ó½‡Z£Ü•Ôè£2ÈÔܞ×®¯oçÚ;\S-Î骷Á:nl›ÎÇ®»~Ø;·9á]K©p¥”9ÒP¼,shŽW…Ö*Kßô´¿ª¡#¹ÐœSaCçì§¼æl-«ÜÚìJ,lÎ6HÖM‰0‚€Uíâ1a#8‰EúÈ+¥°~̱˜Zz¸v<)פP¨êbÈUClŠÝ@ýåùäÔ¼Ã9 r"õ :OEâS6ð~@ÙddÌ×dÐÕµ£\ÿçIJb}ã”Çw¼wð1<ª‡ÛÛµÕí@&bC³3)·÷¡„¼†’j{j¡¹¤Êq¸xBæ{Þ¿°¼¤õߨy÷Rg½hŽV=ž¿`EjjîÎ/olëîìñLùççW}¾¥Îî‘n—ûygÏ(_2ÙŸJÕûIÍ>|\XדUÓïÒ2y3þõf§/§z&P€‡<£ª‡kZTçÊ®t¦”¶§”u äŽæxª®+­¢+¥¼3µ¼ƒO–6ßtFÊÁ⻤I¾ì½•¶Ð¤{Eï­+M×™ˆ*l~õêòZ\STìFY+Ù³x ¹+^ÑÃÛÜØ‚‰x+Ř[ËýÏã@]ûøðxn~+FÿYÒ®{¹ ·Òj¨§ÿÙÀ'sK›këèMÎ5üY‡Ï}'©eŽÔRDC|¢8˜3ë©°KÚ“ú]¡ffz–ÜÕüÜJoÿ„×»°¾ºI¶)LÉ)ÚSôÛŹÁ个gæ~ý6½­D̉ü“÷ÙP;W|5sÎÙŒ®P}ƒxš³zº:¥s0¿² M¢œê^fUÑ‹ífå‰VÌUx¶ÂpÆŸ )™9‘Ç_tºÕ³ÿ–'0ÅvûÐ’­× “hEÙG€ŠYY.ä?Þ¬€u À*^ °†ÆfÅ24\Ü Îx¯/..ÎÎ"f#¨¢öÀŠÆôB{ ŽØ,ÚI/µ žI‚"Ú­ SQuûæÆƒ)ïR™± ³šÛµ˜þ9Iÿ§$z«ótVŠ&Ì|ìç {w…Ü"Iª0u±¾þ€RæÜüZ °»±¾»·{€–òîî!tNs¥¥¯®u¤ÌaTÙÐõ]ZíŸÊoeÔßËoÚÞÚÃýZ>~dmƒÉ„[gR!¾m™:ûWÉš+I…«LÔisÌþÚ2ÙÀUG×pYýnV}Mc÷°{Ö7»òó“gÏ_/~ùçë—͇­Î Ørh4ð„KäDZ›‹È3Ì+ÛÁCý‰'øB!˜ 9n¬r˜J/B½mæ+hq†9á˜ip2q+â3·ÒëÇhFZX¼ò;Ÿ$ka•õ›ûúÛé5ȳÍÍ­B'a„¿¥U+;f(å(<1ü˜…{—W»_Ú&ëËÐVR‘OÓÙÚœn’|††\;öÖ×¶§g–‹ôÍdŒH,¡/ºbÀèÚÙÚNÉ«ý.ÓH/ ô€ni:'Nš+´¬ï`圚_Xžâɽ”5;»ÔÑ=45黕XÜ78ÅŠåÊ3‹¤©¨TöNÐd‰|<´}˜>…ZM²eø—/*}ÌDðLø$n qÊŠ}œ»"ÛZXåH*²q;ñ¨J¥ ðV…Jó ½wfˆÑ>‘Zñ†ù®Ùá ©ä{ˆ®¢pªÖáóÌ“,h ÌδÛ¿dÝð`ݬH2XByÌ•SÕµ½µK‰¤ËïõÙ™DW„ÝOàÓL‰¹«MähßÍ,m¤*ñMJ•Û3ØØ‘*£ V¨ž…„+ëø¤b[f™mÊ»˜Th¹^ëó/òó/£ËDª‰ªV·ÀYÊ@gOŸØ½‰9ußeÔÝ/hš˜ZÃш„œ˜gŸŒNÌë\¹UμZW¾ÒijHt5%kXaºÐÀ‘XA>Z7,…®”þJ»ÅÃbC>ÁC£a‰ –X™únðÞg1£|J4@¢<~ò§ïÓkIêl)FÚ• or þä÷zaÒHø"‚G† kxÜC{GwZ¹C@Œ•úèZ•l3Š,³þ5úãüè˜.ªéÌ«êÌ©ê ék0uâÃx&ÚèäD³Â[ydjêü>­&E :6ù^TˆR+œße6öM³gÊ‚ä¢PÌ÷û—ÉK1w†®²8Ð(›í®Žž‘ßÂÿü6ÓØèxv|tµîÑ Œ>;~Io5è Àú“À½¿á³ÿ?öÎô+­l]÷åýp¿Þ{î­³›³«*I¥¢IŒ} ¨("Ø (Š-*(v€ Š}ß÷5VbÅ2©ÚU{Ÿ35§ÎPbÙ$${× cÌÁX",‹Ù<óyŸ÷y?°>8•[Êäú_ÞOõˆÓ2µ ËÝO õlèNÂæ¦Ÿà>d¾À¬ì²KŸW.¯l½if-€h°›9g”zxY3TÕ:ÞÖ;YZ4jÒÕ™foä”åüâ+°n«Á`e°ÌmG{EoÜC ¢ÅòÑOæÄ6<Ç芭WäP¹³ã‹„Bä&xßžœ¨JDøEˆDXÍeŠ'©`ˆæ]c°^D–5…‘F›…4Þëöþl…GÂÓ½Ã9Åίž•<ȬÒYZ–×YQ^{‡õ-þâ*OZQC¦©-Ãìe§ºÒ O,Qô&t¡F®oŒ%½-ÆR“B`Ñâ+]iÐÊàüU._zam¢w±†'††g…Í©%^lÜÓifošÉ“fÂÿÂý0§®¦¡EÈoš" )ð …ä“\Ú‰¦ÍNÍÚkÛR ÕäëÁQ=Êv|™lmñ^Ÿ¯˜88ÙßÝ·Öv'ê\É…I׃ŒÊ’ªVôæ$gptZר¬óé ™k„*$BìÏٌܰïNO“ÝŒ`(Š~éþÅâ$­^ÑúøS6ú$“<+PrQ˽Ԋêºvd?Š‚˜œü6Qrj6˜+›tu@7Î/?+»¼;© iyeVìâÅ7œ-êþkcóCx€±CAéÁçx(›ŽÉç5|[LñœëÜÀï³ÇF±X¸-Fºª¤ÔõR Ø”f[.Еsˆ´ @WÌ™’¾2TvÏϯ"<;¹#⑾¶¹çYK«œc Æ0DµÁ =Èä:wÊDWq€X¿ °„(›Q\n~Œ î °è£Ÿ¦€šÿNUX‰6{‚N4~ùÌj«ë<&ðåOÃòSY×õ8¯fwSs – cãs_>5•»[¼ý5 =9EuYEµ”¦Ñ ÚÉMêÃ#kµ÷A†íYacªéœBøÂ¤ ñ$/nVSžÏ‚*¸€V’ÜfÁã÷:·Z¨{7ÚU©ö8ÀzúJú/=DT[›¯»sÂï_m®­iUMööÖ—WûûGZÚûZ=}`¨¹­§¾Ùg´6êKœ+KË× i~ñáP81­(1ÝT\æìî Bð° ø¡©f²SçÕ€¦Á%æÕ>3TC£Ò…˜ „Ë@¹«¹®LwBöD8»¸Ò½° y¦_ÄÏüðpinî}›~„A=þp¦©¿4„e,-]IÏoʱ&¶+ãº"öó(±—¢ôèºÒmùæšÍõu0–¼¶ëcÒÀ½ÔÖü8¿IFÀ9¡tÌO1µ•»zžqîvŒž: Ýe2àOV¤fæ‘Äg‰±hw:!° õW6õb ioâ…œUû0AÍKlu•aBDX1Ç pþåë §ÔcÁ Ð½—>I¢K;xè§?«Ô³¶º¡Š/I|Æ~9;]XÜ4”·3ÉoçRÆM\ÅV`] °àHXE `•wçX¼‹Klµo°˜§>e…T@«9Q¶/¶ËÝ1ð§Ä¢{š”¸rks'2´z¡íÀ´)±`HïuMàN:Ü; ÊrÓ„Ž6Èoܵ„gþüÌJݲÐI•"i…Ýp 9‹À@‚*MO«¬Õ%hu|'±Œ3Xh’¾’£\M̰ïú@Ä’ÉËóªñsËvÝôÖö®ÿ}_÷m–#!¯æÛÝ,!Ã’f¨Ḻ?ÑÕ?Ö9ÁLäÍ%»s- ÝK·-.¬EóåèÄ·9u¨h¼ê!¦}ÁQÍ©<*[P]ÿË£#rS¯I !=2:›ZàB}Eodæùƒ‘‹´Xèª_*Òø×¹( ŒUêáëP?àAŠÙduîïìrßn”<ßÙµÕzô 2D({>šÆ„)Ý ó½µŠJÔZÔIà´ÈGãäW¾QDÙRÊ ?+Ê6ÀêuD¨ Ã5áPÃypχ\ÌÁñyZŠ!¢mˆ3X¾h&ßß›Ÿ(´6f‚ã·Ø ¡ÜXZX×[Zèxi%š]»â®ÈøCV¡rSòl}F{Ï_øþÅáQäTô–(áÂÂÆìü†£¥?­¤5Mä[ ÿC\E£«8ÀЬ[,n ó# ˵™™E`Ä¢,Ñ϶ ß„èÍqÌsväZ%+¤Æt#ˆ Ö}ý÷“Kð¤&`·½¡–Šž S=dì±”¿¼Ý¡¾à8©ÿuO—œgÃÁYzáܾQd“|›['Еô¾ ÀdiÉ)ëV.V²q\X-´’í hXï °$}źž[339MˆIgF0ÔÙ¸—^ù´ áYAk("ð“>dOº©• 0Ý ~Š5 ÌäZ¼éŰSd90¬ýÃ=0§´5I¸õ°¥æT0^èö¾zVZPÖ„MîvðQW{&B„ævr'BçÙØj|Œ êØ4ìÅ4>HCeÜåùÔø§'Å¥%®Ï~m¥M%àÀØhx†ðߟ|lúãã¢i–†V?  Ã]#Ø©âüÄÐ$¸«YÂ) GämëγØ.Ö7C«8Àú0–”$.b‹Æ¦6,ÞõgõÛ½â«Õµ{©´tJÁPBÉ@óð[ŸÇ‚-d†’Át|ð‚x‡ÁÖE9£g…Mø2tö„>Š…ÚÞÚÓ—{%ã•VÜÒâÅඇ9Ž¿<+mó ’‡x Êð'ñAH¬ßòþ=ƒ8>ÆG”B–`uæŠÂLè êïaFʽhºÊ) ä¿’Ó¢q0’E„p¸à:Ÿ¸¾H( ‡Ç¯¸½Ö˜ÐáK ŒÒ‘ÛÂGH$Çlg{¬¯¯¬ï&þN`ˆ-J 3]P¼aRu ž&E€Yé§d.¹“÷¼ëF»W)™œäühïâèê–íØ•·Àº0= Æš]JH3ý!¡è~ZÙƒôŠo2løûSU‰ ý‰TÐp×"ébÒ’[Ö-'ÏBAQ³°¶tíní‹Ï·¶þ%¥â™¡¶hšNEµŒoóêè{tà<›?½Øl£¨&dï%ÑU`ÅÖ–Z] Cu–fB$·÷Ò…ÊZܸjk ì3øWl‡“ŠÔ*Ü•ýÏöÖNfã?ž1rŒ^ŸB):[š¾ê‹G…3mÙ¦zø§C$ÆoßÜ&xɧçˆ5ìäY½ù¶."ƒ²ˆ ]PY}&A¨D¶ë¡Õï`}à˜c °d½óA ¸·³ÑáQ–üƒíí :öü<áÖÔ÷Pÿ`²€Üjttê~zU&ô$N†À-øu.'4Œ£4óxAUÏÁþáØÄb^…VCša˜bl}é¨wk‚wþ{« ªŽG溃Sަ`’–^ê&bˆ*‹ ‰ÿH*mpû__ºÎ0?5uúÛüÓk,·Kì¾§…M|:øXx¢I|£¯ì©hì]œ[ / †&¦VòÊ}ºŠnܪ²Å‹u¢qÀ4ÀJ7{¸0œMîgØ*«›^i>æQŸSé½²²Â ‹p´»WÓàãëäD˜Dp—ØŠ<Éo O‡&2 ØæÅ±"„äâ Ïwx 15¬Õš(Ïuv•NKýý<·7¦,Þ~Œšâ³‡MwÝN3ÕKÂrnr’,ùšêN2cLÈCë« «òs•jž¶+¸P©Ö†$$‚|¢I ¤,ƒ«ç;Ï·7÷ ÙÌÀµ¨"’ö¨"¦ö.øË3pÆÜ®ÔO`x¶©s„"à-¾‚<`î µ-~z\)›ŒJÕdúücÉÆ8§aJJÄcƒë Å+Ë‘ \?Øe+"%åLðjg‘n ¨·RWîɱzs¬¹eÀÁNašàµ7 `üö·7§ä[kx¤½ýþäpÿpv~½¢>WÞ™mñ rŽG®\CW˜¿'5Ô§8ûCÀ”¥ÙY2鸭½xqrtÄp†àá_ÝÖñ·{~ÀðXž›­i즉Ʈ­%Àººký~VtÉ?“k%…½Œò²ßnœêR‹îä \ ³j*qò^°/Ζss+’³ãb¹ý֜բ³+øMº{³sHYwvE¯†µŸ{Pm¯%ÆÒ‚’à'SûìÂú*0MSG˜a(£4[¬%À,‚†Èä¡pôV÷ÊÊøæéøà(0432:¿¿û¼µkË`m% Ç Ÿð4‘¨…ïb«õn­oÏ\û&­ì~FåW)e®nèꚨ®ïr6õµúBõ­ÁÕ¢ðw«Ü§àš3ЕVÑÖöðhªhISä¬ûÛ;õMÞtc}I±ý#nÈ/B½ó}PæwZ5ßÓW±G02À_~víMRw‚ž’ã{ÅyFÂÄxL0zJ¤[ò{Í%fWüßo”.èé&8 1:ÀëÅžfýJ¬6ÒELÚ¼!“míú:­ wßÁ]å«ù“vÕ4r‰¢fKFG‚ -vôÐ…Äi_ML¯2¸hH!™œÙ©³EW‰¬8ÀúbÏôZ8Ò,sËüü*3ø¿ÀbO¹*ž9ˆùàç:‘3CATÄdaa+&ù Ö€ÜÒ&’ÂØiùYBV"Óº’ƒù¿1ÀŠöD05Œ"0b›hsÞF–©æX5ù§Jáù%‹ëÇø-øu¤õ8&ÍØüú»c•µŠrèù_²låéÄøÔƒ”Ò§ +·ØgwØ{lMý†ª^}EgAUw‘ö†i|#˜K€Ÿ˜lòv÷OCP¬¦Ô‰¦»—•Md„¿T4¯D" +f®îœšY†‘_HÌ«»—étµö' •”ó³×û¶Ö6$.TXçÒõÕÆòædC5iz鯦´BWž¹i~nõ?|CµÑÎþþæL1 ¯Â°Fa,5Ì…üãÐÐX²Þ‘˜ë 3@@™Y_Û‚·‹F?Ÿ¸È â*n2“’œC€V§q#†ëÔi¯–—ÖqL1ÔÜK-Oʯuw žÿrö=kcghht|t’_ŸÒFŠVuílî@µV¶ÞK«B2EŸqÊи4ª½£“,a1êׄ}e63’N##¤®=ô$¿IÔo–Òø«Ó‰â+°Þ `ÑŸ$ƒ*>ó8‰&»)7Y0ÿ"‹˜Â²°õãœ`qft3832ƒœkc·v˜È@„&)2ˆÑ‘Ìþe„+¿Ð¨ÿ¸Nˆþ{,)‰€4‚è.l¬ïW·Or+TCE¡=jbÈX# WÌŠU…ÆÝ$d¨ ÈZœãZ:†ÿzúZÒW@[÷:b/Ståõ®ÔstÕË ‹*[áQC¹GWÞ_)ÖÈ9Àª=X)%=ýÓ€rB„e. NI)i<}¡ÌÅJÃX`ÁGyõY%-àŒÕÕ­’ê™u˜i¦y @ÿåI‘½¦9€OÉÂ&&eÙïgÚžè]À”Œâæ S“¡¬mvvyogÿ“©°å’ ?D(mqnNòX’ âI4Oȳ´ýòé½ÖƒTQ è`Aî»hF1Äjl’•òÏÅ1Ü1X+æ%âõ›¯ù¹‰3 ‚˜1I+pþù™…-9€&»— äÉ©¥z·¿ ÜýURaNqm[çE]U<žÉXÖô‡Ç%d{h"œ](.£«K»¸¨–s—»¬2_Ž¥ýÕE¦-îµ»ÄÞVª8ç•aÁ8ÀЬ÷X&ažÆfš.H'ãCYc˜y!QåùWXl @æÙ‹Œ¹’` kfùÜ¥‘î>9µ0ž>Ü{î^Ì25@fd tõkâ*jv`Ù>€U À2¶Œ­0Ó5ø¦›²8ÙGâ¹ZR?ìôN–¸F ÄX1™û$eÈoA-Xº=^‚`aKxr|n%Å~jóvÉ‹§¹•Ï€/f-ú `Dî·½±/ßÖS䕜èJ¼X¦ŽðÄÊÞîsT·¼’n Ñw’ÆÄXy‹óÓ©°íùÇß~š™[×UøpÍ>×Åû¨¢ó(«Üë ®-¯(‹˜š¹Ú› sQ+´) Já‚Jo»·£w˜Ü§\ww·¶`°R0@p„p?h+¹ÕŒqô7»ÌZÉ+ª~¬oPBfæCèW&w¡¥~qVÙ©|Üvõ(:-þŒg^¯¾X]Þš‡gZ;‡¾N¯$×|O«jð/̯¶ú†“ó]˜˜`”ðuŠ/·{X84<!ø;±8ÚfW'‹ €*âTèTEî/óLò@©¯.è+LXD±] æ82x Ö'¶¬¶‹:î,U G'°â++ÂÉš.Ø‘nj™ž^Š´åàŸ*ra½Ð’¹>ÀB°BJöîA!<بµyƒÓS ðÔ7$ÃrËýTè*š¸RƒùsXp-¥ #¾©ÂÚ!•Ugiž™ß Œ¬xüs”Ÿk÷Ïêd€3); º2 gW¦].‰‹Ý-¹i¢JñKé0I߸MOæõÿõãÛ&·/µ°‰É4ËìÎ-ó 3ô¡\[€ó+·X…®xF,òëšíýÙ`™æ@­-!Õç÷„ä&<)]7AQÐcÿ×7Ž{B{?*:˜ô âñß$cËýdS00øó›¸üòö WKŸ½1@ÚT¦©©>ò¨ÈmmC²4Ö'kU(–¸«¨mÈ,¡«€Y„bµú«+ ÍÞ{)vz|‹:QA£ ¿L­¨ªó\Ê&† Sšô؇·h''—Œi áö77ÉkÇÖoÙßä÷S-s«fÚ&òó¥ÓýJ=À«³ûYA3&# 'bß8ë>Ê©N.¨£†Áz~ÉÙÈ‚)âD¾-€› l®®Œ ^FWôÄ0›>=šùëéy*.Îsœ»½(Y °hq€X1X´aU‹M³œ!UÕê^X\CŸ¡yêüK¬Ãå•áÑp&òêAoèU?cn­o“ÓãA†53³„°6)T0)ø%º*ºŠÖþ ,B„Dµ M«5ð$1TMYãðߟ,-oÕyÇ×Ö÷»¦rI't 赺x¡˜Xò]ôv.R +å‘£¬Œ’60ÇήWƒºc]ß“•.{vfÎ\Õ’V䆻¢äѹGÍ;øÈ‡^DB5ºNÚ4À™a’žiíJ/í` ÐU$Àâ²éíý™åäÐõ¥[ºR;ԒL§ì-¡å¥Í®ÀdRa+¨Kú©ŠË,cXã–Ù[::ýc“­mÝ“S‹ÔÒÙÞÜuûFdeqð_¡­³¢®kzf)VCõö>aËóóR ΟZ‘™ c$Ôo³“SYù•÷3ì„>`IÍ¢¬'­yß[;(är˜—$Ðáí46H5rÐ@i± ØqmÒNÊMP%ËEK*î‡ÏK]Ùî&[ËŸ’J¿N¯JÔ¹È#aÔãDŸÏ*m''”~ÈO ÁÏÁ½óQ¶³;0ñö#~¯´€0+êý”ý–«@,…„.=^´óm £Œý‰Æ{ÙûÒ€ìVg‰«/gfV¬Î®$£FMï…]NQ`ÅVL5XïYÕ>Ò\_T©I4–×^‘»¹­P "§Dç«Á7ek såM#†ê~SÝp`x94±VÞ4VX£b…ᘠ+u= `Aí<Êc ¿rÂDŒÊéúÊâÒUµÓßßžæ›5qIæEù#Y™oDS4õ ( Ú‰½»tÔä˜F¸ô^§glljmjvÃãŸé˜Ÿ^ÅQ½¹cØ?8 •#ñªè2ÇRI–¢«‚Â1•@a0ÂCË?0A^z³w­½Þî×L­r+$À±Œ}²@ ëÈK›%e”p´·k±5ßK¯âÎÈÂÏzéÔ Ùv³cyjhìê…e”9žä$­ ¾ “ø“p¿”FÝ ci?qGE‹¸ž=p6ÁÉßY7á&œ&æó¼öÞÏN]"ÄU$ž¥üZIu|&sÉEmæö Ye]ü ü¾’M.¬'Ϻ³glç92¬Ýí}œu/ŒpOÖ×¶gYVM¹Y½šÁíœ$æ5Â=XCWÙåÝe®^]¹/4:/ó·ŽÌöNÜã2DÉòˆÕ9ã+°b°`äoS,z¤”ºKK÷$C}YMëûã—Ÿ^ƒ¥fFY»§Df:æÁ4õ|d^FfËtÉÞôN´z™¨º¥·6×»äjô«ÔÓ0º® ð+€õÙØ4˜Û$Z’¤ŽÂX:ÍéJÒûÊÒ0²±±OqVGÛ8²wÞ¢H¬÷CWœ!Odþ«ë×p‘dýcj¥ÚÓOBF½»¶ú×N¯)ˆÄó¼`ei¥­½û‰ÎI°ƒ½¸49“¼ ß‚¹›ƒw­ŠÐÓìA>鮄ÙÖîôÒÎ43eøú¤-5=‡·ÛÖ×v:#Ly-›Ñ‰E‚,ä'â¡äðÚÝ»Pkq†$}í7Yog•1DÂÜü•¤±®ÎÇÿ³²‹Xd¶+˜­”¹±¥@‰ü±ü0•Ë‘r3Å[X®÷Èè—g‡'“uv0±›œ‹º=0ÁÜ(î0µŒÚ}C숖Ŝèá´À\qFvb!–n$¤U°ñÎÀç$ä0žET¤ »mgs1;ŸòæõkIbñ¼ nB{ó–Wâ2ÎâQ¨¦LȤ¦ëZk|sêHÅžŸ™_wyÂ…],Á”"àWkVi[AE»ÞÒ’UäÚÚØŽtl†f“‹Û±ˆ<¡w,Z$´RÄ#:·ÒoiᦖF…’‚†ÉéÍ×ãDÆ©_”¹z`Ñ J‰Ø°æ]‘ìx`ÅVÌwjTöK™mÁ:‘\Ø\Téé3å}ú¡R?0ë1­.|\Y«ú8æPô¶2Eè®ßúÅÁÑpxZgnL)¨O7ÃL\Úo¨»Íãg°¢F]cl…EÈyž`$̺àx´hp´:=¦º/x_€¥ÐÕˆ@Wþh›>Q&ypaë[GG'G/š ²ùüI·Ð r,eû?ÿ42<žWR÷4¯šÝ°Õ²ú$ µŠÉ Å+«¬'ÍÒVŠk(Åûz²¬Ýx_¡”Âô›ìšÇùM Ðlu¶÷N†Æ–ŠªDó*…öˆK²õšjN÷ÐÊÚ6CùHx|9¥Ä‹›ƒBW*K€›6c1~ ˆdk~|­å½° *<ÏŒîlQÑ`뵸³p1•0Vå«1ÌU\FÊ·A]|Ù‹gÔ0~W¯O¸D6¬ 7Öµ€EHRú@ Ê(óÓÓÒÿ":ÍÌ´²´™,°6aKÆâ¤Å’4ef`n¤úYFûáÎF¼8šífä‚´ ׄ©)Ÿò[H‹—a¼$µöR Ƶñ'qaž_v\9 7w_Å1_A¾þùÎv¿?035üŠKݯ¯ Ôî6Ù}á±E:ÏO¯¿ÿîð‘%Ì ³= b’d§ûK£x9n#H*swÈS‹:ߥN¿ÜT mT– ´h*£@øfû]žÑòÚž§-†ÊLJu)Ë:Îæh ¤š<ÉòfÔD¬8ƒX±X4…ýÅJ`‘`ƒ›RØT^Û aË|úéC„œçu”˜ï¢ŠØÄ¾ýÊGd’¿¾#À¢ÝæúVW`4»“IM[“ïÅÀ‚«Gïç"”ÇÈ*²½ƒY˸!„R­÷XêsGd0"J´A|\&yh$S<éuú²6¶ÑOòìÓ­•Ž,èÏ{t¼4·835;39ÃN<44šm¬~”[Ãn„?ºæ$‡ ÊìK.ö$æ·$äÕë„í¸»£ßãt4t'j –f,)]<<296>?ž-h™;Õ@xarfÍâê—;{!‹$½ÑGh¯ª!°²ºÍqþ_¡«Z…Se:°V$¯¢÷Y¾ËV뙟ßÙÚÇ¡^ SM‰¥Åhºàª‹*ÛÍ}ä½îmï³’I^?÷®¾‘……µ¿½y™+Ãü}k}ççNÇÆf—Wß¼¾.„ ¾ \ŽEí^ð c™g¦§¯1I+üQ·Ö7kšºçÖ<Ì­KÈkxQ¤wW¶Æ –ì{`9š"ÛÅk.äu²qL“£6>chÜ’ÉW·]C ]Ev{ÚˆŒK%îêˆEŒ<+h|”ãLÖU-Ï/TÛß?œg´'dYŸäØžæU%åÙ“tÕOôuä£+` Å î¾®¾†³Ó Ïwö±í ùÑþs øÞö.f§¢’4e›ÑšHá­èx´“¾þIj- ?w‚‰Aµñ(*ÑæÛ`àzè'*2‰;#“Òy ¯Ï4·§è(`Àg|5¡dêá¿:‘¾I††Ü’¦\sÓ“<ŽY¤¶üã—Ÿ‚CIúšÇ¹6]i=NñÃÁt›!P{œS!Ev‘³¨¼‰*Ô\ð5)ºëËšç˨€ ã–HUëû­aH$qmu}ph¼»whnv‡9àÝÎæ6cíÆð 2 èÃ& ¸ä³ðZøœñÑïiEþ)a"s®³lù€b'BY/InÎÃòM¥*ãñ]nãgïq7^á˧'Ì”4 †¤H¯Dމò,Q¦ô¥!PÑ;ö"’·7œbòjFqªó ÊJÆÇA]2ÛTȈ»¨AΦåøð…ô¼è+ªdâÎ[¡éÀ0ãíjŠŽk°â+¶KP"óZƒRí‰Õìí{z[Ý7jSж²«;‹ÀŠÜª~ÊIiwõÝ\ßih ¦5C9°.^ćå}þÌ,ÕJÆÓMð=Dd£š½lZ†hé<šeÇâ_¼F–¾GŽÃ]½ºBY=rIb]@MOÍèÀK"ÙØLè¬B{euKbfÙ7Y¶‡Ùö„ÜêÄ<çc]å AWˆdŸ5²ê~¦½7Qa«È"-J[jª©³ˆú*ÚšqrÝRô׳י%îôR¯,©$µ\²1* Ê~Å}VÜñýKò^¾È¹Ci•ÿ©ÁÅê®âXž­À¡)âÕj„踦9HÚ<©^D·M¶vå µ`ÇļZ<)R˜hh ”µrÿ “¬ûÊ{iÖ²&* _ïK„˜)zCA#Q¿$Éb…”¢“ZÉ7`PUÌçA®AXPಂ˜£`ž€wÀ/ùÊëmܹ ·76R_©ææ»€¥BKV(zu|¬ÕÚÞæOiå@û¼ ž |*¯õe—¸Ó´7&gì´žL°ÿ)¨ò­î{¶„\' äñÄà‚â"Ç;!·®¨¼%žŸ!™ôì²v›öòöeXÇÏ/lñ„׃´þ§ø iðt%¬.ÅLeSñÖ Bn6Œ(qUy#_p §2c æÑìˆ è¡ÔoáªÊ“šÂá³Ï(ÄU¸¾-^§]pnø#0s,ì‚.’y}s]ó k—ÊŠ‡¦’‹ÚA`ö³Aè$ˆd”â`â5×<½†J_NiñîKÄx =%îqüô©äâ6½­OØ wÕÆV`}D€%ŒR»[Ò á±YD¯7Nm²*³L«ù=,öšÇâ+¼G¥ F¯§kØXÑžejÎ.ï’ÅÞ•v2°n,Ò\Ñ·D“Çê6šÕ„uóGŒ- »Š]—>7c©ž®—=ÑŠ\K;†„¿¼9cÆ/¬ôè,nKµ¯¦9 ³¶>Ȫþ:µ¢ÜÑz°»§ô³ï϶*ëôÔÕ6$IîÔ•(í´ºªæ¿„YJOÉ‹IÎæ×ƒ#³KË›³ [këσ#+u“Í£:±BÍtž7ìáçJkxî3t7E+08žX¤ ´Ðœ5%꜇÷¿~|óúåuË*î* ›«¾¦\tÀŠuS"0  ˜Ö_?ùuð–'ÙùÅ׿È8?3çð•eb#ßÈ•õ™Z9¨ÒãïÓa7J-xè\‘k"é+6N |:==¥Î¶ÁWb¯ï…î1Ì%ö¤éÂY(6"σ”Oß!?î<{^Æ~†´w~bF¢,­¶¾´ðØ|kçsûS}=zy‚÷Óɹ9‚â+°b°¢0–R»k„-/KÐÕ×¹ƒˆ¸o, ÁŒIº/û,ÆäÂÌ ôþæ_ôä[1„ÇçsÌ-ŠI'–JÌ[Y7)€õÿÙ;ï§¶²|Ûß¿ôýøê¾ª™ÓÝØ&ç BB˜Œˆ r‘sÎY`’16»Û·{¦¦îçìöÈ:B$AóÚ§j—ê tޤ£Ö^ßõ]ß¿n±çÀͤ Ûùm—,^à3ŽØžê¹+ÿ¨cyH, °pš6·¾‹ü\ÌÔ L µçÞžŸš–î·÷·Tâkc²D”™%ǦÁôs/x»`ø<%w”Þ_ÿET¹C^ %l·ú“„Š+½¨£­wš·ùÝ6|˜§èaŸ*/ͪ£õF±¿'ìRZ7ˆ0™ýÕÄÌjZ~#ñ²ùBSåm¨¾”ø0ÐM G€_ªT«’)ÓaJoòìº4Ü•r©'¥×( Î)ÒH-HaÄ¥¶—ªÔ)ÉÄ·,ÃZœ_ý¿OLDÕQ+2$ Ìyè«!iŒGú-½ÿžyÙÆƒ³ÐþR?ªÍ5VQ×’hȬeHÎX•°ÑbcÐ50ûIÈi¼˜2»\‘âúŽ$ßî¾ ÷æ¿>sÔ¸67¶(Ë“`©ÂC‡0¢$Ì´ X^«X&#‹ÐXw’Eø•ìW)9Î…¤³Zl­ýÃÓ++›L‹,6,0©  Ç(ô×X—·À –tŠwŒpÿ±"Ë¢{{îä¥èŠ×¨ø £$‘U›mk×”ÇöVYÂâA$PŸÆç?Š/ Ïðޤôê0–X>û"U$DCW€'ƒ%HE³Ó%†¦M'†ãUÏÇÃoÑs(ã㑦µDjÕ´wÜ;|`½é‘¤sÈÑCȈ?ÂEº%^þàÞ©ô€¥´S7(›È„g©dÚ|² A‡ò-Tó~Yj‰¸¤Fà‰„B\ˆÿ ¨Xª¾2 –, *-9€9ƶ-R¤ÂÐßhÀ2Ø/-1ÖÚR\ÝÇž\53·’ú²>Î\mÊoÀXdaqÝ\Ô°²´þû§KËë)Vg˜(5ÈÕ~±pC€a”û¹ë á¸&3f –°îK)ÿ{ØË˜Ìr¶mDLôi5Ì;A 25oý‹Ì¦¹í¾]ŒÎÆšÊClaÕlôÅèuy«¯”¼ýêK –Uó†ÀR–ÿ:<à$[´¥.Ó£FâQþËo@U.S芊ËÔûC÷]ß6rôú |-¿x`€uëÞ®jžtõŽç•µEšœQYõXŒ;)é•Åstòvĺ:¶ÿF¼žeIjä%}¥°×ñ¡ÄDóRÍ ˜%‘™Ì§‹Š‚Ó-Q–:{MÆ z #w[ª „ê¼’¹âä.ÙÞbGϹ&™­‹ò;ÇzJž°×ìl€ [[\ÒÈþož»òjG£KÏÒj¼ª ÊáH¢X2‡ÝFVIZŠ+ë ]N>¢J$,XÕ<º¾¾e.nMsv=RtX¬Éó*¡އïÈŠ…Q,­^nâ?NãtQðûÔcåï ‰-V‹°\8Àò¾i;Û»)¹MìEéK‚æT‹Î)·)%ýí½ó­=SéB#E×ebU);q ýŒUé  ˜~çRr—ÖYƒªú­¶–¤œºéN\£2«L”å…¥œL<ô>¢Ÿ3Øsl,`ÝSˆP>z§VÉ-ìyúz®6ÃÂûGdÞîö.ó£·ð盳,ý<%–P§Þg;F©jcí7û‰Ì©©™%¼Ÿ¥VÆXaž¥k‘X½´Ñ«P‘º«WX*Ê“¯&ñ‚Fˆ00À"&Ȭʯ`­œÝÜÝ9ÈwŽgØ/”„ÓL²ÒùyJ%n:HµÐê| Úº(ÉÄuˆŒtÈ¡‰‘‘²ªÖ˜¬JÒ&L… 9 lßeeh0K"¡~-¦´ÂS4¿=³ © ¬²niÅñ¬4¢˜´DZé¢>´ÂX¢qßÊE²± ô)¬†D¡RKIÛ:úJF#®¬pbtCwíllpŠqÁ]щÓÝL±ÀT†_çä"-Áò2ß×ÿDá)D!3~ h¥ŽÙ·´÷L†™êé’é§¿)€¥"Ô±Hýr;ÒJÿ#DOÿG_ÕÒ5Fª ûüoó5-CÍ]£ÏR*ÂM”Õ¦b­~¥\EÆ¢÷9OO6–°î `ÆX^Õd]²tTVíÏ1%½Sl»Õ´m~é¦-ð¥9²ô¹&þrÏK™÷\”[NÛ{µÛØ6ø8¾ˆQû%ò̤Ô‡v–Æ:áÔubÏìŠá…å­¾ÑU³À[ c+0Àb†¥,tNõØÜ¢{{{ßÖ0™Qê[cG=*šVš’`ï91µB½¿«@+xYœŽETÖÖRÄ5¹øæòÅy>ñ¯ûøþ`{«Ë5”‘Wg©Ñ¸ÒóH‡Öåhjx&º¸eήùÙ…“Ã7¿:ýt|ôjk7£¸=1¯59Kn{B„HK»`T­=ªÉ£* )ѧiZs¬¥¡{`š"¾~ý½È¤ \7F¿]Ùz&κ‹ˆÿŸçj,^ °WÖÌñë5¯% wôït½x‹™ÿòî'ß~;<2–Q)©,`VjIÀI2˜â"á·¹µ÷Ld­«Ó‰9Rï¹¥{Òjïʶ»Ò‹ñjŽÓ²Xº4N‹&6úžÖ#$Ô$u ÒKX6œ«¯b,uî-)oWKŽeF ›¦Œ”ëx|¿ç\vSœ~‹)åô²¥O¹häØ, Üù" 5è «ÂÅT°`æ÷èK†ëüvî,.¬¼=xÃjôŒâŽ„‚®4QëÂ`yùåŠ&öö’ÇÒ:|~[KÇÈŸ>îïîç;\f(«6((ø-:ªêÆ—â*5ËX÷°ôKGe)ŒÕ Ô?ÇÛÛºF™ÊåtÖÖÖír .Ì/ìì’6"q‰¾11½~õŠÅ‰Úõî•‘=1¯qv~ +Ùwwïzâ3èB„ʹ稹cøQ8]iè*OCW‚èîg$+h¥CW×X\dPÖ4•[=B¬ÐX×XBVÅ–@M¯ø~e©¥ÔW°8I…ÑÖæÁÑy¥+º¨$XPa\^ÉÒ(Zf~°ÖQ‘õFµ?Ñû’SÊÐRXÖ,E$……„*Ϫ'‰ö͵ ½¶Í õ©ÇØ‚¥K+hÍuôXíÝ™Å]l¢­-ÞÒ¤Ä0b2”YêÊvôZË{2‹;£µò#-Ð{tûдêòÚ>.o­Æ2‘2àæ&yyùP¥o}-ŒÅEøîRí´,BaCEÚ ˆçä26/®Úæ‹cR¾rÌÀT7.©Ä¼ô9=D®Íêô……Õï#ò¢²°[T^y ]ÝÒ­J¬1.¥æ´2Dî&,ùü¬2/€¥šBWeƒrgÌY™U`úÀÒ(Ð;HVÍ;ZV¸ü2ŸߣÚÝZßè/«q¡My‘VMû%¶¨£s€!ð GÚh™°H©ÐœQJycc»wp¶²a†î™çeulÀ(_½¶â^XX#.ß޾¨êR· ðÁ‚\…÷ cPí¯‚ÂŽ?rÃQ€µ°ìÕLùyˆû‰¿7•§Ç¢Þ3*û7"VøÃ,…J k¬¯¹ëÚF@H =LU,#ÌQþ* GND&ìxÞ&æ¶$ÉŠ„6Ï·L«ügpë®±S™48Víë,eÙªø4KåùŸßÀ¢ùÑŸ¯LÚ֟߉â¯{;{2ï'­ ®íq\QLzñÛý=¿žXX9@b± øØ.3Áñ¯Ûc%’Ðcµ7š`Õ½±=?¿2>1ß៞ééïî[˜_e÷Ïj¡Õ:>¢ý£×•æÏ±%øÅC_Q'N‚®Àê`)Å€Ò¶6 ~',_ó6~f™—€¥*Fs¬kß*‹ÅqQ7â.÷­,=ÆJ÷ †fÔºú')R‹Â#ÛÖLÜÇñ%ãò[[]¿:ÓOè€åO£Ï*ºe57¹/' ,… ’Œw²îù—Ü”ìîOM-¸úÆ,Ž„âŸ£ó¢3ÊŸ%–üUðCÄËØL‚Ks³+ Ë•µím}|#‰±p=³Æ¥åV./,}ºõÝF‡)Nµî°¾ gTbˆ@gþ¼º)?Ö¥™ cíº·fæ6„Ò”¶'œ,‚U¼R?y>d€µå~58<=<6_âìÃË—åC¬°ôË’¥Ê]=-ÃÖ›ZÒ«LFüB+u`0XÁc°Æ´lbo>ù4žü/¦~ip¬ZÚWô¿­'E4Ö'‘üÙ÷m,] P³4ä†(Dü‘QØ4¿°†–vs}Û^Ûmª I´%eÙÞ‹¢:úͺtXº¯ ñ ÷†{`p²¥c0ÇÖkkjlèœ,¯é꜄´ÿç¯g|HŒ#ÓËC’ʰa|‘Z‰7]¤©."³&$©<4ÅžS\“l¶ÿí¹ù‡0sGgßïgåêBšquÓ hRs"`yJ=èÐÕÍ,ÔLa”ʹtÂRÁA9 ÃKÑ«™|©µ§ÊÂp@“ùÞäæ:GLž¼$OUœæ”ÊŠ†þS/q´V&E€ªma5I<è®kžð¬ôôá¾=9Ñá¿@ëŠm{k»£{„‹+ªiÛ½EˆŸBª/ЄOººÍêÎq¸ÿº¾¹÷QôË¿‡YˆÈùïSb¦mcu}K3÷Ź9`jwÕ@„»žc˜‘êó È|£«oà(/®³äÔÇçáù·ð).í= ›O%¨22‡$¡øC„¿ž°c¡d«O°ô[z±†D‚ð Û$åÜv±øuÜ\yIc&á"`ëÒƒ%mÆXûX­|;Õÿb>õLýc7nò'ü6–êñ «s>@ø_“%anH+lihþãÓ)seIeWXª=$¾`me 2ÉgÌ3`úÌÄ¡Kã×ïÿýÛ§ÊÚΉEÔ]þ)ª€x壸âðtÇO1Eiå•õÝ=ýÔf/ªh+ttp®ÕRÐÊ]ÑZ8€ž¤ÎÚÓIJ§IeÔ± I. ‰ÏklqI‹wÁ…’¢î‚ íæ»s¼Ðí–šbüÊ K?ayƒQP”Và¹lÀÖ0žRÄŽó‚^µ›JÈïní™Ã}´¼i<±@Xhn#-!©UV{< A®WÁ4ÐQer«âoî¼ÐxE`Ÿ¹k¾"9«tÛ-Í@‚¯«ª›÷v¹K42ï΂Ãê5µ Â"#0xžb§òéßž[lŽú·ü.4ÜXä>&¡O¢ä}Ñ8"üâ÷U/¾Jígíä²SRØÔ½ý´ÀU¼/T64ü7Ðõ+¨‡ú‹ÓWeˆvnjŠûPCJ¹¡ù¹UvEYZøe°TSÛ'%ÔÐï?™–“ 4Û¶ËZµI˜üÀº´’ó;™c-Ú»èÛ˜XA"Ÿ¾Y‹&ýÙØ=@@P%JË`ÊnzžVžîlíEºD%¤lçáÖÂÒúµ•Mât -µëb?ÇÀ º:Böû~yeeUCë@Tz9š°ðLg”©–²ÿd‡QŽƒˆ¬šðÌêhs-È)ÖR›Y„á¯ôüíÄ H´N¾ øÉ3H ­œýãØ¼óÜF{{csöDg7ÉBYêÁ¤#±n °ô×A`d¬‹–RÂÂQÅ[G'×67w_Vf•öåT Æçv§’ \ÙåýpRïß×ã·Id™-ÖÍãÛî‰X8Y>Aÿ0 ºœ¸;w¸`±âÞƒåãµ^ÿùäCmSwYu›,>¸¹îvTÔCÃÁȰ`P<ÀØ ½ÚÚ±7þ[šZšVÁ(þ%Òº´¸L˜þ6[/ˆIh6ØA~bßaÀ8^m&ƒ¡(®èCÁ;°æ§§Á=œîcýE1l>×ä‚ÞæƒÒh>Ä•,DÍéD?¹øž`XùŽðù×(Þâab¬Oôó•ÍäÜz¼?”È=ÀR…Ì3í^ª‰@ž8ãLã©ÂG÷Ò&dò¼¯Á`]é-’ó;H)¸èÀ ÀòäŒò#GØD[¨æQÿ$¡4$¡deÕ(dlbñûðœ#­Yu;[;0[*Gr ¯Û,ï8‚!£òtjNer¶óyJYX†f£—Ó„‡ÏÛ$Z+Ç4HNVV@ LýÉ¡bÁŒ7YÄ àE‚$׉̪yšP²»å–¡ ‚Œ­®ñµ 1N”¥‚'r÷ß? ë –,Ã×m©oé™y÷úŒµåÞ[Øt4•5ŽÆ¾loíý÷—³Á±%~YŠuª¨(ô’R²ã]Ü:>·%&»!:£tya©Aî†)AQêÜE†°÷v`Ý/ÀòXà–ôÅd×OͬÁyüóÓGÀÊâòæú$Â^nE¿µÌÕÙ;m-65vŒO-¯¯!7ÆÕÉ×(A Y(Àºÿuññ{Ým)¨™™]ŠÏ(JÈ(ÿrvÜÒ°b[›¯ÌE-O“‘¦ZX†óY|ak[ïÁÎö!…”ÏÍ 1ç€f>\½è¡§Œ±Kv„$ÙŽ)ŠN/_Y^ÿ|é+Ý’2½R£çKîZäþ`–ðÝ{Wø(®èIBÉ/1ùå•ÿúü)¨÷ „„àÝÐèl¼µ>4Óm©C=‰žòyZÅwÏ2s‹ªÞü~v†E0 êÏghíÇFÇ•õÀ K¹CA]å&Kow Ìí=B}P ¤%l üä¥ “ÄùïìÄ„¬ Ädà'å ȓނw%Éšœ”0”{%Å£¡ó@OêµUw†$Wd@óÊǤÝ›ÓñŒÚÝ/ºBz%5>A`ë¯ °T÷,á;ZzVò!>»ÎQ×326ÿ¯ß´ù×Õ?’ì`…{Wœ‘ëœYÊô#&Öm¦-Rðµ²7¡»Šµ6£mèJ°Sþ!”þ?v²&è(»V-˜H"߈Žû(:·¹k)½i‚ r›)ý–ï®n4—õåW æV*Ã*ƒÁº· ‹®4X“?–ù dÒ`UÙ+ciH÷ |üslqYU+ JLó›d— µ,J)|/ûûÊR6þ@Ûñ»ÜÒ–GÄâ“ìOâm¡‰#CcA Šiwaˆ½ŸXJÍk¢tk0º:¤XÖ=K. OÊ·W4´·÷:œ­Ö2k>ÊËò¿¿0eT`¹Ø ŸO*sDN®ðadP…œƒ¥å×;Ë a³ffˆÄ”ž0UЙ0RPh2hH€’GæLôì>×Ak%c‚R¦º8 &ìÏX'çŸðˆT'[¡†Òh³VgŒ©•GD±¦²A9]ëç%™¿RïšCPå3©ËX}Ëì°$ÑH¬|Rß‘‡×Gg9Û‡Ù¸ìîìå9:Ÿ¥TÀöÿ UíDj3 [ö[&"QY½¨¢#ÜäŒ×|» Zz‹Žà*_£/šˆú{Œ(Û1¦O°ÔÈø&´ÙÚÚÚ,Ø2ôò´Ô’¾¢ÚÑüê¡,ÞT`,`Ý'ƒ¥¢„c°e~h›!:”V¼Åéê&r}z……µ Y4<+ í=À,+(k$ǶŠjQ?F¼HqÐ(Ë“j-ÿZ»?AÄX2Ì-®ê Kw†›4k_~¾'ñE˜Õ¡MÅØö(¦àQlÁ£˜¼Èô²È4{DJÑ»ƒýOê“èp P•:—å˜×\ñ“à’Å4%áxÐIõø^Àzào¬§'¤&GGƒ,*íðÕô¬*Ÿ ¨·Š`­þé ŸV¨Ù° I,˨!ýˆ5å®L6b_d%h"HR>ZÔ%'Uù`ëÓ`fD†¼XÕ´<Æ]<ÚÒˆQBm˱ÂúÖ¡Gñe™ÎG öš¦SÁKeÖ°c,NÁ¥}l|êTñÒ›ê¼8 ¯Áº¾é”’þÜêeÉÅÂ.¢K|ÓÆö¡³wÇŸ?S"÷EFÝywnÐlï3Ñ<%™Õu €u?F£*¶+“¼`¬ª†ƒñ©iê;9: ¬üãyoí0¢õ•"/ꬻX¬¬»º ùk¬Ùoóì­šK\Z%ëi|aum$ÖÇwÁ¬Ц~{s+¯´9ÊTIý¢âê>lêž&–Dg7BháºÂLÒzžRšêèœNÏ«{WP[ÛöûéÉÿ|:ýòñ#¹/BB®©°-ØÕr$FTf  6çe¼UþÔgYBwÑNî¥Þ<ÇJÿJtþ„ÖoéÔ4•—‡|Þ`©à§Ÿ>€!50¨d$K{*²íIÌo#S*À„Éþ–ÿª –°¾•¡vn娹C_ÕCä¤ wl‰± Ùzæ–uýûË'¦)SI;9AÌŒ/’í7¸×·±r`vCïrsK÷cŠ„|¬oе6Šø` ¼TDØ_å_&‰ÅeŸ§–ÇçRu±±³g’íuUóP4&.¸<ˆzXZõZùµrØì)tch°î¿TŽÄX4‰±À¾²$yLNKÊ˺™é92.…/>/`qÅ ›x ›;UeqqµÙx°2,ÚÖÆ+->˜^ Ä¡BdjÉÈÐ8¢¨àÞ&‡Žžñª†~Æx޽hEef;70V8“‰É97§)¾cÍUOKŠÎ}—Q˜i-«ªiíëš›Zš_ ÌÑêâüǣócÐóÛ÷o^OŒMMOï¿ÚZ[\hlê°æ—iɤºš™›"åYÁ¯{@Zc¡ƒÇbn”Ù‹*ƒR[žc©ã•>èŠN ¦\š›ÿsé+eóq¸w`)¬È¨!y0îe[|~>Àñš]+¦ÊÒ;ÿyo†¡°¾=€•Ý”jèY!1Þ5´ àðæ±^¶9[FþõùìäíÛÎÞ©p‘DöõÓDûá/)´ÌÆwmiñè¦ëËéIg÷hxºæÎ “~¥ªÂ7·ùv {ÉÌ!M¯¢ö*ɹ9övæw¾ VѲ¨×V7joãe`,b”æ²~3'Þ `ë†Ka,Y¶Lb,O=òŽHs£µ¤y}EËZ¿Ù²Ç ‡P敪g|7mOØ‹?dnIÀt6  ª ÏcUS,!ÏV÷ëÉq°We´D‡ãs§ïŽÊk{ÁUØÑñH#:aª!Çpxt_®7{¯S^Ö"ñ K«Âž”̆ÄRÒ–©åðcdÞw/²q„eLÊ}eù)Òò(ÒücxÎa9ß½°ùC„õÇÈ—cò¦&&©â¢÷m]퉲÷yŸé3;B„‚F|ïC539I?Q;L^ÉËdÞ§sÊòÂüŸ^6GÂA¢„vg'â¦M,šÍöîÙE÷àøj´U ;d•\‘£2,`}‹‹4ºÊÖéƒÝƒŠ–)ŽUhÄÀÊ(la—ùÏÏÇ&Ã4'…&ä7Õe°5ìl½‚¥‡ÄÂOïäú‹ÊŸO5줉 $°útë†Ü`O¬%‚ é€ÖŽËm&X.=ìmìžž[ϯä»s"ß=ëë褰îaÂÒóXžÌÖ®¸ÜVÄ•uÞ¾¹%»@ Ƈp vÝñÒÜ”É!²›‡ ³h««nÊI…gâZ‹·°¥°æpwW™µ̱õÚ\ÛŠ3WA~ÿ[@F!ªI_ML-ÿzòAZq6v ?Š×ìI§pälá<­Ë:j[ñ<§0íxZëð/+Ÿ$ØGeÏÎÌÂqú„‰¥ßŒ0ÞOÌ­-,ÈòŽÊGTµ­ÕUDW ÿÁr!+ôá\Ѽÿ©±få‹ñîÙ;ϧ¶²mÛßÿô}x^½ºçž>ì¶169G‘ƒD’„ÈQd‘„DÎ9gã€1Øî>Ý·Ï ¿½–´¼­± ê¸UµJµ-#i‡ÆsÌ1gçÖª›úƈ|…ts—w|ùÿþv15·‘Ù¨,»–¡R y©ksf`…V`ùñ0X —¦” ¤‹²Ú?ц£/.siI……qyÍ™ž,¢Ž†ÞÓç¾ßM I'\…°‡jMB‚-ëL“Qx©,ڨŹû…“b;}ƒSäÛÇæ6Rk'aH¬“CÔî¡Rª)o§S*!ZªÑ$šly])…­Yæö‰©eЕ¼|vhω@U8Ÿ¤k¤¸*V¬åL2ãE™Ñ­#°ñm²(ÖÓÌê {3¡I Ò¥¥¹9` O[)”æwÆ`)ÆtMÙ| Mj6mžÜ5ÎËEW!>¨\tV#;p]àB¾áj…¾±q|ç¦ÐÕóÃçd!­b°¼Ñcnà#¾ìEº QXwÀ`)€¥è+òü-vçëçG!±´V~•¬¸(ß_똃b,šŒL³xçaýcqeMåà¾`w`scç礪˜¼&ÐÉ“4ûFäÇeWÏϯ’Ñj÷Š³Í•å‰ÑÑó—/þxwþÇû·¿_¼%EÆ?WH"çô&B˜*²÷¤­Zñ®# O–YÖ×Ò«šÚ&iÿôyt2w=35<Œ3™«šûz]Òlv7¥¾¾óÄ%Écå×%ì~y|D„Þô7±*›ua7ôôOà€L1‹_T}}-Ì2ö@5@H†XYÝ|’\ñ$½Þ— ‚ƒ¦Š\š‰ênnìåÛûã œ,¬Ú‡`]½»¾S€UX׊%ýµ–Wb,M¥X­Ú˜l¿tq:zJ©¦=ýDçµU6 Q™¤×=ŸX¬•Ú• #2jȲ>Ø=`}yxÈÊä—U›:ÜÌòŸ¦^^K!Q]@Wì´ÄÆ×/µ´l…s™š3,ÝyÕîë@vÕ@f0KÃX4‰±R-`£®—_g+Æ|‘o&Ph<“0ÀºU€¥r %}•TÚ%[ŸËƒ;´ëp˜$¾ŽJþÚº10Ä 1€¢8ÚÑJù²n)~‹÷vvî fi;¥­½Ÿ«¢MÐE­¸¹Rôû¸òrG'ùb¡•þHƒPÀ‚[M»”ƃ/Ó´…×¾á™8Fq‘¯¨=AŽSÙ²ª|Mzy(Áhb±“"Óÿˆ*þ%ÑÜÕ3(â0'šmz•Cîà@×Bt% Hçç—½ÞéWG¼³8?3í á:!ûÉ¥ç¦7,ýBaVH;ºôë/ÀFÁ_ :9ìCý™°ZǽôeQeûÑf$zì´ÙKC&wäY{ÿ0 ^XÜŒ÷‘ˆíL›¬Ù¼BeåÂféšÉîóÙ¹6ÀRŸ½4<ÈD¨0ƒu[+˜$õ—€eŒ¦1 ô-G¨¼ÅZÛÉ6b ¢ ’kí¯ï-®Å¥WLjÝô<0Ö/É6“¹é`k‰™ôMЉT®mDñ*,=Àº]É’8Ÿ4ÞÇ+•S’Û)éõPÒ0ÖÒ??4¶2;¿¹½µ¿·{x°{86µÖÜ3UÑ8Bø rŽß•%Ù…Á©´§°ƒ ÆŒE»Ô" °n`)ú*6¯µ°²ýÅÁ^h—|U™õ.^ð !We©Ÿg~¸½Æ™5•ˆD¯,3EHXúRÞÌRHTÎìè6‘ʇi¾¦+'¯0:«zrj>ä$– {)! ÎÂÙpÃi¯` þ﵊1'ÍÝZe¤2­®ƒ(x盲Ù}bu—DµH†ÈizšYû$½62ÅâìꟙYhhîðzFÕ-å‰Ü¶)š2mç±’WÓmuy}l|fei•¤Hn‚¤¯ ²¾û£«ë|®Ë‚äõTxnÑ^cºËëâÜÜñÞþâÜ<‰‡+ óÜÛàjGžÍÌ.­­lh†;ÇÏÙ$3‡Ãí¶tº§V“xÄ6¬ƒ¡(ó*»› ¯fœÓ5›ßžUsD0WÆpõñ\öºàã›,=±mt@¼¡X`݃•_3ZT7nä?®x ß6À2b,}S BˆqÅ‘:q!WêO(éæ•c®h¤&0V eóK¬N¶ªì×ѳS`•Vw?ɨ3,Ù>“Æ/'V]“/•ì´‘)¾Y{ÿÂñáñÙ‹—#cK–ºGÛe*˜^I]üׇ‹“£çuα’Úá|û€=³dõC9•ÓFrì¤ËU_VÆ›X7×`ѤrŽsôU|~c{×Ðï ôUH©,€Ž^–®Zh#†„À¬”ü¢Zì¥×Ñæò20K‹WÞ¡6‹5õä踥{”"'éÕx»C÷~cfc!®ö£p`îQZéeQËR0Æ¢Ñ/ŽN;ǘþÒ Fe>ìkÓälÀß°:°¢³[ƒÀFÎõý³‚ï#M9…ÖÍ5_a%.ycm}{G!•Ûsj898|yt¼¶°D¤’Të•Å•ÜRÇ£ø¢ön÷Ùˇ»;\;OüjG7^ee}P”ï.¡WÛ?ØXY]š[Xœ#€8=1±$âŒ\,> ‚ç&ëôå*@€,þaÃ#“¶únï謭¾'6Ûþ,Ãú}lf‡ÜIB´Ìÿ©_Å} ‹eVôŽŽ/R,Ÿ¬Þôr|•îªvŒŠ„uùþÆ1™uð&K­ÚÆçntI”ï_ÅÂ+ô‹ûR\?êpN!ëɱӼ4©@ºâ1|«+xzO’@”+väûÇL#I%ÆbFcïøS|„óá È>•¹ ˜asÇŸMÒ²û”‹‡˜\ö±È õøipü-•VÖŸ.ü® Y¶!yn+K[žÅòúátKW23EI¯þ‘¹éÙµõ]l)H„ Ÿ™[··zL. fQdºb@UB$¯0£<ÎÇîæ&@ì)sy} 3X!Xzy;:k}Ï¥>ã!§²XêJ2é6Â… QƒAòMX4Yh…¢„YwÀ²À¬°úvL“­ò8ÍÊ6‰•S:R·ô‹zI>Vp†è*6ZZ y¨ÏϦ¯ë ojßÅhâï!T’KºcrêóJËó‹¿_sÔò ¹ØÃÝÇ10Êí#ž8êš½#cÔ·žYrO M¤åUýíqvfQíÞÖÞîú:Ø©x0by¤ú»ÂgUD<7×ÖvÖ7mòJP¥âŒü €Œ+%0*9ªç‡G’ESå_idÎ/¬ÆeVþ¯G9˜ì“†I}n¦bè(ð­$}¨g‡d46ÅÜ—fîªió&–ö‰X­ªºqyy1þ T ÷Ámk¯~Œ(Æå}}95= 3X·°²«ÜÙTù¶‘{¯A«Êæñü#(DÄß4À ÞìÀî…࠯תrËâ€=¥Ä1¬…pÈÌkXvöJIæÂÌL0y`ä¥m|\ù`)Éd wÈÓ¤9ƒÉ†U9U¥µn[ëhU³·ª™À¥´Ôã¬h…Õƒ…ö¸‚Î$s_ÏÐÞ-É%äA1Vÿ8£>«¼Óåž›žY[]Ù~ûú¤÷èIJµÅ›YîJ*…ÍÒ6gò{´õÌǬÐmÆÃ+$KÚ_š³Ê:§'gðõ¾›+Ȥ3oï<­Ìé˯?çI^ç`B¥ÍõÝXS 5æ–?L±³áÁ(ën®$·¦jíé.–åââzNEwBQ·œLÕ†UÜ?âÏ’!Ô‹œéÉÑQ™Žú–Þ‡¶øýÝ»•…Å¿=L®«oW±¹ßOÒ3'Ʀ꛺ˆÌJH/zŸŸ’_‘\ñS¬åǸ²‡¤]çÔÌÎ,"W…dâÉüI9Ýcu~~MT-T7íRñ;Ê­½Íɉé¡ñÊšÎééÅ™ÙeÎŽ½µ¾==³Ôì.¶¶ÇdÛŽ/C¸F¤ÊŠ[GºÐн®ˆÌ Õ„•ÆŽZnk5_:´qKA…Tb|¦TÎxˆ˜ÕGûkÛ¢aŽÆRS±N¾É2¡æêÀÊa€b€¥Ýw’°šåÁÔuŒÔŒä;FŠêF-MãjÉ4b¬o `߸]êÖ €5¨0¨¾IZËWPYXQ”©Ê«a.ЄÿbƒI*¯é‹Éi!¢Ÿ¡}|4…®tyûšDÝÞ:559³¶³Å®]SÎŽŒ¯˜*Hlˆâ*= ‹š?]¦2­´"ÖÃ82ˆb‹½ñ…ΈŒ†GéõHàGƈþñî-ª”щ•†®É\ë0 6‹“ɨ²·MPQK‰?”êK·xè©éä>¡¦þ0ÀºÀbf'µ"­¤ubt ŽóÎdI0„Z`’ÛݱǣZJ%ÌB/aÖm †¨j@·/wtS—0¾°-2«¾°ªsw{Pr÷A|ÖÈ«mmìÛº£s[ÀÙFóaùjÐßhÁe­²{I{0ÈzCXf­é€¤ø4yy.×ðß#²këo^¾¸•!•y¶¶þöKúFà.†3' @€i©6ymäâaå™^ÝÐÒ³¿± zVÿ ú§OÎLL°qÅ¿”kÑûå¼U±49ãÿøGâߟE$Y’óGû=ž´‚z~ˆµ½ÿŽaIaf1ŽÐ2¿»ÍÓ@Žíìù>ÆB¹*éÌ2ì™EËÌàºík‡•1¢«—GÏkZIq$ë¬[ôë û4±}êÎÀX |ÊZlímƒÅå?Ç}]’˜Uv¼xÏ€>7=ÿ·§1¹qù͉‚’"ñ$Zqw˜L‚D’h¼@yõÁ/ùQÒ 6É:äiJŒ+ÐÕþî~qUëÃ83ËO1ÅOqaM±åW¶î$çÕý”d2qzš,=Y„™$™xež¦N„ªÀ“Ö”­ ¾éëñß2ÀÒ‚ƒ-½óû{Çí‹ `ÑôÚÜŒÊa¼²wwŽú=ËY¶aflu’zt’ÊêCÖ£ÿ®‹¦§ChÀ[†nIÍÏ ¬i<£jX±ÂK=Âà  Í7êDØ®ÊáIfm[{¯¶ WÉçÁ5„PM^8j¬xÄü"sEá$º‚NÃã´¬vt%÷‹ ¢O.eYœh/€ƒÙÒªTbe»ï$Y9L ŠÒ„>Ÿz¦`h³˜ü6¸7KMÿáÞ!TÖïïÎÿy~FÑÙÝÝ£ÚŽ‰t¡ëO4÷&[ú]ㆽ^TN3Žö̘œ°&V¤:x”½T¤X_°ØLÓ$TW4]¼¾k& á .Db¨Â+ý¸ï…Íâ4€Yȳ`/´Ó¸%6ëô´½{ä»h EaEdÖ¥5÷¸Æ` ¾ 9„åꤺHÏÂÞ½*µ9S‹šbóÚREqR¦Wkä•“<"mP#ØÊôc,rÙždÔþ”PAx.2³öA’Õbm~qtR?Ž×؈‚D)UZÕô8­ÁƒÆ A¥›}v0Òµ‹‘äzœîˆË¬°9šŽvvõ(Ö5–Œ&8›ñë3ÃßËÚ 9«kêû>ÆŒõFdzíÄ2Œd#Òk¨íÝÐ>\bïy–Ó¤ì®Ò´ê_åÃUvÝ "? <ñ*Þ± ¥„ $$¹%«ÞÀâ×ùŪ–É-Ô«câ€=©jØÝ9<:8v8'éÀ,®H¡ó„;æ+V=Vù6Dbá¿­MƒŸêiÉ*uóëû¢D̈ ‡¬KÖg&5mÈÉNˆ‘l­q¢NUq w~̶/Š`”v˜jž²L̦©Š¿ +©ôjtzþй"]%GiuT<ŸåÎ˪‚þ8£GªÇà硚xl-3"ùNUÖ‹sM÷Àd§k²¹s´«²whº½o¢¢)½+»r`x|¥c`¶¬a¸ ¼µ©s´¦eØTÎÉ´†9Ì| |³1Ï…ö—e°7-À’88Mp¢DX²KÎNÄJ·ø@¬¡HG•Ú¼˜EJ?gÂâÅÃmœ¼KwŸ÷ïÏJD…†xÍÙ®ëQ³½óxÿèÝÍî¼1HNP#íøà@Ÿìv´Xbs~eÆ ¹ºâ³¯^ yóã|%<±r„‡ŸônàŸ Í´¯ Ò:Xut ž…4DøáÍéààÈàðXN±ã—¤ D✾?}ÓØ>ð4¹z†øÑÙ ’«br[ ­½T’pO+p´z1eyŒJ¥© ö)\¥î¶Šÿ(–(G4Ú“\4üPèC„&;Í“U%'v°Ô‰Éyc8ÅÒß10÷ûùÙÈøªÉªGEÒB°Æyˆ<ߌ²5-8[>À7ÿ[ê:Ї&ŸãÓ«p=ÃóØyÓiÂ+€eÌ«×VDúRDŠ­»gËæßß]|Æ"67ä™C $·VÒi\/w¥à˜¨Ü–¤Â–…Å5YdÃÎNOÑZ©ÜÊLÊφìú-Њ­¹H#…ÙòH#iZ(1³ô,3cTNSdvcL®f[ÛFˆ*%ÍÒU׿&j³»s03‰xÿìôäÕúÆ^¿g ì•lîǧõ‹¦t—FjúÛXêJÇeª6£€oÓ·‚úI °ŒÙ¬JlÇC'ªcª«kìú]àé»o’\!H'kñêk­Ü=Ì"¢´/@ 0%¤²¡W¿]œ»G¦¿{V'm̳¬†ŸâÊëZú_Ÿ„‹\0NA "sÐÀQcPca©îÌj`õbÈ+ú*÷KãHý—†¨Êû|EHm3Ùü°fsiOÒë -uÌ¡z:$aLNL=ŒÍ{–Qõ(ÕÆÂL%#n"ÉÎ/cº%‘û¬a,v’ˆþëiAu];¦_ÆÜR^)jIœúX@«`ÈK‚ƒ'‡G?Åš)› ºâ!Ææ¶`Waoñìlïs{±;9Ú?*qŸëCWœ’ ¢}nOÈ› Ç|L'W›X{`”×Ь"wu’ ]OŒŸK6÷Q¼лTÑäÑtú*ÏQe¦‡`1‰Ñ—äņ°É/ü÷XÆ\ÀaÙQìîò†á¦îÉB4 û¤0À `éo©Î6Û/ugŽŽÎ´–7¹\î¾c] 6¶…V½ÄÖ‘Y™Ýœ 9ÈS’™4¢®ØgdvË“¬ÆôRçøÔr@Ùy:l|‹ì½±yyˆ^Å\°¹s¹•Ù’˜ò0÷¢à¡„®Ä’îdÕKCXFp0®°3º #µÄ93·úëÙ²Êer;ÇœÀâÒV{ßLI[çAí&Ð*ÑÅ“xhPõý•,ÎAt†¯v•Xut¯ÝÀhÓeÕ壑‹?¦†RiUëÛ—/.Þܲá@¦›TDò6îú”dÎ]È ''ç%•=Íjô•ÿÓ0V j¡ñe›ëZ5½›CÕ Í;`&K§·‚ÍúAž¢€t{fò*œx,A˜êýä b¸‰òí.½åG¶¤«E¸¸XL^ËÓäâ½­£7¾u`Ó·H£²*~I²ÂºQ6‘3]}Ê£ûšÔ‰Ë´k5VLJI¶È„°æ;ƒ®iø†@.^MâÈ0䞌H±R3Â^«xÆlœ]K2š ²P—ºGçQ8pèêRÿmy,þºu˜$nͯ¡Â÷€LŒò,Bÿ÷{dSójƒÅEQcrfcye;ÇÖWÔ#(:C/ Àâöæ‡ZGq‡ërhx €eì+£‚Áò?«V¨Nj°Â!Â`–1J¨H,¼}ó[¥Ú£Òª ²þ|N#ÿâÍUHK¹ noí-.ož#·åqÙv¼ƒ«‡F'–Ú{Ælõ}´(ÃÇé†,/­wöyµ<Á§pÒTå¢?Ž(ǘ’#ÑI®Ž Áêö‰çx2½aò…¿—‹2ɉ½Ã µm#ýî™ß/ζV–±Õùýý9õÔ ìíB,y'WùЪªe¢¹o®¡{¶¬i‚_Që/°ÔH†‚B' i3h¾Æ?em£lYo4ÊHg­Âd<9¿nnfsµû‚5z0DöB ÜÜÚê4äçÀØ|utìðr«¡o¥ 7ã…1øs’µ¥ÃýæåMm99gÌ0e± £“*ÿKÞbJ^]R~#É.€‰DõOÉÝ `‰L^’rlH5I–Ljy’l>ÜÛÓÜäqÒýã?³ úQŠ ÓsnšÄ…ìÙ”nLEÜdSÜ9¥º˜#“úGTáäøÌù§*C¨V|GY {“·6¶‰í"5ã|äCŒÊªép##%'š, {¼¼êŽý’]qiyöá^÷b}çÔ>18Íòc,Úí,¯ Sʦ÷°Ô§rzœ’wbe~iklz­Ý5›#à5ô¡:Û‹ÜÀº%¡ê,?5м7-öü)æ<–J¼‹Ü¯°Ô¢˜%'±9£ó¡ˆB g®f­-¯°sýçÅ…,s{Å´x"}éíË—Û]ØÜ¤¸ÍÁ‘‚¼F³³°™fÖ˜™^Ê,i¢¡m|Ì9RX9ŸS‹ÇñqÄ~LNÔ ŽM.¿;}s´ÿ|zn£¸Æ-£“ jouN›k\e5=æê’›¦&§ž=ϲ´•×¹rÊ;M]…ö¾[_:5³-ý=ÃxÇŸœtöÏ™¬Ãú…_¯ß<ÀR;qûój9ö¹û¼-C¨Šx‹Ð@Š DãrjúûGè<÷kÔÒE÷#7ö~, ^ˆ–w§T {559—en!¦ö‘!mjz’F™Ñý7Ë((€P÷qŸÒý¨4ÿïïˆB69‡L¬(é} À HKzÑ}bííKÄaNîM(v>Œ7ìÒ轂}ã¨ïP{Dª¶Û•*ţ£X讀|Òt^tïÖ_ÒeÖæS”P•Íã†úµ4DàôôrraK¬8%xbrBÓÌÝÅWeÃ@Zi'ü±tað×/yD)úJîE™`+=Î4ºq}}·­o:±´÷#Eà†¥V¨Kå¨à’(`ôóye“÷pÿxgû°¸ÖMv”ІVš¹—î§çU30X7"±xõHd Ë›Û4|K¾ÊQ*¥3c¥˜ÁXNfêˆtdzt[TZejžuqnñ_¿~0êßÛô íUK)uRU©KˆhÞÙøœz¦f™ÔÍ&† .€µ&DH‚´z:Œ%­¼†¨–ƒ€½´f0ßJ9í’eKÅ¥¢¼¸!ÀŸ§ÆºgÙ*ë]lô ¦ ÐJ,î‚§aSÈ…£ÄÂ@«È1X\;”kÓÜ@P¶ªy6«’n Ôýæ,•ÏEÓ DV¹SÊSEUšÒOÔ®7`KcX ¹uÃã²Øó=6 Ö·¿E€¥4^”eÜY_íÃÞSfÈŠZr­¤§ä×®¯nÝ\ƒExýSäúj{s79ß‘”_cª‡ùf“Ëâ—QŽ'äà–n;-=H¡7dæD:÷¡á±³k•’ÞèDÜ\*J ®X}EÂc¿r6×£+5( y²œLG42©äÒ㽃Oµê§¦W–Þ+ƒ’ %mËá]&+ŒoXÉf-•’iŠéÅ`„€W,2à“# 6ùô¶öL åÂ‡ÞØNEÂÂ.ù…F?w°nµØ³>, ¸1i#혘Y›˜^ϱ iÆLº`¨üÔ_`ñ8¸Kz­TZ…;½Ò-è7e°Ôì¯O'¤}bª6 `IA ªòvGñàG$dîDfÖ=J¶Æ¦W6·t£Ã`ó÷ëùÛóÏg€_ôþwÎv‚h”›ËG‹a™x(—ñ ëBDT²qÌUøÓJåGOÄC^§”vARJE•.ÁÓ¤¤/Ÿ¥bË7»Õ¤ÃAž#0oî[X\»ôtÍ"³ºuriu¯sp!±¨êBÀQTC?á.ºÔÐü|ƒ[Ôå DØ’QÒ´¹²Æªvïkóe°øZäóĤÐÑ¿{ýª®Ýejf…£f@P÷7Çܬ‘Çb‡sm§Ù^lo½?;Å åÏ_ßýùáÂíy¤UhËùVê%Õ1ŒÁÁà,ýì¤2'˜%"3ëš»±’º^Æåöúfqy}’µŒ:DNÜ%‚eºiçÑ÷å'#C–í±U¨û•“¯Åf;žTr‚7¼UN ˜PZ»q%ŒËk̬‘™•\»ˆÎûŠ€C_Ñ|ØÅ`Òkí“I'(º&g×ÓE6ÃÙƒ ƒe<½€»ª$bþ~?ËÖúúgXÖàM«ðéá –XL¼Ê˜—×…å>ϲDA!^Z?’ƒ€ÝR˜Á `ƒ;ÂÁí7Aèà *IÀ,г̺'iUIæüÒšé‰é³“ãßÎÏ„ÇAÏ&ÿúðÎÙã}œjׂ ÒŒØçDì+ò ìò¨h›çÐM»ŒÅx–cÕø§ô‰ðçº]s]R¤%«I( ]Æ :{¥—Âôà-^e¼LÉ7 °Dwcï,3ÝÖÖß¾‘%‡sâ`ÿhfn3¯Ú-'>z¥…œ(¹·ZÞ¨©¡²¶ã··÷,-—‹úÄß$À¢È_ûJ”®cí™MRw±:â9Îkzšas{¦/Not-Q"fyi£º¡7&Ó–QÜø,Ë›«ÔKŠ» \ ¯Ë`©ÁîCí MØ—Ûj*©yu¬ -kvõþíÙÿûïß[Û:'YðAÐܤ´„AÐU€5Œ^v2|JØÍ;Ͷ6ò{F —çææþçw1ož »ÌéùZŒõüà8»¬Ë+ŒãQz^™“i ]å~Iô-ß×GQ¿´«ß=ûÛù[™]´¼²•[Ù'*^¨ÍR(VpÝ· +•§šPÜÓ=<ß7²hÒ4Ö>»lð©¿<ƒ%Ü@íž²ÆqLFösE(/4 –±þv÷~ƒåïå ¯¨i?Ì*õÁ,d³‹À[ùabÙO1嶦ýíž¿EᡦsŽŽÈlÂè|=Þ¼Â=‹üÁÂÊ66ÁѤ%´¥–vH$U­´'Å·­f¡Ág‹ŒKe0è\ge‚Ïg›‚Y‚¦œˆÈU䢋/×a2»ÇXEGF»õn·% U­Sú½ã7 °¤Il~õp}çäëêjoàHrÀÎ!‹®õ©Ë‘Wçúѯ=ÇÂæþïÝÛ4%D°;äÁÝ{á†X¡ÅŽ\©p|­5Îέeš‰ïk"IbEeÃ@W¥Ö2®ý[ÖöÚÖ‡±’Ê#ÓOµL·& DWH£Œê¥k =À iËÀœ,¡£ÕuH){qô<ÿX¥#(66:YÛàŒL,„2O(jK”›ÊS3Fg®V¿`¨?:¿½®©srlâüõK<83JŒÎûdzÂQÙ¯{îLOòh¾ö™¢0Ã'ÝÕ3S3Ï1ÚTmj`Oh qpwØ\l)›fWô‚¿q:äÖáÆ<è™–ÓÌnSS—Ûî`XJ†e² ²cÂ1×{™3Ãë2€å‘¡sGÇLiØÉ"€e ë ø0ƒ$À2Þ1ÕÑ0KZÑÀÏ£ÍëPJ*ˆyêçØ"øö©™E¦°?ÞŸž¼ìí{˜Púslq¼É67·üëùÙ[ƒ‘·Ôc±ç¦ŽéÿŽÈÍ­K.lFvÀ¬]Ñ8„“^kÏTYƒ›šƒb„Ðf6ÏS°cq¶W7®EZi‘+Ç÷Ž.=Âð)½O„>0]\£¥[r¬Ÿà¾U€%Ѥ= [v¥+ÕLL¤gr¬bKêF¿*Ó²Ù'~¹L<.E-^ÏFMwïð© k‰tÓFs_¸ŠÓ€ÉÀi-Ô ~ªÄ!±ä1 )¨B9B áD:a¯ì‹\X7p‚X\Xÿ!*/"ÝÎÀ‡ÏÆ5zÌG\ùãk×.§aXF  7°ý!έ… ‰3â§µÊë[úÉ Ÿ¤ÉçÛ»ãÓ+PYѦ:‰Ö9+ƒÑK`6µ‘ãT‘>äSñôǸøçg›9é bfZzÅW}ë‹]¯Í+í•;'ö4» ÂÁ¿]œYêGØeê–Þ‹á“DAQ«Ç3q—ôË-Á2È*L›(QBÈ€l«pÒ}4jöQßó6*Â]í}j z!ز™Ù•ÜJx,ªà¢ÑÃQ™Váùc†AŸ\´ÖõF$W‘éòKr;+ÍŠSA+JÒˆ®BÆ`é•ObfN(ìøû³âå…å/z¨²»#HýCLáÓÌZîMnHŸ0|zš>®äª YÏGˆÞZ¤–7Žfë5úí,þXÚ¯0µêãØvhK0M; ûý7ý† /àÖ„Vˆ–±”ê”aµ€¸!ÜBæ„¢vaùÝ%[öÀ~Z“­½£Dô³a0“ŽÄXKËxÁ“®l²Ëê¤A‰gcšDE`túO0ØÈø Ò}$¿Æãì_|(ÔõÍ,Áù°°l}ûòÕÖæÞè䪥ÁZÖûiZ»W°è¬4eÖÖ_ÏßÜeBª!m,/ äGiçŸö·û òpˆ¸%„wI§–^u¤• ~‹?\ZIô´Í±ªT}W)huzþêõØÄ|^yË/Iå?%”=I¯aËÄ$þ$ÝÎ2ÏþÊ­ŒØÐ,šÏ¬Á%$É.2©øåññÛ/¬s·gêqRaAf$Î?¡°•üV#žøÊYQo‚:œ©R•…Ž‚}&÷<·°jgmûyãÊå'ÅÕ}ÔÆæør̯`ú% :€%5X=d•uNN/¹½sÏŽÍÕ½lŒ%©œëõ÷侨·ªeÜ5²ØÔ3c² qòwãƒÌšr_KýºØfÀtèÛMk릧ŭɬ[XFaÖGCU2‚Ç,£ÈðÍb~a ‹æ/>/(.ú15¤ñJ&Ä@ùb7¼²fwbôt ÷67vbóÛaÝM»A¦õ} *Ò7¯b°ÔX5B±/¦[fYG2+zõ\×·g4 À‚…b²“±B´¤ ¤còÛ@Ï,Qzê^u°P¸'ä6´wö½:>dù¿”ÃbF8~E÷[÷ß°º=” ?gô÷’—ö9óöæ^rA‰)?'U:»=œÉ¥ÏBÌdÃñ~³sè1¥Rì«}r+”ìå®gXj•~,3JÐ-E\}~øÜHänŒVhzm¢Ÿ?Ä•»ú†¯ºó>kbb6:Ã*ö˜¦(/ÁöàR;†`Í®ù Ý«ŠèQ±MÁ¬tI4£‰&ë˃} %¼6ÖgÂìêŸB‰¥Ôèýˆiö*M³*5«²ÉH)l&>È@ ËFýæÕ”kUíK –o9)oß@ïsµǘ×4Ú¹ØGF"[a‰’r(‘éÔ'§(¶•F‹2zèôòá!Ë?UVXWî€.",ˆèŠ®uïK –؋ۡ¯¤p† •ÏçÆÙÂâzzqóÃÄÊä<Žj'#ÏŠ{EÃõ€J‚ ¦êÇ)¿$[ rA?óÜé)fL.é`°'hÂùN‘VܦM’—”Ð2XÊ'bFˆ)êˆÊnÌ̯ºZX†€lvf1)¯–’Q5ÈZ 4‘â¸é”›¼ó5áHŸWCiòŽL*"¥rÀ5töB”8}½ÊM¾F7€9öŽÏ?Ín檅­ùˆné“ÉÕ<¾LVvE×gvks·¶mØí™][Ý^\Úfµ»fʽŸòX£™w°2­îÂÏèÔZ›k6Ûꧯl:WÕP¬ÏIDT Ú© ô+x¤%C°ÚÂëæëÆÀÙKãÆ· ¼E“¨KQ\™BM➨ê¤P+JŽÉÖŸÊÒ êÛº=ëkÛd#OM/lnl}.}).§^,¾P¬ ý;ôj}Ùp|@$Ë<%1¢üßKGÑe_¨<ÿŸ½ónn+I¶üGÝw#vgöÍk+KI¤è h@ï@ zï@x† ÷ÞI-Q¶§§gÞnìïV¥.ŦH‘êá2"‚0×V:yò$ß`¼.Á7Nƒ{ÞLÄvY,Ó}yDPb†ÜÒ9u´Àâ=YÖæá!ÇäxtuqÒ5¤äs¬…éiªù†öh¤6WWyre’$Žøò“?j È8Ü;Hµ¶üÇ“rÖ;±ª!‡ˆÓA(2Ó=€]~’×HiÞýûã‚N ø€u’È :cŠ+nš&q#ØC\ŠÎ1ß\>E¨›X„ã(w1}~J);ÛÒ½ÑÜÌ\NIëk?'ã¿€‹„¹ i¿‹Ý‡ÄâÅâÖ($ýò•*K@_Ã[!³°áõ‹gëKËÏžÙ;ÅUíôÞfL;§FBu6œ™]¹›×.üeÜÒE¬Q `é䮚9–caJа´q™l}›«Ø6äôOûCóE6à †L°Àd× °ŠštK̬q û+?ÇS¯ñT¹<ÀJ±ªæ¶AS˜ý5Ö•0X—ŸšoS„.€uyB‹kâ=Ïæ5—à_4æ\ª†RÅâ!‰†¦ß¥Ôþ%©üû”Ê¿%•ô x¡…ßšœ¦QÚ¦Y;Ñ´ž °N3 ýÔƒ´^HÇ„±;Z„Tîÿz˜óØòès-ötè ïtzì <6ùoƒ¥¦ÎVÊ#É£4Öçè©qG¥N´*BY’òºž÷/Ÿc%@¼¾.Xƒ ãMÀ‡Ô¶[ÿ­ùééçW&±‡¾’X؈çKËësê'&æ1 ßßÞ[_ݬiú÷¬K®þ1­á¥ &­Њ›TW]ÉÞÞq»¸±ÒÖpMw´´-Ì­¤3XW°TˆR_LT^E'rƒXýÛãÊ•…¥Ï„ÒNsui=YrI¿èLà™.–l’‹„ZY Íg\Üh¡p`ίh&pq“wkσ솅Ù9ÿÎæNjAsR¶qüŸÁf)‹æó$¾w·ö¾Tò&¬Ú?d°”µ¡1g ·ª^Z\§`…A˜²GÚ±ÕÕ…½ŽÉÂ/ÆžÔ**a%€Uô5ÛsY[žXžÉ‘Y—^™è«Ë¬ä¢^Ÿ)B—?ª<U˜ºÅ|S€eŽÛá¿7À2ß*Å­ã %`…L¡ë@•™–CT@ H«ÄÈ:¡‘ÿ>­®´¶–>èP%NhúÉ“•Pës#£†”Á„$í¥$ÃbK½§±7Bч–£;D½lìåÉMu?«žºçSH/›ºëlÀúN‘%aÈN`û´NmF[Ùä’Þ´ÂfŸÇ·43CÁÛ«ç“Ô÷ƒçHÌME£g°;×VÕ8?5õ5Xª0™Áå…ÐÛ9?E}þþÎÁÝô*¬}S‹ìߥT}ÿ´•37s­HöJë,nOÉ]&2ª úJej0nžšœ]oœ¤ ïÚ8N `jãFãî©ä1X:*míg€Vhþ±ñG–&¦ü8ÀæW.:GFä1é±u<+LÜûå>–:6Ä\§wŽùBÏöwçç–Ò­møcå–µVuö vöå’ã<µ>ôοŸ×–ñ)À‚'3+3ç§»í¡hÕÚÒ765»’Q>`©á\çV ”5ŽÖwGF K0·^(½4€ÅW]¦Ùó²!ó Ã1T¡Ãõ%—X’`-ÀRp*ßdHÃS‚ù4»Ä‚fS%ãŸ`ݦoÀ2ï…‘×?qÿÑò,Yn#tÓ)Ï’„Ö>µ¥¶€±u;ã陥;ÙöÔD€Eœv—ÊŸÓ¼»Xá1 ¦WЄÈÚäõϾ88qE€tE ®žáè“’AV´†ÄDXQó)AJÇh­Sƒ÷¨ÛÞ$’½ËŒ±tŸ0& °üf¿ âc«üŠòìåÍ¡ÐøÜìÜîæÖ5ðIªù1}KPKÎoª9.\xêÊ?¿Öׂ«V—–ÎÏ‚xY­¯m¦ä7ýf3‘ym©hÕ#í²n43âq0¹dm¥­+TÒÈÂJi%šQí¤zz•ãZ–±bœ‘i®1nXœ[xÏNÏžÚV™ã ­¨ë¹“e禀X"Ë 3§q€• Vï¶Ø¼`=´´ªEW¾0D•>p†¾µÃéô}xõ‹ÏyZÔ~7ÇNéÕÿñ¤2¿¢cmeƒ-üË™è+ò  È{6À2£+5§e_u[ ¸Ñ“ Ö¬ mFA ²k½£×.´ôF{{â Îâ'q®Ù‘¯Â`)õ¹ÐsªÎ„i.Ë`~Xœ ;/kiày,rëüu=ã3ë éìZ¯qýktšNbÝ2X·ë:–yÉT¸G²Y:Ò’*xÙ’ö»ÔºâÚ¾ÅùUª™T/‡;ò ¿ƒŸž\±eô©Ü’Ê jRÓ´òFÕÂ:gnÍHSÏØÜüúîúZUcß÷)F'2[»g}m»®3PÑêÉ©bÐáX©ò¨¼:Â+#W ‹€•U4"Ý€e–µéyaN™° >bb@×”(?g5ýõ^aZnùÌÔê“ëqF8ÜÝZínnììütî¢\ÿ+ÒW¸|íí}‘ƒåþÎ~k—ónzíݬ&\à®ð…‚ `=)îÅ1øQ =Y•ƒyÕÃÅõÎÚ6¿Ó?‡T«{$ÊMÈ]¬§XžñëX„dÊë¼qE`:ò›‰ü¥ýIv•ôæ0 °0|O¶Ô?¶öâÊUÐèϼ4ÀÊ1dìN’Yâ^—‹ÿ*µ¢pœw¦ º:»‡_Ôµ ý˜iO.ìæ˜ƒk“òZÿò¨²±ÝA­ÏûÏD^4váÕáþA•}sÑÖ«X|ò¤g0Xš²`_ŒZB/|yFÑÆj¤¢Åë Íõ»¦sª† Çž÷äT ŠšYµ6ú¤Y`ÖŸ|Õ…–în£è"3x’OÌžÏüù9{ý‚Ó„"çXÍákw‘=$»Í:Ë`©Ò– 1°‹À‹«Ó1MQ­7´TÛôÎWwEP•èn·)Â[€õm–yzV÷’"´ôÂf5TV¥ðXÅ­ôúPôþˆgü^nëS °$ä•ìj1¦:U3Áá³ø¶÷…kÚ¼“3+ã“Kdv¶6VV-Uý•v—Ë?»°°&m3Ÿ>sæÒJißÖ‹á ÷Ô2#?ÂpÆ(IKļZLh†’²mL3x!h¨÷°1~ÍëÆ¬ÏíN±iÀR¡Rœ\æ3’¼ó¾¥-­°Éåô=;8ÓÉUëÊ×––¾³¹þÐ{÷ÎMM]Þ@´^ÒáñE¥Ý¼~~—ÐÌ­pI›[mîòÜÏkͨ \=¸G,êé6 fúŠÐœ¢ë…›WÞ˜8ÛU´øÀÜôÌèuD-µ£i%}£ã¡è‚Ë7]Xo,€e®ó2 £¥ÿâ[QdJÿ%Ø>«?ÿÐ¥Lÿ”ù|ý!ÀâE«=¸´²{tp\Û=ž'„"DN¯°É×Ô7žWçôÌþëÇè¬Ê߬[€õ-–zƒî§%+ %Æb=Mãçµµm¦a©î¤Æ0­¤›´¹ÐÛ&ðY=m§#¶ €QÕˆkl–%àÆÚö¯'ŒS'Ïa–—?œœD')žúçû7@+µÌ¥Æª½¬¸ÁQ×éoï7v¡öH*ìyTØË“¶>×Èx¿sª²Å•[=ÂHM›w„\,ïøÝS unÀ:?ånNÈŽ„Â?Z2”°&t²sº´—¢lâŠ%„<ò+ß])Fmok ¿õ¯bÖ€ª éÕÖêšÜ»/…zÜ” ¦[;²Ê»›»ýþЬ;0ã ÌrSüׯo÷š›…àîš9ŒÖu­X^|°¸´¸UEp—9™&Õ5 Kô‡§‚¯¨)l±ù.Ø ˆ¢G…OójŒ;úeb¦˜òÕ[7+SX˹0ÖÍXj§ŒCWÂåŠ.³lgðç¬ÆLkÓX üËÑ!sÉÕ,¸+ÐŒ©hñ“Xø)¯¼üW‘pä«øÂ o ÷Åô ­WNž¿?ýö–`v7þ›`GÇ;¹­u$Ї¸¿`Œ8­äE …R|Éuh°d—ˆla{kô¥)@€ÅÝ$üz~J³E#S°>šúíÕÖúfiM;mR)! –Kº´ðä¢Yžqa×>ŠLSÜ‰Ó,_®X)–ºåt „õɪLaÓj|CºðJ}Œ—zq[aUWÿÈ­Wߊüo04}7£¦ º÷NF…~ +J°92оRF£Ê¦ÁL_é誺3âðÏÚûC ¡lÒuúÊsÙ9œ_XÅ«{8\Ö8ÚÞ(mråÙb• ²Á=ï¾ÈÛ ããs‚i"¦epjvasÐ3?ì›/k5jõ>KfK†É³Pÿó“àeôÏ&X0\!œ—›ú1E°dhlÝ/`¹+Zƒ¬ð××w ê½™Õ.Í$,H˜Â-Àú€Å5]d¿X—Xg›i)Œ•7èC Rßánëñ ;#¬G¡Ê™ŒÑxâÚ—&2Üó¼3¢¾– YMþΑQ9ÊÈ%ûTÜÍnoêô>;<Ò§ ß3;»ôßþ#óIŽí_ïß'¶Á脆ӱy…?÷z <^ ì—ýC§oÊíŸê çTó£ªÀêë†,³š•7(‡CÖîcÝI­vxð}{•…‹33ßš»2K•_j.Ù÷šÙå>òk/¼1ˆáXc˜NɤôõÉÄÔBVù@j¹XœP±‚79.^½MƒÌ»QmÌš²7:0ž0&åw”WÛ{÷V’£"ý¼³×ù¿’Êf×§µ`ŽÊg¹UÓ*¤ÖØ…¤Êã#ó£j X:A :À’ÜFS™Å-G{û¬Óör  [OwL~Zi»H² íÓ­­{;{p‡{;»MíŽ;F×hJ $öÔ%×rš?ªXÚ±2Wþ¢¸G¬]ÞŒ/V´ùÓªœª¥,ƒ'Y¢zçÊê} ­¶þQÏdS·/ÉÒVÕâ²Ö0–J%VÃ…šËy¼‹4€¥«o䇼sÿxsrtpôÛ›“.‡¡ç_:Æ’ÁóÏ…þYýGe«[œYÆcЊélõ:ÄÀjV04–µT‹‡Á*³¾ùöáIÜ+Œìêg,³Ïû-ÀºXװξ'Um¿Ì(±äwRÞü$¿­¦Å±¸° ÄYYXpû'’ z÷?)L«ièMÍ®ïìÌÌoøB‹ÐÝOËŒ¨»¹í5­®ÅÅ5½>ÿ`{{vbÛëÝí]Ky[Nqó?Þ½;G+{£ŒQ·¢½ã»ð­½š67?û¼zk³*ûÿ«! õáÊz‘¾à,Ù¤KfÕâÂdÃÕ¥äàŠö67ßü™H,0%î\ªØí±ÂRáZRŸüÄ¿>¼í£j›»’‹¶HQQ3…Nîß…ü·™ ¿KCÃlAQ¤[jèd,Ûpq´Ý.ÿ“¬ÊÿL®r¹¼UvgJé Y*ft'÷/N2a`Ñ8¾‡{¶~¨c` Uxb©ºÍG%›jÐÞ6S J‘bRAwc——áe{k§¹Ó•VÒùÄÚö“±¤”.¯ L9[’°ÌÉAÐUCï„7´ØÜĺS@ÕÕÇÍÇ<¸ýÓOô©µÓR=QÖw'§-‰ŒÏÔ9ewô²ÂÓØ¾Ïdëx4ªŒÀòJìŠÊ:ë}ÅMþŽáÉ–Á¨{l~©“,MM £ê"ÆT˜Þ£€Q ¼-"™0‚ùŽmfôÓŒõÓí«WVJ¨û&¤2 |¾ðÒâÒVUû'ƒ–0ÈktaJbþçw °nÖ•,óz+n‚·$ƒ“ñÝœ–âú!VÛÌLH©"K#¾™öÁñÉéµç‡Ç[›»õd:¶ Ä㹓ÝViwnnì¼?y©/ñ1œÜßÚ‘ˆé Ç?ª£ß¿|u •ñ/5,mîçu íHi ”õ²]†Æc™—57ŸÁ2c,Õ M®3Òu¸©µ÷ÙÁþÛWWà,I‡ýy!R÷ƒ­-. ðO¼Ñ•Lv°®aƒ,n¬måW÷=±"ur0Áà‹BYïô"µ¨DÏeŸ«EXacWªÑ÷Ð9¿¸)ESÈÙ¹5¼ðùdk¥Œr`–-›{üt4*iI.ì]Á^üWoìo°°LÉÁ ´¼oè›M.ÕtнÑ@W:=c(_ >úû3Ëzi{'§•Æü85¬®n1äV¶x`€Š©þ)hT¨îsm3}ÀòK€Ã¿Ø<0É/’ÉTAàUI79lêа0¦¬mðgÔx2k½–8×¥ôòÖæPpbu}c¯¾7š+¾‡¬BrÉ`¶- .Tôú4À’`T_«0–Ø0_0º²±±KqQØŸzuŒkfÚt˜u¶ï—1ŠÞ¬[€uEËì×¢M¨†© æc4 önßœ_£h6ëÅ¡ÑÕnffÅÀ h»šº<Û›»x×·»¦f–Еj»J{q|d¤ÿN¤Èú‚xnqne<º°°¸_Ì®L*êgØeËã" =]¨#­HÎ Xúi=c2»Ÿ³›-% {’ι"ÍÓÒÜÜŸ `ˆê?ôéHÄ~9>VõóÓrTiðY¯`”¶öxɉæ}†ê(Ùè 3v†äùª[å$¸²Åt~6©.0œÓ³‹[—ç(Î(lø9³éQ~ǃì¦þAß}xò¯±Ó‰%[(Ê\Ïe–·MH£Qzæ007 ƒ‹ç95Î`xîÕ3lô_aBÖ;:ë˜I¨H‘ÊlîfU æ×Êwê"Ù<™L”ÝôµM%B:À’ÇŠWNm½PÚìªh5R] ]iÜFiQJÙГâ¾Ïd02okóøCl­!]ýÇ»×=#ãìHº¨PA¶þHàfÌ].€t9u<Þló)ܧÁIÈ¿ 77örEe¢±S6·7¼4¿¸U,üÕâÏ#D}€Ük 9üÓ çØÄj º’ß·'èJtõøÂ‹»;ûhErù ©¥68±VÞcé›§»B(€¥W¸ó¨c,ÈÎÒÖ±Êö`¾Ðûê0—£a¶ì2WDšA˜þßëXꊱ¶þqpÓÌá`Ý€%CóóX²† {SEOÙ'9õÉù-tËŠN.1`1 t†æÃ¢@#5vû_?'å´µ±³%ûí˜gÜõåeÄ+_‡8:êÉ$ׯÚN¿sB¨hcc¢™ôV÷èŠP‹Î°ÌË,³c"ì½—^¶XWÓC†P ÖŸ*¸q‘À Bë‹x,X™ñ`T*ÁÖUÃA¦Ø±ÐtJQšHnpØød+ò¾NË,-Ò'6Ý%d8êÁý fÊ,mOÊooQf˜VÔî÷…òs±ÍLÏ؆vñN)&»$ƒ…ß S+Ð'wPrJƒ…¿¨v ©Ëû·¯Q³ÑS95.*KŠ©EYŸÛP;U:®eçG¾‡ý:Kx –6˜šÔÑ?A.Rº—1–¨!&‡’‚¶öÁèÎÖ>j¼ÇÏpùóËËw¢ “tu…¨à¡ç!üø”Ü€ÏùKPRÖðÌÛz¢0^Lmüºh«p—:F¦c{Ê‹õÞå•D®øNåı””ˆ_ޱï@+wyëX]OĦúû%ÂFÙªKîH@ôðY›üm!ÞŒFŠ„#™MLóéº{—6Õ¯ø‘$ gQ:l5c,¾?ª£+B9Γ‡…]ã‘ç*9+y²3@Á}} »ï„€ðY!“GEö[€u—— cé …´jÄÐî¤×%÷¥¶#ÌbD˜˜^»æbx\Ô›_3°¼¼Î‚*þs3s³šLÐ@ȸX¦FûS ³°Ø:öL?±öeƯÀDµ,+øTƒÉÚÔ4VÞ€u6ÆRb,ÒôÁMΫ …™xÔ‰¸Ù‹TPio{›N>_”+äS 3„eX’ù»Â†ÙB€hkqÜͶKL[ëá °òlÑõ¥Í^z1åòRRÃ…J·‰êBf(!D³šÀ8KÐØ†EÅ#K;W  ›/°ªHÌÅ–ETóa4 ’cËY‚W£\Nb&¸&ѧq‡£ `><öx]ÇX’‘̉m»‚„¹¤@XãêøðÓ* ȯè_Èëà$]o73ìžê vò«{†œ‘—ÏžËÆR±¹5,c}Ëûùrs–V·6̶ù< À¦ÐäZIK&€%˜Cí£¬a,k«í œVe¦Uº{'÷ã+üÄUMgx}}¨„uBÛúžo–ƒ*èJí ŠïÁ„Û*0“QI£ tUЃbò,ë·„Ä€;ž,óxThéŒÕü±[Ž‚V éò¨P,;Õ28é,7öEQ˜)µ¾zŒ]¢`5±åºû:§×°¸Ü%mËþ³'|ä`Ý+±úL¸(Éj ³:i•c X¸€’ ®¢ÕÖ&²{4Ò’ºÁÍõmT#g,1dà?I¢™°‹‹T¼ë™šKÔd½š[¹“#ý å*íो„j)à_\ç "-oÀ2§€uÅ ç3ñ»é5eÕ­8’sâ¾:ÆÒS„œeBýÄ7–ã4g„Råšü"pöêùs>µ»µu•:÷̯.oô‘Å n¢²"ìi1KU§_À2g¾¸¼1R*±©Œ®+Š¯Ê ñ qƒÿ.îtzB¿‹êÂßß¿u¹#Éù­à†¼ï…¿RÜ ¬‰T´Gšú§ÓKûPç¨yW—“ÂÕ‹åáñø¡^ÇDªÿ0Äb%ÃXÊÜRgJÎnÆ¥Ã;›an®§SXªQ[ˆtŒÅOd×ymÁÖ¾1v©Å½w²[F<,P!æ——ÖÝþÉÉ©Åìêa°út€Å#‘ øf$PUaOx¹)<É`Éß"ÔÆìuv\DŽáŒòÎ#xÚÝ9ð„à‘j5ú–¶¦f70….µ‹ÐÀ"x"÷×Þ?þÛ›WÑ™µÔ §˜äoéû[Ô4¶³}°¿wÄÅ:G¶Ÿ\ÄÅLN“w*ãP}׈1ÒÓë"td?!ؠ탓ÊuB;H¾šMì{œÐü©µ÷š‡‰kñü?Æ;oÖÍXfŒ•РTÀ&‡rÌv ‰€°'L±Âo5v(|vöÅ|ÆÜ&ƒÞ$ …æà2œñòû.]&:ý÷-ŒJ•Ñu_þ.Éù‹‹|8£j¨P+KVû~ó– Ý}T˜ë¸d+ܤÂλ™©y5ó³ó¿¾y º<û¢u\üç¯ïÿþúÕû—/··w ËY~EBðoËc©âVÚJ:êüä†Ä‚Ê’ñ« Åíí[?Òâô•·Cð1\±× °Y"‘Í»¾¶ ÁVÞ4¸æ¹F´¤´HoÃUeø `ßÐÝo$éñ¿¿;éèó<ȱ3 _` #îq‚'€Î‡y-"áø ÄACÎíOâ2·¬mnj’Gˆ‚‘Å,¦•ÂÌ3^ù¯UêÒ«‰ˆX[ˆqE±ˆðˆT&KØUhEB±žú¤KížÕ•­‰™Õ‚w–PÊKé‚’aA·Tµ»ü0j”÷ÞÉi „ç0;ýííëQÏ„¥º¯¬Á!@ê0 Z•"”aîÉaüº¸h<™"äyî­B[ŒûÀ÷éÒòv)¸™5U–"¹YÐÀêT<¯‰U¨¡úiàKE[€Ï’î|R:’R2V:ˆqƒX2™þÛØØ#5IÊRº]ÜËi®íŽzÃ+ErÉÔ¡NΙBÁ&9ì<™5œboC_$<µº²ºMÆS‰C4ŠË ¤x´Dº3MLÇr8Å× °¼Y{þQ!¨zå–Áº)ËŒ±>i¬îF­á^^Û}Kû½<#¨ÁfÃ_^vÏH/7¿cÝ<€UðIßYµÈöÆ1Ö=CîçÚJ)³·õŸ<;–^ç—жsRŸÿöîÍêòFI•ýqfާ¥?&ÿïû½gy˜^ „ÿùþ=oû3`,¤î¤­Y²}q~ŒEô*…|!Ù´ñ‰¹4k'm€(’¾ÊÏr¼*¸^ –ÎÐdT¹#Ók$òRh b9#BƒYRÇI⾬~pkeucuÍÖÜŸZÜõ¸°+½âÂ)B¶Çètz«¿E°Ô<†ÉZ£Ua4 öº‹÷[Fý©µí#¿îŽá}¾h²¥ùçÌFÒ‹(ñQ9ØE–#œR"ÂÚ÷”(í‹5á.ÑŸ÷Ë'i"ѩګó£Ï1Èà#E½ÐÔ=FŸûÌÊX5¢xM`ÆÊÚÃ/¡ TO’­]<×% ì—Ê7ÝÏk/± ‘%d®ú¢¦¹'Š…:>&kÀº 'Á¯¯-­LE§‚Á¨Û36‚›Y˜ohÀ¯ùQ½wºÉýCÈ12žŠ±n$ƒõ9ŒÅ-&{PÒµ÷‡Ôšô‚ÚWGǧš¼«WÀF20¡UÐVB«_ßœ@8=ã”å—\ñsFý½ìfˆÏ‡¹öû9ö{ÙMØ9þRÜÕ=ðÍ¡•Ú˜T0Ööúú»/¹nùž#H².(4÷+äFxÖÔ麛ݜ&Ša^å„TÔfÊÿ& V\z%Åã^RH[›ûÇÇÌjbÞÕó2Ÿ4Î’ ¼r?§))¯m>-1€£€&ìó)`ðNv æ×!HŠš0.|Êo\Ðù¤¨ ¥$dŒq?¦7$eUGÃÑ_ß¾ŽŸ¸„“xe¸J * ¨%¤a",”qÕml¬-.~‘K"3t„h ¿®eI"§' 0EΤ«è+`áðTòíVœ®È¶œ›¬ý#x ™ùR•ó:P‚$áüN8=T¨±Ð<ù¨"TsÑ"N °ñ O,Óe §òºîPe[ ¤Ùƒ`å(öW@UJ­õÃ{[»ª*n2\Æ¥MnP‘`Aà˜3Е5V-˜H#q¤É‚³;¹¾à öÐWÚªï%zÑ6U¹•´Œ̧0TJ/¤ëwMFň”ˆÁrUúR[ÉÍ”µç6©ò#ͧc ”þ&¾èÔȈGfù“`rqõ€Ê•HˆGÂ,3×F•ZWBí4Ñç‘ VJ™ÌRsoxRÐ)¯ÄÞi‡Ícñ!BÀ±ü:…žk芈kÝ<¥-ÈÔê {–¬1‡ZÒ®× °ØÙ›I’Ÿ˜¯Þ²îTð¥=È-SÁ ªà !¿+C”[€õo°NO7UµâùXÂà"»ú't–7 mm*ëË‚YŠL º–‹Qò#$É3Bƒñç©óë;ÑjwÈ5ù´t0³R`,Ǻyë¬q*>2r£©žøýý»—GG/9ã,÷×W7IØ\®iA”â,ò†¬" 0BzõR ªÃ\êé°Ìüœ+íðËlci dvy€¥÷Ï¡Aazqº¥ô²!–.Ü_Ê„IØöô;€%«Pa ܽÎé2»7­\øp iÿU³£Ž½!(ƒA‘¶^5U1òqeƒ`,)v¦U<‡4#›n¶š{B0Ö?§×1Uáv‘SÙ;=³„ïhœvEtÿfÀ9‘.ò°©ÙÄgÀ~Я<'xÆ…ýè#ú‰˜ƒLhC—¡úÎÖNÂ5ŽÎW59²Êz2«Å ‡B  HÑ…,P8€WÒÊÀ’x%†Ì8ž•AdNð¥f*ÁÛ4Í–¤KbÁsÁ}Ä"È ÂÞÂ"äá*©§‡¬ûS Jó5ý„Ç’åFóDÝΞ*X¦gým$xÉ7ȯý\; ý;÷”€V´‹Û[„ÂõÚù“Ÿ•Éo°Ñ-ƒõo °½7'ãNÜNbŒª4`1qÙú6Ö7eßÀ/ ôÂTÎ3i]fº:ÜÝE`qFí=/²”$“åÎfU¿ÞÀ•ýº¹)B3ÆJ°–uéBáyö¨°ó‡§6`VG÷pÿP€Fr}Ty'³‰E—ä¥âÑ‘dé¸“Ùøs†ÀUÖž§W1Xk]u)/0B|Ì5ñ~nkniËðˆ»´²ù»9tSÉ-µÿ푵oȇäUðXø‹"ÄÕ;AÎgSªºM.{"Òéyui LÆrÅ~-túq|ÜÒíù!½£Äáb ´('¡o °Ô¥Âôéîžbk7i'äÛ3À’Óªy"$PáHᑜS/–šW„ßú0N$ý1oé“ÙjÉ2âÉ—[m¨ìJ­EŒÅÕ;àÿãÝÅ›¶pøÌ«zjía«Ø$=uS(ˆ+9 ¿˜é â'/~ã ïÌ«ƇYvMåwãçôëÚ]Ðâ0½¬—öb¨¿õnŸh¡,ºU„Pb”·…iY(š=kÉA…꽞ÙÿóáíØøJj¥3Ö§/F2%¶ê3“ÙÊr.0­rˆóò9]ùçÒuŒU¹ZSMu÷vÝq”7$õªâõæ3®5pQ©~Q…BW<º ŸëVÕN*%?z}U„æ&ˆFçsÁOr¼0ØöR¢Óë”_iÔßéõ«l=£ƒ¥Á'Ïè-Àú÷X* ÀbˆW7gÀ‚Á*¬í__뢳 )B&°K,Ä4 pg÷Ð}iÈá÷wö2ÊhÁ(‘hÃýMXgc,=](G˜'–ì¦;YMy`•9>’Ð$w˜û5W<ù|ÈÖ"Üø²lS÷È $‡!aï„N WøSFÃŒÆïSª~L¯¿“Õ”SWÙÐKs˜¯ž"„]Ôæ—^]Ðx2¸œÈœrÑé9¶ ÐȶËûŒ0+Ó&¡whìûTƒnú›Oè+Ãxºõ›,Z¾Jsy¦¦gןW¶Ñn/`i˜³TÚC$¸B.³¤Q¿â¹T›ÁK*ì¦S²Ìö »ã_ffWAN@«ïSª¿{RMmæÑÞÁû8MN=Ó7)Æ×9cuB«;8žàøJ^c錛˜Ý>½_Ò°b/êqf¹´NvdVÿ-¹æqAwǧ˹˜é€³ôà•ÜZdƒGÅ+Iñ‚ð1%ö@çÈTI³†F¬³»h›}ùù`Fåä¹Öìù”0ÙÌ“³ «åÌ_¢¿2UWôÕÙ*Ró/æ‹Gå}*ƒçºY— =“€`™Ñ§ùw¯`Õº­-Æ´JÒ»‘‰ÙõÆþ‰|‘—=cÉŠYb$½e°nÀ4$4¹cׄqåàC’% ‹«. °˜cv77ÑÄðäb³‰Ø&B&¿?$'˜#éM‘Z:$f2‰uC–yxUéB†~Y]/µ †ŸMù jªtñœ=âE‚û:!x¿°Ãp)ï1‹&‰¡±gßï@eB ÕÚw³[jÛÜùU=ÿýnш3|òâùWïÛCZvã0X_tA.ÎÌÄЋ' ì¯ ®.æÜvvSsìG\‘ïSkÁµÌÙJÛ®êìþ$‹ó‹$œÎ}!xjê?`阄Y:u]„ªZoA!’\èX˜°Ø0®ÕGù]óZ#“ ¬ôdí%¸º(¶ø.¹ò‡”òAG¯U°9䊦•ô!ÃBƒHÕ»©,Ãq´ÖÁŸì£ðÈŽÂë‹ îzTÐ5àŒ"È{÷*]ñÊÔÔBfI+toZY¦Xñc¥ôjŠ¿Q¡´äB¾í1Vs¢®<Çæ«éÍÌm4õ³­…³ Öù¯úù 3ß|6œRŸ2!:5Å|'üž"§v§V¸Ñò¨ã¹ó€BÅL=§¥¬>€ÊÍðk¨—0ËDt‰ãs†Ñ¨ª×¯`1¶æ ´ö'ÊÈUÃXÁS§%´ý\¬\âÏÐ-ÀºË`ÈuúJö£`àH¶öÑzÔ;q#%€ÑºÈ¼\fåKðÖBŒ¥l-ûx4/.|ûF" {€ŠÄÒs7`©½3§ •*Y¨n £‡–6¤ñLŸ¬Hòò¨ˆJ‘UºÔ41× ¹‚qRÕk¨óÚ€Y–ʾ‡yÍPYYÅöç‡gÀ  b÷ùéizã|‘Â÷o­¯Öù¡X«¯®^‚®Üþ‰Sm‹ºÉÒ½\DI¢JéO°2«Ý8z#rræ °$ˆ¹¨{‡H¸ÀÑ´ñåo4¥U`%aÍ@”[KKAÚõô&åÙ÷¶÷¥ôƒ@Z£ÒÙÿó^ñ㬚åÅUtFŠð­¡È('¯=ü¤°a Úp °´ûÂ@ƒed ¤°ýœÁõƒ(žÇ×Wæh{qxìôFqi"‹ܤ¼NÕ^(*åϰð%¯ës‡ … F[O]ƒeFW§N.™ÀºLè,‚$ì¬*íb)®[j)Þ p,Ý[°K¨mý9³þǧ5]»Û;¼HÍæþö^M«‡ö±XB>†Ð*aæfâPÊ‹¹õ:#/ŽžýöæÛ*ekb>Ë^à¦XÚe¿#É`)‚J¥bÂÕ¤å!¸aÊœ¦þIq÷)Ó|_aƒ×ÖfQŒ®f 7Úó,| ðgXóÈ‚J&î3ÔA2· {Ä£þâýœ‚Yº. W0.ÎÐÄ*¤Ê´B J:`R«ÈT/¯‡³¾ºËmlJ{á8b\ ±ÝèuΆ'×ÈO³cúvk¸xt%ÚܦoÀ"/À‚#FEÄŒ”œT&—6:WV6÷æK y3Gà (ã‘ô À%Ö%ç-¾ õ1d…[È‘ççù…Äi¹Â_ j1ËΈ“XJ¾p'ß$€u6•EèýFþ{gþÕÖ±}ùïÚ?w÷êþ®õ¦¼ÄyI<ÄÆ6ó,æQˆI€ÄŒÐ„„„@Ì`&3ðÛñKò†îon•(—¹XdÇÍZgiɲ®î­[µkŸ}ö¡p˜Wô^2ÊôÐf¥Só æ( 8Ûh“ ¦äó̶ø]ËirGÞà™Â…xœñ:ÉÊa ¸‚ú’ƒçbƒU⊞Øó~mpWºbƃ½PÒ«pÿ“,Ý©¼9]ïɪvá*D‹l¾ÍëcaXénÄ€l SFëÆ¼šœ„N8ˆŽF6Ö¶8Õd3!6í÷„kZ‡ÿxÃ’]Ò<_|ùäé¿Þ¾^_Û²ØÆ¨íé…x<ʾÑäé`sï[zH Þ*ë+¬Âoúîv³ØN¢`°D›êÉc ¡¯J -‘  ²ë¨ì§S b|@•îÀÎGÁ 2óÓ¤IC5l.`%/í4–÷ã ·X<¦uõÀRnd¢Ã#9 ½¬R×ékÇ –žåTxW>Q«mÒXú=@`—/Ñ1ý6¾4ýntLq´¯h‹0u2$äºX™X)’®)…°x"ŸðnñQs³´¯­—â¯ó8€“¼£r5u ´&„mâÅ4¹È0Ù„ÒÂHîíñá`,^4ç ÷w÷½ñ;ƒ’ÄÒ5Å„i}+9÷N¨¤ºt:~JÉä cé.Ò„u ÇŠ”dJljéb ¤æÊü<Øç©È§¾©â ª¾Íµµ <ž#Ÿýæ¨,¸™ßúÕÝf¹TèªX`èÓú'XJEGû%¼F)$LØ4ØBXf˨O„ˆ*wÜíð k‡þ’ÕœUÚùp=áÔÏ#-ŸŸìNF,°þñzi‡côáæöóLJuc?ÛY°ä’¬10> ½M=¡pxª½7Xo÷·öEO°gOàÈ÷ö Þ™[Ø×:wanÞÜåƒQ“®Â½ ™0Ú¼äó*W89ñ¤´uÜÖÃxS&‹XþqŸ]ܬ·«ÚÅÛlA°Žý/yÂ~]ùI€Åã °Ôòª,ÎO=ô÷—?±¤Ü­qç¤%Ù9QKþ×1¤6kí“%b$èŒàE¦9ãÜÂöCVjôwQ{Âã‹^ÙCc Lò“ü›()2îÕ++ó˼Ι#ubV¬~ätÇ•ƒcLF¨/K›FÆ#s¿½9:‡0…ÌÝÎÚ•YRz¬÷"LcéÝ…yfáu€ã‹ôò{éëH¢ðzqÌèKFµã°’pïIŠ{‚ÆW¯¤h™œ$Sr]fRo}¨P(ÒÂÚƒý®×Å,6@îR÷TÃòcUꯧY0H þÙÄßÒ:ð‡[µ7ŠºñÅ]1üd3Ý¡«O °Þk€yDóX³säÁô.F3Ï`éØ]«U ݫ‹±/¯a4Y,l¾^howøþùókU쉌€;5½TPÝõ§›–‚*{µ¿¸Îy»ÔŽàAq ~™®1~c³wyyãõó'‡[›P¡óóËû;Û»7ÙÅÁq2º Ë)¯‘Éh}м™Þ‚ØóŽfñ…á*Ã94â->=à›kvNÖwOXÚ9{AðÍ•½áåèô ŒáØY3ÄM‘]ïÛÙÞó†æc3ëycÒq@$ñ…\RRYšÓºÈo~ðú—°äo”KŠöñƒGp«ùŽDN3HâÑÌ`ÉÏáÍ=£³‹+[Öþ(W'À.Xƒ%–<&µ—*O\h å7“ëÜ 0 Öj|£œv¯Ö§b°’4xJŽt£Q °¤ôŠ)’âšÑ±øÆú¶ô.:G‚a†‚]ÀìQiÒ/ÉÅs,¨,c|¯¬ÁAEóÀõbçéUïÏ87#-=þ%,ýZë£_iØ9(Ïä)BŽœmzëÀ4Ù¨üGƒÅϹC½}…cwûÑ….4e€©ã6(+,ÚY;õÚ{z¿…y}$Sáçì3øêh~aµ¸Öñ—;MdXcØ¥O‚û$èê“,d—pd×{Ýã‹û{‡MŽI`ªÀÍ<À2c,yÛ¢FGØ×çŠÚz׋º‹ëû~=z)•Rj<À6--®uõ¯çÙþôc}n•3¿nDUn‚® äê gÿûÑO²†fku6”¦Ñ”<3ƒ1±ði ­µ5(sÞ ¾…àKW{GÂÑ…üºaš@W¶}á%£Oç3–W¶ƒ“+áéÕÈÔrõ†.£}25¶hÀ¡d²ë<ñ¹Õƒ½}úíä [¦B1X‰PnæÚ¬• Í|áKÔÄx™ x®‡þ:ÀJÿÒë‹Öñ¹5ã4:&î×xT3oýœ˜,õ!Ò!˜»Äµó…—réîðê/`ߨè”Rd' XÍßÍs‹Xûùœ+ëÓj°äUªWwEO‘ö”o`Ý¡JÙ(W6œ‹qB¯hñ<;<øõµrõ<2Ý1è v=Mè˜ s̉òŸ,–L[oyCvU? ¡éŸÓà>ö0&2î·íN}I‹0¬4'A3ºB/â}zøÄYaF¾]Ö{ary?ØèÀsáW âõïU $XŸçwU3(½I×W7|c“ÑØ²t *Ï:ìy3‚襅լ’Žk9-€~2 óãMu0£«Ï`);œÊhp(C~Jë7Î<À2ÃJ P<®uQ|CúõnyJs—ÈZ4Œ\z:?»o±ºo¹#üvevÀ£ôà5¼Hj)|s̈ó„à‰Ò$ìí퀺 ²õBŠ7/_d•´ÿÛÞ¼ 8Šš¼cáyop¦×%º‡#ýî˜Óõ‡æfV§âºdrÀÍ›å¹ålÇâËÞñ¹&ûX¢»—Õ@`x'Ç¿þÝEßrN”^[„ i)€¹€%<ñ‡d ‹¼Â7^$ƒ¥.½J4›ýÝ#Ó+¶â³ Ý‘œz_‘–(”'ä„È¥MX|H=²½õhuu§º+ÂXRÞ­IÜ+Ο"”LÕ¥°½ö©îB„Ù€U…rg;/‡x°>UŠP«#lŒC)›ŒÝ>Î`±$òÒ˜qØvzcàé,{à*L†tRýRƒõ½”9k›õ­íCÓ3KƒîɶÞP‹#”W7’U5ŒZ"Gt«?i%`Vû)yÃ+€•2}•à ZÆÛ™wý 7(T˜m¿/rt Œî\Æ`€±˜ŽD©tm2ªY%ègù†à6»+·¼ý/·,ô jnœŸ_Awx¦Ìà¯]å”Û¿ËkÏJˆ®ÜX7éêsëç°”3ËY-ÿÄbugH@CI¼e’ÁJî+[xÁ]u~ µÃÆè*·Óá‘By9ƒNo¢‡[Å ƒE #6ï±.±³â§ÉföÙUƒþÐ ¨Zá3s™*0 Ý%$—µ=äã¯î6aq·b€¶¨ÑZº–g‡2'n”8(v~Wè¸^—9x»r(»ÖÃɹSÞGQP2ÁëØgº¨Ñp4ÅÕ!?G Ö;:]Ó9ŽÒˆ÷—´ª¸ûµî<‘“óUqbÊ: Ä«ë,Cc­ŸÌt‚È6¹,|*@]ðµÈ›.P䮞œ0_åTô{âož?ðÎ’Å‚U=)¡,žë¥ˆ”gŽGâkÛÕ;&¹¥&™|£¬³‰ÜƒÅ#ŸÎ(a¡51&×gD¹x´üœ+€•y€¥ú3zºƒÓsk¥6£‰¸¢s2ÚSVݶô·†XP5Žl?Ü!i’ÎZHþçF˜ö$Òã O¡ªaäI<¾øÕ­ ¬ç)·†Ê‚–X[Ûªh­íkì ’ wËý—h¹ªnQ“I÷}°N„Ž®dý`¾5ˆgôòöñ’#CBú*¿vp}}ë’7¸47‡mòÿ%}eÏ%L)þÿñMM¿ú±ö·ªo4­>Øø)å̸Ô]­,¯cð`2tÑ•ý”&AWŸGŠPfÍPu»føQÉ%’¾:6mâñS1X'ïܧ¸60YUöÝ*ëÿ¾ µ{|fñ—W¯t„xtØù6·õNYWAí`žÖž€+’‹e¸Ùîù÷ßß$<Àwêu˜ÐÐ!ôAvøø»ü6°ú1")¨š™}p½Ä‰Ü³.,àÁ-½ÇÈTE›‘ T,20«ÙÓ;µõNHÿ9éï_nó·:Ç-6¯µw"Á wË?±dë”Ù X™ðEš˜µDJQ<)\Ž^"Ç?e÷®øG¹ùÒ38cMèa±GqÔã0øß M*ßÑãöABhiöÏÆç6Æ'W8'`,Îq‚ÞÓ–xå]ûíêΰ­oJÞžÀšÐîÍY žœ`q¬zê´BÌéœ#=]¢ÐÕ‡¯GLºr|W Ö§XTÙTµõŒD‹­þªN™üW—ïã«ÜÉàÄÊϘy%è«ô-XÌ’ð .ÆzñìÙöúêÂÜ"«Õ>ÂþÑ+AyÑììJs§û`ï`gko~qÓœ«³îVeUŽä&äY2!¢¥M;B‚÷\,3À’M ²ªZÝÖž î,3¬:F‹€ÕÞ7ŽXåqÌ‘¦AÀ%ÌSr@Ï"JãBVJDî/E^ÏfùkVÝ·÷›®Ýoú*«aÀ¢IpŠ(ð¥ÈF1¨ kßçKt5”§¬D5ÑUrtõÉ« )Ã"½ÛàŒFãëöaœ™Q?þÌ,˜PXëQnXvJN×­™ é“¥¤ƒ$ê Ù(zñÚ¶QšAQ~xŸðÇì›þ®°«ÕZX\_yð0[tÇêì¡Ü/¹ò»F~M­¬â=´J,nö*¹ "“pM›¯×gŸr¿@­áC±¿wœ\.kñ‘}Âw¦Åªh•=¶ýÙu^‚L"ÿ¤c@Œ=l±43“(‹s ÔéÆ+g,K¯°Oß*ífðè Ñ Âr®à9xãy¢ƒu"Wˆ;¿áZiËØÒƒ‡;[š¨9 Õxy@SuC’^\e 'i¶g$yÈÀê¶ÉòOL-«5‡ó¥ß­‡Ù{)÷U³’Ÿb,”¤Ëƒüß+€õI–ò¯T·ŠA&Ì!ϰlŒ ÿX:›Î­*JšYB¤Ä`e&žì”V4x½!´>û»O¼yùÍhl¾Ó陈ÎýãÍk¦Ý·bÞÝyš\ìšÌo ]Ì(ü¼ê#S‡Ê{S·/7Hr£Ÿü»ÍÉÀ’Ó窲m,_ØÙÚorD°ç|‚6˜m Eiµ„#ÑÅ–ªj!ˆyy¸·‡/…«ÉS„”n¯­¡s翾yeíZ}›ÝüÍý¦6VÙÔ Kÿ÷×·½>:)îJ¡+ņšjT?/€EèÎTWÁ>¾Ë¦½`ñ˜y€el¼Q‘qo޹Óm}áhPÒéNsƒs]ô fš_\½_Õ—ehî¡¿Š¿@Öªá ·ó-º›—t„'ç˜÷’$‚ßÑXéåãÇËËëŵ=ײ[`g¹î€‰ìÊ~FÎß^P‹¯ s¦G§—:ܶ._e›B«Ìê®íŽp›ã†q™ E—ù0Ò”A–é•6¹6Ì/¬ã¦&×S,'j;üw+‡@ŠÍÝÁÆnJt^Ô­}“mýQ~ÅŠáìÚwÝByd{ÓRÃÔôT£`Ý-‹ÅûØ«-”ÞKf¡ðãîÕOïÀJX34ylÝd=&rk†ïˆ, S$5Õ`¬ï‹ººûƒGO5™KÚŽh¤ùxBqžì&©ÿ‚ÊJȰf@³EŠ=„;?6ýáVÍŸ³êÿz·>™%ß—"ºÂdgk·xœµrBeº2WiÍW|Â…,ulÚ $üÄ5oL^Ô1â§X'úL80¼$P>•4¹²«‡hyYÓ2ô…€ÄÇÊóì…Ñ7°©ËgivmnìbRŸ[ç‘[)îqणÑi ´gÈ3£™šïmn2f05íÿ&ÛªÐC 8•ƒªO‚«Ý{§Ì©DAý0 :±Ûmï uEk:üÍέ±Hù5v …C©TŽC«ã#O™QvÍ€¥ytyeã¿~{ Vû7Ž©«›–£qãäžÅYÒñÖcë§kæëë;ýžé\£olßÊ¡{µ.Qi1Tl š%„p¦Ôwf8¸\mŸ|¿["v–ET˜1@€E”(C¯t‡0#˜“‘¯¡c1ZD4úèÈ4àÙÞÚ«éTµù×Öwœîýîã$Àâ‰NC$Ü­›¡ØZ$úFcc–Ó8–×ÄI éëœU„2ÄqD1­á¿4>Vßd-ù/0Oæ ¯V¦–¾Â™#%‘;oPK sª|)°ÈÂü $j€µÀʈKÉQ‰–½² Œ_ñkçíÉXÍm¡EòWsóJ‡òë{†'Ë­ž¥}?– ‡gš»S9r·Æ•ÓàaÄJk;ö…ÌÈeÜ'3ôÿŸk°¤‰šè^Çôä—ù¦xD'DVÕà­¢ÎØ4uêä§U4jTu--QØÅÐR R¬©©^²ðþ·7¯hèϯêÊ«hDgߤæV*ngM®…?–÷p½r“¢«sÌW©ðé3X„É$V…Z]Œ7d`%Ob+SÞËq?’Äãðn0ˆG<¾ôOÄ"x/͸ý±F»Efu;M|F³8[¡4e}€cH¬Æ÷ýú4ï,Ó™0Y|º#s‘ŸÆ5—ä èŠ<ž í½ã¼ÎüÃwÁ¢â]Þ)r…$Êab8瘕6ŽZÚ‚e­Á²–Q¦ti=€;*¢œ?G’]Bc´¤ÙÍ*Ì!ñ‹²+U-Ãm?á LÕ¶{(6@Û÷…ݵmžù…5ªFøRŽVþÙãÇî’[´N²Oþó&¦¯l¡Á’€’-´!=à ´ùËZ¼€!Láy¯w¾Ò)li¹3só>3Àº ^_bqžeCnцËWlõ•Z}WtvaÃZ°õMrVU¡¨Xü¡9ÕÃs…±D¹"á…‘Ûà£V ‘À‚ÁJוƒ¥"Ê8 ¨PUmha2¤×õ[UF–ðŠÁú´>X'zÃ¥˜”‹bÃØ•tÕtcØè¥ƒxXó`dÁs&c@-÷ýïN_Ôú¯#—g‚v¼h³ È¢ÓËCÞéª6¯Õ1>à™¦¢‘ÄCRªV`J•KiÀ¬/Pä.{ÖÊ ŽAÛÇáa§Î*x«Ìy»¸ 9íÕÒÄXTŒ¢£z~pðìðP¥§¡“|²F^¾¤µ"†$ëÁµ÷{Û{û»{4¢N­ñ9™ ªæþ¿åµÜ*q"¹q„¸GCWš»ÍYç+þ$ùæ6}€•ÜÉL…¾UË4ÀJîÛgÆÈBûLˆႺÁ»gYC߯êCPŽhÌŒ<‹«Ljãp «Dõ“ƒ'NO.$·–ÒE ƒ¨61ÏÛ~¸{°G¾ïˆ‚Èéù3ÔWìeaD­êES%y+‘ºêg<0–xõMÖµŽÚc,Ù'n•÷ÉÕ´’cÁ–­ï×ùï×ùò Ï÷@cÏ$ÖŽÑ™ÿ< ¯|f˜ ªùäF»w:¾Bn}w{©Ãƒ›Å Ã×r;rªúè`Fö‘–âêT¦§‡w·öBã±¾Ñ8»ÁJúØ.æˆì¡ªé‘0K¶´Òú[L$†Õ[Ô<ÖвöÇ ¬!i€nÆ<ž °.]Éù¢‘çÒÀŒ‚¨ã^Íh(¶ò¯Ÿ^>5®rûàâ*ɼ*€e–Ó$\ÝE6°PT Øú§JmªËq‚èqMs2§g׋„¿RRi,È'ÙÅ™ŽÙê\ i½6aÏNzžêŒ>“7\¬Oèä~Ö&áŠr«‡!Áw‘Öù[n[ES¿Tˆ§S9Ϧ7ÌL!!´Äl,‰%^‘kjRÊÒkǘ¼ÀdÜ¢¬2oøäàyŠ'€3f[Ìš™‚ïW» ¢&YȳTù} tÅ—nÓ@HŒ•^4 »ð‘†CÌõ7JzÐ9­¬¬K5ñù‚«ŒÅš2aO« S†Cæb*dI)28 °øß>J1"SÓ wËì7Š»©À¿Ñ«jÍ“dêóUy›º‘#'ª¹UYÓ…k°Lû´waò`ü¤KCûd`i~¡¹µƒ¹Õ@Þvk—‡Z<Ì÷>ʇº¶Ñ슬>³ëF»BÔñI%äý]è¨ò®[EíwK;F½“Üõ¤«­ý˜ÇºÝ͵ ’Œ押ª^Ò‚÷…NÈH W÷ÿŸ_~†š}zxhíöXš†Àd ÄXÜb|ëôdȲ¢c±»sp€›«s’ÕÖ12¹»{0=³¶¹¹»±¾KásKï]t {Þ²nÇPˆä#e:Ô-ò™có-®Ù¹¯theîÄjø<¯¼|þ5êÄÔRkoþìvųŠRº°$áÍ$døÄ©Uí¾!ÿ|e§!3;3,S7Àº4T͵fgËsž(ŒE…fmgh$0?5»VÛ5$2,ºœFfÃÅ  ÅVÙòõzf³ªGÑu]DW·±ùôÍstN:u€å1,•ïƒÄ*çPÚeoüpƒ#ê -WvLðü„õ¨1&ö¯òg\¬L2XçO(¨1g €å¿W=ÂNkÐ5šµ¥'=†K‡¾’Ο |ÖEXŠož¡ˆSf~5Aè'n”:È6 A³WNc}áF£'ùþi”MÔ¹ › gWvíìÁ˜"±ˆ¼QÐO Ý·ÏgÜO% îÞböúBì^>}‚:!jþðTâŸ?¿ihwQ6‡!DfLZ•¸ ‘œ`%öÙ¢w™jkÂmÇ`éHÊ !2°ÔK€5©\(‚çŠ`PÙ<°½¹m6šùõÍK ¦Ê9ÂÌIÞÅ„ÄX¼x·jåïf1C´íF~ë÷ù­˵]/°ý÷¿æ‡#3ÿøù5J¿éé% ¸ LÆæ‘¼_Ñí ÆAB}#¡ìŠnd ÿ|ûzzæM:Ÿ/ß ,`]Gr0à‰on>ªé#ÅYisçvˆ‘‚zWG_ؘ½[͇ŸLY.ít&&ç}ãqp_ñüðÉGÇê‹Ç™ \çOÇ;ÆýÇã‘ÅÊVŸ³Ž•¥i³ôfð¢)íÈ úê.\£Nš3XS?–ô XºÊξÀ_ïµ”5ô“ÔûíõÑT|Å"gFµº“ÎX¤r˜a¾Ínq ŒÁÏÊS®--±~œ}\°Þ4´õ{»= Ù“sàlJ"¨‡(oìGîï ü^ZH«ZnõÛÓX²'q×Èltf½‚Ú.`™…À¦1ü™,¾åC õ}AÇ÷9ÖHl^ò7<ÂýdY q:i;Ùý]® DaKÂ(Alââ2VQR37òu†ž h%ÿPÃd—Ýs ë”-7vúè|Êð&ÏèŽ,-­cXE… XƒüỆ¿Â&@B¼M"n–D LRY‚'áëéºÁ‡ÿ5«éNIkSÇÈÖæÎáJsbú¥GµXæ"©ÆHt>¯v+÷¸Ì°@@:"O˜‡sÌå­ÁÅ¥‡Xª–4¢¸¡T…c+ƒC9ŸfI€Å©Qt‰ËS]¯ª!ä!©ÚÌïtÓð ·ôûS÷“+,y’íCSÍÎpcOÈêŒèÙ/{+]8Àš0Êj†ÂS«¿½ð†V蟠Lå“Üäe¤Á4Wë÷°º)ÆÉ¢>®q&9ýBz™%DJœ±v„Äòü|fÌ Ø¢9ýÓœƒG6‡ÿNÕ°9O”ËœÙQ¡v>i¬tƒY §EµªŽ„‹Ûí’6ÍŸ]á~VKi°"“³×n—.-®œ`lyÛz|˶":‘ÚÙÈ9ý‹®,½9 ! Œ.`™¡a®Éÿœ,žŸŠ±€;9µÃ¼«ªïólóó«´sÆ”)RV™CèÓ‡sɾ%ø4‚cJŒ…0K¶Xæ‘`zG>AMÿûΈXã{$Æ*jòŦ–÷Û{Cw*ïñùÕC5m—oª­?ÂÞUÜnC¼™'§G"I§§êTžnŒõÑꎪ|OÀˆ`¸EÝßfÛþp³Â뾂 Öæ^v ŠÁ2éŵ­Ž¾Ð}€cU_̈Õ_ÝêóÌbv`ë†bKNw|c}çù“§–H¤&2…çd¿³ÁQ ZzÙò2Ms7f`¥¤MVïüäË6®@ƒ”¦b¬£œki‰T-ºS:Û $JSé¿„ëãþ)šþ__çÐ ˆ|ÖO +ÀÖÆ¶­›~½=¬p¢Û/Quú´¥YƒÅcI"8u¯Á:µ‚½TÔ‘(!üL5XÑÓ[A·3äòà0h¤CïsZ®Ý·Þ)騰¹--^¬Õi,†Ö;·Á-ó}ü‰ŒCÀ/?B¯=Ê€øÌÂf‘jW–ß2¡Æ’|«´³›âFCBÎ;s x6PD^ò?H”˜"x‘?1ûéçÍέÚ£wE-³T› )¶øÓ­êµÕ ]ÑÏæ€•d—øËë£'GüñšÎ@qÃ@aÃðÔÌ*~ZøÑƒÀ¸AV×¶a¹~´ô>TMOnc ß3K·1+íüZ £þ‹Û=Ó‡‚x~Œ»yÜžý‘™YÌ©"w]m&A¶ ^9!üà. `øÎ(@Eb"Tx óxí>ÿJåpùÃTVNƒ[r¼É‚Ï¿X— °äeO3$hêžUÖ=ê‹rª2à4ÛJÈÌXÒכnjC@ŠÄ¢3uè±pd.¶™–ÛËd°tîÁ¹¹¨ÊÉÀâ¹êÔ+…ì¯øö›ÅÝã¡ø/)§¤Y0p=}¥ì¯6Ö7ïÔaôÎgìÛ¼£ÓaÏ@ ¤¾?¯n8‘²èhö!Hmî3vÆ*BÝ*| U„æm=“èrs†h½¼¿¨a˜ÒB”XtžaÄçÖ]cs”Nƒ•)[á±°É[ÕÌ#9(€ùA°…á/:ñ9À¬¼F@’!÷Q‹´ìCÌ¢fÌMü¡›¯N¤•òZôfFÂ%3æ„ÆJ*t¥Ó0Ò Sš÷B´­½“.¼²Í°kRÂ/~ëZNkwŸŸ]Šš—žB°’À,t¥ä©¨.ăæf©ó‡¢á8©lÅrÙ :T¼ìFd×{ÆÂ‹K+ÛµÝ\Æ-U,ê‡è0ËLh¥°>ts}àŒ’ÕÅ6Œ¡NÓò¨7ÆQ|¤ ½Saú­rÌ}© !Þr'–nò8túêÔs§LG©°àH°¸f,!ÒA5IÈnzWëR–òÁâbjÀÌíZvkAu7ÕìdÁÒg•p¢$>c‰B”ôñåIf‚5›‰¬Ê6‚š½/³§X—ªÁÒé+ÙÕ•yDcR„ý©ÁÝè=Ú™!€¥Ör^T$Žb·‹Ûž ²,ÆžÚøõCbªF,Å@…ÓÑãþoÿûæà°³†3IÞÉòŒ!mEó0¼ˆà3Nç,KM©[óÿ¦îƒEðÊeø`)t…îr%«²ßÚã+¨rÉ-Õ¾ú³X'ï…±ZeüJ'ž-¬Dýã³KK/CCC5ð"0±hŠÚœaK‹oØ7ƒšjÐ;SÕ(kñ×v…šz&JDÖr!?b†¤g³\˜µDˆKÒ L&)B­Öœd hI‚'BCTµøÊ}Rê$A@AK°shÊÚâ2æø"ÉÒØXpÉþçõ*È`5Í>ÚÞ&ä?̓\½òöèe(270:™]Ùg¤MEi$å;Y€ÎDC!bLÿò`*Ú#Þɲ¦ÁºÎ@ÛÀ´¥#"ŽÖñ0USÆô5£§6ñS´b´Ðr§<±ä˜7%gM¡Þp¶fÏ` ³–y+Àù­¿:ÜV…裺ÑO½!Èƒ× ÝŽ}~î$øê»#ŽÑéʃc—èlJE‡ñHÀAÿ¶L´©áŸZ¼“À“ÿÚ//ܹ70÷ëë—Ë‹«4SGÈÏÝÁd».DîW=ã ¼ÝâÂj‡ÃÓ7\]ÝØÝÞÅ‹ñÌïõg ŒŽ×Ù5`ùÌÄ•btŒn ¤`Í0¿ÚÒahËJ[üÜÔœŽXƒ#VaÀ¬ £ëæï—°N³‰Qa`Y~‹.ÆÒ­y'sú}§,HiàA¨'z0}sŸ'?J1GaåžWp*, ã; ¢êŠ“”–±Mžžà\\¬ËXª·W/?ç¸ÈËÅuÇ駸ֹ¹¾õ÷´½¬X÷¶¶v77yr©F£,·— ãÌ]‡·77,MHAá>À¢ÌÇîš´w°°¼]Û“-Z“ÏhX„I‰åclcœý}~ÛDd–avV[²b›~Ž ÷Ï·oj­ÎÊڶý½³*±¬4ÛÝ4É‘&X:ÀÒYa6±dÜîUÓ«NDâÉñ¡iZ‘??Ç•J?EÈ#+µo7Qj—ö²¬òÊï`%/ªUí«ß§²8pQë÷·|û7¹íßä´ÓöMN[aÝ€w|vqi6ëk·7wq(xrp@éèãÝÝöÞ€'´Ø60UÞ†…Ò4=›k»"ÔÓu¹â-ý1Kû8 jº&xC“#ZѲ´‡1¬ëŠÔÚÖV0Ö4Oy‹›ZÂ*Û({Ê›]¹µC¨¾”ÆGuÞ,—PE+WʯÚ×hµrڲʒÉÑýGÛw¼c±!wdØaÿ@µ• °ž‹ž÷Óñ¥Kûÿü[ù^¯øúnÝݲöñ‰þ—=Æo¯ŽÈœÞ«2Š+ÕzËBå -÷ò'óê<éU=\Ñ:ÖïmpLr<å-^ר,=%¬²Ãl¥Ú‡ }‹ÕÊÛ).cåÖáwå:!@ÔCmÿx<õ¾û ›è©DÿE,¹ x”Á¬]qªÖñ£½íÈõ2 rLZŸ‰j{´¶+ŠpÇìþr°~w,Ù)‹-Ú†*7ÈD¢ð››ÕîVÚÉ4ÕîØbñx©ˆÙTÙË ŠÜéœNÞ³t‘aabÒ5XXUC ’fg¤¶+œß(«`ˆÁœð¡àÏ3œ"äQ•Ê,!ûfLn©ÄdKÃZölˆÁét|±Èb}°¸½ (?ñ†¤Ý ª[G¯÷ ëa¯¯Wêb ž’¶L K̹K§1CZˆãyX½¸/ÅH`é‹£S÷¤ZPWëôt¡™ÊÙK˜…EzŠæâ)Š"²Öü 5ƒYåŽÂÚ¢ºþ¼*g×À¸Ë7YRÓ5_ìwO[á‡;tSy¸¹ÛëŠÐ:zmm /†œ×°fgkwumÇ^†£²Ål½MÝzûX‰u´¶Ó×Öê ù‚ScáÙ@x¡²ÝÇ4+}Lñi܆d>À‹ªÚ@…®Ñ–:3dõ5¾œê¾[ÅÊjüíÚšîÍ 6´ë¿½~AEÅÒüüƒòçµûM4Q¸Qd¿^dGBWPº_° ÉÚÂw Ë%Â$'—0¿4ÆÀ{FÒ*½ ÑÏñß­©°ù¬ŽPY«áGE‘#-Å Æ®%€EyaKX`‘ËHš Šú¬²GôÖ¨`8àñ¡#‘%8üí©Xð?8#¼„CWÌÒâ©·-­¾2«·ºÍWÑê³FzG§»ƒÅM¸ƒòQ£÷kGK[ÆZœ‘vï?^y°åŸ·Ø¨ô2Œ$ŽP×¹ ã*6Z„‚šyïýÿÇÞy8µ‘mëþ}õÞ}õÞ½U'Ì9s<ÉÆØ&G!D‘…‘“@BDÆäÆyÆçÌ™{Ï­ûë½¥ím˄ƞRÕ*U¢ÕêÞ½÷×ßúÖ·jÝY4R~ȹ—ß^\ãòzkkÛ«à¿Ý¥¥õªæáo ÚqÏÂ’ž€9þ&ßAuÔ‹›èÇ'OÆçj“ $K‹ÏÚ@$£s•!Ô`"—1Í™d™æ‹p§7ùä¾2þÝ>Iúµ¢ƒã4w1N~ŠÐˆÚÁM6qne»ß³Œ„rŸ§tš‘ÃA~lr¦_œ Æ%”:Ï`¡³ãkp–Þ Å‚‘(Ʋ´µ÷ð †0$oÒ0 o1ÄwÔgl”,€Epx|"i€õÛ,9 i‰ÂoóÛz‡è@¯Ÿ¿£øëdoïF»2G`óÍ’ÉzIPÀ9qsyP’ŽŒù3KÚ)P’5eÀÓTú`âÉ,,ª}ñ`vãi’×°\ìÍ!Ÿ•QU§Ì¦AEÌ©\ʰ&X`X»_`­--]`)Øm^ üAÖ“ýý€?|rpÈ>ãH¸¶6v‹ê†ïZûøvçtî„EœaifR$këüWëÀ<¦Aç–^C€%C×V›õµê8¿,€¥¾š9](`–ìd,–[v¶aàÎÄ ¡@ߦÞ"e&ªê|†#¥áÉ<’Q>t_Ø\!ºjî OÏmÍ-n×w…ïWŽÞ¯É­ã¿ .côz×ÔÒê.å×¶^ÈÒ3+† øEEUC–V½PáZ…®ä† õ=û9)‹%¥?“ù÷…ޝîVÐUývAKŽ­›[Lt÷ävS2!~$7ÚÐác1Ãóý¯wo±žot…ŠêÝ pû—cmó#<ÐDNÑ TíLz\Tÿª Nè“áµÁÉÕòV/¢KD“½›X wÊ¢ËF?þÏΞrEŠ•ŒŒn7”‘ W˜†w¾ùuFž”¡bb°š ^ÑÐÓ´N4B‡Šïü!~L<Í_›%ïW –;ʶ5¸fzf€ü&‰‹ ½¥S„)Xª·—ä) û ¾_ßuÚš†öwUkú+¦a X½n”Á’‰HÐÕ±Ð{QN›uzx˜thÅ+Xêüþé;La%]"[$ÈŒêôÃÇë_ˆÏÃh”í eXQÇQkïðXøŸ?½¹ôÃZvk }ý.“Àeìµ9ÖÊ–¦V×/oß~ì`Þí—k(Ìô"hKå5ª@‰X~6C þÕr0¥Zfx5»í§`]\x5Eœ;Â/ÁŠŸ.$B2Ò*5À–òYˆâ-)ñFá71÷v?¡w„‰þµq²¦Ãkµ´²¹¶¾WÑî—)6‚ZÝûUcáÙu„ó‹eMãðC RB`1N¤ÊYg§ôÔ“N”¨PtcÔ‹«Yó¤¨5<)Pz¤y­·r[ˆû¶A°—jPMHë ˜ï[ÎzÇøÂâ:‰Îƒý#£ÇÙY³+`ïòó¥X .¹ÀWOÁ,Ñ*g€ÛYù£¢yô,àyÁ`³´L‚CŠ[L¾OÀR™SÈ³Ž¡¹¥•Ý*g0«–bjÙŠ&z ùu†‹˜Í1s‘S]„ã]SÇØ¸`qµî[{àôhqÓï]ÎoÔLغœ@'„I?cE/%b©d,Ù9( °~+€¥|G™A¤D†ñí⎠ß,†1WcXºd!!p‡×›CWú'ÊåY5“ü)‚8 §XZ¿-ì`6¬EãX…®RÖ*ÇÔää¼YÝg °Ú$À2tî¤-òl]gX/®RaôWFêìaiqíßäþúÓ[ó_{÷úõÞÎòÄÜêá˜7G°L{ˆ¬!&IÀÄ•Q íokÊJ´J,«3\^ u~RÌ`©8®]_ÀŠŸ.TFƒ/¥Äܽý\;/œü¨‚¿ÊˆÖjÈ,¯~‚4ÄcpÊÚêÎà†ÉQt›£?Ü94]T?†A’òíd -r‘Œ­„M“±G#¨"šê"Ú”Ñc‚–›TB~ä¹bÿ® •4OÐr²5ÞIšïˆ}aÝ­Ù]ÛáqLxææ—6[{BŤýrn©¼E{Š–£1ˆ“]7žUãæÖ(oóúVí=³`:Å#7*[‡±”¡E}z½÷ðà„¡jgÐ^kpE¸ q—ÈЦ›?:ªEf Çl>XQr_Ý=ýËë—G'…”NŒuå$(£™ÑÀŒ/I,Bv "tú*­Áú=,æ—‰5ò]±$±.Kbn 0Á"ÿ‚ù'芜¿OY €–zšäfÏ:»F2ŠšÐ4@³çÖ õUÓùžt¼þ†­rô‰ìsX„Ò¹3¼‘4üPè b‹…ß ssd÷i4e"}-Ó žŽOþíÏ÷i -áZ´îUlðW¦ìSÑýéÇ“ÃáQO~Í€n7ª1Xá\‘¬aù4Bh¨‰¢Æˆ<ãu”È­#¤“83>ÿ›âaTgùÌ,±–Ë‚€YVôDV|åfL`‹` cdrq¹”ï…Ò2b?*°¥h-øªœZ7 lK÷2ÄL-^®¯ ®<è{À@ÊYŠ"ã„PèJ,ê1‰7ˆÑ#¸FD të‰'”Q–™ñfäeÂÁ| ädo-j0|¼¸úšuH47*S¢Ôèܳ eRqRÖŸQ>Xßéƒl+ˆ62—UlL‘3÷wWÍžuzVØ)ò;§+:$}kBi¢¾¯,I,ÁrNN­õM,þ÷ßßø§×u€%Í™¹¤æ¯c6f€å‚XñfököÃó¤$uÓ÷ËŽKÎ\"´\Ó¢"†ˆˆº˜X‰bç,2Ûtá— °Ì$¢ödÔQ.v‰,8¤ÍM Û,W©4P`éUV{I œW§Â³¼mû¶ ƒ ¸\‘dÞd64ÑW¿}³çÏÁÒ3›%â1‘ÈÚ¨µ{â—Ë,¨Dà;YBrÁ'Âûç:¨ÿ÷¯¹žqû”{FüΦ«¦l@ñdŸŒùs§kŒÚ[eÖÀõªèxïÄý4lÔ#j²ß X^Éj¬Ô¬kGê¬ÉŒò~$úÙ.?tÍËç…xKƒQÕÏÇ]ÔŠ*ô~CGZf®‹0àN´m° õþ—yC,E\žî”vq;dX\™e]Y–ö⪮ìªÌÊÑœÚq9fb;4|¡]~bǦc,Þœ]=ZÓ6¶»¹Õä eÕ×EZséÐ0ÊfÈbÕQ•õylÔvEzç,&8ÂêXÊj TÛQ†õxƒa‘e)±f‹¯Ÿôa‘<vO¥38|ØØ9°0 ä7`,~LôaXXbòòù±zÖ5º –ª ¹Â¸ä¤ã½ëÈCÄ8G¦ì[À^ü2µcô™ç«ÆÙU`}†KQî‘XÃwJ»³m]ë¶Ñi^ !±2©–XêS°è'¿¹–L€Å>E7ºÓVçðWYM +îžÿ¢Úvüº.8%)BuOÅÿågÉ`…t+£´«o$øÖåózТÒz”¯©w·öþÏWùMmý/ž<†¬¢ÀP%%} fÀ–,›@1Ö?ä5´«Aزz!pIÍVñC=M,ãS„‘}S@“ëSÆ*…“{`ʼnŽuÍuwuë(5}6çlré1=8E¨×é…À†c©Œ¼ža$âp]*T¦«vÄ*L°Ùóê·mάþê/ûM^ky½kÒ7åìó–Û¶w¬ý÷*aCÝÔ RŸ(¡Fš’½Ë^Xm]ãøÔ{C+P¤‚BóIöKACUYI™Mi‘ªÜÛ(ᵕfA>mRýñX©JºåGi“§²]²_—M˜x£äˆÜ%dB–©[Éÿ –ú.ê ê…«c沫‡áLÙÚCM½3emÉ×)€u5«$ $ا$*y•šC±ºH“qÍj Öxù'ú ¥Öo°Ì$V$Öà×¹­=COž&ØñÞî²¥¦m`Fê¦Ì2„,åi€/ Ø‘~Ü76“i2ô BY¥jÔ."áÔ/ÏUÌ\ F™¯²có•Þ§ØÄ]%ÝÉ=¾‡†gr‹²Âj¹ö -Ì6 VéÊ­8ÉN_]Aƒ?.*.ý`©ÞÔ ?ò}²I5~*(/’ 4ÀJƒu‰ÕhX€Ýï ;,u½{?%¬GÑBzE7pO½È=)»‚Ãè˜ü&Çþ}~+®ƒ¢¡„G1ú”f°i•£œÜ!Gé÷“@íW°iئ­ÉÆb)^ü]{¤1bŸÜʪz´¶ßû kÒȶõ©a%Ö:TÐÙS5·.k2šLÛ /¼ú_ïÞ#k%MH^¼r¥V)Ï{œp(dn“T¬Äµ\Õö†ØV’ÒˆË0ÚÅAªIÕô1Ítº†~~)«b©‰>ì Z%‚±ÆÆ|Yå=úØ‹¡ùнñèb³÷½ùѨ+z÷êÅÌü: ¢ zôQaF‡rû“²N¬û1÷N"‘š›øÚ†ëõ"äƒ4"X7‚ ¦âùôC*oŸ.hJ¸QóÛ.iUèðb£QœÜ{!‡Î¡Qö+LhòmÿtÏQÓW"´1D(¿‘Е_U}C5-úÑæA|[_šÁJ}ŠP¾*Y€ ±²€ø+™ü+²˜-ÑÔ=Åô•êR—D€UPåÊ(í¡–6£ÌÅáq"ލñóg°d«.ºþø¤—Ø$Á2ËÛ3Êz××·¤ªïÊ+éÐ;’£ýÃÓ£ã8oCOylaMQ,ÕšWÞ5RÒÎC&”6ºûèÚ£Ìää Z]A¤„«¬MtàH¬¢,µ+ è*š¶ó¡«jŸ¤ýóÙÏ~ÏùósKw‹¥.*µ‹mŽ_Þ¼Šßú øuz°‡þoÙ_eVeK€Þ$uëR€õï¥Äµ½sä×hƒæâ'¡éÕqÿ‚½+€åU¾u%q;O迼À"îB¸‰–þi G›…. °nÑÓ²Å-|Gß½~Q×-:ÐhüŽÜ ã'-c„i°A(@z]À`É/ɼ)-JÏÅ%Ñ•J+§µ0Û :}•Û0¹òpïï¯^Ì-í¼{ùÂ7õp<°úü鳽ݣ‰yrÀ£þÊJ£>¶±¤¡%V!w®÷¶}Ž"°¦l¤¬Ô3XÑÁ*Ÿ¢´³› ß¶wŸ?~g"¿'kƒiÞÞªwÞp(7#ªëeAY²>÷ñÉYVyw¦µïAEÿ]kö6Š]W¨ô‹Xê€ÀRòXù<§ÏnIXª !7ùAºy\'}Ìä*'wð¨ "¾üë§?Zëz@N2E¨¼ %içO¹]åT ŒzæÎU ñ €Õ7: + X_>À2C͘Jx2±üaûy°w„â06ŠŒäÃ9`«ï|PÒøÇÛ¥n·÷çW¯>>ððyëèøúAÝÅN(OÈ0º$±4L?A 7W¥½‡a{r½ ž“¡îŠäáÚ ktâdÞÀ"{Üi÷Î(i> ]Jäþ1tÅ †8XïŠ@$ç1Îü£·3‚k°Ï)5Xf“ôKS•Å÷¶´9Œ³ :7™;äHxÄp¢kdaùá^ƒÓûøèlÌ»€Îàìø¬¼eüÉÙop%Ã:€K–h„„§™Ñ>³(æ·A€1YÅ%ŒÓõø|"rxÕþ= °R °”ê]9øUVcïpü9ÑüdeiåX4xN ´’+†“¨žß$Õ1+Ù‡î–õñõ3­½ÁÉËù¥1X°jöÜoíiQÓæ•{YÝ×Ig°ôúAÖØx$­½>)7¹&ÀJ|×=;^½¤>¿Ê…‹õL,5›Ë´ s,>wVqý'È|¨È ƒ'ÃRnýÑ®µå»; °¾t€¥ž¯Ìè 9#DøøŽûæ©¢8G…v8\¯ž>y¸¸¸µ¾ùhåFn ¡·ÏŸŽMÞ-jͰt=pDÁ ç\YÉü |zijüçO¯Ï^Ä…nß<O)$5õŸHÀR£¼=°¿wÔ7¾B¬ª# EË ­ÂqWRN`§PÐêK4%Œº‹¸…íÐÔÜpüH`%ÒjŠí¸ tŽ,lº½Ëè¨4UHD 'ƲÞ\LkÜôÏ(ëëŠ4vz}A­¹… ãÈþ¢•.²»ñ°_]Û«tÑä Gýwvì}‘"!ÒÒËD9ºš—ki€•2 Ö‡J¬ 3…lžóÀ6ðuvsqkkc÷còi¬®ÿ×2ý“Áw¯_¥Lz…îjuq1‰èJ—µ÷øpùú%4ñê_Àâ¶…+m›‚6ŸYÜî]âîKÀ’õƒð:…Õª)$\{¸IQ*îAÜÝÌ{Ìui¬/•Á2£+ñš]3Öè >={<X¬kÝÛ9 ?(GTR–ŸÌ®ÛkwwÝãþ¯îÕÜ)é¢eáí¢v'ðË›7>{%Ä—·Ônjy$0·£.•ÔÖYÅ7Á`¤£‘*ÍiôX„÷M‚)BBOÈ‚Cø÷Êöɇ·´ÑMªÁPC6ÒÏÆ' ‰ajt'N‰É$Ø€Öÿƒèa·ñÇ ûÇÿœó©bÃÆa±mBZf°¥£B1b|¹u^4XŪUdÌYéFCïôÆæa¯{ÑÞÃqy‡@|å ,Ó{l-ãnÿ’/¼²µyௌ–Ñ`šy$ôXÒ…”Gžžñ˜hm#€™–ŸÏå%b³‡”X)°Ì]¤ÞNz'** 7 Çé!“QÔ|´wÅsvxHóÝŸººa€…çä ±0XË+ËkGKAyçJ «/`ñÈ˦®j©X \:)œæ _‡U’mž)kØZ[;=<¤¸°Eó€WIU\aÙÀcbF~í|oû&¿‡ Ž_$=RÞN ¡•Ì\×Pøoâ¥>ù«/¸pÏÚÅ“¤,c13;¹Ç[ü> °>'w]~£tWȨók†ýáåÿ~÷†ùððàPÉXjêÃ’†)óÛ¾AO–ÅAòº¤ÆùãéI:@Û»¼š0ŒcEˆRüD„¤ó­Â:7kÓ jæÀ'b;Q€Åÿª6ôì=ãK³KÛõÝaäàèý ir®*| ×§Ž÷KäF5]S”ññï‰,‰±€œ8K¯á?ê]ZXÞiœçUåøba¶¹ +H®·õ‘èJÏ‚\ã‹Ô±#•ýåõ˽Ýc*£j»Z7e2c¾¥¢†1dïy5ÃóK[«k;ƒS´XZXÚ,jpÏ.lî×w…°Îʪv·δöG(3lëŸé]¨r†Ia€1…î(4"2K˜Ö`ÝÀ„5gÂ:'~Téã˜=±*‹9…ñFºÃ;…ÍáPäho7e=žù ,ãvwYYa5’Ke-.­ÿ!³þA%|ƒÊq…@Á °¾X,Ã6­ß7#rg´üPÒå-\ÍÆE¦Š4¯Xö­à®€V;`z)ì½~Û–(D3ݾÿ÷õVNÛë•.uWªE?¡÷®®nÅ‚!nÃW}Ãaò8L‰ìJìG¬A•"4¯âzè×( °R°â^‘Ð9tÅ!ƒTX;ž^…XÒ/ý,õHÀøÿ¤ *Àž¡à½²nF¬,ÔÐ0–cÉÔ`™O Nå¨_R«©t*~+€’]dhEÕ҆ͩvØ£(VØ«ûH€¥Ü=”· ÎìŸx¦ñæâ °|úýu!ƒÅŸåfFà– VM÷´sd¡²cÊøH@–úžˆ7¼ÞÔ7Ç›ÕÉUKï.㜄Ky4ä3¶ì“¹õÞœ:°ð%ÃÁ1»›‘—S=šUE ß-Ì(ªqF½ µN_VÍ(‹+Û½ã …†×ÃX`%4»~tpº¾q@j’ýŠ': °R °ÔP3SY²^FV#+Œu+¯ÙRÕö¯¼“j÷”y4@b±Ö’š4šä$É©É!wøÛB'3‘Æl|¹K]J.Ÿ¬†¹°ÖÍ0X|ŠjóÌs× J‘õGÛWÀX¬²  @+ô(Ié–#-ékÞÕ?y+·ùÛ‚¶ 82äÕ‹¥H<+Ùʇ‹/å0 ŸôÈI8Öµ»(q1²7v%ô.Á2Õ}ëqc¥V , è¸J=gúøÖQ×þòÜÊ™¹5<¨ä˜€u©ùíïî× Ü.îΪWíŒe¶sºl«}É0cS6ôP£š[ Þ%~L`©2»ìÚññÀR(²nmãGŸzŠÞA0X²É’?Á ±xż x%A¡¬ ,S" Œ w¾€Ø¡B!%ã#%ÀBÿ5â_ûåÍËÉ©u¥ÍR'Wn|ìöæU[eU“p=doËICûi¬L†0 j%Jƃª‘aïâ¯o_¹+ ®öiê,B‘5 hd{õؽ*wµ3hmåDk,å4‘X©Xf˜eVe5²ÀÂÔ°(,ªpð¤žbƒ"ÖW²E;‚Ò@—ÆJFùØs¯î»bQð…ÓŒ`)8cq–·/¥Ù37Ÿ•‚^„&£Q‹`xq»¤«¨ªÛH —_TÔÒ¥o$e Ñms{k·´®çO÷ðëÂÑA:Ïx’¸’S¨®ZkR2X?”8#³« Æ wÎM‰,ãQDÈÉ_˜u¹ûøb°ÔÎõâ$&pF…^é™f°R°ÌÐJá*i*[dЪÎ9Õ?w9ú/Ÿ>y«ÒߟÀRÞî^øOAÝð}ñôhⱦ”œà² –$eU|­ÎÇ96«´É[vÉ!Ç H(k nmÒ§²#XƒMò’)€Å?*V4¹/´Oì„2ü„–!³Ì1$™cë•Æ‚m¬Z×´wꑽgVÚs)€e¦ï]ü¯äóDl·A=”¯±¥ÕïZëŸXÊ1ÐìÔzvF$5ƒhÛ‡y‚ÝhR䩪mcÞìƒÀýËù‚zqÍ—°â;#«¸©V9±,!Œý7ym¡)ÃåœkwU€•üQ4;·b­ïýÓý†ÌòP9N ™ኸÒå#º== e\MÎ1¾Ñ…;§5 ùÁo Ú©À-P.DF‰tÄÈØ¶éÙ&1”¿öÞÙê®HqËûbÏ4ÀJ À ë×BáªBp•¡@åQa L¦ma{EËxÿèôþî¡êˆÿÙ,Õ°ÕÈV¿||zJš/_Os…±Ô'øÊ—XìÄ,ii­ü0Ûé©3ža¹ëz2]Í}3öž:„sùA•"àOæá…†R¾÷£²-Ž­¶ñDî:l”Í¢I.‚±Ø°ÄPQc5]nŠcv®&ëbO†žC4Kµ³Uå ýóíK2ªÇ+Úƒž¥×T^§Pظg×¢Ó &wyv2F¶XLÄ2Ÿ*e¤œ òŽ´VêVârEÙcN6…¸cqe[G»;R‚zŒ…=Œ¤®¯w{gþšÛ Ý’/·,ðÌ¿K€EÜ4À’YBIbñ5±Í)w¾xúë3XÔëÜÊ®ûÓ½úL‹Á3¡"…—’MQ%ÐÑ'FÝžžôïÿ¾ÐɘùùÕ‹ -ˆ÷kÛ ýõJLnÊ·¹¼CX„´!4ž9¶¯]À(ûWü{çÁÕF²má¿|ßš¹“žÇ6É&'69ƒ$‚Àd“"cŒEÎ6Î6ï]ï}]%•Ëj,„$4²éµÎÒjdYj©««ví³Ï>ÏŸœ¤ÙZqäC;Ènµ€+뎰.°ô¡Ò¤‘X‰õk^‹ ±ÄŽ?}'3Kœ²fîDBâ›6çÆ,ªçæÌöô†þ¦ û š÷æü`Jaßší®îñH{~Q<¡–"Öh­)X«<Á—Tvx¶·&¼ëÀºL€¥îk/_ %g6¹½M†ÓJûr*ªãåM#Í]SÞŸÏ·M;8..Å l)Õ6/Á–¾#’©oê§ìŒï¨Œ‚F»Ž™Â¹+t%ý®ºfæ—7Ûú– ŠHÞ•´zt¯(õÃ7µ™C«Ÿ¬îœí{ho6hf|° BN¸3ŒÎøøâî‘x,‰ó€F쑘šÂXfqŸÇâ—)x¬b‚–@WºúJ©Š[ÃXzŠšGÝ¡Un¿²ªAý†¯U¥Ó31»ÞroE|  £¿ÇNQãØƒµ]ϼ/_øŽbï¾´²=2½äZXÙ’^aLLÒß˲iHˆ Kè‚<—mæR°a,j;‚ÁŠ{ŠÝ儘OÊ:š(ýEï6Ü»–Û {!ÜbF¤É KêZ+|KG$ò—”$UEÕnŒy„Áb¥yð`ãûôœ?½æÕ1¤±ô3Pµ¾Þ›{ÁjP™ï›\úíÍÙO–±{ƒ3?e6AˆÊV»\ŒÇ°c9y2KÏ®ïí7tϱ°½$PÚ6] ê¾-€u© VQ‹7[ˆ†«R` €¦u÷u[gcçôâòæîÎáÖæ>¢a6B€ªXºa)ïóhcpz3nÒ‚ ¼KbÕÄ`9ÃXè‹ÆúFw¶hÁ—^Išu„êËúNoI /Ð:=‡'iÐß\‰ l2¦Às¸GiÄr`ËÄ@Yåè[œ[Úªw`ûŒ;WänÆXò,y‹¬»ýÆôm"¨4¨¤g7§ís ~ë/Ù¾s`~R·*õ÷™¯‡µ2‚?e(Þ•š&Ðîö •E£¾{³±±÷ôñÓ'GOpj@ 3 `µÎr=Ä埵ŸÌ¼‰°b1aIfBÎD#¢ŽÆ^â\]^Aˆp¦FŠÐÉ-މ˜ˆ”iD¨æD‰®Ön~«;”·ç ˆÏ#9Pù[Y Ö–ŽÅ5‹áfïºYØ6:1ÿç»Ós;ÝÊÑòñíÛKX¼'ëÔ‚Ö4ÑjÓj3‹îŸHƒ¾‹*!¤±`k÷ú¿SSº3`©uTç¾–ç„“ Š$°·i Ð&êîO¯íïTuxØ^ ªÌzX+öˬ]ή0œƒdò—y>µ´—¬®^Ïáþù_àˆa§üÊ4e}…K||‘¦½S‹}÷¦jS(¦÷O‚8 `M†Ù›oÞ3¼°åøÌzqÓdVõMOi«i`‡nö¬c,³4K’£É»¸u×ááJ)nç8€îABg«Í³z¡X•¬ð,æ\&³^¦ÀXf‡?I¬ZÝ>wtð„S$‘É3z¢P˜B=)y,?Ì’Q ?=æ yZƒÛ{r|‚“)Bª¹Q+SÅ£¶ªœ“P—,&åç:ÀUH(㬎gF®˜h,€K€¥,{W†Ý¹½î£¬O¿Y_=¾éóáZD•m˜SÈåínnîllp ½¢©"ÄÑûéñ±|Ÿ(’ƒ/þþønʳL™úI_‰lއI'ÃX¬/(±Œªˆ¤BY¹ãý£÷ç‰WPP"º³¹¹¶²òúÒ@ž>~RÞЋ72—ÞO•L˜ÆEÚ¯*–T¸³Ÿ=fH©?ÉêƒõÌÒö»û“ACÓÓ}IËduÇ Ü!»B,b‰Ü/ `©ñ Àâ‚R×Â-jÅW¨Å=ý`u Í€¹Ûé7°¤òç¬ædD Q¡p0ûé½ÉŸ,†q®`iÔè´¶¾G»@߸ƒ¢&ºƒe6€ÐEá…’Ä2úSÒµ+l‘úœhîYÀÀ<»zwyO‰›."€uæ X¹y_ûÙNÁŸ~Ž*—÷Å“çó¸}V«/ ™88›Ó¾­³Ì¨±,iž˜šõ¹ú¹àä^P;2»¸áèÇ‹ž$™hxOÂ3Bë /×qsÈöbR³V¬–ž"LF¼RÜöæé•€°§Âò`w«*²xøCnmá $z.dé`¬&/ ÝXnAWF›” ¢+ÙVE_­±—tºÇ2íN›9E_1ö8ȸk¬ÈS„+;ˆEbõqwcíq·¡ç£(¾ Øp–F\¸ËóqÏT“ŸÁò¬Ï³Â=¹Èõ[¨Ú±ç}Ã3?g5É‚ ¹uX6?ÀRÞ•ˆHüûÒÀ>Û˦!öKg%Àʼc˜cÓ_¤³¾Þ5†¯-©@Ý“ýXò{AÎÙkzZÜSå½”w¨V›ºà]²¶ü&ƒ¥î=£ÅŠÏ*o«¿ßÞëí2ì9ê ò°Vh SÄF ÂGt €ÅGàÞÎOMê0£z”“Qr~þ)ÛX‘,}‰Â½>³JIFr#UÙ>[Þf|%„Ê$’X…ßÊ«Ÿ’)[ñè]wÌ¡70ö M†LŽXµž¿ß¿]ߨ§i4V4ÌGŠòAÕˆA³µÆÙÁh` ƒå"Õj¬˜,YÀ á„) Ë-kýCóÁ’âêhwWÞɘ1r°87áD`ÂA?AùJ›Äg¼íEÿ;•ó}xÿßßÞ¿õò¯ïþï´ŠK*t$ÙÚ™ae3E•3Ýà/`¬H,]ºÄ€‘J,énàH³µm®ŸSyÊ%>ÜÝ5_ž½÷ÖÖÞµ<°É°î˜–f*î×òZ_ùÁ—g®‚LJ5mC€6#ã\óY~P,]ä®W ê­Ëhôò,=ßäÉ(7Z$—Þ|ðäðøµ©ƒø7°ÔÈ?>8~züä‘o7©¸‹ÙO¼9 „°t®7cå £„üúQ[#¡>âBË ³tí¸*³›T‹ÏE¾æÛs¯dÕŒJ'RÅ`eVD°Ì á^/'TÂy¹¥Nè2©§ÎƒÐ¡"iDà×üÒ–kpY=œ•v<;l©„“—²wYZÒrö/•6ß(pHÁÌ“¹["I½Ñ]±^µ ê\ë iìq»c+E3‘;Z=.ŸQ}é¥ÃÃSôá ºuiq¥«¯Uo>·W@AuѹŒw^_[{&2ƒMþ÷÷³s+ùwÚòËY%-Ù¥Ž »#¹°™DW"•#TÍÓbäX+Ú!âN”èþÉl¢²Ê:P)±`œ°vv$Œ–qyë—œ–Ìð–$n“lí=ÀtóH5nø¶ó+º“‹ºÌùAU”£lTz ¦€NYòßÞáeìêý5«úÇÛ5×ršoä9nº’‹;È ò³Ktâ׉kn? `E°Ì$–Òíe•uìí¿O€õúÙóIÏòÿªaE0À’A)Bz¤¤µAˆšßöϳóÉ IŸÊêKg°ÎnCXÍž/`‰E 1;ðTÊ/ŠºF&—IïÊëøÍ,½Z¨¡}ìF!:fQÇ¡uÑ‘ël˜,³×¨Y2Ä3ºKTdK}rAgzq ,ãN`oeªAƒå¢Â©;Ac܃'È ¢Eþ€e>äž)NÍ)K •þSáwÃcqí\®tyu;ø/5„—6¯4­3¾•]FgjI'_àkò'¸isPu(¡®¶óšbn‚bËÿ|xÛ5¼œ]mô£â¦Þ=[Ü Jûìäe3W$:‘sqÿ ÕJÊ «,Z€¥ŒF„Þ¶wÜ`ép‡6¤Nσ>óLâ:ɹÛs°{`Ä`¼½³«¿t oçϪ Ö`©/¢Û¸³êT¸u]Õçðü’Ó꯬û”4ÛÊ„hð„ð,€Ûød ß0Á”ˆa²½~pss—1yu£W’¸”z´÷NçTö¥‹š0n„ N…f€>AhÖ ™6#›¯t€ÿòhýàÏÓ×mýK†¡¨ÞÊx@4!©,þÌŠ^ƒº3†4æ1Ä.J»á•VÀ¢ºaiˆ¹yfÕ À7Bñêi¶Fhð6¨nQy‹ÑNÍÚðÔÃòÖé¬*Þv¤cp‰!²¸² Æ’¶Bq”€ì?›YÏ­32²"Es€åmº¥’%^kÖÿ¹­{«ä ËØ—°ãÉ(¥–ž•´iAÄUGûûŠd Sx›Å¼#M­ÎÔÜð< „ÆaŠÙZ±Ô5»†¾K¹Kßùm)E¸u¸Š•%»JÛB\!FWÀŠƒ¥V 5á0ÔNf™{nádOÜ–!þ>¸$©›ÚG’íÝ °†2ÅE7¬"ͦº™›óõ3cq rÚÙÚ³Uw§wg•D ª–ySú%he¬ËX Z’9t¬sîIS½+°tŒÅ63÷ðóEcrá´¬‹±.”"TCú\Ž6šùÊÌ`ÝqL·.c|¥Úæ§x4{§sÝÙPE °BG`}i¥CQI:Óþ Ÿâ`¹Íü¡<0‰P_(ø/i¥nǤBçõ¼ÖŸ3ê®gÕ,Í/R&Ae_‘ö½:KÇX¯ÏF¯Ûºð§T½. °Szýlt¡¶1X…ÇQ)Ñ.ôËœ>¥ãÔçúVEV™ú NñH(N‹¯9`fÜf¶` ̦²F€J„ —gïhõÑniË–Z¹µ~/S@@ª_áô Wl+"ß$ÄDl4X+7ìÎ#jÞpØ¿Örª—9aq@Þ¶D0Rá‡G#³ Ý(*@«†Àj·K:½³~—QÐÏÁÎ+ʈ:¼zú4hrÙxøð€å'·^ÌͯfØ›L¯Ç:œ‹ÅŠ.VС \¥îÚözƒs –jk/k#@'7 ]¶ªîÿ||€Å;Ü=hrþœQýCzà;P@jr‹‚ë~»’lš×ceL_Ö›TÐv|áÅÉ3èR¶SÞåçЭ"Â>E_éùAÃïÍs»¤kxdö÷SQˆG‹²Á3jSŠ:9]ÕHt%›Ýzr+„àƒWJŒÅ]|QAYaäI)Z0k„-€•kŠ‘p£ =³¬ËÕ=¶µ±“˜"w€‚‚³bÅ`ílíÛjzSKº³?‰`™5^ºé¹D1¡–þ}ÌF°Â÷3¯aû³¢ûPèÖ£úo-Àjõ,pÆ]çì𔯵w©°!Ø6ÇoÁòwö(i·Jºº‡<¿zžp«³",c‘› ïíaÜ`Ôy\à‰£½½u!À:—‡Þ_}¸ñCF=_Sê`tt´1°V¼–²9ÐíFÛ]# ó8§ö~Éiþgà¡<…®Äð`À˜–¹Ý,¯—~ÈfÉP©fte1X‰j4ŠÖ÷`j‰ûz¡ëþU —Ñhôñêädcm-F‹ùóÅÑþauë0= …‹Ûh",óÉ£~¬þ5Vô=ÀÒ> ›ÌÁW ÷ªlžB5/c°îôå5Lu<à>Áš«ÏUQ° _Ôo`©¾rª,½Ô½²²ŽÂW¶Çy§Jfñ" Ø/JÑ"Dƒ%ÞÚX]UÒ®sE߬=@èc²}eö_ƒ7€¥[ºƒ?fèíEÕݯž=emЯàe,ÊK_ŽN,Ü(tŠ.ƒ¢T*€® Äãå™,°BÎEªšß¢:“Z“æ`®ÔX‰É`‰»£—RfŒÔ"§ïÑië+ °øÓ?§ÞyÿFA‡ê|¯Öµ(–6T¼2ô2ÏWeº<_ÂXÀ:cÝé½97aЄB^9Àªý°0Ø kPïØjc÷$³îNûm,¥poœY”¡Ùåî£á‰Xéî¬ Ù#Nò¨¯^ Ö Ä†#<¢.]ŒÀr¤—›lµa`¬ø3X,¡ªÂ»—VÜÑ7ì!Kg¶VÍ% 9¢hgC€ÅÛâªPÙÔGj[¸€Þ—Þýj"–ó•XáøGº•"_ªœ°V‚6{vŒì%áý]ZÝâÒ£oÔ$vµ–ÂXžå_ó4¿—ÝÃäØŽ`©‰Âð$ª%Æ©ßa4%£‹Åy´VXBx=ä*¥OX¶¸*V«¢Ï+†÷)ŠûI‘$¢¥¯¼ŠÐlf]Ñ<ð÷ÇSÉ<† ÿª¨múÔúz*<ªçÃsÀzµü`ýÇÌf™ iÀúG㇎[~³†›…í9åpŒŸŸñÃ×}ebÄ`©~”°­·ì.¦ †eÈzr“ÔVØû½i=ÌU‹ÁJ@€¥›Çû›=÷0§]ËmëìzqrÂP¹šKZ4o¬ïäVôÜ*ëÓ§ÐèÓÛr´øæÓö¦p(¼žßå|¥ûpª~·ÎÏÛ¥[ V„àƒg.yÂ2§ïãû «µI–ùUþ˜ž‘…jù”XKoóÜô©„Á3<¶%€ûdíqTÝ_üCÙhíïÔ¶ Ý,ê$(3ž¶Y+V‰ÅòLžî×¼¶t{ÛøÄÌΆ„ u Œ%8ËãÝ]¼Ð$y«ò¨Ó/Ç&±¥¹/VŠÒFAg7u€Ñ~ïlÖÜX °˜(W‚Îd(¢(à³~Élx°â“N W`{›£ý£ZçXjé=»³ÖDÄÓ]jqYj;¼C£óÍno™sáF~+ÝA¢¹sëù¡ ¥r‡×nØ ©â3 `EñX|#ÅÝHÑP¿?ªˆ,3ÙÕ‘„ìÌeMØ*BY?Åý&EÊ·K»0åc&’ôz©8ƒ*³1ú劦~$ÌœžÈ*£< `ýÃK‰4Äbs" ú?f4¦4Â`qÅ!±„ƒt?£ñû´êÍm¶ŽWSƒEŠÐ3»úCfIü³,G´ VÍXmÇ´gÎ×Òƒ5¯3XÈ{"ðÁÒ­ÈñÈ,i™b-Xóíf׎æ `}=‹KeŽèÕW4{æö¥%2ÀbË~½·Ê1WtÑ$çãë×/D韼Ããàªg´çÍÍ­~—ZM5 ¯†òký ›V*o¬ø,³¬8àê.ýЊ?g7—Tµcu&³Ì±mB§µµõk9IEí(ëEm”0ïÐè+-€uÕ,°ÈBàÙa´ú®¼UÞý¯ÔÜ̯*À¢üYßýÙŸsZ/`1òoQ°YÞ‡ ‹$suR¡C „"7¦\ž.H_MÒ/Ï0å™hìž«tÎäÕ[ëëXòºšCaðˆ_Ư`1 ÑuÑ0ǯëb”¾$9ˆ›ð?°¨7ôÌ,ù|Û¥u=× œ¬ Ùêâ úÊb°â°Â'±`C™dSŠ»Rò½Þ…ßO߯0/óš·¶F%5]IF¾X3ŒÚR>]Ÿy-ëê¬o¶0‰-¨3Z}ÃÍCÞ,¯ø\=€%X‡U-7 Û™ô UEhX/Í秦 Ÿ7'Äý8ÂUÖ÷`HeòÅR檤|éhU<»¸IŸbúéqÌ3Àú*¬´ °8ùóļÊË(!ä¿»fþ<}‹ëÄžUñ ÑË^>xð(9¯¡«w’\>gÅM‹·à'>[A­a"¤ƒ,˜mÅü0,þ)³¡Õ5ÀjñN¢Æj„üýátxt–4Ö 8ûÓ¡œ*qU<Ȥa¬+ °mÉ Ep¿ ÿä¾_óœí=ãór])€…ks}'½Ä•RâæFàví5,ÏpErÙi׌r#_ôçæbÞSÁ@ÒЕWv¢ãyž ;?8-ûgVúÖ÷_<}VP?Æ&ÊX_+ƒA$2ÀRƒ5(‚[$i ŒWÏ$F¸«ûâM_©ªû—§/^Üq9ºÆÒíTüºÙeãÍÍÞE˜‹êô•Å`%ƒeNúMkYÕ’l7sêçæ–>ŠÆ11ûøëÝéÖÆvV™+ÙÖNaŠžäÓº²4XW–ÁR+»rÜÀÆÕÇÕ=¹ åèàXÀ ç1׌n®­ýqz YKüñþ”^®ˆä¿Æ`™=þŸ½ó|KsY×ø?z¾œ/ûÃÚ%;«Ä˜X°b£ŠˆAE&V°÷*öˆ={ÔØÒvÖ:ÎýÎÀd«Ä{—s]sq!!ú¾0å7ÏsÏý¬®ldëîm'©€h'÷¬Ò¼‚Sj³¯ÂÖŠªí éclZÀ×ÍFåwå±:WxÆ:ž[[&TÄ@8XBä.ë–¼ÔkŽ%,IK^ÞôÇûKD° ÀJ”ÖÍÎ_ílm•¹óôL˜"±T‡Çw4WD°’ °x^gÕ 1¸p¸®ƒÏÇ ì‹³a¹š›[R?kJ×xHÙÁnºZÐÐ&”ÙÅÀº—€Å$³“•"w ¿hI`JŽH+tÍy¥îÃÝý¸¦²“c° ‘ªÏï.?Ÿ./.YÍ™EU •-£ÄŠ–V\“’_­²Ù¾Þ¾¡•Å¥K3“oYñc‚Kžx‹:9;U®ž ]UGi¡p¿°ü•]E—ÉÒˆñ…o'!J8µEòm12ÎwDWƒc+‹Ë[˜…h~©D„“», X]? °H«mžX®Ô´LáG¼X:E§€•¥ó@ ,FO¹Õ#æÝGß4kÁÆ +GÊþt""é1ql„_qt(+yKÄ¢Ç 1·âxÑÃ<›«©ûpw÷âä–‡ÒÕòòºÚÜLèªùGœ{¥Ò+½ÌG–ˆ`I€UÝGã©Ôä/ËÐ’­s°nÛ ‘õûÏåy`lÖÛ1404ÙÒ>¨ÔÔ(ÔµO‹íOKÜè™p0ÏDÓ¡5à•'…µO‹¬E–Œ‚ŠÖö¾SÏN¢7œ—Ô¾ää$±€Åè ×ürãUšÊO|íÃÙW4`a°Lñ¯ècÄÕ=1¬¼r/OB·8Bhp–{X¦)]±ü (ö,ëÇV©sÜè¯l¢ñJ À‚[L¹žØ“!…;Ì!£†y÷úò c±“ƒŸß_ 9ˆª½׫¨£al¬ ÀJ¡¼:!R35ei£þ‰óã7·^$°ªÍÎ.›°·®çèj˜Ò¿ZàQ–¬(ÀR£ˆQšG·è„°sûãÃe(´j¨n3¥—8Úºt•ó·<‹B׈p;º%$ÊŠ6¬¿xÄ âˆ™ð¯éj÷oÊš”\ÓääÜÇós֫ɯ= Í/øG¯D+2öödçõŽÑÖŽ*„4?(«ÔÉKvŠ0>´ÂpÇ ·2l’¿'v œš`1SI<çåí°`ýxÀâ4Xö#§ÐbÁ†`GžÑÛÜ>öñBÒ#æaeaf ã¯gòjc386ÀXŒÝá§Ë󩉩ÔYA»™i;·|¢MˆVr?KòRwøâhLžÕ¥•ggßÕ—ðfÚyP¦w`d*GW—¡k`tE ÊFÑ•ˆ` ÀŠ,«†*™†µÙ{¸· Ó5ä¦UõOЬ°^C˜ ~€ª,}#Â툵c’Çï/"ÆøÉc·H‘C)˜kôfé›+-NO+â¸èÒ¬6+~s¡Úl±¹ž"dEÆjG†¦^ÉÂWÔé†K±QÀÂ0O¬M†Ê2PXÕÃ÷Õ˜å§äYBÆXá†çQEr„ë¾îî º Xô y X¬N-(‘]æõuè/D›Öß&¨(ïÒóÐèÈØ‡óóë§°³éÉÙÔX¥ä•û°-Á²„?©2ÀJìW §^~ÃÏyÆb-š®DŠPÖ,y7eí:ì´òËÛuUm»Ðñ §†$$Ã>~›»‘á±,¥Ögo¡tþ2Í‘'ÏÞjËYºFè0‹©¬W裬;X‘,! b)«Ô[h>„o<}¼¿z¾°º¸ìò´þ‡ŠŠŸs*f›S”5% ©…ÖßòkÒTuÙ†fT‘C’Ñ€Ñä1ÝU´°]–¬ëk(·¼£¹clog=WAÑ™ +_×èOOË~Ë­NQZS‹ì)µ l kŸ;¡ ͕Ъ½S%ú!•ìK1åB®G#}ÜP tŠèIA\Zßo–h¬Jb¬§êz»§óôð ÊÑôHYJš­ýõíûÛÛ¸°^Ä—"DmÜQJ‘Pˆ?Íô¬ò…€VÂ’ƒRÅ÷<ŠEéÉgqËÃ#Ã,îzn¼x‰–¬?°&0€á_"f¿Õ ØRDN{©$›Ýž¼2Ÿ½ið#ÉB,õzcÊô„œ¥½|±Y¬«þŸŸûµ ÊZÿrm}ïõÖ«Íó£7/×_Ìu*âíT+J“ƒò³¸aÀ"9qãFþK²æÐp«Ø"UaJÓÖ§YFýÁžÞ¡Ç9ÿÊ4=ȬHQÚ~Í©ÌÒ×C΂ ˆ MêFü/ - iÁ]EÍ˰`]XýøÐÐghù&¤AK «´ÔÒ}<>ñu¦(- m™ÚôCÚ!œBf ׉NˆjE­HÁª°Ÿ8ÉøWÚ ±.ÈøNÈ£ ®cí„•E!‹<ÉÅÒ…Ö!‚Yh}Òî¢ÀžZäHÓxœî–Zw‹ÙêF!~ÀÂá¤|½G1ÐJXøŠp w ¬ tkRrð‹ß/îíµPèÐT7òfwæ½þP¡E¾¨Œ¿Ü [–¬$¬oßÅ•çá5*ëƒ~ªAF;ÁÂåå„]¾zUYÛòsžqxœ1‘&53“5 b“ö‹U½—,|u‹”õ\#íŒ%6JÂáÕK‹MÂ,À–=RX½ž ¢º’‘½p8À-iW{¡ À€u`¡E@Ÿi¡pƒPDH ß‰F"UÒ´SBÂTФkj)Ö‡;á—~èŠ2a âmèWQŸU,LJ_G”ïRW· Áô!¥ÀòïL£¤AÌ6?Èz¦79`FŠ©2NÀš›]ú%Ï ¹±n¾Š°8–Ç׊Ûäÿ˜ ²½y ™ùueeÏ×yÒd†Òx"KÖõ€U™D€ÅGhúK¶nOŠlg‡ûØ5A€µ½±ñrmí"ñÅžßôö²5Îl}bf°b”LgÒr^ GŸL[sËÏÌÉÈžOzäu hÉX|7ã—üººð ¯ç½ºZ²†¡9ÑTEqUôœ+KV졚|V‘<…JùRªŽ6•…DªÂpÏc=·Þ_Õc–¼Ü>ý 5hí/`M–¶ òã(^þ0»²½£A¬x Gˆêš2´¿±ÂW °ô:»?Îä nóXÔŸ`.Œ°ð9ã’êÛÆfæV¾q¥¹°,J-Ç,‘"€uÇ‹-áÔÀß#´Ÿ‡÷ýiXb yû‹•f1šÐ,á1Üý©ü²FØÒÐ:ƒ]¬ÂB`,ž®î`õ‚¨"_MàYÄÍ;]F~dñóä,ùÒÂcã'Ö°ð`u)uøeL®–£•,X±o„ð,¦…b”ÿèãY˜*V'D“E°n:ø±ÀBki ––klUhTëçwñöɺJ/”^ÄûªŸds`â¬Iš” ˜ÀBt°k®µ·x¶­oZcí/s¹À¸ÜkUYx€%ë.Ë*+:ó /–W©¸òôèhsu•¢U‹Øëù:†¡¬§u1øY¥^4ÙP2iÑ=,„«¿VqÍÈôüƧó·®öÀ–¬’ñ݈`Éì›Çä îüˆeÕݸ¼]ù ` ÀúÀš¼nÐb‡K¿YÝ…¬[ z%´†1ðó!"@¥âH5|M‘FXÿÀâçj¥F*ö`+7¼Zƒe÷ßz˜ÃsAù¬ÓÅu–¡LäŽÕ–š›œ½½Ã³3sk}#ó_1 ³TÒI‚/õ¯ÐDŠPV’–\ÃüEûÒԞёÀid|âÉÆÊJ¢ ÜåFÉÁàL‘±>·¼èo¤È0_¼c€E¯ó>VV_°°ŽŽ ޝl¾Üµù¦n»ŸK<`ÅYò ¿dÞÆ óP%KÖ-"X±)Ÿµ›c½°n;cIvqà |,ùzçêò* óð%gÜÀž@Àtñ6úE¼)j¿óz»ÈäÅQ’ð+ _%°Èosñ·ÐgðämgWAî´ÀÜ£©é™šYú¿wsÏ×Ê}XPSKUÓWÓöÈ+\5¤¢Soí^­} ìøéâÂüW[ÛçGG¿_ž?sã=ƒ,ˆ%KV¬»€ÒP›T€ÅAv™Ï]߯$í¬­­Ûy4€®v_½~*ù]¡X/Œà7×Öçg‡Æ=Í=%åu°3…¢™–”…¯&î3`ñ6 Œ±Xcg Ét]PR–,X±+Ž–xÀ’;æDÎtƒ±‰%o§Bßò¸È™ª¬NÉ{VTêè®­lŽfó n…Ú¡PÙ:{Çw÷לMý(é“®ö È˜ÒÔZˆz>Õ¤dgíeÞÜ„¶D‰Ü î ™Ìû˾uŽ’,é3 >h°öwvù(êþñîbjzIg ç7` ÀúF3&+`Q…;\RrŒ>E‰åíá‹B­,.Þ.Eˆ¨µ¹Æãiìlôö8ê;̵^½¹¡Ààz‚ÒrJ[†¶Ø®×ûõÖJÖ5>XŒ«¾ªÛÅ—£,X°î`É‹„-y1GAóžklËÔ5ü;»2­Ä­«jÍÕ{@]iš:ÔIÌ-­w6ô©*Zà•š®BÝŽl Q_ h#t%¯â¯MŸ$Ê_Å +‹ÒÁ£¦ÏјžYá…ùHt®¯n'C:K'lƒ46X°n XÝIX‘¾Žkƒ—ú?3Lovw(]Á X·ðhÀûQÄ×boø)U÷0«âA¶ù×<Û“W¦ž¢>e…dèGаªXüà¿ï)BX¥À¢âŒH£J±8,üŒúè` À€uÇK.ÆbŒEŠCc¶Ä!ÿLM]ž±5«´a­l©ºZ+Š fé`IO³M^Ù»Zú©c3£«á«[òä„K- /mÁëèJ~k’mDM_`bá÷’¼Œ.ß~µmñôæ•5âvpã°ä„KÖ,j¾Öô(J›JÍugÇaœZ[Z:9<¼˜ýø u—Çû¸ÐŽš©Ù¥¨–.@¦!ZÏK¢«È)\~ð‹‹N%¼ÖŠÅ®ðqi~«wJË\HK¤` Àº»€Å@„m¢¨Yu{'e6ºP¸^ó®šë†*놥Íê3Ƀ“ u¢‡]g]넾U}¨ñ µ”U>ˆ°øËÆÇ[\ÓO?Þ˜tÅ\^™¿³´¦£¹Ã¿¾¶‰¤M}¼Ú|e¬íÊÐ5ãŽðmD¡+l`ÝIÀ¢§908¡‹Z_^½ŒˆÓçæn¾ÂäÏ‘g|”c]å„Ë஢^íù´žW¤^/ƒ)ÂH‹îÕäŒÐÚC¡Ýíý¶¡ÎÁ‚X°` ÀJ6ÀŠŸ±”HgÀ]ä}*R%ZgíÕÛú©oaÃÆ–E¯m¶4ø¥Ì Õ¢–ÑUâ Wˆ¢7ˆHI˨{ü&t…°\QU¢SïØÕ§k¤ZåÙÆVmMKV_Èè*&`e~7`ùáY%Ÿä4[ºRÛÞ1EY|ï ü•$¹eMÁ©Ðïï.^o½®tödšÁ‹øÖ°dðá+Á€u‡‹U!”ŽËæ”·{Ûú/NÂØmûËõuÊ[±¢\+‹ËÚêŠêºùÙù÷oN÷FGdz4BWH"jÅ• ç*LE ‘"äëzC Ì°¶L–…7¸°` ÀŠ XÕw°dÛ*6OŽáOTv–KÇM Ž…66^·õÏ€T2ôÞ*Ïp[ßÌ|h£ª~󧎜Ζ¡ÉŸXrÙ>­òNK¼w Ííïì¹}þì2¯¶º=ßäCÔ fÏN[{ÆúFxÁsÞ]X¢¡¬˜€eNFÀ¢~$y¦—§ f*ðV@…QD°¶^¼8¿`A ÿTi~˜ezZP•¯µåh8ä1&¥«ˆÖÊ/窨­•ˆ`ý?{gþ•F–Åñx–žžéNwc‚€QQv7¸°(qCTTdqI4ÑhÔ‰[\ÐhÒ=ÝóÛ|ë=x]¡$C·AiçžsOJ!K¥ê½ú¼»|¯°”Ù¯9±œFW ò```ýoV{yVñ°% 3CmëHCWŒ'fUÙCñÔ tpNÓۻЎ:Ø;898„””g0މ—5P¿ÀR OpºBÔÂWóÏפ‹ß¼±±M,V½¡ðÜ/æVtMƒx®ÄïtE€E€Uî€%î~%`U7ü­Â:‰iôÍ}ýAx°Ðˆ°H¬O™#µÁýÖuW×õ Þ‹LL­m¨6ë»’Õ èíÅ÷ °¾ XŸgf$>§«%¹``Ý"ÀRæ3¥ä€…ë¢iëì‹í½Ûåéás³1HÅ3˜Àµéá¸[ЬGW,ñEò¾Úœ® ŸŒ8fxzñü2Ô¬Øüìtkë¡%¨¶ôé›úk¨‚”Ô%$ºrO+Õ%(DH€U¦€¥d,yˆ74ºÖ Àçpúÿ^ikuy‘¥Ž¬‹"%FµÆöo«ÚT†ÎGjV'Ì"èSFî»âP¸·–° ¥¾rÆ‚qÑQ’i À"Àº}€¥œ'1úX¦î˜X£Ônjfñ"#«1ÊHm^;Ó:©CF„-n¯°Ä,t)]¡Š¼Å3ùIj’˜ëH›É$f—ïé}Z{aAÌÆ8)¹ºDžûŠ™y%ÃKXXeX\¦A×6ÙÖ<9ØûQÛ¤1¶<9FÞ:r°Š ")>>“¬2v<¨÷ÃÌó…À]]`óìÄ­RÈj›G±ÅÊ÷á/¬mÁ·` ```ÝvÀ’øCò ¹3¾oì Ïžýüá,ývWköÛÝÃ"† ªyRW «#jö|.%*iIL‚ó05AhzîÙ*èJ”¥£ù Å5tOï}Ì E¶®V =¿TfI¹rYØBÎ[´\$V9&ë‡FEónýžQâqzx¸²´TŒ t•JÎUÔº+L{wœ»yñáÊê6¬bbb}VŒY}Òºí±#hñ`]÷|%®ÖµÖ(‹«ð4,"‡ÉÓ?ýfs§¥;¤¶<Í0÷Õ$ G‘€UÀªs…1áË“®êY‡Ì®ûõIxÿÝ>2ÃÄ£9X›ëÛhJ­u Õ2•Dü½ «bRJpP‹OöÎZ;ÇÝh5O@ ך‹«ŒK´Ê#·Bß]aìis÷þôAâªåÅEÑáü ñÁÿ|ºðF!”ng£…¹¯LŸ‹3aK€UÒ»—ëFæ+“ì1 ÌJ€E€U:ÀêšéM¹nÐc*s?0 = ŒÃ&Žå %,13@É]žÒŽ{tïhp%çWPä(ô«±Í½\^ï %ЉíRV;ä‚®Š{jà%u¨µ7ùïÓCHj5¸Fá#À"À*'À æËEÝßC£ï{­+gÞ`HÀƒ?ÖÐêÛùõâbh8¢µ>eêpã<Ž.ØäÁ"À*CÀ]­’ŠËo€eéÎÞüXX_ °t-£YÉ›.0–ðIÍsÀ4 ­&xþk^ý`)’ÜM¹Ô{|/Ë ‰çÄ®Â{plê9­°V?ÏÕ Â66Þêì=ßT9ïë½j[P¨‰â‹o˜([Wþt’FÿN…–ˆXXe!4 µ5-áÊš¶Þ7ÜQÛ§#ÓÈFLonÎ'“;[[Ê4,®¶rv|´—~—J=kvù5æ^î앆s_ÉݼXX7XŸÏÚ³à\tdo( o¦Ü»°XKaše6ÈLê°†ŒFlÍ `•°D ÖàcS”cG”±¶–Ù“,,Õùõƒãóè{ó1§Á KñÌû#­¹§Ê܇¡Ád¨'˜ÞU^;êb¿Âl˜Y°¦9„ùœ’Ü °Ê°ºE¹G”=rÆ*ë}ªº¦Gu­ë«« °ÃÝ]e!!3 °db^]ßö·‡öiŸhlÙ®8\š8¾ˆ[_{³›Þ]_Û´º‡ïÖyEb;o†£¤+,¬ÛX¼QF‘â¹-½F»wd,ÖœÜK§ycöóãc$`m®®* ì…ƒG{{ýAt×é¾oð©mC¼L—÷½㟋«Œ‹7GëJ8<ÑWËk{ïÞ·æ:òX¿×ƒU mý–VðÐÒ:F°åY·‚TYú °°JXÅ[is°:b̃Áºð„õ‘e°Ý?¡oêkt¾p]ÓÀc/¢‡œ®Ä“"®°°®feX¢~pú±}àacàNÍ“;*Ë~z'«†•0–­ò2÷÷“ÉçáHÊÑ9‚ÆV9Vw¢¾}¢«/:8±la„tÀB4œ•Máþ—é`­£ìÅz¡s]KPRÀÒ€|)V`é °J'Ó€û¤} ïâîÚ¦‘ž¡¸Ù= ùÓµ=(޶° «FEÙ ÖW8 ¬wʰÐ.ª=‚±Ȩlè59:ÞnlòzÚƒ7kkÈ)‘s•ÒõËÅù/2]=c5M! -,¬2,“'Q×6¡¶ëÝ3\°êÖo+o˜4c`‡Åd­Ä,§ …Rp°C€E€%¬dB£3i@…S®IŽ$[¬u€«Æt­a®,ohg]—%¶``ÝÀ7´,víFU=?hšëMmf{G08Àz³ºŠ ày&*XYKoÛÛ!À"À*sÀâ†6šx°ƒqØ eõ‰¿NDk,Ñ|%F1öÙ€%r–Ì+"#À"À*©K(¹ó¼^Lª9íÓˆ¡]²œüi ¯rºÏò``}UÀj¹IÀ¹ä¾!½É¥ÕÙFÆ"° µŸN¹IÜW™ƒý¾Ápµ%Õ8,¬ò¯"d\2aW§««Tæ1–0‹€5„ùJ¬òKŒ àá±Ó‘y°°„•´Ù3ïE˜uwų§°(¬‘‰]ñp|^?ÖW¬Ñ,œ©¬ÇsDïÌí¶æ'ê†÷»;‡{{fX}ù2sxøßկϗ_ØUƒWc bþ2º¥ŽXX婃:X:é¢+t°®öárƒâ¨|¾*!`¹Æ³>3O‚G<»±Í§F,¬’–Þ5ާI®| WštüóÖ=Ø!À"Àºm€Ëõx`MÕÙ{~T5 „B¡ ȇþ|qŽì«í‹ÂñAÈ4¤R j£û®®«Ê:PË5Ü;¤fŸXXåÙ*§Jîü]×?_ñø&N€…ºÈÖÞ¤x~‚ú'Ré»°(DH€u=€…çš@ÿKM¹&Öí,Ñ㉇•F¯Áúdi~Áã D§g–ßnnž­ ç]¹:ûþZÙ¤¶ "½½îsYÞKKÿ$À"ÀºÎV9ò^„XX½sÊ¿üç+y'Ä:¥¡×÷/¤·wæ×c³¯zBó¸«c``]`uÆøýYÈòîa,¬[X܃Ukêî $bñûªúT2õâÙ3RØ*éŠÕ#ÿÝáìýNë~ÜÌ¥M„,/¬ K@Œ4åq,,`•MXîH­˜¯ÄKe<_)ODx°tN<Øâî¾T4¹<06çŠ;¼1!Àº°œX%¬"‹ëÿ" lTeê»§µ7ÚܪÍË/^¾^^.¼89Ù\{œIŒŽNWÔ¶Ý7øk[²ÑñôUvQr® L¹²Á–‹KÍWEßb|‚*-( E xÎå"õXXXXX7£ƒÅs° ^¢¶öÛZºïh[ªõŽô›-¤·Ÿ1+¥FÃÇLfaþ¹J×ôCuû=]§ÊÀσƒ…ÜWªØñKŒ¿D,,¬ßë̆`ñ¢-˜Ldˆ‹ëºë¿íÝéWçð¸ýÐÎbãI!´ŽF+hA«Ù‘@H° Äà­vjÇI½¤µOzÚO}f†Œh5„å9çŽ,à ÍåçûÞ÷¾nÍû“ÀbºrÀr1k¾Ç7ÖÙ¹Ö!#©lnlûþƒÍµµíû÷µcÜ!-œŽþüñ“1õµ9ÞákÈ™|ãð.GßÛ®Õ•’è‡{ÕŸAF`XÖivVЃ%ÿc ±,GM[¾â˜ë,w¯óÒoV°˜°®z ׋»×k ÏÞìÏzÃOi¦‚Ú–ÿþú5ö¢ˆ¥-_m®ßÿκéÈâMÕáÎcP¯#!Ùy¼®ð?å­ãêd”„t.b ¾?qN1— ,ë”·¹:K¹Ë¤Àõfä˜ë,å”ÎÉ©`U„K„LXÖç>w$P³oôºÉ÷§ëŽ¿´õ¡#FqÎà3LjÐ ðÂQБÄD[ΘÆA¶=bÁ%ÿ»Y›ÊuŒ“ÿ@rÙŸ«»Uoª*d–3…{Á|]ÈÔqMéK.°XuJ`)–Rt¥,»#jœäN`ý!=XnV°˜°®r“»¶ Kž´[ýÆm³ÅoX¢Ý}âZ£)ˆƒùü8†¹kõîÍ›õæª;ºaÏš3]ÞqKÀ’…$Oæ=¦›^ª]9‹ØâôéýÛÆêÎH±ñŸOÿxúôEfºéˆíW¿XÁ"°¬ÓŸE¸TŽ6ÔÚÏ"$°ØäN`Xg—°ôå%¼Çúã‹ßÈ€˜¾eÿ|Ý.ˆC_µ;\BäçW?lml`S!b÷áCéìçW¯¶lÛ„|X4IÀ*Ê“y­`)å+Ì?Œæ—îmì.Ö·îÏŸ½ÌN×­¡¢5RÖNfE`ú°çcf;©7#E`ýÀÒmKÕ ,ËX`áw-Pâ8/ÀRO$¬ö†Kíγ+‘îÅb¹R©ŽŽL¾ûégL½úôá=ÚÛ±¯ðÙã'±D¾Çî÷ÓÞqŒ•*X‰#ÚÛõ,s°Ø-L¡î%—­âT·Æ¡Ùñ¤õY«€…gýÏÀÂs ,ë¢K?ŽÀ"° ÖÉS1Ê!°.-°ÜGí%´EË=þ©k·ÝÃéñÑÑÉÎ^Á# ežï=yòh/Íô:‚ø”88bu§ +¹kZíU?²É]¹ˆ5,u¸Ëc·æñF“»r²ºK~®AK„rý¬æ:>ðuqá–`Ñ›nèçrXÖE–¾¨L`XFK9ÌÕ:"ÍbHÛQyx™‡=X—Xú½„΄ԉeíB¶Í¾Öî(f+«[›‘´[ò“]½þ§{»ÿúç/¿~x[*Í›\¹v×¾ŠÛý~ssç–=vs ‡´Õ¿!ön¨R6«:zÍ´X¨E¡ÿLùˆƒÛ ,bJ Ô‹,ë2ô`á,çYW¬`X-–ÞX§ÌWÈÏu¹€¥§¤žKˆN¬HÅ4Lß),.Ô¿3y:­Bh0ÓÕ+8…x¹RE·ûë/v··?¾;?¿bŽöø§­á9¥ˆ¥!}p߸Äètu6ÀRyçM×â«ÃSë¾tÌÒ‹À"°.:°¸‹À:`!,&,ëj,bIg?cáïkKìš)Üat÷2ÙQ1œòˆÉdz¬Q_ÝX[ÿëÞî¿?~üõ—{ö²ãóöPÁ,õFïJÆRŠXGõcéC·ñÐ`IÏmècŸ}©š©M”Ö–;‹ÍG‰É{²±,‹À"°,5?Xuº„¥]ÈC85 …¶hà p›uõÚ]Q4]ŠåæJs¥Ö˜šš]©­ì=Ú}¶÷øÝ?~xóºÙØÈŽßbØQ¸ fj¾ô €8'¬-·¸É=+5¹÷EËxs û ¢"GÙšëö…á…åæNeyË•$°,‹ÀºÚÀræ±=\ÙˆËa‹Àº0ƒF-Áó,}ë± ›2,xË‘ýªK¼Ýë·D|äâüB±87ÏæïLî˜]rKd\"$°¬K,uB`¹VœÀ"°8ÉýÿX"<ÒX ²*€‹tû&º\Ùö¾X—#æ Äíîh8’r‰ÉX¦hóånØR˜PÚá›´„JÈ/Ž˜Üí~€µÿ¬”´IP b h#sãtR颓,‹À"°ÒW~‰0Î%B‹ÀjEKo,y2–ZÊ’×Ñ„©÷ÈmGú–=iv&oõ~ÓmïO[‚³`R0.J — ÎC —ó¥«V†oaž9PP:ýlr'°,‹Àˆ³ÉÀ"°Z°4ÍXghKYvùÐ~§ƒÆ,̈Ã_nòŒBZ&ïX_TjiÒî"TËWg ¬S]¬jJ|ç–Gz,ÑŠc,‹À"°,‹ÀjYÂR¥a°¬”²´Ì¢!ÚÆpO‡{´Û?…œrpFƒn}í|K½X-°ŠžÔÊo´ªsÐ(E`XE`X­JXúCš˜…oÛC@TóøOs`-<ÀgIÝ”Îs ,ýÅÂŽ Xu•V<*‡À"°,‹À"°¬',Õ‡˜…Ø?è&!…;Y³†f°hèV>{Ôø«Ö.d,¼`"ŽnÐÒŠ‡=XE`XÕÊ„¥ÚBÏ,UZOªf Íb‚Gó´F9ç,5pûXøYé/ŸÀ"°,‹À"°,˨„¥=îFk)Œ’‡/Lf¿ ÀBXE`qE`]\`ÕÏyÂÒa×Aªa ï',mBQXE`Xs’;E`]``-\  –žMú„¥ýE`X{¾üÀB í⣡„e —p‡›yýÓxUŒVT–¡WÛÃx`Õ{ Ñò¼†Š¡_E a8°¬¡YC¯ôµåL°–-â4Þ`kÎP`!,ÒÜ×óÕ Õ`y›Û"ûÀb¾úÝ€.¬pÉÐ÷•7ÓÄLi$F£ó•YÎWÆ+<÷… ù/WŸ>³xFùIEND®B`‚calamares-3.2.20/src/modules/locale/images/orig/timezone_-1.0.png000066400000000000000000000175141362604102500244330ustar00rootroot00000000000000‰PNG  IHDR ™q*UüsBIT|dˆ pHYs¢¢EÝ1¢tEXtSoftwarewww.inkscape.org›î<ÉIDATxÚíÝ tÖåèñY% I„…@X#H É ‚€,Á¼ [ „@@ ËûfA@qa—ºO­ZÅ·Ö]Ä¥µvZgn{§çÎÌ=·sî½½Ó¹§í™ÛjÇ)÷}ݪ¶V–¼¡à‡s>‡äÂ9¿çä=ùžÿÿyþ£G¾îTÎØøzí©”[~Ss H°œÉ @€€ @ˆ @@€@€€ Ö @@€ € €¯‰>#f˜¿·qÂÚg"@üߣ?ü';¿`Õf nze÷8©ví˜å÷7» ®Òò—Îûl ¬~<’¿òÑF Õ¥™6|ØÜíë?‰œ—5$¥çϵèÖ/Ýl8TŒ®›9òñç¯Ô  Ǥ_^ù¬ÏÁˆ’=áÁn¬y­6·ìÆæñkžúðŠÈ˜ÊûN®¯ê7ªtVêéÁÔ¡Ó'§½pJ¯œó £_cfö”pÕYW4ŒZt[KÑúÂÀŸèŸ·àÓÉ_õhóðy;cÑ)\÷l8{J¤.-iSþÊÇš{åL]öU¡ýÕ>ªGïa3&æÌÜ"@@€üQÇ®É 93.[WÜp°>û‚úúýF í908=£peEÊ Iù}sKfdMZ·¼ÿ˜…«ÎNJK>¦7Ø@ CìßfMZ_óÉmZbhXÌÎ[zwÓ¹y%¡Ž)»}rãD¿^4§gvptbÚèìXuœðFö¡³§D*³/h¬·âˆMè @NîM38+ªÝg_ëÜ=5)9sÂy)ƒÏ/†G‹S°@€oh´ëqnîÀsÒ†ŒIL=$úyjB¯é –Ue×¬Ë ^²2½°º$*4lζ†ÂuÏD<ÀqëÔ-¥_‼òž‹ ¢Aؽï°Á±#vûŽœê?fᬞÙGG?ÏO»xvFQM€h« ¤ôqÓ2Æçv욘ý´K,H>–Ô{ØŒ…c–Ý @Nî*H×ä„ã—/î›[RÛ£ÿèçæ…6Fƒ£¶_^y}záŠÍ£—|sCqýÉ=ù\€ @øPbÚèœ!]uyræ„ÂØ•Ï\é2ðüú•­àö«ÎI™ãÇuèÜ­GÚ¸%¡AÓ7TgMZ¿0gæåë‚ ‡ê€V×½ÏÐyßlŽGpŸÓ¹{¯Ìô +«Ÿüt³y0òš+ @Zý6¬ö©C§_4ââkš‹ê6Ä"aÄü½kN ¯ @Z-<’2ò‡õ3dÖ–æaóv®š°ö™†‰‘#µc«ö7׬ @Z#>ÚõXTR°úñ¦Âõχ j„³§D–E?n½äÎȸê‡"ö€€hµé•3õ⢺—>ƒÈ‘©¼7b:€Ö 93·|…ëž ›³mÓˆù{Zœ‚ U%gN˜–WqWsQí á`øð§§]Zxë¥@k^ýè˜5©¶)½°zi¿¼²¼sG•.Ë(ZU32týºO"!å#u¹¡œ‚à¤âã¬î}† 4­yýÙIi=SŸ_=µqaÿ±‹.NÊ((µè¶#að…«G†nX%@@€œL€t‹m@?;i@Ïèïº÷–Ÿ=µ©vìòû›ó«nÉÓñ:~W€ @¾^ñÑî‹?øüZ·»õÈ(Z5õÜóæçõÍ-;nÅC ÀÉHר-XŸäÌ i»§&E?î{áã×#æïY%@@€œÔíW½G\”–>aEqûN IÉY…%#K¯Û0®ú¡¦1•÷E†Î¾º"3¸¦,}BÕä±Ëï¯ @N*@ú[œ?pJø’!3·¬š°ö™ðã _^ÙÒ¼Š»ìÐÐ;të3fд 5±ÍæEµ/~ÁÈkuiKgŽZ|»ç€€8ééÕ9öqïa3ž;êâ1)ƒ&—¤åWL8¹na,F–î«^²»F€€h‰m6?«s÷Þƒº÷:2qÀ˜‚Ô!ÓJúžW23kríÜñ«Ÿh6w‡cx@€´J€ÄŽÝíuN,>>ëìØ•‘¨.¹e7®g|À×+@ztéÑ·¤G¿ÜåÉY…y±«!±}!1©C§Oüãž#@«DHûØ­X)ƒ&Íë•3uYFQÍÒn}†ôË(\¹`ζ›ö†¬|{å·V½ ?×(@@€œ”n©ƒ‹{,žÐ£ÿ¨YýFÏlX°oë#J¶4«Ú)»nûm;^½ßòôâ^}ÏÊÃS/Ý™p2W@:$ôÊ»2aéüÆm¯_üAÅÍ›îûä(Þ¢úçÃÁð«õŸlŽÇ­XpfF cRÇs:öì˜Ø¹oçö_üóg÷èþñ¾N‰FM®,‰äÌX_›QT³*´§åþó›ïº29äIè @¾\4::]Ô|Axí·ç¿½ùù‹uù óÓüøüŸ_r÷ü7—î›ûí9§m[>frrÖ°)¡m¥O¬½§ôíª[BÏž:³üë")YýÎ[pc³S°@€üE“k‚®¿¿äÝÝß/=zÍ˾Ôö#ÿç‚kë«}¨ú{[.üÅÆç*þqá¾ÈCÃæl«Ú×ïø €ÓÜèùçÚüÜÅÿöIdìx³ì½=?ýáÏÈîï—}~¼òÝË^,ÿ×u¬9´àú­wNÛôðæ¶€8͵ïÖ¾{Ýþù?þldìú^è?Zž^ôÏ;ß*ýà’ûÖ½y|ñÏ.)ô«í¯‡ÞÛývéѽï”ÝþFè½Øß†ÊÑÐ5»n @¾r³ùâ=³îÛñfè÷W¾²à_÷¾:úqTü!üXÕß.º±îÀüÝ[oŸ»c÷žYö³«—þnëáÐïb²õµ²ozªêÇÍO/ÿû‹®ºs»ðû>ŠC;Þ(ý­GÊÿ½åé?_y׊#‘‹~¶ì¶È)—>¼)v{Õ²Û7>XswÍÁÙW_{Ýœm·ì^uwÓËïØøàÄÈ3Áð+õmp«¹sÞÁØ«—ÿzÛ‘Ðïb!û|ëk¥ïÕ?²ìï ëžÌßµïºê»ê¾[ÿèÊ·«y³æÞÈÓs·ß´÷£g~<Õ,@@€|¥Ý;ôØü\é/?¼åêíÐ.{¡ì—k÷/ùQý£Kÿ®áÑÊwWß[}¤|ßæ»/¹oíËW¼²à—m:¯üáe/.ü_k¾]ýz<0(@@€g¨`UaY4<>wÂÕÞwBˆíÿˆÅ»ãÍÒÿ¬¹gÝóe×î¼åò—ÿÏØþ˜úG—üdÞŽ½7œªø €ÓPÅusîþ²g}l{-ôÿÖî_ñÖÕ‡üªåéªw\¿å®Ð5»¿Ût>Pñ“™WܼK€€8¶7´@ }Ý%ÿ%|`éO®>\þ›Ø©V_ŒÏ¾¶ã­ò÷Ÿ\þnéÞ]ߘ³íúk§_öÀåÀ10.={ëáÒ÷v¼zãsKþûú«ÞŽ=`ð/==æÊWürÎÖ=7Õ¿ @ŽÉœÓ.ÝûƒØÏK?Øô\ù/šŸ^òµ-ûQËwÿSÝÃËxé³ÿôÉ3A>+vJVÓ“KþaÑ õMj|."@@€|¥E{gßùç®pÄžjÛ˜¾é¹…ÿ²üö†'6>»ô¿íýÁçCäŠWþbûë¥ï—ï»êoNE|^­ €ÓÈò›æ>òññ»Ñ ýúªC忎}¼ûû¥Øüü¢©¼½î©Ø1»ÁÈku«ï­{ö‹{C.{1ô«y;¯iÓ“°Šë_©Ï™qYcïá3#¹e7´ÀibÕóžÅÄÎï•ý>´÷Ò{«î¨~µñ‰ŠŸnz~ÑÏw¾Yöþ®ï…>(Ùuõ±üg_}ëÎØÑ¼ŸÈö7CïÅ"¤êÎ ·e€ Ÿ·óÒÜò›[ ×?vpYó­’7®:´àÿ6#.*Ë(ªÙèa„Òº"GjsflÞÔotÙªŒ¢U FÌßÛlxµ.·ü¦&€ mu2V³@€¶ ®Ö @Ú @nh Ò&F €i³ € @μ¹^€ @H›H£@€6 }®€ @ˆp¦HéµnÁ@€­üM´7òçŒ "@@€œyrñ5±éb= $þ2_€ @ˆpH“@€6 ½®€ @ˆp¦HÉ€ mcxÉžˆ@€¸Ë[ú­uiË–D¤“õ@€¸WýPý°9Û–õ]–{ zÔYÖ @Z]QÝK }FÎ)úô Y€ @H|O¾Úé|NïD€ ñ¿kÅ=ú厈†GG€ ñ~öGSdz{ô‰†GRTbT;ë€ ­nôâ;{ æš?à¯XrVáÈ^9SŠ[Ó€‚eÕmc*ïiŒþ¿ùÖðWnÐM+NõCOòèÝÆÔ¡­%@€ÄUÁêÇ#}FÌžf §U€©-¿R:ÅÇ„µÏDÎU:'vÞ®u@€œF²vÿ%¯\þòÂÿ}Á¦/;â£pýóáþc…œr€1à´ Æêæ§—ýtÇ[¥\tõí;¾ì‡þ`ø¥ð” o<Õñ{âù€ü¥ £ñÑÞú @ 8oÁŠ<™¶éþË¿øÃþÜí7ïiùNåOË®ÛuKÓS•¿ãÍÐïg]uçöSõÒ'¬¨ˆÆGk8Ã6¡¯øfÓ½ï”]÷ÀÚƒë\ýÚürÚæû·œŠø6¼Z—Y¼º*¬à ‰/†Ë¯Ûqëä–ï6#¯Õ‡~¸Q=y¹¡á±•ß_uwÃwÚ$>‡ë²&®]ÎÖ pÆÈŸ7mó··ìú~è?¯8¸ðÿÄýô¬Èkµ'ׯî”Ð3Áz€¾†;¶7tÍÞg_}GÜ÷ƒd_дö줴îÖ ðµ ¶1øÂëR²’¬@€ÄUÎÌ-uÝR¥X# À$mÜ’åÃæl ·¦Üò›O&>¢_£þœsGöµ> @€3í+h{¨_k¿tî‰ÆÇð’] ‰iy¬ €c2  ò„ddéµá¤ô±Yf ®’[~S$)£ Çü@€Ä5@F-º5’œU4Âì@€Ä5@ò–|³±göÄÑæ ®2¦òžÆ”Á“ Ì @\d\ÕþÆÔ!Ó‚æ î’5qm…Y€h›™´~‘Y€ @ @@€ €€ @@€@€€ €h¥É ®©NÊ(’”>.')#?'1-op~ç êÑÔ sΑӽÏЬ„^ƒ2R2û™+€¢ÚƯyª)¦`Í“YóDÔãŸÊ«øÖ¦¾ç•Ì7W ' Çbdéµu½†LÚ™+€¸HQÝË }FÌ>ß<@€Ä=@†ÏÝQº˜'€¸Hö•f  î’¿ê±pŸá³&™%€¸HÁêÇ#Ñø˜xOÇ 6¼RßgÄE Å€¸ÈèÅ·Gºõ⡃ @â …++Ì@Üd\Õþ椌ñ¹æ ®2aí3‘”Aƒö~€ˆ{€Œ ]ñÐA m ƒ¦µÔuMNïfv @Úâ È¥ÆWVu<;)Áü@€Ä}zqý+õýÇ,œm~ @â 1™ÁKš€¸HAÍã‰éc‡›€õÌž8²ßèЬ¯’Y¼zõñHQÝK ýòÊç˜3€¥V—œÈ­UÇ*gæ–Ú@ ÐÞ¬@€Ä=@F-º­% ‰f   äÖæh€ô0k Ÿ ’]7]ÓòÊÿZvÝž›ƒ‘Cu½~¤vró üüø šÖ¼& íÌÀçdå·šßûNÙÑúG—ýhóóKþDzÛ6ß_¾oç­;ß*ý`íýë^:îMèõú Ÿ5Ùœ@€üI€Lj|!R¾oÇmK¾±é¾=o‡ŽÖ=Róúœm7ïÞývèMOU½{û?šÛwêšlÎ @¾tH0r¸î¢­·ìžy!2©é‰–ØmGB¿-?9ž>oG$t6g aú‘Ú¢†Â3¯¼kkÝ#«_Ûözè½ò}WÝy¼W@Ò'¬X sðåRõ7-^}¸ü7;Þ,ûí5?,;ºãÐûS6<¼ñø®~ì wë=¤·€ø‹²æ¾Úç¶¿Qö^äñê·×î_÷òì­·í<žø(\÷l85点æ às,+»|ÿ¥ŸSyïÆ 5ߨúÙ× Vh>žSyoS·ÞƒÆ¥äôJ1g ½ÉÝ¢R¿J¿Ñe¥Ç»$³xõ¦¿~»³:ŸÕÞ¼@€㕒ʹÇ ‘#µ}†ÏªOH4«SBϼžÙ½‡›#€øHTßQóvLìØ¥Cb‡ù‹òG™#€¸Hÿqe éã² ½pHhØ…ÃÒÌ@ܤ`Õ¦¾¹óÖtï;¬09«hBbúØ~f  .òáSÕÇëò*¾Ù’2(¸¶K¾=Ì@Üäƒg¬Û˜œU NÃ߉É-»¡%1-/Ã<@€Ä=@b²§FV'ge›)€¸HÌÈÒk’3'˜+€¸HLÎÌ- @ ‹Ù€ˆ{€®{6Ü3{\©Ù€ˆ{€LŒ®MRÔäT, ñ¨as¶µtèÔ5Ù|@€Ä=@‚õÏ4×ÔÜœ2p¸€ˆk€|t+Ö‘Úá%{"ýF‡æNf €1€øÈÇŠê_nÈ,®©ê–šÓǼ $®ò‰áswÔ÷1û|›Ó ¤¶-­!ÜÜ‚%Ñé`öÿ©{¹!}üòJ+@€6l8T—3sKmïa3&FC¤³u@€ø_ ©}±aȬ+ëúæÎ›å¶,€i¹å75G$Áz @ˆ§é7ÞG¿Ã*@@€ € @"@ D€€ @ˆ @@€@€€ @ˆ @@€@€€ Ö @@€ Ài EõF”ìi^²;r2N®o‰HWë€ _*¿úá ]“3Gã¡ËIêl- ä+$¡× Ls @@€ 丮{&’\³2kÒúe'#-érû@ Ä1¼ @"@@€ D€ @ˆ @@€@€€  @@€ € "@@€ D€€ @ˆ @@€ D€€ @ˆ @@€€ € @@€€ @à´ù Úǘ… @ ­¤Y@€€ @ˆ @@€@€€  @@€ € "@@€ D€€ @ˆ@€@€€ € @@€ €ùÁ†CuÁ†WOØÈ²Z@€S|¤™¶0eФ‚•œU86 í­@€|E€¼Z×+gJ±Y€ @"@@€ D€€ @"@@€ D€€ @`€ @@€@€€8m¤gvpr èr:[ €9&#Ënhqñ5 '*{J¸)!]­@€Ä]nùMÍÑI°"@@€ D€€ @ˆ@€@€€ € @@€ € @"@ D€€ @ˆ @@€€1@€€ € @@€X€ @"@@€ D€ @ˆ @@€@€€  @@€ € "@@€8ü£Â’„î–ß»IEND®B`‚calamares-3.2.20/src/modules/locale/images/orig/timezone_-10.0.png000066400000000000000000000171471362604102500245150ustar00rootroot00000000000000‰PNG  IHDR ™q*UüsBIT|dˆ pHYs¢¢EÝ1¢tEXtSoftwarewww.inkscape.org›î<äIDATxÚíÝw–u‚àñ6#¢$É©I› ‚dš&ÓMÓÝÐÐá}ßdDrDQ0€¢&P&¬;ÎÖìÔ\ÝNííTÍîÍÝílÝÞÝ^ÝÕ^í,÷>00ˆ ©» ýéªÕýÆGžçç[¿ç÷übΜ9SQšÆe$¤ÿ¸àVŠË9XZ­f£zùÿ \›D€D€€ €ˆ"@"@@€@€D€€ € @ @D€D€€ € @D€D€€ @ @D€ ˆˆ"@D€D€€ €±³@€  ˆˆ"@@€@€  ˆ"@"@@€@€  € @ @@€ 7 ‰s„ZõMí®yRΠ˜˜˜{¢ªÕkÓo@»g–Íiûô¢éñyŸ„.„Bä´r“s_ðŸà÷šÍzÖnž)ŽË9XŒ†¤„NFÿµ}zQzÖ)­oÔµAƒÎ#ÚG?·Wð^;ÈY :=“;åµ9AH4OÊtþ®WÁeWõÚôo׺8¯Ëø ºMzµ¨WÖž²¦ñ¹½³ß?{Ö¥ç~鑹»4.÷`I4q9J«ÕlTÏ΀* uÛôkÑqÔšÜ^Yïˆ#WE¢A2:iÕ·pZ× [ R#§ .×".ç €ª Á%T—{¬ýˆ߉…¤‚/ÂOv;ºõ€âÑ퇯˜\Vu£á!@ ŠH0÷¢n›~ݪ=Ö þež»÷‰öƒÛ´L;69ôUÑ͆†€* {NJlžœ;.÷]îù†]Ç´k?bÅÔà«ÞÙûà y‡ÂÈ ©Ù¤{óG궪y…Ñ‘‡»MÞ~vä£û´ù :•줂£!ä†.ÁŠªvÉc÷µH3¸ÃÈUY s>ôÈx«¤i|f¨õ€ÈÜž3Þ-¹™ çªv€Ü{ñßuZ§6ê8z]vrÑñ¢`5ó6CFêµí?¤~Ç¡Ýk6éÞ©WÖ{Å.ÁrCª×iQ+ˆ‡jÔ{ø©Aeé=3wŸ½äªwöûÅ7îÖ²a—Q]kÔoÛø¾«×nÔ=}Jé»LBrS£ ÷Õï8,¶WÖ{æv¤DN6KÈR§Ur'cÇl–˜Ü‚×]°@€Ü°úŸiÝ~ÄŠì`Eòï­Xžÿy¸U¿PA¯™ûŠÊ{Þ‡€* Mã2zLßUVQq!@@€|'@ne|¨Â—ûA$aÎáˆb ˆˆ"@ ¼NäcbªEU¿C¸S5ì:ºK—ô­Eݧ½ºÝu³!íGÜy£1{MŽïý~èVŸg_«ž3Þ ¤†€;,>š%Îì›wè;ñÑÞÇórv8bå««o§ð0ÿƒù9»" (]»V€À MzMIê>õïœïNeÑ;1þLÉG™¿êSr¨äVŸ÷-ý¬xöî¢ÏŠöglWÁžÌŸ ¸C=Ú Cí§•¦'ÌùôìHÈÀ…ûæïÉ;±ö›qÿ¾ìDú?Wt„Œ\ýòº9ïÎ=6`Áþýæ˜?dÉ›Ë/~>}óêW6|;þÌ’c“Ÿ¿g‹–o pg†ÜÓ óˆ.]Æo™9U˜þª¨ìдß,úbâN|¹ì¹qÉgÅEûs~:mÛâÝW;‡îSüE$}óªWú–*¾|Ûšhl,<÷Üé‚à36FcöÛyÇôûÕ?Iû× ö,¾ðÞ’#Źo…?»þ…Íæ€À]äÁGêTo‘’÷LïœEA„$‡]é¼xÔê-ϯÿyÚ™…G¦ü6ˆ–A‹Þ]2n㆗R"_^úÚœ‘‚ÈíŸþ×ë¾Iûコïùº0%r²pØsÛÖLß¶ðäðÑpÁÞÜÓóOýMjñ‘ˆIè€*¢^›þ-:ŽZ339ôÕ$ˆ‡)[ŸÝ9bå«k‚‘Œy‡§ýM$cÖmzáÒ׎Yûâ¦y‡§ÿÇñÏ?·#úºßÌz»àÈå?÷tÁåF€îþ˲h–8³ÏÌwŠ®å<9sǼ}¥Ÿdþºÿ¼ƒóðµ‘S…nÃ+@à²j·LjØnسӓ ކ¬"@ 2FCîkÒ{Zbì”× ˆ€JQ³YÏÚmÏ›€’^YïEí9¯ôœ½çÌÜ[vξÒ@ï™ûÊÎÊ~ÿ öŸWzVÎà`i·‰Ûæ ¨:£!÷D=vÿ!÷?T£æÅzô‰Z«^»ií‹Û @€Ê"D€D€€ €ˆ"@"@@€@€D€€ € @ @D€D€€ € @D€D€€ @ @D€ ˆˆ"@D€D€€ €±³@€  7 ×lT×Î"@@€@€ ¸†ižƒ[öÉÔ2uîÀ©s\’׿EÊì~èëúž“Û§yRNj YbvÊ93“ÏJ˜‘Ô4>3ñœŒ„èëÇ ¸Ë£"&澆]GwiÔ==öjbzÍx¯äVG‚€;:@ªÇN}=œ>Yx5¸éé>íÍеœŸ @€  ˆ"@"@@€@€ ˆˆ"@"@@€ D€À] ¼·xÆŽüÃH¥Œ€$‡Ž]øÒôMËw¤  ~ ÖÈU/mxzé»Koi,@ *ÌéSúQÙ …/­ÉÝ5ótJäd¡Rá! .Çú2œ>Q$@@€T¸9ïÌ=¶øËIÿeÈ’ÝË UòñŒ_nø6íLÞ;³¿ @*T掲}“_ZöFJäXX€€¹K" @wL€ŒÛ°iKøƒìo†.{s¹*4@ öÍþzã/ÆŸÉz­ì}Th€ ^¼wñôWíîWöi‰Ì pHÛ¡‹gu³~fEè2~Kž€»>@n?bE(vòŽ¢«©Ð iŸ‘ @ JDȃפbdF¢.„JE~x³„¬$TN€$f  r¤yRN²*'@’sSP)Ò"evª*)@òú r$uN_TJ€´ì“ß_€¸Ë¤oá€Û"@j5©cgÀ] ­ú… @€wW€´î @%È€â!¸®iÐyD‹¦ñ™)׫ÍàùÓp]Òz@ɰ[ªH€´²`¤*%@Ú [:N€• 퇯˜ @€J £ÖL @¥HƒNÃ;4î1±÷ybÓâb§¼jÙ· ãâÇoT³„¬Ñ)á“…È÷ßs·‰Ûò»¤¿”ýý›Ýˆª×z$vòväŠR\x,Ô¨{zlylH«~E#ËȤWΞà·¾|Zôï{nvCj5ëݨwΰri€

@âr? ×n™Øø¦7$1í†-"@@€\&@^½p’ÿÔÀ’‘å±1 »ŒêšTp4$@@€|7@&ÿ9@ºO}½èÁêµ)‡Q:Û4K€€¹$@¶_8ÉO ]Ø,qfJylP³Äìþ)‘S…Èe$ÐiìÆœèã÷ÝìU{üÉÇ»Oß @Îȃ±—HbþçáG¶/zj`Éä¢Ùñ½“ý¶C—L(ªÓ:¥yüìÃȹ™²ã{ó4zeí ?Ö¨KÝr˜Œ~Oû+2?Èk—=áoÙ·`HylXãž“z%/ @® ]'¾<7x¾FAìš¾uŽòЕ$9t¢¨I¯)½ËcãZ¦Î"@@€Däõ+®ÕÑaäêÌ`ÇÍn\úmëôœñnX€@U©WøÙŸ„ëµм<6°Í…éªx€tŸúÆ®VþÔ ycÊcŸh?¤MâÜÏ"ªn€T»Z€ô˜¾+ôp­Æ–Ãdô{;Ž^7S€€¹â‰JäTaóäܾ屑Mã3SÂ' TÕ™öæUƒ sÚæYÑ×Þ_£ ÕºMÞnÈ•% =ÙmlçòØÐVýBÏ ?¨Ý°g'o¸Ù ­Õ¬WƒÞÙû#ª^€<Ü}ÚÎk j5ïÝ .ʉÆÌdU0@zLßYt­кø™òØØ†]Gw .ë @®(˜@\¶U£ ÷w·)W€@• ]×|[Ü”Ðɦñ å±ÁÍ“rú·ø P¥ä­¢ë‰è8z]V°¨àÍnpýŽCÛ_ÏeX礩€Û)@¢?÷—8]£G{d\_€$Ìù4üDûÁ­˜&½§õí:ñåük•TðEèzïHÕfÈÂqHL‹”¼7²Ðßõ虹;ôH½V5 ÔÈé‚è÷  @*>@¢ºŒ1/&&æ¤Â$©ðX¨Q ±ªx€¤„¿*Êy³øÃôÍë^®Èi?|Å´à¶[ªp€ŒXù£uëžvfñÑÉÿ>^TQ—ûA¸N«äFªp€$‡OÍÚ:T°/ó¯}1ùï‡/ß¾º¢"¤õÀ’Ì)Èùfý_¦™øÂÊW+*@b§¼^xµG‹‰‰y(ªZ°ºzTõ¨G¢j‹FÏ?þ`ºµ®Ù¨númë×kÛ?^€À] }ŠD†/ß¶&%òuaEHJøëÂØ©¯‡ºO}½¨û´¡Ów…zdìŽôœñN¤WÖ{Žfî+4.ç@i\î%ñ³>,‰ŸýqqτëºÜK€Àí w¤Ò$æn?|ù´#VN¾VMzM‰up€©Ñ`ɸÑÛwu€|Vܯìƒùgç•DN–Ëœ•`þIÍ&±O8@ ŠÈÀ…ûNܲb{jä‹ÈàÅo=,šÜ6xÑç“þaù×ãÿ÷Ô•î Ö/»aÓ åñ}ÑA¨¢>ó¾fo×}3îßç¼›w"ïü£«’ö¯A„dïœûy°ˆbÆö…ï•Ç÷u³!7&&æ> Üá2páû‹Ò6®Ûz=—LMzqÅk%gþjâ–…o/;1áŸf½}jC48ò»‰/,Ù¹üëô™örñþï}fäTáån'|µïNÈ;T\¯ÝÀ–¸Ã¤øÃ¿ â!}Óêm7òþäðñ¢ÔÈñPÖk%&m)Þ;óõ¢O‚… öÎüYßÒC¥ç^óY$¸L«èÀÌ¿œxêߦF>¿°~HæŽyû®e¥÷ÖŠG:Hàé¯,z§ô“Œ_\µzëù`¸“_zî³á±/ç'Ó_Üøíø3¡hpŒY»yóÊÿ?¹»æ~±äˉÿmåÓþo¿yæÿy¥÷ìkZé½ë„— bbbt À>dĪ­ëƒ¹ÑùÁeR7ò#Wýhý¢£“ÿ>ãÕï ]öæò…G¦þ]áûÓYvhÚ߬ý‹´?ÎÞ=û«œsަoZüæÅï;»ÒûŠmk¯¶Ò{Rá—¡'»ëê@€rÆ='õJÌ?ª¬´pï¢G¦ü6gWÑákºäê Ïs9ÆmØ´%t ÷§ƒ½±|é±Iÿ5ݶlý c֮ضáÛ´3 >›ö·©Å§/¼>9t,tñ‘Ùoç^°7÷tJä«ï}OÛ§Mp @9Hô瞦ñ3ú&Ìùô"ät¹FÈÕF ÎŽr¬üÑúgOLüÃÌ×#¦mÜðâðåÛW]úš >6þbü™Ìó÷F_óÒ´móöÎÿtÊo—|9áÁHö›¹Ç‡,Ù½,ø¾â3ÿzé± ÿØ·ìò³£¡£¡å_ÿ—Õ?Mû}Kλô³»Oß~¸VãG,PŽò§‰iÒ{ZJBÞ¡Ð÷ïBµrG0’0zÍÖ•y©Vú¦5/—jíŸþ˵ߤý1#ÿ¬ÿqñkž^úö³A|ô-;?ýDÑÂÏ'ÿnéñô?¤m\¶#);”ñë`„cþá)ÿ)X7¤ÿ¼ý .Žœ1ë6o~Ÿ¸eåö´ë_J9;‰=%|²°i\F’ƒÊ9@ÎGHã^“âg}ôÉß3çDp"?ãµyû*u È©ÂÁ‹ß~6)t¸8˜<ž³3tèZFbR"GÃ)‘Ï#æ˜98óçS_^ºëìãá/Ã}J?*»Ü(LrèËÐs_§ÿÏhèüÛŠSéÿ+rpÆ/‚ïo?bEFðï róõ˜Ð;.÷à…éSúiñ¸ ë_ n{éÉþ%ï.-Ü7ûë±ë¶<;/føÌò×W…äþdôÚ­‚¿‡.{cÅ¢/¦ü.ëõ’ƒß¡+owáçK¾œôûȇ3þ*ÞÙï?Þ¸[} TP€žŒMëÞ;{ÿU'¦ÏØ1o0#˜‹q;HήÈGÁvæï™{<ø;íùu? &¬‡?Èúöû#/_D.¾Ô«EJÞ  T`€œnc»öÊÚSôC'öýç}rõËë®xÙVéGeËN¤ÿ÷ŸMùmpËÝs}Rù ëãŸ_ùjɇ¿šûÞì¯Î¯ÔÞnسÙÁz)¨„ <Ñ~pËØ);n*έD~ú–GJp Þ´Ë^²dûÊ k‚¬zqÃúŸ§ +\~rÂÿxöø„JÅNÞQP·uꓨÄùS„4ë6q[þœô_ùÊÚç¾JÿçY»Š>»Õr>6™úw)å¢$Xüðé¥;Ÿ¼ø½%ƒ½³´gæîÂú‡µvÀÀ-@Ý6ýwMß:÷ú'‹?¿eÍÏÒþ­èýœ[~ËÞ¾¥‡Jƒµ>2wüyqÅ~e•ì›}*}óš—ƒ¿ãr5ì:¦‹ƒna€ê´JnØ9í…ëŒÓìY|-wžº&l^±}÷ãÏ”~œù«„9‡‹÷œï@€Û @µ[&>ÑiìÆ¼Š ‚`ö¹{朘¸eåöJ™Rüe(ã•ï>½äå5ͲúÇÄÄ8Pàv ³Ò"¡nëÅãÚ]’ÞnسÛ_>¹ÃˆUÓ:Û<ëfƒ`܆õßYߣ2"$9ôUQË>ùãíq¯ƒn³¹’¦q 7¿¾ÇñÐŒ×æíµfëúyRÁÑP‡+gv¹jƵjÙ·`”UÏ *ÈMŠË9Xúp­¦uìl ˆˆ"@"@@€  ˆˆ"@@€ÜýÒD€€ @ @D€€ € @ @D€D€€ € @ @"@@€@€  € @ @;ˆ"@"@@€@€ ˆÈMHÍÆuíl ˆˆ"@"@@€  ˆˆ"@@€@€  ˆ @D€  D€D€€ € @D€D€€ @ @D€ ˆˆ"@Ü"ÿÜ â,Þ¶IEND®B`‚calamares-3.2.20/src/modules/locale/images/orig/timezone_-11.0.png000066400000000000000000000163561362604102500245170ustar00rootroot00000000000000‰PNG  IHDR ™q*UüsBIT|dˆ pHYs¢¢EÝ1¢tEXtSoftwarewww.inkscape.org›î<kIDATxÚíÝip•ç¡Øqy Æ,fG€@»@! -Hì‹E @¬Ð†ŽŽŽÄjƒ1 x‰qâxKçbâ5ñ†í$^b§·sïÜ|¸íL3w:í‡~èôδ;ÓvZ÷¼8$à€ ÌïÌüÆY:ç=Ïó~ðÞ÷yŸ˜‚-¯vÍîüC[oÈ®:Ùðõ×_Çß_Ñ×¼ºÓÝi„@€@€Ä„€ €ˆÐï2X€  € € @ @"@D€  € @ @"@D€  € @ @"@@€D€7 ƒ @"@@€D€  € @ @"@D€  € @ðý¬•Çžü-gÚSD¦®þaKfå±úÉ‹÷­—½,Å„€é±) Þž±ôáæ ¹ÕëIýð;L ÒöÏÚ§Õ>ÎZy¢3gÍZ’J—Ü5`ШÑisÊ£ü·]€Ü‘º ³º¬ãËPHYǡɋöî™Tœ6dlÚèèÝuч|¸}#d@ÆòG¶öh€¤/9´;6kÉd |Ûˆ„™#rÖü¸¥G¤¸õ£ÈäEKÖXàJb3ïOʯ¥ý†dúºç[ƒ¢1¨Àw‰›±&¯¨é½ð5HYø‹PqóÙÎ`CÁج%‰èÆz˜„’m‹f…> _5@ÒÊwoL*kž_X7kü´•ÓG$ÆGÿþn \C„Ü•º smYä\èŠ2«ý³ð„é«r p£î;0sùÑmW œ5?4aZU±Í€ž0"±pô´ÚŸì¼â-X%­ud®x´aRá¦Yn½nÔøœyÁ†æß¹=ø…ÌÊc[Æe/K·É p½b³*2fµ}îÖcxƒÇgM,X_dà€^ókCjN5ÆÄÄÜüñ€!£ïµFèµ)mÿ}{îúÚ²V<º=enhgòüÖplæýó &ÐcRÖñE¨ áõ®À_¯†<Ý8©`Cëè´¹9c¦,HŒÍZ’12©(ÖÀ× [_kO_zh]BICé݇Þ7aúªyo ’Wwº+!áqS—oJ_r°)¾hË  \S€L¯}vgzÅÁÚ ¹ÕU~9Xï1i榕ÓÖü¸5'*¿þL$ iå{jÇ笘ìphP€nHþ–WwånøiËäE{«‡ŒMv¹?"$Ø$ˆ»Þ74úÏ!¸æ‰/ª ‹Ë‰30@ïÈ’ÜY¡O¾ ›_Þ“Sótó”û¨MšÝRÔ‰AnTðš0}UîŒM?ÿËzò¿¬)Øúzçøœ«¢¿sÏ5¼á@»¤—i…»J¶-66¿øW—,BÏ©9¢â;Þ$X 3*¥4)e^û²¬¶ŽŸV•i€€ î›0uèäE{7–¶Öþí'î^ Á/dUÜ>yñþÕ‰¥óÒvUdVݘµòÄÖhpÔLš¹imôçË ߉”†> §Ì o6Ç ÀycÓË'e¯z¼ivä«Ëî5Ø­Ð/Þ˜ð⊙VûlèÞ“†h°Þ#nÆš¼¼Í/·WS\S€|[iøóö‰ùëgp¸½×{$•5-)jz¯ãj qÍRØøNgq뇑óÿ¾ãíÈÄüuÓ :ܶñ1 ­|ÏÚàN©ÌÊcÛ3–>\?uõ“ÍÁ²ŽüúWv^s€Ìjû]G´d:Ïß‚9ʬ<Ú›Y‘11}ÉèÉó’ :Üž†Mœ>$}顺²Ž/Cß<Ôêé퉥;æA’P¼uþ˜)óSRçw,Ë®:¹½°ñÐU¤pÇÛã²—•ß7>+}Jņ”ùUƒF%1Øp{•R6*kå‰íWZl~þŠÈò#[“g·.ɬ<ÖP¸ã×W”yíë 5(xü®AcÓËãrÖü¨åzÖ‘_1@r7¼Ø7cÍÚ`A‰Aã²—¥änøéÎë}Õe$ú†­c¦Ìo—sà‚¸Üšœüú3í×W äÙ­k 0^“fn,ž¹ýWá‰ËHöª'BCb§LŒ~Æ# Ò 8ÜÖñqGBIÃ‚âæ³7— ’¿íŸSY8hTRΰ‰ÓGt¸mãã®ä¹m•ÁÖ=W¼+¿þL[fåÑÈÐØô„ xF$Œ‰þón“·M| H+ßu~ƒÁžŠï| VÞæ—ÛÇLY›µd]|áæÐ„ÜÕEîÿ6qzšêðý4xtòàô%ýeƒÁ^ ¼º—vånüQ׬¶ÃéKí¼ghì¸hg `ÀÑ÷3zò¼É£R˲L |ÿŒJ)•µòø7ü¶ ¦Tè*Øúz¨ÛRÔô~dbþšªAcGÞ9ðÎAi‹·×—EÎ…fl~9—·¶8X~aÊ„ÜêűY§À÷ÌØô…q95O_óƒA„·|ØÑý+ Ѻ)l8q0³rëÖ”…ÛWO[ûLÓ…_˜¹ýW»&L_='¾¨¾$Z6µ3·½™Rñàz»£À÷Ǹìe©¹^lëé[®º½ä»5½×›U‘a¢àÖ7!·:'¿þ•öÞŽë©ÕO…bbb_é ü`Ðð!&nnç7,ØÐ# öj€·|‰Í¼?ûž¡±ÃŠëËÓÊw­—½4wx|Þ°àYÁcÓ.8lBðèÞ»L,Ü”ñqGBñÖ…=µÁ`¯Hîú»JªÒvîÉ©Ùwð†Y+Oì•:»pêê'C© :+“f·Ô™\¸éâã®ä9­•%;×§ñqÝr%Á“³¦¯!|á‘]™•ÇêM0ÜTñ1 maÏo0Ø/òm“í]i’àæð̓ë{cƒÁ~àjHbiã" ýox|þȬÇwtwƒÁ[*@Š›Ï†SçwT‹ËI6ÙпF§Í™Ssª¹?ãפ,üE(±dÛ¢àæ2“ ý+6kijîúÛn†øèÑ î#›±ñ¥Ž¤²¦Ñö3e~ºI€þ1aúêi}µÁà•”vü¾½Ç$úÁUy÷Žˆ|ÑqÙ˲§®~²9³òèŽ+¬¼^#œÐó‚×ļÚâ™Ûß ÷÷y»ßØß#,2/n>Û˜0½*÷—ýÁ ƒÇLY°°¨é½HvÕÉ'ôi|Ü_T¿ ¨ùýޛ嶫 <²W=¾cÒÌMs‡Çç'GËjíØ)éq¹Õ…‰³¶/š¾î¹`zgð»ú4>îJžÝRl~3ÆÇuHÖŠãÍ÷ {o4<ªG$Ì,K,ݸ5$]…ï„‹[?ºä€>‹© »jûkƒÁ ‚m¯wåÕ½°;±tdžQ©eK'ÍÜT>sÛ[Å­F²*ì*k{éÀÂ}§æmyæ €¾l08¥â@]YÇ¡›9>®  ¯…“ç®]9,>gÜäEåM™+íÌ«;þöΉ ö¾½wvçç³ÀE€@ïŸ72³òØöþÞ`°GdRᆚäk×k>¦¯®½¨é­=…Û_ÜÛíÛµV è-£RgÇM­~ªåV+H^Ý/BÙU Ç ¶½¶»¨é½ÎÒð罇,ZU¥íŸvûž2W@ wÄfÞŸ–]õxç…'ÓÞÌ. © Âõiå‹"9kO ÖvôÄýc®€@/Ýz•?fdrIÂ-`ZQÓ{¹è3yѾ=ù[_é—»hKêý[Z‹[.-\¯ ãŠßÈWmŸ9ø‹˜œ5?Ú›UudWAë{‚=>zòþ.·`€ ¤þÅȯ·½ÔúÑuï„.@€îHqã™ý«{ô™Ù‘s!ôÁ-X×¹º @ :@€@€Wöç×}ýeð˜Ôd·O€Ü—·vqNÍ©=3Þèìe‘s!·‘ØÌŠÄìªÇ¶—u|ê­ÿÿï·ÏÕÉsv.-ÜñvX€}b|Ί)S«Ÿj¾øÖ(ôš!±S¥ÎT7Ÿí @_Ü’7£&gƦ—w  O¤/}xƒˆ"@bB@€@€D€€ € @ @"@@€@€  € @ @@€  ˆ @D€Ĥ€ €ˆ"@"@@€@€D€€ € @ @"@@€àÖ ÔùuéKªM_zh]ÆÒ‡×g,{xÃ7G=²1cyàÈÆÌåG6e.?º)³òèæÌÊcuç­xô¼¬ÇëÏ[y|KÖÊ[¿q²!ivK­ €ïw€”†?oÏ©yºejõSW3px܃äz7Ÿí™T”sçU  7 É% Ýù,D€  € € @ @"@@€@€D€ € €ˆ @"@@€  € €ÈŸdü´ªùñ…uŽaÂôUÓL(|ϤåƒÈ˜ô…ÅcÓËS¯&¦`Ë«]7òaß%«êäV ßï Ìjû8ܽ +ÜÒ]½ '¶˜P } õ&HßÈŠãu&HÈ£›M(> Ìn2¡ @ú&@*m4¡ @ú(@Ž  } ˬ7¡ @ðý Œå¬3¡ @ú&@–^kB@€à{ K^cB@€ôI€¤/=TmB@€\S€L]ýdsfåÑ-×*¡xk… rM’PÒPjb@€@€D€ çM[û“Ù«ßqAÖÊ£Sg'Çn®ºøç×+e^xcLLÌ&Èß(mÿ¬=6kIÆ„éUSg…> ?›»û쮆ŸíúÕÒÃ?;r­ïWÔü~dlzyªÉrùɼ?=&&æî©ÕO5?ÛüÜgÿcÍב··ýãõHZùž“äo$ôi8 S‚ƒM,mœ?;òU[ù¯?ØöFÓ—«{òÔõH^Ý鎡ã3G:@€\bÖù©8 CƦ Ë«û»ð L4b’ÊšÊ @¾ Ÿ„c³¾ @Zùžªž8˜œšS-111œ @. ±‹'_8àÑ“ç%7Ÿ|û÷ê_ÜóFøWÛþaNço"ݽ²7cMž“È¥’ù׉¾îȬ ÷s€,N¹ÜÁ›º<3øï7z`Á{ŒÏY™í„€~ ›á1¼%;{ʼn¾îÊ^õÄöž8¸)Öo褀Û<@Ƥ/L¾ÒH(i(+ëÇtÍÜöfdDBÁ8'Ü*òU/]I/¿b€Ü;2~èŒM?ï‘ç§Ìk_⤀›?@6?÷À™=lúÓâgöl€´þæ;$¶°«²'¾ÄôõÏ·ÅÄÄ tbÀÍ _µUýñÉÅNúëž!¿<y§îŸÿ§š¯×þð‘z<@ÆL™Ÿô]_bTjY|Q㻑~$oø‹Ð¤ÂÍÅN ¸9¤|ÿ+ý·Õÿ÷à§µÿ­´ã÷í‡^îè|·þŸ›^iý8¸²`ßë<øIímyµéóÝg7ýé‘s5ÿsáþWìáYxµ/—·vFiûg—lÙ¾ëýú÷øk¾®=uø§Ýý¼âÖ#c3Ovr@ÿHYÇ' ö¼±ïâÅæýâPó™W:õXÛçjŸ:øÒœ]ïîîá[°º Ñ×€ik~Ü|ñß®ù቟´½Þüùü½ïì¹–Ïœ¼x“ú'@‚§Üv½W÷ïý›êÿUñÐO\øyÓéð‡Á†Ž_oøýSõ×{>Üô/ßõ$¬ë àŠÄ˜ô…‰Ýù2ÉsZ˃¿Y°ï­ýë~tè¥Ù_×&…ù[~Ù1t\úH'ô¬´òÝÕÝYx¾óµÆs}Vû¯ ÷½ö—Û«?øË;þ®ýƒÅ~~xósûÏ,äùc=þÞâ–#c» A4äoy5zsÇ‚ñÁA]ï‚ôäÙ­åNèY#‹FL_÷|kw®‚”v\ºÄ¢O6" dôäy ÝýBSî :¸õªóí­¬xè燯÷`§­ýqKp[—“zÖøiU™EïvÜ”;¡·|pM, Ý{£,hŸ˜_›ï€ž—4»eqiøóö›2@ÆLžßÝ/ /9ôüÑÕíûÅâ_|D€½b\öÒä™ o„Ý‚ô‰„’†9³BŸ†ÐëA†äÕî €ˆú&@²W=±ãžûÆ 4€@¯H°HƲÃõCƦ 2ˆ@ïÈŸ#$³òhÃ}¦5@ïÈŸe­8¾mø¤à &Ðër~MHÕc;F$Œ4 @¯H`êê'›F&6¨@¯H §æéæÑisÆX ×$0mí3-Ñ™`p€^ÀôÚg[ÇLYo€€^@îúÛ¢’h€^ÀŒ/…b³*Ò 4ÐëÈÛü‹Ð¸ì¥éèõ9!u¯„ÆM]žmÀ@€ôz€¢Û>>§ršAÒër>B^o?­*ßÀ€éõ ÌÜöV{ÊüŽ•)óÂÉsÛ%Ïn]XÚ87nÆš<¤GäJ²«N6˜  € €ˆ"@@€  € €ˆ"@@€@€  € €ˆI"@@€  € €ˆ"@@€  € €ˆ"@@€@€  € €ˆ"@@€  € €ˆ"@@€  € €ˆ @"@@€˜  € €ˆ"@Üòÿ^2¼ã{s IEND®B`‚calamares-3.2.20/src/modules/locale/images/orig/timezone_-2.0.png000066400000000000000000000103551362604102500244300ustar00rootroot00000000000000‰PNG  IHDR ™q*UüsBIT|dˆ pHYs¢¢EÝ1¢tEXtSoftwarewww.inkscape.org›î<jIDATxÚíÝiŒœõ}ÀñyæžÙÙ™½ï®õ®|ƒ 8ìBª@H 5è‘ *iÕ¨Rš·´Í«Vj•wi¥ªR_T %-%i”(*jM[ ‚”#ØØøÛë]¯×ë½gçxú¬jSã “"âÏGýgþû<£Õo¤‘¾š+†a àiËý_ÿbۚݙ_äÿpæõ§Ç|÷÷h@c% € € €À‡" ëAÄÃz­¯.L%©\mqî\¢Zž®†µJ=žÌD[¥d,:&‘Ì„ÕòL< bÉls-™)TMÀÏ4wöèù(,úÇí;%ÈÛAX*ÚÂù““¹ÖÞùÉ“õ‰#Ïþ(:´]RÑ^.ŠD¶ØÛ<5òÚDT(aûÐÇ;óm«‡Ò…Žþ\K_zqvâ|<‘Ê&s¥|¦Ð™N7µ/ñ„_^\ëŽìûËÇÓMmù–zFþðÈe~ó²Û•¥f¹p}ì’ýÉèr(‚¥çµx†‹K›Ñít©o[k¾cpýŠí÷moêX+B@€×²æž×U¦ÇÞ#>Þ‘+õv§ò­Ý…®ápäÕïo]}cs¾}Í@X«tT¦‚h]ˆr#ì\w{*™+fûvÜ¿O¦ƒU»¿ÐíëµÅÄôÈþñ©“?ž,öm]ÛÔ1hð @€kÑôéƒÇÃ0œ½x»cè¶ÎTTÓ£?YH7µåò­«Vº×ÏÅ“™d*ßžØõð`O$fƽ0qô¿_‰NYˆÎç• 2Ñ.‰d¦¬–g–^5™]:¤Ø{]1‘·õj,ß¶*:8‹'Ruàqi|,‰‚ 5І™Ù3‡ßš= ¢JX˜8úÜëWqå÷Ú‚£§Ø»iݙן~òì›ÿ9¾òæÏ²Zž~»Ð¹®oajdÒ#¸½þô—m½¾÷;7qüt´œ¾dëÉ ë‹¦àCqáƒë©0 çMÀ{ECG´Ì¤›:Úƒt5VÍÎWÎUÛ‡nkÍ:ŠA<™ k•reajfîì±ÙÙñ7—Þ–äÛV&J×÷4u¬Ê:;‚D2¹ísßHΞ=2ýý1“ð.ÙÙd¶ØSiüØp¦ØÓ›LçúóƒÝÕùé ¬×¢:)± \¯•ëõj%Ѻjg²^«&âÉtº¹{C&[Z1Oeë“o½X.O†a½Zž=e² @Þ1°ëáÓ¥æ-=khK$Š3‰t~< g£x88îäáÓ¯}ï•jyzéíµK¿ë¢ ëïzôá¦Î¡Ryz,sì?þúñ©ÓGMÀOI¤2ÙÅ©éŸxá±×¢¾˜{?ç,}¾£4°£«uåÎõCw|u}‹‡'^üûý•¹sóÓ£?7U ï騳ûÌÿ]ûÖû:~Ŷ{oºãoª•g'ª‹s‡Ï¼ñoÿ8{æðÙ(^.üîÇ7 Àò?´oÿÈ«Oí‚cæg×9¼§3ÓܽõÄÿüÃÓ¦àYœ;7s¥cº7ݹ¦{ó§ïœ?wü-Ð0;ÜZè¾eêä+/¿ý·žÅ¾a( @–_׆;Öd‹½»Ï቉£Ïû<€† kÕÜØÁþÝÂô˜_?ÐXgí;` @ @ @@€@€@€@€@€    € € €€€ @ @ @ @ðË!‚\†ó& !š{6ä3…ÎþRß¶]ƒ{ÿ Œ¶3 Ë®Ø{]W¡sxÇÀM¿¹-[ìY?´oÔT@€,«¶Õ7væZ¶®ùøïm(ömMÆ)o»°üJ+6÷vo¾ûÝ?ÙOekÑVÝT@€,› âÑ’ëßõЖշ~éúÒÀŽd´U3 WÔ9¼góøág„aX¿<4.îu ß¶2Sèj϶¬è¹îž?]‘khÉ–zk‰Tn)ø+ëö–â‰Ô²¼íª^)'N½òä³óçNœ1a ÀµÍaN_r»)ÓÜŠâcǪݬ»ðû€øùu¬Û»2Zö:×¶d ]ÁÐí_ùlqÅ–R¾}u-žÌˆ ˧›Ê¬¹õKô]ÿ¹ætSÛBëšÝ™ ˆûj] ˯gý½7§›:šŠ½›ËA<‘޶BSЉT¾ZêÛ¶` @ @ @ @ðÄbÙboW纽ÙK·k•ùù‰£Ï€e“)t-l¼ûkw^¾?qô¹‘hyÌ„@€,Ÿ ˆ¥ò­‹—oÇ“éšá€€€ @ @ @ @ @@€@€@€@€@€ F@€@€@€@€@€   € € €€€ @ @ @ðÑ45²?V]˜®.ç}ÎOž\4Y ?åüÛ/<òÌ_ý«I€ €€€ @ @ðK-Úûox`ÇrÞeµX_˜™¹ÒqsgM™€ŸËüä‰Ñƒÿò'ß6  € € €€€øa­’‚ ø>­†a8gb @>°¶Á[únü'~÷JÇM¾õ£SÑòMð¥r¥ÊÒåJÇ%Ò+¦   € € €€€ @ @ @ @ @@€ @ @ @|ôUæ&+Ñ’1  wêåúöâÜÄ-¹–¾žX,¨%3MM¥ëÓAMÀ²šÙ?-?¸x;[ìÎmøÔ×)õo‹›€†Z˜ßp×£#Q€ô™€†›;t¼sýâ@<™®›€†:wìù£+¶ß¿7×Ú¿h @jnâøÔüä‰ù(@¦ ÑÉLA|€h¼B׺æT®´ôU5  Õ6¸{]®¥_|€h¬ ’›>óg¢+† ¡ñ‘Üóå;[WßÜÝô¼ @±•7ýÖm½[?3O¦k& Qñôl¹ggïöÏnO¤ó>û 1šÚW÷|ùÞîMwu¤r-â@ãt ïÝÕ»íÞŽD*çmW @«¹gãñàC$’ž‹@€@€@€@€@€    € € €€€ @ @ @ @ @@€@€@€@€@€@€   € € €€€ @ @ @ @ @ @@€@€@€@€@€   XVA,=¯¤¯æœÍ÷ý…Á€¸z«oýâžöµ·n¾šsÒ…Î Zj¦àª$RùxSÇÚºI Àµ+“=ÞRl9ÕyæôðÛ±XûB, €Æ(Ï·Ïvnxö¶ [Ÿ{xb¼ëå/Ýýý0l)› €å*^~ð;‰äèÓ[nøÁ¯mÜþÏ÷xéóO €+š?røØýÍÂ՜Ӻjç¶RÿŽÙ—Ÿ{ð‰\áx«)€x_N½úÔÑh9z5çl¹ÿë£% ÒµùÙáqS @ @àZò¿åʬ´5ÛIEND®B`‚calamares-3.2.20/src/modules/locale/images/orig/timezone_-3.0.png000066400000000000000000000324571362604102500244400ustar00rootroot00000000000000‰PNG  IHDR ™q*UüsBIT|dˆ pHYs¢¢EÝ1¢tEXtSoftwarewww.inkscape.org›î<4¬IDATxÚíÝw\”÷áÀq£¹Ó, ÆX›YÙG4 ¢ˆ ûîLdï½7{ï…Š¨ EQAaÚŒ&Mbf“˜h]qñãÑÚŸ1š€²ùüñ~)åÎ{žöuŸ~W§ÚÚÚN:¦ý‡ôåž PæÕ’úµÁõ càM @€ @@€ @€!@€ æ µ®º³ò§ª—êÞº¿÷Té¨î{Jïé§ÆÍÒ74 0ÔèÏ­ß­_wÝOõÒUõT=Ð{УéþtŸ~u?û×rKcsÇøòq\¹ANŒ™6ÒÜuuEX¾ôIH®üAh¾|<¦Hú)p—ø~HžæDzµX›Q#Ö¦U µIåâ…:çc뾟\!\J9*^ªûÙ=6JåT³4³cÉq®6YJ²0ògþàc÷éªz«ºpÍ @´£Ñó/ö¼3Ô2iAÆß¼@=ÿÃÞ׿g•<ûÉ‹ƒ¶™'.MÕ8âå±efi\‰|R1ûMI ‹+qÅÒÏÊßï†)éu®­ü=©Lêû¹7 @4C€Œñ-ô}Íg¯ÿkÞ{ýÇøðUF?n\4î¶Á¥4²Ðዺ˜ø>0gÚ?nwZá•}Ðþëß}à?&ÕÎÚ<­"®D<^àø‰Ó²À,³¸Ôù7ŽF´6Êè–æÓîOÜß“ûÀR÷Uw¬yú c½ñÕ×ízõ1]õCöðôâ±Å刲v#å¨öJ|‰|2(ÇéíI±+’ôüНN¿2ŠØ¾Ïá³y'•Kç–{åÚÍ\[,ÿtÓT¨+7ülP®ÃGW§Lµ²ðPFZ’Ê… ö¯›Ï4qÐãÜ3 þ„JG¥îý¬Î#z.£_³Œ0ž>u‘v®ýl‹y¾ÛäÒÉó&í/Õ^Pþþ°|áCÏ¡C²…‚r¤ÌãfÏÕó/ôSC™V•R)]¸ñÃyj¥x9úÝ7^[gY&-LÍ;?À"qaºë¿<%F" íNxmu:[lûCè‡C÷Ú~¶×æëÄ#צ[5•ä íåß“xD{)î°ôŸÔÊkk=âKÄSQ¤áâu~X<¥,pW®+RŽ —¢Šßyn l3,cÄ3ËH“ÉÏ|²ÇÈÿ{?ŸŸô¬î@Ã}¹· @\Õè¢DÇ0›Wž™¾Üzgxôyr¹pQù~uø|xŸµAÜ;ÞCOòÛaýypžÝgÁ¹6ÿ–^]¡Œt˜',I Ìq~[Y¬ý»)J5Ê~éLèž)ÿ²H\œ¦çÈwÊ2ÿl¿lÇ÷šÄB¼^ æ)Û¿n¾ä)ý¿ yÙúíxO=Wˈ‰¾rªy¸Ýl‹T›T³ mœqºUÔ„ #_½ðž¨n¨ê©ºÇ:ÆÌÍm´Íc£´Ûw»\"&™»^­cL}ƒvk?7ô7æ¶Ñ×[ÕE98±ËC]îQâEÝGÍY# @;Z³Q÷!×"|’½ç&y_DôEä~ékÿ,©zÖz«7]WYÊ8V¿ð^[Ä÷±¢2*åê‚pÇO|³\ªÍÊ÷Ú6ùm¿l—ê˜"»ïþpAw¹tÞ{ûÌòq!›#¥×Ã×¥W‹Wš:<‚sä÷ßÐ.™è?.C3qÁŒ•Âf¯ÍR~ÝãïîßSv¼ºqÊ×ïÃEª<Ïjò^v¢gŸ¤#⹿ï¿C®¼ñý¶7±ÍB”Xë:Æ ß+ý{(v5hÚRa¹–\š/š'É“? «‹@ÿl¹Æy‰°Ä*ÚtÖp»‘Ãꢤ+÷.Ð&ÝÛãÞ.…’›CCùzÆ ë|—e¥û¤¯ÿ(D”Óƒ9É¿Ÿ"¥ŒpD°ýÆuƒsyÊQñb}¢àêV·••æùÜ)½œ+ÿ«î9¯4d´$±L<ë¿CªŒçiãM|¶Û”î–Þ½y¤È/ëÿä¯#öµŠ6r{rÌã=U½U÷‹I¦qBüÄÅj]uO·uÖU\Ê5PÞå¬)ÑÜïÆé] ÚŒÇG=ñhxøÕívqŠ-’~òÙjýQÂñìí>Gì¾ý³í­u§ª†Í?3 Ÿæ´È";$W~_™¶u»8K¯–.Ë)Áïë|¯˜dW,ž Ú-Ÿ¹RÜ®Œ4ì”Þš¶LX5m‰Õ®[MO»Ýû¨üg§.Ð, @ @€61åj°fð3zì1UoÕƒÊcRŠY䟂2 )©\¸Ø"ân(ç¤UþöÃ[.h/Ï:αJ~Ñâ•Ankå½JŒ\ŸÓçŽ> ˜¶D»LYo½ ´ÞÅå}Ô]Œø¸œj3ù ó- G´RŽŠ—bJ?¸,×nr[+ä¤V‰>.KÜaé«(§EšeÊ…w7â"}<}©°Ìi¡v£žæ~€Zw|èªÕ3Vhv&— ”ƒüRŽJ¿†æk¿%šFd¡ô¥&ÖhIÀNùízv»åHË嘃â÷>[µïê<§Û‡{hÕù”Ž6Î$*`§ôöÍ»8%WH¿*ú +¾X:)%OÜ¡L¿ºíN_eâùˆùDüañdj¥öŠòõôeÖÛí^·˜ï´Èz¥×›ÏMr¾E„±“º¯ú>Öy@€­Z÷'èî¾N<W,ýÜ^~·Q…â÷éUÒå[r(\ôÉ´üWd¡ôí7<­œ³âµY8ê·C®Œ> }¹_úÊw»\f›n¾€{hõ,"LdåƒìÝ,tFÓ‹-–~‰-’~VÖá(Û+Aruëá*áŠç&M•þŒÑÏs?@€­Þ¨É£ž È–þu@:_*¾º…n݇ݺ¯¿ñÍÒ|}P{šh9Ê´7×5Ú]N Íò}¶YüÛ,Ôp±ÝlÓœéKM÷hbÇ¿1hâ g”Óè¹— @€¶³è¼î¬²ð\‰‘ñc U:*ݰ½Â‰ô¦cµø‘Ãâ©á¶¯˜‡ˆ_ßx=”0QÎõàþ€Ú~èª;‡í‘>%Zž²@”²¤Z™j%œ2_“î¾VΔS-‚»öëÚ™ûhóT=U÷xo+€Ö#±L<;Üfë< @€öåYã—úº®w±ånk í)Édá€qOöæ>€Úæô©£†Ù¦YFL[,,œ±BX3}©°$8G~Ÿü­Ì1©Ö‡ð®¡—™JG¥âÞ€Ú$›TËtš·âõÇ®n¿û³²C™ið„)ܳ @Û^lÞGÝ5p§üö['¿,Íuר»ZWÝÓÍ @€vÁÐk‚qr…tžü­ï6í;ê¾j¦\@€íË´¥Ú|àomÓ¯ÄZM¬©÷'Ðî<1f@ïˆ}ò—|ðo=‚s„OÇL3€ûh—,#M]Ò«¤Ë|øo£VÑFQÜ— @û]ÞWÝyÖz±€hy>[Åjµ®ZÍ} ´k/k†?sHþžhÉ…çRyÏ¿=ø ÷#Ð! 澜‚Þ2R+Å˼ ¹ @€CÕ[ÕÅs³TD4¿ðé‹®v½—ûèPF8ŒW,ýL4÷ÎWÒ{Ü @‡d“fž^#ÍÈ?[®äÞ€:$uuïL±\ù`œxD:wX<•q¬îƒò1B¡é ËG¸÷ @€ë%«ÿæ»Mxs‚ÏøñÝŸzàaËÈIn¶i–áÞ™r¡¶\“X&!Or¹xn̴ѯrï@€¸³‰¢MªEŒ×áHr…p)ƒÑ‘»æ)•=¥?¨/÷€Ûf3¬¯Û(kÏMÂáÀÝÒ»„È݉,~š±BXoÿºU¬&ÖÔkRÐq´Ó¨‘½>t?÷€¨tT=#÷K_w&­J¸œcyÒc£ÅñèÒ·ÊcÊfu×ÖEÉFî17"¼lžP*œ#&îœ2‚”V-Ôúe ﻯ³ªš¹JÈL*Ϲ¯—vq@€¸‰&nRHüañ$1q‡S°ökŽØ'žðß¡ùÌaŽiŽª§ê‹c§ÑÎ#p@€¸…AŸëo—a¶2½Z¼BT4tD¬M*Ï)[{l’öq?@€¨‡ã ›ºÀlo|‰xаø=em‡¿_"]VW„ä _ygÚMž§™3eõ•Žª÷€›£÷TÝcä3Îr¢ßØ`¯ÍV×qŒØ/ÿ{ÆJ튩 &ùX„šYG›:;-æym– BòäãKÅÓû„5±Æ±r²ypÝ÷ædKWÖ…$•‹¿¸êæþ€p /Y¿ø¼Y踹ÎKÌJ:z|$”Ê''Ï×,ìõÌ#Ýo÷~©uÕÕ}Ô×yèÆÇ{=óÐýVQÆÓ'x˜p_@€ønú/LðÑ÷ôÏ–Þê¸'œKçL&Xp?@€hê©X:ªÆLÍdæJ‹ª¹ ¼F¬uœc•½ °:Ã;SûfzMÇÚËs“X¤î«îÂ= ©uÕª© -v¥WK—;J|ÄK¿¼¬y¹×@ ˆmše´ëjíNeZRGY¤\®=€æ^ÒKu¯±¿A°ë냣¦ õK*Ïw„3>L 5\ͬÇȆƒŸ³Œ4Üà0×4?¡T{¡½Hèécµ®ZÍõ€Ð^¶zé/“ߘTè0Çø€r¨ž2BrTúµ½ˆÓbí®;€ò´þ€4qV*£±EÂieˆw¦õéíp=ˆòo34¸î ZÈíàÑSš–FTF@Þ[4oÎZoõ÷ôêkrý϶.©\¼ÐëG¹î Zˆ‘¯¡&ñˆpîúˆGl‘xr¸ýÑ~ŽIžy¸áÒ€Ýò>Y¶¥¶ƒiYáÒç]ûu½—ë võšuŒ‰ÓôeÚ¥ýljã=ô-åT³„À]Vß¹otxËm£ã›©•B›?¨Ðw›TÂõ€ЊŒš2z¨ÛZ«òW„ÁƒG:Ž‘ üç¥8-w9äµÕ©&£Ÿ–>c…¸–k  •ï1~ô´%Â|m¼¹·iÈD‡çMFtß"½±Îq‘ovÀ.»ãm9@¦.Ô¼Áu€Ð ¨tTÝmRÍC’+¤ó³ÿ»=­J¸âŸ=í˜IôÂT=¿Ìp· S«Òk¤Ëm5@^·JâZ@€h†Û/¥X„H)Æ[œ[ôÎ$”Šg”îJˆ„ïsüÄ/Ûé­Ôª¶ u~ó¿ûoc꓇¾¤7ýµ×\W‹™.Ë­ólÓ,£_† TjäހР=Çj’Ê…«'¡§U µþ;ä·^‡‰¾YÎÇ¢ í¿Œ>dû]]œ ÛçðYF=#DN´rêBÍ\ç%ÚÅÚ8SŸº³’+O9*^J«.ß´eï¯A»¥wÜ×Ù亮‘69-2Ï6pm̽ ˜‡ùFÔœU¦_]ÿ}@úvÖÆYÇæNŒ\’ì¼bæÇ…^»Ûê¹ Ç~û÷´?ùw¤UI—c‰?;/¶Ú1Â~ø Ýúwë̽ ùN0öÚ, É“?¸~(¡ò!<¹B¼`‘°8Mž›²Øq‘G^H¾ø]{;!ý6‡þê³Uó¾ZWÝOÝWÝ…{@°Ž1šç³Õúc¿,¹Ò~¶Õ|ƒÀ•qúe^ ÷M®‡c_[Ò^%—Kgý²´ï›‡OUé¨TÜ š˜úu7åÏý‡ô垠ćž_±Ï¬ÍÓŽº®ŸZÙ^ã#±L<ï¼Øj½ºº+÷€f¤ìõèKÏ=?Ê=3L ƒ aA¹öŸ¤TŠ—ÛSt\[ "Ô†äIZE™LWëªYç ¹ 7àIC/ý8͓ߜ¹Î«`újïüÈBñçÖu¯ñû[~ï†èñ¥âéÈ}Ò—Þ[¤ƒv³-âGM:ôñ×tàº@€h‰)X}ÕGNî%$LÌŠ-’ ÉŸüôºæõmz[u€ì¾w^bQZ%^R¾Ž+ÿ±OøÑq®Ù¦YëÅÜÉó­çÖ ~¢îßÈú­$@ºØeLÊòÞbqÂ7ËþÌGÜ7:õ϶û(ú í·7ngÛê¦TÕˆµÚøIÞf!FS\– +mÓÌ3”ó;þ:â±î\[­8)#4_û]ÀN«.kœËÜ6:WÚ¾áµÓ}ÓÔš \áÛä í•Öá{¥Ïå³à!Ú!r @´…Ñ]µÊe¹ÅѸÃÂe4!µR¨M<¢½˜Pª½à·ÓéÑ4çÒ[áIè¾[…cOŒ~¬'×@ÒëGvZ}œ«9ºGø&¶Øæ§¸béTH¾|"¶H<•P*žkmñ¡ìb5ÞSß–ë  ®ÿ°M3Ù”#Î?J(•O_Û9J:ã»Ãþƒ¨B볩••ִæÃþu‹¹]íÊ¢rmÑ‹ƒûÊ)¦Kƒs5ߥU WÂ÷IßE’~J.M«[M|¤W‹µ^[´5jÝk'@äø†ÕâˆýÂ!¹V?‡Hß^ßÒ¶%ėȧnqI«®¤/ùïßQ÷UßÇ5€Іiã'ÎÍ·þ%®H<5ûêIá-4êQ÷ܶó3ý²lÞS¾VNaO9*·Ÿm¶rÔ”WǨû¨»r½ @´õu ºên“ç™gçXýœ+wX>Ùâ™éT3m•ÇÞ˜CÂ)Ç7̶›‡O“Lë^_g®€vdÌôW\–YH­®Dì“¿iŽàH*“Ïøg;¿é“åR5s½O¾Ã¸ÕÓVzîng,¿" ß­7Â@{ÔcdNƒ& {És‹íûÇ®ûÑÔ' Gì·ýj\ðª8ý€2¯õj;‚k ½GHÿ!ýlO®Î) ¿C÷Ø|•чF:|î¾ÑsÿŒ5¾¹zþ%Þ€ ñ ‹w;|±ßöDè^Û/Ý7M/,´iÔ)YA¹NÿtXä›}sx  :X€…ÎKK®.ÙÍ÷Ú)ÎöÝæ¾Éñï¾YŽï¥7âÎXÊÔ.Ÿíöÿš±6Ž€Ðd”ûÖÐÉK‚¶ÙÏ÷ÉØeû©ßN›Ïâ‹gÒª¤F9Äo§ã{Î+]Š&ÅÌy]?à#  ¼ @Ǽ% ¦­šy0þ°pNYÞØ‹Ñ•Íå¹ñ+™‚x$@‰€)KüwçÙ}–rT¼Ü˜S¯JÅó9vŸZ&-N#@o@€\ =¿"¿lÛc‹µç¯oËÛÛîžðÛ!.ÎŽ¹íè ˆ2 Ë$zu¼ÛÆiå %Ú_ïzÚUX”£ýV›±flàî rC€\cº1*líWw‘…v_¹®ŸVæ²Ú'W/à ïÅ È„°ÍQ©•Â]mÁë—mwÜRêþŒ>(ž4ŽœŸN€ÀÈ­úMŠÉ˜;mÕôâØbñŒ²uoH¾Í—Î+¼òÆø €ЈRæ¥çÈWȈ\sH8;e©[AÔíi·37ô÷  úñ/õ6Þf•œ°D›¿TÏooM €€@€ €@€B€€!@€„ B€ @  @„  @€ @@€ @€„  @€ @ @  @ €@€   @€ @@€ @ Yè>?¨—Î@ƒ':uêÔ™€&å²\Ø`7/0³Ï £ @4)ç%ÚfÑ1Ky~Ò³ @4)µ®ú¡N:u¯s/,B'@ @  @ €@€ €@€B€@€ @@€ @€!@€„@€ €@€B€ @ €@€ €@€B€×B€ @ „  @€ @ @  @ €@€  ¼ B€ @  @ €@€B€ @ €@€ €@€B€€!@€„ B€ @ „  @€ @@€ @  @ €@€ €@€ @  @ €@€   @€ @@€ @€!@ @  @ €@€ €@€B€@€ @@€ @€!@€€f¤î£î¢ÒQuWëª;×Q×ýýU/Õƒuî%@ QÙ¤ZDÆ–NçÊïûlÿu@ú&¼@úwDü…ó«,óЉ¶uaÒ€»æµE:8ûM©öVË´Ò«Å+‘…Ò ë(ÓT —ê¾+¥œÄréÌíäF©Uâ%§eþÙzþ‡½ @€hƒY“4iÕbm}âã:åç]V»ElŠ&@ ÞÄ$sߌš†ˆ"¹\>’oó娀 êEÙýÊk³xD™ZÕÐI«®˜Æ-O"@ þë@tT÷ym‘44@v bW €Ð ¦!FiUâe%*’ÊÅó Gija{¤OgûãñËv©"@ AºöëÚÙc£x ¹B¸ê^/[’Z%üa€Ä•È''F®H @ ¡ëAºM š`=ÞsÜKÊ×/Z î;s•°)æüýEHl‘Í÷ÓVf €pׯLí9·µÚ=!ÞÛf– €Ð(†ÉCúEì“?¿ÍÈFkc @€h4Sjçÿþ<é¬í<¯¶oonÎÓÑ íÜ8w½aq‡¥_þäÃî;û…>ÙŽ‹fåyfN~Ëa¡G®ý‚ø•fq+’@€¸krªE´ÊÁ…ÓW»²09©LüUy,ý¿'ªÇÿ3Ú7/pRÌꃠíazþÅ> @4Ø‹–/êìßÝ+}ã·Óñ½i+§Ç—Èÿ¹qZ–OÖŒ Ÿí3*Òª…«gŠ„8~â²&0{l`n õv_ÏÇzBßiú¬Í¶ïÔ…Ç©øRÍE%4®Ž€T‹µÑ‡l¾Ó¤…­>$ýtóz‘„ºPñÌt©°Jž3WÏïîFEá:uºÇe…˜™ñßÒÓªÅËÁyòWþ;m?ñÙnÿ¯é«gíO«®dÜæõŒñJ]°\™¹Þ»€€?¥‰är}½ÇÿÔGXí—uAråÎ ¹Îw‡ý‡ãC6Dëd‡:,Œ^;>dG¿£ÒQ=p«ÓÑ3މµõ‰Åô•³öùí´=žrT¼¤ÄKÂù´g¦ÇA§å¡['F®‰³y#iéÔeá›Å®X@€@€è  =ƽjm”Öà¸9T¢ˆ?ßîûiUâå§pÅÙ~g7?n•ž‰7 é8òÉÐ|éã˜CâOww*£F¬õËv©2‰ÞC€@€è ¦Ì·žÓœáq³ÈB‡/Œ"¶D  :RNKȵ)Y6?Zû)[rqM @´Sê>êî±ÅÒ/- WOb¯/zo;̱Jš2O“f3i†ZWݙ렽È#jU@¶ôÖ 7K¯’.›‡;p @´#¦!F5bmkŒ×5Ò®€ö4 ¢«¾/(Gü 5HØ^ée”†ë ý¬é2Ág¬{ÊQñrk ” ñâ‹Ïä:@€h'¤$sÿôêÖ9K9àÐ2ÒØë ðÝ&—´Æø¸º½F¬5 š å:@€h'Ü×K»Zk€¤TˆFØë ç6æåˆ}ò­1@‚sär€vf‚÷8³Ö¶DYÿa7Û*–ë é8úqǹækS+…Ú«çk ñ!Õzm‹Ô}Ù‚@»Ò뙇a?ôe#Ÿq†&vÚx3Oû×ÍÖ¶äá„þ;¤¿«û¨ïçú@€è ÓÅÜ;|pøùËÖ/ý•ë Pé¨î‹: }ÓÜá‘Z%^šºÐrÛ@Ãgt¸ :ˆ†Ï>•T.þÚìÓ®²¥·Ô}Ôݸ :AƃŸO­š}Ç+!Á2ˆ÷@G›‚Õ[¥›T&žoÎ /˜üÉ_†Š£xÿ @t¼5 Ý㊥“Íû¾H(ÏšÇ/Oê?Ôvï?€¦ÇÈwIï6Ë´«Œ¨ÕÆÑkãôʼÐØ™cÇ$WHM¾=î°|r´Ï~?%>ÔäùšyÍ1ý*¡T:3Æo¯? óË’+›%@ŽÈ§Gû2 £®ý5åÕ1±ÅÒOÍ ±Å¶ßéùù  : #Cóä ábsm½›T.ží³Í`íÐ'}·IåÍyöGzµXk³*€И›˜Ä’hÎøP¤V‰—Â7F  :UOU÷ubNsÇÇÕC÷;|¡ç_êM€@€è ìçX%¦×ˆWZ"@¼·»•^@à¿C®j‰øPxmõ’ʤ³–‰ Óo€D¥£êœ#¿ß”k?|²\Ëo€ffaâ1pü3:ªžª{zŒìñ¿5uqЫÎ#uÔMõÜvé–±M9õêêÙ›| @€-¿ö¢ó”ùÖËH§£Jß…æKî”Þa7|ˆÏV±2éˆx>¹B¸ì´ÈzU]ŠÜÛ¨ÏÝWÝYgæ_"ÿÒTá‘rTúÕ}“g¡qÔæ( @ s˜c‘^óûCÝÖXUßø¸²>Ãñ «yõ¼O ;u‘fMS@˜\!^˜}LÙõJª±Ö?烀Ќœi–ßfËÚ[,äÏû·jŒçõÜ,)‘ÐXѰËémûùQkí„n²™›°Üv^ÂJmÆìù#3# @€­„ïv¹¢a£ ÒùiK4k”ÓËïô9µqfî©•âÅ»?×£.ŠÊå33×ùæ›Doˆ©Oh €7hÊÿ‚uêt_®7?®,45e„~b™t¶¡ü•éX~Yr¥ãë”ñc òzT½U÷î¾»ÓΕçΛò¾8;m‘8;v…žßž€»‰@ãH×:¿Y<>ÚéÕç½¶HÅ)ÊZ‰»^o!Ÿ2_³H¥£º¯>¯ç‘—{"õ¨pùnžÏaaÌZ=ÿRï»@3ðÎËsÑ·²^$ttÜ&Õ"¸.DºÿÑs[E›ºeÜáÚà|ÇMbVÇ7fx  š˜ÏV©¸)¶¼UB$öô“hæ~»çv]-f6ô÷¦VJwOþ—~@NPSÄ  í–ÞnÊCÿf¬¶ßêy•3GBó¤úû" åïÆøômªø @ @4!×Õ⎦ŠÈBéë-_ìËé£îQ ÖÐßé±eVQSÆ é¥w Ø)½ÓT2e¾UÆížû£g$•‹çú;]×ûì!@´Aªžª{4±&QÇ?>bIß¿ê8ü™[=¯y¨±}hžtüN~¯O–k  šºÀzIR¹x®)F?|¶ w_/ïpZ¨k`hiä3ÞÐ4ØÈÎ6Ý|޲}îþÞÀç·õŽ €ÚÝçé[,ýÒ” Ðo<,0½Z¬M«¼ó3?þ »§þSϯ؇ÐF¨Q«Ü× ûfkúøhlž™‡˜‚  ±Ž6qQF%ÚZ|$•ÉgÌâ–& €Ú+„ m->bÙ0]™ÔÔñA€@€hD*U÷˜CâOm)>”Eëæ‰KS›#> =U÷„í‘>nõáqÃú·Þûš+> ½T÷6ááƒwŠºü]d¡Ý×q‡ÅÿG¯#@´AN‹4K3ÚÀôÀç·ôü¶†O[9« ©Ïý @ @4ÝçþòPHžüQkÔJñ’eRú<×uÓÊ ‚ó›3>d¢Ÿ¡¦µo¿›R!ýªI˘o™”´È:eÁìæŽ@#é?ü¯Ý# ¥¯[s€ìžúŽY|ʃ ¼ –ˆ@#òÚ,hÍâ»cF•ž©wKÅ ‰‰æÇš'&¢jÎ6äçÓ«ÅZó„Åi-€F4ÂnÄð”£âåf8<ð\ÔíòŸ É“>éž@€h'T½Tj¯-bY“o£»Sû±2¢QߟØ'}ñªÝkæ£Üó@€íIàNéͦ|᫺¹RŸŸ: }3Üvð_{ôÒÐŽ¼"¾òXôéD“ïf•-þsò<«¥)•ÚÚÔ*áöë>jÄZ)ÙmÎøPFAÌB m @€kôC-&šF¥•Î7÷ˆÏ6ñè¤@#+ @áø†uJCÎåhü]±¤c @€Âe…¸º¥âCá²\»‘ÐA¸­•¶¶T|D쓾|fÂÓ½@€Ä´¥Â²–ˆÄ#Òé ^£Y„ ™8APNoÎøH©/:/¶^[ß×H€h'õä“1‡Ä›zËÝäráBX¾øñÌUVËMƒ‡½ÔcdN @€äóžŽ)i¬ÐPFR昭òÞ"øl•º¯“¶O]`anlÿèà'ûwí×µó¼N @;ðªãˆ‘iÕB£Žv8-ªÿÔ* @â±A[ÒØÓ­\Wkw €ðêGÔª\éÃÆŒeÇÀ Ÿ$@à7†h‡<[$5êâóä£Ò¯Æ~& €ð&A´wºý®r†‡œjë·]ªH®Ï_ßé*¼@úÂÈÇ` ¿aà¦7æN '”ŠgŒ{ì/ÊVºú3õ‡Û¦Y„™Ù©û¨»5Åk%@´qzÓ_{íNDí03›ëµ €Ú¸'Ç<õtÂñì÷Q-ÖNô3pPõVuëªgÐkàC÷ €p[³6ˆ{ïfÁyR™pÑ6Ý8'¶H8%'› €p[¾ÛäÒ» ·5ÖÅCÄ—Çç [FŒ7&@à¶ädó`e7«; àáCw½qÊBtÖ€ÀzÁüù§ã‹§î$>"öÉ_ 0x¢7‹Ð ^ÔºjuHžôɈ×fiOs¾V @Û‡£ µ¿dkøa„>Ûäà @4$@ºë<ßw¸çfíцB(Ÿ²Œ0±$@ ÞÌÃ&:zmÖ¼Sßåì€l©Æi‘ÅŽºxéL€@ƒŒ°nR!\ø³øÉ•?œà=ÖXÝGÝ¥%^' S騺…ä ÿþ³øˆ/‘N¸Ö’¯•ÐÆ š8¨OH¾ôéŸÈÌU†–~­ @€¶¾½ZºG:þgâ½U*QëªUàŽMô06î°ôÓŸˆ²HÝuµ°K™²E€  îˆ0)"ãXý¶ÞU~.¢@þÂ/K®ÍÝ@€¨·QSG‹-úóÑ[q]#l!@ ÞœkVÜI|ÄÔœ³Œ4ò$@ ÞôgŒž˜V-6(>”µ þ;¤½é¯>A€@½ÍZ/jÐÈG‘ôƒ]†eŒJGu‹Ð¹ @Ô›yØ$‡Ø"ù‡úÆGôAé„Yˆá¸–|Í @€6ÈØßP_"ŸjÈè‡]ºELK¿n @£ê­ê¶çÏO>¿q͇²ý®yøÄÉ ÁwÉÿ¨O|$”Z_Ú¥ùwØñó¿<Þ›!@ @4˜Ó"ëåõ Èýò¿MC&8«uÕµ†×M€hƒ†JC_Ø)¾ï)Ψ¹õ6¼iU•q³ôÇ·¦×M€h«kAtTª—­^~6å¨pé–[îÒœV÷Q?L€  Å»ÃS«„+·\|^#Öš‡; €Faì7Þ$¾D:ùû¯¤ÚðÍ/rªYB€@€h4¦ÁFÞ[löß(8G~/¹B¸[$ý2tÊ:ç,“œ¢ï‹/p@€hç8ˆ @€ @@€ @€!@€  @€ @@€ @@Ëû?YüÜw2=²IEND®B`‚calamares-3.2.20/src/modules/locale/images/orig/timezone_-3.5.png000066400000000000000000000013441362604102500244340ustar00rootroot00000000000000‰PNG  IHDR ™Fô¥ÎsBITÛáOà pHYs¢¢EÝ1¢tEXtSoftwarewww.inkscape.org›î<lPLTEÿÿÿ€U@3+Uo™Dd›F`ŸEb£Av²Ht²Hu³Jx·JzºL}»Lz¸J~»M}¼L‚ÂN€ÀN€ÀO~¾L„ÄQÁO†ÇQ†ÈQ†ÇQ‡ÉR†ÇQ‰ÊS‹ÌT‹ÍUŒÎUÝ”º˜!tRNS !%'cgkŠ”—Ÿ¦§³·»Ïßãèìîðñ÷ ßA½IDATxÚíÕ7ÂEAƒÁ䜣Á{ÿ;‚¡A`Ó#fší¿ô´IÀ?èΖwó–%àCsxŒRžÙÞõV×TJG§@¥þº@õûŸ#•›"5:K€@@ ~$Ë¡Ô2íìŸæyiÒØ>n¾¼he¥4igO€/nÎuš).%¨IEND®B`‚calamares-3.2.20/src/modules/locale/images/orig/timezone_-4.0.png000066400000000000000000000353541362604102500244400ustar00rootroot00000000000000‰PNG  IHDR ™q*UüsBIT|dˆ pHYs¢¢EÝ1¢tEXtSoftwarewww.inkscape.org›î<:iIDATxÚíÝT”g¢ðñI\Æ’Ä ADc½ƒô:ó¾JGŠ´i E)R¤ª±×¨±·X[ì½k¶Ü½ß–»»Ù›½ÙžÝd7eS”o^bì2Ç¿çüŽaï“9'ÿó4YKK‹ À“gçççUp>ÿ‡4!ycL&ëÆx€'…‡  @„€  @@€  @ @€ €ž='Ä9ޝ‰3HqÏ?ª•‚À-ï-ÍÄÔÍécOýY5íbÀØHÛA.)S¹¤fÛyç œ8ÕÍÚ)Ñ¥ÿè°áö…QVãUÎC|5Y @<6óa¾æ_´èm³»}Ž#ŽSVæ8¥ïœá®>¦õМÔ €`œ7¨LÖ¹½—ƒ!Tzõ<¼ÿ˜ˆÑC'OyØåYšçÌ=…’7xêNßúZ·ÜCúqñ«‹@€¸£î–£-{åDzêΨï’ÖkÇŠ sF„×$ š™fç“0pb\ú‹}‡Ùÿ¨K÷îvÞy“¦í(0ÄŒwÿÑá.†‘ól uä9ó¡ÞÖC|µaS·èZg?<µ§ÕRtbBgˆ •¥£r\מVæÒŒ†A§¯¿¶õ5n½NëkÚù¨£ÆŠ‹t}†¸þùx΀žÍØèdð¼Äíý ÂGÇ4e¸d½QÐ:Óá·,gˆ¯&t€CŒã€±Qclܦù =È%Eh ûì9=Ø ZÃçwå¹xô²™Ô½ß¨¡¢ÇZ-â¨èÆü±ªÅ9c”ó23÷èo_f%Í~ظ¥‡Kr{¸ ö˜.ZŽâú{¯‘fHì|òµ=:˜3€ž}콆[:ÆdÙ–ŽŒœ3íåà2ÑÞ¿ ÔjBl°!BîºÉÜ9k¯¾ß¨Ðqw‰‹.Æ„ô´oÙºë{Kº†ù:2€ž!ýF÷ëmç6P:éJ"͆Øy玛ºê;—Nš¶]³Ð-ï°NúóÈȺŒû-µ’ŽöíÒc@ß;<Ã{>úí»$¯50¤cr2véGFÌIì•“Ü¥§•Uç—úõì;"hذÀbÕ?]twË1/ñüàYW­˜—éš{Pßö(Ý!>jñ { iŸGïÁ®={Û¹9·=Á €ðÐì¼óüZÃÃ5{¿~Dxuö çd¯ÛoFï9h‚t[zgž @¬¿ ~ÞpIøB Ž;©:-þÓ9yÂ0ž @<´1QcjÎ ŸÞ-8î$o“pŒ›Ðà¡E”g—Þm¾þàÒpUy#jVHÏ šåY·ô•Š5ÒÌFÝEáóúKÊ/fþØtU¸y·);*þŸÝ$«^Åî!EoŠ¿Y˺òìàÑÞh=e=“–†˜s^õñfBZOÈjý8qaÌ©\úØ{öï3Äc°tY!À{9rÈ ä%ŠeeGÅ?5]ÿê(^íîäÿš±/ñÉ«fìÈx-ãdÍ9Õ¿ þUhYÍk§ÄÉãש]³÷ŒQÎÏÝ”nï§¶õÈô6êÝŸg ÷¿á}ƒ üc¦4Ç®ž¾)çxhÕüyžú³êòõUÁ•ë«¥½ Îçߋ㔕¹##ë¦Ù¸M ‘¿Ð§³#€pïMêÞy~÷ ûqÍ9¨+.ÒÙºg†Y;'ºB¤Ï Œ ߉‘ìýýÇDŒåÙ€ÑdŒr~ñ‹}‡ZólÀè"9gºùPo[™LöÏ Œ 笽:{}š!BºðœÀ¨"—°¦ÈÚ)1É|¨ Ï Œ úsùqË4/—é,†ùEð¬À¨3 S6Øùäk-• 죈Ä)}§fDxµÎÚ)чç €1j€¸åÖ9Ä-ÓpˆV1 €1j€´6»tà„¸à.=­:óÜ Få¡=¥±uÏHìÚËš@€?@FE5¤ ñÕ(d2™Ï bžÚÓê—Cʵƒ\S•ÃKf¾Ôox?ž= @$ßXw‚LJۦ䒢µžŸÖ¥{kž= @Äh\¦ïÓZÓ,é2™¬“AçÞvn=@€H»sWÓ öœž×¥ûëîF 5ÈúŽ 1ü.g íj\üêÆF¥X¼ì?üëç­&ĆþY”áã.Œ @¤Ý8NY¡~©ÿ«Ö>C<ìGÇ4[OŠŸf㞦ád,@€H»Ÿ¸N7Vµxúˆ°ª8‡Ø%j‡¸åšá5Óº[Žö$@ F31e³Îj¼J1!yc!B Òñ@€!>6© Ñ1uŒr~–Cì’¼Ñ1ÍE @€g!@¼rÞd|¸æÔ‚#½§õø>†èxîë é/H3€LØÄİ©ÎY¯<Éqœ²¢P ·iY'NM°uOêeëdÅx0q¯*èvO»æ¡;¡yRâ»Tó‚¹]_ÙW¿ºrIñ1GZ‚Õ•1`¦.Tl®9+~¿´bý“ ‘QõyÝúØŽ”î¹õæ7üê;|òËÒÅ„Œ @朦œéž¿y–»þ þ‰Å›°Vmãšj=)ÞÙ|˜ï°Ö @7啈×ë/*Zfý‹¢aÁü'¹dˆ¯&× A¶î~öþÉ܆ÀÄ9Ä%æGÕ.j¯^ÞR±qö“>Ž×=ÿ¨Vú]º „cx˜¸Ñ1IY?Ä%„w8kÀÄù©ãÊ"ª–4¹ål(}9¸,Á1ny§ôCüt:–`0q©+"÷ëvǾÛ¤\#ý¹‡•C?CèžT|xêϪ‡Íœi=)>‡S°˜¸ŒµŠý —…/5;•×eýd/øªý&ÖÌ ¯ZÒ ljZlôÑžVÛ¸¦ft·!݈Θ0ñ™û¶ØÒ|Mh™yH|¯ò”⣒ƒâŸfÞO[“u4vqÙzíI£]R8,hfV/[gçžÖã}˜ðŒÈ횯¥æŒâ³Ð²äµ¶î¾c”óÓÛ3><´§4–1SzX9Ø€žá‘4]ZÔ;U¿ñ×§JŸkñ²ÿPOõ–™í λ {šà×ÛÎݽ·ÛD–`x†DÚRw^üz›pÞÞçåÁ¡Å1Õ¼¢©ËSŽ rNòZ‘ m"œýƒ=§§pˆqàíd3Æ €‰HãUeKÝEñ3iHÓ5ñ†v‡xvƪÿ’–`I!Òx]¼YsVü¸þ¢ðeíyñ³ŒÕÂVék»ö²î3)ukáãÌ‚¸fï×Úûé2zZw7ÈsŒ @–²"òMõŽ)¿Œª«YV°7õ§»UoBàùÞCeÝ+‹ïK˰ÚΊԞ>ÍÞ(^?qŒ•³¨pË?¤{ÌMèI}†¸}©ÿw–`0õ5Šš©WŠ_Ÿé?sw‰_^vC'ón}Bôn‘šâoë.ŠÿùfIÖáËÒÊD×W¯pÍÞ4ËCóø§cÙûé²_ì÷²[ïÁ.C@€&.´ThÌÞ¢y+ªneýWû2N©'•¾’´"õhÍYÕ‡­ñ1ç¼ò³[›ÒwLýAekjÚk#º»ú˜ÖÖ#3ù¥~Ã=˜`âbæ„mÉÚ˜wÄ»øÍmà vAåš²#еîÉÛ’|=íUí~¥¯Íö+ÙPÙžÇñŽŒª/´vJˆ3cÀ”%/Ú/EÆÔ%;ÚFwá[ë²NTW|$HÉÁ„ßxêN«r!¡þ\þø„µzCteL˜x€H!r0ke­‡þ”¦m„øÏØZ–»}úiõδ+ƺ ]2!yc!@º1&€ž¹uÂÕyñ“ìY§–êv{ÍØYúÍ}ú³j‚£: Ú-@$Òr¬Š£âñKsß4fp €¯#DhI[¥Þ÷8·œ €ð@"©¿"~¿$¯wáþ @´‹„…áûê. Ÿ~/@. 7õ{T¿W6m$@ ]xdMÓ(çÖ/+}kÊ® 7[¤éºÐ’±~Ú¹„ÅÚ=F;~—ðl‰¬RÍœ³p®×Œ}…ik²ŽVR}ØxUyk$m­ú€gÁi53 €Ð.2Ö*öϹ ~–²¢d»4Óá©Û_ ÌkX–¿-åmanùÚ'µð È\§ÜwkÉÕ5á¦vÏ´«^3Nh¥ ­ZS;eIÑV¡¹aíbê+²#SÿÐxEySÚ÷qkÙÕ×{>Ü5G´º ÚE/['ó‰Éµ5+ês¶äÍÝš~ÞCXR¾¹2¤bãlî€veï¯k iχ‡ö°.~Yáö¬¹‡Ù„íjs²ëíA0¹lû¬ä•»Ø„F'@€ €ðd$¨ricxÍò Úµs’«[î!½kîA½kŽä€ÞeúÞú=Sþ'rNíR¯‚s @´—ŒzÉ|¨·]{OÛ>vî6½»X÷4và”æ°UU§•Ÿú­¨%@À¨Tõáå³O ÿÈÞ<í¢§þŒš£‘÷—?_¸Wüùœ â'É+4o9@ô @€gX@¾wRÞ–˜ŸUW|T¼_øËä™ëª˜ãÍ‚XȻƿº¯æŒðïÜ­ç=õƹÙØ¨±V3Þ~U}Fõ¯ÊSâ‡q Ê^#@À(bf‡èš® 7ç¾-¶”‹ýÛŒ}ñ¿õ™±mí®³eççã_‰\Ü|Mh‘"ÄðûÍ’ƒSßñÐÐ €Ðî^°îÚ¿þ’pC †ËÂÂ7âí_º­Œ€vYœØôõ H«Êª«—6 €Ðn¤»@ÔÛ„‹­áQQølæaÅ™’¯„U,m @ Ý˜™›uÑlWü´íìGÍYá“ðêºÅ^ºÍ³@€h¿éeö\Æ«Š]µçÅ[¤éšp³øÀÔwBgÏ›ï©Û_@€@û-Ãê+ïR¼Où»¶³ ·öW½¯l®Y1yÖæ  v¿G§»ýÝd¿oÕiñ·GHÃeñóØåë¼ôgÕ @<È ‡™™¹™|JsÈV×D×—ïô9b]xñœ ß.Ãú6@„/³6¤\VïH¹U×¼ ¨|]5wåšè4:smäå¼-1W«O‹ÆÏ‹šë™îîâ›íí-‘[È»änߺ=>n]Lx]¸¥æŒâ³º Âg³OÅý=qy٦躙ëfÿ¦hš½º`ï´·. _´™i™¾qÚyésò·gžó+ÞUzÑ €ža¥AIÒLÆ"CŠŠ¦«â»EÈœóÊÏêÛ„ÇÝ"ä,3 € KXµpúºèSU'…¿sÊ•!Jbët¯‹Wu™ÖWÛÅ–ø¥%[@€Ùû  ·[Î9/|úåW”-ñóCwÍ>)¾ÿ8RyRñYÜ‚Ò,Á€[,F÷3ÏZ}²úŒòíNáš´ôÊ 7}³Ýuu”Ÿ?î ˆæõ”OLÝ¢â£ì™Жkª¿!@~Ä8x†HÇòÊ-ä½ä}åâšÂë ÷(møs¿9 eG§¼ç›ŸSf>ÔÛ’ç ß3&±XI`‚!FºT´¹¨ðAHÚ+OÆýuæáøw2Ö¦ì• Íptâ¹À}ÍxCü郆GÚ«º½‘u‹›ÝòÞÒ«L2·÷êÏ3€–¿Eq.ޱÍQUá%Ê‚¾cF½ÔD_[÷ ß‘‘uÉ“¦íÐyéÏåß+>@€¸§¤ÑMÍׄ–†+ÊõW”7oÝd~]hÑíNý±z[Ú•Œõêƒw‹ ‚½EúïΈ €pG1³ƒfe¬ ?WsFõá.”B$~ÙìuwŒCxø–,h` HÏ1}Íe2Y'—DÿÆ+ÊïHÅ©Ø÷W”lõ.|« ¸|Óì»Í„ø–ì.ñ/ÝUB€À}u³èֿኢåN³ Å’¡hœ³,mmî[þ%;fzèNhܵǴ’[¢?¦-?ÿ^Özõ!é϶îa=޳¼Ý@›Á†ØéÙÝrô€;ý½¤û€Ñ ŸócÀ”ßx}eýê.+nÜqÖ5¡%aYÉq~é†ûã~¯Ý=õ—åÇÄ*ë–K7¢Ká!ÅKÒ2Ýž ™[ËÝré]²Þ(¼Ý¤Œ¥Né;‹œ³öÞéï%ŽqËK Ò1`Êo<+YŸÚsâ§w úKÂÙ'UíKøµr^ã’À²euñKJ¶úÏÚ1Ó·hC…ô÷‰Ë²VR~’µ!çÈýNɺ— É @€¦þÆ%“§­ˆz]: KŠŽÆkâÍæëbË쓱ïçlI¿Xt ö]i–£á²²EÚ+RúVüïkΨþUt0ñWê‰?KZ¡ÛûJã2iF„€û ÔûÎ<ûNåÉ)ÉØ}4mMÁ.ÏÂ7gL]T´eÚšéGÓ×g¯<÷÷Ö™)VÊÆ¿·°dããDàY|óÉdm<Ò”nÚ]ER ÍÚ\9ãÍÔŸIGñÞº'äªpCú¸ö¼êÝîô˪ùõËo¿„€2ØsºŸ»ú¸Ö³à´:¤rÕœÙ'…oî©:÷~êZÍþ©‹+^óÐï+lÏè @<ƒì|òýZC`ÚÚ»[ã£î¢øiLã‚WŒ @€g<@Íó”Lømùñ)æ5/~ñA€x–Ä;Ï·m H·Ÿûï-~RñA€x†ä‡@€ @@€ @€!@àÞ{åø €@€ B€@€_ˆg¶7  @ @€ €@€@€& Ó½@€ @€!@€ @„ ž,[LO  @@€ @àé ý) í î·Að¬meG§¼7}cþ[ @5@¢ç,šÛpYy³p_òÏ=õgÕ @-@¤è®x­Ú»àP3 €`Ôa: @ @€ €@€ @Çbã–îN€@€  @| ®i @ @€ €@€ B€ÀW¹¤º €@€ B€@€ @ @€ €ð¸’ìJ€@€ü@oª¯~=?ÖN‰lB€ÇÓsÐÄ¡%YK¦4g¼Q¡^0FlÌ#,Ⱥ㔕¹ @<î H§Òƒªwæ¾-¶4_ZfŸœò·ø%³6¸ªèèà @˜Ú›ÊRÖmæáR€´j¼¢lÑîJüYÜÂêÕúS Ú…WšÇÈÚsâ'­ñÑ|]l©=/~ÖpI¸ÑxUÙ’½9ûxkW¼V^½¼!¨|}•—î-=ÅÜÙªgå ñï%~;uIåÚÔUÅ;Üuôžºýaµ æú–¬«h €‚7’ÞpYÙRwQÑ’»%ó,»D&ÔO[­hž¿à~à_º«$xæ–ŠÉ¥ÛË< k @€xh#«§´W$xêϪ½ v• €pGC'‡w´¯@€&ÊÖ=ÃËÁ0sUMð¬m @|c€CôXÍÉv?n7ª®q±‡¶ý^—`º[éï’µ·°½DºC$²aÁ| ¾}cþ§~|Òk:£,Ã*ÙVN€@Ûy~ŒrþtcHLCÓâ膹‹@€øÆˆðêDcˆ´ħdÛ, ¾1,°8Úâ©?XU»¨™€o ö˜îoì{<¤K ½‹w €žq–ŽŠ žºÓjcGˆwÑ›E @€g\/[çA.Ó÷ŒO\—?!i=7¡ €‘ÞX2™¼»åÛá¡ú^¶NƒûŸ<Ì5ç ž0Âô’´IiÛŠGÅ4ÄÙÊð?ù?²¯r²õÈô+.Ê~8pWÓzéÏ €po'ÆM´§t”fBnÿ»—ú|É1nyÎ7ÉugÔ·‡Æå+–1ã ±¢sÎÜ=Ã)}ç —éoÞú\ †µs’ëЀÂ×Tw«ñªq'NqŸ°öÖŒ‡‡ö”f°WÎTi—Åð€¡]{Y÷1|ØÝðû 1ÊzuþöÔ«ÚÃ: YïÁ.ýl\Ó|vñêòcʽ‹^/!@À˜ÛeÝìmÚx¦…9Ä-Ï&@à‰°x9`´[ÞÆßCâ”7Z1/kRÚV5F_Žeøõœ­G„»kÞ£ß/B€Àë&Ù•ˆùåǦü9naí* Œ"x–CŸÙ§Ì}[l‘4\¾ˆ]0gÅ#ˆž€{êáÒ㹬uAk[D¢ß›úcOýÃ]TÈ  @Ü“P?i f{䛵ç„· âýq˜y8þˆš•u @´‹©ó<ƒš® -mããëeX7¤ß+ONùkìšÕn¹‡ôžú³jÍ td¯ÄS{ZM€ÀK_¤nº&ܼ=@ÚÊß:åŒùPo[ëIñ®'Äö6jÀØÈq–Ž ;Ÿü©qËsÝÕÇ´ì€ûîÿÈÙº¸ùºp×I_¥\{·¯ïÚËz@ç—úv5ɨ!¾šl îIlpqª¿$|y{x4_Z¦¯‹Þã9ÍÓáA^§s÷þ] ò<Ï nŸù vËÙ¶¨ú´ðÏ;Í|Ì>)¼ßy`gf4àC£Sö†€ «'W&/q ™åðb暺âýŠŸÕžS~r¯½%ÅßÈûÊ;óày«Gô©» ü¼ùºØR¼/æ§5gÄîß,Á2|~ÒâèÕ1ãúñàAgA~T~Tñ·kº&H›Ð_ã9À7TõNC ¡ÑÅÀL ié•ÁóÒ^é璘 ®¯8®üó£DHÙñÏÖ“¬Ì¥×tŒ;Êiêĉѕ!y-;³á À³(yqغ”¥>Ê{Í‚L[9¹æ^ÇíÞÕu±%mĔŽìÊŽ —fEjÎ(ÿ#·÷áÙ0qqM‘¥Ó׋;²Ö [§¿&ìÑï\wAüT·3jÿ]âã9íŽÈƒm–bUÿ:ç¼øÑ­›Ò¯_æn…MŽ`L˜°¼M±¦«ß‰Ù'” ÐîÙ6<zG½}í~·?ªº §é«bv¶.õ @ÓÚP.æ?Ì=b¦ßiVâö ˜yHñ?ÉKZévª.0>€LÌï¡¶ÒO*,Tí9ñßZ??Æ €‰-ÁŠ, Ì¿ÓÚŒ7Äÿ'ï/çh^@€&¶ «Ë¬Ãª?t´i¼"~)Ô†V÷~ù¥nŒ @¢ß%^íhR}FüwÒâˆ]žÓÜF0F€Le¤¯¼[åqñ/-@¤ñÓ_SîeŒ˜aþöö —•7:Z€Hf½¥z×H]'@€&"bVpJóõŽ­³ !…‘Œ @‘²D1¿#ÆGëq¼Ú1¿[ÈåŒ @¿U<Üã£î’ø™¢:Të›ãÅ  @“Ø€n!¡ôøNG ÝëªËŒ @â—ëí3ç¼ðŸŽ YëÄíŒ @3m¥rC‡»„ðª²Å/×k2ãÀÄØ¸ ì]vDüSG æëBËÔy‘õŒ @Sªmº&ÜìHbˆ¢?›™›q @“ÛŒÞ_ÞI³]¸ØÑîQքΔ[ÈŸgŒ˜ÿ<·9ç…O;Î2,±¥ä€âOƒ\l,@€&(uyÌê¹äVô’ýªßÈ-ä/2.€L”µ“M÷Ò·Äßw„I[®\Θ0qQå! W„?t€L_'ìd<˜¸.=dy›Åc?t€Ì9/~3;tcÀÔ÷‚,S.ì˰fŸÿ!ï+‰1@€UÃ%ñ³ì Šsr ¹¹A—Ζ9Ž b´{@nÖž>}Jü ü¨ø§Òƒâ;Ùë£/J1Â0ò~r³´å1ë:Ò¥„­2×*w0F€žæàè+7‹*É È÷ òÊpó*Ú/þZZþÔÑâCº=´hr,cà)fÖË친ʷš® -õ—„/:â̇¤þ¢òó±Qcì3@€O¹‰±í«N‰ÿì¨ñ!‘öƒÈ-ä½/@€& yqÌ⎠—•-öÞC†0V€L@ÞOÕxUè°"}o^îŒ @ Þ¦:Ñ‘g@$±ÕŒ @€§\—2ýnÕ•ŽÕgÄS:Ú1^€L @t¯‹:@t¯«.3V€LÀ¨Ð‘³ÞßíÈ’´(z>cÀ¤­P¬ëØË¯„&«}‚+@€&@QZÔ|½cÆGåIñý¡¾C3N€LDä¬ ±ú¬ðQÇ»ý\øîPGî.ŽžËØ0A9”û:Úæóü-âaÆ €‰™:/|aÍYÕ-@*މòî=’1`B ÷¨®uÄ»?š¯ -º×…·^‰jî5”½ €LBî&ñÍŽ|º´1¾ìˆø^újåk®É.ÖŒ @€§X‚è99@ÚŠmˆ¨dÌ<ÅÕ¡ùOC|HK²¢+Br3@€O±ÄE1 =>š® -ñ¯D.037“3f€žbSçÇTuô)9 þVn!ïÊxxÊE–Eçw¤п·ôêš íý˜ÉX0ÊšÝÜûHé!ñ®7nß“ÑxEÙÒpYyëccHáâÏå}åfŒ @±Z±ò^ Þ&œ÷ËõR8YTT‡jc#ªkÎ Ÿ$,ˆZ2N9nÌ€q–¶ù[„ÓÆ˜E)= þ.PëïÍ80ší‘»€~—xÝÚɦûí_Û¼¾—ý·—ÊûÊ»ivWÚ+<¤Ù–ÜMÊÓ'YwgŒ˜4¡ÇÄ?ßuöc«púN_'·ï4*÷4÷1•'TkI]³¶³eçç#@€&$X?9xÎyáÓ»…@ÊRŇy=§)‡åmN>Îr¬™o‰¿Ÿ gÅø01ýÆXXÖ]T~y§¨:-|䑿6öa_ÓÌܬkÒ¢èW v‹oWŸ?|Ø¯âš¸í €IòÉöômºúݬê.Ÿ¦.‹yuLø˜!ûúNS' Õl.J >H€Ô_TÜè7Ú‚Ù@€?„¾#‚†[:*&ËUPrãm’¼8zy{þ ÒºBm¸ºx¿êW·ÇΖ_½+·àÈ]@€?ˆ‘Qõ)žºÓjcqË?¨¯='~Ò6ÒV(Wãg‘6®ûçy‡Î<$þîn’³I|“qðÕâUp>ßX’W–n½}ÃøÔ¹QÕF{C~e®U¼y·kà w@€& i¯ï¸=²× oëç -šÚpYøâŽÐ !¤¨ Íbܘh€d®×o6"®)¼ÖX?~—ê®—Ö]P~1^7œq`’r.¿ä`Ò/o½¯åòNí>ûQQwQøÏâ£ü˜ø'em˜¾‡KÆ €)ˆ»öˆ®ö¼øKÕÛ„ n)ΣŒñ³Ä5…¿’½^Ü­Û¥ºXyRü{ÕiñCxüY»SùcéCÆ € ˆ²yÞ¦kÂÍÖøh¼ª¼éŸç=ùIü\fæf/ÈûÊ_²š0À‚Y@€Ï@€älQþv¸Ð2me̳>fxî€vå©?­.=”ø›Ö™uXõ®™¹YWž9 @x @Ú=@¢êÎoºöí­ä¹›ÅÃëfdYp"Ï€î a³çÍÏx-çHʪÜCÞE¯—<Ô&ôù ˤÛÏ¥I[©\dz @€{ˆ§î´:¢fy½‡þ°ÞCJó0"Ìm\:÷úW›Ð‹÷«þGn!7{?O×^ƒ†3®€ž±%XÚ]éWZOÁª9§üdà¤Aý³˜Û{õ~±ï°Ñó5}GŽ“ÉdìQð4Hñoá•–b%.ŠZi쟥ÿè0/CL<ðq¿–ㄱ#£êõ†¯éÆ €žÒ ˜¹cVÍYÕ¿[D’° ºÞØ?‹ÅË~NòÍh6£ÿ˜ˆ‘.ÓßÐNHÞX@€xŠ$eUé¶¶ñÑpYø"¬$H4öÏb5!ÖkXPi’!(z¼x×7½L&7üÜ™Ò÷J€x‚FFÕ§H›ÍÛSþöìSm$›x²‡K£ÿ,=­Ç÷Y—3!i}±AÁ`¬À>C<­zÛ¹ 4ækc ³þ£Ã†â#ÍS{ZM€xÂúŽn騘Ð^l]'Ï>)þó›ýׄEUhÖ{C"ÃzR¼§sæn­Né;´.Y{õ.Ó÷éã–ç»æÔµ­!@<ŲÖ*¿³üªñª²Å-ÅÍõIC|µâƒ,#@<¥†ù7¯<.þ­m€H¢+Còžè›Z&3sP-É#@˜0EUhvëíç­ÇïÎxCø¥GšÛà'ý½Ø¸M›÷Êt—[ÈŸo§øèürHöô¡ùaC|5ÁÂJcFFÎIqˆ[–㔾³ÀSVý0áÑ&@ô @€§Ìd_`ÓÕoï©9#|lˆží¹¼jD¨:ÕgÆý£„3 €L„Y³NiË¢7´]~•¼8òµ.=ÚuÇ_¢=ãƒð ÔùF7^U~çtaNxQ{þ;^´j.-µ"@<ã¦Î‹ªi;ûQIø#üË̬ǣÍt8Y9gîÑÚÑ1MÓb—æ¹çÕ¶w| €žÊ= >ÑÇÆ5†¬ž±7úÕ§…õ,i¶Ã1ny®1bƒ`¤»>¤à˜ šh_¼Oøt¡S¤  ]Ç ÔêãÚñ‰ë4îêcZ#÷€xÙûÚÛi¶Gþ>}•rëãÁÛµ× þÖ“â³zÚL:Z17“@€øžà•toÚråÒÇyAÎI ǸåE'Nñ—´FC€À÷¤,‹YÞ|]l)Þ¯úµO¶Ï£.ÁzÎrœà:>a­–= €pGf½Ìž+Ø-þT:«î¢òsÏinþò:–ã”®9tlB€;²ž`=Ln!—ëw‹?i½ =fvHÁ#í#ñ/ }RñÁ&t@€O)—Dç‘Eû…wš®ˆ7¤} ΉR”<ìë ñÕL~  @€§bæÃu`ß¡!#8%Lò Ð{g¦¿þ“Ê“â?¯ -Õgb¾ŒŸ±êa^¯ßÈàãÖä €pGžiN1C&ÛúF–¼¡øƒ´«ì¨ø'Euàâ‘îþ°q›æcë‘•à©?«&@àNá ³ÑÃÊ9ÕÙM¬ m®8ó‘ ’ªSÊG‡rßY§çqñ«5žºÓO4<@€Oyy§‰qã¦x,÷ÊôPê_~G:‚÷Ö&ôkBKH‘¿ú~¯ÑwdÍÄÔ-š"<@€OÓÒ«inž%¢ÿQv4úßË«Ï*?iýh¸"|]¬½ßkØyçùýñA€x øåøLÌÛó¶!4nÔ_RÞPo‹úMÃeá‹Ö‘ŽájÃï 6®iÚ“Ì€ÀÝM™ºÑ'Û=[¿Kù_ù[„KMׄ–ÖøTŸQ}\89àöühˆ¯Vá®>®%@àÎû?,är³>f$nÉN õ—”_¶ ½¯ÌÌÍÌp#{'«q‚£wnÀXÕâL îhTèhËœ Qo7·™©='~|òpÇ”¥!.+oæoÎÈ-äÏ3@€íªïh «@÷ìáÁ#…^Qo|·òDÌ'Bmhu겘•†@éB€ @»éa÷BwUcàŸmEû”ïJ§`5_[æ\>âmo{§¯‘÷ýîý  @<i.áNñã³mÜm¼CK}–5]Z. _Ôœ>yѦ›¹Ñg@ô'µ¡U«æ„V½2wrÙ«µA¯UÅ/-ß]¿`¾§þ„–`B¹YOrsv”8>:ºÂSÙ‘èS—‡¼µ.âgþù¾~Æ OÝiµ»æ¨vúƤ+u7“WjßÌÛžvÕ@_ˆ}ϯxûL € qNïVæýªg–sáxqtjÒâà‹^™.ú¼-1?­<©ú[Æa][SæFÍä<ÐVÞWÞéqÄgƾÂȺšå3Þœòû”UE;õ{ÿ;{âOÄùåëá·aÅ~¥…{„_†ûge­‰¼ÔpEySš iº.´¨½B@€x$#B­‡ø©_ .ð\®Þñnöú¨«¥•ïÕžS~ÚÅJnS¼_ñ®n§ê|Ùñ=)@‚t~¡ @<’žcûõI_þÓâýÑOYvw“òtþfñDLÕ´:[÷Œ;ï¼ÀáÕqcÅEYúSšÀYf{éë @€x`ޱ6.S'B–¦¯½–±:ò\ÊÒà+a³ügÅ5+׫æ×/g @´;·—12 Ù‹!EþIZßL¯\!Ó«à-=Æ}ã’ÉG…EL—–[ €`tÜ  @ @€ €@€@€LÊÿÓW_!íIEND®B`‚calamares-3.2.20/src/modules/locale/images/orig/timezone_-4.5.png000066400000000000000000000035541362604102500244420ustar00rootroot00000000000000‰PNG  IHDR ™Fô¥ÎsBITÛáOà pHYs¢¢EÝ1¢tEXtSoftwarewww.inkscape.org›î<¼PLTE8ÿÿÿ8888886g%8'UAs+J0L‚1I~/,[7h&[“9W7Y‘8T‹6UŒ6X8Z’9[“:]•:T‹6`š=\•:^—;]–;\”:bœ>f @i¤Aaš=f @`™bœ=eŸ?`™vô¶5I[XŽ1¾Ü8ÀÔ¤ŽâÊ×ûŽ 64ɺ )ø€@@ €@@ â@ €@@ €@@ €@@ €@@ €@€@@ €@€@@ €@@ €@@ €@@ €@@ q €@@ @ €@@ @ €@@ €@@ €@@ €@@ ÿ§ßºéÒË{IEND®B`‚calamares-3.2.20/src/modules/locale/images/orig/timezone_-5.0.png000066400000000000000000000453361362604102500244420ustar00rootroot00000000000000‰PNG  IHDR ™q*UüsBIT|dˆ pHYs¢¢EÝ1¢tEXtSoftwarewww.inkscape.org›î<J[IDATxÚìÝTÖåâÀqÒ¾Vÿ´ºíš6-M^p¢¢òþ~/{ow²÷~Y"Š[Qq ¢ "¸ØKE¤îmÜ–Õ½·nûfeššÊŸŸ^ œ@ ßÎùœ‘ôyì¿çY­­­@3tF²ƒ±®1àÏôì´8{æô7 € @ @àj {€ @ @àj$;€ @dÚz¥‘ºR-ÓÔ¨Úýþã ã‚7…š'.HµJKÏ\h»,I‘™´Øv^ÜŠ a›Â ÈoÄÙ) |ÖjJÝs‹ÄÌ”…Âò#'GåÆšÅdd8þ=²Üîó„zñPLµÍ71U6_KÔ…žMã‚×G¨7¹íOiN¦íZ3ZÄV¯ÕžuA[­ÿ•ÞÒöý7ÄÖø:냡ۜ>ÐnöØXâúw÷ºÍîË\JÜ 2-Rï~úŽ[¯¿éúë†Lv·±§ìUé×h8Èðú£2_€®ù1O°“i딓£–'¨79¿¥.ôÚm•µB]èøVÒnáxJ“¼U¿W8™Ú,o¯¶œç³fVEr£pL ŠŽ¢+m¿ð_ï²?x«Ý§iÍ©öŸŽ‘s>·ýã âá ÛÜ—ÌØ!$™æ«6ˆµA%â{Á[ïÅTŠ_ûæŠ[CKÄä)‹˜/@€×iáÿ\÷?×·¹á5W_­¶Øö€v³óßû—¦4 'Ú‚ãDòù‰ØëïãëÄŸÏŠ†¶°*q|Ïvž_Ilµâ‡ÎÂ"½‹à8Wä.ë¯ÂwÚÿ3²Üæ‹ä½òçûyÑâ׿a¦âÝÏÞûà€»Ürã7Þļ¸J)ôÓ#=–Ù”O‹ðûºgpôpyƬçä©Ê°íÂ×Iâ/ú½â1iËÔÅ„ƒ) ŠŸ/æs»‹´Z±Kþ­~¯üdt¥øMÔ.ñK·Å3WJÛ³˜_@€W—VóÚÿ2ŸÚ,œò[ï[ã¼X¹UYàòƬ<צÐíŸè÷ ¿öfT\‰¤ÝÂQß\«7?x3àj#&[%œ^åhß&Õ"¶†”9|Y!L¨·:YaóeÀ—u¡Ã?‚·ÚÐ7]…1Ò"bù­wŽqý<«€®RYV™ÒÖ© ý%_ “Ô}ÂIu¡ÓÛ±µâVlH¿‰ õâÏ~kÅ2…Þ<ø—ïÌ|¸†¶`ýÙ¤°ˆ©’‘¶Q¥î“·&6ˆGbªÅï"wŠŸ‡–мr̛̂'úΈ4u‘'LñÂø¡û™C@€ý(@¤w<¤Pè®Ãçiû…S¡evÿŒØ¥øF³I8`›nZ>Êq¤N‘bí»Jž¯.«5­þ>%pœ-óà#O˜wî,)*Ò[ÎæBúœÐmy¯vÝYaûŸ´fáŠV>¤G £«l¾-³ÿTWl÷¡¾Ëþ »÷ãëÄŸ¤·F¤¯S)~Û Š”Iî7?Ì!s@€×ë«ä2ûO¶[º]ñeøÅWA[í>MÞýÇÛãCWl{À{µW­ºÐõ‹}Ûã|’÷ǵ›Þ‰¯S’bãÜ8‘®Ö5 ™d7àî·2g€®ñ-X­^œ^•Ø'ï4læÆ/÷Ìõß\êô^À÷&ÕF·ýÁ¥öÚâ§n{ߣY<©Ùdû†˜4]{ç·ý…¹ÐÇ΀„mw<à¹Ê«Z[ìð¾r£ÃÛ!Ûì?‘â$¡^ñSÐV—·ÜWoš—9ÛeiÐFÕ&·æð¶Ÿ·?½MªVC¤í`ªMÞÓ¥<;-Öž9Ї̌•‡« ½v«6ùÖÉÓçd Ú왫.u]¾^ÈH\<1lI¢‰nu”yÂÂT·œÓáTâðAp©ÝÇáÛmþ“Ú,œ¼¢‡ÅÃI»‡¥oK¡c•6{®±®1@òì´8 @_2lº‹åÔØeIR`ëJu n9ÚâÀ-nª°ý2¡AüYZáèŽÕNW<Ú¾¶Ï×=î9EÓâ—'µÇ ¯ži‹ é0y[lvY\`ž˜¶Ãé£óÞ„u™êåG½W»4mµÿÈ?ßéoî9ž5–ú9s¤ðé @€>~¤ý ÞðŽŸØÏ\­ÈŒ_¦Ûâôîå¯n'ck¬ÿWk}PZE‘"çô‹êÍB«ô}u¡ý{–ú¬Ù熠ŸHÇ[°6x×». (®´ýJ:«UaûŸ”&ñøÅH|õÁ2§´›]ßt]êWæ´X·)ºÊö«¨ »/uÅîoˆ™© ºŠ @4Y'$íéêÍé…óÈr»ÏÂwÚÿ3±Q8ÚÙ¶,éc õÂ/»¬¿Š¯K7g¥·§ÚÏ„”9,q~glÐæ™¦F%ÓÖ*Ï @€>êÑÆÖ,vq²~¯ðëå="(ÿUµÉþ=ÇEþ[ýòßTd®Ÿ¹ Ån^غÑEÁƺ¶è¸Èà @ôqʼLåé³çúç;¿±Ëæ é HÇ•Î)”¤îNÆÕ‡B·Íü!t»ÕAeõÏUÎ{íçl Þjýï˜jùáÀ-¶ËtêK‰™¦V9Ò-_÷‚Í¢€G^÷˜ÌèCÆúÚ¸ 1Ëlu]æYé—7«ZµÉc_èvÇÜs<«¤äŸZõ{­N)7Ú½ß.ÿ‰©¶ù6®FüÉ?ßîÝ™©ÑË,’Ž]g¬«Q]Lx©«U£|Jt¼¤oúË}w2?€úà!tév*é¬Fb£ø‹¶È½Ù{µS³ÿûwºZýèðjù¯ç¾Ò~FD ç%Ê­Ã×Fw£}Ku¯ym|Þz¡ßÓ¦¡V÷°xéîÇF?Ô72/€ú(çì™ÙçB—â!®FñÃ¥¿j. ÚjóOM¡ë›~ù¾Õ3S¤÷=ÎÞ^5dz¼ÓãÆ~“îzôÕ‡o¹ó{n½û‘Û™ýÄ…{è6›ÿtÇ£ƒI»…£R„$5Î& \ý¬YŒÍã&Ónôä ÛîyüÎ{‡NÁ¡sý€C–Uf\­øS{T¨6ºí×¹¾)};m¿pªãµ¼ñ^ã¿órÞø0RU©F(²ý‡Ë3ƒîÞÒæîÇÇŒ•VFÚ\׿fæ @däiåc‘œ°Ðe©r«çJÚ°íöŸþvËÕ>ù)—e¾;¥×Ð;{ý\Ú¦%OO˾”ðå³E=Ì"ÅóEûåÃ…9ÒcƒÃåsÔCÍ]ž§žüäåiqÚÇMÜ|ÅÖŠ9Ї8Ι±Óöó¶ØhMÞ+?ë5t]±Ã{ f•ºçlSntxÛo½k“²Àñmÿ|×ýbfââ ¡›Â.uåc´o©j˜eŠk[|ø¾æµYûì´XÝ3S£|Û¢Ä}„8oÖ£F^ÊÁC&ϸóá—e·ÜõГÌ @€>Dz¤«íUÒéÞùÞ 9}öc‡Ý¿4»4Óâ–%M- ½œ-Xc”êûGXL7008} ï÷ÜöíÚÜrÓƒïjû÷­lÅФ¥->ö‰'» “„zñЬ<ïºä=â‘ çw/'@$#Ý7„<<Êuú#¯»[Üùð+£;ÞŽ%ýÃüèk[°²¬æH«Á¥ö¤ »iÍ© ’™_•X}Öþ0á#ÄúPJ“pÒuiÐÆË ß¤W«žœ  znfºï£c<]î>ÃþÞ¡SF1?€úEÊL½Ï§f‹äŒ¹6s–Ú/Îw]l_í¹ÜrË‹ ‹`é¹<#~©¾I8Ñ~ø<ºÊö«©±Ë’¦Å-ÒË:yïãrŒö-Õ=<ÊÙá·^’¶b]ÇÜ胞ïf&Ón êøpàU¹f„"K9jV‰ÖX·%Èvndnà÷7¼ru[„ÙÒ­WE!&AÛtÝýïPºýýÏ[m‹Ì @€>æ1™ïÄÎb@¦­ë°²ÑðÛÇ'„†*7Ú½79jU\wH‡ÕÍ ¶‹ã9ƒ9Ї<1Ö}Št›•ïZåŽàR—wgå)wª6ú4D–Û}¶Ýñ@ÛÇÞ1O˜3{Œj§FŠ’q![ƒL7‡œ(=ãÙiqöÌ @€>Äe¾Õ¼´æó¿v®ß+œHÞ- (pÝoµ"¾§ÃƒÐWä<ï€töúyd¹õ72MŠ @€ é*^]±Ó»BFX®q7Ý|E€ èçRfÿqÚþηdéŠm>Uxì²)Œ @€Kfc¡ß+œLÝ'oM¨Yèõó£+ß¶}ÿ”)M‰ˆ]vŸEUØ}i??juoÿ @ôAÉ|&ŽÝ1!,?ÒH]¡>}¯¦B36hS˜ôáä¨ÜXiË•L[«ìÍø @ôÉéü«€!@àòLPZ)eÚJÍ™­WÕ*³¸eÉž+uÅÊ>õþù~Uâì”ÒÖ,u¡Û~¿õåÎKÃ×›'.JµJ›=W‘™¼hbøÚ¨žº‹ÐÇ<*ó4\î´8bݬ<çýç>J˜P¯øI¦É‹HÙ'ÿícÒ-YÒµ¼í‡ÔCÊœßk‹’c]@€]³J°Š Ý&~Þ]¿+…†÷ŸJÏU>•ÑUv_tõNHR£âp[Ĭ%@ KÓÂf†n±ý8b—ømR£p¬«Àð]§Üá•«ÝÒñcR°¤6Ë[¥U)`âëÅÓÂ×E Ð)§ù3çÅÕ ‡âë…£ç{ =¦ÚúÛ ¡kb¼×(·–¸þ]Š³Ø…)3’¹åxU´©’§Ç-5$@  ÒKèé-]‡‡D¿G<æ½Æ«Vz D¦Ý,ÓÖ)4;´Ú"×7:nÛŠ­µþ^Yà¾7`ƒoÍôø¥Éœe´«è\ªø¼«øÎ€D•[g'-q\¤-Ôm±ùT·Åù]×e^~ëÞŒ¬&6ŠGÒ;„ˆ4‘å¶_J·j pÖ Ht¥õ·ñõò.·`ÅV+Zgç%6ʦ6‹'Ä#nË=«·Ú~’Ö,œJÞ#×ïNHŸ])ÿ) ÀþÏ•uºb÷7'i·øK{˜h‹Ý[LKÇ¯Š‘~Þ¥Fˆô~ˆ¾I<.}[úùþùN‹ª°ùZµÑñë9á¹Ëäë™@€}ÌD¥µ·t ¯ÃBݦ)Q)Y£6O‰žŸâ½Æ§]vôª™©s]—{UŒQn ‘§GçÌÊsiv[¦Ý,f¦,4ÖíÐŽQo Tmtm™µÞ»®ã[!—"¦Zø1¢ÜêÇÐmŠ/ck­¿—Τ¸/W1?€úð,i;U\­p8¨DørBÈ‚äöÃà2MjFRÖleóß\—m²5È4ru¬´j1-~‰^ú!#a±®ØáƒË ÔfykØù÷1•ÂOÒáô€Ç·L‘Ì @€~pDZPnôÚm©Ïš3>¤ ì÷«q¿.×2en¦Ë2UÉéo§ff…n³ýÌ,6+ÃyqX^Lµí×—se¯tEoL•Õ)BlÒŹÌ @€>ÆÈCážP'é,¤Ñ9½%ÓÖ*;¾Ï¡˜“¼(¤ÌöŸf±Ë¥ï . 3‹³ÓæÛeÇ®Ðmqx/±A8YaóÕ¥†Ht¥üPP‰ÝÇ±Ö‰Ì @€>FHž™$ÝJÕémU{ÄcªMM2m¹¦c€ØÎÍ1\uîÃÚb—¿‡íp< ˜£_4.xu´Ç ÿíí+*u;Ö^áDøñ[m±õ'¦ÖÌ @€~°ëô{ÕÖÿ«Sü8+ϯB¦©V“"èeÚ:åÙ/ ’>&}~ ´Š¡Ì ØàÞ佯£þbW@’v ǃ¶Úþsz„M´ôë{Q>|ËB‹,1q²ÛÀQ™3@€}-@¤íWž+gí2R­úÃ*‡dFÒ¼ ³ØÅÉ?&Tw]R ,ð­ (˜Uc='lÍ´¸åIæI)ÙbfÒ‷}É{G.6D¼W §¯áõYeµ¡}uÄØãåÌ @€¾ mRš„“Óâ¤v §W9´õg­~x¯VmËèðxaøN»ZgÅ-,qú‡ç*]ñô„åIž«´[.5@æX¤I[¸"w‰_½î2â!æ  @ IH™ÓãBŠB;‹Ž&†åGê÷ Ç;þ܈r»Ï&GåÆÎÊ Ø%±—3)bC¤ôÎÇň˜'ýú 0˜h=Úñ¥§˜/@€}8@N?Xeý±®,ð|"Ó–&ïŽý~†Dl•^Oÿã‘ÆÏ\ÍÖKY91ÙÌU·YØïeÅ\è[mó­Q'‡ÐÏå²4,_¹Ñ§AZí°ËŽÏ‘΄töyÓæ¥_Ì­X é@zh©ø‘ô¹ñµòC7?tó­Ì' @€«œ˜<3Ñ?ßµ9¥I<~n„ípúH‘¥_t¡ø¸XÒ;!ñuŠÛ¿~p©Ó?bªm¿¼Ü—ù– ’÷Èõ_7³¼-H®›¬5§+Z¼–[®¾å‰[n`~\…+ I»…£þùNoÄVÛ|súÝŽf¡U·ÅíÍ©1¹qÝ3’¦jŠœßŽª~ˆ©–ÿYnýÍäèUqS¢×Æø¬Q—…ïtøTºþ·«:ù¹»]Î\`›ngxŸá í« ÷½x×½í±á·FQ&ýÜÔ}òVcÏ—^d~\M¸Ûþq]437e¯x,¾^þ‹]¶f“¶Èå­iq R:;¿q9¤¯c??fUbƒõ¡³”Ÿf§.hßÞe¤Ù¥UorxçÜCèíæXèO¿ÎÞ,œš¬™0£³ßmšyXB½ø³n³ü훼éfæ ÀÕ×?2Úm‚±zI´õœˆ\«ÔˆVi) &„m ´5¨{V>üò=Ò»8óáž°Mz=]WìþF`‰ËÛÒËëÒöÐíŠ/œÈWtüõÚ¤NñOÝ'?W+ü<Òîåg»ú}6¼û¶gocû @€«)>†N÷°sY¢-òXé·Ó2%3Ëc¥ÿv·œ€2ÝÆ°îÚvÕ¾õ*¶Ææ¿p¯QüÐÅ$'¦‡ÛFsèüºñ~£^}ÞrØ£Ì! @€kÈ__”?ï½zV…´¥Éo½[“Âà|éÖ*yš~Á„°Má—³ÒqÆLÚbe1/UzÉüb!¼ØCèpõ¯~Ü8Ì2Õ+l‡ÃǧoºÚîð±_žOã¢Èµ2míeûpZº^úz¾5BFÚüiqK’íæGåúçûUEìrøgJ“üTzËÅÇ xø5§1c”;5Qg_›Ö,žŒ®´ýÊyIhþÅ@—‚Å-'xSä.ûýöá~¡5¸Ìúó¨Jëo.%8ºz €®Q†·ßsëóÖ üLJ$6(~îì/þiû…SêMn-6sãsdº Íùdbx^Tg[«¤¯Rö 'Âv(¾’Ž_^€°àšö˜ÌwŠLS§f§ew¶%JZ½pYh‘+$˜©b«ÅïB¶9|h¤®Tw!;´Q6_w¼åJzåÜo½û^é]ˆŠ¯Íãy®òßé¿Þe?@€ Ÿøà‹ÿ÷²Sî阘»,)µù+ñµÂOþoÀÒçû¯wJNŽZ–h¬­Wvµ-K¦Ù®³™›´Ôwj»ó’𼙩Y™2mJúü1êr±®J-mÕ²)L:B€ èžœ µ’‚Aœ–¶Ãñ@F'+ ÑUÖß>jâfûÀ¨S‚·Ú|”Ú,œŠØe÷yH™Ó‡î+T[¥ùã-W;´2í.ÍÅœ™³*>ºRñ]ÇÏ }Ì=O{äUÏBõ¸àM¡‘åâwêB¯Ýþù~•mañÁoñQióµuVÒ’ß^/_«)òØ—Ð –¶Ui‹]ßTtö!ô3A2=qqŠ[NP¡±¶Z}¡´)ÌyIDžg®fkòÅ/ç†GàÇø®õ+wY(ä0w€®µ?À×=35Ê®ý½#uùo‘ +öh9óò¸ããÀíºN£A»Mg©Ÿ“ÙÙ,él‡1S¢—%:.ŠXk»<ñbVBL C5›]þÖÙ éÒ!øYy¾ÕONÔÌ`þ\cî{núÐ×ý¶wºEJžž1Ï:+iñØàsW6ê”cT;5FêŠó®hŒ)‘V2&††]êÃ… £sƒ¶:½×Ùv,)Bì2s™?@€×ÖêÇÃ,SÜ.: ´;µê"×7¤Ç “v‹G}×ù—_ÎÄ¿½zå¸à‚ð®·cmØ`ÿvp©ã‡!eNï'6þ~5°÷J‘3 €®%Ž´{ÕHU¥ºØU ¿õÞµ§§·Ñnöhž±!òÜ3Fji«VÃo3O\’ì·Þ¿Âw­j»í¼¸å&[;~ÍÉQ9ñӦʴ;:Ýâe—³R˜²Pº)Ë?ß§6uŸpR Ÿ• "p-yjRÈ´KY±pZ¾NSäÙä½Zµ­³å+‚Š’÷ÇÛB#ç̼e õâá³!¬Žø¬õ®*qû›óR]a`‰ëßS›Å“±5ÖÿµÍŽ]!Óuý®ˆ8ÒÁ¾k•;äI޳™C@€}8@.$¤Ìù½”&á„EòütéûcÔåê¶ù¹««tÏ}ìPz{Äe‰jËø³ÏœtæUê{žûWæ @? Ë”¹³Ý–k¶tü˜Ã‚èÜÄFÅ¡‹y\P éJßYy»§',H½Ðï™)ræ @? ΘÅ.IÒï]ì çí!b¿ 4ïB_û¹™iîÌ# @ä7.K‚ Ò[.>>Úé›ÄãaÛ?òÊÕ–ØÏλ"aJÌšX NŒ×*'†.Jr_©*ëìAÁK!½û]©ønfjVfÇ´@€È9¯šÇŸsÖåл¿Ñþ5'…Dø­wkf™ìÉ< @κ:W»Ùùíˉiå$¥I~*µYÞ±ËæK#Mõé7K¦D¯™ž°4y˜eš‡ÁÍÿs‹äº¯»mÀ=na~ôÑ(2£W^Î9éç$6 G¢+m¾ .uøP¦©Ðtüº£}KÕ/9®T¾ä¸Jõ²S®úe§Uj+}@žï*˽G dŽô·™™’•S-þx¥[°âjÇo >ïj‹¦F\j °X|ÏT=q s  ˆþë}j¯4>N?R¸O<á±Òûùþ{Ò+éñuò#ÒʉMºy,s  ßHC€÷jÿ]—³õª“[°Z·Øè¶Ü³ÚfnüòIyQçþ·dš:祚bý^áDøNù7òÄÉ F9ŒzYænü8s  ˆIPI°®ØéÝŒné!CM‘[KJ“x\ú~È6ÇÇ…l m13yqp™ÝÇÒ6­ŽÑâº`zõ$õ„W˜k@€ýa –¶Rí•«Ú–Ô¨8ÜÛ°Ú%6ÊjŠl>™‘4'S³Ùc_òñhê>ù©ö@‘¤4 ¿ ‰fáÌ3 @€~t]b—“[cóß+ éZÞ„z«ã1UV¿HÁS%üÔÕ熔‰Ÿüõ¥2Ï€úY€H„Ù© Òš…SW É»…ciûªz‹ØªÚ ì3dx3s  ŸˆL[§ ßéðiwnźéÃ_yð!æ @ éêÝ®~Ìgº¬7$²\üÂp0+ €þtC'¸×Mƒëò™¶VÙ}²9¤«ó\´¹7ÄaîŒEÌ5 @€?Ù€{Ü¢Ú ì=}°»Eh Ýæô¡tPüÊã£Rm¹$Ñ-Ço»yâì9Ò¹gHn`qoŇt`]¡Ÿ:‡ùð'³I3?÷À°ídšÒÀs£áR˜F®Žõ]çÔ¢)²ýÈy¯œñ*ÿ>-ÄÔfਧ_†ƒ ÞÙæ/ 8=l²Ó0³aƒ˜s@€×x€h7{4wõ⹺У9£¥çÄy¾Å*æ @?¤FñÈØ âN4 ÜžX/éÑi ·Å– @€þ )MòV™¶$¨³\š´[8ÚÓ+ qµâAÛ4‹¨ö-XÐG$¡AüÙ"9=Ë+W[b37q鹺Íñ@oœ‰Ü%~!½ìÞY„¼¬xñ¯OŽ}| sàÄFÅÏvótþù~•á;l>7OÌNï ªÞ ½ ê¡ÙižùzoÙÄŽ¿GÃÁ†7‹ï¶ý^ç0瀮ñ9! ŠC3’¦iªU2Mªc€XêçÍÖ7‰Ç{:@Rš„ú½V­¯XvN€Üí¾tFÝíÄ©Ì9 @€> Ò9¿|=&¥ 4 ,kûþmT…í½± ’ºO~ÊiÞŒü—#GÛeÎÈ|IxþÁAÃß\2ó«¡S†>ÅœèÒ~Ut•Í×fq+Oˆv§vJÌŠxÿ|ßšÞˆsB¤5½í×£+Þš79F:(?ÔlȳÌ9 @€¾ ÿ\êòŽôˆiäº(ßµþ»¼r½«z;@~Û–µO8¹Kü2m¿Ð:-ÔTdÎô¡Ñ7 'B·+¾ Ùæøa@ë~i"¦J<øgHG¶ñÌ9 @€> é-B‡±:•´ÛêÄÕ¯åÂæ @Û‚uµHß&†¤íWR©6(j˜s@€H7­¾HçOœßóZ­*“Dœ‘œ.d¤ÎŸ‘”n©Ïš3%xV†ÁuÌ; @䊖¸¾%½CrîKìúäùœ[œ¸ßpÇ ˜w@€Èe“¶X%5 Ç,õÙçÆG»ñ!›Â¼VZïpÏCæ ÀU )û„“iû…k指¾O­yâ‚Ô1šm:“ÀÍ!Ž £Vk‹=ZB·9½¶Ýñ€÷åö ¡ä¡È000` ÀÕ I»Å#ž+=êf$ÍOó^­)õ[ï_±ÓáÓ«5>ÜWh‹eÚZ¥YÜÒdu‘ç^é5öÎ>WSäøŽôyÏ[/ô'@\¢.ôØg;/2×XWØqëÒØ -Á õŠCvpè÷ŠÇCÊl>‹®´ýJZ¡Qz6™Å.NÖ´ýºSš„]ÿ<ÅÑ€|ïºWÜòŸ¯±i ë™w@€«x3µ®ÈömÓÈüÈ®ÎO¸å&6Š¿$Ô‹?ÿÙ·\%4ˆ‡=Vú”ÛÍ]—¼Gü¥-FNE­Hlލ ¬÷¸/³Ïw[âZª*pzs²Î+þ‘×Ýey`Ä=Ü€àÏþCk`pÃsV]ÅÇ cÔ»4Óãçf¤5ÿ¹çC?Ûe¤6 '¥ïk Åýî0àÁ‘Üsû#·ÞÓá÷5àÆ›ïø‹ô æ ÀUâþ3† (WŸ ’ Ÿµ^µS¢ç¥u"ÚjµºÐ£ùOŒCö ”Åú½â±Ó×îË?´IŸ²i¢Òd s àpïÐ)ÏŒšµ%ÐfnÂÒÈrÅw¶ÙÚS¢VÄwµâµ*`»´í©·ã#®Öú ×*·†¤Ýâáö¥î“Ÿ’¶eÅÕ‡ ÞÅ|¸Ê ø¿·k ­>‘þ2/î–¶X雄bfÒâ aë¢Ìb—&ÏÊ Ø¥*ônœ•ç±ÛBŸšX/éí‘Þùèò y“Uk[€ f>\ Þ6=ÜÔmjÐDÅŒHSuÈVñƒÔ¶i‹’Öö¦Ò[NÇÉ©äÝÂ1¿<×&ßuþåá;>‘V&âë?¦4ÉO_ûglÍ’þÛƒ‡ßós àôô„gî .߉¯Šª°ùÊg­j»<=-Ûv^ì ÷Ê2×eA…&¥Ò–,#M•ÊH]©6 , µ™Ÿã³V½-¾Îú`¯H[(´>œ¹pš¤šlñ’}bÈëÊÍÁíg@„ŒÄÅqµÖßûçûÖ˜F®‰éêÖ,›¹‰K¥Õ’Þ»žWhõ^iµó¦ûoº‘¹p­þ60ðÐH cMÒD·6*¦Zñ}LJ¥ßoȪWZωȕVD¤•ÇEayÒñÞŠØñ yÄ‘ypíÈÃ,õ^¼ÂvØ|žqNPx­R•u\ù˜ž°0EYàô7ãÀíº‰¡y‘±5¿KO“V\|s­Ê™7@€×¨ÁÏNzÆX½&R:äÝÙ_úýóýª:ˆ0;ut‹Vlµõ·ºÍnoœoDÚ6W«ø1y·pür£#p‹ý‡»l¾(ð®Ÿî–bx¯áMÌ @€kõ0ºi¨Ü+W]ÚÙ_þ£+m¿˜3?efJf–ÒAôè*›oºŠ¶ˆ9[cýmÈ6Å—³ò\÷Y¥'- *±ýärÂ#yp<¾^îÎ×Ï¥7E¤ë{#Ëm¾²É _­ÈŒ_&O×/0Ö•kÿ ŽÌ @€k˜çr«M-½ó’ùoï‹TÍü%°ÄùÛ¹Áë-S¢r&Ge¥É4åšöÐ\h¸KC€ è# pζ\[¥ø¶7ã#y·âˆz“âSeý»³ò<í²£WÉ´åš®ž €aÐ7䶸Zá§ÞŒI|õÁÉQ õ]4'@ôÅdx[lx°W£ElMm>óÎHòñÓȵї @€k;@n©{|ûUL•õwÑUÂ)ûΈ²À«ñrâãt€˜ €®I·?|Ë ¤Ý±žŒÈrû¸íÓï•ÿê½Ú§*d›Ý¿&El '@ô¿;ãëzî HbƒÕ¯š"·7‚¶:œ¾â×w]À®ñ¡—g$‘p-zIxi¸óüKw‹‡»;>’Å£Á[mþé·Þþ-íf‡÷¤…”9}`¬k @ôc¶éÓÄV »û•Õ³ò\šMó"¢+Åïí²ã—_I| €ú€÷ 0|fÒ³Cãj…Ÿ»3@Ò[„Öà­Öÿ–i7†z¬t¯•ik•œfâi4Òi®å¢ð⿺#>¢+å?i6[jž¿hJÔêØ+ @4ÄtÈ`Õa_w¬‚„ï°ýÜu¹f‹L[§ìŽjžèÄèCŽhàŸ'4t×V¬ØjÅAc]a(@€ =P¾]øìŠ·aíZCʬ?wYâ»ÃX»$ž @€?˜6EL¨SüØ«)MòÖ¸Zù/ò´ÈFšjÕÈŒ$ @_1Ìlè ÈâçÝiû…SnË}wÚ/ˆYe¢[-ÓÖ ð;—…–y-Ýsö#¾Þê¨ï:Ç7Æh¶éºcû q[$,îŽ+xýó½ëÌb—'©‹ƒº+>þ ÎÌ @€>Â"zª»W°íªU]äúFw<:H€ èã—=ñ˜~¯üÄ¥¯zˆ­Ê^»§Å-I–i+5= @€>ÆpáÍQâ—— R|ôÔª}˜¶PÜ)7]i ÝZL#7Dôt|œ d @_b­7Jo¹ðAóè*ñ{•º-Ýq½î%ˆ s ±I³ˆ¼ÐAô¤ÝÂÑIá9ñ½ @€>Ês™s¡mWöó#Öôv| €ú ¥òóHL•øƒ‘f‡– @€+6E7I.½çÑU€øÖüñA€èƒ,¢¦x¤Ÿ'@´Åî-tÓù*}“ð«ÿ:±ã¹á)û俈¾I81=a^:@€ÝÎØsŒqj³ü¬—Ð-S¢– Ðíì2Ìç&ïu܆¥Ùìò·ÞÞ†E€è^Q¼øbÄNÅ:ˆ~¯pÂ4bmtïHŠ+ó p×€´…Š·Î} Ðc•¦ä¡ ­W pEF¹…©69ý­c€„nw<ÐfqË’m³Ãט®‹œ6g\pIp·ˆ% _xnfš»í¼¸œô–ß$¸ÔùÝö8Rf¤®8ý@¡‰®(Ô~~Ä€.;@Lt;´ÚÍnoH·`Iâ¿Á·¦³P˜±!r|HQ(@€— RÈ45ª2§¥kyͳÓÎ 2íš(™¶VÙ}’êÆ\èG"™™:gÎô„äùFšíÚŽ0%zeœÝü¨ÜߤW©'„-L&@ತ+ Â׆”Ù,ëp–´bb¬ÛÚo† €[®j•âìµ2M…¦ãÇ'†¯4Ö• pæ¶Á­mnïJÛ_þ=.&̦ÎHÎNoÿ¾Iàv´"b¤©R pÚ3S£ü^qÍÓve”o±vŒj‡vŒz—ÆH»S{±Ñ ÓU¨eÚ:å„ÐEIWº ‹ÐW¶XYÍö=û/ü “£rc½W«¶IWïÆT‰ß'í–ÿšÐ ø9®Öú`p©Óû¾ëÔÛ¬R³æ\L<Œ Úd¤Ù¡5ÒT«.÷µt @Ÿ †Ÿ5þ;Sš„ú½Â¯ÎKC6L_¤3Ãs“v G;¾†žØ¨øÙfnüòI«âÆ…¬‰¾PDŒ Þj¤YyúóL‚¶_ʪ ÏHC€¥>%;t»âK—¥¡L#WÇÊ´[ƒ¤3‹[‘è´8b][œ”«6z5¶ÅÉñÓ!Ò"¶Jï‚D–Ûÿ[˜·\&­rtFê²Àö·AŒ4UêK[Isg®ô±‘iK‚¤-Sÿ‹UÐVëÏ'„J7YÓâ–%ù®Uî)sþGp©ó»ém!’¼W<ª+vzg|HnL÷¿„N€èž¯ö!Îóû£¹~ÏÉSU#Ý Î{‹•t¶#ºÊæëöý^ñ¸n‹Û›¶óâr¦Æ®Š;û<Èvã°¼)ѹq‚þøÛÀàº6×weˆy¢Ý…AÈHŸRæôAä.»Ï¥Õ)F¤ûå»ï±ËŽ_>!lSø™Ù¡³ÔgÍnߊE€ ÀY†^D€´›¶6:¦ÊúÛŽ‡Õ%ñµÖí²cWþá๶!@¦©U^È0ËT rökè^¹ÞÕš"¯½ü+½ru[üóýª”½‡¯›‘4/½ý@»ÏšYÖsbW¼æ9'zгãFß?ÂbÄù :ùiæ @? éü†±¶Z}¥Ê'†…¹/ץJi’·ZÅ™ù3Îpö ˆ¶J-»Ì‡Ï^)©WŽ \•P/JÛ/´N3ueœàâ·`i«ÕSbr¦Æ.K2RïÔvö9N‹"Ö¹.Ý ˜“¸Ä*5|•ûŠY;“…_F9¾ö<ã @€ 3’²fÇT‰ßK+qµÂ¡Yy¾ÕcƒKƒ:~ŽbNòbM‘뛞«tųò|j|Ö(wx¯öª6ögÊ8 À%BŸ½6ÆqQäšIÙé3SædÊ´¼vÞÉ®_¶~•q @€K Ëõ¸IÀÆ€z%@ž™aÉ8 @¯ÈÐÉÎŒ3ôJ€ŒPdÏ200¸± @€W\ÖiÛävÆ€z<@Fû–êî~lôCŒ5ôx€È4uÊ^^b¬ ÇDò˜Ìwc @€½ O›†Î`¬ Wdˆy‚=c @€½ Ãå™>×1Þž í.­]vìŠÑÞ™Qmr ã @€€é¡ÙRêø~Z³Ðê8Ï»ä¾ç¦q¤»¤!@¦­UÊ45*—¥!ê?‹oO 1n¸õ†Û nd¼ W Fšj•}vt®Ý¼ˆ5Ñ•¶_EWÚ|•Þ"¶†–‰Œ=GgŒ [dbXQ¨n‹ËßS›å­±56ßf¼!¶JÄÃ#íFa| ÛÄ.;.§=::Ræ+ª[8‹á ÃÛ‡Luìjk•‘ºB-íè*@ÜW„lì,@\ÎœÏø ÀY|så»|ÖxÕHÇÛ£B:Hnž°05t›Ó‡ñuâÏê"}+‚ '†oŒè6Y‰K¢«l¿87>¢*…oŒÜGÉŽÈ ÀïÜY¥4 ¿xîvX±Î&+aY[x¼ŸÚ,œŠØåð©uVü2U¡{sz‹ÐSmóÍݼ()>äés“w‹‡;[ýHß/´&4È=5þñ‡cøçry™ts•ôVGÇ€ˆØeÿÏé K“¥Ø£ÞêºÌ¿,¾NñS\­õÓâgg&6ŠG:‹ß´ˆ­^9VE¬‚ Ào^ìœ_( ¶HÎÊŒ­¶ù6¡A<œ´G8:9ryBÇíV^¹ÊmÒ*ˆ15Šïõ{Äcç 6!¥â7?|óõŒ3œùCo`pýóg)2¦'.NqX¨Û(…†r£ó›Ÿ›'.JMÞ£øåBÑÑ‘®HüÛ“cÈ8 Ào:^Ãk¢Û©µÎJ\f¤®TŸ{ã•bNòâ”}‰‹ )d¼WÊ· IÓt3cÍ|ç[Í5ÕŒ³4¼ÏðÆ€r >õ—² ÒñLˆôoéÁB»ÌéŒ;ä‚ÜWè6_V€t¼G<&&™Å».´Êv™o•é½RØà8×"‹¹@€œefjjvÚ~¡õJ#¤}E¤Çrù:æ r—¥aùWçÐîõ=ña;ÏåÂ*Æ€A?™¶V©Úä¹'£¥çn¿’ ÏŒ5ócÜôó1 , Mi’ŸêÉëwãk…_°znã@€ ß¯€Ô)#vÚÿ»§ßñ_'ìp×€ë{@€0èçg@D­îÉó’”}ÂIóS;Æ úy€x®šUžÞÒ³+ ’°íâ§w?sÇmŒ? @€~ B7†) ¼Қœ=!m‘ã²Àrã È òôÔù)M‰žŒÄñg/£W˜@€ý:@Îðßà[ÓÓ[±Ôb£á ^EÐïdBhahBâ§ž ´ýÂ)y¼™?󠟈dfjæýñXOFHT¹øÅ&O b.ôó‘x¯Vmëé­Xîˬr™ @€ý#@Î “"ÖE뛄_{2@´›»™ @€Èé[±Ô…ž{è…i g¤g§ïèù‘iªUá;>鉸HoZý× UÌ @䬱¤ks»#8¶‰ÿŠ­ÆÕ ‡ä‰f!¯Ù|˜¹@€üÆHS­ Ýîðqw¬zx,µZo8ÈðŽ¡SŸz9@€tþ8áÆ°¤Fñð•HòñØdíSÆ rÞ±T=÷vÇ*ˆz£¸Çð>Ãë™@€Èy”k#Ëí>»òÐ…o þ…9@€œ—ÍÜÄ¥Wz Ý}‰|〹0m½2lÇ•HwʶLgü aKPb£päJÄq®E&〹(ž«4%—)ûÄ–ÑS<@€ÈE1 Ü¡ó[?«*}¿pÉâŸ'T5ñ@€\ÚY¶©–^7¿Øøˆ®´ýBµAxÛpá Œ? @ä’È´uJDžѹ±5Öß](>Òö ­ u›^°ÍVÝóô¸G@€Èe1 Ú¦óY£ÚžP¯8tÞóMâqÇ…¯9+# nb —"en9A…Qv_œo%d²v† ×1€+&ÓUhüó}êRš„ãC:/â¶Ø2×p0g@ ݪ!`züü´Ô}òß$¡^~ä5û‘£{@€0èb¡wì¹9sHÝaaÔêĆ3gC¼räù\Á @€€éQÓë½WZ›`ĸ @zÜ£¯{ÈsH¯ÈÓ¦!ÓsH¯ÈÐÉ.Œ9¤Wä9«ÙÞü¿@€€éó${Æ€ÒK[°’sH¯È0 ½c@€€é¥IñbÌ ½ C¦Çq€Ò;òÔ¤`sÆ€Òãññš×fÕý#,†0æ—VøßùÈ+ƒsýØ0 ½SoÈ«ž…:ÃÛÝ͘ @z<@^°_¤½á¶ncÌ ÏÛ, xÎj¶oOyzr¸¯ÁÍŒ9$à‘×Ý @€ @€€B€ @€€ @Ð )Î @€€ @@€ @€€ @@€ @€€º;@F»\ßÍcøc€¼`»Ä¸åÝ]ž5‹ñ¿óáWdŒàÒÝžš"°@€= £gmSß÷Ü´§_èñ.Ïô100¸ñ @€ #e¥ú‘Ñn“[èÑ‘ij•Ï[Ï300ø c @€= #Ýò o»û!Ÿ @çb™êÒ]2Êw«öž§Ç=Ƹ @È™Õ=dŒ+ôJ€<<Ê… @€Þ ¡æ‰N×1¶Ðãò¢C޲-@nfl GDº†÷©‰vŒ+ôx€¼`³(ÀÀÀàÆ€z<@†˜':3¦Ðó¢mxd´›1c @€½²ò¸‰ÿ¤Óÿ3q ôt€ ²4w>ôÒ'Æ©¼ïzôµ±R‰0ÆÐíòšwqà=O™¼ø¬YŒ×«›Ô}Áê5Æ€z$@Fˆóü o¿çîç¬2‚Fºåëþïñ1S_87@\»'@æÎøÀˆG^rXü¼õ|®ã @€ §&Yßz÷#÷½h¿,ð™)‘ömr=ã @€= ¯y«ÛâC)ÓÖ+iÇu¼Ðs"yÙyMˆ‘ªJõÐH‡qŒ-ôh€HFºoPß7|Æk7Ý>ˆ3 Ðý2ʧDóôä0ÿ¶¯2ÌB¯øÂë· zâù'Æ©#n¿÷™/õ×p×£¯1€ m»Rþõ+3ÃÛî¾õ¦;ßuÏÓã¦Þqß¿\ꯡ-`žb. çõ˜ÌÇ}¨y¢ö—ã~Íyª!c @€= Ò£ƒ2MR2ÌBtÓ÷Þɘ @ùß; êûGXXÜȘ Ày$ÍírÃCZùxÍ«H;Ô¨×9œõNƒà*=jUŠ¿ÅG]çøÎ-ë̽¸-t?C€ @* é—Üeé׬{zÏ\¢Ù|ùºeêîn‹¸¸ª4úMƒÍ-½ñnÁ{#aÝ.^r†ûL#ù;öø} R‘ÁÌËä®ä¸öèÐX/¨,ÃWkU6]÷lÀºŸÕ»#Ayœ¾g~A¡PTÿ±¶¾'z%ÿ)O€ @*Ö·ömQ½¶µbc«÷ª}²¯NkzSÏö4Ž©öàÆ˜ ƺä©RÛÆÇ¼+O7 @€Håw‚l¼”T–‘¨~}Ïü’®{6^«2é›MASçÄnÖ½ødßWÆ9œ¸øÍ~¯û¹ï{Tggç(`°týïÆ§½ B,µ­ACé> ÿIÌ`þ>È/  @@€ 0,Ä2`2ó @@€ @€€B€ Àðû'-žÂ<  @@€ 0ÌdrÐTæ@€€éWšfÅY_Ó´Y¨›÷OZL€ @úKKWVàŸMòú{&,œ|×öOßù¸ü©;¿ýQ›q7=8þNæ@€€¹"3Âòý7«*ü¶*wëJ=_TÊ÷ó{ @@€\qlL ) Y”£.Ó•y¼\îþ²OWx̉]•¢,p}Ù«ûÁÀ>­îkäEüÞ —æªZ•MrzzàŽÅµš]Þý¶.Þ£+uysÉsbg·ÔƒÂ©øVñ;éÏi‡ÅÎèáUØÊï€rÑña“œ¼*ªAü*º‹ºØ»CWæñR|«üèéÐ8$t¦NGÏé¦)â,ÈyN­:£IñÓ×”ÂÒ”ÕV‘™ñ™ê]ª"§×nÏ/ÊñlQ:¿^cÿ‘±Vø2¹]8I€ ÀEˆ¹ºZ£.v|+¸Ìþ=Ãnû•~-ö+â3-5ûT?íû(³ŠX¶dQŽ{[Ô>Ù×KúXùˆo—»¾î´Ün;¿w¦f×Ýxç-2úW7ÞÛ[€XGfÅMÕçæÆEf:¯Ö(ò=uïåPúøiEd·VŠ“øÛÑâWá5Nïë+]Þ”„T¸¾´Óg¿×F¿½®ë+ùN¯z¬——2&æŽq¶OŒ÷-Õ]Œs/œ»6)a¿ìx\³Ý×Im‰sW3Ò Aù~ÍšÆÓßg¡nPNPTh}²½›Âk?ˆkÆ4Ú}Yçðqtƒüߪ"·]×Vk>Rìd:“ Ë9JwvÌò4Ç•¡Û&GmPº?ßjûCoTI+!ªb;Œ?Ýj^©•Ñ’6¦G×Û}–¸_8î¼:t{àßFéD,ö€ @ÎâºNYQëð/c­Ã?5»<^¯±û¸·é¦¯t}S‘ïß´3 Þ6mÙ éѬ‰ÊjõDåž.Õ Í>•ÓªèlϺ¢Àíõ.+¶0#<@,4u*—5êb]©Ó[1¶ßw?ju¾ø8—_®ªÒaedvB«ð}h•Ó;檺ӛÕmRÒÓ}sÕŽÑ›&x+UÌ€Á)mÑ”;­ŠÞÔ½£Û¬èMq²ùñ±kV(vùo]Ôä—ëq ¥ãçGéö%¾Åî?>›U!ïIÇñÎÛ#­ˆ„íq|¯û=êBÁ @`ò"ÝÝ\æü¦´9\º(Ð&9}ÙY¯«kÕúJÇwS»^K< ;ß*‹i”u)+ gí9$tkÅÏg„gÇHw…DìþU/û†= FÈ ˆ´a®ªÖ(ò}[Ä¥©ç¾..K]]oÿir‡¬³+@¾Ó–¸¾"…ÄåFHR›í©91«“eiQ¥ÛÒ ÕÎG‚vˆMÌ€›ÐO›¨*×-Îs?$](]Ø©]!"­ŽH«' á{ì?’ŽåM< ;áž©(ÌókzDÐ.b>ÿ®’4+&§d„U;þCQàÛì—ëÓ¤-uIžµÉ:ru²OŽgkH…üÃÈ:›ï“ÛeR˜œºØG²¤£{=×Ù2&æ~‹¹¥ º±üRCäÌ÷™«jUVã¤cvƒvú7¨‹]^ .w:^cÿQL“ü«¾¤ûÞÓ›Ó[åGƒË\ÞðÙì»o¼‡RÁ|˜˜…‘³¥Ç¦‚ËÝ_™\¥5W×+ê¥ä|!â¶^Ußj{òRŽä Ûãü®a·Ó?¤ïñÎ^\=7.e¥_®{»Ïf–Y¡ž‰Ì€ H÷åµ»ˆË’Öö\áÐìr}9jŸý'Ú¯ç\×…ofÈ‹èm%Ä&%jƒ¦Äîô Y Á宯©ŠÝ_.ẗܱ×éý„Vñéû9 € ÈÙ÷tˆß,LN[y&.Z‚‡{¾Ó(þÇm}èNç5Æ-–Ú*]Ï™³!Á1CS¨.v|ÃX+|Ùóû´%ÎoÆ6Ÿ9²7¬Úñ}Í.·—¬ŒëäË’ÖDÖ9|Ôó½d­±v—V7z®ZHÇë.LJ]Ùvéñ™±Mò¯Î=jWÚ×áµIQ9+*3AÚ”Þý~›äËTE^Sº>§{uE_iÿ²Ðý9÷ ¾{c›ì¾Ô•y¼h©Íí2ìvüG÷ Zñ­Â·ÒŸo³«e>LŒt –³¢6Æë+Ý^û)B„œVEgÿxzÔêdÏ>ûâZÄozœXuÊ{³ªÂ:27ÊR{ö鑬é†íFqiòjéFuyzÒZsõ>Õô°Ü(ë¨-ÑVÆí‘Ýï]¸dyP¾ã¼øåKƒò]ŸWzwXøúê™óŒóì9žYú‚ù +–X·D‡×8½/››x@8î³Y]öcThj4®kCwÄ6‹ßH{ATE‹¸® .˜•/……ô¨VÏU‹Ó šŸ¸2Í=3l‡{¦!oNÌúDˮϰIIZåºJØÅ|˜˜©ÖvÊ"ßVÏ,]±¥®J'‚5I·K?QY£þyPtE†ºJ7+*;6´Êåï1v_Fìuü ºÑî éD+éNÛ´„µç†Æ‚Ä•Kl’—/³ÐÔ©{~Ý&uÉÊäÿ>¦Õ}$ï¢e¥´"³ Ú~=ó @`‚`]êÝSõ¥ú ¼€zm©×aU‘Ïe_KH…Ç˪"ç,Î9Æw¢j¯:®IüZÚ?Yçðñܸ ‰=Ór[¯+ŽáMýïþ’¤6á„°$lË,ƒãræ@€€¹ä‹ }6{5K÷Œ„ïuüpn\fbÏ×'‡Têl’cÖv‹Ÿt…È©3›Ö…NU¾È)XFz€LÒVk„%)«|sU•>›µ% W¥M )µ<ý¸VK/Ò¬°6nŠ=³G¤QqæbÃZµcFìÆ ×× ÕÎG"÷Ù×"íy‰!Çð 0ñ™¨Ü£¶ÐTèÌUµªîX8—°$rS\“x¬ÇQ¼ ûÅïÂö8¿§Ùåuhføcoß7'vc‚צࢉ©+¢ëí?KjŸïÖôÞd²ßä‰î«mVNö›ø³ @p•ˆ´éÛ1CSà“íѸÃýï¿}6É)V‘›c|sj$¥/ëÞÛ1;fc¼w¶¦ÔXkÿñ¹!Ý÷á—ëÝì\ì¶>|{ÐNÿ]™û«>›5¥Žº ûe'\ÖúWIß¶Çჸæ3GúJ÷‰HÿŒn¾‘>£·ý»ÑcB+ÅwN_h¸Kx~ìø±Ì€ÁÕfœÍœéÊBßý^Ùª2›ä´•Áån¯Äï—•6GìµÿDú ÊAYç¢-ÊÊž+Îk ÛC*Ü_n!½.EE\“ðmh•Ý?—>ûVõÐJû÷}²ƒª…%†œ)!™±^YÚ]²Ô”U~[}B*ßr[¿¸"¤Üõµ‰±k »ß•î9wÈu¸î—ú áˆô™ŠÙ5æšš³.œº3<é€ðýY›Ë»GzdK––ša®ªS½ rn€Ä:1&ÆÜsÖB÷̰òôÄuóãÓ–Û¤è¶lóÚŸÒ!ëLûïå€Éâq]™Û«¶©‰k¼³U‹rÜÛfG'¬Rz·K· kþå¼:2Ç²Ç ‰tÌnb›ü»sO·Š¬¿ôÉQVå{·ûä(ªù~Mš]î/xeéŠg„å‡ÏŽÉHU{>ç½Q^Á|˜˜³îé ß\߆¤söHgMÛe©­ÖXGmŒ—ö|„U;þ#­Çfs)V<»"¢{5#¸ÜíվިíyóyOqÍòÿ$ŽK§b© å­Ì€)H !Id'£öÙÓh÷el“ü«r§# —-?óøU½R_áønÏøøiùã‡Ò‘¾Òû&'gH§cõ!ÂE„F@€XhšæªÝZ MZÚ§qúRÂÿFE·aÛŒþÛ‚jbºâ$¹]8Ñ Im¶§&i‹CÏì iPJA"íûˆÚ'~Ñ3.RŠ'ÃjßO=( Fr€ôÅ:jKôܸ ÝÿneÜé¸R›?7~uÊâ¼À}¾[4ån™†RÀt¿gо(ÔeMض91éKu¥ž/FÖ9|Ýhÿ¾9‹÷ÌÛß*“·’î9%…Œôø•ôÏøVá˜r§¼™ù ¡2;zcüäàÝÚŸVJVÆœèÞN°ê‹´*b®î>ýª%ÈÚ˜;/>#uv̺$›Ô%+§†ä…Í[“<Í°Íø¤S°/ó @0ÂD i†¼ˆÙ1Yñ}EÅìè Ϋ£³=6†îôÞ\´ 1#MÚ+rî%ƒÒg]l¬p3{>J‚íÒ£³,ÔUZ·uª]!öÿÐWÚ¿ï´J]454ÿ¬K'évéÃkì?:w/‡ôï†j—#†jç#a{œßÕ–zv^cÜ2-tst_Á!í5±Ô”„L)0LTVkœíÌ|˜h€LTíUlsoO< û!®E~T:+p‡w«¾ÂåMé$,i¯FB«ìøÌˆœè3«uªÀ<¿Feó«Ò±¹:Õ*pG@ýÏWWêT<}¥ÛkqÍâ×Éí²ÎäYg×ÏpÒ?G¬e>L0@¤›Í5%Îov;¿Ó þ§·€Hj»® ¬ìÞd.K\³üë‹9RWUäÝ!ÅFÏø˜·>1¢Æéýsó•NÈ’bå1»æ@€ÀDW@¦„îÒ{eù溷‡VÉÿÕ3 Èyl )œšn±9¦{?‡tªÕ…âC]ìñ¼…¦VÝ3>fEoŠ ÛãòöÏ/(;=6JûJ³÷W2&ÆJcíê˜-Ý‚.ÅÁ´Ð qÒãW=V>¾÷Ëõj Êh\˜»N_aÿÁD•tGÈ^U\“xÞ„VñØœØñçnZØëô~oï—nO—^—§GmrX&î`>LŒMÔ¬€”ƒB§÷&M©Óªèle¡Ç!i¿ÇDO¦ýw‡®Ìí5»tEáT}‘AÚ°µÏîÿºßU/ÿ20Ï·Y‘XRáñŠ´]X’ºêÜ}sbÖ%%µ ?œÉíÂÉÉÁé=¡U®o© ¹ˆ€É™®´vJn¿—n,_røüS¥OJ.ÊQ—ŸÙÇ‘‘–Ü.?kãÇ£v[z=²7´ÊéHoŸ-=~%íý°Ð4+¼³Uåªñó @`‚{@Ü3Cw*vú5ŵÇÒ.! -â7scW¤>:W]¯Œ¬³û¬{ó¸c†1ç|w{X³c¥“®úúlÃn—·¥€™\¬Ÿî’Î|˜è&ô3wqTè¶Ö¥úŒ„¤6áÄÜØ5IÝ¢(px#lÇ‹6++/t+ºMÊÒÒq»}}¶®ÔóÅáÛÊBïÁ @`âræt«&…džéQ«Ó]u'£ÎìõH=(œRyž¼Kß½¢a¨>W:½>7vuê$íÍùÄ65meÏý%?ÛÒ!œ–Ä­wËÔïä,# @º¹¬ ß&­„H|s½Z]ÖFäÚ$/_Ö½Ê1'vuŠq¯ü³Ÿ6« º2g†ï0ö .kŒ[.tl¯´§Äu}HþS®Aà @€`¤ˆ´aÜk“v—¦Äëðü„5)=_s^™£)ñx^_åòÖ¹QëôÁ4CQhoŸ9;zs¬ºØ§]ÚëÝ`ÿYR›ì‡¤â÷çnFo¾uÉç3#$@Î'¤ÂýÕó­bØ¥Çgöõ½Ò#^²´„µöË£²§ê3cç',I×W:ÿýt¼ìµûTWæð®¡Úñ=µv…Ì€ÁÓ÷ÔÛ}Þב½©…Nû‘Ù}ˆz·6rŸüó37¬‹ßÆ6É¿JØ/ë~ŒëÇÔ å­Ì€ È$]‰Þ3Ë·î§»¤8émïÇÏŽëmNzlP–J\õö9ÓB Ϋõ;¢öÙ}¦.òx^–»>¤â§K Y @`‚FÎ ”Ž¿•öuؤ¦§_è,)(ten¯ôùÖ!¡3a¿ð]p¹Ã»T¥SCÏÙÛç#]]Á3IWª÷ÚP㘡ÍïúìWƒËÞs\æ”Í|˜˜)þÖvqÍⱄýâ·¾¹êŠÞ"Á1#j“ÏfmI÷=æªZ•¦Øã¹Äâwg=FÕ¶1Öã]y@Lv[o¡®ÒÎÏ‹¸ðÞ’–®Ï¬ÖHûK,4ÍŠaÉóŒ^‰Ì€‰¹}Üü§,µ%!óRVÎ ßsnL ) ©pz[Ú£Zåò÷91+ÓWFeËÓ#6Û¯Ðæyg늶ԧ”u÷ _<íôÔ8éseñöI+¢³‚vºÒ’WMëû~s9dDgq:4Þm¦í$]^Ø4CaØÏ7Ÿ·9eDæ$·Ëz\(œP¸¾h®Ì5Ú&jr-T MƒÒ7×»Å1# <¤\|; W,OØ/~Ó}{º®Ôé-yº¢hFø–Hi…cN̺DéŸ}ˆ¸,i­*_$@˜šùÆYþžæêz¥óâ—-“¥¥f8¯ ß¶Çé=éfòŸrÕ&~?ß(¦þê–»oº×ÒÇÎB]§Òìry-rŸÝ§½í ‰ª·ÿ´+:’¤¸ðØR˜Ò!;”ï×Yv{R;Ä“Ò׺>÷ÿ¤ÿιb¹9fªÊ-ù 01O;Ξ-OO\ûÓE ÊsO½²Ð‡øou;¨)q{ÉPí|äôІ18íÓT6:®ÔI/ Úéq°¯ñËõ«ýí½ÏÜ3æŽ1×n÷tÝyudÎÙÖ+uöŸ¨ 8†€É¹ÐMèÂÒÈ,m©Û+)âÉèûÏe©I«§ê3c§ŠCܨ®/чT¸¾~¾{Abí¾œ£Ÿ"7»Õì:U¾|¿ô5Ãn§wÝ7„äKŸa±Ý8?qMÊT}¡!q¿ð= â²VSU/~¶Çù½ävádR›pÒPíðáüÄ•i+ã7( üš£ëí>»ÐÅ„ÝØ#jľõ¼ëßÝ7„îìþï,Ú¬)Õ•z¾èº.4›Ð˜¨ î³çËÓÖ9fÄdnÜ\îñ¢¶Ôóù |ÿéþ]™û+¡U.oÏŒØ-K‹É”ö‚Dìuü`¢j¯*´Êùí‹ ¾hvyê¾)Ý~EâúÀíÒ÷Ó¯q:Ó#Ý„žvøÂ± ]:˜Ðzæh]ÿ­µÒ^ û‘Ùó½}‘VBwÔKûN¤ ðÊBßÖㄦÇJ3EH=$\R8H—êÊ\Þ´K׿%µ '®dD ·õAe§ñê~ @˜0³[ÌnOj·½¤hˆ®—”ïò¢¢ÀñõK—Þ$¾?÷kÊ|»&æ@€€9½jaØ-~r%_ï±,i…EÍÈ@‘¢Ãyµ®`^|Fê̈õ >mw3È€‰o¿q^¶õ¯³£Ü~sÏŸ~Ë| —ÇŒµÂ—]þ­+uzsñÿ†ÄÂw½½7¼Æé½g\¼FeÆl W$õ pÊ[@ÝLã¦ØE9þµIm?zeÜëôá mHBW|\Ç\ ý´É\ìÔ•¹¿ìº.l›ÛúÀÊÐ*ûjv9½i®,½ë ûg˜ d€bD8-õ Ð9ϸhÙ¨Q£~ÉL *p‡Oëï¶zø|?絿¹ö£7š½!ËgØíòö#2µ÷¨Q£~ÑçÏx«Ù˜€\YCh•xdVˆõlæ@€€éLjNœÿD,»¯“ÛÅãÝJ'dY‡'-¹éO÷œïgœì7Á"åà™×½3…\æ@€€éTìt}A]ìøFx㩇„NIÏ׃ò½:d©I«íWDmòÜR0ÍPö§i› ýŒcîsb‡mƒ¡J8bé3uá*­+:’Ûeª"»#ª"ç×ü¶z·k>ÒWº½æ´*j³¥¶5¨Û®9Šï~ü¦‹ù9ÇŽ;êúû®¿†™ @~#ÿ]ýˆo–í›Pk¡Ù§êšfÅ}–3™¤_I+"sbÖ%õ Gí׎ùõ-×3#È w]‡ý!N÷ÍUìÌóo°2fÅJ+Ýña®Ü§¼g¼û~ÿF˜[ºùîþ˜F»/=6hvYGæÄô\õèö7Û¥Þ\:@€`ºç™{ïïÏIÜ/;é±Á§ÎBÝ ì->$Ì2Úð» @0ýyêÿÜ_’Ü.œ—FfYjêU}Å@€`ûßYþµ?D:‚WWæþê올øóÅ@€`g;îÑäŽ+cݧæªZՅ⃠@0‚=)ì±”~Åyõ‚ìiÇ'Ÿ¼Ò‰i´ûÂR[©#@à¼&¸?û안tã¹ó꼋€ÁUÊì³ßt¹ñJùgI„Z…ïR:di‡„ ävñ¸ªhÑ~‡Q›îyÖn"s @0‚üeú÷˜Ýjö«‡ç?ô—{ÆÿáŽ'Äûþì¹Îfgb›ø]ÇGB«ømZZ†¥¶5èQ»Õ£FÍ ŒpãlÆÝZ)ûGƇq¯ã‡sbW¦Zs¢¥ç°.ˆ @€Q£7ú—²øYaÉýtL¯ôH—¶ÔíåÈ:ûO"ö:üËu]ø¶ÅÛ5Ϙ©ùÝ¿ùÕè›G_ßå:~÷Fj„tEAdøé@nDO=(t†íþi¬?ÑWÈÞçêÇÜ1æ~ÿF˜g]'<Z!¾=˜'c%w'Rùý ¼3mwöñ¼ê"ûÿÐì‡Ø@€`„™aå7˜ñ!=’e›ºtÅDE­ê“î]ÂŒã]&üYW"¾6˜â³Ù»Ñ¦+@Ì•û”w?íü s @0R6¡ß4ú†àaðä°Øß"³[ž9ÎabÔ¨Qc˜‚‘ 7¾ÁP%¾3˜+ ÒE…3#¶ÿ4M3 Aþ×úïÑ ¯¤-@‚ËÝ_yÆ·Dó»û'ÜÅ Œ0f·˜Ý”Ð*|;X²(G]>Îa] '` al¢fûx­·Ío¿¼Ñ–>j¿&€ @0Âx¬µ]7Øw€¨Š|[‘gøwÈ/™‚DH˜<Ø¢(ðo~D\!ȵ̀Áñ穽Ç;ÓfÛ`HB«xìqç¸ÇÅ)̽&ÜÇ,Œ>mÊR ƒ ’èz»ÏZlçꙂ@ž47|(⣛o¶mŘ;Æ\Ã,ŒŽKÄ Ex¤;•;…ýs 3ç2#æ,aÓPˆôØ—•zÚ|f@€`góè¾›„<í.ñ¥¡ kÝt³ @0vŸr§Ð¿ð.ì)¥CÖiî9a³ @0‚,Þ&Ö E€$µÛžúÝ7ßÎ Œ£;ú¡âÛCµbá5áYæ@€`„0»Åì·q-±¡Ø&áëÅÛ…†I¾–2 #$@â[„ï†ò ¶‡&û›Ï’Vc˜ õ˜lÜýÒ&ôä6áøPHÚa¡3¡Uv|‚û3cÇe6LÑx—g•öa e|ôß"Uä ûFÎö#D˜+•<¸Äî¥àRù«i‡„a Ý’;„NËæ­bVL€,n^ðp‹Žs¹®\ɬ˜§e¶ñÃ9>¤Òç¦û1+È€‹¬?¶ÒL³`VÞÿ!ž˜nåÉœ .`‹míuw]w s @@€ 8U¾¼‘ @EøùcîóKæ@€ÀD8§Û&×IjNÜ;ñÞ»™á–a»l¸ˆt1âÜP+Gæ@€ÀD¸¯¶]9œáuN_˜Êœ ƒB_!ËìV³k™‚«ÐÔÀÉOÎ ³rïæ½aaù°ß›av†!³ÛÌ®ñ\gS .”ï?­@Þ*Oš§î~Ýw“¸#í°ØÙm8LJD‘'¯e®†!Ç¥ "‚vˆ{“;„zþ%>¡U<ê´t~ª'¹bÉp޳D$@ G‹· ûúú‹|ê!á”Çš…›oê‡]hœ^NõöZTøéè›GßÀ| 3›ûàï¥=çûË~J‡ìä­{XèŒk¿‘ŽØi°û"¼Æéýàr—7%ú —7•…ž‡´¥n/Ç6‰G¥÷H—šÝjvó @0WA¶Ë«‡úîŽÔCâɾö—Ä·Êúåú6xnôj0WíÑLTÕ¨-4ÍŠ™¹QšF…¥¶5ÈRÛ4Íá›ë·oñ6±æ×·þeì'+æÜù˜ð7f @€`ÑÉÛ†"< »ßÕW:¿¸Ã¿Á~EL–ýòøLUÑ¢Ò×W©Š »Þ펒ÄýÂ÷Š|ï6)4ÌÕ{4g¢ãç&—/ˆUd>´Ô´=íS¤¾õA«¿0gÃÀè›F_k¨ßŠñß¶¨Ù\U®ë=&¤ÐاTzwøoókp[¯*ñܸx·çÆÀÝÒk}HowÉVÜþ¨Í8æ @€`ЗËßœ½bgL“ü«ÄÂñÀ<ÿúIºjíŇ„µê)úbý¥ÄG·'Üru£Fú5ó @0„žu0N_.¾5(V:¼ge\ž6=t{ÄåDÄ•xÜ%[Õ ×3sC(0WÖ0ña¬µûÔ:*}É¥>>Õ_°w¿ñîÇob憹ç„Gâ[Ä£)e§<³‚*‡"3|yÚPˆäžgÜžeÞ†C„Übv¡Jöá’ó â´Ê° @€ýϽ¿ú­ºPxa $¤ÂíU€Î2×0Ó³¿ÅJ: |°=°– @€³È“憤õs€øoón™¾ÝH€ ÀÙ{An5»6`‹°»?÷‚¸gîªû?ÃÜ3NOÝc;+4®YüOˆg–ªl¨ãƒ @0ÌiŠÄÃý B #0žõ¯ÐŽ÷-Õõåî§]&0WÔMôìÅýqA¡ïMù`ÈmÏôÛ?9ê €.þq¬[Í® )Þ¹œÑW9™¶)¶?"ÃBÓ¤˜fØa·ê»@R §\×…o»œñÎÖíêësµ¥ž/ÌOO½˜Ï!@ ccÇý…r§¬±?D"Ý)b“’ž~iÒ´x‡C_vIû@.ö³ÃÜÔÀ FÕ Ÿ÷W„( üZ.iÿ‡ºJß*~ÛÛgÅ5‹ßLÒ† Lˆå¢qðX#[Y'ÿ¸VA~¸ØU kã–h}¥û«}}VR›pbzØ™°&æ)ËG#öʯxOHWÈ|¦¯t{ÝscHÁ$]µöÌJG­ÚB]®[¸,]Uäs@X¢ÏõØPÝ×g¨ŠÝ^Е:ý]:–— @`¢¦M¿(KÈ3Ö‰Ÿ&wÈ:û:êb©‹½åû7Ä4Ø}™Ü.“6«ŸÙ´~PøñϽ‰ØëðOëÈ5I—ò8@€à*5úæÑ7Œ³÷¨súüåÒcUýµGäbiK<Ÿ»ÔÓ´W¹±ãÇŽZií¶[|OZµ¬ ܱ¸– @0rWDÌfé¦ÏÜ*V'´ ß^é£Yâ»ESN€ `EdÔ-ÞrËüpk7åN¡-¥Cvª¯ˆˆn´û"©]8)Ýf~)ñ‘Ð*[˜”±¤g\LÒm޲Ô4+#wUdôTÿ S‚¶ u†ÝÎï¤NÇH\‹ü¨"ß·Åʘk™g·<:ËXçø¯‹¼Q½S–µÑRS©³6iš!/b¢²Zc®* vX³ÑiuÔf·õaÛmS—-·Ðœ9a‹ @0’þ7jÔO{íÔÏ‹[“â5E¿KîêÄŒ°üðÐ*×·.&B’ÚÄãRĤ”’NâJ< On?{¥E •°jÇLÒn—nS'@Œ¤ñ.¹à> MFYès ¿ö‰tEÈ©ˆÇý·ÔJg ŸEˆ®ÔýÅ%‡ûoú²È§H¯,4u*ŸÍªŠ¤~º_D[êþ@€€9¯™[¢íWÄmt^cÜ¢¯t{ãrŽö•ö‚,LZ¾Œ @@€]üªH£Â&9}™O¶¶$|¯ã‡qMò¯u¥n/ëÿy¾‘6§OTUj ÈeÆHƒÒ\µWe¡. Q9¾q¾‘NÈš¤+ %@ WÌ&%==¶YþU_b¨vzÏ\]§"@ ýbfDnT|‹üho"]xÈE„~%,I[Ûd÷Ź”ï×L€ @úu䆸„ýÂw=Ä+KWL€ @úŸn·6²Îþ“žÓ`÷ÅäàŠ`€Ò¯¦êóÂÛd'"öÊ?Këq“zàÿ M“‚ @@€ô£– ÇŒèMÛÝ©‹¼uˆt¡Ïfÿ½÷ZxOg~%]Z85´,Äma{\³Ýé#z½Ö-Üþ˜í·2È€‘¥%¯JéòÙ¸p7³ @@€ ¨¹q™‰nëW¸fØd1 È xh¿w×Ï1šy @~_ˆªQñ‡ Þ“™dPp /„ @ ÉA„ @€ @@€& “OaA @€B€ @€\½ÒB€ À`HKÓ*e±¥¶RG€ À€¯€XE®OðÎö¯Y´rÉŒ°áWº"Â= >9®4æxeiwYhªµš&ÅT}^¸…fŸŠ`: „ @+vŸeÀdæ@€€!@€„ @€B€ @€ „ @þ  ÿIÌ€B€ @€ „ @€ @@€  @@€ € @ @@€€¹`€˜ûZ2@€  @@€ € @ @@€€!@  @@€ pµȽæ‹,˜„ @`‚!ð‹.¿· F^€üÏ£ökŸòØ¡lªF@€`„ÈpX‰ @  ‚«<@¬ŒÛÊBßýÂÒ% h€¸® ߺä9±S½Ë»ƒ‚ )!U:÷LCÞ¬èœØB€ @ ¸˜¹þÏÓƒÅfmÓ_fì&*jU ¸ÿ¹ýo·?ë_¡ò™èC€ @ @@€€!@€‚!;Äï_N€ @€ ëyøöñ~ @@€ pÙRF€ &ä׿à÷ @@€ @€€B€ @ÏÑ 0bä¼Ì™„ @€~ ßR€ 0!¿ºé¾[  @@€€!@€„ @€Ón¸ùþ®)!@€„ @†y€<3äYωÌ€‰»nì· 08rã @@€ @€€ÁÕ ‹v 0ð®¿ñΛ  @@€€!@€„ @†"@Šƒ 1rÏx÷ Ì€B€ W³nº‰ @€.?@| @@€À¤ä×7 0˜RD€ @€ cךÝðÛ§  @@€€!@€„ @ü@€€ ˆwáÐÈ3nÏ2@€\mÿ‡5êÆ® !@€„ @€Ë € @ @@€€!@€ @ø%€À ù¶*=zànIEND®B`‚calamares-3.2.20/src/modules/locale/images/orig/timezone_-7.0.png000066400000000000000000000273111362604102500244350ustar00rootroot00000000000000‰PNG  IHDR ™q*UüsBIT|dˆ pHYs¢¢EÝ1¢tEXtSoftwarewww.inkscape.org›î<.FIDATxÚíÝw|Õ塸q:ˆvÙÚºÚêUkýU[Û:[[†8P6˜sN€HXaf„ HHHÈR”½7ÈÞ{É’®ÛiµVÛ«­·õ¶Z[7¿|ÁXЍ€$¬÷ïWéá$Áç›?Îçõ¬:¨Ã¹áªzÝïl˜¹3åTú^·ÙuêÔù‚çpn2D€ @ ˆ@€ @ € ‚@€ @€A€ˆ "@ D€ @ "@ D€ @ ξ©—².ã¶Îsú}˜ï¶›/@ä#¹!vx¯ª°øì1ú˜ç @ )@Œ1€A€ @ ‚@€ @€á Èetž7§÷ì´5öØ•<-º´UéƒCfî N^€4ÈXÞoðÎÐë{C†ý(ò®Š}á·Û*ÿ­ûËûc'idGÊ}…Sux0sAtq×ý)óºî®Žô…]ï5=²Ï @8ô ëÔ‰¹ª^·6g3¢[SÛ ù@Ï™é«úÌ黾zÕ±„Èݹ óF7¥‡‡š˜2¿ãO«#$wUä÷ÆrnGGÏ_~Ó¥W7ìÝô{‹ò:í?7uAÏíýWuúMåãáw—Q•ï ¿•<5uõ±DH—‰Ñ%ý–výQò´ÔU‹~yX€~ù­ín½)¾<=}a·½‡Ÿ{¤ÔùÝvÝÑoMæ‰_6øa›Ï·§¶(~xÈÝ¹Ó Þ"@ gK®¿÷k×·(N¼#:µ(wuÂÓ‡ÇÆÐª)Þ÷Òá¯e.‰ÿM£¬eÙA4)š>0ua—}Ñ%‰ÿ[Y9úX.ì<1g~ó≥''r†ºà+7\øõ»3Cßë>/³ï¼ÛÊ ¿vxhTì ¿•±¸Ëþ„‡òfŒ‘}áëãÿØwn퇖FíH©Ÿ¾&Ú¤pÂàVƒÚ(kõΊ4)œ:¨hS»?ß«óøÌG?86v¤t]’¶ çަ'•T_^(@ g +Ô°åÀ¬±)ó{oÉ^‘øËaûÿ•ïü¹pc»Fä&Ëž_¾7ôvúÂ.Wo îöÈY™ø«[Ûý5om‡ßß“· ¿:Ž‘áåcƒKß½Ñ|uÇ'ïîÿhÿŠ®“3––>~uà–ð?Âà &×Oß~Cl¥{@ gÔ’«ë_ѼpÀ#E›Úþµ:ÊvŽZ´¹ýŸ‚?Ü÷·”ùÝvwŸšºòà XѵÑ&… i±>#¸¡g^Á†OÈ*{,òÏÅýw°ìH9r³z‹’‡f<šô“`|éÎÐk½fußñíð tÏræl6¯ó&í‚%T½fvÛÑqlÁŒÓÓVv›Ò{}døÀ‰Á‚Ù+:>Q?csZýŒµÑÄqy³óÖÄ??¦hJÝ&§¬*Ûzã Ç¯•~ä&õൠ`îÊYšsxP„*+Æô[Öùgß³;òZp7H›ò’‡çÏÐkVïùë:<ÛwnŸM²WdŠ–Õ™m†<0"yZ§½)óÚý:º8òìý%‰3=GÈ™³áüÊï'/~ç&ómïÎ84-_ìçNŸº3{iv“™Á†ô'ƒåXi »ïf'ÚŽ,×oi—Ÿf/ïô«üuížÏ[y¡boèí£”5pKÛ¿æ¬ìøDãüyÕ?#¸)½Û”ÌÅU¡ñûwBåµ!»Â¯|o“Õ_ܘ~x¸ÜÕ΀„±‹zÎèúX¤¢ýÏræÌ~´?–Ó¦b‡•:¿×¶îÓ2–7ŒnNo¹!½Ã˜¾Ë:Oè¶©ë¤.ÛÒuüyÉa§c¡räѽÁk© ’w¦-ì±£÷ì”u½g§­é>5kqÖòÄ_¼ß¿Cö„ßj6hüÁ²‚;DD«oOß‘’4¡ß¢øIóùWp£zÕŸÿ7x-8íjÀ†øÿi3d̰àç…‡UŽé¿ªÓo²–'ý¬EÉ#erFÍ~ÜwÍí=—eœœÛÊw¤ÔK[—É[?cM4ØÐÞºlô°äiË 7µûsùžÐн¡ƒ÷†ToJã© zn.!l˜¹:³Ù ñe-J.¿·`Ö€Èð!cf.˪>â×E„3|ö㺦…GýîÖ¸3{~^ƒŒ ''íG˜R¶+ôžeVûBoç­MxºãØÓ’¹¨çŒÞ"à ¦Výß88;#¯ÜÝAž@€œ!.¹®ñ×ÐgU48‰ªÛ”¾«O4<†ì ¿ÖgNòöøÑ ÓtßU²-îåÊ#ö’³Árª®“³E([?cý»Ë§‚»>ºOÍ\\.X}*V U1óäÞ¨ÞîStúÙ -‘—b‡VŽ92>Z/MžÜn›g €9 ]sgzóàƒ{óA ¼3òêq…ÇþÈA[Û¾ØcFÚê%£rV&þòý6°lèðÇæƒFWöœÑkÓ¡Íê‘Áñ¾ÑÅ]÷µ*}¸¼aæúŒ.£Kn ý£×Ì>ë› ˜>0øwõÛgÓ‘ß+øÚÄñKåÞ>s{lÏ]yƳ@€œ†Ë¯¾Ñ3ØûÑuJú² (Ž'@ ÖÇÿ!¸å¼ó„ìe»Þ?^‚(é·´Ó/‹·Å½ÜxþŸ§iE^‹{`Є¤ñýçµ™?=si‡ß¯Çú¶*[̈T%j‚[ÓvqáÙK³ÛV&Îñ| §™‹®½ãk?è½2ÚrðÃû"Ǽ÷£d{Û—óÖ$<>ltð¡?<,jéθWNdéVæ’öOUÅÆóÁ¬Fàð”`ÉVƒèÆŒÂíþ|äוíŠûgóAJà €9S–_5JmÚ sczú£þ»lWøµc † ºOM_Q½O£ãØ‚ÇúµÇ+oM‡ßÇøvŸš±¼ò(³3=¦§­ 3cùÕ'ª>¨÷–1ÕK_—qOîÜ‚>³ûnN«ªü€¥XûšN|Я—¾*³lWèê09ÙR±/t ÙÀ1->h[Üßßs×ȶ¶ÿ×làÔb€9Í}ñê\y{¯åÑ#?¼×ÏØ˜Þ{vïÍGE°#x­hsÜ‹wå,É9tJÕÖÔ„±ù3;<”;+yjçÇÊ÷†ß ¢¡lWøõàèÝœ•ž´-üÊG‰`£zÅÞ÷?¸ß²Î? ÓÜ×îèÛä}ïßÈØ’–¿¶Ã³g!ª>ü§/ê¶÷þòFF†Ó º&úÞ¯Ù”?fÐä6åCj>hèÈ„±™ RçwÝ]¾'ôöÐ}á5±<«ZÎÊŽ¿>ò¶u€9Ý–_Ý_Ùíƒ.lQ<¡´Ïœ¾ë› _v´Ó¦×8^AÆân{mmûÁ HMÇ‘ºMMYU½E€ @NC^õý+nï¹,z<·’&EÓæ­éðôí9xÂU ̆§fu›]zx„Èià’o_ñ™ØâfÑ+ëun~²âãß{G6¥už˜½°×ÌÔ5ÉÓzmè93muʼ>›{ÍJ[<-º4nDÙ#͋Ǖux°hj0³’³2ñWÁQº'#B‚ý)™K:ÿ8iBŸÕó§ È)R÷‹uÏ{wßGƒ+.J™}ÿOÒÆÿ¢QÖŠì“!‡ÇHஜùy÷—| íˆÁãÇåÏn;²t\leåè¦E ¹3{~^—IÉ›²V´}æd͆Tî²+üZÒØŽK={H-øÄç>ñ‰fÙ÷Þ—6/²µÇäðüÞÓ[ÿ¤î—êžü]ûa÷´%òbÕõ·ûÎí¹5¸½:îÍŸY?:wVãüY…'÷ä-ÌK™×kKîêŽOÇæ–ï Œ‚#—bûD‚ ê5u|oîªÈ3'sLc.‰ùô±7«N:ó; @f7^}m³œû:d>ùiá†ÈŸJ¶GþÑqtóåmË›N n2&T|oŸA[#/VH²;üfÕñÐ|PåˆA[C¯6-5ôÐk;RÚŽ(Ÿ4>v§G̼¿ü £«2?8@æ ÞùgmnBÏÝ ÛÛþ=ñ¡N'm¤îë~ªß’ð¥;ÃÿJÑzˆß5rn/±º¨îg{Om)Úþ[öòг}¦ÇnMz°ÅâÖ…GT}h~õÐQº‘7Ë÷†ß8òÃzÁºÏR?}czΪøg‚½½gwÛÙ º=µeÉØŠ!{"¯¾¼)¸“£ëäè’;2×DßCú”âÂñÏÕD\Tì ¿}äŒÊ»›Ñ«þ.mA§ÿî=»ûŽï¶yÒ®ÁU_-Ù>U}f†Wú ç¤û¢wßÙsjèÑ‚õ‘çK ¿–ùhè×G5_ÑUø½¦µÞ_¼-òÒ±|¨/Ý÷JÊüÛK¶Ç½,‡Š.îò£ô…=·ÚÒþ…÷ûš¢Mí^è1#}eüƒƒ&54¾ôÈcp›ÍØ{vʺþ«:=Q´©ýŸ ÖÇÿ1wMǧ‚eYAäœP|ì ¿7bð¸ì~õ~ïÉ[ÿlöŠÄ_ô[~òDÆôüÿ:?¦A÷›¾wÞåçÅþzxp‹”SBóõhxƒß=rÖûüíŸ÷c.ŽùTËü&ɃwD^~ç¦ð—:m¹©`]äùýpÿQÁí·¬óOÛ<®QÖÂÜàÃ`ùÖÙ‹û70¥¸^úúŒC÷ˆìH©Ÿ¾>=Ý¡ õt«Š½¡%Û"/'MÈ™ÌÌ´*=¬ý˜“:=œ;'Xfvø’¡ïü÷ç,ýþDƸÏÌÐúŠ}á}fÞ¿¦zÌ 眄­F§/ˆÛݪ qyîêÐ󽦷Ùwp†£êÃw‡š.MžÔzkõ2¡S%`_IáÆöÊZžøó‚õíŸ âaÀ†øç»MÉ\Ú º)=˜ÉY™øëŸífM"”½'wö€¦®ŠV…Ge¯Y©kª晌Å]÷WNNxxÅCAø$Ïl~ï[¥ËÄì…߉ËÍ9îæ—ÆÔÍ]yúÐLJø™O_ûéOK´„Š·KѺôš;®¿Ðï*€9+ôœ™ýïÈ[ï\ê÷võk§2<ŽIÕ¿7X:uWÿ%9­‡<44wMÂSùëãÿ½"éÑÅÝ÷õœÙwm—‰©Ë«êmœ7k@ýŒÍi‘áC¬zïï‚ÖƒÙò=‘×Sç÷ØÑgN÷*šÚ~TáÔPåðQGîCùA×þù'2ÎáÁM;¥Î ¯•4i{,ïÿAâw¿^¶+ôzðß×}bhºßUrVÈ™jà–vÍ]Ýñ·q#J ¡Atkê¡eYÿކïüÿ <F×ED×ed-²dGøÕÓû®í3§Ï¦Ø¡ÅãÒuÝWöXäŸ:ü¡ë¤´åó&” µuáwïÿúeë"â(éÁûô» @È)–µ<á‰FY‹s‚= Ad4ÈØqøý#ÿ¾¼pu´ù ËïÊ™<°:F‚P©—6¿×É©+³W$þ*™#¿ú¢¤'O.–`Ë´j3@×Üqó•Íûß›sqLŒßUrVè>1tÆHþÚϦ-ì±3i|öüPeñøV¥ÃF6/WVeH»QÅ“ÆLï:1kQÖòN¿º/| wu‡§ƒåUÁIZAL´):¦bß¡K ?Lùžð[vßÓéÁnKc.‰ùœßÈ ¸ªÞU——l¿r&/êި,W B#0ìnAï;'y{‡‡òf68`|æ’Î?=žŸ3dOì˜Kc.õ»€91Çœ_´1ü—3=@Ž;Vª"%}QâO;=œ=?¸LQ€ @j'@>ÓmBìŒî#SºŽï6!41ybhFñ¶¸—j3 †ì½9`CûÿI™ßkkç Ù rWw|28•«¦~ÞàíáWb+úOkQR8.wuûgäJ_Þ]³³‡–Jmnû¿}çôÙtOîÜ‚Ñ-i²Wöë21{A#Á{ÆÂŽÈ+Ç3Kq¬ª~ö_SæwüYõÏ S¤ë#÷Ï:ÙÁQ²#î…›Úÿ©ïÜ>›" y¸Iᤒú‡.¬ÖeRŸ5%Ûâ^.Û~=¿.þ÷ 54]»çk"„Š·GþQ¶+ô†@€œB-óîIf(NÆe„yk⟉:`bò´žÛŽ0¥óÄœù)ó’wä®éðûþ«žJ×îÁû;Þ‰zéë3ꥭ=¨AÆ–´æƒ*²+òÚé°D€ @jÀ-q7}õþAÍú6ËiÜ.º(ö7åCûÐÇÃonjû‘¯Gwx¢ÝÈÂÉ]'g-j”½"«:@‚eXó§ÞÑoiNýŒMiý–µ{ætÙÀ.@ 5¬YÎ=‡ž„™ÿŒ’È[i‹ºíi”µ:3ˆŽ&…S%ÏÛ0siVÆ£‰ÿ]±/t x[ÜߣKºí/ØÐþäpãý7_‘µ4òË“ûÂú¯Šÿ}õ²«Äqy³ËvŽZ²-î¥&…”užÐwåÝ‘×OÇ#|¤F—bÝrYæâðI `cy×ÉéËÛ.žØ²ôÁ¡ykâŸÍYÙá©pe᤼u ¿?ï sqLLïé±Ë÷†käNŽ`iWéθ—rV%±Í²Ê3`φ@€œnïtûme§Éíär–»­í­Wd- ÿúLˆ†ÊýáÁņ'ã”-€9E’'†fŸŠ º/òVÉŽ¸|è{÷GDwúyç Ý6µÝgY—‰]·tŸÒm[þúÏžp€ìŽ}+æ’˜K<HmoH¿÷úK²–F~q*f4R$þ¨Û”äM·´ûËÝ¡7ö¾ÜÕñÏÆV»3{|q«Òìé¹kÚÿ!˜ºïÄ7Ð?+æb€9%:nóPÙ®ÐAÔvˆd,aæ’¬;³æåõ[ÖùgÁŒGðzžª@™ßcǽS¥-ì¾kðÎÈ?K ¿z2~fùžÐÛUb äTˆ¹,æã_¿óš¯u;»¶æ f3úÌé¾£aæÎ”ÑMéñcM /Û¤hâàú›ÒzÏîµédÿ̪9ð™Ë?õÏr ÷•ó>Þyìý“Ëv…Þ¬ž‰¨I¹k;>ÕºlÔðûÌ* ä]Ñí©²–g³#•5ðï(ß:pùm—_í™ @N±ºÖýØ·]veÿ•q¿=Ùüï ¿Ìx䯋ÿÃÀ-‘¿·)>òððh±%­ïÜž[òÖ&<]¼-îï5>ršIŸyì½›·Ão}”þe»âþ•2/ñGÌŸQ?}qv0ÓÑ0sGJ½ôu-JÆ–‡†{²öy|èKb.óœ §‰Öš´MžšÝ~XË!퇵Ø®¢eAãô;Ò†î; Õ÷G3¹kžÊ]Óñ©Òq¯ß·ríì; 6Ü; rºoV¿8&¦ÏÌð†3ý&ôÒáW«þ[¾ä™ @Ns º×»¹d{è_Á­ä¤æ.0 ø°Ÿýam‰}¥*@.ô< g€ë›\ÿÿnkëÍïç[Í®¿£lwèšPqãÒúÙÇâæð7'~y–³c©Ö%Á>‹špiÓtc €A€ @ @ˆ@€ @@€€A€ @¨%ßlúÍ+Zå7IŒÞ¦(~Xë¢¸Š–¹qeÍKË÷„ß NæLÇù¹«Ã¬Ü®±›Ïß ƒä\ ºë#ÏÕV|˜@€œãrVÄýF€ @¨™Æí jEú‚¶;„ZÑqtë±y«ã~'@ ÔŠÝê¯x[äe€¡V„KZ¤”í ¿*@ ÔŠÆéwÝ]Ù?ôñ°@€Póê^T·nâƒmÆ µâÛ­¾óÒá µ¢ÏÌØm•ûk @ Gˆ¹$æÓGµ©Ì]yÚ „÷Æ×}úÎÞõ» Ù~S€ @¨Q]Á§2 ÿ „ZqGúß´5òB­h™Û¸UÁºÈóB­¸%¦Ìoý¨'c ǤîEuÏï;+¼eØ~€¡\öí/\¿6îB­Hžž!@ ÔŠæ¹÷&Tî 5/æâ˜ó3G~*@ ÔŠÛ;Þ~Û=á7„÷äÛëUì;þeX¡âÆ¥·µ¿õæãqC‹.7æsX›Â¦}Nd ÖЪh©Ø:.=&‡æsˆ9PzO,4æsXóþOø$¬ãÕgfd‰1@€œÃb.މÉXÙ]R¸)îÏ »ÿ°yÓ~÷´ùV³ë®úf“oþ¿˜Kb.¨û¥ºç{seVQӤ⭑¿ÕF„ Ù~sèã᥅_«úó[%Ûïôš»®A×_÷, 爦Y÷5)Ùy©¶öƒüG”ì ¿Þ2¯qªç€9‡´ÌkßEÜ“µ •û#²–†Ÿ¸9|£cz ç’Ô¹qOÅ,H°,«I¿»Cžä,Õ¶¼é#wöºã–Ã_KŸ·óTHéÎð¿b‹›ez.³T¨¤Y~\y³Qõºüðö¸²–yÓïJ¸9òâ©@Ïi¡Õž ä,T÷‹u?™ùhäÇo)ßz»òñðÁeP§*>y«#ÏÆ\óqÏr–¹'µQË >Nep®lWäÕ¸!Í =ÈY¤yν‘VMºd,ŒÛwºÄGõ&ôHYóžä,sqÌE%;Âÿzh¹ÕÛ§[€Ä7Kñœ gO€|¹|Ïé³ìêˆÒ߈+o^siL]Ï "@j\ÅÞÐﵿ廞äìK«äíÓ1>ò×Ä=ÛwfdCÃî nô¬ gºÕý|ޚРÅ[Ã/ÿN’6/²Õ3@€œ}³ Ÿ©òÙøZ8$gEä·žä,Õ8í®[#ƒ›G¦`]ä¹ZÝ€¾'üfž äÔeäÉÚ îî_siÌùÆ"@j\ֲȯŒ;D€ÔŠ~K"?5îR+RçÆ­7îR£Ê÷„ßè=#²²ý°V¥Æ"@jöô«]á×;Žj=¶Q†7wˆ©¥S°Â3Œ;D€ÔŠ6EÍR;D€Ô¸Š½¡·µ¿õf〠µ 7ÆÞø]〠µ± ý¡ÛÚÝv…q@€Uº3ü¯˜‹c¾dÌ ¤ÆÂ£pcø…„Z l_Ùr@Ì%1çsˆ©±©úþ¿5Îs\“è}÷õœ^T´9î/5 YKã~b¼ ç¸Æiwµúx¸Æ÷~uþëûW\9dwøM€¡Æ}麋.¼3üª@€P+:½Rå~€¡tÙzdåãá·„U÷ºŸÌ]y¦Æ—`-‰û±ñ@€œãî͸«õÐ}5;ûˆ.ŒÛe¼ ç¸ëîýÆ•ùë"ÏÕB€,@:m3íó·þ¨_ÅmW\ÐwVxs÷‰±ó'„?¬ué‡-Å*ß~³íæý>`FåãW7¸æRã €áÕ½¨îg‹6Fþòa³ É“BÓŒ„¬óØð”Êý IÆŽ0V>²z]ÃIE›"/¾o€TÅIlq³c€á#k–›Òé‘è£e»âþù~WÞ"ÇX @x__¹1ö–ë[–$Vûn$«÷•?ìzG:u>yøû®ª×ýΆ™;S0­|Oø#ã£tgøŸáÒæÙÆÂûª‹jwåÌËûaÊêè·bóS:?;-yrdFÉáÙ·%¤dT¿'iBöü‚õíŸ;üd¬¤‡ÚLs± „ã @物+Š·…ÿ™»¦ísÕ‘»&á©»r–æT¿§qþ”⊽¡wdðÎÈ+ “ÞbL W€4ŒnO3prÉö¸—‚¸¨žéH]¼³Atkjõ{ºNê÷hñ¶¶«Þ„Þnhó1×ÞõõËŒ+„cwÜ[0³°ÇŒ´Õ™K“~DFÅÞð[]&E—þžøM°1þàLIåãáýW„sq̧Œ-„ã jM ge.íòã`–cÈîðwçÎ-8üï[•ŽV±7ôvu„4ͺ³wÝ/Õý„ñ@€pÜrhÉÕ¦ô쉿"#~tÑ”Ãÿ.yZƲÃOÄ b¤}e‹¡1—Ù”€á(Ò º1£uÙ¨á 2¶¤½_„¤Ìë»)Œ¢Ííþ·QÖòìê×e¯ì—06fɶ¸—«#¤`mäb.‰ù´1@€ðžé93uíà¡×»LÊ^ø~’º Û®ê ç‰ãÒ—4ˆnK=üïïÌy´ôÑ®ïÉY÷›˜KcÎ3ÆÞ íF Ÿ»:þ™ØÊF=@v¤Ü7`LÅ€ íŸ#}Qò®£½/2¢|lÙc‘W*«"¥Û„عö‚ @xו?ìz×í=–ö»½ç²~ßï±8øßÌC–gÞÞkyæz­8è‡}×¼ˆ°QÖò¬¾ózn¸%îÅ>³ûl¸¿bäGFH«Ò±…Û?W¾;òZö²ðoïîÛðvc €¡NÌg/úÔg.úÚ%Ï]zÝ¥|õÛ—¾ð_·|ù«¾ÿ•/]Sïò/}­Þåÿu{RËÃgCÇõŸ[¶+òjáÆvn˜¹ªß‘Ò8^Aá¦ö fKF¶©0ÖŽ{©ÖáÚ*ž»›<-}ÅÑ–c5-šTRº3òÏÜU‘§¿Ñø›_6ŽN8@D7¦'OM]Õ(kEÖûm\:fðÎÈ+ë"ÏEJ[ö5–N(@ŽU§Gòf›ÒƒIÑrtÌÅ16¦ @¨™¹§ÿ삊½¡ƒ÷ƒä¯‹<ÿ•›¿úc €¡F¤at{jÊüî;ƒ fBÚÝ×Ϙ @¨™©Ò¦|øÈ`dèãáí+[Œ4¦j,@Ú=ÐcA«ü{“:Žj9ñÿÝ}íeÆBÈ÷“—d\úÍ&7Gµ°dGÊ5w¦µ2Žje Ö÷“§]ü­ú·Õ©ã÷B Hà{Ýçe]Û$3ñ²šݘ @¨Ñ©vkÒÌÔËnhqq@€Pãr0B:ÏN½¶qNì¥ßjz}:u>[哯BHµz)ëÓoí<+z]³‰Ÿ»ì›Ÿ3Öj,@÷¸1½¿zsÜ-uêÔ9ߘ @HJM«Ÿ¶)í¦ø )×Ü™Þü‚/ßð媩kü ¤ÆÝÞcif0+Rõ³ïûÔ…—[ž @ ‚©…Y‘ô-i7'LŽ~­aŸæuêÔ9Ïó ÷½n ²«ä ž€A€‚ "@ˆA ‚@€ @€A€ˆ "@ D€ @ˆ@€ @ €A€ @ ‚@€ @ €A€ @ ‚@€ @<‚ "@ D€ˆ@€ @ €A€ @ "@€A€‚ "@ D€ @ ˆ@€€A€ @ ‚@€ @€A€ @ ‚@€ @€A€‚ "@ D€`ˆ@€ @ €A€ @ "@€A€‚ "@ D€ @ ˆ@€ @ D€ @ ˆ@€ @ Ï@€ @€A€Âi ¢ÛSoï±´_m»9aR¾ œcòýäG³ê~ú Wÿ…¯^\Ûªä㞀á\ îf™‰@€ @  ˆ „ ?è½*zM£ÔÖ×6Îi^›¾Ö(¥yUøÔõ<çP€œ*·$ÎȬ O{"@ D€ @ HÊ­I3£@€ @€A€‚9<@>ãyˆ@€ @ €A€ @ U2+S€ˆ@€ @ €A€ @ "@€A€œ”ù¬ç @ ÂY g÷ "@ D€ @ ˆ@€€A€ @ ‚@€ @þÓmç‚ ÎÎùœç @ ‚@€ @Ž?@º‚ "@ D€ @HíÈ\ @ ‚@€ @€A€¼ YUrç @ ‚@€ @€A€TÈ< @ ‚@€ @€A€¼ ]çe ‚ òQäóž€A€gS€ÌÏ "@ D€ @ ÈAßë:ß)X"@ D€ @ È;Òm €áì /x"@ ÎÿBö.ÂÊuIEND®B`‚calamares-3.2.20/src/modules/locale/images/orig/timezone_-8.0.png000066400000000000000000000152211362604102500244330ustar00rootroot00000000000000‰PNG  IHDR ™q*UüsBIT|dˆ pHYs¢¢EÝ1¢tEXtSoftwarewww.inkscape.org›î<IDATxÚíÝypÖõ½èñhO¨Q J±b…®”E„°Ë–<Ï/@ØV²aM !Š Öª(ÄYddÜvªí9somÇ{Ï­ÖV{Úê==‚æòØIÇ… yœ6/g^ƒ“8Œóù~ÿyÏ÷÷ýý***ˆ¿’‹ÓºL?’ùuº>yñXkÀ×É"@  D€ @ @"@  D€ @ @ˆµ@€€A€€ ‚"@D€ˆ "@ D€ @ @ˆ@€ @@€€ bˆ "@  ˆ‰‡N™{ršõÈi- $nn÷TnË>sG4ºy`«„„„µ@€˜ŸvܹoÊ÷:Oî]÷;76<Ö"@b}Úñtn˾óÓ¾Ójðœv @HìO;²öæ´ îŸrmÒ”>N; Ä%@n¿1¯e¿‚N; Ä-@n›°9»YœAN; Ä-@nŸ¶+çºþE#4ïzµy @ˆK€$å̺9¼bRãÖáè£V›%„¸HÛQk²®é8®»;â í'=—Û¬{ÎÐKßt¹Ù @ˆ[€œùïÒ´è~­ æâ íÆ®ËªÓ éeæ€!îÒ´kf?³@€÷i7fmV†ßwú€!Î’w8³iש}Í Bܤí¨5™ßº¢E=s@€ßÉ;œymÒ”>f€!îÒf䣙߼üêºf€!®’”w(ëÚΓ{›„¸H›´Õ™—Ô¿æ[æ€!îÒüŽü!f€!îÒ)koN£›Þd6â ­G<œ™PËl Ä=@Zôžb.â ³÷g7nòs@€÷i“öHVBBBms@€÷iÙw^ÄL Ä=@¢_]Õ6µ™ @ˆ{€´ùXvBBÂ7ÍBܤe¿‚Tó@€÷éœóröwoÑÎ< Ä=@ÚŽ^“ªSÿó@€÷¹®áp³@€w×õ/uuû1·™„¸kÒ!=#ñ’Ë똄¸kм[s@€Â…tBBms@€ @ò.ýÁ!›¦=™º3ó©ÔÝãŠ<Ú+»W_H\L>õäÝÿ#¨¨´ôhðŸ£ï²ªQëÆ—Û @â Qe告¢}Áï&?ÙØã®.½C Cuêu¨gƒ€‰}€|VékáO ÷oÐ#6¸H¥iëƒm6D€ä¼ä®õ‘—\DrAdÙ±ÈéÛÓ;v´I@€Ä=@ÊNF*úäõb“€‰{€,? S×»³ž¶;{SêËYS÷NÛ¼Ô+«['HLäï³rè*È »žï¶q@€\™µ-üV¨a¨îµm  q ’ã‘Ssv¿.ؼ3¤¨w±M$nòYóvE~jú¦$®= V2°À&ÿ99•ºtÀ"›Hܤ¬= 9©˜°zè‹>R$îµøPða›”VÍl. q’c‘‚¥çÙ\ @â QS×E^ª×¡ž $þRr"rzXIr‘ $1rôû]›5 5 …l4 q·ôÕð©»Ö…w5nS¿®Í$þʃŠiOF\ӱ鵵׺ئ@€ qòqêÒ96D€\còÀ§C?óÏŵ.¾(úïMÚ7il# @þIå}R¸/õ7w­ vänŽütæ–Ô×ó_Lýùìí)o‡†Ü@€ü3ÊÞ”úJYyä¯E Ÿ*99ýuITôÿeÜC)ëmFÈ?¡ž™ÝÛ š×{ìÈ{-»¦c“&ãúô× QŇƒZ‡[µ 5 ]v.± @þ‘Ý:ü–«§® ­êK§'# ÿQyb×KêGÃŽüçß³ð`Ê_Zôj~­M €ùW¿eÝ:Myfùk‘O*ƒ `Oð΀ٽG&6L¬wçã)[¿îS’’ãáŠëîhÑÔz @þ „….– ˜â#‘GÜ“\Zù»>y=»Ïy)øõÙNIó‹+BßV2`q«Á­šÖëPïs¿»âæFßž»3ò›¯+B¤†¹úÖ«¾=emx[Y¹r!NI® ÕÎ{.ò†rAt™Ø¥côÕ¹È1rÅàeÑ×ô  ñ«a(1ó©ÈxÄÆ²ã‘Sówÿwæ–ÔŸñzþÖÔÍ{.üƵ›^iöªWV·^ÅG‚cÑS•þ³zL 5 %š1„Ï™ðÈÐͱüRzô [ÉóúŽ2[_’Ø ±vÊ¢þSg¼ü¬äDäãXDHê²ä|³@€ðwÕëPï¢äy}ÇÎÙüªº2fÕÐåf €áœF®\RÝ÷£”•f €áœ†—&ÏŸ·+üûêHÖÓ‘W#K’§š'„ÿV¯¬nƒçï¿WÝSŇ‚zNëÖÑL |~ˆ ‰ šwmú­+Z4H»'xxÙ±à£X\FŸóRðfû´ö×›1¤†ª}ÙU—6i?æ¶k:ftlÜ&rÓ5Çu¹9rï]ó,î9cÑŠéÏx3–ßYp x佃—‡® Õ6H òíï']×:í‘™sd§,/]Õmæú‚ÎÙ[g$å½’Õeú‘Ì®3^ÌûȤ½ó÷DþÓ–YOE…….¶šó¨ÕEÍzä„»ÎØ4wé«áÓó÷ïgoNû·¤¼=¹Ñ´dUÙø5‡—‹œ.995m㘟”¾ù$²ähø¿nM»­µu@€Ô µ.mTûÆÁK'L^7m×ü=Ã~;õ©»öEã#ª×œµE“ŸsrÎΡÊzfÔãðò‚ÁŸî.ÍIȘ•ƒOl˜h 5Hýk;\y[ÆÊé3¶¤½9í錓I¹²+#dØŠEŒX™·©OAÑò·ï,}5üq¬ÅZ~2R‘÷lðÚý2/O¼ÈZ @jˆÆ­‡Þ|Ø+³Gok€©aê6º¡îCJÆ'åÊúb€D XøÃ’‰kÇYp òçÒáŠÒÁéXÜ)z9õ½!…ýï¬×¡žu@€Ô°“ZÍºç ¾}êÎì/HçÜy«'îËÞ<úõ¢ýÁb Q%Ç#§ÓúP­Æµ|RÃ"䢫ڦ¶k7v]æ—#dûŒümáß~îzyÌÞŒõIú‡>ä#…¨~ÓNß¹qpIFRî_¿Ž.[qߤµÓ· ¿Ö†‰ks·Ž{,{낗ÞóRäÝèku ÷§þ®ºRúZø“žÓºõ4HÍ< 5í:u`Ç»vä÷”­Ê}nô/æíÞŸ¾eÜOÆ?–óâ¤=6e}ú‰é/Œþ×¹»‚wcñzÞ‰Ež0{H ~$«që”6mG?>5¸gñówŒ|³ò Xe'#‹Eþß â9kÒVf¾ýyu?X8ogê[‰õCf€©Á.»ºí×'§wÊÞ;áñ©»ò·§ýªôµàÓØ˜»sä¯/+y`Æ‹cߘñbÚ/˪qš´»ù>ÄiHBè†AK2’òöç ¿o½Ã߉¾ +zòqçºi»zÏ/[‘±:sÛ„5“öG_Õ{¾²øPðánô…tHMwCrqÚßÞŠ•³/gÖö‘¿ZújøÔ²cÁGѯ¤Gî^¾*)÷@vô^Èù¾!kñ+‘B C—š7D€¤}öÕ¼Iy;ó.Z~ÿ’£‘¿|g"¤oáÊҤܭ3æîõ«ó 9;‚·Ì—¤Rrñ²Uã×LÞ;gç¨7Ç<<㙞s6Þ¹îÎýBÌdôƒ…k— Ÿš½cÔ›3^ÌøYî³ãÊû/Xqwô!U ù»ƒ·C CÞ„€ gèÅôù{Fþïʈ(z9üáøÇÆ8Ÿ{ e告1«†ÜoÞrÖ‰š²!sWe@äo~“µiäÏÏû{ »SÿýŽÜžÝÍ"@Î ½æ®+\p0øc4 öx{Ù±Ô¿T磄 ïõÊêÞÁÜ äK:çìÌ[x0õÕ‰Ž/*ؼ,˜göò…{ ³²žõzÁÞÔ÷b!‰¬6{ˆù’™[Çþü|Þ|UiÚ†¡åŇƒ>û³ô¦¬2{ˆ9k€Tç´#ÿÅÈÿÌÚþÉâCÁù[ƒ›¿'ònïÜî}Ì"@¾ðÖ+Yó÷¤ýŸó²ò bÔ½ƒK$Ö«{Í%õÏüY;Ô0TÇÜ 䬗З¾>u¾R´?xïÒ¦uê™3„sHÙ畜W9< ÷¿·+õßǬ| @øJÒÁê%Ë_«Úôh°´yk»Ð¡Ú×ÜÞ´® @øJ2°øÒªȲã)¡†¡+ÌB•dòÙÛ«úø•@€På霳/gÁÁaïW5@Jއ+ê·¨ßØl |õÉ}9»pÿˆwª ¥¯…+zLë–ÑeRíGvjmƾÒ#XùÛÆüâ|^¿ýrzôîHî3‘r3@€ð•dÄÊ…kªóôâÃÁŸgo~y6çôÎ0ˆù›n37ωÞé¨N„ü=Añ€<ó@€¿éWôØâª¾†W€ @8¯õ`áÚ²ò@€ @ˆ€dmºóP<âC€ @È—Ü1oÓ¼¢ý#Þ â QãËß,@ \I[µð1€á‚HŸ‚ … {_€ @ˆ{€Dõ-z|Ñ¢W†ý‡@€÷‰ûðÜ'g¿”öVÁžÈ ÷¥þ^€ @ˆ[€t™~83eyÁš¢ýÃ~çBœäHæðûŠW—ÆèËè"@þ[Iy³ÆühãÁGB\äÓ·bþxaé‰ÈÇBܤËô½¹Ù›'¾z¾á±ð`ðþ”Ï÷›Ù{ ù @È9u¹cúÜ]£~}>²`ð^bƒÄoš=D€|e=fm™U¸oø»U eǧ¿×±ñwÍ"@ª$ãÑüÍU ’áOZ þA+³@€*I)½Eþ¶ô7æìõfÉñÈé¯!™OF^Nl˜hþR5y»ózä¯- V”þ0"ÅGR?8W€ä>œhpý¥î @HÕ$åÈŽ~¤òkéCKï½wÎK£YV~öøˆþ|HQ¿;Í"@b")oNÖ3“Žž-@ŠöE~ߨÕeõÌ"@bçFÿì¿àÑâÒáO¾ü¬È©³îköC‡3sžpâsRTLX=ts¨a(döS½ç¯+Zz4ò_»ÿq2R1pvo§Ù›'ùìô1d<{UÛÔ[4ïÚ4!!á_¬D€ÄLrñÃË–Mý°2B&=‘·µSÖÞœö“_˜Ñ¼×ŒÈ•7öob $f¦¬Ÿº§2@¦o÷ÓèýÊß5ë‘ÛÇ: @HÌôš³i^ñ‘Ô?GdÑ+©윳7§òw7 Z’žð k€ 1“÷¸òh€D_ÍÛÁê%•?¿}êÎ܆-{6·3CKWÞ³è•aˆFÈ‚Ã.»ûþ¤¼Ý¹Ñß5¿#?b- $¦ºÍÜ’Ÿ¹qòáè÷@–¾üeìÓöö)x|ÑõÉ‹ÇZ ˆ‰¹¤¼ý9Ó_Èøiô$dæÖô7ºÍ|n–@€j»)åž)ßë4±ûgݼdlRö–  {?!ÙÏN<~}òÂtk€ Õr¶“诚tLí2iMð|æ“ÁŽ)OÛšv6ÐZ @Ḧ "@  ˆ"@ª MHHøÖuÎâ’Ϩe- ¤Z:Þµ#÷–Œ§¦ß’ñäŒ3¦ß’¾!ï¯Öçž‘ÓnìºO}¿çô1Ö"@.j @ˆ@€ @@€€A€€ "@D€ˆ "@  D€ @ @ˆ@€ @@€ D€ @ @ˆ@€ @@€ D€ @ @ˆ@€ @@€€ ‚"@D€ˆ "@  D€ @ˆ@€ @@€€A€€ "@Ä"@  D€ @ @"@  D€ @ @ˆµ@€€A€€ ‚"@D€ˆ "@ D€ @ @ˆ@€ @@€€ ‚"@D€ˆ"@D€ˆ"@D€ˆ "@  D€ @ @ˆ@€€A€€ ‚"@D€ˆ "@ ´è=gô­ã7M?—Û§íÌ ª7è„„Kθô\n´4C€ @¸ n\’.@  D€ @ @D€gפCz¯–ý RÏ¥í¨5S„j¹!¹8-^a!@  ˆ "@  D€ @ˆ@€ @@€€A€€ "@D€ˆ "@  D€ @ @ˆ@€ @@€ D€ @ @ˆ@€ @@€ D€ @ @ˆ@€ @@€€ ‚"@D€ˆ "@  D€ @ˆ@€ @@€€A€€ "@‚"@D€ˆ"@D€ˆ±"@  D€ @ @ˆ@€€A€€ ‚"@D€ˆ "@ D€ @ A€€ ‚"@D€€ ‚"@_ðÿ8mËóøJVIEND®B`‚calamares-3.2.20/src/modules/locale/images/orig/timezone_-9.0.png000066400000000000000000000173441362604102500244440ustar00rootroot00000000000000‰PNG  IHDR ™q*UüsBIT|dˆ pHYs¢¢EÝ1¢tEXtSoftwarewww.inkscape.org›î<aIDATxÚíÝwxUe‚øqs±PDª" Š€"J’% íÞº„PB(i”hBïÎØ ˆŠ¨XQQA‘¢ ‚²ÎoÆù9ÕuvŠë¬3ã4×2Âæ8²Ë8:’Püäy>!÷Þ$çòþq¾¼ï{N¥T:••}Ôˆ¹fJ×É»&OMãs{žêï5|íù¹ @"@@€ D€€ @"@@€ D€€ @"@@€ D€€ @"@@€ D€€ @"@@€ D€€ @ˆ€ ˆ"@D€ ˆ"@D€ ˆ"@D€ ˆ"@D€ ˆ"@D€ ˆ"@D€ ˆ @D€ ˆ @ä›h۸ƈ[Sè;¥ÇÈó¯:¯®R.ÚEÚ6Ê$úò²‹Xòjä@Ѻ´·Sfô.vcêm—õo{ÞÁçÕìXS€€9| cãc-îwgÊõIc‡}7maÎ=‘5¥Û¢ïñX°;úQÖí/ûóÃ%¯EŒ]™±.wUtÃÔ'2PæûãWGŸé>>¡‡ò•BuC1鳓fŒ^>`×Â=‘OÇ‘šÿrøÓÁËú­è8¼ÃÕ¡z¡*viÒ¸Mÿv—–}ÿ:çµkxaÓŽM›–ÅÄi'[€tŸr×ÜV© Æ]ØeL/rä'ô§wÓµg§a3ÒJûŽÊ{8²sá+û צ½½ôµÈ£ ÀÒ}ѳ·GþXütô­¯„ÿ¶`wä£ù/G>Z´'|`΋‘?<Ý=ê®ðŠnãâãË"%&Ô T%p¢H\þÖüƒŸwÊÝXxÞå©ÉÕê_R߀@€Y|TnVº-òþ‚—ÃÁðM‚ãh-ÜùxúóÑßLîï&?}=sAÿiMãš6ï•ß½ox^rq°lܽÑÇÒK“ŠÛg­žVžÁ_ôRÞ•Ãï›Ø,abj3\Ö?5.ï…‚à±Kú\?¤Þ¥½›áfÀ @ŽàɇwRº5ó¿ŽGtÎìÉ¢½áÏ6»FK÷ELÛxÍÝ4ge\á¶ü£e¡±#ïЯµùд¶o›xAÇ çµMkYû¢øóË>Ñ4~\NóÄ‚qmÂK 궉oj ÀÈéçœ~FÁ£á×OÄø8Ü@™ñü_ ˜>pY‹žSú^ÔcrRË䙃’Šóof0þU|$Ly¼¸ÿÜ—Mz4{oÒŒJ;OÜ\ؤSvʹÍ:_T·eÏ.t™ra—1Ã/J,œX³Q»úÁTÑ9ÛU«Ù¨í9E€ô+îYðJôÓ5@ºæ–ô%‡WYDÔn™\:¼Óøg ÿiiU᳓‡Ý>õ‘™[3̬?=øgí2s³\–Òºæù—×iØ.œÐøêk²ê·êÓþ¼ËSÒë´HhlPÀQHp…«2ç \4àºÙ;¢¿?ÙããËäó½-Uê]štñÅI×¥·º2?˜áèZ´sRê‚e7•lÿañÞðþ¢õ™o\Ò+®yðüz­’5ºjà°— ¸¼ìµ1Ÿ Ž4@FÜšzoѺ̽S6Dß(Ùý圑¿û(N…øøªùBŒœÕ Mÿ–ç_5°ÃÅ=²ûÆSÚix×p¸¤™—öéÒ*¸ðW_3ªQûÁÑš®hhÀQH0ãQ²)ú‹S%6Ž&@¾$HbBÕêœYå¬*•«Ö:·ÚÁ¯Í=I@€ò—«‡\5`ÚS‘Ÿ  B–`5‹krÎà¥J§<}ãTZz%@àÞ„ª Y–:wæ–è»(×9¨ur›†ÅOeþH€å ŒÙýr¿ú÷åXKöF>]¶O€å ¡ú¡˜¤Âý£ ú—¤ÍìycÊõ‰sŠÖ…&@€c ¡º¡* ¯<¿I³øæÍ~-<·_Nx^¯µÓŸ ÿ×ìÑ÷g¾ýíü]‘pTÒuLüÙw„!ó{‹ö„÷­ ¿jª|ðñËRÚ\–:£ûÃ#ïHÞ1»ÏœÜUÛpØR³cÍJÉŽ"£î ¯È]•ºçГöÜUi/õ¿®÷°~eb]ÙöŠô+ÚŽº3}õ”Ç3~z²]ªW€Àq ˜Z1§ (é“1öîðC ÷D>ùª÷ 4‹ö†÷/Þ>p²Þ#D€Àq 肾7ÎÝþàT¾û¹€$@BõBUÓfö•}gÆÊÜUáçf¼ýí) 7§/öÇyH«äV-ÆÝ—²oÉ«‡¿´êHžkø‡¿ô˜”y8Q1{GäOˆnPÒ+oæ–èopĪ EôŸ6veøÁµ™{ ×FwäÞŸqÿ57§.(ûÚÆ1+R¶MXÞÚ<¡YÃ`éÖàeýîž·+úWK°€#¯SU‚H9ø÷Þ…ÝÒí‰üÍ pÌ䟂¤n(æÚÑŸ  \äô3kT©S-øü²­/¸~sæÛˆ.ì7}ØwS—¦Îè3nìÊÈI“{u=â Õ U¦ÖçŸWÏí[\ªwÚS™oÎÚ}ßU°€¿HÊÄ`/ù¨»2V®¾ZÖ ¿:úLæÂþ×&ŒíÚâk¤]F» K³tkø/C– ¸1çÞð‹öž\{>T¼˜:1¡!ËRæOz(²uÐâ¥=&uoõµ’}GÚ#‹_ì_¶Ï€rÜ’:392zÅ€—î;Åî„nN¬émRê¼Ñ?Já!@à škV½"íÉS1>,Á€,@’ »gÍ{)üßÁÒ«YÛÂ'Ä,ÈÒ×"f@àT ZU«V¼1üöŒçÓþº`wôÃãóvFÿZ²)úË’g3Þ›þ\ø·‡>¶øÕð~§È^=:'Nˆ;çÅðWÀZ°;òáÒ}‘ zò‰n¿zXûþ}¦$榕öº¥tkä7ÃO|(õ‡EëÒ~9íÉÈO¦lÈxkîKáœÄHœÐ-¡dsä?G/ï÷ZÚ¬M{*ò³ƒ'ñ³¶–ÏÒ¬E{"Ÿ ^š2{Ðâ”ëJ·fþ6ˆžE{Ãûí ï¤ø©Œ_ÇꔟݹSð;vÛnèwûú½ù»2þ–»*¼9ˆƒŽN¨^èŒWœWë°$8ï–Ÿ8nUô±¼5™›2f'g|ÂÙÎlP´>üéOd~?ûÎðŠ6ýÛ4yGúòc Åÿè]Ÿ´àçå?Ù½äàU¯ö}6ãò»Œ¹I7'MNÒ3¿[ÿÊgT®>piƦ+£=:~ÙÕmÛ¢E÷vík_Z§~YDQ©r¥W¸¯¸ÏŒ{æ„—Î^>ýù!¿* ­‹Ÿñÿ³ïÎy¡`môedzºjê•ÿé,{}âø®IeohŒå¸ä_i׬þŒ-Ñw¿ix3ÑýJâGÇýïtMâÄøœÜÕ©ßf,®¹9夢ÄÌCg(Ê>N+Sõ°°R¥±#×Lé:yפ@|ÑŽ¼¸Â§§ÄnÏÏ}pô®Ï–—½Ù?î¾ðÆF±k|]rqÏ!3ž‹¾³hoøÀ˜»Ó×,pœ$©°û°`9ÔW…Åû²+h{>’‹{¡º¡³rW¥¾Z†Ü²0XVõð r¨„©ÏL~ÇôJ6 û÷`Öeê‘Óüì³:^Q´.úzð{–lüËéÏGÞKŸ•<áËfI€rP½PÏGß]øJäoEöfß‘¶êúM‘_/z%úQJýÑü—Ã'õ×o¿;Wø“ }Ñ¥/Dß˹7ãé²ðˆù<Î=Öû1þU€ü߬ÈÖ‚¡·–Þ7wäÃÉë#oLx(óG¥ÛþnæÖèïg•ý9ù‰? ¢*yZÏÑ"*8@®Êl?­qÙ¦&äÄ ú|öâìð¼äâkŸÉx§Ï”Ĭñ÷GŸê•Ÿ0dìÊôM_u‘™/d¾sÍ-éß ¢£ý -¶;·ú1?ÀÆÜ2ëžù/G?âhò†aoޏ³h]ð»½uÂSÁFùE{"Ÿfß‘þ豘™òMw¿× UN×ûà,FZiÒÔ`–äK—i½98¡kß¿/éê™”sOʾð¼>·œ 9èY²fÆø'ls_î–´…×ÝwÍ…ë³Wæl·:ë•iýbޮȇ™ ûÍ7xà8ÈåÜ^Ì|q?Hþ#Ñ—/0'T/T½y|«KûLI\ž:£÷wštº°ùñX‚õÏvNJ_½æ–þÏõ.èÙùD @Æ’E·Ž[=bïÄG®y=cñ¬å¥ÛÂŽ+x|ZÞ£ÃÞ6ØgÝ–v·AÇ1@‚ ÚùüßÌG %ÏF~Õ9«SۃϩR½J•ÜûÓ÷LÙöëñ¤½ž1»ÇʪçU=³\ðHÂäõ×f~§è‘y;#¾¥è±ðÒùw ¾eúý£VŽÞ>cËwfo¾—Ýùr *8@bjÇT);OÈ]•ñ|0ã˜öTæ›÷/ î(þÅçŸQ¯VÍ%½nŠßúXïû8Vè6uãÔ©‡þ4çþ¼góöƒq«GíZ°;ü·q«‡ï+Ý6ð½q÷f<,)3˜ ‚¤ÇÄn±E뢯—© f=¦?}'ezŸq¡z¡˜†íµü’(>T>½jƒr?Ào ´…ËnÊY=qó5wæo~ûÄ£îû¨•£wd~wêCs_Š|Pòlô­!KSæ\œxIƒ Ê!@B B•Ë㜘º15K6Eÿã/¯»'üiáÚ´·ê¶®wBœŒ‹éZôR^ÂäÍEÑJVõuà …ëý<¼tòš¼Gý$gõÈ—îÎf|‚ðúMÆìä< ŽQ€áׯ¨h}ôÿÍÞùóè^,Ýšñ—âÑŸå?ÙÝgrô J¾ìµt¸¤q̹1ÕNº9äò¼‰Åë®Ë^9u]p“è ×®Î_;üÓ6~»øé¿ ¬àÑè> ŽQ€¤ÍìSìïȹ'uçÔ'Óßͺ­ÿÆ®£;Eb]Õä²mN¸%HÇ6@vMê>í™)I3n[8{GôÏ£VŽÚ‘ºpæÝEúyáú¡oWÆ*x,òú¹M;¶3¸à($øh‘Øò‚CڷϺ}À†¼‡S~^ðhäµËS.oÜH0©°Gn¨ú9ÕO‹9­Jõó뜪H·©ÏN0÷»7Œ¾g̶ÙÛ£tsáÚ”ù×Þ›¾xöòÒmé`ØËç6íÔÚà€# öƒ:]š÷ptç¼]ÑrW¥½ÚcbüˆÎÃc»V>£òIsÕ§c ŸyrZÖò1[‡ÞZ¼føí%vž´©°ç”™K'<˜µ'~ìÐ)e?ótƒ Ž0@F-OÛ^¹jåÓbjÇ„¾­Ò6óÖÂêçµnZö=+þ½O?ø9p2䆔;Fß•²-¦æ…ê…Î N¬O…ÿÍ?–_øb^óîùeßó4ƒŽâü¼vó¸vWF®j>üæ”ç†ß”²²ò•Ï<¥ð/Áê»2Ö„g‹š'd†ªÕ9Ó R®òÙ=BŠ^Êk“¾d\½–½.4°@€Lªí³(hÜaXœ;¤€©'n.¼¨Çäg×m~¶A¤üíœtYø;¹õ[õij €©±Ùk .è˜oI ÑeÒóŸí 1à ¤B4ÏíiÀ @ˆ"@@€D€€ ˆ"@@€D€€ ˆ"@@€D€€ ˆ"@@€D€€ ˆ"@@€D€€ ˆ"@ :ˆ @"@@€ D€€ @"@@€ D€€ @"@@€ D€€ @"@@€ D€€ @"@@€ D€€ @"@@€ D€€ @ˆ"@@€ D€€ @ˆ"@@€ D€€ @ˆ"@@€ D€€ @ˆ"@@€ D€€ @ˆ"@@€ D€€ @ˆ"@@€"@D€ ˆ @D€ ˆ @D€ ˆ @D€ ˆ @D€ ˆ @bÐ @ˆ"@@€D€€ ˆ"@@€D€€ ˆ"@@€D€€ ˆ"@@€D€€ H¥—EnœvÕˆÕ“Wç › £ ÓÊT;m2– @*„"@@€D€€ @ @"@@€ D€ @¼ ˆòmÐjÀ¼,¤B4é”ݽkÑN¤üY«qíØì‡ òSÊ>Z&— @*ÄùW ìW°=_€€©ˆY³Ú ]™'@@€Tˆ½ŠÃH…¨ßªO«.“ž+ @*bVÌåÑ›s Ѽ[^²R!j]xuãŽ9O  ± «rëÔEÙH…hÒyT·®E;òwÖ¹Mι¦P€€©ˆeX•Z&— @*D£öƒbã ¶ç  1 rf»¡wç  ââÞÅH-ÃÜ=¾è¥<¤\ÕoÝ·Eû¬íR¾ê^’بÝл'~“«`5é”|f­ jª5œá=@€|KÕnÖ¥öå™·Œÿ¦wBï”»qòÕcÖOý:Æíæ}@€| ÕlÔ¶Zë´Åc¾i|áR­ï=äÛöÆTªjÙoÖˆ®E;'  åU.î]<0¾ðÅþâU¿9wϱ¼dM”ç |K$˜ÉhÜaXü³ÛE=&Gãò·Ñ¯¦>™õƒeû¢Ý4wÅÁ¯Å½˜—2ÿæ¥Ý¦nœúU¯ûâe}ää±#×L)ï¥SoZpgþccw%?8#¾pûgñ’ù…·/y-r hÃÈ׿bÖd^ɦ¡oe-¿îa€ G¤û´Ç¯µ-ó÷SŸþf|ÑŽ¼¾¥÷Î)Ù4ì­¬Å~Ùóßs Ï=øxÁ»Áâ)›ûþO¯¼ŽEw´«U§rýJÕc«ÄV(­ãwà3bepå¢÷BÅÇ•ÄHÑá@ñüCOÂ/…ç½ú)›C?m=,®‘p^dæÞàŸæ½8:ÿpà“>e^¯\àœ„æô˜=qCè_æJúdÂ3½ÿ½yÿ¦‰75¹¹fóþ÷6òPâ’Qõ}=û•з;e´o%@@€œ“ú'Íê²,ynÏù75½¹ÂÉ_º¼çÎvãÚÛàœ [žøXÞÖÄß'Ïí¾8z"V‰«}-z4oúº¤Cݲ;ö @ÎÛ¡÷£›ÍÓžéýƒÌçGF<Ò÷Åè׃³{¥g÷œ$@@€œ³÷÷™=~·pWâGÛ“þ0ysâoÓÖÜ÷½Œç¿3þéÀ–kj|³R×H»ñÀ9‹­{E`VÏ´Ìç“wMÙú÷io…~=sOðsöÿ·èpà“Þy]‡–ö¿ƒ@€\š1ryl•Ø«J\[9öú¤]ï?qOˆpÑ "@  D€ @ "@  D€ @ ˆ@€€@€€ €@€xD€ @ˆ@€ @@€€@€€  @@€€ "@  D€ @ @ˆ@€ @  çôM/&æê;:å$×íY¼ÐÔé^00>sG¦@€”¹îÞaër¾î¿ä_È Ôd_ú€¥ùk¯œü\Bx×­>t/|lΤͩ?L^\´¢MdoFׂ'g _ ñᙃVLZ×9ïþE“7'ÿrÊÒkÖ²Ñ(‰~½sþ3 ‘=ís_yÝ‚w‚Å3võûmøåaßNYœÿ”ðʼnìÍ,,|´`[⇅%‘ÿfÊ/½*ž½?ð—®Ó>[ÉÈÙ0ä»#Ï^yuÈw çmíÿ³‚í)ÿ5eËÀŸ,,ùçèÏEÏ1y[S~Ù:óõlàsX8óщ¯õûé¤Mý~6}GÊû“^ôƒyo?žüzÊÿk?qíÔþK§=yuÄ‘ï‹çHþðÓÈ( ŽY{Cœ'*ùud¯ðÃ~Kf¯LˆìÈ @òi€tÊ[3­ÿÒ™«z®šŽÆÂƉiÏ {§èpðhö†þÿVŸD*6N%º22ç@ð/½g-](@@€äø„ÈÞŒŽ“_œ’8ÿÅýÌ:²¾ÿ¢+E‡gŸ+Vàwý,xR€€ÈñðPøåÑOÙ™õò¨C¹›ýೌ`ñ¹ÄǼC¡¿Œfôžè _zH§)/äçlðãé;œm|Dß²•²dÚêèÉY6¡€ø‡vö蜂íý~}f{>‚Åy[S:pyþš>ó–.ºØãC€ @J9@¢÷Œ~jìŽè‰Xsö>Š·[ôNà“…GNóÎØ“üûÔåS×$Dvg¸ Ài¯€Ä‡·Dâ³ÞøLdk8°hÞŠ‰SX"Ÿ[í(ØÞïWƒ™º¶çŒGæ%„·d—¥ð €¯ð-X'Ko w›öÄŒ¡Ny.m݄탞º¦ËÔµÓÊbt@)HÃà’ܦCÖd_hš ]IøšOÏj6l]äæ&ÉÍü·€8?ýñÍ Qù[î®—¶%òuÅGBÖîŒ-­x[Ë›ü·€(ã*ÖŠ«ùuH|Ö®ÌI÷O®T»mJµ½â+×íTÍ< —@€ô˜>ÿÁ>óŠ–}UñqÏÀUá[ãÇLªtgûn×T®]½B¦MÌp‰H›¬Ç ûÌ™þèWÕöuãÝ}{W½«[·ëk6¿Ù —Ø[°:N~læW ©çÞpGBëëomQý›kVŒ‰‰)g€K,@:ç?YøÕœxõlv…ͺ}ãªën*‰«Ë]]¾Z…Mo-wÕuךÀ&ôóªÉà'§ÜÒl@jÕ»º%T©×5¡ZÃ^«ÔëÒ§Rí¶UÍ @¾üøÜÈ®Ìv9ÏN=ã¡ÏL¬X«U°$>j~ú?„Ï~\ar ûÒG=9jO›ìçóÎ4@%/˹ñîÄÁ×ÞXÿ¦Š·µ¬~Ãm@€œzõ#¼+sαÛZgmË:‹= êt›:®ZÃ^ý«ÜÕµý5Uj»ÿ @þ±ÎùOOOˆìÍ8ã} ‘}é··ÏšX³Õд+¯©ìös€)E%R£åÐ 7ÜÙ*xUù›®3€ù‚øÌWrÛælÊ9׉ÏÚ•Y»ó¤Ìú}æGªÜÕ5Á  ä '^¥,É|¹Gáòùçc¤ÕøÍ‘šq#«Òí-bbb.3À% ‘ÝÇ÷tôžµ¢¨Cî‹SúÎ[òÀà‡óŸIY\°ú<^F˜}]ÏpIÈÆ‰I =8ṡﶉìÍèœ÷B~î¦ÔÎ?ødá»Áâ¢wBGG¬Î^~oD_—U«]zÏJw¶«½Ä, —H€tš´|ޤדX8oy4@úÌ+Z Eï…Š§nïÿ‹ÐóWDïþ(MéBKÇ×é^ЯjƒžÕÍPæ¤UÍ6á³z®œÓµàñ™}ç-^<{ð£ñ5ò‰{û/µjØc“Ÿ±:÷¥¡æ={ßœGæŸï¹¥i¿ææ€(ër{‹Û:Mz`aßù —NÙüMßySŸs ôá±™{ øÑÂ#Ÿ}þ©’ÏÏ÷Û±à’ –·vÉ[² ‰E‹Z‘¶iúŽÐÿŽ“ÌÚ›ü‡„ð–l€à,7¡;kGÖ ë w…þ8{èÏ'ÇGt_Èà‡ó×–Æ^€¸Ä¤ãäuSÇ®tdìš¡oîmW% w?»fÜŽê Î:@Úæ¼é2õþE“6§ü|ê›ß/x糓°¦ï ý>÷õÔ¦,ž²&!¼+S€ @8·‰ìͺ2}S÷és–}vòUÚÆù‡‚G¤¨$Dæìþ¹èp xê¶þÿ¯Ûô'f g ã_ÿtSyçü§§÷(\>ت±Ûº,]0{_èƒ/Ûˆ^¸+åý“^ž"@ œ–º]êÝ0ä¡Äe÷Míº`ÜÚÔ÷Æ?›¾5üʈw:ç=13ºÏcøã9¯,úÛ>…G‚Ÿ:1B¢÷‚§¥KV»Aó>YðNð“ïþ=."¯ûv|Ö¶¬´uCß™ôzê²7 ýNÿ¥SÖNÞÜÿg'Èä̓ÿõ|ÞŽ.@ ePlåØË£;g´É™´)ð³“ß^5soèƒþK§>Ý&{sNBdSNtoÈ ‡óžYtÒ©XE‡CG³^}°Ïœ‡‹€/HYÐ}ÕÄÁŒ{*ðFþÁ_œó†>м:ü½ö¹sãÃ;2‡­ýVBdWfBä­¬1Oß6sOÊŸü{fìNù]‡É¯L N\ù¸:8»ë£óÿzª[ÎÓŸ³çïÇìîKOˆì9~çGûÜóf¼)ýHI´¼ôÉÀ‡¢+&gñY»2  )W©\¹qOõ}ûÄý'›¾+åýø¬·²Ž…ABööð±é;ïþ%%¿÷““dÖÞПҟz¤MdGÖ™DG«ñ›#͆=i<àÑÌšq#úT¨~Ï5æ€(C:e´ë”2¿ûC“_OúÅ—Èœý¡:N~ñøñº—å¯ ¿2ä;SÞHýqÞÖþ?;U¸DOÈ Ý?oÅéÆGƒÄEc*×íT+&&æškªÜY¾rŽq%Ÿ_fF€2¤|Ëò1Ö÷]]t(pôËB¢èpðh÷ÂÕŸ^2=ŠwÐò óßLýé©Âã˜io¥üfÈÊÈ+¹›†|?mÝø§¼ü¥{BZŒY¾-alk«Õ½Î< e\£û6Éx®Ï¦½•ô‡“ïõˆ* ˆï%Döß÷=kÄêìõÿ,@޽ëØç£žÊÞðeÒ(´t|LLÌf€(ã¢÷~ y¨ÇΓÃaîÛ¡?çlò½Ì—FNZP´ìøþð¶p¿%sVÎØÝïýÓ c«(ï>IZðÀ’“ã#nÂÖp–CÌp è•×92qcâ/Ká³ð8ø8}]Ò¡vc:LˆK{#|b,$„ßÈ.x+ô»Ùû‚ž¸i=ºjò…è'(Ü™òÛ~æ­ùÂ…‘}éµÚ¦¹ºÂ-•Ìp‰ìÿh;:.uØŠû6Œ{:ôj—¬}c+Ç^QéŽ6·~!@"{3úÌ}ðþö¹/ä \–·6okêOò·üÏœýrª™µ'ôÇ>sç-‹ÏÚþ¹Ó°â3wdÞÙ5/£Zƒž#¿UùŽf€¸„Ýð%ò÷•™©Ë§=5þÙq;F?5þÍïœzõcaôHÞ=ÁG?™¶5!¼'£å˜õ9õûÌ~Sã@“oU¾½òµ7Ö¿)&&&Ö3@€\Ò’pŠÙ—>á¹±{Ž­xÏ?<ºðÝ`ñì}¡&mJýQÎÆÁßôúïGålö/–Í|<.ýpVƒz\[­^Î |N¥;Ûßö…‰ì͹:²aîÁÀ_ç }TðVÊoºM_5»SÞº‚¾ó–<}›UïÙË$„·‡O –ÏŽÚ})·Âõêx¶¾$@Ú}.@¢÷ lÜÖ¬—‡½×£pÕœÎyÏÜ7ç¡§uÉ`d_zÃÀc¯»¹^EÏÀ¤v»ZÑ#r?·q<¼#3!¼+óT¡Ñ|Ä ÙÍG½œý÷½"»3ê÷™7¬f«a ª7)ï¹ @8íùgnm=:P­A¯fw'?4¡é§³%/ËùV¥Zu=Oÿ$@Úžq€4º6|åµU®žjUâ›å®.­g €àŸª\§Ãí§ æ#_ 7HºtnùCnm=ªkIxDš¤®ß;âùܪõ{Üíù @8/ÒrìÆìnïó—Emù›ï®Zòù5j4½¥ä㕞€3 ;O½R£ÅÑ%¡q¹ç€༨R·ó§ ¸´7²$.[¯×¬Õöntu…[®$Î~¤n§Ú§³ ½Å¨WÂ÷ \•uãÝ}»•»ºBUÏ@©È1%¹ªüU<;gþ¬z]ðæiH\Ú™5ZM8¶1g ]Î(@¢ZÛ”Y«MÚèoU¾£‚g€ T$êªÖï^Û3@€pFÒ:ý̤Řõ‘j zu÷V,§­ê]ÝêœM€Ü;âùœk«Õk\¡z“›ºgD€ @.Q÷èÒ´`{ð7ik 8ðÐ˜Õ Ï–DÉ çõ›}LÌ7î蘰€¸DU®Û©Z“A‹ræ þeÑ{¡â㎄ŠG¬ì³å<…Çe76êS¯~â‚Qñoe À%è†Z­oh”¼l\›ÈÞŒ)[R|b€d>|»Eê½5ÎåÏ¿þÖæ•no—Ñ­~ßùÃ[ŽÙpFw‹@R¡FÓò ’îóÙ_ø÷¥çnôƒdä£ÁUçúv«ÚsGŸé…†PÆDï⸫ϼ¿HpãĹ‹…GBÅîï3ëâãò;:åZglÏ €KùnLLlÝž…ƒÛDöÿË~òây/<<¾ú±àÝ`q·œŽÉgûÕ›Jh¾í ñÑrìká»SʈÞR«mzÉ?o @ÙrwvÒÿÄcp£Ÿgoþícñ1ÿPð¯C—÷~µZã¯?›×¸îÆú×7üÔâ£Õ¸MÙ•ëvê~mµ»j4ñBvt3úÉ @Ù‰oÔî41”Þý¹;8 =]ñ8qÿÇ„µÁ±•ccÏæuÊßÒ¸jóQ/ENȱài1f}¤AâÂ1 á=î@€”áø¸âööY‰_¶â0ø‘üg&mNùù‰’·%ôÓ;ÚÕ*–¯uYÍVÃ{ÇgîøôµÈ8ö¹= €²—ßÖf|ÏSE@BdwƕٯÌ?j¶Þ1nÂÖzn|Ö–ì¹ýÛ&ô;NhßéL_¯Bf•k´Ö->sg¦@€\ZñS£Åà6­Ò¶œÖ==g>2oÎþ¤¿.x'X<{_à/w´ïÙ§Rív§½R£åV͆­Ë:Íåÿ0„2wdFÿŒèG€¸HÜÒ¬«Vã6ö%€'¿:¹mÎúÜîÓŸÕuêšéÑý͆®Í¼¹iJ»“Â&¶D…¨ò7ß]õW^SáÆF÷ÝÓ(´tÜé¼N\Ú–ÈÝ)+Ò$Ý?ºN÷‚¤º=¦$.=¢·AÒ¢ÑÕ›jw[üØöÕïØê†Û[W0KÀîæ&ÉÍZŒYŸu>ÞU #¢›Ø£÷‡ÜÚzTÛú}çh1ꕉ-F¿2±å˜õ9͆=ùô-W_²á<>kgæÝýVLˆ†Æ#]j´wS㤆‹˜ËOŒšJµÛÖ:ñç@€\Jþ‚wóQ/—=Ÿ®XLx3|{‡¬¤ÛÚŒIŠÅéüžè÷Žx!£zóÔ¸’¨¸Ò\ eÐúÔ¿wøsç->Žóô„­ÙR¿ŸÙõÿìèI[u{LO­Ùjx››îNl`&€2ªZƒžw6º6ã|ÇGûI/Mžs øç…GBÅ™/|»[Áꙉó/N^<÷‘þKg­ê6}õÌÖ™Û²š|)\«mú}ÞF€(ãªÔëz[“ÁOž÷øˆöؤN¼!=zJV4F¢ŸG?Î;ü¨`{ò¯;Œï4Ò, e\庪ß3pÕ„Òˆ¶7gîLù¯äTr7†¾[-Öê ¬ºáöø÷{8­4â£Mö¾ô1k2¶œN|DMÝúElåØXs@€”A××l^¹Qhéøó‘½=g®œ›õòèƒ Þ ~rºR°-ô«’¹Úl e.>î­Ø éþ±ŸÖìøðŽóròU`áænòÝ¢ÃÓcfí ~xM«+› Œ¹£C¸g4:LzyJáîÐïs7 úaBd÷9mB¿oÎò³÷'ÿéLÃã¸#¡âÐÜž3ÌPÆÔî<éÓi7qý¤é;SÞŸøÚàï%Döœu€´Îz3þ¦pgèb+Ç^oF€2 ŸÝ:þf8!¼3óÜV?–-Œ¯{¦Á±ðÝ`qÖ É{G­ >9îéЫÃVôy®$@Ê™ ŒÈ9ËÙ’=í­þ¿:ÓðÈXÜ=èÁ¾‹b«Ä^i&rZR–Ì~ìŒW>ބР»g™@€œ‘þKg¬:ÓÕìWCÿ§w~÷ Y @Èé”÷ÜÔÓ=ýjâ†äïôœÒ%µ\¥rW™@€œ±v7Nœ³?ôÁ©ßn,ž8ðɤM¡·_×ó@€/•Ù•Ù9õ×÷f¤¿0fï—íñ˜úfòϳ_ ýŸÞy]Ò›&ßÓ(¶r¬UÀ¥ í&®Ïm›ózÎ)¤$.¯ oæîÐ:ç?[ðe¿&uyÁÓ Þ ~îÖó™{BL} OQÃÞ«yÖbîêŒÞ€^°½ß¯âÃ;2ÛNܘ›Þõ¹»@ºM{bÆÌÝ)ÿ3{_ðîOžøµ¶7gOx~ì®ù‡ƒG?·Çccè»mG'Üë @8®N÷ÌÄ)o ø9‚ÉÞ0ìÛ³÷%0á¹1{‚÷-ï^¸zV42²7 ÿv4*RWä¯=1>:L~!/wÓàï}Ù~‹úÌö| |Ný>B“·¤þxîä£á0ïíÀÑô燼½Í<ÿÍÿ™Ù“ÑïÁ¹+ïŒ:Ôe꺂ŽS^ž2fMÖë‘WG½3gèÃSm8 ¾ åÐ#æ¾økÁö¿²2ïÙ„ðÆœ6Ù¯ç„_~døã9¯|~£ùžŒœC¾w:Çì _p[ÂØîí³fÎn5æ¼&ƒžÈh2èÉÌ&ƒŸÌj:ø©¿òt¸é5‘îSg.Yðnð´.ÌYúN‡ñmZxÆþþ 3&æ%®:ÉÕ'»¾æõÕ2Ÿ<“›Îgï~0tyâ#ë\û-ÏÀié3­GrþÉÿy&ñqâ= S¶„þ½w~·þå[–÷< œZlÕØr¹¯%ÿlâãDóÿ:þéÀëÍRšU÷\ œbõ£ûÓÝ÷q: w†ÞOšÑc¸Õ_0ò±àÃç+>Ž):::ö‰àËõº6¨è @øT‹Ô·L~=ùßÎw€“¿5ù?zMé–èY @.qõ»×«œ³>ôK+>Žï y;ø—á+«+Þyí7=wÀ¥¸ñ¼Jìik’–v|w$T<éµäí”ѱ瀸ÄtœÐ.nÎàŸ¿²ù›9B z°ï¢r•ÊÅšà1úñÀ _u|üýÞ`qäåл £› Œ»³SÝêÓw„~ûuÈ13÷$ÿ>e~ï©Ñ·ƒ™   ªXçÚoåm þç×ÇWCÞ §¯ îº'и–ù @ʘ®‘ÝÏ祃çËô¡ßg÷œ[9¶œ9 @ʈàìyE‡C½Ð$*F™ÏÆ ie5P4Kn7òÑĽ#$jÄÊÄçb«X @€” ±Õb¯Èz1yÿ… ÑS²Æ<x­K¸]ßØÊ±—›à"7ö©Ðój€St8t4òrèH¿…}&™à"U­ñ×î ý÷… ÇLÚú‘•ÀE*z yÖ ¡ƒK€LÙúÉð‡+ÒÖ$í* ‘ f€¸È„f÷ /º£cÚöЯ JfõÈí”Þ®kóÍšÞxÏM·–«TîºØ*Þz€¸¸6ŸW޽:üRà»âªGt¥£f«õ„ ,m@ÚªéŒ=Iÿ[ôNð“ k$XÜÁ}3ÍP†”oY>¦kvÛi%òÙ_þ\82m{èÒÚ¶3'@ ‹»oÊ}­ïîìûÑœ/¨£v·ßo> Y3³@€”ik“öDßò=ijîà‡R€Ì=ú0õ> £ûUì@€”÷z&kß?NÛ‘ô§ù‡ƒ_hÒ¼Œ^:ø«á$®1/ÀE®jÃj7 ]Þ{óÔ7ïço þbÎÐâÉXá—B‡c«Ä^af€‹\¹ëË]Ö8©ñ]#íuhþáàÑ êmXCÍØüÃÈG“ÖEÿ=Í PF$Íè>qÊ–àÏ/”Ó°fìý]GÄV޽.¶Zìåf€(c⇷j;{_èOB€ 8°ÜL e\ê’¾ fîNþï¯;@&nýKÛ±mî1@×srפü7ƒ¿úº#$}]h»y @.}§uO‹ƒûuȤג¿[5¶œy @ʸr•Ê]y9éÇ_ë= ï‹;¥·ëf€2îŠk¯¸lȲ»¾ÎS±¾,î>±S¢y @.&$‹>ùÚäH°¸÷”®Ìp ¸ò¦+/ïœÙ®_á®ÀŸ¾ž ÷)è>Ä, —ˆò-ËÇtÏéÊz1ôö¯xSzôõzMé:Ð —˜Ø*±å†?’øÔ܃¡?e›ÐK¤çä.ŸÈß~|£AÏúÍJ>^]â2s@€”q}¦u’ûZò÷–âæô9ûEW?¦lôo=óG®¨ßgÞI‹Æ4 .I»gÐã¹MRWgÖí1-µâm­*™  ì¯†\9~Màè&ñó½çcÆî”ÿ÷̨½ÃVe¿šÙÑ&{ú©4Hº?­ü-ëG—FÌP–#¤jl¹‘%½´àÝà'ÿ((æ |4ýɶ9o†{@@€€@€€  @@€€ "@  D€ @ @ˆ@€ @  D€ @ @ˆ@€ @ ó@€€@€€ €@€ @@€€ xD€ @ˆ@€ @@€€@€€  @@€€ €Óÿ†sY‰ËÏVÅÛZÞ*@ œV|ÜÞ!kT£ÐÒ´³–üЄ„ðî €àŸÈå ’î÷uǃ@€@€@ Ny/ä÷šùð¼6Ùû€Ò „ÈîŒü7ü|þ¡àÑ®O  ¥¸²/}ìÚ´m“6 ú×¶9¯ç ¥¿$²7à 6¡ € "@ ä”"{3â³¶e ¥ ãÖ¦m›¹'ù÷ÍY¾@€ @(ÕIaÌÞ¹ƒIœ¿ä€ t߂ޕÙnâ+“¼ €Mèf € € @ ŒHý¾Ei­Ó·e €àt$¦JÝεª5¼¯ÎÙªZ¿Gë¸ [Ã@©«X+®f\Ú–ˆ@€ @@€€@€€ €@€ @@€€@€€ €@€ @Ì @@€€ "@  D€ @ @€€ "@  D€ @ˆ@€ @@€€@€€  @@€€ @€€ "@ D€Püw¸<.sfþ˜ðâ03Ý™ng8€¹¹K«´4ž‹TEc RÜæ…¯Ýè}"é ã×Ê©‹MµÅºÉ‰ifº ÕÔåS¦Tˆgí2fæ;dϘá_º×yNÜʱc¤8¹Ç`¦«TR—h  @m,@Ìt%Zéþú÷²—ê¶»üŸv«×ëš-®ïæœ/ä½*Öfͨ~N«Rü,NO_ Ûæ{"£FynÚÚàýiUÊÓÒÇä”>N¸¿ßåTänFìòxׯPWd¦-oDìÑ+rã—‰ùk²“OJ\šF€0¹´ !…EiÅÂ\¿-rBô†Ø«>NW¦ ÙàWí¿_µ=b—û{ú"—Š\Þ÷]¦Ú-Ï™>K¿Ãû ë”E™Ù¹³³ ¿ÇBÖQá¼²îsÅüŒ…!ëƒË´Ûü©7û÷Z¬ßâ2G¿ÑkqP±ÇÂб%Â7RŒÜ(<Ò‹?†n¬°ˆYÏ @m4@y)‹S+ÅK«R$d~ÖïðxG™ŸPh—‘3;µJ<#ý[R¹ò›QêÝaIÿW ±%.Ÿy,Ðm‰ÚãñÞĸµ—ÂÁunø}‘ó‡á;]>Ê>®¸Ø˜UìcŠ‹SRæå° @«äÅé™G…_S*¿I«rüáÊ(Pmòz-­JyVz?÷¤Xëµ8b£jc@UýǤV*ȨÏÕ…ËE§Y©K/ÍÍQÒ†ðIñ…)î âV{,Œ[í27¹@ šÌáBýçÆ•º|°R³;x]h©"7wöè°*î‚ànØâ³T¿ÅifÌÊäCŽßÜð2©jåùêí×î÷â$ºØíCÝ6¿ã cÖ8ÍJYj“¶(óÚïc¼$Ýunò2·ù‰Ë'Doâ6¼@€î¦ÑUª&%¤Úg%.™ºÂ¿<¶Äñ‹ëÅGîÉË{82ª•gÊœþ{ýË©Äóñû•_û¨w:dåÏVªm|$ü± 2!fsŒËœÈuòœøûÌì9cÂ7E @€ 8@LµÕá;ÜÞ§'Ä–8}ÞPPÄïwý,±LüÆgiPño·×=ŸQ-^÷ŽVÒ>’¬£Š‹ÉåÊï:~-m\ol ¸ÏW™ë‹"¥·ÇGm‹2ÓíÓIoÒHSÅ  C¿krbaŠv«Ë?å9IK¼—ï‰ß¯ø^ÚÿQ>KµÛÇ„o‹ YïS[êò©Ë܈õ uaqí]­2Ž( +òzÃ6}N®mzò€•bö¹~]ìö‘ÿ ÕžÆÄ¥ó?®8c„K°€´Á= £4¥ÏEa[Äé±+¦­ Ù_ —6¡Ç–8ýÇ&uAö¥QoðY¢Û&ý{Ô^ç§®Ú¾Óóõ‘!mB—nç›U÷5R+”?„ït{ßTS>!zm|ã$@€´Ù©ßaª-ÓH‡ûMŒ[™d’—oŸ•>ß{IÔÕ¦ÀÊôj᜴ټ¡Ë®¤Mé!ëýª¯Þ_²9*h×1é¶½Ò­|¥SÑÓ+~‘ç4þ’,@› «ù/×åjs¥ÓÌ)jcö¹}œXæôe\©ë'Ú­^¯_u™VAÄf3ÝŸW6ÆElŠŽÞëúÑûC.ê¶ûžtž\à6/q¹¹¾8Œ@€„NJX—à2;±Ð.#w¦<'zEÐïšðnï%–9ŸJ?¬<+ÅÄ¥°8)ÖºÏ_ÙÐ×óÓf/\y­ú꺭~Çí³¦Ï$@€ ¡fºC*í6Ï·b÷¹þ;r·ûÿ…ïôx7r—óGÒ¥XDèø½_aØvs}ÉŸnµk³&^·ÍãªMA•SWhwz/ Ù#­¨¤ô_®ÙeÖŒ›Í  @ !/wvZ•p6÷š;^Õó\³¶±_Ëcaä—9)Òuö€ @dª)ÖI'›GïuûP·Ýó͸RçÏ¥Íèq¥N§Ìõ»õw*& @m0@ê™ëwé5[Üÿ‘^­8/íáð\¤ßdHñA€0 ¹|PàAµ_¡zWL±ë¿¹yMr;݉qó3Í´ûµ äºg†4IÐè*Tc#6Ű€is @€!@À@dÓ‚À秤8ÞIÏŽVÔH;^@€Úx€ôµŒ–3 @ @€ ×=Óc´®RE€ @š=@gÄNJ\šF€ @¸ @€ @ @€!@€€ @€@€ @ @€a@€š…ÌDÖž!@€4oxt—µŸmä’7ig]„´#@ @ÍÆÔw¤õ+ž#FÖÅÇ}¬€\ ‘ ^@€ØÒìÆF®s™¡XÉ,€ M¨ªÎ®péíQÚ=aæáûÂä99s„¼´…ýí½§2 @H“„‡8=v…ËœÄB1_»a”z[„Ç ½1KR} öÇ;~î»XØÈ,€ ·mBÌú8×yš­ºm.ÿ§ÌWoò+ ,Uä¦- Xå}$µRùCü~åÿ¦­w1 @È-Ú¯u³Æ:e^¶Ç¢ bŸ¥¾‡2kôEŽÿŽ.vù8¬Èåý¼WÅÚz äæèÊ4VÉiÒÛγõëÓ ?E‹_j·º¿¹[ñUÂù™ŒºI<¨8#EGb™òËè=â‡y'ÅÚ`ÒX¦Ú2µ¡o¥]Ƭ馚ý¡;Ýæ©·Å•:þ÷Ê•Žzq%Нì,U{?ôf“pbÚ*q7³@€Üøº;#¼—ªvM]áS¥/rüX9=z¥ãŒ¤EnÔ*¯E%¹'„Ú†$÷¤P«Þ(ÔŒpÒëÉáOw´Ž›nÜŸC‡ëWÝÛw5–1# @Èeú½a¶éÑ…¾>•é‡å"v‰§‚×{¼žT®8“tPø¡¡ø¸RR¹øû,ûÙC_2Ðvàæ£‡Õ?®Iú ÊQÞ£ú2# @wy€˜‡ïw›µÖ!;nÙÔí2rg:d'.¹0-x½ë›aEoÇ¿ù«©—Y#œW­WT˺É:2 @ÈïlÓ³g[%ååOŒ]•0ZW©Vª¹(͹ç‘ÐÞ'¢÷:ÒØð¸ÊI±V¿]|ûëÁݘ  äòꇾ(òÊ÷í2òó§.÷¬‰/¾Í=y9$n)@.mNOÉLd0 @Hƒ§œ;ÍŠZ£Þäþˆ]ÎÝjxÔ‹­ aÎCÙ÷€¹šYØ͔Դ¹ºmN¯óx-í°ÃÅÛ ¬£Â…‰ºqræ€ùݘð]á«‚ÊËÄoëo«{»ñQÏo±|]§˜  äp¨™ö Úk‘f{Ê!ñtSEÇ•¢v‹ÊLdÆÌj•4?+¦Xø*û˜âb“ÈI±V̰Jd.@€Ðq‘Ë’Üè7©6º¿WêøÅíÜñêz¦­Rìëðx‡vÌÀ] b~슄Î_4ut¤~N©P~ŸqDø%®TùÕÁÜÊÈÈè^æà® =ú±‘«¦­õ>ÚÔñWêò™]zÎì±›£ÆG­‹3ÕTÚ¡ïo›îÙýEÛ>ÌÀ]¸bŸ9}f\‰â»¦Üû¡ßéòþ”Ô…™×ûžr§q9 €»!@Ì´åjsý¶H‡ìÜÙk–§¡ïkª.S÷4 »=?ñ%##£öÌ @›ªPÛô™Ó…¼ôá;]>lê½YÇ„ó.s ŠÞôJÂÀ] U¡®ó"×eÖrŽ ›ãÀA}‘÷cÂwF\õ}uU¡}'F¹s, @wM€T…ڤΘžqDñkZ•pV·Íåý¬£Â…¦ŒäCâ÷cÂw\C½ÖèŸäø Iï™  €6 “âóólÓÓç‹\²Þí­Ô*ñlðzÏ“ÑÅ®ÿnªSÎÓ«…s«BöMŒ[pe|¼(̘ÚýEÛ FFF÷0 @m<@,ãgæ8ÎÔm ÝàþzÄ.×÷£v;}¼Îçhän÷÷š">2k„ó+Bö™év†×GÇÈi»µ#Št#wèŸú»Çf {Ñvð Ã<#㲓–¯s{#û¸Ðd—Yåœj3ŽˆçâJ]?¹.ÎLW©ºrÕc¸ß&mÏQS:?=ü ö|hãŒ1¾×}–Õ®ÈÝò¯bKä?Äîs8Ý”ûÐ&`™õ;áEŠ#w9~Üw¹ŠÚëö¡"7ÖõÎéo“îÍž @mT»íî1õ30^5j¶zƒý‡©•ŠŸbоiŽøL]®Þ}½ø óÝ ïøø‹Ý™  €6ÈB3ÖÒm–eeè:û·êä½ÔJálsŇÄeNÒ²Èp¿ÍÚGžñ$³Ð½`õüЈ§Ò ?eÖ(~•6‰7W|$túrlä¶Èˆ¤×X³Ð½h3 ¿v“íÒËÏKw»J¯û3¥B8›yD~¡©$|§×[’ÞãuÖÌ@Ôñ™Ž}½çÛ”…É?Ö×Ñlrx7xµÝÛÉåÊ&ßµÇ㽿Šé¶¼=†:d6@€Ú ž£z>´Âúƒ” ñû?n•Û<—a%púï¸ÈMÑ£¯9ûãJ£BK5]z™42âg €6çïn/Yzͳ®L«Î¥V g‹þ#ÕÑ\û@R+•§uÛ½_³Œ_•tÅáƒêá~›5ÒÛ¦šƒêAŽóô½Çi ´{žhC,u#’-ÓüO9¶Uþ¯ôÊ_šó.XõbK]?±Œ_“ EG‹È ÞôW­„Œœ¶[Ós”¿œhCŒ;ß3>dTª6qmZ•ü׿ ‡¬cÂù˜b—Oš"BŠ!{ŠSu™zӂЧFx¿Â,€Ü…b¦; ‰ÚãþAÊ!åiSÍ~Íå¿+Wk·úœlL€¬Rý–ñË“³Ž*j•324 ½Çé##£ÌÀ] U¡ÎsâVºÏSéw¸¿—yTqA½Ù÷Ø•›ÈmÓæåH‡Þøö½b­8=¾Ð*iVÞåÏÛ¥÷+ Þ×ÐfôEº.½LŸb@€î²1Ûí¿Ü»Úy¶zkr¹ò)&¼ë7_»—ÃkqÄÆìcâu#$ë¨pÁ·À§rtØýå•“J•™¶\ÝÐêÇ3fASŒŒŒîa@€î²ñ\µ>j¯Û¿²Ž 2kÄŸ¥˜ˆ-qú<`epÉ•Ñ0.rcLb™Ó—×  Õ]æD­ý«;_™i©h7çÀ] ÞK#6çž®Úd¼Î¿Ê.cV¾´‘\ZÅò²çz-Ù}åݰ²ŽŠ¿¨6ù™¶Vµ/huð~‹˜Õ ¹¯™öªÇP—a<ÿ@€îÂòÒdQþT¿#¶Øù³I «ÍõÅaγ£×¬ò©ŽÙçüé´µåI??ÄunÜÊ›9óãJÏš‡LàùpˆMꢌèb·¥¨H>äø_¡¹v‹÷kB^Ú¨=îïK«©•âéñÑkâƒV—fT ?Ç•º|æ2'~Å­ÄÇ¥= £§…òü¸ D çY Ë¥I<èøµ<'¦0~¿Ëç«ËÄé9sõEï¨7yŸ0Óí—nÉkª)Ö]¾³UU¨ë\ýÆÑº]cÃCÚ˜>Èq^|Ÿ ú6¡¸KD˜µ2ç„p1¥B<ë:'dǘð%)±³³CÖ{¾°Ê¯Òm¾v‹E캸?…tÊùÕwº2Û§ó³æùDnRäæÌ­ÿû—Ý—k»ö3扗„áO¼¬|‘çÀ] ÒFóˆ]îïI« q¥ÎŸZ/Dh;/sbìòäqQ[£,㥛ë×ÇÖ‰©¦Tó§ Û¯ ZRšTîôµ´—äÒŠJ™Ó——VN´;ôC]¼f¾`eîÓñ™ÎÝŒ;w¬ó ÌDv‡ëtí4¢3p7Șð]1ÅnÿªßˆžuTq1¶Dùå¤Ä‚TEnÎìÀßö~¤OûúVXÄ&_ Ýž0§Yé‹§­ -‰)vý¨¡ÛóJŸ—Xîøuö1ÅÅì㊺÷¿$~H,S~UçË”º·Óª„Ÿ<ç8, B€´Q2™q‡ŒiõCž=kºj£çëIÅ~‡ñ\Ä.ÏJ·Û½öÄóÀUžÇ¹aëR+„óN^ÿtô›‘vXø±§é³Ý™  €6¸‹q§!âËÆµZ©8”Z!žÙà{4¬ÈõÒåW©•â™5Š  ¹'…Ú¤rå7ÒŸM—Ô…ŒcÖ”æÀÐÔýçl­I*¿Í>¦¨Í:*œÜ©ø¬~E#÷D†ÄmP­K™ Öobÿ'ü–»”yÚu™5âÏ­!4®G¿]|‹™0`¶q“}¥K¥¢öºý+ó¨ðkkˆÊwmb'‰Ì €êÜû¡‡Â¶‰o´æUú=%> Ö÷|¥×CÌ €jÿpû{ÄÌIGç[{€H²j†ˆ/½Àì€ã®Æ2«ˆqIn3-§V*ÎB€H·á}Ѧÿ3Ì€èðx‡vëóX7§»Äè½âÇÒiU¹œVr‡«ÆpŸe?›Y0€ÕzáHzµp.÷¤h0Áq­Ä2á›ÞcžyŠ™hÅd&²¿¥V g 5<êÅ— _QêËL€´RFt2rH² É8ÒºÏø¸ñ]°ÄZõáHŸq}º3S @­@/óÞ=Ÿ1íóûåIÆïuɳMÖoßȪ1Üø¸|ºP-3‘ÝÇœ€´S—Ùï‹Ú#|bnábêóÊÈîíË~2ôË®²Ž*.>?±Of  î:|pfpAº«UöqEmöQÅCIB™ðõØ 393p¼,¼ÜWL³Ö¹Í´›§Z/æôò 3ßWÌd&²Çc÷ Ÿ·…è¨'Å”n­¹¯Ç}í˜= €VUl?Ê=ùÇÙ釅Ÿ²).Jw¹2¤3=#©Lüf í.¿p§8æXn6䳸§y€éxõ‡¤W·Mçœý!Ô:eOIbÎ@€ZSŸ‘c3ª¿¶¥‰Ú#~ ë&{€ùhe^°~±sØ6ñͶY5Â/6±–Ì@+õ¢íàîÊ Ë‚Ì£Â¯†qûÄÏ|:ʺ˸õ. €Öl€Mÿ1‰•ÿ»“û6²)nùóëûWÕc]˜% ðÔˆž«Ö9¼Óâ+Ç„_cŠÝ>r›X蕺P:—ä–÷~ì?”=*3fž@€Z¹výž+qø!µJø±%$n¿Ó©Ña»õ£Ã‡Ú¤ÎÏÎ:ª¸°ÒûHr…òû[YEÑmOŒ 6ÎL€´b“õcl¤ÓÐ3k„ó-¼rÞ>súL)@Ìt‡T®óÂ7Ú¦',ö^¢-º•¯'ýo°‹·H‘u“ËLd™- €VÈ>aò´æ8%=í°òt\‰ë'ÙÇ…/­J:èøµ©¶L-È6DOJœŸ[âôù-FÍ…È]âÓVؽúøc¾@€ZÏ9â‚fˆ3VÉ‹ÓÍt•*‡ìüºí>'sN\"¹'„ZßýViõãªÑíÓy-Ü—qDøåV¿¿~›ð¶¬›¬óÐ ‚רÙ8)q„Lja2YgIßñ½{w1–ÝèóÚuhwf“Óñ›½Ôézÿ»Où©ï’©;§¤,I¿ze£*4¬Èçõ†önDîö|Ç*éʯ 5Ó–jW†g¿µé³ígðºÐÄ|–šõß9É7µÒþUéïÌ#Â/©•ÂÙÔJñLÆÅù¸ñ”~›øšf“²RµN¹_»IYP(l ]+p̲‰ö^ _šQ#þܘ_곉Â¶Š¯YELpõžï°Ä©Ã¶˜bñc)H¤K¸ÔëGž5}úoäÓƒ®ŽË\ç&JÁÑÐ×N­Pž6ß~åÇ›é*TSRçgû, ,‰ßïrêf$©\ù?ëH [^#@€šH§Ú'–ÙT·Ô¦q×|›¹ëpï•¡sŸ‡²‰µôtʶ}乇”þîÚ±Œ[š*ýi¾.¦. ¾¹îªÅ¸5 …ËØˆ…©±IóÂwº|ÔØ½*G„Ÿ]¦Ûfó:Є¼™ŽÌ:ªø¥%Ä{ž|ncS}€ŒØ¼nÚÁ 5þ•Òûc—¥Ø¤/ÈJ.wjðÐÃØ·Æ„ï ûs„TývYÖæH…±kR+ų×î'¹–ßbÅÚº@ã5 )MI~©kr…ý©–ífáuYwY»Æˆ—=OZ±ˆÙçúñ券“V%†ù¼ÖÐ÷ˆÜíùÏ1á;ÃZ ©g®ß¥Ýêýê«ï"ûí2Y{^#@€šrÈb³—Ò«~I¯–ŸM,³ûЩÃvÙvó³)š4>¤½S [nfÄ.cF¾tºù´µ¡%×F„´Ò¡Þì$¯KªR*”ßk¶úר6V*rsæ4"º]Ⱥ òë­„Hï9×~¯ @MÈ·`ôó Fõê4¢Ó}Òžéï:<Þ¡÷ÛM ûÅSÊŒ)‘½­m}€˜iËÕÁë*”324faû5«BöeÎ7"ÒÉèÖ)3¦_¹zr¥I ©ÙÇ„ ×{Ü¡k…r^#@€šwcº‘ûL»yY¼³Õu7qW ?©Ö \òlãG¸¿Üãfƒ Ò¬Fë*Unóc׬Pï¹ôþu.©²Œ[•ä8#mqt±Û‡Žá|ØvßWgf,¼ökHŸÓÐ-‚5Åêi+…íC^Ìk@3S­S–ÝîåVÊŒIù·úý¥‘.ŠÚãö¡të^) lÓçåÜh_ÇåMêë⊼ÞL?,žm(,ô;¼Þ²IŸŸUÿñ^K"6þñ˜ÅZ§\«åê±ÖÆ]o|ö €4‘º_¾Ã¶‹oÜr€Ôý"°L¾EÖýÖO¿| ÖMÌ>·êãÁ!kfþ_Èå³?ÊÕR¼\yØaÆå9çÙñ+Âwzý#©\üÞifú"écf%-«¿-oÔñƒaNÞä5 eäÁøýâo5@ôÛÅ7»öïxÿµ_·ï„³ÐŒUw6–ÙÅŸÛoâ Ýÿjˆn›Ï«—0T\µ.®1r9B©<Ŭ•NH—>?`¥zwý¿ù, ß²>¨üòFô2çBÝæ¤rÅiKÝ„)Ì@ ê5æÙÇý–Ø•dW\¼•øNQ=uÔ+×~݇ŸzàÕzû÷S*?ö2ïÝÓ¸‹ñ}ÒJKc$똢vLøæèÆH=iózî ¡V»Õ÷¸eüšÄËqR©2ÕT×Lo m¤e˜}ópx/pX!íḕI?,üÔgܳ¿_ÆÔcØ]d&²vÒÆö^æÏ>.O¶RKwØjÜ%XU¡1ûœ?M>äôUȆ©UÒªÆÍˆô9q¥.ŸIM³eꑆ>ÆT]¦~ÉeIè£ý'îðp·ûy hAòdë œãâ…[½+xµüP‡Ç:\Zݘ6ÖãV6tׯ€ØgæÏPäΘy³áñ‡rµj“MänÏw­SeÞècûX„kºö6ïÃk@ ]+¼Õøˆ+Q~:Q;ÎZZñ¸ÇP ·CZý°ËÈÏ—Îqž²ôF;2x¯æe÷庞£üÅGûOÐíù‰/uëoÙ‹× €ffk%íå¸ÙøÈ>.ÔZjÇÙ6Åc¸™q›—¸?<)l‚RLŸ¢ (×L]&®PfÚDtìùÀßÄt›0ÝVñuífåшÊwÕ›¼Ž­Q‡nœVžRáøMýcðYªÙ1mÍÔŠqQc¼£•f—Þo™®(£ZøÅ}AÌÚ[ ~6Ѫ§Gz+ìú샼€´§ëi5A:G£.N8çØÄÉLdÝ~Óe¸ó ÷õ¸ïÞ†6œ×}„ñ”¨‰Nu¡±Z½Áñ@x‘ò­¸R夈©?yü·¨¹˜\.|åß݈´¡ @­”Mì$7ioFsÇGò!ÇoGëö„µD| @€Z)«È‰®ÍqÇ«?m@¯ûA«ƒKżðµfºb @à.4ÜyØËYÇ[ê2¬Ìá¼_¡jÏ+Á["wéNXúíÂ;-¹=ç¸P;T­ì;1Jñ‚}ŽÏó6iÎr}‡z­Ö˜ioíB3m…j˜Ïº°þ6ižý¬’Ÿú»§ óÐ e‘}LÑb"­¸ŒffqÕ#£vÆ÷wz¸§iÀ„þiÓFNÛÙèý"Ã|Ö«žá=¦îkt”¾Îo_ïf  ô^ ŸºVܸBÜP(ßßRç€DìÞ›:f²qãö×ýÁROô™Ô˜ø¸CÛ}À”þÌ@k yKt[”Çs[`ãùµÔ„£}Ç÷éÞ˜ÇÚñ‰Ý‡ùnøËÍê/¹.UÕKæ  õˆqänñ£–úÐ'ë'ˆþáR÷_!Ž/??%Õc€CŽÿSu™úÚy%¸XÛµï˜g˜/ €Vĸ‹ñ}®ÓíÒÊ”_܉‘¸æÛ¦ÞÒšËÿ=øÄËÊ!Ï['»½²Oóûþßêný-ŸfÆ@€Z —<û¤¸ñÔ¸ìêÒ '…Úð"áÝßêxÛ?tŒŒîyj„ç+ƒ]…õZ­}z¤)3p§W<1–=ôäý&òd«°Œjñ§;µê! \./‘™ÈlÒËÉìòÀ}ëĬ€ܹ=ííâ'{ºäÙfEíþ~XøéN­z\)í°pv¤çÈÌ@€@1ÚôÝñdÖ1áüކ¸Í°OgNÚÇlÛ¸” ñ‡Öõ Å5Ì @€@ ß.¾ÙšãCâ³@>‹Y @ZDÈq/³ @€´ˆ©ŠÕÌ @€@à’k›’V%žnÍâœcǬ´¯x¬Ú Væœ.¶ÎMèŠ-Ì @€@""O± IØ/~Þšâ#b‡òíÑ~#_`FÚ ~Ï=ê¿T±>«Fø¥5H\‰ò?ƒì=Ál´a–ÚqV±û”Ÿ´† ^¥(î4¢s ЦWC&>ß%p¹°=û˜xáNHr¹ø¬›ìaf @ “V’­¦&”)¿¼S’{B¨u›i»Ð*¹cÏ:3mÜPÇ¡O†®ÊîÔ²rOеuß»6åð½"Õ*„™h㌻·w̶‰L©¿¿“—d%ìÿûøÇÿÆLÜÌýMj7‹ÇsO w&BNеÑ{ÅBÖˆ»óRFyråãë5¦ßsäsý— ë†: ïÇÌ8Y7™±ÛLûœ´ÃâÙ;}—¬ô#ÂÏN96)Oèù¸×|ù’¤rñ»úK«ÏL-Plæ<¬?sð$€³P3‹Ø¡|GÚ£q'#DÚ›’R!œ¾Þ¿×…ÈYéDõ‘#_dn@€ y5ÄDvŸ÷|‡¥GÄŸ[Ó)ê †ÈañÇ€e¦aÎßcv@€ Ød½Å”ˆâÿÝéÕF…H•xÆ¿@±aˆrHfÀPWC•Ýç1Û~^Fx®µGˆ$¥R<ã»ÈaÅ€)z0? @H:¼0h…|ß»KÖ-6®{ÍsXøä°'º0C @†·/Dæ¿T¾%á€ð•¡DHý#.yvuÿ~æÀþO¾î¿§GôxÄ}¦}vä.廆!Ò–˜½âÇŠT+µqgc³``)S" i%äRˆœjÕ'Œ»ßÇ €‡Dkµf£²ÒkžÝòìc ƒ‰ärñ™‰ì!fÀ=ôt§'²Ž ÐL^èú$ @-¢Ç°Ï Ð"z›?Û‹ €1ÐnÐ@6¡@‹˜6N™sB @ ù…®K é@ÂÄ· €VîÞ¿Ý+3îjüPGê~ïf¡;ILŸQ-þdñ¡ß&¾iŸ8iêøóñu¿=3ÐÊȺÉÚ[GYˆ“Ã-œ"vŠï'•‹ß¦V ?fQ\È9.ÔÊ¥WÒʇï"ùJf  {°ÇýÝÓ«¿Ò†Dï?~jD.Ì@ë^1Öoß2äøø(62O @À&ÖÒ)¥BüÞPã#®D<Õoâsݘ% 1vš™ íý0ÄI>(üе¿ ÀP˜Oý‚n‹xRÚ bHûArëë”è Ñ2™1s`@Œ»ßoaá¼Z±ßV@R+…3®ÓíR˜! ä>Ë._º­­!Eˆj½PÉì€a.Ã{™˜Ž™¶JQlhû@b÷)?î<²7s`&é-&H¿Äg7Üó@–)Ö3K @@³QYeègDîR¾7Ìið“Ì@+ç:Ý.9­Jñ?†¾äò^¡6±Løvr„…3³Ð ÉLdícŠÅ·…©§Û"¾.ë&ã®X@€ZÝ HWãûâJÄÏÛR€äœ.ê·‹oMŸ`ÁŒ€´¦n²âKÄSì§jS+çrŽ "‰į^’êÅœ€´"S¢'„»Í°K‘'[ilã,}†:½<ØBm>Îc¶ÃœŒjñ'ÃÝœ.Ô:çÙdÉLdÆÌ€AĉE@ü~ùw{9Öq¡V³Y<ñÜÄç»0O @­\§Œ’,sê~‘¿h+y'ÅÚ´*ñLÈ¡4z¯øqö1ÅÅ´JÅ9«H 'æ ÀØÆYú朸¼'Dú…^ZUÈ­{?ãˆâטbçO¥s8îTt¤” ßgT+~ Û*¾®Ì²ŽpγK™m!\Úßb"k?ÜmØ—ä{uôhwf À06ª·÷˜c?_·EþŽÙ“VLÔ˜{Û%O[à83}áĸ‚Ôð^oÞ‰øˆ)?1y¡[×ÖýŸ«‹vÌ @bÜÙøžú·Èó¦Ž;::¬*Ô&mA¶ÏRMQúañlKHÂ~ñ EªU¤…jì$æ  «¯%ú-v³¦›jª£öº~Ø¢« 'ÅÚ5ò «(öw¸+drâ²3Ý!Õå‰ØØ²›ÎÅZ÷™SÖKå™  €6ìYó·;T—/úL½9 ª¥÷Dí?˜6Á¾ýÃíïa.@€Úê#£{úÛeú] »¼ßjÉøI Û*¾ê³Ð~£qW㇘  €6ì…+D·O—Pæ|ª%Äw‘ÃÊû{ÞÏݯ€Ü%â[ ÞKtÛ²Ž ç[ô6¼{…OûOð8³pWH–O}€XÄ,I•&lé»`9fZG2 @wY€8ÏŽ^^-žkéMèaÛÄ׌»˘ €¶ Þõ¢ÝêýjÖ1áBKHÎ ¡V̰Nb@€Úz€Øg_ ñѫҫşZ:>$™G…_ í+d&²û™  ÷Äq€m‚KœY€ÏÔ>‘ÖWì²xš ¡}Žß‰ø¨[¬üÄ<Àì%æÀÀ q È>.ÔÆ–¸~b¦«¸êàÁzöÓg&—+¿½“’|HüÖm†]63`Àzsš¬Þè|Âc®ïæAŽó¦Õ»òt)L´[¼_kÑCˆçBÖ5›”5ñ¥â…Š-Š”I:fÀµ«sïµÈó¦^¹ b¼$=±ÌéËæÔ áLx‘øŽv³âM™‰¬£ôëþ¼Yhî ‰]F~~ZµòL³ÅG¥xf˜Ó!ëp¯¬»Ì˜9¸‹är„ÌÉM«r<ݺVÜÇs€¹ŠrFÆÂ¬£Âù¦©Ë„<÷@€?q_³¦.B~mŠðÈ=)Ö¦U çÜòíryî€ ò)ßÒT§ å+3‘µã¹@€4LW¢‹ÚãþASDˆs®]"Ï; ä†ü–5Í*ˆ×<ùtžw @È Y'/ÌŒ-¿Ž+Uþï–O9?(~39|Âdžw @È ™‡ïK,wüúvV?Üf²ùÒˆ‘8ÏN[’sB¸x«±SùÏ ¡c¬Ç‡ŽÂs€¹!3]¹:~¿Ë©Û¹ oöq¡6 PQâ»X\ì½@XÜÓ´Oæ€iÿr]QSH˜Y#\xÁªæ€iÐØˆ¢ˆÔJñtSˆtʺ©Ÿé+Ìr˰©âJ\>k’U“b­C’U s@€4ÈsQôºÜ“B“\‚•s\¨5óeÆ€ ²Ïœ™Ÿ{¢éÄ|ªÙ怹Î%X¥Ú¤ƒN_6ÕFtÍ&á„ÌDfÌ,€ ò^µ¡©.ÃʬΖêÏ,€ ¯‚hoï<+¥V gûYô$3‘u7Í|‚¥nœ +"@€«DîöügÝŠ÷ר}âR+Å3ÙÇS)~”u“ud6@€ßoÅ iV@®•xPüŸÌDö ³@€\b²8#ë¨p¡9$é ø5€¹Ä!gÆŒ„.Ÿ7G|H¢÷(?` $t|ô–è„2ç/š28¶‰oø,Ïõž/Ÿã·H>_Ì´Žd.@€Põ¦©ÕM½âá³P±ˆ9 @®bª-SÇpnò羋K˜ ä*cÂ7GgS\lêñ[¬(d@€«8ÎL_˜{²é7û/ @ÈÕtÛü7Ç]¯ü— Ë™ äwãV'¤U9žn¦aò—9)K›ëÜÀåâ&æ€ù"7gnsHZ•xz‚jì8f€©_)h®‘$TþoR˜ÅDæ€ õ)ˆÜÔœ"I>$~§HµR iÖ:ß…Šsò†9 yš¸ËÄm~Šæ Ü“BmÆůñûÅS)•™ÜBm|©øEè:á u¤…3p—Èh]‰.±Ìé˦ àÕŠC> sì&{õõô“2™Ì6~’¿ßb‡²GeȺËÚ1 @wc€Ô±IŸŸqDü©iV=ÄZy²U`C§ÓˆNÌÀÝ ’©+Õ»›;@€¹dLøÎˆä å÷€4{€H¼—Dn”‚ €f3íÞ°Ô*å@€š=@$!+h‘½9&¥Âñ[@€š=@$ž cÖJ‡Þlxd•×fÖÈ  @ÈMìÑUª4[üŽÝL€Hñ!ë&ë'{Töh‡î:ðü @Í!;ovîIáæÄDö(Ï; 䦹ÎM\~Ó+ &²n<ï@€›æ83}1 @- ÊüŒ€´H€LŒ[•˜uT¸@€@³ˆ™®B¹Ûó@€š=@$¡B Ð"°R»‹ € Çi‹òN Ð26bGDÊ!Çïhö­«lôFtr{RÇ¿0l; @- æá»ÃËœ¾üË©‘_¬ ®<ï@€Ûâ83caæñ笣¯~Kvdÿt@aÆÅùºéÂó€¹mâôœ9.ÓåóeÝdÆ §rO¿ÇGj¥xÖ}¦ÝŒº‘ñ¼ @šD»Lo##£{_œÒ÷)»xKO×|Û$·vé¶q“\x¾€ M £BK´ ´Às @Í ’>‘<·Ð"2Èq^°‘‘{= ùÄT]¦~r˜ëßy~< €fÉ@圠™ÜÏs Í fºJU¯±j##£{xž€ YDò÷€ía<ûJžg @hö‘<ùw÷Q<Ï@€Ðì2P9'ôÑþ“úð<@³HŸ ánì€ ;4Ý_´}ŽçZdÈÓ¯øYÝ{ÝLFFíëÜÇ,€ ·­¿m†¾×•s—Þf&¿‡Ñýëѵ[Ë~ÝX÷ëkãÖk¬Fd@€&ó¢b†ÿcƒì?kb=Ô{­~Th©fTh‰Vú·¾–Ñrf€iR¦šƒj3m…êÚ¿'@€ -†@€ @€B€ @€!@€ „ @€B€ @ @€   @€B€ @€ @€ @€B€ @€!@€ „ @€B€ @ @€  „ @€@€ @ @ @€ € @€ @€@€ @ @€ € @€0 @ @€ € @€ @€@€ @ @€!@€  Iý?PôM§*½vIEND®B`‚calamares-3.2.20/src/modules/locale/images/orig/timezone_10.0.png000066400000000000000000000310351362604102500244300ustar00rootroot00000000000000‰PNG  IHDR ™q*UüsBIT|dˆ pHYs¢¢EÝ1¢tEXtSoftwarewww.inkscape.org›î<1šIDATxÚíÝyxÕÕðqZ íØÅ©UëZź֊ .,I@‘}ɽa [XÂ’ífƒ–$dg“UeADvÙ‚ì¾í´óNßÚÎtfÚN;3ºt±BÞ\m,"{ÄäÃó|½—Üð;þq¿žß9§^yyy=ø,©øueãK“¢R÷'|šFŽhc<.pì\ˆ @"@ D€€A€ @ˆ"@@€€ "@D€ˆ @ "@@€ D€€ @ "@@€ D€€ @Œ‡@€D€Àg)>¾XñÁÿ©¦#_K j*<>wC£®÷5 <=<2eoâ§D€PK]uógÛŒ@Ó‘›’/‡ð €Ú9ëqÅ-Å6y¨ï‚Ñ—Sx@-ó;"oº·Snÿæ‰;’/Çø €Ú1ëÑ âƒ}»G¯¼lÃC€>ûáQï†F]î½?zê°È”=‰—{|ÀgÔW¾yÏ×îhÝ$~Còg!<ˆà³9ëñù[íûøƒ½ŸýY "@øŒ¹æÎ–7ÞÓabló„í56ëÚ—øÈ S´"Tnm:¸µ± \æ‹Ìo‹Öö‘/ÔøíVMG¼šúµ›ÝUñž_©!õ©à2]d~ýýïþn÷ÒaÉ»“.Å-Rá¹úöf·ºþ€:ä«7Ü÷Õ;Z¥D?>ü•”K¹FC€êØ"ó›éýè½æŽŽ •]òEâD€PW™ßuýÝí³c›ÞšòiíR%@ucæãK‚3S>ímrˆ nÈ•, @­ ¿»Øi™þræÐ%¡õ] fN‰JýøÂõV™ë3[¦¯Ï N ¥ -3Ög$¾4ìܽ1o• – ¼Ÿ¾qÐ÷;LZœ~¾Ï¬ÜÙÛ{ÿ2¯,øîð¥I›"S6§†O:ož¼=åÔP©Ôüuû‰ 'ßÑó7g S%­r(aÕÐá[µ*+:}¢UæÂœð÷ ßš•¹©ÿ?OÜÕë?S×þ~ÁÁèã“ËbÞ¼0ic×™SúÌš´¨KþÌÒÈÐëÉD€Päd‘¡ÝI×&½–¿?øî)3ÌlœüXáÁÀûE‡Ç_Š;”òrßJyyà÷ǼÖÿŸ‡>Ÿ²12´'ñÃïY–ЭpÆÔ/ŒÞžW|§ôhà£ïWòׯÃßÞçßcç…Ö@ JÝ‹§MŸ¸«×o‹D ñËGm²8ycÂê{>7veÌ´Âyá]²ú?“¾:~iòkq‹2ÖtžüláÙ¾gDÊ–PtéÔ§Ó7ú?ye1ïˆ>^x¨Gyöö>ÿ6byÒæ¶ãVe Àg>@ž¿¨“ÐÃë4Ú_’Ž‹¶Y/«¾sAÊš'oOnž´5¥yÒ–ÐÉëAˆ ŽÈéoÑÚ“Ú›XS @-îÅ9Ïö(ùp޳阻`rÖ–~?O[ßÿÇ)»’ˆ€ ðŒFÿy)kŸÈx)ël¯k5æ•ÌÄÕÃö÷&mMÇܹ…±s'<ß9vIxẠP·`íM ½2èJNÚÍjì–ØŸv+zzª j ²„%s{NÏx!kKŸ_ ?yKÞŠ?ÿ¥{ñôéD€P·äK÷_R-3 ‘)¯¥† k“µlBì¼ìåÞO]Ÿ°jä®´ Ð~â’ÜÊ×6 Î~w»¬.êŽV)ÝÂ?³± ÔñùÛyžZ~6w·ãú HgAv'zqà‘ô~4hþØUÑ¥Sf¶Ÿ¸0/*u}zóäí)•gz@] تH·ÂYSzÏÌ›ßgV΢ðíV•k?JËKŽÊ‹E—O. ¾;ñõ^ÿ9vK¿7»LˆÎsýä‚õž™³ woà݉»zýæä…ç§ ïˆ•·/úÝQË;nmróÕ®¿ Høó‹ V™ë3;çΚøzÏÿ>S|„wÁêYÜyâMoºÅu ÔéYœ˜Z47~ÙÈáít/ꬢiÓ+ÏþøÄÌÇ‘À‰>Óº”¸Þò¥ÆýŸM°³÷¯+âÄÐÅÉ£B¯¥Vží=¥tVüò„­¯üÑÅ©ë;å>—ßsƄѤ¬¾,qsú†Áßï5còs-Ó^È»¥Ï¿œ.@bŸî:§Áu ®p½äKm3ÆMûhöâX°²·Æü{D\³{]_ó÷ßþò×Ìî>kä²àº‚Á*Ï„Œy-øÓȸˆû][gt_‡û®¿#ø›ªÈÀ¹Ý«Émn½ pfõ¯©ß áÅèƒU ðâôÉe?¦¿üQ·‰O%»¶>¡mb›'2_ ¾Y]ë@JÊG-ÞùP‡np}|löcÔòÀŽêŠâÃÁã_þ׸­ÁÿèÑ:Ú5 Ôqwµºóú˜ÂŽcúLé:yô Áá‹ê œÝÁÿ½¯ã}ßýâ _ü‚k-@¨ÅïóÈ ÁüÎéýftËïYÜe|ܳÑKÌéþt× ââ—ׇÖ œÓ}Τ]Áÿ©î³?N6âùÀ&ã!@¨å¾~ø¢è§žT^z¬æbãÔµ9{owÛv”ñ ÔríÓÛt»9ø³K§3~{ð× ®kð c!@¨šÄ>Ú¬øptù§ “vÿ·"@¾l,uÀSimzVȉKÇ‚å“Ë‚ïŒx>¸vàÜîSúMëšÿ`÷‡n1€: Áµ >ÿdJ«áÅG5ùoþÔyÜ“)‘Cš7ríuT·‰†]ŠEç¹{ï>x¨…k.@¨ÃºŽ*®:Ïõ8×,H‡Œ¶½¯jr•k/@¨‹Z ‹¼3áÅÀÞ‚?— ”—ÔðíXyû‚o [Øc}ãàC ]@ž‘hÙ¤}F›àS©m:ÇtÊìUÒ);aE`oMDHöÖàÄÎè¼Øµ ð‘&±Íï ŸÕQñQx0ð~ÓMÛº¾>á®Vw^?hn÷g'ïü¡º"d̦à›7>|óU®¯€ÓŠˆkÚ©øHt5-FþK£n÷ßçº 8­æ»1ccðŸªE‡ïwÿTRƒë\Ạ8£'“[uDUdÔòÀVÛð 8§p8¤­ þcUdÂΞ¿ì6¡}œ pN­¢š¥¯ùA×€¼5<¢ë)@à¬Âk7R׿_•™¸+ø_2Ûö5 "@଺Nx*¾äHàD•#Üüeƒk|É5 pZõ¯©_?î™®kJª¼oÊšè﹦Î~ Öõ ®H|1°÷¢·á=xoÈs=^Œôø]®§€³ȵ >ŸüRÌþ‹ ÐÚà1×Q€Ày‰Ù¢èPàxUÖ~\}×Õ7º–ΩCzÛAyeÁ·«²þ#gwàÎYOŽè7½ËÜÆ1ït]œñ¬Ä•}U]„^r4P^z,X>öµàÏíõÈýß·Á Ý¿QÿŠÊ÷ oÓ[ñç/V~íú ê ¶IO´È|5ð³ñ;‚¿ÎßøcUc¤â{ü!}}ðÇÃW¦¼ø^ü’èW:gµëSÐy|Ö–à¿%¾Ü>½ëøö½]@ôÅ›¾ø…/^ÿÅ/>Ú둦ùoÞ«j„œjüÎàoŠÞ?ù±¼}ÁwšÆ6½Ûõ Ôµµ í‚çDϵ,¸>o_Ìï«;@Î$vF—®¿ ©ÿõúWdm þ륊ŽJá5#ƒæuŸg uÄwÚ7þFÇŒ¶ýs÷ߺ”ñQðFàI«ºÿ°Áu ¾juÄùÑËÂ;X]Êø(<x¿ù &mí„%@¨CíÕøþðBðK}ëU8xB/¿—úrðûm“Z57€Ú¾îãÚúWeo ü祎Oœ¤¾=æ?zävnLµX㘇޾$ ÍÃÂïUr$ðÁìGÑ¡è.<8Qt(p¼ïÔ.…ÆD€P‹}«ÉÍW‡g@JÕÌúаøKâKÃËz?7?ºtÊÌ6cWfwÊ}.¿ÓägŠZ¤­Ëº$iÓÐ%)"FLÌ©ÿõúW@-×àÚßÌ|5úßKŽWg|äí‹y;8µhNTêþ„3+ûÀ=献W¯ÞÆC€P<Òë¡áÛ ª+>&¼ÞûWsäŸ=>þF€êÂìÇu êßòØm×em üªºÖz¤môƒV™kÇžo|„5Š™=J€j¹Çz?úPŠ®?/ ¯Ž¿£Ï¯"C;“/$>> Yáù¼1 Ôr½J;-¨Žø»¥ÿÿëQ:}Æ…ÆÇœ9R€j±«ïþê•­FE ÎßøS<‘¼vÈá–›Ò.&>Âîž_ ÆE€Pko¿êóè7G¿ÐãhUâ£à@ðO±s³—G…ö%^l|„}·Ç”aÆD€PË]ÿà_¿#xQ'¡çî‹ù}÷¢ÓªH÷Ò!ÆC€P‹E¼oä²è­Eï]ðnWGåƒæ§¾\ñv_·âÁÆD€P‹ ]ýÂEn~8p|W`JñìSãb䊡eíÆ/É9[€4ŒѸj¹!ÏE/úØéæ{bþ7´6æ`êºà÷?ÓcqÁÁ?|âô½1o~1~ϸm=½½Ï¿üÜ䲞oõ›;áù¨Ð¾Ä–›Ò:Ož1uüŽž¿™V8ïlrËc±MŒ‡ –kŸödÇă{†/¼0t~ôâ6‰-›W>WÿêúWNØüÍ…Þ¦•ÿFôûŸÍX·(cMñ‘À‰ðÌIüò!eQg8¸02eOâöxÀxê˜×7ø|å×=r:¦‡Ïÿ¸ÐÉÙó»Ny3KûΞ¸¤ò±±[úþ<"yÇi·ím6zkʵw·þ¶ë/@¨cz—vš6zEp{ßi]óÌêúü”cÁ ðßé=3wÁˆ¶V>–µµï¿D¦ìN:]€4‰ßúÕoÞóM×_€PWf>®mP?:·cJܳÝ^®œõ¸˜ÙJ‰«ÉÚÒ÷畽rÔÎ3­ÿx4nuj½zõ¾fµ?<¾Ôt@Ó&ýgw[\rôâƒãã»eÊÎÏ\Z7øXåciþàLk@÷_’T g<µØUM®ª×wZçg‹GŸ¨Žð¨zeȱðy ] 甈ùcø±ð{<9né¤ÓȽ掬úÆD€P«×{tÉž\|§:ã#<‹Ò£dڌʸHZ3|å¬Hì¼ìå§ ïö˜2¬"@>gLµÔ­î¿.{{ð—ÕaãwöùUdhGʇqQ–ñjÿ43²nÈÑÓÈwº4&€Zì®\3|Q÷­%G‚Ç«3@Ò6 þ‡Î÷íNš´«×o?Š“}~¾5ëÔ¹·Snc"@¨í ЯkP?qe`uHæ¦?>9.®|®èpðxç¼yŧÈÝO‹6€: î™n/Ug€¤®ü½“ã"ãÕÿø±íy_Šßwj€ÜÙ6£sMþoz(ØèÆ{46Þ€OÙÀ¹ÝŸ­Ö°ÖÅû[\”%ŒÝÒïÍÊà DŸ¸«çG$ïü؉跷Lx²F>@׫÷ù[›Åµz|ø+É¿GoÀ§¤þÕõ¿Ð%û©PîÞ˜·ª+>J+"£ßÜ ÏW†EDòöä¼}1o‡ã#naʆ¨Ôõé=gä,è0iféÉR-j >ÜÑ:5ºyÂö俾‡ |Zz•t™P|$ºZwÀ*:8Þ6kù„ʰèQR:«ôh ¼à@à½V™kÆV>Þ&kQndhÏG‹ÑonÜ«iuþÛ®¾­É×ïí”;(2åo ÞˆàSÔjdTÓÉûïžé,ñ;‚¿ÎÞvaÛôŽÛÚç_#Rv%U~èo•ùJfߧ¾÷½Óm¿ûÁ,IÒëI74êú@uý»¾y_‡ÛÅÌyêûÀ§è¶fw5,x#ú½“"gOðF- ®ë‘ÓaÔÕwõËý¦u-9ßø»9öÿµ³.óÔþ¯úÇÞ3sž)@šŽz-tÍ-n¯†[®êÝܸçà \žtº÷ €OóÃeů³».½<¸1u]ðÈèÁm­G·hròk¢ó:Œ;Ÿø˜´»çoŸÈXŸñ‰þ¡Í©9{c~ßsFþ³g LJ½œþåkn¿®ª‹Íok>´m“ø ÉgzŸŠç#»à2ÕuBû¾wÅüö\ñQ|8ø~¿9“ŸîC›1/fŽ.¿³÷/[];öt¯ydЊ´Š€øêÅþœ_úÚõ_º³MzLóÄgŒ"@¸Ì\ÜpÎÙcÁò!‹Ã»[éƒÿ«iùoþ~mÿyY/œî5õ]X _º¨Åæ ›^ó.q‘¡}‰g‹"@¸Œ5¸¶Á•ÙÛƒ¿>ç­W»zý&2´=åLúcçe/+:x?ñ¥¡S_éóÏ}fMZtêkgެ+.ôg¼þ»îx ×¼Qç "@¸Ì5ЬIñáèçšý4?㥳}èïÿÌøe)ë†Ý2}]f¿¹™+O}Í}ÝŠ‡^øbó^=:èŤó"@¸LÕ¿º~ƒ¤Õ7Î5û‘üò#‘)»?á³7în?>¶Qp或¡…9òæUžŠ~òÙ•îíœ{ñqÅmÃÛ7±)ùBâC€.S=r:d9ûìGÚ†ÿ•º=tºúßéZ88| y…ú߸#ê–›éýè·[&¶½§ý„À}ÝŠ?ØûÙÄdž¬I¯<¡¼âñàùü\_¹îÎ+ïzrLïð¹!H³!D€ði»¿ó×[½¡ïÔn“íõp“¬­Á?[|Œy-ö§-36¥îC~ãK®nØôÆsÌbÔ¿òê[¯¾¡Q—{o­ˆ‚›÷|øœ‹Íoov]øV­¨PYÂÅć \¢s;$ßüÕß¶Ô>Qzì,'oëû‹ÖcÖŒ=ÃyI7<ÐíÁêþ¯¿¿óÝöynôņ‡ \&ZlUr$p^'ÛŽ—NMFlL¾©qÏ&Õúá·^½ÏÝüHŸfÆ­N®j|Àe Áµ ¾ž·/ðî¹O:ïõÛ¶ãVeŸîƒ}³Q›“oy¬_T¸ª1>¾Ð0jdçŠïRñ!@—G€\Wx0ú/g‹¢C¿ÄL/œwºõá…ä·6‹kž­¨®ŸéÊo4üÊ]í²úE$ïJª®ø €Ë@ýkêmÒ®ÀÿNÚó»ð§ÆGΞž¿ë77{Ùé>Їw£j5²cuÆÇ5w¶¼ñ»=¦ ¯Êbs"@¸<ããï:Ži›”¶¾ß?·ÉZ2)nQÒ¦‚Ñï— ”ç¿üÓ¨•#w=‘±>ã´ñ‘¼;éÛ­Rº_Ì ægrC£.÷=Ôoaµ‡‡ \zOíòôÐÅÃvµÍziÜÒCû›'oJ NË&2åÕ´ðÁ§û >hð®'Çô ¯Ó¨®Åæá5$ ]›\Sñ!@Ÿ²6‰OFÞÑ&¹ómÒÛßÑ:í©;Z§¶ûöÉO† ¼½eB›Û[ŒnÓ0jdë†ñOÜÖ|XËÛšmykÓAQ±>Ë£šâ£~Åûtk6zkƇ Ôq_ùæ=_»§Ã„‘É{k:>ˆ »öž6·Ü˜)ÂC€ê°ìñ@ãþÏ'^Êø»U€êЇÙzõ>ÿ­&[=>ü•äKÌ€4eu#>|»UrtøàÂO#>ˆ îÄGý{:LÞ¾÷ÓŠ"@¨;reãK“>Íø "@D€ ˆ "@@€ @ D€Àg-@"†µ0"@â" @ˆ"@@€€ "@D€ˆ Pë¤ùP"@ —jdxKã!@ D€€ .D€ê@H|!áj"@à‚ÜÚtðÇ.N¾Íwçïö£[}Ú!@D€ D€ @ˆ‚@€€ù¬È0"@ D€€ .D€ˆ @ˆ@€\b #âŸ0Ž"@â" @ˆ .HDÊëIQ¡Í©D€@HdÊWc2iWÌïžÈ\;æ|b ,m²–Mˆ íK Î?@B{Ó7öÿñ„1¿m‘¶>ó|b auü¾¢ÃãÁ©Esˆ€ º+2eWRdh[ÊùÆÀÅ¡õE‡‚ï%­r¸EÚ–ÔKsÈp"@¨›‹ÐË2_‹ýIé±`yÌô‚gˆ€ ý =J';tôÖ–é›Í€¨¹é^4}ZÁÀ{ «†í»Tk@ˆ ŽH—ü9%¹{cÞ¹"îàè•£^ïš?¯X€¨±[°š'oOŽ[˜öò”ïËG,µ]€¨± k“µ&+m}ï7»–>]ãÛðFÆ·2Ž€: 'Ï* Ÿ2vsìOÃ;c 5 -Ò^MK^ûƒ^OOXbD€@H`jñœ’#ò”uƒ 5 í'-Ê·­ï//L{Y€¨Ñi™±)mè’¤MÝ‹fN j4@z=»0¼ oúÆ? j,@žš°bÂÀçR^±<~wtéôD€@Hâêø½áÙ¸Ekj:>ˆ ŽHâÓ’×;Ð!gIŽ PcÒzìÊì6YË'\Šð 3 —œ K #ZG€ ˆq D€ @ˆ€K ‘¡½‰£W/‹_–°¥÷̼ù1Ó ç^êÀh6zkJÓ¯¦žÉmÃÛG@-ˆ”-¡Ü}Áw Þ/9(ÏÙóûˆäÉ—2@nk>´ËÕ·7»õL¾òÍ{¾fµä¬öLn?qQnì¼ìåž³²&c#"egrTh_âÉ…>ã$@¨…òdöÊìAóǬj=fݘOBYÎt´›ð|ÎÄÝ=ÿ{䊻ˆ Èè•£^Ÿò½`ùÐçCëOŽ€§&,›˜¹©ÿO<;öÅ‹‰‹öŸŸ”²nÈáÀÔ)³ÎôšÎ“çˆþKè•Aÿprì@- nE³K“×;Ð1waþÉq3½`^ÉÑ@yE|ÿ´ڗأäùù•³ D€PÇäLºÎ.±ÿ@(Kè^÷¡ªÈmÃZ@-tÓÛÞzÞ Ï#C{»LŸÖ)w^áéžo=ví˜n…3¦V-@† @m×=+auü¾.ù³K>9£qá"Sw&w+œ:£í¸ù“»ÎŽHÙ•$@| ïôùS¾,/9(·­ï¿Žz1a{pZÑœ©[BU‘ðlHÿy :æ>Wp·`µ06€Z¨ßôá9Yé±`ù¤]½~ÛwöÄ%í',ɩҌHhob‡I³Š»L™q¾ëCˆ ¶ÈŒ…§ÈG*BdrYÏ·úΙ¸äboÏj?i~~Çœy…žM];xaÚËç ͇F@-;£GÑä¯JާoøÃ–›Ò.4@Ò6 øQÁèã'̾,aëyH³!‘ÆF€PäéÅç Jƒf¾T gZ\Þ"íÕ´¨Ð¾ÄðíVáœÝ½~›°zèþȊׇwЪ|]«ÌWÓ£BÛBD€P‡ôºGÉùHÚ†?è9#ÿÙp|<9~QnTêÎä6cW ¯´ suø¹Q+†í‹[Z7liâ–ƒ㙛üSpjÑœO†Ê¦´Þ33_ŒJÝžrš[°ˆ vHtéùȇ ÔåÙÛúþbÈ¢ôµí'>—ß~Ңܘé…óÆn‰ýiáàŸ+_—¿?ø‡Ïe®:ÛÂó”—µbäë'¯/y¨Ïü„èv—± ÔBÃV^H€œ,{Gï_F¤¼žTy@a»ñÏOø\ÖŠ~s'.y"ãå1çZëñDæË™ÙÛ{þfÄ £v<>tmÊ·ŸHêþ•ëîºÊ¸j©Ï6^hx‰.ðlúKáݱ>\ïqñÛôJ󟉛ßgý5w7¿³^=Ÿ£µZï)ÝsÎt«Õ¿ œ6B=7fUU*l6zkÊMÛUtÇŒ… èUÒ}Âé#ÿè÷VÅŒ™ž³ iMÜ‘üýÁwç¥W>^ï;wüÒÈ*΀<ØkÞ¨ëîmw«± Ô=‹ºdWFEÑ¡Àññ;zý:| ú ù£7µ³î£uÉ[CòæOÚÝë¿þv>HàÄÈFí¨êLHãþÏ'Üð@÷ï3ÄE½zŸ Ô Á‚Îc>¶¾ãpô‰Ðº?ì0©pæéb¡çŒügJŽNT¾~rYÏ·;æ.È?õuá­"SVeo„<·:éæGz=jÈÇ£^èïí”;ä\‹ó]0>Ú§w>ag¯ÿÌÙÓów^ïý«‚÷F¯±'2uGòéB!q‹7‰þ(B²¶ÆþtäŠQ;[Y;¦rG¬_ÿ·-xŸ¿(·]öò‰g‹&ñ’¿Õd`Ëóù?þu$@®øn÷Ò‘Mâ7¦^ݰÉ}g‹3ÿ1ð™pýýï¹?8}äãñ/§G†v'µÊ|iì¹f+Âq2úÅ»Ož ©øº¼ÿ3™«:æÎ)Ž.û|ÿyɯ|üï•%œ|ÞÇY¦'ßôpLccó¡o|;òúë¿Û±ã½æ&4ŒŒo/@¨ÿ§ýš;¢ni5²íãÃÖ%Ï-SáÅç#WŒÜ•·/øNÑ¡èv˱|Øž¨Ð¦´6Y³ »LŸ~1kBnma\þææÆ½y|ø+©w¶Íì-@¨M!Òࡾ FŸ,”%4OÞ–ZŸÑ½xÚŒ¸…ék“ׯÍÞüŸV™‹&E„¶¥|,)»“ÈEËç¯nØô–Šß¿(@¨5ºNhß~lƼªìhz=¹[áŒi§ÞnõDFx}H™©©Hqø,©ÿõúŸójð§c·ôûYUO7?£Ð¶Ð“ÙË& @wïSîÈ?øsÞ¾žo·Ê\9®fd_bׂiÓ³$D€P‡ šÓýùÒc.$õbüž k@|áª/\1ä¹.;¦ûpKÝð™ ‘¡-©D€@õ¯ÿøFý/ßüÍÉ'¢÷›;~é§ ·5i\µTã@ã;Ãçyœ C§­ ª]ËáQ-‹GŸ89@WÅïýp[ݽ‰D€@µ¹=òކ…ÇOÉe1o^¶6aUÜ¡ÈÐö"@ Z|­á—¯ÊÝüýÉR©ôX°|ìæ~o¶Ÿ´$G€¨²F]Ý>yৠʉ.-™%@TY¯âÎãΕú?“õ‚ Pefuú\’ôR|™ pN ®kðÕ¹í3n~ì[7}â¹ë\‘¾!ø£sÈØ­±oF…¶….I€4"@ŸÙ¹¶Áuz”çïü)î™îKN~.ß)¹ôh ü\6ò…a{ˆ€sHá¡DDÁÁàŸ†/Š~龎÷ÝñxßÇÌÜóOçaye1ï´L%C€8¯©”¿?ðÇÂC÷Ï7>ŠGŸx"ã¥,"@à‚äb ¾œ–ûœ Pã–°:~¯ pI¤ð`ðÏC‡Ö?‘±:+2´'Q€¨±9y=Èʼn¯E†v& 5 a¥Ç‚åã¶õù÷èÒâÙÕ9"@äŒ&ïþ±mÖ ãˆ€ÒcòQ+GìŽ íM R£Vr$p¢[á”§ˆ@€Ôx€„%¯ö† K ã¶õý×nEE³žÌ^61"åõ$"@ 5º$wOðí¼}1o…Ï  rI ]’öŠ K"kkì›íÆ/ŸxQÒ|h”q  ’ùZìOzÎ(x&*´/Q€H+>8Ñeòì"@ —Äø}~Ù&kevdÊî¤é[CD€ @jTöö¾¿ˆ›¼®MÖòñD€ @jx‹ÞðÎXqû¢RËÜ‚%@¨åòå!Ïõx~èÂÀ’¡ ƒX6ú…è½—*BÒ6 ø±5 €:¬Û„ö£Â³—"@R^v@€È% ±›û½é,€¹4‡né÷³Èó8D€H•• œèVT<žµ%ögIkâ÷%¬¹»ïì‰K"C;“ˆ€Ój5ªÕÃéëÿ4fSðg…zÇÉ;Z šŸ´±Ï¬¬åc·ôþ·“ã£à@ð½gæÍ íK¬jp@Rÿšú×àÚõ¿pÕnéQ:Üö>ÿ–ÿFðýŸÉZ^PÞ1gþ䎹3Kòöż·¯çÛc6÷ûY·¢YSª;<ˆ .}ˆ­WïÊÆ–&E¦ìJj›µ|©aÐ6kÕ¸¾³6Tu—+"@à£9k ÔÀ-WD€PÇ$<Ë(Í{öì±°=¥KÁÌR"@ Š²/±Gqáì³…BdhObüòÁš'mM ªá¬²„³­ùx2{餶ã^Ì ª ­Ç¾0~ìæ¾ÿšòòÐC]&Ï.ùp ÈæÔÀÔ’YC¥¯MX5ô@DÊ®$"@ ÊÒ"mcZþÁ?„Ïþ(:x?kkß™øzÏÿ Ÿòáy Ñï»K€@5Ý‚µ?!<ûq¦“Ò F ª-@Z]“•W|çt’»'ð"@ Ú$¼=iMìO žË\~^€¨¦ÙŸ0êÅ„í'‡G^YÌ;ye?v-|zjõŸ2L€êr€´Ê\Ÿ9nkß_„Ÿ— ”zqСNyÓ¦vÌ™?Y€¨Ö {"cuÖèUÃÊÒ7öûIû‰S§ží|"@ Jò·Ðk&<ˆ@€\rD€ @ˆ‚@€—€4ŒˆÂxˆ @ˆ‹€ ˆ"@D€ HU".@D€ ÆÎE@€D€€ "@¤ªFÆ·2"@â" @ˆ"@@€€ "@D€ˆ @ "@@€ g ­‡@€D€¸"@@€ D€ @ˆÂ_ýóy*P xÆKIEND®B`‚calamares-3.2.20/src/modules/locale/images/orig/timezone_10.5.png000066400000000000000000000006451362604102500244400ustar00rootroot00000000000000‰PNG  IHDR ™ƒHÏsBITÛáOà pHYs¢¢EÝ1¢tEXtSoftwarewww.inkscape.org›î<-PLTEÿÿÿ€$99q«Gs±Gy¸K}¿O{¼MƒÃP€¾MˆÉSŒÎU`Gç– tRNS OhzŸ ÓÔÇg¥ÑIDATíÁA€ ÀïÌa"|d¡’láÛÃÌ$ü¨í ¹ß ég†B®'ÔõÔ©<ˆÏáxIEND®B`‚calamares-3.2.20/src/modules/locale/images/orig/timezone_11.0.png000066400000000000000000000275211362604102500244360ustar00rootroot00000000000000‰PNG  IHDR ™q*UüsBIT|dˆ pHYs¢¢EÝ1¢tEXtSoftwarewww.inkscape.org›î< IDATxœíÝw×}àñ÷º'nÎ ,i‘‰Ì‚!fR”(‰-ÉJgË>Û²ÊåòùÎw¶ë‚ÏW¥KU–¥“%*0ˆ¤H$À’  rÆ.°9‡ÙÙÙÙ4¹ûÝ$BØ0ÛðýT©DLèþ-þÚ/^w?©”¦nå“ÿø¥’Úû‹“9ÃPËpÝó£dÎ0Z²pë @X†`€e–!@X†`Hoiµ±À2Ë ,C€° À2Ë ,C€éL&{€©!@X†`€e–!@X†`€e ­¥×F Ë ,C€° À2Ë ,C€° À2Ë ,C€° À2¶dÌ)¥tT+!älÁæoé³qÜLF€ “¹—<ôï¿‘UX­fãàº#+.„0fãØ™Š@F³9sbŽœ"!EpÖfåê²YC€° À2nÊŒiR f ç÷à$á/·Œâòõ5µ‡6 a¤×„§`à–á÷ÞÛà÷ІdÏq+c€eX@&‹ùÛÕôœ½á%Wf<â¨XýÄR»» fÕ`·*K)Bì¾Ù粊æ—-{p…p d–q Ë ,C€° À2Ë ,C€° ¤1)…Jö SA€° À2¶d$ÊÜϬÎ*ª©žê÷ªÖ}Þ®Ù]ÆlÌ„O"@1Ü…óª*o{rá4¿Kè0¸&.Á`ÁQäw=Ùõå5·¿ð…¹5»×iz_ŽH¯Dݸ iÍYæt/Ù´rÑ⻟Y5,W¹qovqYÓískêöô–ŸrgK›;;T¨LÍ ³ü¾Ê޾ÛÚ4-—K®’@*E =­ûš¹üÁÒ]Eæ2MJ©ëBSBˆ3‡«¶WÌXëp GI™Q%äo¿£”á6[ö«ÎÖGŽ'møñ·‰ûÛ>>–ì9†ÚÕ‡GúÃ7û+ HKEµ¹9_ÿï¼QQ-V^¾³À?hïºpzé.§{,ßîÔEIy´êêï Ø;üƒ%³²GK.]¢%¯þHZ)Zp§­hÁw's†èÄsÂ×Þ/„è»Ùg ¤g™Sû·ß{òƒ9 å†+_Ï+ŒÎݸ¥þ+N—™%µk‡EnA´ÒåÌîhž{ °øä¿o}‡”Ú-{Y¦ »æ-<¶Êé ç¸ÜÁüXÔ9ÑÛ¹¤~4°º ‡™ô߀´“[’WZZ%ÖÉ«Ãf—šÍ®²n´ªátI§Óe”._ÛþÔÈpǰßÛpÆé2Ý-+û½;fwòÔ¡”!«íÞ°tuÃg³rTÞ•ïÕ,íz´¥¾ùæºÏ3)'ÿl+iÅQâÐïúÜí+…q!„sºÇÑtM–ˆ¢¢Rß6!„(*=¸êØ~ûÆkz~ó!eJ!ý΂¢®²Ü_iNÞh‰& ›aØ¢FÜÇmÑp({ÔÓ³²M™ÅáÉü²ž*–®~ãSKoëzR)¢aµ;…C(!"ašsõI!…2á?€´ò•ÿúø³K7ؾb³ }&ǹzõÄéRY«7ùÌØÈ…M3uM7uwV°,¿(¸ÄfÚõ.éBˆXôLÌïÍjn®[÷žß»¡C)CfçÖW'ÖÞôžˆdñWv7œÕ_ŸËênßÐXVy¡:u‡‡‡húì=!Œ§` m|öïýææþ‹Ã%\ÉžåZLC©Ž¦ò=u'ŸÙ‘N«!3 ;.ìü»—ݧn\lD€´ðô?>þíÛÍù^ªÆ‡Bhº”ó—x¶Ù]ùÉžÅJ6w~¬¤vë&9‰›A¸ i¡bûóš6ý{>¬â÷f5E#sG®¾ÄkªL3¢å䵕ŽÔø4Ým\~}áÒí[.Ó11–;44PÝ=1V6"d~T(SJÍf&ã±ÂRjªbÕã bþ{„ûoôYiá‡ßÙñøº×Ö.XSñdÍj××J+Å‚dÏt-#Ã9}B„lBäÄ®Œ¥L)”!M“ǘ+/Ké4®}”1ûª ¯}nAíðæpÈè-<[wâ˯+eÈ’ _mÅ܉UBaõB™Jø³Zý>ç@^‘Ùƒñ˜=lšÒpe… ¥4í g7½3¸­w6ãD·»9kŸZ7gíSþ¾3Ûë®÷9î@Zq–9_ù/ÿ¨v½þ%›]¦Ü?¨+%ÄĘæ^OOY½Ã1ZXP-s8£ùº®ì6»‘­é¦=4áö5š¦f!”ÏSѹ"N÷xöâ hºáloœs0¿0R*éêj{èdNîÅò•ö¾¼*´l*3†2‡}îÖàxöà`ïÜúÞ®ÛZ„Ê‹JÍn&úçŸð¶¨ŽC?ÞîkÞß{­÷ ¤¬.š¿ªb³Ý©—®Û–÷OyE¢,Ù3ÝHÓù¢}sø7f刜É|þò¯æ—/ß:{tÑËíŸ:ªéY¿Y)±;<9[{åoÝÙjRÇüÝs(aÄ•ø] g×î¼£YJ[B£`¸óx´ãà_í¿0zõ{ÒÆCß¹ÿS÷}±ä§K:fz…|G›3+^›gMçû¦¡D$,'ºÛ«ö]<óù÷¥Ô”R}ã=Ï}½ªfbÍLçSJ‰îÖü£u'Þ‹•'2D/¼hx÷¿¼¬”úÄ#} ¤•oýä //]§}1ÙsL–i*¥i3Ë¥xLÅÎ-ÜnÓ•îÊòWÍ_2zGÂL ‹)stØÕÕÓ¾à@Gë}§¥pÇg|X#.{O¿ÚÑöÑ÷vª+¢ƒ@ZpV8í·?¾áž{>_õó’J9/Ùódª–ú¢šê¶|×fzÓz<2¦w}þD×±^~@Zxìß=ðåûž.xÁfc+»Ù‰Ps]ÅŸgÕ¹±‘ž™lªé׺Žüìƒþó;/Ácx&"±^É„Ir¹…{Õ†þÇ•êl°ÿH][ê=^Ϧ6)õ)‡ˆ+¿Ò,]ºí>)e“R*N€ %¹ª\Ú]OÞ±nùÝåÿ1+WV¯{¨Üf˜*®éü#º¤&…BVÌ_]6çðꡳMÍõkßõ ÜÑ:ÕcéÎlM¡ Á RІ§×-ÿΟؕW¨»²D¶—ÿádÐ4)J+CµÙ9Gæ|¸³â(5ÿw¯;éc%r0 ì.gqvž*½H·rÞ±õío˜FH7°n!](sJUÈ RΑçÜðô†õÿñ¢}ùÅ¢<Ùóà›MØí©;Ý}y«6ìþ\qyhIóùÒNÓ¡Û²'&Ƴ‡»Z<%opÓ:€”tòÕ“ ~gÛS ×þMÍ ýQ‡S8’=„Ðm†;*ó=YÙ¡5«6<¢Û4)Ä0M¥ÜîñÂÆóŸÞ#5‡y­ïs RÖñc§{Úƒoô¶Ç“=KÆSB†2MóƺÊÍ•oÜòË/±+Q±Kñq‰¦I¹tM÷“[ùñ_ææ×U^ëû¬€ e•çTÌ[ÿ@ö?çäi9Éž%“™¦Ržîܳ]m5'çÌëXW½x|ýõ>+¥sŒnˆ„DÈîöß}_ˆ¢Òèü»¶½ÿWíçöv·o98*Äðå÷Y@Êjü ¡ûüþð?˜»gϦà„8qà™ç{7^,*X0™ï8ÝÂ}­mY.¯ Œä´ö÷¬9„®|Ÿ@J;ù^ýÛ±˜ˆ&{ŽL–“knØòÒW•ȵ5,|ψ›"3ÅР³ÍÛŸÕ «èpØ'½žnWSp\Žù5OK}Ѿ֋kÞ]Ùoš¹Q#â×ÏRæ,¤¬Û>½¶ò™¿Ý´ËáÎdÏ’ÉFüjx ·â‚”ºjo~ðhoçšzÓÔÍx¼b\JM)5ìÚ´eû3sæ]óÒ¬ÂbUÚ|Á}ñȾ¯ÿ@(ShšMé0„"Ðu"6P÷Ö.¥TL)ìŽ'·¤RÔ${ŽtfšJÄ¢"—ã9y*Ïîú•ïÇãÊñ—Ô{û×× !„”.#«¹ôß—>#eQØÓSUWYݰþZ—])¡„ÃÏÒ4—ñ›ó1ÍÛ°{¨ïÌk;Fû/þfãB)ËÛÚQ>?ç¾ÂR57Ù³¤«hX[/”peÅÝ=í"VS;z›Ë/V¦ˆû ÏuµÖì¿»ùfÇénûÔ)»Ã°–x–Œ.ÏÊ1ò¥”"1sG«vŒÔ´_þl,8¬õŸßÑÔqð_?PJů<ŽTÜÏ€¶òñË~ï¯WÉÉ—ùÉž%)¥D$$ƒJiæhÀÝyxÏW¤Ì°ÍfÙ•*ŸbJ™ !„0¾aó+_,Ÿë¿=•¡Ñ€} ¹îŽíÿ¦Î‰¡vÑöÃ}§_;q­Ö @Òý«ÝøHáO JDE²gIw¦©TWÁ ÃPâôá/ýBÊß^25UJÅ4»Ý“SUsneGÓ§„È‹ºO‡ûÏíØåmÜÓy½ï HyOü‡‡¿¶õ y?“ÚÔÿµ¿K)%N\û£¾®ûÏ'âx¦Õ/¾ïí>öâΠ¿sìFŸå1¼Hiwˆ¼"Çjâ#q”)ÍüÂþIí÷q3F4¨÷~­µé½úåÍâC)ìÎ/ß1ïËúÀ»«ïqýY²gÉ$R*­lŽw­>×LŽ ´ž/kûè_Þ¹úfóë!@²–lšóç Wi8\rF¿(㓤&E~‘*Ùüà+ßV*6­&ˆŒ hÝÇ^<Úyø'{”Ræd¿G€ eúBâ13ãnZVJ‰xÌ4­¼{tØ601¦ _ùZ^A¬¬rÞÁS=VÐß)»Ž>¿·ûø‹G¦ú3°RÖ®g÷>?ع¦sÛ—ç?7P}5rÃ)Éžk&: öv.;9ä-÷-ZöÑÖ²9ã‹ò‹"óNM¿ù·§gbL÷wµÎùØ7°¤©bn˲ü"MaÉø’ЄÝ?4°¬c*ÇhP}§_×S÷VËtfá)XHyÎr§K™ÊxìO?õÇ·?œó]‡K¸¤”B(ñ‰m,”RB^k«î ʉƒ»žüîÄxåȽ<û—…¥ÑjÓ¦n“ ¿2)Wñ±€³×7PZßÑ´éh(Xó‰ÕÓµ»\£îhtîèõŽqµ@÷éXï©_îô5Ô;ݹX@Ê‹ D¿þÏïmþÆÝûç-+þLÉ\÷¦aO¸)¯Ø± lžvW8¨ÆOLüïÒ¹YwŽ G»k×»þ0¿XTÎæ\†a )¥ˆGE4¶û…*'?VׇsòÌ¢ßù9B¶á`pÞ°¦ »ò #ÕRjB·%ö¶ˆx\™CYÍ=í‹ötÜNJýš+š–‹Fób“=îPëÁPïÉW¶wšÉ|ÒÊÇ?=tNqîÊ×ýëŸîmô8·ã´GñC!„Øú­Ío=üͪý§p&zÓPª³µì£¦ówîu¹Ç²‡} …tÆ ÛKÜ9ÞââÒÞE‹Wzºüùx\ýÝ…'c‘˜T*b[°ôømšžØ•šà¸èhžÿawëš³¡ÐœQMs˜‰X R¦!½ºŽ>÷ú„¯m|¦Ç#@öÞýî¯^ýÚá7NœX½µâdÍrýîDŸ¯³¥äÀù_z])"a1|ùîÑ‘eƒvçhNõâ{/v|Dó]8³æWžžûê…PBÓ¤ÐdÄ¥%h_Ã0EÛÅ’½½ŽŒVö !„– 5Óˆjuïô7ïþîJ©h"ŽI€ SéºM7y@¥„èj-:Xê±·?qóÉ•Ÿ1Mrv–V†– ¸[ïÿ̳±Xå¯W¤Òïœ_Ûµ-óÄãÊ8y`ÕÏúî?'„}Ò #ÔûϽÑ6•=>&ƒ@ƹ÷·¬~ò;Û¾QµPm¹^(L™ÂÛïj:sø™×¤æ¸î/û~ß­>OGËØH~wÝ©§Þ–Âe!„Ra½vÅ®-EeÞ%Ù¹*2§4ÍK+&¦¡Ä•—l)%„·?ëb{ã²}}[.&ìgüµX( ÷žzí|בŸîÊ“ÁS°Qj·-ÿåX}>'OËMÔ1£jk¬ÚÝxî‰=Rºnºª¢”!¯¼ù{á²[æ/î¸?'Ï,¹Ö}¦©”·ÏÝX>7¼,’c¬Îþî9g†ª»ÜÙ#y±¨#rÛÇŸÉ/ŒUüÎîÖ‹‹?èi¿ÿ¬”¶„ÿ2ÐzOýòXÏÉ—ÏF+°€ŒÒYß1ÐrzÅ÷•Š›K7:þ<+GÌ(Dâ1;yðöy=wµLö¦î+㣨ôè¢%+ÚwºEÖå×¢Ó4¡ )ÑaG_sÝêw C7ò Í=~àžÿ7ì[×-¥¦„blTô !ÄÁ÷Ë¿¿íÓ¯ÿ§†3·½9Ø¿¹i6ž6ôwÊÞ“¯ìí;ûÆ9!^Jü + È`ŸýûǾ¶êžÜÿ\XªæÿæE%D($'l6å°;„ýFßWJˆ†³•ï4×q×tÎ_9oïmë7Ÿù¦®ÿvŸÿ «ýЇý,7/[Xê© ” y7¶WÎÛ·*ÌZßu½ãåæ]¨YäÒ™Ð{[„bÌsQõùÕ{žºwš}ì+ ÈXÎ2§ýÛ?üÌñʱƈ›BHiv4<âsoÚíãŽê…ÇÖÍ]Øy¨¡bžo“Ë­²¯ü¾i(u|ÿòŸÇcEßàÆöË«7#µÇê ;Ÿ˜»À·Ùfÿmä(S‰S‡Vþ´·ó¡Ó‰þYg"Ð}*Þ{ò—;|-û§½Áàdq 2ÖœÅ[Vôv.>7:înoÜp|þ¢ã›šê>½GÓÜqÃȉµ7?y°µ1rHjŽ¡ÁW¬ë|Ü-²MS‰!»1¯(<¿vuóÃñ¸ .z>\|ÓMølöì ›w|¥¼jbåÕïMŒéþ€¿¦G%ÜY­ÅÑHé¸aäGfç§Ÿœ¡Ö¡ž¯ltŸšÑƒ“E€ c…Ç\±î¶m§ôž,C!š/,x_^µG†¦9Ík_y¼¨,PÛÓQyÀéŠæx=M½÷ž·Ù|îX´,(µÉ=âV)S®¹ýíÏ_+>”¢§£âðÄX­wÅÚž*­ô­½pzÓ/¼žÍ‰øY§êÒƒ»GºŽüüWC3Þ`p²d,uiã›~®þô¥M¯¼y\!âñªñ«ƒåFg[²âÍûæTl¼ú±¸—÷i<ÿÔv{GÁøhî`ýéÏþ7)sb“=z"™ñ¨6Pÿ¶§y÷ÿ|C)eé €Œ%…”r{dÌôq¶º>ä^¹þÝǪyï•רá| 7çÜ™#_zUJ›ŠÇk]m5ÏÆS¬&Èõ¾³ÛÛÚ÷?¡ N€Œ%5M )gé©KJ›[XÚS]½°sK~Q´êzŽfdç´Çb9‘XtÎØìÌss—6|µ®ëÈÏö$zƒÁÉ"@Á¤Lô.áBa³õ欹óí/—†ç»²Ì›î3²p™çÊy»6išéÜÿîgÿ)© $|¨›ˆŒè='_>Ö{ê—‡’ù$ÜI_Ѥ©ÙìRÓþÛv4ZÌÍ”M&>„BÓ¤ÌÊ1 :šæï ‡«G=ÏÍýZ×±çöõœ|%©ñ!+ È`RÓm‰¥â²vÕέ¹ùFÙ¿)|Õm“ÝK$QÆ<UïéWߨßÕdåy¯‡@Æ’šžÐ믔ŠËõw½ðûsß)§|¹esZVŒÎ÷Æc%ÁDÎu=®“ñÞS¯ìôµì±â|“Á%XÈXšn×y¼ŠªÃK§Bø½öÎÒJÏúⲋ5‰œéš”C-"‡Ÿ}5•âCLêö„þ¾[1·såtâclÄæi:¿ü=3nŸ 'r¦«)Óƒßk;ðý—Ýg|³y®éà,d¬Ä®€(‘“7>wªß2 ¥êN¬Õë¹»ÙÛ¿µ^Ìâ= f<ªyêÞhùðm·zƒÁÉ"@±¤fKØ ˆRqÍîŒgOõ{c£ŽÁþÛ[¤âúñ¡„a„t]Ï2¦;Ÿ°õÙÞÖ~ào'cƒÁÉâ,d,©é‰[QBH¡¦üû³ÃËÓõa÷ ­ ¹jý/¾(Ô¸}:£Å‚½ûø/êÚü`g*LJ2X"W@¤f3£Û”w1wg‰¬Uëß}â†Ç–6ÕÕvï•óö­B‡£¥HÓü7Œ–Ë£½ëØsÇ»Žülw²v7Ÿ .Á@ÆÒtÇ´V®MŠHÄ=,ÄÍo­P¦ý=§&ÆrºÐ'¥‘È‚a»½­È4‹B7úNp¨Cë=õÊG}gß<-ÄËSøY’‡@ÆÒìNW"7ì+n›SØx£ÏÄãʸpªö•ަGNõ†s)mêÒÿë*_2t£ÏŽy.ˆÞS¯¾;pá½”Ø`p²¸ KÓìÎDo°wQ‹aܸ)†½Ù-͙ͧ]ö7»ÿb{ºÅ‡2˜Ôm €¿Ú‹Þø,©v¡TBw`¿ÒHïÙxω—·{÷¤Ôƒ“E€ #I)5ÍæLà= BhºËˆ„ìþ«_W¦ñ˜Š÷uæŸñ»û 3<+¿g:ODzN¼´ÝÛ´·o6Žoî@¦²ÛÙ )m*tùò‹Æ+¯|}Èkïª?q÷/G뻄"ÿý-¥Dp¸3 §äƒ“Å 2•Mwd%üÜ»[1Í«oï°E.ÇǬ‘RÌYûùÂE[ÿâªïüÚ)eZ.&¤åÐÀÍèŽl‡nwÙ„ÓÞ]üZû—vñ3†æ¿Yçì­<—ÈsÜHnåJ•U²hCnYmmÅÊG÷yêßmµê܉À 2RnÅòlÍîJøÆ|ñxÙx(hûÍ} 㣺¯³õöS‰>Ïèv—QR{ÖüÍôä‚-ò¨•çž)V@‘œ9%9š-ñ"„BIS!|®æ³G·½‹VNy‡ôDpåUÄsJÍIƹ§‹@FÒÙٺ͙Ð˯„¸t#ú`_É™ñ±ñòÓ‡ž~Ñ0òÓú¦p« ÈH6gŽKÈÄnÇ¡T\æÔÏik\u24±tPjöÙYaÉ`Ü€Œ¤;²º ¡iFµÅ+^Àéò†ƒµ^âczX@FÒíî„È¢¥oÝ«IMx=[ë¥Ô¯~/&‰@FÒì΄H[ã§÷KÍn^¾ªk¤ç´aDC²háÝ\U4üe #iº#!¢Ì˜VPxxÑåK®”iHoÓžñî£/¼dÑ`"Îq+!@‘¤nw%è@jddy·BÑ ÞîÍÞ‹;ÿîÅ¡öÃà 9þ-†K°‘4Í6ãÓðº4­8¢Ì‚hdÜ«{Îï<×yèÙ}J)n@Ÿ&V@q¤”šîpÏøÛ5½4,¤¦&¼­²çø/öv|üã=ÄÇ̰€Ld×Ùv!ÄŒc!Ðu"î©{û­ ïu'`®[€Ld×Yv!Ä´w)Wf\z›öŽxÎï|c¸óÄÈõ>6ÝãߪdœìÒEnÝîžö÷ã‘qÛ@ý»­{ÿï[J©XG»å È8ÙÅ s5»sJ—_I9æpg5–÷ÏëóÔí<Ùyø§”R¬p$7¡ ãèÎìÝæ6¦òÓÌŽ ¶e÷tñƒŽC?ÙO|ÌV@qt»;[³9n²¢„;«¹4\âBŠ@çñhÿùoz÷ô[3å­‰@Ʊ9sn¸ ¡a}á’7·ML”öOŒ-ò6~è÷œ{s{ çì¸U3ÞªdÝ‘uÍqgµÇ¢ù!‡+àìßpzÄWðÔÿª½mß?¿£”Š[=ç­ˆ@ÆÑY¹Wþ¹¸ôDMAqÓò`°hÀÓ½¹.8¾h(<Ò«{οt¼ëès‡¸ßÃ:Ü„€Œ"¥tfV—_þsùœ}« Š[kÛ›Ù×ßõÈ)¥r£cž ¢ûøK»:üücâÃZ¬€ £”-x~NIiVEÕž…CÞ%ÝÊ4EkÃï½/„B)1Ô~(2P÷Λަ½ÉžõVD€ £d—-\8¯öÈz¿wí…XtÞÈ gÞˆB˜ñˆ6ذÛ×wúµícÁdÏy«"@Qʪ‡çõvl;#äœq#>èÖme¡X( {êÞnjßÿý÷”RSÚ‰Å= È(GŸùÙþó'Z„B·•…BÃÝzω—·ïÿþ;ÄGò 5±2iÂIDATÈ(J)Ó×¼oÐßií;¯zN¼ôv×Ñçr¯yjà,dû‘yÿtÐßY7ÔvÈ—ìyð[2R÷‰—ö%{ü..Á`€e–!@€éR‚GkML—Löé‡`€e–!@X†`€e–!@X†`€e`º”RÉ!Ý ÀtI™ì ÒÀ2Ë ,C€° À2Ë ,C€° À2Ë ,C€Ó¥„Jöé†`€e–!@X†`€e–!@X†`€e–!@€é’É ý ,C€° À2Ë ,C€Ó¥”Jöé†`€e–!@X†`˜.)“=AÚ!@XÆ–ì€Léwôž~õ´nwǬ8_<<´â<‰B€ ¤Œ˜ì=ùÊ1¥Ôx²gIE\‚À2Ë ,C€Ó¥”Jöé†`€e–!@X†¦M&{€´C€° À2Ë ,C€° À20mJ%{‚tC€° À2Ë ,C€×!¥tJ)³®÷?¥ ™ìÓ-Ù©jѶ¿|:¿ê¶’ë½ïÈ*’Bˆ¸…#¥=¸»»@å”ÕÉž#“p Ë Àuä• nØü³¯Ì©þhU²gÉpÕËüK«j·WÍoÝ”ìY2÷€×qñèÜSîíŸgIëµ?¡„RÃ.!ò#RêÊÚéÒ\‡sF;[8v½÷+ç}´rͧ¿ÙÑ4÷ý†sO¿gåléŠK°€iRJS¦)M¥43Ù³¤ V@€iòôÜ{¡¯kíßj2'.Ø’pR`4-/–ìÒ —`° À2Ë ,C€° À2Ë ,C€° À2Ë ,cKö@ªí;1èÉ¿Þû9åK—-¸ËiåL鎮£÷Ô«§nôþÊ'ÿ±RA€L—`° + @iv§ªÙüGw/Úúí¸ç‹NøƒÝÇ_¦Ž`˜")¥¨XùèGniv²gI7Ü4LAþÜ5‹?õ—/¾ož3§4žìyÒ + À$H)í5wÿ›ûmý‹¯Ýñ”úýÒªÒdÏ”ŽXnBJé\òàß|­|ÅÃnÍæ4{:çZPûîýc£¥JBÉž/°Ü„R*2>Ðp 4Üc !„ÃÑSØzá3*Uºôç®üêEÛ·(æøo‚&¡ï컿¸c´ï¼-Ì/:¶°våÏ?§DXF«GFü5Ë×¾ðtAá™yB!¥7+Ù3§"˜¤ »:»½ðZ ódh|tEOwûš£ù× !ÄÈðºî‹g¾ñr8ì !Ä’•ï= ë½¹É8õ ÀøZ v|üã—ê‚kúFÛ.^~OJ]…&ú…bØ·èÂò5»IÞ¤©‰kÔ€)í¯sçW¾lsd}½°æûåוÓÖo~ö5Íl8w×ûíM+ŽææŸ36²¦/™ó¦V@€iô‡X(råkR³› gþ•§·ª.¯ ·bb|S×X`±7Y3¦"V@€  õv,ºô'%æ/ygËX ¦ÝïÛÔ~Ã/*S ©) FL*V@€Y#Å@ï¦Sy…ýUJÅåõ>ešÍ•Ý\bådÉ @J™R¨¸”šÃBˆp¨&ÐÑ\sP^7?„Ð4§.½%.ÕbH¨˜VZùÑ*!ÎdO’ŠXHJ§áxð\²çHU¬€° LWÆ?³*ñ`ÚTäæŸÁ•–!@X†RDEÕûël¶îüKR"o2!@€a· 힇^ÿŽi„uÓ8ÎŽÂdÏ”h줈îöÍçbqgXJM)‘S*쑎 UÈìX÷ÆÆK_Àîð䚦n&{¤D#@€"ev<*ï7Œœˆ&ã÷û:—`)ÆÓsÿy!„ˆ¦Lö,‰–qEdЬìÁüL{¤(‡c­”‘Q« \‚¤¨á¡Mí2£òƒ ¥Æ„­¬òƒÛ’=G¢ @ Óõìø@ß¶óÉž#Q ÅI©gÌè`1¥ÂºRƒîL{ÂÕd €åæ†Í¯uéê×2ÍÈ'~'Ï´§^],&¥¦Î>ôji…oåæògJ„õËž_Z¹y2ç›MÁ‰…þŸø‰&…~Ç}Ï}+¿ðÌ\!„ðûÖwöml.(:1_™±Œû}=ã~ ]„CóF>þà«ÿâ÷–6l¸gߟ,ZþÆ}B˜BʬøØè<ŸÔlf²gL4H&™k¹ðÔÞc=òÏù…C j–¼{—Bñò !2ïvvBRÀøè²S×þ\)CÊ ^& @€T!5%¥–ÑÏæÍà¶j–!@X†`€e–!@X†`€e–±%{¿e1M1yõëº#ËHÆ<‰F€)dðÂ{þÑþúcW¾ \‹¶þÅC®üÊp²æJH%RLôŸ{³ñ/I™·hë·gU$qË ,Ã%X@ Q¦á*^´yþ•¯åÍYåºþçM5ûS%¤²å••,¾÷ W¿nw„®~͈õÑþúk&K H!ºÝmèv÷¤¹ëkÙïï>öü!ž›í±†fÈß~$îî0¢A[Åê'V:²‹#³}Îqo³îmüp—RÊœís%ÌP<26ܲçÿ| ¥,([þàêÙ>Ÿ 뾦}'‡Z?œís%OÁf.»jýV—.ýÔ!µY¿)|¨õ` ëÈÏÍöyf+ À •ÖnË/Y|ï6!„ÐlÎYÝ­|Âצûšö¾¯”šÔ}"©†fHjº’š>ë+f<¢ùšöžõ6íí›ísÍ.ÁÒÄPÛ¡±ÎÃ?9ì9f‚Ò@h¸K÷6ìþ@)Oö,3A€)Î4bš·áÃ:oÓÞîdÏ2Sâüí‡Ç;ýø£dÏ‘ÂÂ^ÝÛ°ûC¥T,Ù³$¤(eÆå`ãî†Á†ÝÉž%Q EùÛ†:þëždÏ‘H‚£ÝÛ¸{¯R*šìY‰RŒ2 émØÝ´zöÝÞù³k =ËŘâÞx}á/ÆÆraðTm¡g¹S\iÙ`U6› ] _º©Ð³\Œ€)îð;vmoþiqÉ`ãÂeß½=„´Ð#]€)nd¤ypǯ×?ÚÐ4ÒÑÞÙ{ÓØØÐ¤ý±)W‘áö_ýüº¯½öòÌG7Þù?ÿ¨µýg‹ =Ó» pUH‘ƒ7½RZ‘ÉÖÏ8ÛQ[`nš΄BšÉär§Š =aÞù•æ†O¼±åpQ¶t,ÆrIQqåŒî›ÊÞü÷Ž­÷üôØ¡§.¿~ë}µõßlæ±Ïcõú¿ûlýŒÓóžxèCÿõÜÙÎ1æºyt¦ÿà@á[±ÖëXû¹ftß´úÍ'IéXÿñ%{BØÒ&ÿüYHBI¬™Þ‹€«ÌØXËàOÿésžË%aåßþÝ5^ÙÚóh’þç±\’Úኪ] mÇn ¹ùKÜyúdñ¡Çÿß¿ùj’ç 5–€«ÔÙ¡Î[ž¼îëC§«N.¹öÙ÷Ÿ°(ÆZ¦¹Òê¦\ëÒ»n®n]T3Ñk  Ô´]SÔvíGïI’¤h"×ñ3¼@!„¦…778¸!„ðèD­a!„É–æZzµçžy¶ÆDݘzÊjfæZ–Þqkí¬eÕq¼MÝì•Å­Ëî¹+I’¼÷‚g@`ÚKÃùoJoZtë̳½ëBOæs%; 0uÎÿñÚµ›¾ñå{êßúyQqùXKÏ]«ZßÖ™ÏõLc­—6¶.©mØ;óüïÊëÚs-=wo.­nÊÛ›ÒÁ€i* g‹íkzeßë3_8tàÆíIòÎkêç\WÒ±ösw%Iò½4MÓñ®)@`šjïxòšk×í¾¯÷êç“äƒU3^厧’$ûÛÐH’дèöö3¯!<=Þ5Á€iêèá»z÷U?w`ïœç-ñw_»ó¾Êêךο.[Z9Öºôî5M 7µwM; 0M;;g`Ë_øf!d³!SUÓß4x²ûè»ýønŌδuéÝw”ÕÎü_gzÏ^éšûvßö\!¼×›?ê»ÖV´¯þØI’ܥσà’$I&mY|Gç¹ÞU!„-WrÏ€—,[V=Ö²ôîç­ÇÏö^ \–ʦîÐÚsÏI’”\îß à²5Ì]W5÷}¸9y·—‡¼üFeåkk7}ýßÎé~põ{]—dŠÒ–%wtϺö#+.çþøú¦½íM3‡7Ï<°ôb×—×µ.½ë¦†Î5ïxwÈ…ø,à7öïÙ°md¸øoŽêÚîä᲋]_\^lº7I’ÿ‘¦éèÅ® À[>¸aû©Þ—Ò—ø§ßÍ•\4*þEîR. @˜Ñô«ÎyKŸ»}×+Ëé;´æõ4¤é¹“‡N¤i:œÏu<ÓTšŽ% MOwg³ûjšfîZØÒ6ØÓrO.—†ç~ñ±ï$¡|,ö ž€ibÑŠ‡ïiëì_ÓÖÙ¿¦eæ¯æb; 0MlÛr÷÷önýõ™¡Ò3G]¿3)Àv„˜&ÆFš‡†N×÷÷¬zñwºþäºBÌ @`©ª9ÚXU;ÒZ]w¼­ë;‚ÓÈÞ×oýÕÑó÷ žž{4Iâ¯/@`I’¢thpÉáBÄGŽ`!„æ’Ö¶Ÿ-®­ßÚ>‘Ë ”•ïnXuÓ–?¸ö†Ç?—Ë›°Np gδõØ;ãéÁ“5‡2™ÒÜD­#@€$ec/<ýÙïLô:Ž`Ñ Dã ¤éPvùõßÿàÀñû÷¾vç3ÙÒêl÷Í_¾uþm_¹èééØhæÈöž<Ù»ýäÅ® @¨«ßÙ:§»oãɆ{vŽ>[ÑБ«hèè¾”¿>}´ôèÎÇ_!àâúO,=°íÙÞohêK’l:Që $I6Ýûú¿œèu<„D#@€h¢ @4ˆF€Ñ ¼Cš™V ÀÛÌ]tÿú wþí×Ôþzf¾ï-@€·©­?1§¦î\[eÍц|ß;›ï1¥yÝTHÓÑä¹§~÷ÿìØ¶÷'ƒ§ö%I>ïn¦¬$IJªg.Y”¯ûÕֿؾáί¥kÁc«†N/>’$™4_÷~“€)ªcÝ66tÞP™¯ûU×n®­n¯m8Ú‘¯{žÏ,˜‚ç­Ÿ3÷}¸$)ÊæòrÃ4—;Òvàñ×ýÕÉžýù>zõ&; 0Å$IRܲôÎ[ÊëÚó!„æY¿˜óûü –ýzc’TŒæë¾ç 0ÅÌYûùõ s×Õä󞃧ûO ”ôžï{>G°` iœ·¾­k×eŠJò¶ûBƒ§yüÇs¿šdŠózßóÙ€)"I’lóâÛo­hè˜H˜èøA€À”1çúϬ›Ñ}S]¡çS@C×ÚÖ¦E·]›É–Nø.ÅD 0É%IRÔ²dóí•s§t|„ @`Ò›½æÓkgÌÛÐp¡ïscg‹bÎ3&±†Î5MM o^UT\>v¡kÚ»~r]&Ó[s®+%@`’J’$Ó¼øöÛ«š¤ïuݽ·mY»é{_\¹î›Ÿ,.é­Ž5ß• 0Iµ_÷‰5ó76_ìº$)=v¤~{[ç‰ë7lþû¯””ìÏëK óI€À$Tß±º¡iÁÍוTŽ^Êõ;¶ÝûÀ‰¾²Ý¥å¹šòŠÃu!„¦cÉÄNyùL2I’dšݶ¹ºuñeüUÅÈ ÏÜüíW·µ<Ôµè¹[ÿ9>úK'lÈ+$@`’i[ußÊÆ›Z/÷ïNŸ\xxh¨±·¼r¤&„$Ìh~eödÛÉzà·êf¯¨ëZÿŲ¥U—tôê|ölz±¬ìDÓêõÿý_%!WT”MB_ïºùžóJÙ€I"I’¤yñí›kfõŒãŹ3ƒÍ½mƒËgÎê©®>ö¶‡Øs¹áLqÉ¾Úæ ²3b&‰¶•]Ñ8Ó¬Âí~¼id¤|(MCH’$ÌïyýõßìÚµ£çÉÁÓ '¯[ÿÀç‹K‡kûÑþ<„ê‘<~ÉL53—VÏÝø¥‹ËkÇ!„P]{¬9ù—ýÒòPÞÖÕ¿ffÇkÒ\в™pôpÙÎBÄGŽ`@Á%I’´,½ssmÛ5y9U7ãØœó?Ëd’P”Í„Ñá0ÜûFÛsùXçJØ€›µâÞž¦›f‡$×îG¦¨¿´{ác74µž¸æüïÒ4„“'Šï+c÷«ïÿùxÖTÕÔ]Ù½éËŠ+êÇ}ôª£û‰Õ —ïþp&óΔCûjžöñOÿ]!$<åH’$¡uÙ6×ξ¶(÷ÛµãΧžytÍ_?R¶;— ¹·~—ÉŒe“Lq.Éç.ô÷1(œŠš¶es’$“æãfI’MûÝøêýÞÛ¹­ýGo~ž¦!ëk~5kŒ—€JÆyª¼bwCI鮆·ß³(=urÆ¡7ÿ}ä`ÅË;_ºë‰q-”'¦¨â’ý5ë7ÿßÿ°êÆ>766˜­¨Ü:«¨¨·2MG“ö®×Ö†¹3ÉÐ OoþN’öèÕ›<„STUÍ¡†’²\E}ɹÙ×oüߟ®®;ÝùÚK]ë›»»ºît÷èh’Û±uþ?ž;Û1PèYß$@` ªmØÚ¶lõ³Íd’É„¢Y§® !„Šêáª}»—öþü¡ò¿(«8UÑlù¾BÏúV¦š4—ô¬|ê#u3†g¿õãÑ‘0rx_÷ö’pöL÷±³g±Bx!ž€)¦¢rgcmÙη~–Ë¥áåç|·ÿÄŠIµãq>SH&ÓW¾òÆG>•-NÞö*_Þ½só3!¼ó%„“‰#X0%¤¡µí‰%ËV?ÿÉòª´ú­ß9XõÒ–'>ô­$)ÊËûDBa°ogfàÀ¶!y{ÐTÎèêªm_qÅ!@`’+Ê©X|Í÷u.8|s¦(yÇÇñ¾š=££3†ò¹æÈ™“£¯=ò—¥iú¶Ÿï]úÁÿòéBÝ•ÞW€À$U\Ü[5kö Kº{^»«ªz¬áüãUC§““G6m)LÓsEIR6V Q/™€I¨¤t_íº[ïÿRMÝhË»}ÿúö¦G^~þîÒ´î\áü“R“–‡Ð`’))í­¾þ}ÿô{ŠáséÈ+[oyøÍø˜Jì€À$ÒÐô|ÇâÏ~°¾qxÎ…®éë­Ý:6Ú28‘s”×Ï.ê¹÷«Ÿ_öá¿xÛç3º*Æs_“E:\4gî–›g4Ÿ™w¡KF†Ó±m[n¾¢n·´º9-­nWl¼G°`’¨®ÛÞÚÐ<Ôù^×9Xûüð¹ŽþH#å€I¢¦öÀ¬’’±šÁS™þô]ÞèÑ»¯ê…­¿¼ó“ýeƒïÅ,˜$öïݼåÝ7½ÒLn옿ë–êÚá™!IBïµ[ž{êcß ¡b¤Ðsއ€I"IŠÒ¢¢šá4KFÇΔ=þãÿUié`YQɹâ¡Ó]Ç’$›·7Š€I&›í«¨­l:R:–™3F¦Î{>.F€À$36Ö:øò Ÿù^¡ç˜B¢ @4ˆF€Ñ D#@€h€I ¡éážæ®’÷_˜€IàØ‘Å{B’I =ÇD 0 $IÛéBσ¢ @4&¹4Êz†| 0©¥!„±«æÿÛ¯š’€)htàÀÖýCÇ÷^ñ ’$SÛ´ð–Š<Î4¡Hš¦Ã!„Ï=æ¬ùÔM oY™§‘&ÜU³•L~ˆF€Ñ D#@€h¢ @4ˆF€Ñ D#@€h¢ùÿo<³b‘jøîIEND®B`‚calamares-3.2.20/src/modules/locale/images/orig/timezone_12.75.png000066400000000000000000000006311362604102500245240ustar00rootroot00000000000000‰PNG  IHDR ™ƒHÏsBITÛáOà pHYs¢¢EÝ1¢tEXtSoftwarewww.inkscape.org›î<!PLTEÿÿÿ]¢:d›Fg¤Cm«Cq­Gs°Fv´H|ºK‹ÍUŒÎUËögU tRNS!*=DTc˜;¡VÕIDATxÚíÑ1 ÀÀWÁŒ Fl`€hA%~‚äNBÀ—ÚÞ]…‡Œs– †`ˆ!d”9« $\æ« ÿ—6XIEND®B`‚calamares-3.2.20/src/modules/locale/images/orig/timezone_13.0.png000066400000000000000000000011551362604102500244330ustar00rootroot00000000000000‰PNG  IHDR ™Fô¥ÎsBITÛáOà pHYs¢¢EÝ1¢tEXtSoftwarewww.inkscape.org›î<9PLTEÿÿÿ@P0`•@f=kœBk£Bl¢@½N|ºK{¹K…ÄQ‡ÇRˆÉSˆÊSŠÍTŒÎUEyÆ=tRNS24—˜™øøøÂµŠIDATxÚíÓÇ À@ ÁsαÿbýæZ3%,l)@m÷kä€Ú|^áä€Úò¼á僀AÀ `0 ƒ€A ƒ€AÀ `0’š¶5ì½Þ@gq&½8IEND®B`‚calamares-3.2.20/src/modules/locale/images/orig/timezone_2.0.png000066400000000000000000000310661362604102500243550ustar00rootroot00000000000000‰PNG  IHDR ™q*UüsBIT|dˆ pHYs¢¢EÝ1¢tEXtSoftwarewww.inkscape.org›î<1³IDATxÚíÝwxÖÕÁÀý(oní´V@ª­£UkµVq"$ì= äþýÂÞ{ež $¥.E–(2=tï×®·ÏÓýØÚª@ÞÜZ," 0 Ÿ?>Wws¼®ä{ß9'®¤¤$Î'74ÈjY;kûàs©z‡YiqqqóP¾ D€ˆ @  @@€ @ @€€ @  @@€ @ @€€ @Ì €@€€ €"@D€ ˆ p"×ÖìÙìöv :—¾ÞlÔ Ò‰7€ŠþÃ).®Rlõá  € € €€€€ @ @ @ @ @G¹úΔ[¿V/½Ñ¹tmÍž âââ*™@wCƒ¬–µ³¶>—ªw˜•V ó @ @€€@€ @€ @@€€ "@D€ˆ @  @@€` @€ @€€ bH½œå9‰™›Òjg-R;sUVÿù=·S&<^;skjí¬mƒ“ ‹î3/sE›‚¢@€@™}­Aú k2ÛLÎÿvBÆ C z\îê¶ÿ“ýR—Ÿ \Øu_Ãa³& ZÐmoBú«éiKºï³±ÝŸ{Íî¿¶ç쌗zÍÉX^+}UVBÆÆ4 @àc“¢öx²çæe-¼¨ãú>ÓkkÞöðÍa/wúe‹qXÛñ·™/öøN«‰…3 Š£%£Ö'¿NÍX\°'zhrqøÎØM)ÏZÖám ¦ÎHÌÜ’*@WÓœ”Qm§g,î;¯ÇŽ [÷Šö%S¾–tŸ•ùbæ²îß‹½?nsÛ¿å{¿h_ìãè¿bï)oGðN§oç, Ž«Çãm \Ðc÷ …=wމ¢}AɈµ~{{th6nS°?ã…Ž¿H]ÒgGê’~Ûš}râû{E¶NHÛ&@|DßÙÁ‚تÆäâè¡ãÅÆñÄVKúÌé³1¹päÓí5çžnãsïíµ$ëËw·o}íÁmÑû'¤üþ @¸€¤¬áq¤Â=AIú’à§éK¢û¥ÖM¾üºûn¨zsÃ뮾3ìvCƒÌN÷X!@°C›<ß"õ’«.¹øtdâ¶ð~sÂ%3ÖøÈ½¸¸O]yK³WW£77Ûµfïî9ß g ¼³Óìô˜Z©ëÓÿ O¤ @Ô8­n—ÜUÁo ÷‡:L{àÁ¾³£ O%>ò¶ÿêñX›gNôw}¶êM—}áš»ï¿äsW^úŸ(‰…I©K¯¾3åö››îT£ßòt+ € *R%éòPë‡ów†ÿŽEHÆ’Ö¯Å6›Ç¥:{¢%'Ú€>ywp Í¸&.«qÙ‰ðÅÅ]s‚¯Ç]yKÓ¯Oì×%'æ@€PQWBÒë5ÉXîž°-úViP¼{œêp`ŒZþ)(Ç [Ã7ª'Wÿz¹ý€Œó3@€PñWCªE.¾¥é-×t~(鑨ªGY6ž7ËnÐ=R%r±q P&ñWÄWj[ÐrÌäâàÀÉFȤ]áÛ™KÃïÜ×éžkŒ!€€2i‘Û¨Sáޠ̛ч®LùyÝ~un1†NZóœ†]òwÿ.k€Œßü3±W­»Œ!€€“v]ͯVýjð—2Þ²¿qzý&Æ@€@™7¤x&Xs²ñQ´/,iWØr‚± pJ¢š§ÅÂâd#dÐü`Ci¸T2vÊä’«.¹8{Yð“²<‚»È°åð=€€2‰ÝjÞóñ6ó§ì+Û&ôÜÕ)¿Œ¿"þRc @ LªÝqÕåÃ×,Ú*Ã*HIó¡M:?eߌ^5ò…NÓ[ŒÙòç“ QëÃß7ÏiÜÊØ8eI£› :™Ç±RÛŒ€€SÖ8£nV½þµM.|\€ ~.ygì_ã @ ì`U‰DzÏj½zøšà‹ö»2üå¶¿Lߢ¯± P&ñ•ã#½žh³ðdÂãHm ZL5~N>>.¿¨ÓƒÌ,Ú[¶øˆ™¸-ÜßajÒhã @à„b÷ÜÒì7÷šÕzyAqx ¬ñ3ywðn0±å`ã @à„¢ZôM[Üæ'§‡õ}ªõ†øÊñŸ2ž>¢Ú_ºüªêÕªFªD¾õBøýÓ‰˜¢}aÉÐ)?kžÓ8Œ­¨c¸3¸ó¦¾O·^?akðæ©ìù8žI»‚w›mÔÙø@«áM:LÞ¼S^áq¤Ï¯ch_Ôjü™ˆñ[‚6T·¦1 ð«î¼úÚ Û‚·Ê3>F¯ßbh“Œ/€€¹±þׯ¿%Ø_^ñ1r]øû:}kßnlS÷G[?Wñ1j}øÇ†©õjSÇ5h~¸êtã#weøZõè_5žŽ+vWGìÞŽS ‚âð`ßÙÑ—®O¸ærã @à„"U#—Ž\ýË©ÄGþŽà_I£šæW¾)ñ:c @à˜êô«sK­î5oþO€ÄßÓþ®&±UŒa«S~}¼ËówïŒXÛáwéK{ïîõtÖ²^Og¿Ðdhö”o…3²ª~£ñ=Æ@€À1µݨ åðúG~î¦ú_¯Ü®è%iÏ·ÿyAqp°pOP2q[øfÆ ½öôxrèâFÃçŽIÈx5½vÖöÁG»³óÓ©74ÈL¹±QNÒg*í Æ@€À‡ö}\[óú/ýùo´èÓ¾Ñð'&´žTðpó±Oä×ÎZ>$1ssê±¢#¦ÖàuiÕ;>™~Ëù½®¼µÙ_¹·sÍjßlYÛøX74Èjyd`ÔËy17ZTøpû‡Çδ°ß–ô¥½wöœ=diË Nª;dé°»»N~é*_ç瀀2Hf«XxÔÏ]6´÷œôã·¤ì/Ú÷Ñ=!±Ç³ Š£%i‹“pO»»®5vÊäΠúýæD·uylÈ’e<¼Íè‡Ý˜òç&™ ë;evíý×^Ó~jtQ»é¹ó“&~2gôÀ‰$mQÊfã @à”¤.lóƒq›Ãýƒ÷ÝV/ç…ܾó¿’º¸×ÎÂ=Á¡cHæ áwŒ€€SÒrXƒ¼ë»tv²Ulµ#uqßmµ37¾wá`ÛéyO/@F® ßlHãúÆ@€ÀI»®æW«ßüópXÄ"¤Ï¼Ô—“ §MþJ§_/@Šö…%щͳŒ!€€“6ð™èºcÆÇÃûzׇ“ž2†NvïG¥/§üöD¡q"ù»Â·ëôM¬e,|¬K®ºäâÜ•)¯j€LÙ–tšÞòÙšÝj$|«Õ­7S'”¾8eÛ)ÈLÚ=0j}òßÚ´7h~¸2iT³NÆ@€À‡ÅÅ]”<¾ÑÓ§  ’Á;M²¤cïïÿ¨¹øæÆ76l3®ñÔòØIZa^ËLã @ ®Vûkf½Øæ·¹«Â_X›ò»ò‚âhIƒ‰íŒ5€€¸„ž÷Œ¼0éµÉÅÑC±  ÷þGéû“wGË%BJãæ7‘*7¥<~©©ùüm­nýF£´Úõ›dÕoÞ2·Q›º}ëÞ½ãŽÔ…Áö²ž†Uôà½;Bb1Óç©äew¥T¿Ú˜8®V#š¶ÿ¸‹On/HXÒ¾¨Ùüû»ÜWݸ8¦jw|éò±Ã×ËkOȘ Áëµº×¼ÙØ8¦¾³ƒE§CW¦übØêð7ýçF_¹>áÚË+€€cjWØjüéH·o·~2¾r|$R%r±1 pìø(x`ØèõáN7@²^ ¿û~ñ—Ç_ôÞÛÊñŸ/‘Ocqÿ‰„Hÿ¹Ék ÷‡N7@ÆoIùG­î5÷™ÝfMÆó)»Æn ÿ6|Mð»:}î7ÖÞß„~û•Õò¶ÿ.¯K c§aù¹Œç£ß‹TT2Öâjt¾ïöI;ƒwÊû†ôÃúÍ®4ÎÞÛ4ž¾$Ø}¦dÜæðõÏ„ËÚ=0î²—sÀ…®nÿÄ–“vÎT„ÄLÞh1´q`¼°ØªD½þ aÞÎòÙr"=k3¿En£Î‘*‘Kã«Ä_V³Ûýµ¬Š.”ǯªF*uy¨õñՉ31E{ƒ’ÂRÃV‡¿»)üû¤]ÁÁ6ãše—þw|!þŠxÕUì¾ŽÒøx4g#>ŽûhVqxpÜæàì—Âöz"yqýuëDª85 @€P¡|ñ¦/^•¿#úιŒcÉÛ¾Ù㱤5æ@€PÔXûQëƒÿ;ß$v)b—­gš#@ÅÙûqiîªðµ)ûίøxïØÞMá?înwg+ó @¨ ®Û"oGðöù1ù;Ã7J¯5O€ ¤en“päÚ”ÿ9Ÿâ£h_PRP=Ôbh£æ@€PAÔè\ãæAϯNÞž« …ÅáÁÏ$oh>´Q»æ¹;F®ŒÄ›'@ÅØÿŸ½,üñ™ZÁ8•× ˜®t!!€  &´H+ø°êf¥ @Ó<§q«‘k£.ç•’‘ëÚÿ¾ñÈ…#EBÆÆ´Æ#çis®MH5ý訨“ýrÖ E}·åíÿuøÏÆŽÖíöDÚK‰™›S3Vg7¶hd~˳€ ‚ŠT‰D:Mo]8q[¸¿<dТþ›ŽŽ÷dÈ+YѢ™™/öÜ{äf÷ØþŒ:ü|ܦè[ƒußSùÆ:­¿ô­Öw—ÈEæ@€P1#äÓ™/$ÿâ½ ÿöœÚjȨõíÿö|¯âè”i3Ž <Ž•¾.}Üæ¶/Ú–Œ\×áwž´¾ÞÐçs˜7&1smF~/e]—Чii€˜@EuC›ªD'4Ï&6y²pOp¨¬2xaŸíµ3·¦ž(>bê]2,kY÷ï˜?p}bƦ´cý™;:<‘ê,À eR‹ñEe¼$öç“ògLý¸ø8Yö€.ϧ—uõ#öØVã‘sÇ•_€X \Z mÒ|̆”¿œl|äï ÿÕ{núÊØQ»V@”ÉÝíîúzæÒð»§{ê• ð±>¼|²ñ‘·#åÍV¿] @œ’Þ³Z¯Š‘{22ywp0åÁ‰—-0¶}èãc„%@ˆ/~ýsŸI]l?ÙUÜÕ~ytTK³1³Ç÷šýâ°5_¶¦Ó/³—wÿ~Ö²žß´¨Ïö„ŒWÓÜC"@î´yòäOÀ vŸ5dIí¬UÙÇ zC— í?кI»ƒƒÇ<Âw_P2nsÛׇ®ìôZBúªìÄÌ—³>.@"U"'kÑ·ëÃmî:³ÍŒ¾³“WWÞñUs @øˆ¿<þ¢Ò_ê?Óufë™ýžOÜüëÈ@ˆÉß}÷èG³ ÷†Goh÷çØŠÆ°5áÌï³eð¢cú=›¶¦ëc#æÇnH?Ù˜™°%eÿ˜íþÜqƀŭG7ͼò¶*WÝÚü–£ã[d¶Ó¬çõn¼¾Õˆ&]3—†{¾,qøšðWM2Ô3Ÿ€óXixTê7·õÎ1Ãÿ‹…Æ{«Åï¯Vd/ïú“ήÝô¬Eõr– §M~$ge×ßÜöoyÛÕ~m~BƆôØ#X‰™K‡vŸÕÿ•QëSþ¯¬÷ˆoe$oGðö¤]Á»‡?Îß}·ð—$–†É>s @8…y-Ó&ï Þ9üKüØmÿ¯÷œÁ«'nÞð\]ÍÇÍ,8¼?#1k}zƒÜ¹czÍî¾-uI÷}=ŸÊ|qð¢{.´¾ÿü¯Ž…seÀ³á*s @8W>ªF.­Ó7±VlåãÈ_âGohÿ‡ÚY/g69mJ« “ª“½47íþLƒÜ9c’òЦçíÿ}.Cã¸pmMùgæ ){‚ -šcÀy¤nÿšÃz>þÀºcý"ßoÞà—kgnM=r3y­ôµ±G­º<š»`øË~=q[Ûž{D«ËC­U»ãK—›gÀy¢Ú·¾pI³ì†Œx9øýѺӟïô£–.<Ö´²ýCéKch2h~òö›Ýø9s @85Ë®3n̆àõ#/ì3·ûÎÞsznm6fö„„ôõéõsÿ B²×d5öH~Ö²N??dÔúð±½Ì-€àäp„4È}vT‡™£æZØwkAqxð¼ vwÝn~ç¡û»ÜÓ¬f·÷ŽÝ¾~ø¾QëSþš”?ez05ÿÑ„ôW2[8²VÚÒœn7Ïy!7Z8ô™‚âè¡ó-@Šö‡z=Ñf¡¹ œÇº}»ÍÌ÷$,éòØàÁ”‚™Gn@OÌÜœZ?wÙÐÿ~îåÌ zî<ç§^‡ûϾÒí‘ä™KRvd/ 4|MòŸnizË5æ@€pžj;©eNß§[¿š·#øWæ²Î?>ú¬:¥ÁÑrü¬¼Ã7öÌè”iY ;θbø+áŸówF?t á¸Ííþ:dE·æm{ZÖ¸Ímÿ^°'zhrqp0ge—ŸÆâ§,ñ1ywðn»¢V“⯈¯tøßqGò]W~+éöëÍ)€àóÒV•FƓڔ¤/íUœ˜ñrVË NŽ>ÜãɬbŸ?ÙøÈYžò£¤ÑͺÆþ›Í€àê†Y-2^Îî.„ôõé ‡/™ñJfBÆÚÌ£¿ž;zwE×ë’Á‘ëÂßšŸ²ªmÁ975¼éúX€ù@€p6¤JäS£^ ÿ|²wdÄä®_ë<½õ”èÄæY÷´¿ëîøÊñ‘c|ßÏý8×ñGß·'ú^ äíþ=ì•οìúxî–‹ÃaÑ winßy×Ù˜òúÄí)oLؾÑgNïÍG>=®VÚÚŒz9/æ¶žÿxÚÒÞ»µš3¹88ÐzLÓLs @8G+ YËÂï•%@ŽŠ‡C¹«R~Ñåá6~ùÞk>8A«vïÄ[Ço.S€:ö­äáÁñ[Rþ‘ö|~Îzqì¦výèëÓv&n ÞÌÛžòæI¬â¼ùÀÈfíÌ?€àìîýˆ„y-Fï—ÿ²ÊY‘òÓfC&Õè|_õìeá÷Ë1'sQà‰£"ùݲüù´ÅÑïkåÀÒãÑÖ öïm =úô¾Ó ÒïwhÒîà`Y^“¿£ÍiÇÏø-á›…{?~ÏIþÎðíœåÁ/îípÏþ œE5»Õ¸#v xy¬~œV´”à ÌàE½wŽÙØö/G!OÏV”‰ººËÏ;?6dɘ áßo‹ŽM¿±áöqqqN» œ>®9ç›Ð÷DK&íL.Ÿý${ƒ’ògL­µbÈû7¢oM½¾ö€Ææ@€pŽ]V㲸œå)?>ç›ÐK£arq´Ü¾_öòn?LÌÜ’zøöô{{-I¯òõ×™sÀ9Ön¸¬"=‚»½Nö²œÃskëÂÞ—|îÊKÍ9€ài?%ixþŽà­Š 1½žÎZvd€$flI½.¡¯G±çJÒ¨¦]¼¨¯"™°5åŸ †=?üȹ»ûséW|µÖ—Í=€àíéõDò‚Š ïߎÞoË‘óÍ6E½Š @8G®Û0vyE I»ƒw›=áÈIHß”võ]mk˜{À9©¹tð‚èÎQëÃ?쉪h2à¹ëÞ r}bÿ¦æ@€pŽÄWŽ…HÝþ‰õ†¯ U‘$v+z»ãŸ<2Bno÷èุ¸xs @8Çšiì *ÔJHŸ¹©« êf¥Ù @8VC®ˆ¯”<¶ù€¾³ƒùYËÂïMܾñá…à@Æ’”Ÿ Wåï þýIA n €ó\씬»ÛÞùõìeáKÃã`ê‚psýµDªD.Ž}½vï„;ûÏ Wäí8¿Cdì¦v­3dyŽ ||åÞk>_ ‡ÃãhµzÔº³ßœèò¼íÁ¿Îç{AÂiy @Q³[;Îç‘Øãcÿ¤ T uûÕ¾kÀ¼ ¶Gäíó-BR—ôÛ*@P> ÷z6X»ð| ¼íá[5zM%@t#{ƒÁu¦. ¶Ïu€í J 6E€*°HµÈÅÍsE³^¿[Xç,@ö•Hΰ©@€p!„H•H|Òè¦ýrW…¯Åbà\DHÒ¸ÌǀࠑK;Lm5£è¬†t~¨ß @¸À4ÉlجpÏÙÔE‹€@€œù»Â·û<•¼ôÚû¯ÿ¬y 3o_X’¹4Ü[«[­ëÌ€@€œñõjðúíIß¼Æ\È ‰Ûƒ7;L}`RµÛ¯¬f䌶:üuãŒúIÆ@€ @θô%)Û=€àrYËb7£WªÛ/!élH÷G’1€ Hû¢&9üí¸Máß‹öÅãwwDß¹¡Þ _5€ D¤j¤ÒÀgƒuçâä«´…á&s @¸€´Û|@Aqpð\Húâ”mæ@€píýè?7ºâœÜûQ*kYø}ó @¸@4Ú¨óäâàÀ¹ þóÂeæ@€pHìY³aAqôйˆÂ½AI‹ÜÆÍ€àÂØ|~É—¢¿:›§^û;G­‹þ_|åøÏš À þòø‹zÔ¬™½,üþÙÔEÁö[[ÜzClй \@ºÍlýøÙŒ [ƒ7JÃçnc @¸%nÚ-gøöÙ >OEwÀlÀ¼påÙ 0¯åPc @¸€¥Ln•3yWðΙ}ô*Üß¾¨Õƒ‰=¾i̸îßn3kÊ<kØêð×ñWÄW2Ö⮼­Úã7ûÏT€ôz"ú´q ðžë¯»zÂÖðÍ3 l=Ñ8xO›qÍRówD߉ÝP~&¤û#ÑÆ@€À{"U"•J]‘¶8úý‚=å!Ù/†?H_nk5¢YÔ88:D>_·_BËQëÂ?žn|LÚ¼[³Ûý­Üx @à„Ú¶Ì/:ÝS±J_?~køFÿyÑWn¨sýeÆ@€À1}ñ¦Ï}º}áãÇm_?Ý•XÈt¤õœHÕÈ%Æ@€Àq5Élœ¿3|ûô#$(é3;y¹»@œhOH$ó…ð{EåpIá¤ÝÁ{Ûß}§q pü©ù\§iIÓ&OÿBÂ6 mJ ðÁŠGì1©Ú½îìùxòÜ6c›øì5Ÿ¾â–fߨ>jý韌5ywðîàç‚Í5:Ýwƒñ \xÁqqýuÜXïÆkÛ&º2åÙËÂŒ^þáðò Û‚·bû@&ïŽžÖ Hì’ÃÂ=Aɤ]É%‰½j%À&iT³¾ÅÑCy;‚·ËcŸÇñNÁðLtm£´z-k÷®U;æ®”êWÀ¦en“0gyðÿŽÝtúÇíÆV7b·¨ÇÞÆV;ÆoöOÚ™|°ßœèêØ£]Æ@€p‹í÷èòpÒS§»¿£¨48¢ã›l8¸^“Ö£›õk9¬q·ÒèøÂg¾ò©+ã+Ç‹ïpU©ÏSI›N{syqôPõhõÛŒ)€€J×|И ))(Ž–|ȞÎx´êH{ÿkÂÖè[×'|õ«qqqSǔسæ7:NKÊï÷tò+±¨8›ÎG¼þ¶nÿ„ŽÆ@€ÀG¿ª¹xÀ3ÑõåqúUlȸMá?šf5lhl|DìFòCöž¼;8pÚ— .hý³ï»Ç¸8®K®ºäâ¡+R~v:— †ù-FEªD.5ž>VlHlÇ©Èø-ÁþÊ·T©jœÜ^*‘Oe/ ~r*’º \g œ´Û“¾yM§é-çǧ*k€ô}:|Ö(“Öcšõœ¸-|£¬ÒyF›ü›ãŠFiõï6ŽNZ“¬F 2—†ûÊ ÙË‚Ÿf½þ {YøcÑW­îµnêñh›§»<ÔzFÓ! Ûõ›}ièÊðµS;Š7Zr[«Ûn1®>»û£f·ûk¥Ln9ªí¤…ÿ¹ý¼hopZ_þî›-¿ùec @àuú$Þ7a[ðVìöóS=z÷XÚŒm<)¾r|¼1 ðÞOFç”Wtäíþ}øý/Gÿ©ùœ1 ðÁÏ¥¬)¯é3§ûŽØÛ‚âèÁf9 Û_ï‰T‹Tº£Í·—õ”«ã‰=¾•\8ú©±SþÖç©äb{KŒ3€€÷¤JäÓÃV'ÿ©¼V?b:Î=§F·Î©‘ª‘KŒ1€€#äâœå)?*Ïi;=ï±›š ó耀Ê\š²«<$íù¾Ûo‹NëWÉøø@“Ì†ÍÆl ÿZž2pÁ€Õ;>™^ Ÿ5ÆŽXý(ŸÍçG¹®ãÿ÷­¶ ¨|Cí¯ch;¹Õ°±Â×'n ÷—W€ÄnOïüȨy÷ö\œñ¥Û[ßlœ¼¿ ½j¤R¤Jäó=k½8mIʦ´E)› Šƒƒ§!“w‡ït}|øs75ÎmeœÓ—ï¹æËù;¢ï”ÇJHîê.?ÿftjÿ¸¸¸ˆ± ð7Ö¿¡Úø-Áþòº”°ãÌáÏ|åÞÎuŒ-€€¸äªK.¾&üMyí²¢ÛÚN0¿Ã”¤1nE ð!ñ•ã??~s°¿V)it³®KRv˜¬2W€ à[Iߺºå°ÆÝzÖº¯êmÕ®¸+¼#¡`OôŒHæ²^û¾Îèóé*W}!R%ò©«ªW»ò½Ø¨‰½m™Û¤UÇ“gõš]4luøë½Á¡ØëºÌh=Ó\* ¦Y [”þâF$ã…ž{36¥¦-nûÑkÃßÛþ#¶º‘³"xmÀ3áêq›Ã¿ëu}ž ž57€ ¨Ifƒfg"@bu…ÓòK.œ:ãðÊÆÉølè,@Eæ·J;S{@/î»-˜ZðíØ­éey]Ö á÷Ì € è05)/}qÊÖRÛÒ—¤lº"åggꬑë:ü.)ÿÁie ó¢ëÍ€ H]n<GðÆLØš²¿Å¸iSó¶‡o–ióúÒð;æ @€PdAøêÙ ˜nOd/íõô —ËòšÜUákñWÄW2_€O¸Á Âug3@&l ÷Þ¾^–׌Zþñþ®5¾f¾ŸüY{6äTLÞhœQ¿¹ù |òÁ:ï$vgH¤jäRó @øÄHÊy …{‚CÉã›§›+@0à™pÙy{ƒC}g'¿©¹Ø\*€úëÞ=nsø÷ónßGqp ÷“ÉKKãÃéW€Š¤yNãæ¥òúùù;ƒg,IÙ™<¾EïËj\f~Q£Ôz rW‡¯å®Ly-mQÊæÌRŠ'í ß>[á1q{øfŸ§¢ ïëx÷·„€ ‚НùF“›®o™Û¸]í>µîT‰DšiخǣɳF¬ ~VN¹Z×þk?!...bNLid\Üufë§Ò—¤l±6å&í í J†¿þ®ßœä5…{ƒ³öÈUÞŽðÍäÂéVï0+M€*f€Tñrø›s½ßcô†vŠ<\;kû` @ gÌ]TwÈŠœX|€9#Æo ÞÊYÙå§õr–@€ @ÎˆÒøøIbƦ´#ãC€È1üå望½6S€ÈYÑw^úJ @ gE拽öÀ¥¾Têªs ·…oÖJ_›!@;@¾4q{›’I»“KŠÎâeƒG+(Ž–´™<á1 @¨à2yw´ä\_@Óg^Ú* @ gÅÀç® rV´>a– 3.¶ÿ$eÚ¸'€@€œ…S°Rö7;{‚ 3f¶ðÍÔ%ý¶µÿD¾{@¤ü·Ú–ä®éü‹.ŽžW;kuöÑá!@¤Ü ^ÔoKíÌéÇ  @ å"Gðvã‘3'\|€)Ù/uý± ³"}iŸ@€ @Ί.˜/@ Ëoüâ—Ïf€G5È]0R€*¨;’︪׬6+nmqÛåGíË÷\}ýäâ³ c6¶ûKBƆ4 @¨ úÍI^[¸'(išU¿G|åøK¾Vš52ž‹‹ög%> ÷%=ž²ôdâC€>¡:NMš‹ŒI»ƒƒ#×…òRÊ÷³^ ¿[úþïÏÞñ»)ovœ9zNbæ–T @¨Àâ+ÇêlÆÆG÷}„ƒ©ß>Ùð €OúcXO‡KÎU€d¼Ø«¸vÖ¶Á@€ph5¬I‡ØŒ³·§ìo4bþè²Æ‡ |‚EªD"CW¤üì¬Ⱦ°¤÷œŒå§@€ð —4ªi×ÂâðàÙ ak:¿–˜µ>]€.ÄUj‘‹ûÏ®8[ñÑxä‘§@€P\U½ZÕ [ƒ7Îd| y©Ûkg®Í<ø € "祔©øººó/ê Yuºñ!@@ÓìíÆl ÿZÞá»è0sY÷ïÖ²rHyć T]g&Í-ïø˜\è;/uMbææÔòŠ @¨îiwÏWÆlHùKy¬xí JF®ëð?m ¦M?•‹?>@žH €O¸Á ‚­±€8~\„%ù;‚w&í äíþ=q[øfáž ¤pophô†öÈ^Þù§É…Ó¦'Ny(!ccZy‡‡@R»OÍî=m½8oGøæáèÈß=0æÕðÏ¥þÔufëÇohسCí¬—†ÔÉ^‘¾>½ù¸YyÁ”I$flJ«•¾6ãLE‡ T@—Õ¸,.er«Ì¯„ÿ;ðÙàÕêÑê·EªD>UêÓ±¯ßÐ «åÙˆ  @¸€DªFâK££ÒÑŸ Î @@€ @ @€€@€ @€ @@€ @ @€€@€ @€ @@€€ "@D€ˆ @  @@€ @€ @€€@€€ "@¤ÜÝÙqfÖÅ—\|‰ù 3®AÖé‘*‘O™€9ãîhÿXúEÿÏEÁ {@D€ ˆ  @@€ @ @€€ @€@€€ "@D€ ˆ @  @@€ ˆ @  @@€ æ@€ @€€@€@€€ "@NÊÿo¢¸Q¾vråIEND®B`‚calamares-3.2.20/src/modules/locale/images/orig/timezone_3.0.png000066400000000000000000000421031362604102500243500ustar00rootroot00000000000000‰PNG  IHDR ™q*UüsBIT|dˆ pHYs¢¢EÝ1¢tEXtSoftwarewww.inkscape.org›î< IDATxœìÝg€\Õ}ÿÿï¹wú¶ÙÞW»Zõ^I  ªcpÃÆvb›¸ÆÉÏ1‰ß/±'þ'¶ãÞ»cc° ˜ŽMHHHB]Ú•¶÷Þ§ß{þ@X ­vgwvg߯ØÜ9÷œïò@£Ïž¦´ÖÞ(á5sæn¾{‹éòY‰ª!tžÜöõ:Ž>Q›¨ ÞŒD`æ €˜4¦0mÇX+ ©@˜¢´=$€IC`ªb@"€˜4“†À”¥E[œ‚ ¹@L€IC0i LUZ+››Ð$G¢ ç »•R©‰®ãZk;ÑE˜^ LQoFtÞæ»·h­U¢k9“ 8švýê7"ÒœèZL/¦(¥ íË®ˆ&ºŽ³‰úD™Ž)ŒL}ì0i˜ ‰¤g)ÈÈj.qºÂžþÞ¢æÞ®5õ‰® NG Ihm+¥bËr…}™½Cƒ%Ýg¶QjÈe¨Ö´âòWVfdX–²ï{÷}†‘2%—zH>¦9­;¼³çmÛ˜•×;'8âonª[¾»¯§¬Û4SbêM»4 Ûí5UcÍ;Ÿ¶ì¡”!†á±Q7€™‰À4d]ÞÅ«¾u°/µ½´²ùò¾ÎÔ“ ' ö‡Ã¥-b¸—®þÓ-Õ‡¯Ô²ò§¿§uJ,02§[”ˆiú¬¿<)­-enŽÕ0¡ Ly…Û–X–¥z:7:W›¬œ}å™9-%íͳOÝwñS¾”úÂX´ð9m;b)©ŸÇ×Zåv;ðþûE”ˆhIÏ8TTPZ3ßã ú›ëæîïí^[÷z‡ÚV¶6Ö]ù«»RÒ#ymy/ÛÿŽÇD\€`B@˜D¦£=EÏ„sÊpÚ""nwkziÅÞåCC©ýN§yοø;Ý>¥ú}¶=1{Ás7§¦Ç2})±ìîÎÔãÚ¶LÏJkoÌ8–[Ø]‹ù‚}Ý+Ž–´ôÌÚ Ó ¤ ©°7µ;ÇoíEc)ÁÊ»7fd Ìv8,Oj†•'¢Å›ÌÖb‹â L„À„r¦¥7eûR»33²z 22ûfy|ÃÅ-õ»s Û—÷÷äo®[¶gî’çn-Y8<`ôFÜE³N¬;´çæßF#…C§÷f:†Ý—¡¼>S öq8šVƢÅéöë«ç=kÛ"ÊÌŠ„S‚s=pÅœ…u[¬˜Q¦v8¶Ç0;¥½©ùPÕ¡Kq8cÞhØ50<ènhkJy©§3¿±³íâJ9˜ý0a L””ŽŒÜÂêù)éCy™Ù•-Å/ڻᗳ?Õáˆx•aås¯.( Ïéjó R»bQG°úðE;"á¼áSÈm;b(eèùKŸx[WûܽG÷¿ça‘Úªá]§Æòg5e§ftä*Û°»Ú*jG†*zR½X,J›‘ˆ9ìMäGœ]'Ëž«;qéË–•Ü·céoάùÍ›Ö ¾ L‘‘9ݵUsžÓÚV¢-URñÜò²ŠÃËÃᘔÎî¾ÄíÓ¾c¯”=xüÀüûšj–µ¬â¡S{/”ÑvÔ¨\øØúYs®¬=>û©ý/½ÿW¦Ã~}m”áÔüå\åtZîÀHD¯ê»*•h[cÚÁÎÖªêWv¾÷·zGè>eø¢Gϲ=1ÑáÄýN)C‹2tWû¢šhVÝH8töt U ø[zËëº;ç·,[sχ÷½çžÔ´æìH8k(É1!‡s…kŽÍ{´¯«¬É0½–ÖòúÉUþìe%m™qÕ-yºµÁÚÛÛ•ÞT[uËs.wWʬ¹ÛVw´,©‡Ò#–•?’ÈÿpŠÒšežœ)á5sæn¾{‹éòMʶ2³ó^œ_RѲ¨»#¿¶­éÚ}çK‹mG -†rêÓO®Ê+Ü>¿¸¼vesýœ}]më«ã]o4Ðç:±õ+¿ïª~¶)Þ}HnÌ€0¦Çêë¹êh_ý[J ÃuÖ{;:Û.­êl»´*^õ@¼pÆ€IC0i & À¤!€˜4“†`Ò@L€IC0i & À¤q$º0ui{Е_|x–mº£ei½éH‰%º&Ó¼Ö–òg,™³hÿYyƒ‹<^;ED$|i¤öXå#5ÇoÚžèL_ð-¢άܗç\²iïG.S½úüÕÿñú$Å›2œ•À$3„¶#†mG Óá‹ "nvM¾/e £¤âä%©iÁb_ª•eæßÕ"]í¾ãÕG6=3ù•H&’œËÕ”®ŒïÅW<óaoŠåtµ ¦5»=ጌ̑r·×NSJ‰:•I^ 'Z‹DÂ:ÜÙš½¯½¹ìpkÓÅG•x­„ý ’€$d¨#¹)é1W^QÃìY• W˜ÛãñÚ©ÊPÊ퉔gåõ”ÿ¥õëÉC,KÛCý®Ö¡´¦ö沃íÍËNj~c+;IÄí©Ï,(92îâ“7y¼všažÞ!Â! X1eô¦Ìhi®[phh`A»R¦ž¼ªÌ$’¶U^Ñ®9‹Ví}Gº?VðêóÏYD"v¬¿;­ª»=ÿXGËÜê¾ò.ÃüËÒ*ÅT€ D`šÒ:¦´3Ò3Oä/¿øù÷8Úõ—ðñf½fû`jãþ—nø“Öy#§ÊûÍ`B@˜¦ŠJŸ[ZVyl³Ëm™¹ÑÒ³µ±m±CFGkî¾cû¯}Ò¶3CìæHF¢ cÓÓ5»±·+¥!5#Tt¶Ïµ±b–2OÞø¬mg>$3 LCJõ¹ç/ÝzKj†• «ˆÓ%ÞSŸE#¶¥ 1N-xjdÀßÑÖ¼îЫ3x¦¡ÔôãE.·íÎÌ Îv8Ôvqtµ¦­?¹àùîö Õ¢ N³0¥° €éDÛ*¯ð……ÅåGÖeçæ¾>´ÈP¿ÑmÅ´=4èëèj_7¡á#бð³*.3 L¦Ùí5çÅ5 VÔÜîpêÔ~ŽhĶm[Y±˜ÖÛŸ\ÿÍþÞ5õyG,4èh?üÈ®¾†—»&j É‹¦=àZµá÷*(m]3<`ôŸù±Óvw{zÕðàœ ½Dж¢Fû¡‡k›÷ܳc¢ÆÜ L*#òÒ¶ü ¶c¦©ш¶,ËÖÚÖÚ0ÅhmÌÚ}lÿ;ÿdYÙÁ‰,£ëøÖþÚç¿û¨Öš½%Æ„%XLq.O{ÚÜ…Ïmô¦²3²¢ÅŸøÂ! …‡Cшkm¬ØÞT»q¨”èDÖÑW¿;ÖòÊýÒZOè8’€)̶#FjêñâŠù­×¦zí%^Ÿxl˲›j ž©?±e»RŽ ‘é:©Úÿù‘¡öcƒ9€äG`ŠÒÚRk6üüC9# Ãxà ‚±˜¶»;ÒŽ õÏ­žèðîv´|ðÙÎãO7Nä8fö€0E)eê#¯\öP4ê8óóþngë‘}7Ýßݹ¦n"k°¢A³õà‡[÷ÿñ•‰ÀÌA`вí°1é®+SÓíœ7êG#9‰_k[uy¬­qçÏ·±ç@¼° €)Fý®Õî¿S)‘Ü¡%J©7µ±,#¤&ø–óž“Ï›vÿú!­µ5‘ã˜Y L19yG* K‡—¿š;Þ>DDRÒÃ…Z‡JybQÃ`ËAÝzàO„;&ôX_3K°˜bº:–Ô ö™ÝíÞªþWS4"Qm¿q TJª•5{þSOÄøÁþf£íÐCOõÕsÓ9€ø#€0ÕèŒÈ3|äÿÛûâ¦{‡Œ—Ÿ¯ü][£³&¶^!J‰Ì[R{“/µ*7žCÇBƒŽ¶ýÚÓ~øÑªxö §@˜‚ Ãc…ƒszN¬x:¯p äÄ‘ÕôtúÞ Ü^í[·éÉOdç½\1µSm‡þ\Ó¼÷w;âÑœ €©Jº·û’š#¯¼û—g0ÕãµSÃ! k[‹eÙZ´ˆÛK_{ÙöO,]sÏ­¾”†Ìñ  9{kwîÑy`± €)N)‡îj¿ö@gÛÕ½¾F^QÕœà°o8=«³HÛ¶‰8ÂNGÄ£”ýúŽuÛ™†ááô*S€iB)S‡‚}5/‹ˆtuȱ³µKI=–¿æ²§þ¦®jîãµ×í>×IZ,ÁÌ®\—+Ñ5L_joFZ†•½ì¢ª;Voøùû})Çó]œÂ  i¹²\æUºì=Õ»^¼ó?®ûÙßüìíà ÁGûÁ¶Ÿ†;ÂÑD×7QºÚÖØûbôGÙyÍóÊætnJM¢¢úpßÓ2=]…M¡¬hÄ ‡2ƒ¦éµd‚/4€Ó@IéíÿvãÝïú—óf/u|ð’-™.Ã0ôÉý#{2rÜë +ó/"½‰®QkK9­©‘HNÀ0½ñÛ¯¡ ÝÖtÅ‘ÖFëhõ¡–mó–>}ýÊõGït8”©uƒh[‹ÖZb#04èmîéÈ=ÖT»øà@ o n5À9(º$“Mß´ráºÜ-ªPWzStÚéŸY–Ö=íºi°;Ö6ܯ^ò¤:R;ê;‡ú†ëD´Þqÿ®áÎpHD$á5sæn¾{‹éòMÈFnÛ šë¯þÕ]Ùy# Ã!s°¾ºl뉣7?§”—/f‡£9--VÊÔYJÖ_õÌß9]rÎeh±¨¶í.øóC_~êcƒ-ÇÛãQœ 3 €¤à_ç—•ó–®¾¶ì«³—È•"oþ{¼i*•™'E†2|³;Ö1æ¯ô}ÈÖ^Q¢dý-oküÀ·n}`ÿÖªÿ)™Øz³Näç†!¾Tž™Ó3'=ãhÕÐàÒ¶³µ·­ ™žY—)ê³-ø­úVªÏíöv§Gc9Óè]Þ|ü@íC‹W×ßngßn(¥¢#G²v€ E$…|_^Á†·—ÝWTaÌ«vN§rä9rNý»2”˜¯••§Ë²òœ[±léÇwEîkn Ö‰\è ˆ–Ñœ:‹¥†z;}U†a»ûz2OÙwóã"¾7íKñ¥œÌ©\¸ë²Ü‚îU‡ö,¹wh`~‡z½û7Žåt¶¦•ÏÝqqÙœæ+ ¥äÀî¡_u¶®ª1C®¬Ü¾òs…×zÒ%sÝ×ÜpÛå–ÿ_úwö_Ø £D$…ÜY9åÙ…*.7‚§e蜵››×ÿÛöý;¯øù@ß’³ÎJ¼‰vÎ_zßÛD¥õ›1Ψ/q[›*ö÷¬j<½i`dvï‹[?ò=¥”>=Df¿Ûíiñ§¦õû]îᔼâ–%¥ƒkbQm…‚y½J™Zôˆ³bÁ³ksòÛ:1O4êf´—·\æKÑé""ƒ}fg[ÓÊ“ Wþy󜅭×9œo‘>DÄtˆYT!kòJ\+{;Ö‘{/ø?Œ{@IÁïNùì¯o>™™« âÙo(¨Fz|uÕ‡×<Þ׳¢ñ|³ÚŽs—üyÓ¢•M·œzQC»Ÿ»üû}+šßâMÉÊÙS>wɾRR#9)éVÎð€ÙåtÙÓaûêªR_îí.;j®XfNǬ¹‹Û¯}Ë:´–¾nO½Ãa¹Ó3c…£ýy{;¤þ«ïp᩽0o@Ò¸è=«Ëç®)ùIJKÝëx‹ ×c‹i«§#õxoGvuõÑ›ŸUÊqÎ/Ðì¼]•ë®ÚñéÓ—<…ƒ*°íáwüG4R4tz[­m•‘y¸°ráÞME³ú/2Mu΄sê+[k-oµœj<ºZTõ3¿«½c¤w¤ñð£G»&d3tÞó_7ß½l£ç .xãÝ·ÖZZëÓ÷ÖV­x¶¯guÃÙÚ,Y}Ï-³t^%"ÒÝî­ìÏh §ö¶5-9 ”÷Šh1ÍŽ_JKö•/½=·0Rnšjj\¬Eb1[¼úî=Ÿyø“‰.@òa ét4 ì²m=}+¥¤¸bhµÇ÷²ÿŧV~ëÌKül;läv¯ikJÛÿÊΛ‹æNoãt6f\yÓý_pº SD&l6cL”H4,¡Æ#=$ºÉijü¶€8¹êW\tù»òÿäñIÊéÏcQm‡‚´íøÌügæ„*òŠ^šsæs·§-]DZ‹¤¤„s‹gíYªµõ†„‘W\=Ûí5MÃPS+|ˆH_·jÚþ@ïû^~xßÖD× 9@IÕër®Úœ÷ÓÔtÉ<ó3ã³-åøá=÷Ûöø×†ßÀ›Æ‰FÊûŸ~ð®ëïu5¥gEŠ—®9~G^áKs-+à°íAgfΞòœü¶¹ã"D#ÚzéÏí}ükÛþî ¿éH`ˆ–`’†oŽ/ÚÛÛ›_æXræVnÃPRZ>¼Ri3¶w{åoSÓb¾ÌÜÞÙþ¬á¹.ö^ÈL„Ö"Íõ»j®Ø{¶·”á² ¥""†©ÔÚ»? ¾<ât‰ÛåÒn9÷>ó„”þöýì¡çZ¿rè葉®@rc: ©d/LOùØ7¯;ž™{ö«Ì-KÛ­žê=/Üþ ­s¢ûÝ%g—Ï«º<5-XèöÆü†¡”:G ‰E%Z_]°íȾÛS†ÓÎÈ:X¼`é®ûzrND#®PC͆}©iMÙ—^³õ³§2'ô‡'­Eêé­G¶wþý3ßîp¢ë03@Içö/ÝøÉK®÷}û\!¶´†Íž¾nÿñc6> –÷¿ú#ó;íŸ,¦­³÷8õD#:ÚX­wöuIëÞ'>Vµµº=Ñ5˜Ù˜$p@ö÷uª†Ì<=ë|m³óú—úRåõtn¬IÏn:Rƒ-sOszêO\»;¿¤eIAñðò‰ÿIÆGÛZö==ò¥¿ñô—òÊs3›v7÷$º&`: é¸óÜÆÇ¿wÓ¾’Jã¼!ÁŠÙzû“¾Ùß»¶N½¶«¤üÉUKÖy¯ij§a(Q†’XT[½]¾j‡Ãö(¥ÍÌÜHÙÄÿ$ã3<(ý?þÌöyÍ{Z»] œB$¥«>yåšÕ×äþ<¿T/9_ÛXT[î¶îöì£GöÝö¨2œ¶R]^¯¯9ëŠ-ÏÜíp\À-…SH,bÛý íêþâ3‰®Na  )õ´ôt8]9¾Ñ´u8•éÏŽ–ddµ—¤¤ÿ*¯§£àxcí²ÃY¹…Ú2¢â×D×;”¡$«(-?ÑuÀé˜$¥|û¦{—¬÷¼Ã0Ô˜f/¢m;œjŒoO ]-râëypA¸-l'º8…S°Iéwÿþä{ž v WÆtê“Ó5½Ã‡ˆHO›½ƒð`ªa  )…;Öˆ|máµ þpû?,ÛéÏ9ÿ­èɦ·=p4Ñ5À™˜$µcO¯ooÐÛ]G"ÎNÙœèàL@RÛôñ—ÎZ nJt‰™§»r]鉮NG$­›ÿïõï¹ü…ò¦HZ¢kI„HHõ)S]œŽ= €¤tóÿ½þ}ߘöCGê(Þd42¨›Âíáh¢ë€Ó@IE)%×ß}Í»×ß”ñ=GfDø°,[D‹œ~²þp¿ÑÒR=ò«ÄUgÇ= €¤áÎs[>uõٜ߯òŸ.÷ô¼<ðBÄ¢Úêi—»iýH4b‡zZzûDD¬˜­6¶†ÛáD×g"€’‚«e_~Ç¢ŸÌYjÜl8’c£m‰Ýß--ƒ½úxé\½90ú=;ݲT¤±Ê~¸©jèw[öÜáÎðp¢k€Ñ"€¦½õ¸tñšòîË-tûÒ$)N}êï–¶ýÏôÿË“?yîQ¾êƒ—ߺýÞ·å”æf”/+«ØöÝçgäѦ?ö€¦½ÌBßÒ}O¶~nãí%ßñ¥I@Rý:7Åï™í­ôúwö‹ˆÜ/ÿ%""½"R—ÈÚ`<˜$kÿÏUW–-ôÔé6eóõÍN—2]ÓxDBV`$òKmë¾hÔþá—v|íµ0Ó3 €ioÖÅi³–_TX™¹>¯ÌØ‹¨Ážv«¾ Ì¬Ltmãáò˜~—Çûi‘áÁð.ùá7‡¦5`Ú[°¾âê·gþÞã3_û^ÓE"Ózòã ,KKɾ÷ïì'|˜ö’â”ÀÌ–Y”ºÆt˜v¢ë˜(±¨Õ [Ãþu~¾·L{Ì€¦µ›>ÃÍ]—ö §K'í½n£háªüƒmƒ"Â&Ó¿ILky³Rnð¥éŒD×1Ñ Cé¼â´q³;€äFLká@t Ñ5LÓaxÒ3=…‰®Æ‹˜Öt>‹ê¤ÝÿqŠa(É)ð} ÑuÀx@ÓZù²‚wšæÌø>s:Íåþu~•è:`Ì,Á@D~ú™?ß$†È»êÃýÃÇN쮫¾ã_/y6;_Ï6MC$N{EÚÔÞí¨ÿàæT<êÏÑÅZó] `fá=D$ܽö¿sêÙü«\œ;+sÁ¬ÅyW§ç8/.ªP뽩*}¬ׇ¤÷À3]»ë7»où§ë>’Yར«¡³~üÕÀôÁFiã]—ÍYåÿÅ{¶Œåý–õÒÿÜ~ïºx×Ó {@NB¯@ IDAT¥ºýõõéYîܱ¾Ÿžm-šuIyQ§Ô½¹jw÷—#ÁHSî,ÿÛþüÍ­ßw†C.oFa44Ø¡µ>ëÉZJ)¯;-_‡ÛC“÷ÓÀÄ!€p¯-r¤.δÂ#V ·¾WDÞ̲Œ`_ã Öúœ·™Ç¹%"šïkÉ‚À^¸¸(ìWÁþ––D׉sȈ3w¾ÛîFÝ>5';2ÒÓ*"®3?ó¤çg†‡:εD ¦6¡gç J©T¥”)"bzM—+-+_k-ZëÈ™mCƒ}„É„À$ÓZk­-;dG­èðð[µWJ¥¤æV.QJ±rÀ´G A”Râp§–º[ߪÖzdõ~}Ä—]Á ¦=6¡ Y•+W(í ôÔî¬Nt-0Y˜ A¢vw½6‚áDד‰¦¥”ð `& €0Nåëge^ýÁÕßKËt–õwÆöG¢½ ‡;<¹÷øñ®#Áó÷ ’6«t‰¡¼½õÕ­çjãÌtfDû¢ñ«&€qXvÓòÂkþzþã…³d™¨WŸY1±¬˜mïzlèóüÛ_Ml…0µ°€1z÷¿ís·|zÁÞÂò¿„Ó!¦Ëc8ç¯M¿kÉ–e™‰«¦c4k¡ûN¶.<×çy%jî’ËJþÃç~Ó ç0S@£àˆ>ç~SV_ò±O~Ë‘‹îX»j2j€©ŽÀ¸ ÜÎŒ,Yp¾v†¡$#×(Ô¶ NF]0Õ@ -.‡[RÏÛÌÖR½/òÓî¦ÞöÉ( ¦:G¢ `ºqç¹ë>zÕ‡}):]Nß}~]­rb÷Cþ³îÅúáI*¦4`ÓÇ®Üø7ß¼å‹Åsôe†©Þ:}ˆH8,½ÕÛê;&£6˜¸€QØðW–,ßTôåÒyê—[F}ªÕÈ€ôn ç}O~ãéÇ&²>˜. œÇÕ»ióïÌ}À›"¾±¼?2¤únÝš=÷î9ïÚ`ºa:çqäùc‡”¡Ï»Üê\¼)’¾æºò¯­{ÿúÅñ¬ ¦#çÑÓØÛÑݪkÆú¾a(™»Â¸éú•lß×ßöß®\˜±Ø„À[på¸ÌŠU•³Fí­%çßv~n)éâ_±ÑùÙHèÚù¯¸ Ó{@8ƒ;Ïíºö®+ß]T™z½?ÏXåϱf;]FÜ~i×Ñ$Ǿùá—„;Ãv¼ú€é‚ΰpÃâÌEëR¿[¤*D´Ä{År`Pj f*ö€p†ýÚױ㶷 öJÛDô_P.—oùܵ¾`ª#€pÏÿxûÁc»¿Ÿˆ¥ÊÞIÍ.ò\o˜FªR*E)ÅŠ3{@8Ê[—WV®,~ךkRÿÅåw¼û×¶––WõÞmËÿ.ìŽ##Ý5í'·}ý­u,ÞãÀTÂo\8Í–ºöÝ·ÿüŸy¼Ê;ž¯ÞŠeIl¨/½Q»Öv¤ä¸mQéEK‹D©[•RÔZ[32$0£¹óÜžÿÏM[EÌîЈÕsÉþÛ½>íÈ1µVV`¤¸Þ0ܯoDW¦Cç/Ü4+4ؾVD^šÈñ ‘ €mõ «WÌZ LóÔiW¿4Ùé÷œÅÇnlm¼è˜–Ôè©ç¦;+œY¶v…RjK±$+6¡f´’ù9ë cò¿Ó3#…Åå;—¼éyÑOÑÊÛÞô’0£EñØÑ]Ñ_ÛöäžÊ¢”’Ù ª¯ 8Onº|VΜË×eU\R¦”2'³&˜ œ‚˜ñœ~§ù‰Ýúlé\¹t2ǵ,[Ú=ÿž†šëw+e¼á 9èuµío;øàÃ=5/vNf]0‘˜ÌxÑþ¨µûáæ ÊÀdŽkš†Z²¶úÝóîݬµõ†3·\¾¬¨¿tUºÓ›‘=™5ÀD#€ ";~µ£êÈŽà—mkr—8Ê\º¶}Ëâ•¿½E´=AÿÀÔAà5úÚ_m®•“=®RJŠÊº/2ÌútѶ²í0ßÏ’ÀðšHwÄzå‰ÖOFdd²Ç‡\½þ¬¦Âtÿîò˯ÿÑÝ.wKúdדÀižÿé‹{¿ü¢mOî!-þœpYnagÙ¬y'W¥¦Çò£a·¡HJÎðÀןüFO»:9™c*¥¤|^Ëf·;i:ÄLMïb@R"€påTVpH·Nö¸n¸³rGætµz«´Oöø0 œ!Ô²_¸¯ïsuUY/ÄbzR—By|Ê—îDº› ô9íX$6™ãÀD#€p-GÎý;nûã®g.ùn4,‘ÉÛ›jg\v[ÏíµÏî¡®ª§k&sl˜hÎIIO纓­¹;&{ä‚R™ÿ®YñW‹»A$¥'÷¾%¦…ü…×Ì™»ùî-¦Ëgeø®¿zëgœnqMf ÚÖR{D?2Økíé ŸìlìÛ¿çÑ}µ¢%(†H¸=Ìz ‰.€©n I[O×KÇ J†—Mæ¸ÊPR¹TÝ(bܨµClË'7|¸$¨þÖ:k«ˆÜ9™õ@<° €Q0–7‘ã+¥Ätâñ)OFŽÌ^j¼óâ÷®Y”Èš`, ŒB4ìHt §Ó¶Ø}m]Sª& £04>é÷‚¼•žvu z[CK¢ë€ E`jŽmÜ1<èèNt§t6„ŸJt 0F!Ë Ú³öžþnWS¢O ‡täÀ¶êŸ'´#£ÔÕvñÉçûÈ×jŽ<™ˆ b[Zz:¤þøîè÷šzÚj'¿?Žáà(ÃiÙ÷ŽGRÓQ0ÇòÚ¶–¡~ÕÑÙ¤Ÿ¯;ÐóËç~¿ã©PK("Ÿžè‘`b@¸@J9ôÁÝ›þ˜ÿÐ"§SMÈw©Ö"Uö õGF~öÄ·ý>܈ˆÈ×'b4˜<,Áà,‚ýÍGo²"#g ÁÀ¬¾þß„-ƒRJ$0,µ}é±_¼> @8‹Á¶£ƒ'ŸþÚ›÷Þ{ 4Ôú¦¢”CW\ýˆm‰=Q5W7¸óÝ)Õ?$€spf;òeUþÕ¿ílŸ÷v­®;²wν±ˆD&bü4¿äÞöÙëþn"ú€D!€pWŽËÜðWëVüíß¶÷ú¿Ê¿¯lîàEnOmæ›[*©;±egýÉ‚g'¢¥D*–ºï*^]š1ý@"@8ÖOmþøæ÷—l-,—å§a8â,›}hùÙÚšæ‘܇.Þ>ýYzf_ÉÙÚÚºd@«´H{cáÎx׋H¤z¿~ ½~ð¡x÷ ‰Bà4Žt‡ÊÈq¬:óyjúp™mG ­‡œ§?×vF$Í ¾x×Ò\Ÿ½ë¡ÿùüÓßyfO¼û€D!€pšyÎÏ/³.>óyzf´`VåÖ5þ¬—çh2Ïü<%m(ûÌgc¦EûÍÅÇãÖ'L\DÀiÖÝ2ÿ3.·q–cw•,XqâÖîöÔcÇ–vGævŸþù`Ÿw\{@´ Ž=™‡ûºsëêN^¾×ŽhÙ1žn`Ê!€p­õ9ÔõútJIÅК‚’‡W5Õøe8mÛÎ ‡Üí®ìhñyÑ"–eK4j÷ï\óóζKϹÔ*ò(¥ÒÏxli­GFýCÀBà4iÙ®£m›_<²ä¢+~ùÁƒ»¯ûC8T2ÐÞR°7#»éœDk‘HHB5Çf=ZW½vo,šQ†?|®ö¦ËgUnú»«+7}zóéÏZö‰ÈG['L%^ãÎwûþñoÙ0ÚöJ‰–¯p:ñíÜvÇÂ!ßð™mBc¨¥¡àÅHØ=24àïjoZqRTFDDDâ(OFaèÌg#]5ÑÑÖS qe»ën¿hKZ¦.8µc´r ‚óVoøý{ïÙððÜEUAOŠöGŒÁáAoóá½ÿ4<¸ ãõÆÖõël+hŠˆ¦Ç[05@‘;¾¸åÛó×2̱%„¢YC+MóçÖ‡ÞõoY9Ý‹šD|Q¥L=Öš´¶”R¦m«¥kûN¯/˜{üàú?öˆkŸhÀŒwÙ‡6¬¿î¯‹ït¹ÅyþÖg§µˆÃI·bþPOWaCŽQ2âÌ+Þ;·½ù¢*¥<–RÝ^‘ü€(CÞûÁ߉¶”2œ¶È c-Ž˜ñ–m*þgORÆÓGg›³®¹¶òe¸ìѾ£uÔ1µÇÓàÏ+:YQ:»vCV^`îžçõÚ[.?*’8ÕV)C‹2Æ<›S0£9Òêî¹m®ÈøþnŸ_­È+8Va˜Jšj¯Ýs¶6Z‡Í9‹žXïv‡S\îpš?§o¾3Céþp‰éxuKºÓÒÓUÙ""¢mK ´°´mÅNï'ØßÌ&tÓ0c]ù‰+Ö}ê§oûnF¶]2æÝá§Q†’Å+ÝnE]‘–†K;œ½Þ¹‹_Ø•×=?8âëJË.õgEJß8”%§­”·»ß” ر°Ñqø‘­G?óž-òíq× ‰@ÌXþÜÔµ%•ÆÊ8d×¹<â[µáÀ_/X~¨×é²SÜ^ñ¾úIhîhÞïëöžê/èS§îBTJk­G½¬ ¦:`Æ*Yà»9žáãÃ#5ÃÎË»CƒiÍÊÌyÓÝ,FqÉÉíUc Ek-ý=9‰®&0cÙ–Îßjòôtøªj.%ÑuÀDb `ƹã+·ü»;Å‘U¶Ð1;ѵœb[bW^ö„n:Ü €eñõ‹ÊnÿìâO¥gªŒñ½O 'rŸën¿¸f"ö¤ÀTÂ,ÀŒRs°¶ù¹{Û¯?örì;&Sât©hD¢5Ç.yž‹ÌÌ€f”PKÈ‘î<÷qsѬùr…27í µHÍÑÒÇÊž„“ˆÀŒî [?ú»‡®=qÀ~@'pÞahÀì¬:|ã3‰«&0c…;Ñ­¿xå“¡ &ª†Þ®¬£J±ñÀÌAÌh5Ï×¶´ÖÊ ‰;”à‰Ã—<—ˆ± Q €o÷Ã5}xgô§‘°„'kLmk©>4÷ {?Ì0ÀŒå_ç—[þß×_rSåëtìŠEtt²ÆnoIß_[}ÝK“5Lœ‚˜‘<ÅÇ{þù†-Xk¾ßáPfÑìâM¦cr¾C5|dßeVÊäØ]3ÔÜyî4QZk[Dô%o»hÕɽuMw~qËWæ¯T·Ÿ:‚×íUžÉ¨'V¡};.þi`x^×dŒS ´Üùn÷§róž” • É ¡Ä™–ej»@L‡¥&÷þXT¢û_Zö«îŽKj&u`˜B €¤•–î÷çÈ,·WÜ’.þWŸ"æä׋jëÐîE¿moÞtxòG€©ƒHZ•++Š”¡¢•Hâ.;—XTÇî^üëæúk^I\05p  i½òäþ#»~¢¯ÛNÈQ·ÚÖÒÝá9ñÒ¶ß"|À«˜$­HW$²écWÔº<)“þ ·‘!³÷è¾%÷·6]vD)§]Àk €¤´ú+Jf-)øøUïÍû´7E|“9vo—§n÷s7ÿ4.œä}î0å@IÇçö|ú'7?•W, ÔdÎ}h‘¶¦Ôý{_¼íÛÎ MâÈ0m°tÖÝzÑE9…zþ©;>NѶ–PP‡›ë|ÃjضŎ縭i¯ì~þÎ_>àܘ$9«òï4oLCýŽöڪʭ5«ŽØvvÀНûÍ'L‡íògGKÆ»Tª£9åðÞíïú_¥ÜÖøz€äÆ  éxÓ%§ÿ»ÖZj«*Ÿn8yýn­óG”rh‡3=ÚÑœ{Èá°<ã ]mÞ»ž½ãçZR£ãë ’t¼©ºÔЉ ȈˆÖ"ÃÙ]§·Ñ:l–u-OóÛ9ã«·Ë]ÿÒ³ïþ¡¨ÂŒK°I§îàн-'îXÔŽ®½Úó¥DLGì ÷ŸÏšóÔE™¹áòñŒcÛZ×WÏ{ZÛ‘q 3tîû¿þ»ˆHÚ,_îò7~^‰H{Ë’zãµyÖîŠ9‹j®ÏÒ«¡³³¥®è¥æºMyË:L7@Òºòηš¦–-VzFuaNA[iwGym‡ÍH؉ùÇÒo$¬£v­ûMoך:Â\ )¹ ÝÆ'¾sÓß›åp(q¬ºtÇüYvnp¸:âò(ç™§dÖðÑ÷üc·~--ŒwÍ0° ”ÂmaûÀ¶Ž/k[‹ˆˆ?ËÎñ¦š®±†‘¾®ô*ÂŒ”æ\1/wí…_1Ìø­‘²,[Ÿ8|Ѷ¸u3tÜùn÷Õ\öÓŒlÉ‹g¿]­‡†tijO˜i €¤óÁ/o¹oÎRuS<û ÕGÖ<.ÊÐñìf éÄ"ºK}›ÇYµ6æí­•ÛÓ0¦“³¯"€’No{xŽã<…miÝ\·è•ÀH~(”7¿ž`æ!€’NOËà Û²ãÖßð³ÃéL±m[”x­¸u 3t² Óò#Fo¼ús»cé–m™Ù'JãÕ'ÌT@ÒyàßýÍÃ߯»x°Wârb•Û+¾å~ûÈЬöxô3”öÜûòÉî6µ+^ý¥¤Fr\î”xõ3•#Ñ0QÚëO–/ôÜdjÜGbfÿÐ@I÷…¼cE¦ ›cÓŠ†øE!€¤C$­‡¿ýä*–Üò‘ÂrY>Þ¾Ü;Ít]–%ÁѾÓq䱿þ¦½ãš…î:Ù9ž÷`ª!€’V¸3l]ÿWßm˜Ù_Ë/ÕKÆÓ—m)+È6.`>C™Î`Wõ³Mã’ S»€¤öØW·>¹í75›¼ûYw›ÔÚöØ.q{l_éìKã\Ì8Ì€’Þž{÷´‹È‡Üùn÷µÙt[ÙÂô÷gäÈBÓ!žŒ,ÉMÊPRVY»®¥Aï‰ï-ë0“@3F¸#‘{DäwžÛ5gÍüÂwÞ½`_j†dæý´Œ@¹ÃQ—‹Íî›ØJ y± 0#…;Ñ#lê“úѾãñ‰÷ª›üçTï£s'°4HjÌ€f´àˆªÑ«Î×Nk‘ÕÒT½¿jÇÐóÅ+¥ø¼ïرԂ%7TŽ«¾ÞÆÖÖã>y ¦:`Fëll+›ç¹Å0ÅÔ–¶M§ah-¢”Èp¿êîéЇbQ;Ø^|ôÙ_?ÿËÞCà ýל­/­C¥<±Sÿž¿ø†Â¼Wß2ÖÚ¬hȨñGˆÈ±±öS 0£=øµ'¾7Ü·±Ëé6Ü#Æ9«ò?ÚÝÜ—Sì[ÙT5ðã/¼üŒˆHÿÎ~‘yõ­õˆˆ¤ŸÙW^áŽÝËjµÎ ˆˆ˜N%N5ÖÚ”áó%†0U@3Z¤7¢Eä÷§=zî|ïX‘@èlÏ;Û®8¢ÔKÛQ×z"7XÔñÖ=iÉÉ~A0582´´õBê€éŠMè\ h wðlÏ•2´m{£ÊpØ‘ùç½Á\ë cኃo_µþ…÷Æ +þ•ÀÔCàNOÆ9?3\¶ˆ¥ÌóÞx¨mC»ÜÚ“™)»xëeñ­¦&–`pìhø¬3 £¥uÈÌÉ¥¢´¢z­/Õò‹(ÉÊíž/¢Ÿæ’CÉŽÀŠEF‚ZÛJ)ã¼³gc!Çò‹v¿?%]û•z5p¤efYVÐaš¾Øy^€i%X\ Xxx$2Ü5æïÐüâWæyS¬ uÚd‡Óe{}¾Ž´xÔS€ 4Ør 12ÜcåÝœüíó‹JkVÛ¶=ý¹a’‘Õ’Ÿ `ê"€p2Š—Ïöe—_Ðw¨¶£Fù܇.½àà5ÅC«œ.yýÔ+­E´Öº¬²úâøW S {@¸î´\ï¼Íÿ¸ÎtùFuÁ ’agná+³s k—Ï^Ð{é«·¬¿q£y((#uUEϘ¦cL{J`:!€0J¾¬2wéEï»)³â—ˆ¼eX(*{zEVNGyV^ßüŒ¬hq,¦cJ)Qg9äÊáÐîÆ“«÷„Ãå}gû’ €QÈ(^–V¼ê×.»¥à|§_im©Ê…UWgæDÊN=s:Õ9¿sM‡8|©íÙ‘ÈœÞxÖ S€·à/]‘“Y~ÉòŠKÿfNFéÊóÎ|ˆˆä휟‘.í]m©‡z»—6ìÌ0@8‹ô¢%i…KoºfÞæ*óf–ÆÎºvêl´­*¹Ú0F¿˜j°?³Ñ02"c­¦gáÍ(ÊÏU©éºÀ‹•¡µ6.,L°õÀ Âd/q »†FÛVk-ÝEµYL%⬵±â å¬FpØèh]Q7±ÀÔA Îú{ÊZ"! Œ¦mOgæaøÀe^0@ˆ³PpVÿð §í|í´im,?05ÀTA δ3 Óvž¯ÝÈÙÓÞ¼æädÔS€8«˜ÿäEþì¿\Bx.-y{•áeù€…@Ùö°³ráÿßÞÝôÄUÆa>3@ßßHmƒ‚Ò…TÛ¨,HLÔÆ7F7.\ù¡Ü»s¥ ý±‰6V%1±š"liZF†‚ -ˆ0sü“N3÷LຶÏIÎûKž—…Ú½R–e±üàùÛ™©ú‡€)ËFeê­/?>~¢y¦Ý·;ÛÕ­zí·_Ž€9{î×FÇ7¦Š§xµŸ{®¨IDAT}måÔ­jõÔn÷§è/:ää™å‘ê@»ÍWEQ6ËâîÜ¥3ôòxsøaù/þ»]yT_š´ý 8tÈJmêÎZýÈB»ï67Žß«m$fè7:¤RjÖ—Fn¶ûnuù܉yú‘€:|tçēֲüëÁ‹®ß,ôÏúpíIç@ÖWÜÙ\¿\ ŽÐWtÐâü»¿l¬ºßj­,‹¢¶86]TªíOªìS:¨RjÞœ¾òE}騭½½¢YEñx³º~÷öùk¿M_ü|aö}×ïÚ`¯€ýf}uòþ×^ûôü³7&N¯Œþ9{å§FãìvQEûWBö7]Q)êµ7çêµb®×“ô[°€Ä F€1ˆ @Œb#@€Ä F€1ˆ @Œb#@€Ä F€1ˆ @Œb#@€Ä F€1ˆ @Œb#@€Ä F€1ˆ @Œb#@€Ä F€1ˆ @Œb{=dõ™«ÊÆîj«µ²lVš{;ë険I€@m­-Î/Þøìû^Ïb #@€-¹Ôj­lìVë3W¿©Ï~;ßÍ’´°õ÷àÎÜïï]8t¬ÑÍÿœ›¬Eq¸ÕZã¿­‡óß uóÿi¶`1ˆ @Œb#@€Ä F€1ˆ @Œb#@€Ä F€1ˆ @Œb#@€Ä F€1ˆ @Œb#@€Ä F€1ÿ:¤ß®¬ñÔNIEND®B`‚calamares-3.2.20/src/modules/locale/images/orig/timezone_3.5.png000066400000000000000000000041361362604102500243610ustar00rootroot00000000000000‰PNG  IHDR ™Fô¥ÎsBITÛáOà pHYs¢¢EÝ1¢tEXtSoftwarewww.inkscape.org›î<PLTE8ÿÿÿ8888/^!8?q*8i&9j&8.] ;m(G$RJ0SŠ5Au+Cw,M‚1H|/Y‘8]–;Y8^–;`š=X8\”:]–;dž?[“9g¢@`™<`™a›=e ?g¡@j¥Ba›=h£AeŸ?j¦Bi¤Bk§Ci¤Ak§Ci¤Am©DnªDm©Dm©Dn©Do¬EnªDq®Fn«Dn«Dq®Fq®Ft±Gi¥Bs¯Gt²Hu³Hr¯FwµIu²Hw´IwµIs°Gu²Hv´Iv³Iu³Ht±GxµJwµIz¹Ky·Jx¶J{¹Kx¶Jz¸K{¹Ku²Hx¶Jy·J|»Lz¸K{ºLwµI|»Lz¸K|ºL}¼M}½MwµI{ºL~½Mz¹K}»L~½M{¹K|»L~½M~½M¾N¿Nz¹K}»L}¼M~¾M~¾M¾NÀOÀO~¾M€¿N€ÀNÁO~½MÁO¿NÁO‚ÂP‚ÂO‚ÂO€ÀNƒÃP‚ÂPƒÃP„ÄP„ÄQ…ÅQƒÄPƒÄP„ÅQ…ÅQ„ÄQ„ÅQ…ÅQ„ÅQ…ÆQ†ÆQ…ÆQ‡ÈR…ÆQ†ÆQ†ÇR†ÆQ†ÇR‡ÈR‡ÈR†ÇR‡ÈR†ÇRˆÉS‡ÈRˆÉS‰ÊSˆÉS†ÇRˆÊS‰ËSŠËT‰ÊS‰ÊSŠÌTŠÌT‰ÊSŠËTŠÌT‹ÌT‹ÍT‹ÍUŒÍUŒÎUˆ€¿a«tRNS  !""#&&''**,,1155778@ACDEHMNQRRUXY^bcdfgghikmoptuv}€‚…†‡ˆˆˆ‰““•––—š››œœžŸŸ¢£¬¬­­­¯±±¹¼½¾¿ÁÂÄÈÈÊÍÏÐÑÓÔØØØÙÚÚÛÝááãããæëìíïðððñòóôôõõõöùùúûüýýþ&÷ÊIDATxÚìÓ ÷—ž`ƒr(.A@A@A@@A@A@¨ € ‚€ ‚€ € ‚€ ‚€  ‚€ ‚€  ‚€ ‚€ ‚€ ‚€ ‚€ ‚€ cŸhÍþ¥Dè€ € ‚€ ‚€ pOA@A@A@A@& ‚€ ‚€  ‚€ ‚€ ‚€ ‚€ ‚€ ‚€ ‚‚€ ‚€ ‚;w¹ÛF†QX¯³nÚ¦ÌÌÌÌ2333¦L)337ep»ÛßVjlÙu¶ë?ý7ç¹…™£Ñ|š]€@ €@ €@@ @ ø¿âëJRÓ…³c ÀüÄÞRÿóv¢D Ø£}ž˜m%A-ÍÞ[`^áÇÊ<@ÜÖüe|¬<õÊ7ïys©‰ˆÛêl´¬Mq)+¶#mfæ_Y0§¾@ îêñÉ2’·*º¨ÆÔÓ ËÚÖB g•œ³œ£J$¯ãè•–“zÖÏcL Î÷Ír~^ݵ÷æ”où^ß,ˆ£b“VÌb@\åMziEìÄY?X+q•w8aÑü¸jìw+â,ÏPÄ]s­˜)8«ï=‹æwÄ]ݪ,Rz„@ ze‘fâ²^G’a@ NóNY„í¸m‚E¸ßZ §-µ(·g â²N×-B0F §íþåÉ´…«àƒq\Ý6퇬®¶PU=AlYÊÂ|.þ9í}ÐD hdµ…ZÂ%„@ Å/X¨ÄÑaì†>MY¨ÏAƒ‰-ŒßA HíNþ9D¾»ly‚CmŸ~àø–i­b /ZÎó3¥ Ï:Ë Ö6fŽE ø[×–QÉoÞ µ´?sÑþÊkß.áKï•–qÿ €@ €@ @ @ €@ €@øÍ>Ð šýK?ˆÐA@A@A@î ‚€ ‚€ ‚‚€ ‚€ ‚ÀA@A@A@A@AA@A@AA@A@A@@A@!öé€aÐì_úA„ ‚€ ‚€ ‚‚€ ‚€ ‚À=A@A@A@@A@A@˜ € ‚€ ‚€ € ‚€ ‚€  ‚€ ‚€  ‚€ ‚€ µOǃü­‡±§A@@A@A@@A@A@A@ø’¾L"ÃKÐÏIEND®B`‚calamares-3.2.20/src/modules/locale/images/orig/timezone_4.0.png000066400000000000000000000115321362604102500243530ustar00rootroot00000000000000‰PNG  IHDR ™q*UüsBIT|dˆ pHYs¢¢EÝ1¢tEXtSoftwarewww.inkscape.org›î<×IDATxœíÝ{e}Àñç9çlÎ^’Íæ²‰d „ÂÅ H@QD‹ˆíÔ:êtj§íðG+:u:£õV+­ÖëxE‘ê * ¨ÂQn‰!¹lövvÏÓ? HÀÝß9»|>3çŸ÷\æ·ÿì;ßó<ï{r)%í'çÜyäÿùÎÙ‹jéÉú[¿½á®«>ry+gfŽJ«ž?F€aF€@ûÊ­`²  ŒÂ Œ€v–³ë@€E€aF€a´¯œü0ÃÔZ=°{㣃cƒ[[z¾.͆/,I“K)­žx9çÜ»ä°äJGKWAÆGw >¸~[+gf„±¤ „ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ @„ À“äœ;Z=0s à©&Z=0såRJ«gž'¬€aF€aF€aF€aF€a8ó’Ó/zõßœòú'{é…Ç›snÕH-!@`мäí/^yÎ?þî¼î\8PÅñ¯Ÿÿås/=ã}9çÚ[?~öÇN½xÉ÷Ïü‡×\Ðê9"åRJ«g€!çœÞpék>²teÏK+•ÜÑ·°ÔÕSænÝœïÚºqâ†e««gT;S}ǃiã‚%åÀJÎéáÍùž¿æ««K)£­ž ‚˜$¥”T¯wT÷]‘Ž_²YÛ='ÍÍ•œú—¤U«×V/èž“æÖ;Rgÿ@:°òØÖ«ù‹šû_øñ3?™Wåz‹Ç!@`õôu,Ý“×çJN‡[{ûÅï?㺓ßqâ›§j.€vQkõ0“Ü{ó¶OŒ ÎÞ¸tUÇÙó§ýÿ”÷Ü÷ëtÕe½âõi}KŸ›ê ZË5 0Žxãšå¯û‹ƒ~>w~ZüÄããceüw÷¤ër%×—˜^RRI?úÚÈ_þχ¯ø·VÍ É,˜·|uݽë~¸óC;ӣܞ¶ÞøÃ‘÷~âü¯¿|ãúßK¥¤áÁæèƒ¿}ô7­œ ’€)ò­}÷Û×]¾ýœÛ~ÖüÔ77ÿûúol{í×ÿþŠO—RJ÷ìÚê’RºñûÛ>vÓ×®ÿq«gˆb ´@ÈÝo»ä¬ÿºû¦mÿrÍgøóVÏE€alÁ ŒÂ ŒÂ ŒÂ ŒÂ ŒÂ ŒÂ ŒÂ ŒÂ ŒÂ ŒÂ ŒÂ ŒÂhS9çԻϡ‹Z=Àd оf-yÑÎ_zô›Ë9ÿÑ9»{ù~ –¿ô¼Ž<çðœsnÅ€{ªÖê€Ý뜻ÏÄÂO8fÎâƒWð²wÝ?Ñ›ÕÓ?·yóà³ßwÚ)C#‡®ß¼aå†Òœ¨¦”niõ¼ÏF€@›«Îêï?ø})¥¾Ç5K£lØØqÕ¼þkWÕ:{'z°4 `° ¦¡Jîhvv­ï?põºÓSi¦Þ®èÛ÷ˆ;±€vg¦¡ù nZvä ×ÿù®›s¥Vf/Z9±ê´¼iø‘{·úºKG&ÆG†Çzdl×#;'#CãÃÛ†GÚ¹ùŽ)¥‘”RgJ©Ì[~Ìœ®¾}—îØ¼ut×Ö‘îùËæÖê³ë³f÷/m =ºmãM_ùi‹ÿT`† 0Íôνuàˆã~zQwO³otx|G)Íœs¥tõ Œuõ t§”º{é@*%M4†«Í‰±Js|¬²këÝ»Ri6:ºçu§”SÊ)÷,8 5†·Us¥š«Í\©5+µzsëúkFrÎ7•RF[ù÷3‹€i¤sÖ}óŽ9ùGÕÕSf§”Roßè¾½ónÛgç¶Ã7=írNÕYÝÕÔ=‘RJõ9‹jé÷çÿòØ+ÊcÇ›O}ë¼åÇôôê^sþ|)åžx.´™¼î<í'ýÝÂÕ}Ÿ[¹æ¶£+õíC»vÎÝÞ;oýÊU‡m9þñøH)¥j-W^tìµoùåõõ/ î\µe2ç¨vtMÌ[vtßÂU'˜Rºk2?xþÊ¥”gꌼòýkOëýÇ®žj=甚͒rJ)Wžþ"óF£46ÝÛÿ³7ïûë‡X±a¬±tûdÍòÀºËï¿ëûÿü­Éú<àùM€@Ê9WÞþ™³¾¸zmíÏöôÆVFsâ–Ÿ¯ùü÷ŸrëdÌòÀ­ßÞp×U¹|2> À,hC¥”fÞ?_üŽœ]ï]X[ÙÕ“tu—µYÍ®Êc« »[ éè¨T?ê¶óvl]¶i×Ð[#çx6ÚT¹§Œ¤”ÎM)¥œó¬Ô›æ¬}Õ‹—.X±àЇ͹hù!é»{ogwsα§|ï]w¬;ü›î?ñWaC< Ó@)e,¥ôðc[^ü†µ7í³ÿ²[ê]¹¾»÷tÎ_0:T àOà—Ð`ªÖjÝ•ZyÆ/·l˜³nëCk5ÀŸB€À4tðqû\ØÑQ©îîùGªß·îOûZÎw›ÚŠ€i&ç\é_V=ùéž+%¥‘¡zÕü4W?õ{Äf)éŽuW6†;†seÔ9hKþ9À4‘ûóœ³Þsú[N8ùEõzêxêó£Ã•]w­;ýêJµ«iëЮ´±¼_îzíy§ž¹ï {ß|ÉWÎ=¾§¯ÌßÍϤÑáŽG+•ºøÚš€6”s®^ø©³þýƒ—½ñ´ÞÍ%•?TÇÓ×ÇØpk”ÆÄÄHµV™=7)Àž ІJ)ïùò¹ûõõ—%»‹ŽÇmº¯÷¿¸þµ_/ͅõ«@{s,hS¿¹yÛg›ÍÝ÷D))5͉»o_óãT ÙzLV@ M}÷£Wëð—wû¢æ!O}îÁM=·Ýs×Á?Ù±màÁá]<ÜŠùž + ЦJ)õ¿ü׉ñÿ_)å÷÷,¿aËïN¸C|Óhcß¼äÊË–vλºf×çnºoÉ ;íß<«³Qßxßq·ïînXíL€@›Ê9W8ñÝg\û#¿Ð5oåįñÀt%@ }ÕæìsȾÝór[]`Æp F€aÆ5 ÐÆ&FgîØR}â±\­5gõ,kÕL{C€@ûûÕ7ÿö?RJOºçÕÀQç¹â¤÷Ú¢™öŠ-XЦJ)©”²½”²í‰Z}¶Õ`Ú @„ @„q,hS9ç¼Ï Ï<¬R«?é|]ëì]ܪ™ö–€öÕ±hõ©'õ.9ìI·áM¹’RJ¥%ì%í,ç’+N×ÀÌá ŒÂ ŒÂ ŒÂ ŒÂ ŒÂ ŒÂ ŒÂ ŒÂ ŒÂ ŒÂ ŒÂ ŒÂ ŒÂ ŒÂ ŒÂ Œ€i¦”fXþƒ#úÿlU«gØS¦™zǦ9kÖÞò¶5ÇÞø–‰‰áj«çصV왑ÆâÁûÖ/¹zt¤kGµÚ5Ñêyö„€i¦’;š·Ý|þ­ž๰ #@€0#@€0.B€)’sž•öî\Û1Y³´ SdÅÉï=½o¿£öÛ›Ïèì}AN)¹Õ.0c˜"µÎÞÔ³pE³Õs´×€ÀT+ÃÕÃŽúÒÙËW}ç%­ ÕL±Ù½÷,\¶rËIËVÜûòfi8÷Ïk¶`ÀÛ¹}Õƒ·Þ°á‹Cƒó©ä[²€ç5S,WjeÃݯúE«çh¦HcèÑ2¸åμ7ŸÑÙ7kõÙVM€C€À¹ûÇŸ¼2¥TÝ‹èXó¦O¿uîÀš½Š€v"@`Š”R)¥Æs}ÎÙÊ0ã¸F€aF€aF€aF€aF€aF€aF€aF€aF€À Pšã¹š·ô”ÒÌ­žà™˜>âòWžzî—>´ß?xQ«gx&¦¡ÒÜUm6GÿpoÔF&•‘‰‰Yc­œ àÙÔZ=°gJÙ>ëÄÓ¿øþñ±ÊÐuW¿óã•ÜÑüÍí¯»öÎ[‡~Zë˜=Þêùž‰˜fr*¹R)µJ%ÕRiþþX®ñLV@`ºÉ}£×\ñ¶K›•j©TêÍV°'LG•9 Û€éÈÿ. ŒÂ ŒÂ ŒÂ ŒÂ ŒÂ ŒÂ ŒÂ ŒÂ ŒÂ ŒÂ ŒÂ ŒÂ ŒÂ ŒÂ ŒÂ ŒÂ ŒÂ ŒÂ ŒÂ ŒÂ ŒÂ ŒÂ ŒÂ ŒÂ ŒÂ ŒÂ ŒÂ ŒÂh_;~wë=ƒ[îÌ­`²hS¥”‰»ò™+Gmõ,“E€aF€aF€@›Ê9w¬<å¯/žÝ¿²³Õ³Lí+÷,ZÙYï]Ülõ “E€aF€aF€aF€aF€aF€aF€aF€aF€aF€aF€aF€aF€aF€aF€aF€aF€aþ3eRâïQIEND®B`‚calamares-3.2.20/src/modules/locale/images/orig/timezone_4.5.png000066400000000000000000000033551362604102500243640ustar00rootroot00000000000000‰PNG  IHDR ™Fô¥ÎsBITÛáOà pHYs¢¢EÝ1¢tEXtSoftwarewww.inkscape.org›î<†PLTE8ÿÿÿ88888*X8JNƒ2$R0`"`š=b›=\”:_˜Ö2!ÉG¥âÞê.ç+$©XÚó³ÒÇã©VIF6k™ò¶Uý~”k-#’ìºq`qOisÄ2!t§´Zí}¼Zd,üQ:ÙbÔÏv¨ãÍÍ×›L#’®‡y7·Û¯@HR¿Ö!o» #’$§Úûx9³i$ÙÑÈ~ç+Ðgk{ Û¬"úL{^‰ãã…Í'¦[E ü6ëLONînð—æ¥?}¼ŸmPµªÿG“Û s„Š1úOXW]_ „ª¡KÞÿòùÙ‡»—Ïm˜lЦkü°îqƒ½€@@ €@@ €@@ €@@ €@@ €@@ €@@  €@@  €@@  €@@ @ €@@ @ €@@ €@@ €@@ €@@ €@€@@ €@€@@ €@@ €@@ €@@ €@@ €@@ €@@ À?ö q\«õV‰ÙIEND®B`‚calamares-3.2.20/src/modules/locale/images/orig/timezone_5.0.png000066400000000000000000000343131362604102500243560ustar00rootroot00000000000000‰PNG  IHDR ™q*UüsBIT|dˆ pHYs¢¢EÝ1¢tEXtSoftwarewww.inkscape.org›î< IDATxœíÝwxÕÿñýª\õ.K–åÞ ¶Ü˜b0%@€„@`C:„lv“ͦì&l²›Ý_6 il²BBÇtÜ-ƒ›l˲­nuéÖ9¿?ŒYc\$ûjî•ô~=<çÞ™ù σ­Ï9s”ÖZNfìy_½´`ê%%‰Ìо}lË_¼KkMdgÏHt# LÛ† ÛP@؆À6¶¡€€!€}€á‚À6¶¡€° €m( `(ÐÂNèÀ°@`G¢€ä¦­ˆînqÜé „•á`TÀ€P@À)Õoyäùæ/¼qì±X¸Ç=î‚o¬ñgŽ%*€¡‰N©»iW»ˆ´{L)åcs@g‚5 éiMÙ† F@À ‹†º¢-u¦ç[Ñ0S½€a‚U,ÜkîyéÎuÚŠ:ÓkX‘PDD¬8Æ `ÕÔPýDM¢SH<Ö€° €m( lCƒL+Ñ1^£ @D( lD` ÛP@À Ò¬þp ÛP@؆À6¶¡€€A¦E[lDà ÛP@؆À6¶¡€° €m( lC` ÛP@؆À6¶¡€°  .­E[1è’€m( lC` ÛP@؆À6¶q$:zÒ §¤·êï÷c‘¾_樬}¦”èÞÃûÛ´Ö쌊ÿ×À@xRs½Ë¿t]våoÏ u5zä$?r;Éæû?ÿS­uo¼2H^Œ€€~SJ™cV|ù’¬1‹|"'«æNÍ þß×?8p w3%A(  _”R2ªê“+ò&]P ¢­²ÊÇç¥g¶µNoØ·óÂ×”2OZH´:ŠJ¯jm*ßøƒ1k\«Ù$ è—Âé—Í(˜ºf’éôF­X¯Y9q÷Å¿N d6·‡zŸˆ4¼ø­ãϱ¬°!¢Å0<ÑCuW¬ésøüuÞžD<€d@§•;nEié¼O,r¥dGSRwæhéòî¬.z¶§;½µµqT]4š×cžà§Š)³î»"Øçí¨Ù~ÕßD”híŽuw–¶¦ýÏ 9P@À)¥æO+_ôé‹ü9c´2:\3ç?û oJ(Ï0,ב÷ÙlÕ¢U¬µ9í®ö@ÝŽ-«^Ô’ÙºþÚ½Þ¹s—þâ‹;¶,x°ýðÔƒÊôÄþïê¼ iXôNJ)å,šyÕe£ÎqˆˆTŒ±*.u{”Ûé2•Óe.·aº<ÊUPÒ5}씺‹óŠ×=z¾a¸¬PhrƒiVna͸÷¯+ÝΉ3þ´zþÊ_ÞZT±uB"ž @bP@À )¥ÔèÅŸ»0gÜŠÀÑcÌãNwžËÝç;îJ»ºý©]¹G–®æöôdDÃ15霺 /üÇó.ˆgvÉ‹N¨xö5 ò§¬m˜NKDD©oVnǤSÓÛ£:ìS}äWZLóPjå¤Wdf·o”6kÁ#dõU8]ÊÑÒàÛypÿ’mc&<ºhÒ¬½-ÒÚä©éëõ6›Ëåq‰»t¬,1—9\™ù"òÊ ?$€„ €€ȪX[:÷çzE1mEŒ±“[R9iÿ…';Gk‘ƒµéëöíZöºÖ15~Ús«r ‚ãŽn:˜žÙ[‘šöNþ½³7å×ÏÈÈî«ÈÊ Vˆ+Ž^£»CÚk¶F~ÛR×óø ?$€„¡€€÷yRs½Ë¿´&­p²hm©ÒŠgg–Wî^žž.Qêäç)% 9{¬¨ÃRª×ašQ·ÖGŽ‹ˆD"fOFöÁ¢úý™Û_~òšŸ§j³ÇLܼÀéŠz³r;Ç{|:¥§Cµìï~éµWÞ~Öž§Jk^D”RƘ_¾ª`Ú¥¹JÚíÙ–·â’§ÿÉá4NQ=>¨µÉU»öé›~¨”©ç¯¼ûó9ù¡Êc?„­¨¶”ÕÛc¶)1£÷½ªØÄé51JÅ¢m¨Uoí«îþéCÿòÄ}ñJ‰Æ"tp”'½xz‘R†ÉÈ®Ïo<ØêØéN<*3'4ª°äñJ9ô;<©Ð±Ÿ;]†ÃåQ®@–•—ž)?uߥ¥£ëöõ:Ú”(q8•£xŒÌ/˜rS¼@r €€j8°róÖ·V>¤D÷ûçËéìÈiéh›z`Ï»ÅOŸêû†)F +Zšne¾·\D´IIMrçºO¹àÀÐÄpRÙuù†yªÕÔÕá>ì+èq{jE凿 ä~á„Þy#|×Á]íO ۤܘ¶T(hiËÒbšýë ‘£ËŠeED&ÏzþâÔôXîéÎ9ªùÚ¹þéæ›žùñóG^ÁûÓ3 ÙQ@À ¹ [¬'‹úC›Þ˜üÛÕ…Otu˜Íý9'1z•á°tÌéíö4ô÷^†©¤juæ®û¯5wÿ™;ÏÝÿ é1DD¤`ZIš?­9C¤¼QDI,–Ý×p`ÕÆ†"Íõ¯ÖÌ_ùÖÔi–ƒXZY""ÊpZ½=þ&‘Þ ""–¥uo·ÙæöÄÒ.uÂBáO“ÀÔ…î¿ÿ⮚ÝÓiíÛ»¹ñœ’ÔÅkn]¡Üîo…êCVÜ€í( @*—ŽN¿æ›óžÈ)zmJsýÖwì«|íÐþy; Ãii8§¦~ÿö yE3 SÉÉŠH°ÇÓ¤”C‹ˆ4*}·³-pÈãëMo:Xº³©~Ò~¯oOvvþÞÑ¥3²r{*M‡úÀl ‡K\£ÆËy"†Œ›•÷)Ó4$Ô§ƒ©™«fª«Û_oôÿ™|ÑäœçVþCþhçªü™¢µ–îGs}]ÞÛïn¾üi¥ZtÈÌÊ[;±jyõM†yâiÜѰ„·o®x¨fÇyo(åŽiUÅå/LË+<4!-£k´/%œì5ºž{äcwx½¾…«¿Í—b¥Ÿ._$¬£o<Ñyë“w½ø FB€¡5 @ª¯n¾÷¶‡¾ò×nXÕÑ*MJ)I Är*'¼pÞòßü]JÚ¶-N«¸¼~ÂÉʇȑŒI³k®ž¿ò×_TªÍíOÙ3}ÞÖO—·U¥¢y‡¡RÒ$mѪ>#ÊŒµÔªû“ÏáTŽ”€gšÄ¤ß¯œ( à}S—»,-C¿ÿê\¥”äöL^´êé(óÈ¢Q-§ß×Ck©ß_ò–e¥†µ8¬PŸ£íø¯²‚eos nï¨-±¨uÚ鱨¶Ú{_ 5…ú½+;€äDïS†á¥/ÕøAßé2Ìióö]épªÓ®F%r`ïÌ-J9t_Ϙ–½;Ëž=þ;Zkñù÷—T­ÜðÓaœrT£·Kwo_½çÕ—Þ¾oàO ÙP@Àûûù3ÿõË);´ÇÚt¦×ˆ„%ª ý~©ˆÅŒZ(¥ÄíéMooñì„u$;ù HCmlÝï¿ùøçX€ ð¾àÁ U1³¢,#WUžÉù‡üÕÏ?zý·"áâN­cjô¸GŽŸZsÙñß3 %f´¬ŒD̾ÖFß®®v³édïÅ)›h.Ysûy·ŸIɇ×ð€÷]öíÕ÷‘˜|GJº¤ ôܶfWÝ–7Ï}À²²‚""Y9FMœYs•q’V§2òŠz'žîºJ)¥µåT„Q`ècˆˆHÙü1eS{¿—ž!9§Úoв´XǬ„­XÓ!ïöÕÓîë-{oÁy¯£tô»sOV>B)‘9+Sn¿â†åÿëÎu»Îú‚Š}@áV}iå¹åÓ2>]§¸üÀ‚ôŒH~¿AD®¹ì[ÜV:6uÑpx«®Ö¢öW×íOt‰Á> $9WŽ+mÊ’”o‡òÑÞ¢Õl•û›j›@bP@Hr‹®Z0ÇaŠc¨¯ÛìêÖ'ïÞ½ð®›þ|u¨)Nt‰A É=÷Óžûõ?¾Y éH¢³œ)­µØ{rÝýë÷&: €Ä¢€0øÞ^K«h¢sO[ZNWŒ´©Ùb=wÏW½Ù®\’€!`÷ú½Má êNtŽãÕתukjûû㧇Y–>RNÂ:º}õ‡»¿ððåáÃáP‚bH"¼ €! Üîù»_}äù´YÆÕ‰Îr”eiÙ½±ëG-z^ÙðBJ–ÃaxÓ²\{:Ãõ-u½Oi­ÌžŽÞ¦›6¿íJºÁ B`ˆhkèÛ¬µÿêdy–‡Ãð¾ùû×÷‰È·›ÀPÁ,†ˆ–›¬˜•<¯ÂRJb±hÅù_>oi¢£:( ÍÝ›;ZÕ¡Dç8J)‘y¥ÿ}ÕÅ\úÍ ¯ItC€!@)%Ó–•ü(3O%:˱œ.eŠh#«Ð}y¢³( Zk©}§ó]ª%ÑYŽêÓ¡7Ÿlÿü¯?ýЕ‰Î`h €0¸sÝ®Œü”9.·ö%:˱,­­µ|åÙDç0tP@f®šYT4ƽÆí‘¤* u;¬gÂáØáDç0tP@Ö?µþ@4¢Ú$ÁïÀІ-«»CÚb1KDDz»¬ƒ¡úP,±© %êøK@r9ï¶çMœŸyGñ™­´ ˆeiÙS{qÓs¾½þ‰M–~láÂòi™÷øÖÿÃÁÍûöh­­„0äP@Hr9Ó½Wý܇Ë'çÚq?miÑZ$Ø'=ÝíFmw‡Þݸ·÷¹ÛvOÍÚ½ívd0|±:IÊç6EKšŽê^OŠ™'ƒ8ÿ*³ÄЉÕrÈØ²k}×÷õD[_ºoí+:¢;‡ÃGnüA»=€„@’šÅÜ5K¯Ê½gë«]÷{½:ûl¯gÅ´%J$ÑÑÞ.£¥µAÞèi‹¬ÙÜx_ý®¦‡Óѹã¹íG^õûó½#|€$¥”êñ¥(ÿÜUi7Š:ÒΔ¶´lz¹çþæºÐ}¦aºƒ½}]¯>ðæ á–p(~‰àô( $©ñsó>m˜qº˜qyÌ´¶úΚ·ÿøö6ùyœ® ÀkxHBª€¸½*'^×SJɨ Þ¹3Î-ýÆy_Z¹ ^×€b€$´ò¢E·æ²æžÍ´«cuwHëæ—º¿cEu‡ÃeúãrQ8’ÌôK§M¸üKc¿ëpª¸ý9 Jç;k÷üþýæ LÁ ÉTÌ*¹Ø—ªRâu½`¯ô´7Yïf<ñº&œ)F@H"W}oÍ­Óû¾¯ Ï£Û±.øèŸ¾ÿ·ëBõ!v+pì„@’8ÿË+/©º8ó·)é’ÏëZ–Ö͇dWí;}÷×nm¹ëß½QÏëÀ@P@H°¥·,ž[9'÷Ö² Æ%Ÿ êñ–©ÙúrÛ÷ûÞ3¿ÌûÀÉP@HwÛ¨Z3îÂ˳ÌÈQvÝ·»CwþõÇ»ænü˦ívÝŽb:6r帼KnY¶XDä¢[–ýãy×g?ogùñ§IÚô£¿`ç=à( 6úè?_ôUŸÈ~ú²o¯¾ùà®ÃjÛ§"(¥dÌ óÆs¿¸b¡Ý÷Þ‚€Mο}Å… /Ëú”Û+žË|ÿ^1½|¿Ë¥Ý‰ÈÒÖ¤v…ú"M‰¸7€‘€Mò+ÒWyS$UDÄŸ&™þ4™ˆ±˜ÖÕ¯þÁËw¿¼3÷0²1 ›ìZWÿd$¬¾‡i*U0:mq *è(F 6pç¹ÍùkJþÃéRIñgïøÙŽ®ýÌò3*RRÀÈ’¿ 0¤:œV†¶’ãõ÷§rŽžìXrëÝî¹â;ßœè<F 65†ÚÿßV¶4»å(¥DR3${ò|ïw«®Ÿ7&ÑyŒ lj w®ëüŸ­¯Eÿ»v»~Ñî½€;KÃÛ ~}Oµõäшµ¥¥»CzS½^{Ó©Ø €È™˜î½þ»«Ö–ˬÁ¾W,&V,bŶ¿»ó¿øÐíî|·óãÿrÑoóËœ‹voîûÅ_~ðÔÂÍáÈ`ç  sÁWÎ=ñå¹<â±,-í­®ýí­»²òZ¦¦¤Fsúz­¾ÔX¦a(u&÷ÐZäÐ^kó]·=q~$k 5†""G PgKP‡šBÁx>œû€ N¾ ÖQÃÔº·ÛÙ¼qmñ“-M‹«Þ¬aÄÍÌÚ^ÐÒ<éà”ÙžŸž±ãÂ3¹ÇÁõèÿ~î±h­ÃÇo~§£/>Oà âÎs;ç^<ÿs}‘sF9SærzsN8áñÖd­Xóð7MÓÐ(Èþú•_ÜúÈòPCˆéU’# ØL™MåȲ䒶ŽU¾ÌÒE{ä3¬|þéJõ V,*ÖÝzíËÚyå@²¡€`#oFQzþŒ ®Î,]èH/šáq¸SºOT>´Ž*¥ZD¤¨l× ÃP IØá×éªH{«|ø'ïÞPûZõÁAy8 LÁÀF¹ãVŒ¯Xþ¥ \þÌèɾS\þìôQ»G®®`Ÿ§-´,jO^Çáìš1ëÎs{Åwª{ìªÎ~.;¯iúÞjý›ÿåµo;êYh i°6IÉ/ËÊ™°`é©ÊG¨}]fyeõÅYyÁ1ù%3ÊÆ6-7µe¥ÓNÏ)l˜š§,±¨¥÷î¿Þå6\©9%“Æ­úÚ'—þ¢kÝn3þOGÀ&yãV_Y¶Ì}âOµL™ý›«¬Þ²º¹ÞS‰èØÑOz:U»Ëe¨Ü‚H¹?5–yª{håKé˜NËS_7f[zÉ GÕÅi?øüO×¼5ëªY¥ñ}"8¦``¥”·òܯ\Z0õÒì}ÈÜXR1aÓ²¢²ŽÙÇ×ZD‰¼÷¯ÓÐ"±˜¥M‡¡êü[öí®xcÖü-78Ýâ:X#oþï??µ¼u{goÎ¥-(žuíÇrÇžw©T^ß=öON—8ãq?+¦Å0ßk.Z¤v§^û»o>uaO{Ø1qÑÄQJ)kç[Û›R©æ‚«f_Q»µñuZ×{À‰P@°QjqeÎèŸýx dîI_;aÚýçWN>tFžŽÖ"‡u“Ë#~—[ûß;¦-K´ÓeÍÕö×Þ¿fí¯^ßy¶÷*_ë³bžÜ†ÚÆý¡úuöé l¤”òN»ú§·¤Oì;i[‹Fݰ¨¸üðü÷G/lth¯lØô|ó-ÏÝùºþ|?PÞݽ)ÊP†w´·³ýõv™qùô²U7}!=Û*9Tc<_¿§ç‘úÝMoÍ[ Æ:Ò³<£»‡D±Ž`Oäл¯m¯n©km 5†NúßÀð@Àf¥s?¾¤tÞ3L§ç¤?l+ÕåJI­Í*.ß4·rrËr;ó‰ˆT¿ûÑo>ûàmýùî w^ö³òIΦvvµ©=õûÂëë¹ç]ú…£{–h}ä ]çws×ZIJ´„ƒÒÛT'o=ñËMŸ¬{gÿþPE®Øˆ›Õ½õ»W¼¥ù“.Ì9ÙèZ§†»:'Õ{ýë}G~H·Ä0” `Cô³Ò×n<ÝwÜnç¼Kæ¬XtEî5) ˆ(ñ¥ÊÔ¼R×TËr~àÑ”9¾|=nšJ¼~ñ/Koþ÷é;k¶Ny*P¸¸ýõöø>€¤Àkx°™Ö:vh㟟l­y%,§˜‰ w;Rm•ÕëÊxîá5߮ߟ¶Ñ®ŒãÎñÜ~ù¿^tóÉ>¯XVQtó.~|Õ ÍÈqŽÿÜøp×8­¾é©ß§^ß»¹ã.Ê0|1@t5îèðg—ÿÞåϺ.µ`¢ëDß1ÞØÝžöM®Ž„+ÚÕl)(Ý6ÃŽQ´ •]4Æ™ˆüêØãî\·yí·.øÙß™u×/þxÜ+”àžjëþ·ßýíÚÆ}{)Àðƨhæ•3G/þì"Ãá>á[¢¬ð®Œ™‹þvMõú+î‰DrzJ+ž5iæ»W»Ür’ ã§§Kµ7í×/9\*¥§3ÒzÏ׿þÚo]ø“‰s7Æ‘dYúŒF;º;¤MD$Ø+m{·óÇ|ä»qŽ I1@Úøç-)¹cÇçŽ[‘kœhQºQÔ‹š}ù%¯Ìn:8c³ÓÕšcÅTDDzñ§ê@ù$Y#¢¥³ÍѼâ o?Û|¿|ˆˆD#–¸Üæi¯¥µˆÖGÊJoô<ùëÚ%žÜ¸G9U¯èFF@H0oFqZZÁÄ rÆŸ›Ÿ5zÁ~Ï+\;þœ¥ë>+"‹i1 %ê FâA[zà÷Ö"÷YÛ÷oëûŸXLGK'¤^rhwð¡¾þð'%€dÇqæÎsûB¡Þþ~¿pÚ¥K ¦]Vp¢émF_Ó!ïöÔ@¨Ðç×iq :@-]ªuË˽ß{é¾—~Ѻ½³ç½Ã?Œ2C oÁ ÎR>”R¦/³<úb[>²(äs""²Í•íºwå'—^Z1=p£Ã©<…åzža|ºu8¤CN—¸O¶ãº«­Ej[F¶¬ýõkïªr¨Fž3M.=æÙD‰Q")éVÞÔåLjÈÖf0ü° ¤”2s'®ªtù³²rÆ.Ÿžš?ᤅ!3õ—ã\î¶}¯?´ù®ýoÖvžêºî\·qÍ·.º{Ü,ãã.·áìO–¾^éêhV{ª_=üº/Û—f;\’“U蘙§ÇG"*ÜT§7Y±¨÷WÿøäÑ*ÔЉˆüýCWo,(ÓÓµ9X#oì\ß~gf¾g©S b…=O<öý¿=8°ÿ:†# I¢xÖUc3Ë«–¤Mó›ïíŠ ÷š}%ØQînÙ¬}åÞÿéïõœ§9ãÂéÓο©üñÔ€ÎWJÉI5DDdÛ›±»þçÓÞr¢Ï®üîêÛk;žùîµ›\9.¸9üþ«u•Rò…?\¹Ö›¢ wmèx5R[2ò¼£µè´Œ<=%-Ó¨ˆD¤kÛkÿúĽüËX_ŒÏŒ@QJ¹ ¦^:Ö—YZ EëÞ–=Z÷¼Vémë—Ö:8ÐkÎùè¼Ê@žìÔÅYÿR8Zfè;Ѩ%OÜݸô¥»Ö¾t&¹—Þ²ðòiËóþ¹¨Â˜‹j±b1q¸ 1MóýÒ [²}}Ï/óÙ'?}&÷0<°€$¢µ‹Hõ{ÿoÀåCDäí?¾±KDv}îwW}æƒ7‰Dt¬­Éع{Sè—¯ÿùÍWä®_ñ§W­¼®ð7þ4IÓZ¤7_ŠSLóƒ³É.C\~£ôD×PW)sUqUúÓ^ïÐ÷ëmÈ`ø`€â?¹ì'“ç;>ôu½=]ºëÞomX²ÛêPSè”{‘œŠ;×íüìÏÖ¼R\!çˆy-p(§Óçq[€„C–în¶ÖnïûÅŸþëùMš[;ï>–žéù¬Ã¥Æµþïƒ÷îºu×ïwui~H†% #„;×í\õ©åÍ,ð,Ïå\°{Cß~óÑÇãÚ7þìò»&W9þîØc}½qº q8>ü–áp8*B‡sòÝ1·×‘stš–Ö"½]áÆ^Ü=æ…oUwÇ#€äÂ,Fˆ÷F9îueºîSn%¡úP\¦:-¾yÁ„—/ùà_j*¥¤§3"¾T§óH ±,‘`0,=íÑžâræñ‹â•‰Y±g)ÀðE`„ ÇuÅÔeùwgêÊc…z£Òq8 dyu4 v·G±ˆ¸ ‡„ÓÒ]™Îó„ÛŒôt„Þl«‰}U–Å3!€dBVuýüò¼²Àâƒ;š7ο¼ìCŸ›CœNqimu{}Î ¯ïC[‘|à€Ö"½Ý¡íõûÛ?óó›_:0xÉ$ X_W_lÒ‚¢ïU]ì+0Í eZœÓÐZúµØ4±z¹³zÞºûk:â@r9én«'óÎ+ÛZ›ê¬×ã$›*1†„ñð±GC¡XK×á¾{"!ë;¹+¥­y—•Ÿ£N81 ÀpB2÷º9S¿ú‡KêÆÎ0®8ÙwCLÃŽÖˆ²,m‰ˆtw„ÖÖ¼Ó¶ðÛ+ýĮ݇Ïiièþæáæ¾{¢QËr8ÍÔ¢²´?]ðã1©ö= €D` ÉKJ¿œžidÈiÆ*Ü^‡”ŒNÉnØÞçM±"Á¾ðý¿þäó;DD~ý±çwˆÈwVýç4i íÇÙ…i×»}fiŠ/‡ŸM€aŽ}@À€|þwW=Z>IV÷÷ûÁ^éÞS}üwß~üã¡úoxøÞÔ+¥õ‘ÑÜR岉³/wk^©kÉá†ÐÖŠ©®ëRÒ%³?çj­åÕGºoèÛOþp°sæ'tî­+fçW¤_;ÿŠq¹æ8>êti³¤Òµt`WQbÅtpP’( àCƯšXü‘/Oy8#GžÍu:K}÷á¾ ñÊ`裀€;»tY Û*”Ó­4?…ž9¼ö/k^øÙKoÇ1€!Ž×ð0¸²\W¶Ëìï÷ S²ÎfKŽ`¯tí{7ò×WïÑÀ"tF€ÉM)ðêz·ßç­˜Q‘½oëÁ¦ªË¦,ó§¹ <©ÎüìB×ÂÌ|=Õ—")gz¿ê7¢?ýÍgþòùx>€áÀ±ê¶å,¿6ëQeˆIÐá´<†R*QA§[܆Ÿ]È»;äðÃ?Ý=sÃjãq=à S°!Þ|sÓûwÊ3¦©”×§¼N§©L‡!n¯òÄ«|Ô×ʦ×nº„òàd`)[–¶äÚ_5ÁumFŽ.Žçµ»;¥ýÏ?ØÚZÔ+ªCi™Ö¨Þn£åÝ7zþí¯?þ“xæ0üð^F æÚ††HXõ:œâ?“óC}ºïí'šoˆ†­¦Þ®nµáéê¡ÆP(Þ9 ?F e¨ðö·B¿ž0Ïs³Ç+¾œkÅ´¼ýtÏWžþá Ï V>ËÐaÜncú¹ÓÇwµ…Zœ.= ò!"bYÓÚr”-¨8ã×ô¹`qç¹=×ß±úÞŠ©r…Óaª3ÙèÜáTæ‚5©ÿÈZ!"_Œ{HÃ# Œ ܲò¦q3Œ8gV>Ž2 %—pçºÏh €‘‹FÂÊ”ÊÐbÅ´ˆ‰†U°«Cš¼~ešâ ‡Uw,¢ú:Z¬oŠä竱'»Ö¸™ÆÇ>õß—”‹È"ÀG`iÜ×óôáCêÍ–Ý› ‡Ò±H,úÊo¼\6¥$oß–º1$$Zb¡ÆPèêï_üìBÏ¿'yS¯a*UP¦gÏ¿~îä×îy³ÚæG0D±8!w®ÛsùWλcÖ ïí'Û'][Z6¯üðÞÛþz»½é UŒ€€ 5…‚9“r¿?nö’ý©PJÔöu‘‡µvÔùÒŒñ­õÁõÁžhKGsðo‰Î `è`œÒÊ[o¸Ý›Ú7§¯£§eߦ–»w¯}cK¢3º§´ÿÝü=S/‰t4o6Uß±ïèq¥”CkK\:C ôKzÑTkÌÊ¿ÿø¨ª6†ƒÖ¨EkÆthzIDê ÀÐAý£”¤äT:Ûk(¥\E³®žëNÉñ¥æOÌùK<¢H0 ˆ;OzaŽ?{tJOËžîž«”2ò&]8¡dÎuSJ«nÌ7ÞXÇÁͱÁÈ À~wi“TÁÔK–‰È£=·xö5³Šf^¹ÈéËŒ¦“â 3¬ñ§”¤äŽåIËóôÔÔ¼ñ£Ý©yÃt²—0 Q@À H+šb”̹î¾¼*é R$I€…R†Î(›[îÍ(ÉÈyV,L†1 4ž´‚pvå’©9'ØÙÐ7Xy$ e:´/sÔ€F@Â=­=Ñ`/ʆ) TîÔ¼\¥T¿ …éô†L——·_ûÎZÓög:cá¾–céXØ“;ñüÒÔ‚‰fÑÌ+'‹È¦þ\Ë‘9U=(A$œµPgã¾=/ÿì¥cJffW.-w¥d‡Ò‹gTyRsw»šN¹¾#«bAqÅòÛrE$2¨$  º¬ŠÎPWã*¥ÔÃZ듎n¤ä+÷¦Q>€aŒ5 `Ð)á3Ë«Fû2Geœê{V¸/jECü| cülá GrƯ<å+yCÝMMV4dÚ• €ý˜‚ÎZ,ôe–“ì1e˜íPJÒ §ŒSJ½ªµþÐ4«’s®›•7éÂY¦Ó丈ÎZÑÌ+'èØ¥“Ž?îòg}`WsVyjî„UãEdë±ÇÝ©9¾ñ|cN t¶³áݼ™%ó-WJQpcH 8kNoz¿Ž[±°ÖFwö±Ç«l¥5Y$‹Ð@ÜXVNïúW—þ¦jÅs·Î¨ºïêÍoÞð‡^£húU•£æŒógµL§7&"`¡€€¸RÊÃÐÊ0´y&ç;£u †/Ö€€¸™2ûÁÕecVV¯}ÿþšÅokJt&É…7Ýõ=ÎÆÞnG,æ$:€äCqS[sþÛë_YðÛY ¶~bÎÂ{¯щŽ ÉP@@\Å,_8QÁpÄÙ+2àÍÐ s¬qÕÝ1êð3}ôß”‘Ó§èŽÃˆ­£jþÊß~vå¥úªÃÙìKtɇâH‰eáXTE,ËÁN„>„)X n”2õÆ×ÎÿcVî»–•f€ã1âjê9Ï_`êä²,›ê€íÈû¾qäÞ{î9ý]½ù½ …B.—{úõF­5±ì¾µÇí×kj'¦’%X@Ûär¹Ü‚ÝvO+ì],þÿøH)¥bw¾oÎïMÿÈ©WýÅÜ_ä ¿¯÷¨Þî7Ÿ|О½GõvGÏ Ärh«½Îõ¼máQ¹óü¾Ït÷vÝx[½Ú\7>VýõКêu#Õú7~uÏO ¾÷ù³f÷¾­Øë)Wþ¿_è Ý´b]eEÅR-Ø  #Nºâð£vÙ£tEW!ß¿é¶F£•=¹|ôšéýÝÍÚ©gN¡ðô¢Œ,Kib´ÚºöêG\û¹ûÖ„ tœ‹Ð€Žh¥l¢:Zª0³»?Ÿz-V–¥Ôh4cõ»_¶û¬#[­VjÖ[é·’Ë¥Ôl¶–‹Ø~  í^tØkæ,˜vV¡+7|¤¶¦^k®ÎåS%kfÓz§wï;mzqß\>¥B>ŸêµVªL4Ro_1WÇžz¬ò®ôÆ©þ €N @ÛÕËiuÏžÅÍfVQꙟRš¿É.ÿu±yo_1 WÓøH³ò䊑…wíí±Ó‘Ü h»oüðºr±;?«ÕL¹-ïR³ÞjüðÂ_î~Á{¯½¼Ó³SK€í7-eù\.ßl6‡·f÷|±P{Õ‘ ÞÑûò^ßM`;çh»ì‡Yuå£þxhÝäO[­-?ù¼fWß. fœ{ÄG÷^10uÐ{ý]‹Î½ãƒëžÿûÉñú/Ÿk¿êdcåºÕãçÕÍ_ô÷Ï艜ˆ'@€Ž)–³õkÆ49^¿ö¹ž=VìÊϪüûWÿõæ?ºüø› &@€Ž) ”ò/ß«tùœy}ÎåžýzôB1?}öܾw”Ëž|;tT.—ëÞÒ>}Ó»ÞzÊ÷þDi ´UwÍ^ºrÏu:à…:ñ;‡,ØmÖUÝ=…¹[Ú·ÕÊÒØpõ{åõ“gžó®knŒ˜ˆ'@€Ž8þ›‡¸Ç>s~ÖÕ]Øy«Þð›¯$µjceyCåÜÛ¯_qþOϸw¢ƒ#SÀ, í>xÉ¡»ÍÛ¥ÿc]][)¥”{ú§»·ø²³z>°û>svíÜ„ÀT @[•JiÁn3?[ÚyÚû¶î9èÏÔlfõ'~ï×?pý²öO·mJ¥¢ëR ½,ÁÚê„oöû{ì»Ó-Å®ü´çóþ±‘ê­_<õúƒ§â®XvúÌØ÷5ó>99^¿eb¼þäËö(-Z³räÓß:÷ŽK˃e_š  ŠS=°}( ”ÒÂO ¼·WÎ9ýùÆGJ)Õ*Í¥û¾f~_Ji¬ãmVi T|÷ ¯=ðÕ NïŸÙsdJ)5­T(æÓü—ÏüÂ{ãnÿ™RŠš¶g΀mñ¡KßøšÝ÷™sk±+¿ÅÛînNÖÊR¥ÒX99V¿ìš+úÔm.«µkÆgsÐq{õý?ö»dÆìÞ¿ÌçwµU­ÒX56Z»xd¨rÃ¥g߾ęxað¼œtŇ ù¾û–>yó^ì¼ï.¯˜y^_÷Amû€,¥±ÑêÊë+Ý}óWÿì¬û¶éŽX[|äQ½}]‡^ðé›>ñl˹J¥®·üÕþ öÚçsf–zÙÒõ*㣵/>ãÖ×>þý'+Ûö‹ À6{ïùÿ}—ý^7ÿöB!?-˲B±˜Ÿ™{–³í29^h´\¹lýSWÔªÍúŒY=ówÇ­åÁróÙö/ ”òÿóó‡æó¹Ygý¯k(–›l/žð©ƒÏžÛ÷¶bqó÷äɲ”jÕÆø]7=±ï¿ue-Ø!¹ °MJ¥âÞÎý^OoqA±+?»«»ÐÑøH)¥iÓ»ö™·ëŒÙç÷ç=ðª×ÿÞý»¿rÎM'~ú —–J…çzO>Ÿ›™Ë¥þy»ÎèÙt[y°ÜXüµ{ÞÓjf›=«21Z»cÅ£CoYõøð1sæöíÖŽßvt΀ÛäM'ÐÈ[öüi_÷Aù|nÊþ™™e)MŽ×î©Uš7=¹b䢻nzâ¡GXWO)5SJ­…ÿ8ðÕ¹ ú?X©4î­U·4­•ݽÅ×·šÙS¹|Ú)—r;þ®?-óÓ7=v³Ñª U¾üà]kþyñ)K‡ã;Ø~ `›•J…“>{È¢™³{ß=Õ³¤”R«•¥F½5ÚjeÃZóá”R«^oöMŒÕ¯èŸÙóŽþ™ÝŠù­¾ûçøhíö;åº?tÁ9´Ÿ%XÀ6+–›­f6Új½8¾Ÿçó¹ÔÝS˜Ñ;­ø²þY=oìŸÕsx£ÖZrñ·žóøCëßyßÒÕµjs|k—Ë¥|ò= :Âð¼|çÂ_|xíª±OõÏe§ùÓOû»þã/U&µï]zß=ÍFë¿–RmnH­Ú\µzÅèûžëwà… Àóò𬨯üÕð¢z­92Õ³<›É‰úÃåõ“ßíê.äʃåÚ7®|õÊÇÊoÿÍÏQO<>üçO­û·´IŒ4­ñEçÝñÀÔL Û?OBž—Ò@)—RZ»÷;_ÓÕ]xçTϳ©µ«ÆþiÑyw\S,§”RºòÔ¥ëRJWýv{i ”?és‡|hÓçT+k6½m/Ð>.B¶Ji T8á´ƒÏêí+έV›twþ(ŸÏÍéé+î×ÕU˜3ÕómªQoMnxjüÿ|þ­?ú×M·-üÆ¡î¼Kÿ‡çÌvB.—K­fV¯×›å|>WzøÞµ¯ºø¸–MÅ̰#pØ¢÷_tÈ_½÷£½~ú¬ž÷ôMïš7cªÚ Å®ü´,¥±M_/ ”Š?ó°Å]Ý…ùÕÉÆC½}]û4›­æ¹§ý|¯·ÿÍ\ùõ{¹ø¸©˜v ®¶èâÞ°¨^m^ÖÓS˜½ñë/ö…Ógtÿõ~ï~E×&/7õÖªÑáê¥Ã*_H)¥”K…ÊD½þ•c¯½Ù­w¡³°U¾}Á]·/dèÍc#Õë'Fkw®_3þÍzµ±vªçÚœžÞâã#µg¬ø(–³e÷¯=výšñ/U&f­,l¨|%¥T›¢1a‡"@€­R,§òúÊ?þ΃ǬüÕðG{¦u½¢»·8÷·Û³,Kµjs´ÕœúÍfVÏZY*ò]oþ‹}÷Ütû¢¿¿yùý³¿ÿ­ûo«×[Ã…b¾è¶»Ã5 ÀV›œ¨ÿ³W^3svïëòùgÞ>jr¼¾ì¾¥«îÿúù_ëŸÙó;_úCeYqhCeI«™õõôæ>×nÖNÔGË•«êµÖ]‘ãÁŽL€[mñÉ·mxϹ¿}¿×λ²¯¿û M6·ª•Æêz­5Þjf)_È=ë1:©Õʲ‰±Ú’‘¡ê·F‡+ëõV*r?×þåÁr+¥ô7#ÂO€Ûä²Ü¼â¨Ó^}ÔÀ{üGÿÌîCSJ©Ùh5&Çë?(óëú¦wí4ñ‘RJåõ“—œÿ¿o\h9¼x¹Øf?þÌÝëï½mÕ1Ck'Î^·zü¬Ç~¹þˆ/ÿËM'/>ù¶uãõoOÕ\¹\ðâæA„@Û”J¹þ'?éŸÙsxäçfY–êµÖðc®ÿ“‹þöº»#?Ø6–`íÔÕÕ]Ø?êÃZͬQ­4¯×šË—?2ô‘Kþüþ¨Ïž´S}r¬~sOoñÏ#>lxhrñuÿùèßÝ·ôÉ  / ®Ú¦à¥C€mÕÓÛUI¾ Vu²±ò׈޵èÄ›Ëý$ ÝÐVÍF뉎µ½·ìmÀõ À¾òѯ¼wãžûßñ»Ckïü÷oó<ç·/þèìK¯<ñíOÿô¹eî®ö•GŸº÷¾ÛnÃ3ã8^qoçÒÞù³/½òÕW/îœþæ'žùÙæ×É!t`_ÙœÖïÞÝ™/]íÞêÚbóMo¹éëo¼å¦“üàÞN[“ó¬pƒñØW¦­iåãŸ{Ï»n}ûôÙéæÇ+ãUÿ0ÝÝÙ»¸}öÂÓç·/|ãÏ|ù·?>ñ«Ô[×O€ûÒ´58þÀætð ‡Öî^Y]\õiǼ7Ûg/üdwwï×ã8záç¾{ààÊÆîî|îû_üù_êÝÀµ `_›¶¦áGï¼ëè±CÞpÏ[7žî…>tâøƒo¾uó;‹ÿˆ•ÕÅ0ÏóðêÅÝ¿-c/pm¸!\‘K—¯aÚšN~æKïÿýæ´þ¡Ã›>¿vpåmã8®,Ã0Žãpäèú]Ã0œZæfàJ^ÁnxÓÖ´zß'o?väèúÍG޼c1Žã‹gþþì“üâܲ·¯%@€Œï€d @F€d @F€d @F€d @F€d @F€d @F€d @F€d @F€d @F€d @F€d @F€d @F€d @F€d @F€d @F€d @F€d @F€d @F€d @F€d @F€d @F€d @F€d @F€d @F€d @F€d @F€d @F€d @F€d @F€d @F€d @F€d @F€d @F€d @F€d @F€d @F€d @F€d @F€d @F€d @F€d @F€d @F€d @F€d @F€d @F€d @F€d @F€d @F€d @F€d @F€d @F€dþ}kºxªXx‚IEND®B`‚calamares-3.2.20/src/modules/locale/images/orig/timezone_6.0.png000066400000000000000000000203711362604102500243560ustar00rootroot00000000000000‰PNG  IHDR ™q*UüsBIT|dˆ pHYs¢¢EÝ1¢tEXtSoftwarewww.inkscape.org›î< IDATxœíÝ{”]e}ðñgŸs朙Ìdf2ÉLî! $T[ä&j«µj+Z/µUûVmE»jm—m±¯­mUêR”Wª¢å®•ˆÜ/rI¹…[î ¹_fΜ9g¿$@Hfž=sæóY VæÌ™½ù#kÍ÷ìçÙ;IÓ4 fc¦¿nêÌÓ.8¯ÐØZÉj†Ê®Íůøô¥[W/[“Õ PrY ôjµ¾ZÖ3„BH²†>D#@€A/qéꆆ„4d{ãœÝçB°¿¿$„Œ/€„†P«öŽÍð0„   zµj_Ö×?€~"@öŠ‚þ @€h0è%É`Ø…ô°—j}½*ö“½Zµâö·P'ÀÞIv/ö‡†¿øC½ ÀЦ*ê@!ë€ú—$I)ìÇeŒ–±3‹ý8ξIÓPí+Û„ûI€*I’üÁ‹ÿê}Í£lØŸƒGVúq, #hIcëødäøC2¹“Õ3·_¼.Mk«÷û@i-I«•ý0 k¨k•]›Ÿ^yÏewd=°›Mè@4ˆF€Ñ D#@€h¢ @4ˆF€Ñ D#@€h¢ @ýJÓB’õÀ ²` Ôúzsëý¿ëž}üÆ¥YÏyÓ×®KÓ´šõ<ÀóPWz¶®Î¯¾ÿò;VÞuéíiš¦Yϼ˜= @ÝØ¾îátÅ—\·âÎïÞ&>`pr¨ ›Ÿº£¼fÙU×lxdÉê¬g^ž†´´Ö—lxäç[VÝû£Ë·­~`{Öó¯L€CVµwW~í×<µ|É¿^›¦i%ëy€W'@€!©wdzùÕ÷ýϽÏÜñí›Ò4­e=°wlB†œÏ>‘ëq€þ%@€WéÙ–ïÞ²ªaoÞ»mÕýkVÞýßWîØ°|ç@ÏÄ—¸¤ ´$IF†’½|ûN›Í¡~  ›Ð€h¢ @4ˆF€Ñ D#@€h¢ @4ˆF€Ñ D#@€h¢ @4ˆF€Ñ D#@€h¢ @4ˆF€Ñ D#@€h¢ @4ˆF€Ñ D#@€h¢ @4ˆF€Ñ šBÖì…ïI&\8«¥½TêÙ€8,Á¢8ó¯ßtîqg¼¸¡˜ôÛ‹í›’Ç7=¶}Gx®€®4¶Ô0õ‘îÏø!„¶1aƉ>á°þ<&0°°ÏŠcŠsÏ:lÊ+½§4¶Ôð{ŸYüíi³ÃÉý}þ‘íiç±gw^Wì,¶ö÷±a °Ï~ÿ³g|aüôüÛKcKÓËëÊ•B(v“¤4†$ÔæŸ4wꇾrÖw&˜ä’W;Ü>ihLF„Ô‡ª0Tx°OJ]¥æO~÷œG›[ÓÑÏ®I~]«†ž›k—šÃ”Qc“ÃBj Å´yDKÒ2s¤iËnéýê·?zŇò<@ÿpØ7I¨¦µPm(†Òø©éüç^<æwß4àc$!Œ_:|ÀOô —+€}’ÖÒêΕîîÉÖ¬gÙ´®r{Ö3{G€û¤wCoåg?rÊ?ÙöÞm›Âšþ8f­öÚ—†ïÚ¶ÝsýãöÇù'@€}¶ìêŸéíî-¯}¦ï¾þ8^º²öé°dé•KWõÇùg°Ï¾ã¨CÞô¾.nºúãxùÂkûl4MÓ°êÑ—÷ǹ8\öYZK›š[kY? Ihj)LÊêüÀk'@€}¶àÔ)ŸÍè{! ©G€Àã_,°×FÏ=á¤?=þ¤RWid±£˜46çÇ%™åGÕ¾P]÷ÔæÛ²›x­<ˆxU¥±¥ïü›Ó¾yÀœ†3›CË®ÉÆÕËk¿˜23œÙ8"WÌ2BV?™üêß?rÅÑå5åjvS{Ë&tàEŠÅb’$ù¹':kÆ“ÎhÛxØ'¾uö‘aZ®°{õÄȶ0zæ‚ÜyYÏBù|Z!øD†Ã\©«”KÓ´edÇÈ–Å8î#ŸüîÙï-’∑µ1»ïJ5¸·_µ¼ryyM¹–õÀÞ± †‰É §´nX¹¾š+å´ÙSº¦6yáÔÙ£Î+6¥ÇLH-4Ôšsù$ I¾_N˜î)]Ò—üq¿‰¤{úò¥?B«Ÿ ÷,ýņßðŸ7Þ±oƒ1 ŠÅÆ?úÇÓ~6~ZqVµšTò iÓȶ¤-ë¹úK¹'í¹ï†žÏþà3W{": rî‚Ã@’KªåîÚ¶bchiÆÕS|„B©1iœ{üˆ ÎûüQì(f¸%x5†òºreÝÓ=ßXõDrC÷Îd{Öó „¦æ´mÜÅ·O?¥5ëY€—g: §ýå©‹ç½qÔ……|R¨UÓJÖó ”)3ó ;&Œ:(„ð«¬göL€À0ÐÒ^š5ª3Z(Ô÷ê‡BC.{δ¯ÿÁ—Îùß­ºï»æ‹×ý0뙀 PÇÚµ‡ÃçÏ;âà£:…Z¨†a°üzÒôäˆIÓ‹GlßRØ>~þ¸›×Ü·vmÖ3Ï PÇ&ŽšøºÅ‹ß3îêbc®î¯„„BOOØuÏOwþÅ>wíײžÑ€»õGw.Y¿2wÖsÄÒØFÌ\Øøù…ï8b^Ö³†Þ ½½·]õäŸîÚêò„{òìÊô¦ûñÀ²¬ç KÌ{V¡†Å¬4MC[gnnZI“¬g܆†¶[Ú>úõÓ?Tl YÏ26oHžÞúlúàŽÍ}ÏÜüÃeŸï}¶·šõL€Mè0,ýù÷ßvÓ”ƒ“×e=GÛ¸.<Õ³3Y½skõ©GïÞxá’ÿ\roÖ3/&@`ZøŽ£&ÏyýÄ 9ºám¹\RK“Ò4„›¯ìùø{Õ—³žxy†©ÒØRþä?:á¼'µ©}L:)ëyöU­š¦+—ç–<»ªû¦}éúèYÕÓ›õLÀË 0Ì}Áiï8æÍ#/.–B1ëYöÅú•ÉÃ_~߇–×—íñ€!À]°`˜8ë‚ÓÞöɫ޾ìü‹ÞúÒ¸RC!”Æ•J­¥iú²žo_¥iÒ+>`èpêܬSf´ööÔ:ÏùØßx`8:MÓ°|Yú“ÇîÞø¥§tþ{פtV2D¶T«iÈç_<ë¦õaå…ï¹òÀòÚr%£±€×Àmx Ž•Æ—òoùÄ©Ÿ|é/ò…4 ! I’„ç$‹§Ìì<±X ¥†F|ôt§Ý?ýöš÷Ì:füÛšFæÆÒQ ¥Ðôø½Ýÿ&>`èpêTi\©á½ÿpæš—œ“Ë Èx%+ ¿üòÛpüo¾.u•Š!„P^_¶é†{@ µ/jï¸àŒ¯Ì˜_ñQ«¦éK·}ý…¯•×—{Å =êÌìÅsFŸû‡'~köÂüùCeoǫٹ=·ñº‹–\™õÀþ Pg<|ââƒäßYhHòYÏÒ_6­ë[’àjÔuæÚ/^é ßÛ¼xÕá®Zmèmö¬Vkaûæ°aÍÓɽ÷ß\¹ð‘{j? i®<÷„Ãfg=°ÿlB€:USÌŸùg§ž?kaó§Gu¥Ó†Êj¬‡Õsë=ÿ»â#ËW=yß–Û¶d=ÐÏÔ¹bg±ù÷/8ýïæÓð§…bÒõ<¯¦Z­…k/Z{üÝüˬgúŸ%XPçz7ôîüΟ_ñ‰ï¨|u(,ÉJ’$´t4OÈz``&¾÷ùâ¡;+߬UÓP­¦¡Ü–Ë=io_¥ú*µtÓúðL__ZÍzÎ\. Óæ´¾;ë9€áIè0Lô>Û[--ýÉ©çŸpóÎÍ=OÞòÃÛ!„ñkn3²ñ‘;{òÜ/þÔ¼/(CiÏ—ÖÒ´¯/¤ Åä5àÙ1.YPì,6õnèíÞß9€ÁE€À0R^W®†.!„ðŸ¿}yã Þò…wÿë93*¾¿±)´ìíqkµ4„4„\~÷N÷J9­Üñ“Ÿºÿ†G®:ù= >×9)|ÓÈj×έ¹ÕùBRêÞ‘nh:r…P*–Ò–RcÚœÏç’„¦iذ¢ï¡¶Î¦þø+ƒŒMèÀ‹´/jü—‹o›x@zÌÞ¼åãéß±ùzvVvLž=úԮɅS+½}…¯}ìÚùå5åj!Z ¥ s¦vmËm\ÑýDwCy]¹RSÌ'¹¤!„P\x摇Î8²ëüƒäß½yC>öã#7?¾cÛ€þEL¸¼D±”Žyµ÷¤ivnK¶ÞôÃÇþåîïß÷›§”ÿ<„ð©RW©¹¼¾üÛý$};úÊ!„Ï}Y a÷’°B5„ÐB¸µØQ¼mêü©_˜{ÂôîÚV±ô ê”+ ÀKœñéSßyø‰£¾8ª3¼§ï÷UÒêã÷×.[vãÊ/Üþÿîx0ö|ÀÐ%@€=úà·ÞúÝósï|ákiº{ÉÕ¯®[ýñ;¯¾ûöòúr-«ù€¡É,`ž~pÛ7 £Fôõ…ùBµë€C’SW>n¿äs×¼ñám;³žš\^ÕŸ<áœC_?úß¿ñ~±pã#Wg=0t `¯”ºJi_ZîÝÔë—`Ÿ  š×üdR€}%@€h¢ @4ˆF€Ñ D#@€h¢ @4ˆF€Ñ D#@€h¢ @4ˆF€Ñ D#@€h¢ @Ýk_Ôžÿà%'uÚçæ7e= wIš¦YÏ0`ÚµçÿüïßpYK[éÜ]Û{¯¯Tj†4­­zjë?ë7­Ëz>n Y0PÚµ‡}î¸Ï¶¶7ž’ZÚJ§†N­ÕÒ°ec÷-í‹Ú¯ØrÛŸÆBD–`uë­ïŸ7³­£ñ¯Bòâ×s¹$L:°ýG'ž3£+›É`ør¨K Î;¼ã×w>¼âü>î”–¶Ò±…†Üäžî¾»r•ÞÚ–|>ihi-õf=' 7¨Kã¦9︷žþÇÏ<¸ãÇ÷ÿlé¬Y¾~Ky}¹–õ\0Ü  .M9¤õÜi3óÇL8°íðÃÞpôÇ®ýê“'…îËz.îìêÒ·>yÍÛº«òß¹$Í·J:Z:§;ŠIû¢öP[Ê·/jÏzD–܆¨K'ô ï8êô±ÿØÖ‘Œm(†b¹'-oß”[™†PËåÒ\µ/©l^×ûä·þòš³*›+}YÏ Ã…%X@Ýi_ÔÎÿäI;f\2ù7¯•“RiB:ý7_§ižXZ¹¬yV³ø€ˆ,ÁêΖ۶„_^öèIÞ×wýž¾¿ckØôë»*—]õ•Ÿþݖ۶Ć5Ô¥;/]¶¢Ô”ozákÕj-Ôji¸ëº­¶üžÍõÆ?xý™YÍÕêÖ÷o½´VÛ½áµVKÃò_·ÝZ«¥¡idá é :>7ç¸Ñd=# 7¨[ÜøèkÕÝ7ÜÉå’KÒ\_9éž6gÄû¦Î*¼yDk:¾ÔUjÌxLVPwfž— SÚæf=/ 'nà Ԧö‰¥Î™'qð‰33„m]¥¶MwÞpÈå#F ½½];sI!;'—†ª›6Œ{:MW†BC®9ë¹a8 @Ý{È›NžtÔÌÈ74VC»žû/ôõ…ûu›6L[½ôÖ[.ß¼n×­ñ'…áË, n[sÏÅÇ«ªôNÞºôÖù7Ýø»J’㲉†¼$I mçŽo{ð¯åçZÇŸR=ð yOçÁ'¾>I’d æž§ö€!«±u\cë„9Ó&ÌKW笓h›8¯ïµü|’˧ã}sh5ùˆ†í…$I~ž¦im æ0„ó¦:>qÞˆŽiÝI¾ðšâã·’$´Mš_njŸ4/­õ=B¸·§^È,`Hš0ÿܹãçž=«¹ó ]I¾îïñŠ-cÊŖ΃úc6àå `Èéš}Ê´ñ‡uBi䨽Úp¾·FxÜä¦Q“Zûó˜À‹ `ÈH’$™²ðM^ø®3[ÆÎÜï«¿«¹kF_׬Sëïãϳ’$ÉO=öü“'.xëìBid¿^ùxþ¹tÄèiSB·üι“4Mû=x`8rôÆLÝèÙoþü»&ùŽ‹ßJÓ—Ü¡g>ñð·ÌÐóÂ0!@€A¯ÐÔÚÕqÀ¢Q¹½|ÈàþèÙºfýoþœ$I2jê‘S›FM?rü¡ó<+öŸ%XÏ)o_WܶæRCSÛ„¾žmkÇò¦m“æŸ4zúëŠ!„0yážB¸<ã1aH ÏI’|uôô×-hé:xf÷ægVO:êS›ÇLï !TC¡©}’+ °ŸÀsŠ-cªãçž½£VíÍõuo›ZlÓûÂïç‹Mc’$ ö£Ã¾³àwäòÅÚïÆG!„$i!äãOõC€ì¥öI‡7tÍ^<;ë9`( {©aĨjcÛ„IYÏC™= À°Ô½eenÓ·=–ä µ¾ÞØ:nRÇ‹š^îçZ:§’$Éišvü”P0,UË;ÓåK¾|Cš¦=/|}æ›>ó–ÂÄ—û¹Ñ½¾oê±ï;2„pÓ@ÏõÈ,€yå[\%¹B:¢cÚžIûF€ÃÙKcc/î±›o(5¿GÁ>ñàÒ½yÈG’ !„†ê†¥t?žûΫHiäØÖB©ùe7ª/O€¼Ø«HZ­ôö•w¾ôA…À« Àðô2™‘¦µÚž¿ó¼-+îyxí϶¯}x[ß‹; Ô! oú½YGç ¹æB(rù‰´ÿuû¢öw7†cã ‘¦iZ«&[žùUyÃ#?¿ií×<´7Ï&öŽ%XÀ ÑØX(ä’çW]5,¾ý­ïŸwHÌzwmî[y÷¥-ûÑÇ¿½fÙÕâú™+ À ±ùÙîÇ'M¯…|~÷g¤…†\©kBË›CH¯îÿ³¥{Ü_²âÎKnNÓ´/„¯öÿ)W@€Áãáûׯ¯ö¥›~óuZKî•¥xÊ—DÈîøŠ».zl×®½×ÔªièÞYY¶~õŽ÷_|á×ĹšG˜L=öü’d o´¼%XÀ rÝe¿ÿðc']øý¯ÝûЖ۶TÿéÌÆzz¿Ÿ'×ÐX0ïÜÙ}åí[Bwôû €=Jl¬»q‡ž>û ?±8_QíïcwoY™[qÇ%×­YvuäÛýÂðd 0¬5µOªŸwÎÉ3ß8!ëY`8 À°7rÜìdÜ¡gžÙ:~ÎȬgzg@¡ã€cŠ}=[ß’$É¥išV²žê•xNçÌ“Ú*ÝÛÎL’äŠ4MkYÏõH€<'ÉÒq‡ž1¥¯gÛ“$ù¹›õ@ÿ //Ž¨ŽŸwîa•žm›C÷d=Ô›Ð~G±¹£:aþy¯7ç´éYÏõF€ìÁˆŽ)éøyç.î˜vtgÖ³@= /£u¡ù‰ ÞzNK×AÍYÏõ€WÐqÀ±•î­g'Iòƒ4Mû²ž†:ðJ’$tÎ:¥³Ò³í´$I®IÝ ö‹x¹|C­kÖ)3¶­~`Jáé¬ç¡Ì€½Ë7„|C£oa?  D#@€h¢ @4ˆF€Ñ D#@€hM!뀡¯}Q{è^Þ!„iyM¹–ñHÀ %@€ýväQ‡Ÿ~ÔgÇ|5I’ðìêÊ!„3²ž œ°ßŠ…–ޱaJ.Bo¹¸!ëy€ÁK€ý"­¥¡BH-¾^öÛªGÖÿü§ß­žB•]•Má-YO VØo÷_yÿÆÂO²žü܆ˆF€Ñ D#@€hÜ àT«; !­%ÕêÎBiÖãÀ'@^Á¢/ù@G箃*åPý[º¯ÎzêÀ+(’\±”+„àïÐìxµZªÕZ¨U-¿‚þà À+¸çÖ3.ÉÊ Õrw!©]^ÉzêÀ+è-OÞÊ!ôõlk!ç2ì'K°€h¢ @4ˆF€Ñ D#@€h¢ @4ˆF€Ñ D#@€h¢ @4ˆF€Ñ D#@€h¢ @4ˆF€Ñ D#@€h¢ @4ˆF€Ñ D#@€h¢ @4ˆF€Ñ D#@€h¢ @4ˆF€Ñ D#@€h¢ @4ˆF€Ñ D#@€h¢ @4ˆF€Ñ D#@€h¢ @4ˆF€Ñ D#@€h¢ @4ˆF€Ñ D#@€h¢ @4ˆF€Ñ D#@€h¢ Uzõ®jIDAT@4ˆF€Ñ D#@€h¢ @4ˆF€Ñ D#@€h¢ @4ˆæÿÓ=aMÆÝ]IEND®B`‚calamares-3.2.20/src/modules/locale/images/orig/timezone_6.5.png000066400000000000000000000031111362604102500243540ustar00rootroot00000000000000‰PNG  IHDR ™Fô¥ÎsBITÛáOà pHYs¢¢EÝ1¢tEXtSoftwarewww.inkscape.org›î<PLTEÿÿÿ€U@33f++U$I@ ` @€ UŽ9M€3Ft.@€+;v'7m$Im7Dw3Uˆ3K–-Gq9U†=Ft.Q€:Y7U€5\…=\£=b“E/h^Ž9j•FržFf‘DU‹>ZlªFn«Em©Dk¦CoªFm«Ej¦Cp«Fo¨Fr®Fq°Fl©Cm«Dd£?oªDj¥Cp­Ei£BvµJs°Fv²Hr°Fq¯EdŸ@v´Gv²Ix¶Iv´IwµJx¸Iu¶Iv¶Iz¸K{¶K{ºK{¸J{ºLw²Iw¶Iz¹IyºKw³H|»K{ºJz·K{ºKw¶Ix¶Ix·Iz¹J}¼L€¿N~¼M€¿M}»M~½N|½L{ºL€¿N€ÀNw´H|»L€ÀOÀM~¿MÂPÁOÂO{»JÁOz¸K}»LÁOÁOÀN€ÀOƒÃOƒÂPƒÃQ‚ÁO‚ÂO„ÄQ…ÅQ…ÅQ„ÄQ…ÇR„ÄQ„ÄQ†ÆQ†ÆQ„ÃQ„ÅQ‡ÈR‡ÈS†ÇR‡ÈSƒÄP†ÇSˆÊRˆÊS…ÄQˆÇSˆÉSˆÊR‰ËS…ÆQˆÉSˆÊR‰ËSˆÊRˆÊS†ÇR‰ÊSŠÌT‡ÉRˆÈS‰ÊS‰ËSŠÌTŠÍT‹ÌT‹ÍT‹ÍUŒÎUk¿[Ó¦tRNS !""$%&(+5:=?BBCDEEFHILLMPRYZ[]dhjjnoppww{|}„„……‰’’’“”–—™œž  ¥§ª¬¬­®¯¶¶·¸¹¹½¾ÀÂÄÇÇÈÊËÌÎÏÏÒÔÖÖÙÙÜÝÞàâåæêëìîððñôô÷øøøùùüüüüýýþþþAÅ1zùIDATíÁùŸÌuà÷ìºÖZ·–Jn”³‹ä¾PI(É‘«tŠÜ¹JDDfÍç_lg¶—f¿3ß×ËÏõ¬1€ÎÞJö6õÔÕTve]5 Ÿ¥²â²j­Hw  Æ+©Ý‘“¥7¨±#¥Òï¬*ý>#€Œ_üÖöÕܾ­›ÓÎ1t6xòÒˆ5i{ï²Z¢Ý¼ôz9fj Ç€}cȳûó¡ä˜ò×{ä(|pªk9|Û@ŽYm‹ÈñÒ­mäxäÚÆr<}zD9Þ}>€<óÈÓü?ôìÕ+€ýòsÏêû$]n ¾Oï\j ¾‡G +ð þm/Î粬mvIEND®B`‚calamares-3.2.20/src/modules/locale/images/orig/timezone_7.0.png000066400000000000000000000341141362604102500243570ustar00rootroot00000000000000‰PNG  IHDR ™q*UüsBIT|dˆ pHYs¢¢EÝ1¢tEXtSoftwarewww.inkscape.org›î< IDATxœíÝwœ\w}ïÿÏ÷LŸÝí}WÒ®z³ºdË’,WÙÂ6`0ØÓB€„$@Bàþ’nÈÈ…„\¸Á¡:WÜ q—lõÞµÚÕ®´½÷™z¾÷ÙF–U¶žÙÙ}=[Ú3g¾ßÏÑCz<æ=ߦ´Ö€ËSJy—ÝÿŸ_LÉžId;Qýê_Id Àh‰.ÀÔA"¥SG€Q"€° €e É„„ä ,CõöF0dä`´ ,CH&¬AG’#€° €e C¥«ÐQ"€°  ‰hV¡#É@X†À2€¡QŠ“ÐQ#€°Œ=ÑŒ§ë¾øqoæ4×hÛ™wÇ?)‡×‹šFð9œ‰® ˜Ô¼YÓÓ²Ê×:•ô;<¾f¿·™¡`N¿¨´È¥Þ£TkZÅÖì¶Ö¦•UJÙßÙy*fQÙ—äLÉÎKt Àh@À”PXºmQaÙÙåg4­½9÷PÕñ¾ôÎkf|Жæ¯ÍÉÌ­+IMïËñguWdd+”:-õµU;îøø£¢œ ýñø‹2”R^­u0ѵ#ASBcÝ-ûëdŸˆ9o1¹?ã`ÉÂÛïNÏ —¶ó™Ÿû}éŒî5nϯÓêª+¶77,¬Ö:{ÐÚÊßËí/’¼ù·–‰È‰DÖŒ‹ÐÀóÞ¬®Ît¥¢Þ÷†÷Þž[˜?oéá-½úÑÏŠîMè ›Ã÷åT'²`4S’R{ÉŒ-Ësò[fû³uöåîÕZäȞŵ4®;¦”‘ð“È]©yù‰®)F@À”£u\•=·ÎŸY³Ô—Ö3;0pñõÚÔbƵ˜¦–âé§®>7}+ñÜé™J)w¢ëF‚0¥(Õï4lýΦºu»;ZÎÔLŸ}jYAiÏ"­Mo<&fw‡ïä@Ÿ­/VÑ"ñ¸cPÚîK‹¤/ZþÈíGöÞñ‚iÚL‘A»a¤G$#"n±‘7ï–©²ºo`´ `J1㦬»éѯ¦¦›Ùñ¸ŠFÁPÀÙÝtÖQyêÈš—ç.Ù³¡´¼kaS†Í¦Þ3[¤¯{°-;oÏ©™ NÜ”ž58½½)c_õñ¯öv/h²òì®”XJvy©@„ `JQFZdÿ¶[þÝímÍ,(®^æÏŽäõvûkÎV/ؽpåuþÌ ‡Óxßg$ÓÔ:«5×ø¢RJDR4­w…iî´Ø1óA—¥ÛôºÒò9I‰¦”x¬×ÙÛèŸÙÞÖ¼¢ÚPJЧ½¼¼´|ïÚ¼¢îUn·qÑSÓ C©Œlsþ.Zñ¸–ÓÇç¿¡µÍTçm¢¥u\‰ˆ(e·éYî´ül¥”Kk¯>€ñ@SŠÍîhSªÏ™•sª¨§kUMý™[v†ÞSy¤û…ë?ðÈ_§¤éŒ+µ K$0`ëîížÓ¤Œs'¥ÇãAûÜÅÏo4͸QTÖ±ääáùÏ´6^wl<žÃ“QlÏžµ¡PDjÇ£}`¼° ˜r”r˜"áÎÖâVÓ †á4ÏM¡ÊÚ½ì·~Õ×ÛeoÒæ¥0ìN팄\].OÈ)"¢Í¨qÍ ¿úÒìE›g/j¾ÕæÐ®îöü¶Š¹Ï\[Vñâ*­c—8hddìî´hjÞÜicÙ&`F@À”es.ÜZ·£umåËO.û–ˆ’œüCÓÎÛëë˘6³ö¯/ž© %"Z´)âÏVä-o½!¯àõ%noOÖ@_ñ™®öu•#©Á^È:$˜´”Rjþß·ö;ÛfÔì{+åg­óN›fnðýˆ¶‹½ÓEËzÚšËöžûyäËA\¾Ü¥”]kq#€… `RRJÙ¦¯ûÒ-éE‹="2.§”÷÷ÎmíïÛzñWí™ÙGKSR»2²òÚ*zS[k«Vï‰Çòï_ø>òzíîT§ˆ¸Ed`Ä"€€I'5o¶wÖÍß¼3wÎM9†Ý9.áãR´Ž©‚’ísËç¿13{°\”’s§¤wJÅüÚœm͙ǎüÈóé{§õõ¬æ AL)0©dN_]¶æ3wf•¯õh1uFöîé©i-…u5·oY‹=.­S#JÙ®8OJ›QcîâßÝR1¿å&Ã&Æù#¦©E›¢<­­ÇD´ê鼪Îí­Í°ÛÁÀ¼KŒ¤\±×wÿ$˜4 ~ ¼lõ§nI+Zdˆˆ¤¤Ïïl›ßÐÙ¶¸Î¸ü¹ïãÏØ^ž•W3×f9+Þý´\a·*­Ã¶%kþHIy÷Õê‚U¡A ØzƒžVÑZ¥øÎ”ed7GÂî`_O^ko÷â†áUw~Ç„$HzJ))^ö±åÅ+î¹Æ›Yf¾s=XØ<ÜàqŽ–î®Õ5]KÏ(Ãn*e¿â‡ü¼‚Ýù%ÝË. ""nr»=f¾H _D¤°¬o‰RJD‹ÔnÜup×¢ÿ2͈¡D‰Ö¦Ò±†'&zЮµˆ2|ѱ8¸˜ ©)¥ŒiWncþ¢;8S2Çd½‡7åDÞ`ÐŽëÜ@FÖΙ=]N^x6£†2¦Ö¦RÊÐMõ‹kæ ìqºâyC¨YLSË™SÙ[î¼í9¥öÕÿëÒüá|Ãf:Óp¶9]ñTÃf:z]Í EûºÛý­f<=ÐÓ}Uýy•ŒÅ#–QZó—$'¥”³âú¯Ýž7S±Í1òý.N‹h­´Ž+—§#%Î Š¸Þí£´ü©µÅe«ìN±Åc¶°Ë͈„TÐn‹¤»S”ÛéRŽËµ‹I4°õ8Ý1¿6•ét‹ëb£'çkm´×v´d8}rÓëZÛ´R©‘@{µ}߃÷? µŒÍsã‹”ü%KÓçnþ‡eÏܪ Û¨ÂG<´†M»ÝMiNW[ºÍô¤e´¥øz ¾öÀ@~}Kã’*¥D²s–•”W- ¸úk*ów/\Ѹɓõ‰ˆHªdŠ mΗÝ._z¶ÎS- 7ˆDÎÞœXyÑÒ»bJ©CZkKÏÆS°@BåÌÚPRvõgï³;}1‡7#bØïùÐ:¦´6•aô¸ErƒJÊÔzf—ˆ­ãÊálñùRÛü"}ÞëöÆ“¢<‰yšÑ‰„ÔàÉ#åO×V®>0cöŽ¥%MKýÞÖÁ@À¹ý‰Ôšì}²ëÌ®îD× Œ# áœÞ̈Û9ÿZ<´¥¥×g¹Ü^§»?EDñ˜3ìM9æòÓ|iÛóCƒÞž”Ô¾‚ì¼þ…J™F<¦ÅåI®7f\ÌXLÇz]'.²³}e­at¹2s[æö~3Ö“U½«þÛÇŸÛö0_c2H®¡`J(*{åªyKŽ}ÔéŽû ¥Þ=Pk¹`3¬ž·U¸úþJ—§c…ÕõŽT8$ƒv,ûUsÝ’*Ãæ‰+eh›­%eú¬í«ýéY¹+Ûëâ¯lbÏS„L0¡˜fؘ1çÄ-ží»ð Ë--w8ci™9É>ƒ2xòpÑ|݃ìîÌœêü¢²S‹2r:gyS"9ž*"2Чƒ'¶7ý*Üfñ9& H¸¬ü£e3æW¯:´ã#†/zêÈâ§—­Ý÷y»CÙ]ÛXÓZKÕ±¢—Kf´-MÏl(UrRD‰¼ÿ¤v_šá]ûá’Ÿ¸r]sÂmáhÊÆÜä;$ÌœÖâÔ´`?ëd‘ˆÈ`0½O©äÞÍêb"a3ÞÒà¨.­h]™-µÙ”6uÑðñŽæÚè«„L&Œ€€Órêð†íµÕo(eÓ""=¥¡AHI•ÔDW7–œ.ÃVP«Î{f/s|â“?º3üàŸ=õåñª °Ûð€„Ê™?-ãž¿[µ%5ÓáïîðW<¼þÕh¤`À›r&3¯èäÌÔôÞÜü’ö•¯™–èZ¥·SšOì ~÷±¿yî_] 0Zp7þùõf,ÊüLJºQ‘–Ÿ ¤4íÞúá_j3{PDdöÂÇnšµ°a³JþÎG,’оW‚ÿßãûÜ] 00¡|ñ×w=[±ÈØè7zî\ñ`[Ó‚³¾´³Yk®õK¾4í¿r “×á7£?øõŸ=ùµD׌k@À„pãŸ_wÛÂu¹W0ͨII5ýk®ßùgñØÓfS†a›º£ï2ŸÝôØ LYE¾•iYº"%M2ß¹fJNƒðñ¶’™Ž;>ö½ÛÿÆUàâ3’yÀ„ððןýÖSÿrbÉÑí±Ÿôu«æD×3ј¦î½ÞTû ‰'º`äX&œ?ú»~>g¹ñ™Dבh‘ˆDzÚUM_§yìÌ‘îÿ|íÁ7_ ·…]0Ì#Š+Ïe[w÷ší³–æ|ærôMG·…~òüc[¿Ò³£çÜ…Nl=ÀX €€ cé]Kf|áG·ÿgF®Ì™ÊÑc Oz«öE~ÜQ|öÝðLLÁÂÝÿô¯,Xëù{¯O¦ìƒï8}Ä|é'Ÿ|üæD׌¡€„så¹Rf.s}*‡žÕX{L=ÙX£v…fC¢ëÆ # `B¸åk7nZpmÆw Êda¢k±B((þÕ4Ы«;êC[*w×ÿçßhJt]Àx#€€ cÍ'¯ž¾øº¢ïxS²Œ\sa_·4j­¥ Ì˜èÚÆZ]¥ÞúïþÌÆpk˜Mu1¥@À„ã_ã—àé`ºÄ¤oõ]«WÌ^‘ñs–»nHt]cÉ4µ>¸%òÝÿúêÓßLt-€• `Â[pÛ¼²;¾<ÿ­Ìð•gnêhRU‰®e,L›ãšµä¦ò?Nt@"@@rÐbF#æäX/¡DÜ^cz¢Ë’B¸-?¶½ûûñ¨9)ÎͰ;%ÅUà²%ºÀj4"ƒæéþ^é2ãÉ¿ˆµt–\¿x‰®°$×~üúŽïÝûlù¡·¢ÿ‹éX¢ë e(™½ºøK‹3\‰®°$•p[¸ï±ï¼ø•öFu<ѵŒ†Ö¢íÃÆ‰®°瀀¤3oí¼…™¹ñùZ’ŒÛòj-rlGô—ýÏ>éˆp:¦H:†ÝÑ´å±îÛ ÊÓ7§øe…ÓåZ·WR]×PõuIsÍÁŽï>0q!HzùäGL“ʼn®c¨Zêäè©=}ÿbwÙR÷ÿ󻞽Ը;Ñu ‡ijQJIo‡jìi×û:£§^ùõžhÜ×ГèÚ€ñÄ"tÔîýá_:Ûvk¢ë.ÃPÒß#íý=úŒÓ£K”¡œÞ4ß cÒc$­[¿~ãG×ÞéÐåQI¹•mõaóÙÿ{ÿã·»ò\Žpk8šèz+0’V뙞½ý=ª)ÑuŒ„6µûÔ›""„L%´ö=º§¦·]%ºŽ‘èlQ§þö3?Mt€Õ imú«›nÈ-UW'ºŽ‘pyuVnYnz¢ë¬FIiñ‹Š–Ýñ‹T¿ÎMt-#‘š®ü7~vù÷]`5H:Îl§mã½³ŸÉÈÕ%‰®e¤ƒ:ð֣ǿ‘è:«@@Ò‰tDâñ¸M39wóŒÇĬÜ} ®òl}¢k¬Æ6¼ )eÎLõ­¿çÚ»Ëæû>•["K]nñ&º¦¡ˆ„tèô‘øS¿ùŸ/Üj ™‰®°$-W®ËXyûÒ[7}¶øq—{âŸÒÝ. ;Ÿk¿÷•½¾5ѵ‰BIÇ•ë²ÝúÅë?5c±ï ¹Åz‰Ý¡l‰®éJ"a‰l{ªçÓÏýÿ/ý6ѵ‰Ät2ò3ý‹Ö§|·pº,O†ð!"ÒÓ.U/=ðÆC‰®H4H:-‡›;ƒ}Æ™D×1i™2}ÙmKÖºò\~ª0žì‰.`$zãu"ƲD×1Tn¯xïørék«ï(®t庇ÛÂñD×$# )=÷ãÝŸ:[)[“i9k4,ƒÁ>©‘¤˜6ŒHJõ»ëúªöuýX'ÑŽ:í ²ÛU÷‡Û‘D×$ $­üéë C©D×q1­röÌ yõüÃKgËú%7ÌøÛ–$$­öº—Ã! &ºŽ i­åÄŽo?ð•§7ß ¿WuŠˆt4§šªû~“èú€D"€€¤õÜ?ý÷ÓÛžìþ²Ÿ8³°´éëR­ÁþèÉpk8úË/=ñÇ/ýªîÚêÃñNíøÞ«ÿçµý‰®H$vÁI-<­?· $ñ3±"a Ýú¿[Ú÷†=íï\ßþ«'Dä¶–LŒ€€¤öæã;^k¬Q;Ñwo§j:¹7ö¤ij‰ÇM½ÿÕà·þë«Ï|åüðའ©…›ÃñÞöøn+ú ôK϶g¾¶óÅÁoßÿÙ×ûþè×ÿã¹»›j] UjëÓÿû¥¶¢ ™1 $5ÿ¿|æ/o^%2þë@jÅ~â[/üà=ÿQdïûTþŒôOGº".\J¢­³Þçú?]¿á¦Oæ¾lw¨qýb5Ô¡ŸóÀ¼Ó[«kdz`²c Hj³Väýéx‡§[Üî]ø}W®‹ÏOÀ(ð$-W®Ë™](k¬èKJ²‹‹EÄmEÀdEIK›: ©žqïGkimãÇÞêý‹p[xÂ|$¡€¤¥ìÊ VŸwµ©ÚùÌS«"í‘ñî ˜ìI+»03Û¦‹Ç»ŸÐ€j%|cƒ’Vãþæ¶êÑŸŽ÷¦ž½ñ£ãÛ0u@@RÓ"Q¥Æ±}-ÒÝ2xxüz¦HZ®—Q8ÃyûxµßÛ©ÛO49} þ‰ñê˜jX„’–kÝ\ù}j¦c†7ERÆ´m­¥rßàoŸþÑ+_ 5†Ì±l˜Ê8 $½5Ÿ\=oÃÝ¥OgJÅX¶kšZÛûéCÿðÂ7•CõD€Ñ#€€IaÓ_Ý´îª þ_dJùX¶kšZû¥·¯KÕî|¦þOöþ÷þ]áæ0A!˜4>þý[¶ô:ß§ Ûø¬sFt¼ñ´l;{¼ÿÁxÄìxþ{/==ý“L®\Wöß>y{Ç«<ãÙÖ"U£¯þò¯Ÿßi„Ƴ/`²a,0™tÜý÷æ³r¸¯[ÚÆ«“HX*ÿJø†]°À¤n ›"òU‘«ï_µéŽ?)yÎî0Æü W­µ„cÝcÝ.00&¹7/(ÚxOéÏÇ+| ôH[su[ÍX· LŒ€€I§©êÌ€©çJO§4»=âs{%u¬Ún­ÓU?úü3ËÂmáþ±j˜J“NoÍ@ïK¿¨¹fËÃÍ7·ÖÉαj73õö§ï'|#ǘ”ö>º¯VDdÝç×þejfá3™¹Rvþëñ˜©{»U³Í®¾TÉ´ÙÅv¥6•RÊá±Ùh 0± /˜ô6þɵŸ¹áÞü»<Ê J £YŽî©ñë;ŸÚ{@Dô¦/^¯Ççȶ9$gþjל.q]ª­¶]ýÃÏ<}U¤=°ð€Iƒ0éÍZ‘û!­•YuP?V½¿ë¯üÛ«;å.yàÝ[~*"â*pißýÀÜÂÆZ·W{MS‹¡”(C‰È¹ó?¢éW†bû]`„“†ºNÙõë:váõk?·vz<OÛþ뇮Ԇ_ŠüE¥3W”ÞÚRÛµ?§$cfZ¶{Nþ4çmõ•Á'ß|tÿÿi>ÐļÀ@†À¿Æ/=;z]ô ,Ã6¼,C`Ë@X†À2–!€° €e ,C`Ë@X†À2–!€° €e ,C`Ë@X†À2–!€° €e ,C`Ë@X†À2–!€° €e ,C`Ë@X†À2–!€° €e ,C`Ë@X†À2–!€° €e ,C`Ë@X†À2–!€° €e ,C`Ë@X†À2–!€° €e ,C°Èìç|èïoûKg–ÓžèZ€DQZëD×0©ØÓìÊpi¢%;£¨(5ö;¹×²â?ŠÊõÊÆÓj[oGüdWääãc îð½IDATóì?'º^ÀJ€1tó×n¼'3ß³¼â*×':›å@^©^=Ð#ÍyªÌåV®óï=¶+öÛ_|á‰{U+ ÿŒ‡ßaû‹_}ðoòËd®ˆˆ?[nQâK—Ô‹ÝïMµWl˜›QýƉnk+‡€1àÊuÙf®XX´hcÉ—mt|cHoÒ"­ êxëÙè á7žÿîós™@Â10JŽ ‡ósÿrÇóN·‘ìõ õ}ZD2óÌÙ-M³×U¹2ƱD` €Œ‚Ãï°Ýý­ÛþuÚ\µÑîc8¯êkR÷V_ýò@ß¼fm¾Ç2 ƒ0ö»qÓ—n¸ãSß¿ý‹;ì5¬ã ̸Ög«¯Ú2Ð7¿y¼j&"À0ä.(Îëïˆ~ü;›¿7ó*ç‡RÒdØS§BƒjàèžÅ¿íîXzvÍI†0±¾X¼õÌà+¦9úSœ ›R³Ö|0%¥:{,j’ `ˆžúþï¿_u@Éiåv‡¡¯Þr—ÍÖé‹ö€dA¢hO4þâ»ÿ¨­A‹ör ‚s—^óÄ}Jõ;}¹³Ò*6~åÉÒ¼±h˜¨”ý("À”ò±ïÞþ¿æ_íþ²×'icÑ^G‹»z÷–Í¿ŒÅŠû»ëlÝuûê»N¿µ£³fGÓX´L$Œ€ —2ÄéÖÞ±j.;?T±á¶ß}Ó“R•íÉ(.þ`aùƯÞ=릿þHÖŒ«KÆbç-`¢ € ƒRJ|ö™v»ÓóÔ¼>í[¼òõˆ""Q¬`Ñù7üå]³nþæÇrç\? ‚É€)Xðék·Ü³î®´Ÿ;ÝâóƵȉC¥OUûÐk¾îo·÷Ôímí©ßÿVËÑçëÆ¼oÀ"Œ€ CwëÀ‘XL"ãÒ¸É/nYªuì}C®ÔœXÞüMYi… ŽK߀E ðó7o9øúà7CA ŒGûiþP‰ËÕt™ÅíL_Ar#€ ÓïþîÙŸÙù¼´Ö2VÓÚ ›¡RÓ[2Ǥ1`"€Œ@ýÉ®—ã¦)½Ýަ¯­üñ±}%OE»J‰xRúÒ/}# Hn€Pbh­EÇ"F¨½åêJÓLЦÓ}>ÈÌn®ƒ iL·˜*v?µ}Û²›>¸ÅîvûD”4Ô®8Ò×ýƒXÌŸ·d÷朂àÜ‘l›kšZ릾ä laŠ$ÇÀDº"º³9ºc0èé‰Å²ƒ]+Îôõ,©ßñÚ'þãÈžòGõFC´Ö:8×u¹×GQ6p€ŠÅL_ÕÑ5o^x])o¬öÔ­Ûšëý{‡Ûf ÏÙÌé› ‰‡0WßÍâôߊH¤¬çb¯+e×½Ýu=¶–¡´gšZZ|Gö¼yÓZûÃc[-0q°`˜œYNïŸÿòŽGÏÎyßèÇùÎV¯Ú×Óéî·ôÔæÔôxŽa¼wMH¯½Ýn¥˜¦­9QþBMåM»”á0/ß;S°Ü ÃtÃgoþxª_Š·.;y¹û"á‚þ¶æœƒ­Ï]w¨ xǜًŽmögE‹EDýñpmå´7jWˆÅS"¢Ó"j(sSX‚$Ç,€!RJIÖŒ5%Óg}2vuŠN\ù=vm.³µiÃñª£³oƵDÂf,4z»òc±‚ÑiWl˜,Oz{úµ_¼Þ?mùœ¼’—¹½ñ´Ü¢×ö÷̬ –u¥¢i‹ ›’HÀÞWydÑ£]KÎw§^@ì —¡”’‚E·Ïyã××ûK—;S|Õéno,Ýf3Ôª G>W[ÙñòÑ}eÏ¥­XL›gÒöî}óã¿U†'6‚cB€¤G¸„ôÂ…©¿rSö¬ëJ)Y1Ñé™ùƒ[/Mg(¥$;¯s¾×W³=80£óJíÕœXúFoy»2<±‘WÅ’k@. ”R%+>¾|úú/}ªðª¾>DD¤§«¸eË‹›~ÔÙæ©Iˈ•Y0”vûz5iI‰ŽWÝ@2`à<Ù3×eκù››²+ÖåÙÝiï Á@E‡‘#»#-_÷Ú{¼±Ì`mVÛ2ÆÁ3²Y]/lS’RÊpû‹².¼^¼ìnßPÛèížÙ^{rÇ_Z cկ׾bƶ„Nž÷x}íûǶÚóh“$5˜ªŒ¢%ù@ö¬ ™Jþ°•ápÇEä’‹Ä#NG £f0Ü×Òì:Ûxä±7 ´÷oúÓî^ukê,?voý±¦Ê–šìcï.{ÚÔ¹_Þ¹fj­E‹˜çæUéó¯›òÎÅ?\Ó"ÚÔ¡Þæ3cÿGX‡¦$­uÌ—SþˆÛ_xoÖŒk\¾îñžÊ öˆò½g*V÷™]]•¿ÿÇßh­ßR ®Ê&§t͇͘jÜûÌ?Ζ2«¯£ëDçɾàx? Lë˜ÀT–U~Mnéªû?’V¸àݵ±fu¯Ïá8%"•ç¿äÊsٖߺl©h oûÕöÃoŸ5"á¶0g† ipÀe”®¼oUñŠ{ÖÌ^üúZe(©>ñ­Ú 7èo{|â»ð~mj9}I-›-7TV¯ž>p¶ö†/oØüæ#;^ ·…#ãöŒÀe¼½=ïËvwzÚ.ýé·ÙÜ1‘ƳÓåu.sº”ëÂ÷xStZ~Q¨Â›RŸâÏz8ëØþ»Ÿíí^Vg á´Á «Ok¥D¼©’îM•…"J<^ñˆ¼wc¬²9Æú/ÿdUÖb´ÖVÌ‘ ¦l»)\Ö:~æ­Ÿ¾0ØÙ`šfÔPªÝÛÖ´öÄÖoûî`@õ_ì=îåÎ/‰MOó÷Ûl}®Œ¬éûK¯Ô×ÉC7o‰„$4”ºNew8m†a(=çê’¯÷¹€D € At°'&ÚÔJâ†Ã9àQ Ìê8~pÞã±Øû§Uƹъ3•åo™fF(1uWû¬¦+õ£lJú­Ã©Íî0ÔÌ¥i7ºr]Ž+ß $`”á‰ySR²r÷•‰ˆ4ž¹ñ@cmö[—ºÖ¢S7ϘýÜ5ñxQ·Íî»âŽX†J‰ÕU•nëlsžN]9zúG¿¹é»þ5þá¼ °`˜”ŠÙfÎßña­Ã6‘³Õ vÇ¢ßnן)Y°¼úîÙ ß¼^DÄfëô¸ÝÕYZÇ.yÒy]ͦ]û·møM<6ôÝu CIŠß>+XäuLh€aêî\RwòКßiS‹ˆ–ž®«êjs/9 ""’™Ó=×ã­Í\°ü™­¿íé¿)™þÆâKÝ« »ŽÅRC¦©†œ@‚z`Ï µ_tE8c`zº–u{:RŽÊl‘¶æ’“¦yéÏþ)©ñìÒo®ëíJm®­,|9¿äÌR¥­cÊ4ÃïÙ#+)îíëöÔ©–NÕ´í©îï{lß©Q<` ÀE"Å}N·i7lµþæúµ'ªŽ?©3žMSëòy­l¸Óí d¹=¡ìй¿_'"R:ãõ%×ÝöÓÿa]î?¼CIowJC_­=‘h_tËÛmŸßG,¢£µ‡Ã¿úýÿ~å¥ñzN`,q:À(¥ÜKïûÅç}y³ß÷á)=óÍY½]מÒfÔX½ñ—œ[œ«.³#Ò‘—Ÿúàÿ²;”„Ce=©é'òs OÍ®>~ÛV¥ìﶯµ© £×évwûB![ôºÍO~CĈÔU½éö„Ss‹Ú–Ÿ9.[û­§ï·…‡¾`H À\.€œOë°mÞ’'n9¿õÆKÝÓÙê>½í•/üë° Ð›ËÓê æö†ËÑíu;ÜW·ó?·«- ˜‚0†”rÅ+lz©«ÍuÉõ±˜1¤ƒßÛ°3•ôž ""JtLK¤¿cXg†‰FcfÜÞöÊ}?>S•µ%“÷Mr:c©ZÇG½]n$ÐetÖlkm;€• ã@ëÔÈáÝ÷ýnçkWÿ(0`ëºðu%£?®#ÔÓÐ õŒº!ÀB€1f·×§k5D”t¶¯¬9´cõƒý½ª{ ÏÖÕ×m´…=¢ŒQ/Ä tœ®ÓZ³øI…EèC0ÔEè—’‘µkzwgY›’”Hªÿx±?³/£·;§-#»¾¬¡vÍX,;8Ü6û[NÁÎÚÆ¶SÕû;¡µ¤6ÀJ€!mù-ó®zèöŠùm7˜¦¥”úŒ®À€»¹¾fæö¦ºëŽœwVξiìžÁ`I¯ºÄ¨‰ öÓfOÝÞÊÚ·~ºUk=üEî€Eì‰.`*q8êügÔÛÝá:›–.1 1|éf¦/=˜™žy¸,3§uZxÐÓôö‡Cžà¼¥î2 ±\ím͇:[‹Ïº<>‡3ì³××ްϰ»ÌÔ‚yâË›='%§|zÎÌõO´WmiOô³C°P4ZÖsh÷ý›ñ.÷úM¿ùjJZ,ÇîP6ÃPâöhߌ9-µÈ;úÒ‚™9§gôÖvTŸ(}Í—õÕV]µW)›6ca#´™±ˆ!¢B¡¾–H¢ž¸¦` ÁØMÁúÓŒ"ƒö¼Âãe¥å•«•aÚBG¿Ã)öT_YZF¤È0Þ{¦ºÖZZÒ÷teÖx}¬îö´¦×Q÷ÁŽÚS¡þÖp°³¶)X˜ÈHÃpš"ÎH{Ëšªö–5U翦u\eçí^Z^¹Ò›Ìs¹£i¢D¹=±ÌŒœþ™™¹ý³œ.q;]Çö>²UkMÔsÃA˜€”²éζU5m«jDD´5´hq8:=J)e³‡Ógï[¡Í¾ô’U÷®‘­ .@P†ÃT"Òtø`st°§YDäô[²S‹ÃÐñ¶ßEÒ €$‘h¨·þôÿöZ¢ëFŠ“ÐX†À2–!€° €e ,C`Ë@X†D”(•è€Ñ €° €e ,C`Ë@X†À2–!€° €e ÉD©DWŒ €e ,C`Ë@X†À2–!€° €e ÉDq:’€e ,C`Ë@X†À2–!€° €e ,C`Ë@X†À2–!€$%J%º`4 ,C`Ë@X†À2–!€° €e ,C`@2QJ%º`4 ,C`Ë@X†À2–!€° €e ,C`@RQ*Ñ£A`Ë@X†À2–!€° €e ,C`Ë@X†À2–!€° €e ID)¥]0–!€° €e ,C`Ë@X†À2–!€$NBG’#€° €e ,C`Ë@X†À2–!€° €e IE©DWŒ€e ,C`Ë@X†À2–!€° €e ,C`Ë@X†À2–!€$¥”Jt Àh@X†À2–!€°Ìÿ$ð[¨Ï@-üIEND®B`‚calamares-3.2.20/src/modules/locale/images/orig/timezone_8.0.png000066400000000000000000000405251362604102500243630ustar00rootroot00000000000000‰PNG  IHDR ™q*UüsBIT|dˆ pHYs¢¢EÝ1¢tEXtSoftwarewww.inkscape.org›î< IDATxœìÝwx\Õÿñï¹S5j£^¬fY–Ü+ànŒ1¦÷)Hý%!m“lʦnvSv7Ù$l @ …Š)ƒÁÆ\e[–mÉVר—ÑÔ{~ƒÁK²4£‘Þ¯çK·~Ljç¹ó½Gi­±aòå?¸%sòÊôhÖÐVµ9´÷É{þ¨µ6£Yb“íŒC1C1C1C1€X¢”Šv ÀÙ €ˆ€ˆ!€ˆ€ˆ!€ÄšÐÛ "† b 1„ùWˆuCˆ!Ú ¢]p6 1Ä×ÕÐ퀳Aˆ!ÝMªƒÞv{´ë‹CZ­oð¶×ø£]0X€¢µú»›Z¢]0X€ãë¬oŒv À`@bLOsåÑ`_§-ÚuƒAˆ1-×Ö÷uÔ£]0€£µöû;Û¢pcéªÛm¶ݲYkmFüþ¬Ñ.çëjl‘ÔHÝ/èm·z*_;Ö¼oõKu»»#u_Œ>€Ôã©<òuϰ:CÃy­MÕY³#ØRùÚ«õ;Ÿ,×Zçí0@bçÀšÚ¼¹1³'Û=üÝÍ––Ê××nûÛ_WSß°Ýc = 1HkÝç묖>m†T[Õfõ†?­:ôêož%|`(1£ü]M"âÊkú:ê,žÊ×öW­ûßµZëÀP^!€Ä¬ž–C5á@ï4‹=þ¬û@ÌpÀh¯ÚÜã9øÚš¦}/ùÝP”œ‚£š÷­>–7÷#:!³ô¬®ãm­6Z*_Û]½áÿÖk­‡µ©  Fi­½}íµíƒ=?ì³x*ÖtÝxߣUoÜ»–ðH` †ù»›E$i çõ4T-•¯m9¶ùÁ7µÖáa( 8-@ ëm9\ÛÓ\9]–þ.С{š4z*^}©õÈÆ‘†³<àŠÅdb—RÊ×OëÕ<"J "†&tC1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C&­(›|Ë\ñ¿Ñ®nJkíƤ˾~ÑYã/ð÷»³Šâ–&¦†§=ùëSö®*¯‰vmÀp±F»€±H)%Ÿ¹ï†[Jg«kµ¶ˆˆÈ¶5Þ¿û{ú\înéØÔå áAˆ{¦Ý‘žc- ‹RJDDÎY‘ð‘™Kç\¿}Mß7Dä7Ñ­ô€DÁ_¸èó{Ï”¶f¯œø§ÝÓ'=>[éœä»¸£]"0,ˆ‚NOo…+!]Ûìoœ¼¯54N7…’E¤3 ¥Ê€(X÷× /«0_=Ý¾ÖÆðI §ŽtM@$0ç\~ÞyeƧÛ7~ŠeiZvþ+ŽLG¾¿ÙïtmÀpb ¦\<-uÞ•9ÿc³)Ëéök­åð®à ´øŽS—}tÒ߯«¹rJ÷Ç»‚~³5rU‘Cˆ«ÿõ’».¾=ã„éÆÊS[ÏßeJÆ•:oÍ™=.%rÕ‘Aˆ€ù]T2ciÒ] ’ÔŸãóŠÕÜ~þVG–Ã5ܵ‘Dˆ€‚éiq§KV×"ÒÚ`®ó7тх·`D@]Eóó½‹ò¿årI¼2>dþÕÛºÚ¥ñ¥û¶}U>{ækÛSíêÆï\öoi¹ös=µþ×êw¼þú^ß4eCNi­£]À˜0õÒ©S|qÞe‰_û°‘¯~ù—/?õµ3]Óža·ßþ‹«›0͸Üb‹h‘€_û¶­ñ~wÕÿ®ù¿Áªú¡À,€ÉžY˜’7ñø« HÀSÓûÚ™®WrÁÔ¬;þãªÇ'ÎPWY¬rü•¾JÄîTÎé‹\ßu8¬ÉCR80„ R0%åö’Ö+Õ†?êªôæÍ·®zÿösnš3Þžn·ˆˆÌÿØ’©7kêö‰3+O7¥ËæPö·Ÿ×Íÿ~å?ñÛkãÈr8‡êsgƒ)XC̽À-¬\ð…´q®sþòÝUŸ;±  #ÛaûÜï®Þ”W,s?ìüú*½w̓/Ù¿~ãõß¾ì{V›¸œ.[Jv‘º¢|S×Zjz^šµ<÷ç…“dÉ™j9þ¬§dË‹½ÿúè·Ÿûñ}D`Ð CÌ‘é°ýák»ÓͼšJõFåöΟo\ÿæs_sþ7f,v|Ïé’ø3]£¥Q}ÒU gÆ»C&žºpCj–ʱX6‘åÀ¶ðßÿïÎ'nÄdžoÁBöT»uåg–ÝàtI’RJ JeqvAÒãy¥>—Yh=ÏéÒg ""éÙ2áøWï^•1Î’3˜ºÜ™–)ŽL‡ÅßLS:¢‹€!2ï¶…¥ ¯÷·œ™e±©¨÷Ú¶4ÈᆪàÓi9¶eî sÚ‹÷×-ßðçM¢]Æ6F@À‘ã0ü ~SDäÚ^q[fã–¾µêFWR’ó3¿º`UfžLŒv"Ç{?jž{øËOßãÈtØE$AÙTG´ëè§‹¿ºbÅì©÷ŠV¡¾]—š­¦Å'êô=Bÿc±Jü”yÖ;δ¾G¤ôtJûOn|ª(à tE»àdQˆöT»š#WO,(•e I:])‘IçZïLÉ2Î)áCDÄ• Ý—~ùçO¼¶) ý0s匙Y…æ‚Óí³;Ä™;Þ˜éšÞ/6ß™ÚbX”šµ,ñ›Ê¢Xÿ# = ý°kÍîs..XS:˸8ÚµœŽÖ"o­ñýÜj·ê”lû\ow¸¾½±ï­¸â8o´kNFè‡@KÀwÃO®|Õœa¹Ø8ÍÊãѦD$.ÙžñçÏ>yç{v|?:õ„)XgàÈvØnùÅUß¾Èõõ‘>DDD‰¤e[ϱ§ÚGhÀq€3¸ò }fÎ…Ž%$ëôHÜ/àWþÎ6ký@ÏKNÓ%b•¤á¨ *€3ˆO±—EjäÃ4µ¼µaÎýÍõÙ;z®Õ®Å³ Ê9žñ0bñà ð!Ü ÜâN·ÎˆÔý‚åkó”Ô¸{2z®ÝaXoÿñ¬ÍŸüɧMJŠŽú€³EøÞC^[|’Fê~Õó_ Ò¼‰É=ùƒ9ßj3ÔęƵ‹®_xÃP× Þ‚pîn™·`îÍwþêê'§é¼ãï™^½ÝFÇ¡ýK7¦fìÉKH fôžÞnÝÝÙj ø´wûêò§å'ÃT(p §Ñw¸Ï>ù+)ÿ’_¢fF {ˆÖZï›ð|8”áµÙ:ß³ªºÑ'}¡OÚ~ü-µ‡ÕÛ^¨ýäÆ6ùï[†¿f`0 §áoö ÎK_tÝ×.x)·X/´X†oæºÖ"5‰»\±%1ioNQé¾¥êä¢NŒ…¨“¾>Þ°ÞÕªêª÷…üÇOžûQÀð [‘ÀQZë30F¥MJŠŸyá쥹%)L:×öù¸xåÒh‘cGR6íØtë?l¶æø©sŸ»± ¸w–êÇ[·*w†Ÿþó7WÝêoözµs{šÝ5ÿºsg%g&N´9,Ééã\sºZü‡þùËÕ¿ñ7û{{]àƒ@úiü⢼e·ÌúQîDÛE6›áHtŸÝº ᘕåù«*ö\±V)G¸xÒ3KÆ—½ >1ܯëv´ªúî=´xÛ£Û«r_¥”ÜðãKïÌŸœø©D·YŸ¨Ó ‹õöðŠÖ"í©©9|TY”Ú·¡æÞ­ÛZ1¸O ¼`Ü ÜÒw¸ÏvË÷/ùë´ùöú3RñAêŽ&½µmý'í·•¾zÎÔ9•7ZmbëïùZ‹¼µÖ÷Ó¿ÞóÌwrß[~qõf-³ËjSýšŽïíÑÝo>ßu˪Ÿ­~n ÷N‡€èØÔ!ܽ´¬hªs™2÷‹Ü@@ù«ö{iÿî¥J§>s~áÄcºÂÉïéûøÁ€·7«Cu•þGŸø÷Õ?•{vÿ ?ÜîiPå92³?Ç»Tâ”…É¿˜zÙ”-åÏïó ìnÀ{@(2í‹v æ\ÓÔzÿ[e*¥-]ý÷o¹ÃîãÁãÃÃG8$æÑæó½æ¡Š-õí¯<°£cS‡<üÕ×ðø¿®úÕÇ~sm^N­_DD$+O¦œ{YÙ¿‰Èg~Gà]€pd9l—ÞuÁ»C»ú»NGÐ/o¯µ¥§;¾®þèø·k'U/¹ø‰ÏÇ'™î3]CkO*?ºßÿà“?þ?m³ž?¿øŽÅÓæ_•{á@ÏKͱϵ§Û-–@ølkÀØEÀ\ûƒK¾¿ðŠÄ–þ÷~´485Öåo7Œ°5-«i’;Õ;Þ'§¼MË畞žNiŽO4sškͽf…2tÂCßyöΡzÅ®=Ãÿµ¿\³?-K¼Òºij½iUßÝO~Õ½CQ Æ&F@ú)sZVú—þ°ô ""é9þ’ôœC%g:îÈžà3ïù%e&gM›:DDäOŸ\½§sów.ûaj¦ÎÌÊTF^ÜR!€`Ð `Lʘš™9ÿêÙWýá®–Úî×¶ýãÍ36Ww6wøÃaŽz¼=ºç­5Õÿéoö›"Ò4÷7''ó®ß,¾«¿Íî§“Wª®\ò©E3Öß·a÷–†1„Æ”ew/›_0%å£_üýùŸŒsI‚ˆHGkjÍ7Ÿ½¹'à7½›Ÿ>|˦¿¼UyºsýÍþî~|ÙÏæ]ÿsã,^¿{:6»¸Šg¦Á‘ã¸Óßà7û{žRJú;¥þŠ/.üS|¢Jt‘"âJ¤ ³3ï‘/žÍu0vÑ. –|zñœÏÿå¦gWÜ–ùòÌ%¶/Ä'ªâİ(IÍ”üÌ<=9o‚š;uqájÑ|{†ÝnO·§:2Î×°§Úí—-ãlFN'4ÍÏv~õ¹?¬ïwøH›”Ë/®úÞן¹±ü+ݼqùç–Îw/pKάìlG¦Ãþþãm©¶ø@Ÿ9$+›gX/>ùïšÐÀ¨æÈrØVܾäÿ-¼2åGN—ê×Cs0¨CÝíª>.ÞL÷ûŒî¾^ij<X[b¿2=W—Y,C›@´Özÿ–ðÃ÷ÝýäÇûsüìëæä_tGÉšÌ\)=Q‰·Gwwµ©c)º¤£UÙ»¾ã;¯<øúó:¬õG¾wù/‹§Ûnu%ˆÛb=û_@wwJ볿=¼pûãÛžíµ0ö@À¨tÝ¿]uWfs©Ó%E9Ez¾Õ¦FôÌÞniÛþrÏwŽtmïhìh®|µühòüdéØÔ!%˦fO^XpaJ¶s†;Ó6+Ñ-S³dü‡]/Öº»Í¨ø¥3cœž2ă6ÒÓ%í]­êp8¬ÕÁ­ÿåëõzõw¯mÚ»`4"€€Qãú]~wrZÜW²Q’S$Kœo÷xÄ mj1µ–P@ù:ÛŒcfHû>iNË‘9®D2ÔS¿†Šijñö¨Ž5©»pýŸ6¼íz0²@À¨`O·[¾|ÿ5»²òej´k«z»¥£º<ðòýŸ}ê¦hׂ‘‹bÚ¸¹ùÉ—Ý=ï¿S²,çdŒ3'Æ&#úz¤ç…ûkoøóÆ]ïßgO·Ç¯üô×Ve}æÇ/>ú}¼†Ä´¥7Ïù|Ù\ããJiÌâzZ›×V×Òwò¶K¾¶reñŒ”OíákÎMÉÐ…GÕ÷÷ƒ'ZÄØB1ͰYœŒyŒv‡a¹ð“3þt÷7Õ{»Â5N—‘µø÷µqñúí~%«Ž©Þ -ˆö {rÀèôOåNýØnŒ&õ1Œ&ÏϽ;9ÍHMN“+E Ñúøš‚Ç{? LSK]e×SÑ®Ñ5¢äI™˜[b¹êämJ)¦]Å_Ÿê]ÿèöÕÑ®ÑE#Þ‚ë.OJ1³£]Ok-‡wè8ÔÒíZ]0â¥å:/e°#¶yêåð‹÷nþ^´ë@ôÑFG–#iù'–®È—pnF¾}E_O¸Éæ´6|âsĉ3Úõ¡B!>²Ç|&)ÍRœœj–x³çg»Ú¢]¢·`€åÖ_^þØÔù®+œ.E؈Q- r¤|C÷w×½ºéo""önGzgsG§¿ÙŒvmˆ>Qì™öä}üêW¢JŒv-œÞnÝõãëŸÎx]Ñ®#= `dÑ•7Úe`ðœq:iî¥sÊ¢]F&Qž@_cµùj´ëÀài-ºv]c´ëÀÈD#NíÁîçL“iâ±Ê0”šxÎøÉÑ®#Œ(Žl‡-#ßyµ!ÄpXë–©2M-mͺf皣]F&Q®þÒE_™6ß~ƒ2Xù#–´7«êµT]¹ãµž'ù‰g¦µUv÷D»&ŒL¬Fow°Mq„ õñ;¨7ìZÛô¥Íl-O›œôñ€'ÐíÚ0rñ^uJ)Ytû¹fg}¢hªõ#I)’íšp*­Eü}Úït)G8¬eã3]ÿ«Š—þoí“þf¿/Úõ!6@@T-ûÌ’IÓ–æüz\‰,·;ÄízðÁªe×êû÷ܸô¦©ÿ›”fWíñ>ñ÷o®úF´ëBl!€€ˆ»èËË/S"fBjܤ‰³ã?“™'¼1) Ž?Tgh¹éé’Îõ7_¶æ^Û("âÈt:¤u -ÀÃ$„†#Ëa‡¿Éï]v÷²E+?‘ñŠÍ&e(¡Õ<:Â! Wì.x¦§+­ÙÖX8qjý%Ê8õ?F0¨C5õ+;ÖÔ}eã›öG¡TŒ20lì©vË_^þƒÒ9É7i¥ O¹&»ÀraZŽžíÚÆ2ÓÔrpOÁ3÷^¿FD$Îu0cÙåÏ}ÛfW–“kª‘½û6µçåûÖ­ò7ûÍèT‹Ñ††Ååß¼äÒéK’þ+-G—¼RwDЦ–æ†ø}USÖ6Õ/<¨”¡]ñGRg/xéciY¾ "ÇÃI8$á–uðþ¯¿p¯ÓÅPã5¼`ȹ¸åò–\–1N&Š=FІ÷¶­ë?ñ¥ ­”ˆÖ~ËäY¯\ŸšÙ7!TÁæúäGÌXçiœX_»õoÛ 0伇¼qEÓœ×E»Ž1O‹xã:œd_Ÿ½íоÙk•2Þ™þ¢”#ÜX›»Ëá¬JÙ½uùC=]SED¬V%¶pô ÇhFC.à ô}á¯7íMNÓ¹æQÓÝiñl|åcm5•a?¥‡#9e{ÓÕ•¶eÝÍ¿ 3¼Ñ¨cíÀèTµ«ãg/=Ø|é¾7ƒÿˆv-c•ÑV«Ïvºð!"ÒÙ>çØáý·¼@ø@$Ñ„†Õÿ²ò£çßü°qšW¼bøu¶ÛÚ<É¡€Ü·óÆç”²õëmVG7Ý¿£zßÞîú0ö0†ÕKzmuÐ/¾h×1V%§sÆ—¶,Ë+ö,4Œ›ˆHRryöü îýìä™^çªJÝi×Ú$!""èÃÆ‘é°\÷õ‹¿êëSŽ8qF»ž±,2úââ“ã\’æ,|óޏxIÈÌõN.(yz™6E{÷íØtÇC¼µ ÆÖÚðv+j+mOªRËMI)*-Ú5U IáôåW¼ø]Q"'¦Ãi-âóÚÚÛ<î ¿Ïæ%|  `Ø< ˆ<("fÏÈùî¿X²5-KŠ£]×XeXÞ Þ^ñîÜ4ûOãüJ¥¼rCˆˆÆÝ m~¯tE»ˆ=äÚy¨|Â3-Mç | Ò³w½çî¶Æ”ç•Z¯Mt›9Ç×aÚO$õt-G+Ï{¹£mVM´kÁØD³ú×kß‘7¹Î¯Î¼`ú´Òy çÌX˜þ‡“§aøx{U׆5Wÿ·ßWØíZ0v@@Äùê}~Ùî^àÞ3ùÜåÿæ°X3£]ÓXphoÑ‹„D= j:6u<õ=wx{‚[£]ËXP6³ê겯´Ù£] Æ.ˆª__ÿÒsmÍÞµŽv%£ŸÃ)޲éµW,XþÄ´ä9QÁˆº8—ízÑ#'9%˜“‘³×!#* Ꚏõ=æíÑÝÑ®c¬P†’‚ óDvBä@@Ô=ñÀöǾÀÎh×1–dk=G)+Úu`ì!€€¨Zþ¹ó/¸þËžèëQf´k ÂaS‹ˆX¬Ê2yæ+Ë•ôØ¢]ƈªî¶®Cã&ÚdÚÏv-cA[³ýXw§jo÷XëÆ—5\4ãÜ'®×Òg‰v]; ª¶þ}GMsÞHzddä„ ã\fr|’™|ø@ê͹’’ªÒ£]ƈº¦jïÓUåáµôDG†Õ¦ gœN˜8µ}IN~Ý´îζhׄ±ƒ¢îŸ?xîÁülÍåo½îÿÎUízÆ’8—/51ùHF´ëÀØav""žòÎ>ùÆ%_[ùlÙ9îæNÐK½]Ê#J[“RS„†ÂÛ#L¡°6{»­žCûƯ©9²r«aØy"Fi–#Œ5ɪ®ûÖÅ÷ø¼fåÞuå¯úâ¼çò&ȹŠF‘!‰ÙÕam°ÙLG«Ç}àÀÎYëÜ.­Ó½'Ž9ºéþÕþôF4ëÄèÄqB]!-"ÿyâ{{º}ñ-ß¿âù“l×§¤ë¼HÕqüµJF[î±XÅHI1¬msê«;v{šf4F».Œ ô€€/Ð<øÅ'¿¼æ/5Ë«÷›¯wxÔ±á¸O($áêýæš–9âíÑÞ]ëü¿j¨ WŽææøÖ&çae£øb¤aÄŒÍm¬‘eWüËåWξ0þI):Ç0Î~xÂ4µx{TûÁ·ü|îÑ×ÿ¥ïpŸ%)Ý™ÒÙØ×:eÙ¤Õ7}½l•éFÝ‚}Á€jÓæonX\íZ0v0bΪŸ=÷ìªßWÎ}ó…îßu¶IS($¡;^›Z:Û¤9’Sš­Í°Öû·„îÿéO<ò•§ÿ¥cS‡ø›ýaϾΖ@[@gägøê©Õ­MºæÐ®ðK~ŸxOwX ©`wgZu´ëÀØB:ˆYŽL‡¡µ¶_÷õ•¿È,ˆ› è¾ÜbµÜ «`o—jèl UOWWî~#ø«Ç±úÛ×~yå·’3S•ÒF~©º\Ddß›ß>ö‹¿éoðè› ™gÜ„8ß ·¯¸ò¹Æí‘ù„ç«]µ–¿uÞ_›Î;¤”å”BšÐ1\˜‚b–¿ÙoŠˆOD¾tb›#Ó‘"JB"â½èöeÑÚe{ôÇ/|#ЋÈEDì©vµø# –íy}ygC‡'Ð8ãodýÍ~ŸˆÈ…_Xþk{\jÁ„iÆ…Ãó©"£Í“¶×Ó¸ r´5Øcä#€€QÅßìo?ñõø…㟮¯L~áíðñŽ·ÇÚÁ\ÿ•ß¾ºç²¯¯üãø)ÉEÿI4tµ[ší[øžÏïïñXÝžw‚˜ô…O=8{0jUm¬êŽë6TyÊM3Ib-€h­åȤÍ­ùû½½Åm'ïën(oÛ÷Ìwþ~Ò¦Èîc`€ÆO·ÄcáCDÞ^ ݪ­¾pç©S¯”ÖZ"_ÆÞ‚0în‰K2ÎQ1@:Û¥óÈykO×tD  ŸYËå7,ùí´…ÎE»–ÁðõÅ5Á÷<ÿiн$…˜zyä[ IDATFè§k¾zÉ7fžïüœÝ.Žh×2P­ÖÆý;—< Íh:±­°ä…yK/þã×R3¶E±4Œ1ô€ôÓ¸ÛÍKl½¸¶¯Wu··Æ.ß¾øÙ>ï$ωíî”ùSfUÜhµ‹ÝjõÅ\ Bì"€ôSg‹¹'!ÅÈ5C:˜”¢²-Ö‘=›D›Z7Õ%îÛ½õSœ¼]ImÖÂ7>nsˆÝÛ£ºZ›')V™cFôÿ4#I}eד¿½ë…âõ7\k=¢¹}}ÚwpOÎêoÞö·÷ï›8í¥¥IîP–ˆH›Ç]§÷E¾BŒUŒ€ôÓ ÿ¹æŸòŸ"öTûú…W_]›ž#…2€ Y¡ µ6ÊáÌtà ãŒpXk_obsåÞÔUÉ©-ïŸýRG[YƒÝ´„BÞ3_U1ãô¬×¦ïÛ1õ±€?·KDÄ•Z¨]©…ÎþÜ_UmŠ©F|Œ,€A˜vþ¤¬¹S‰E§åè‘ãÓ¢líýíË«6ü´cS‡ˆÈSò9YwºkøºÃuá¶XÅ""k±X>øÙÞ4µhSëúcÉÛí¿iµax\ÚLX'*!h"¡Pÿjïh›U³GÝS 53ä3CAðþ)€íÊo_zëy—Åß×Ö¨v%¸UAo§ÔýêúGO;-ëýì©vuÍ=5g¢ój›ÝšÚP[°ÇÖž—–ÙU&b„“SCÙ¦©%KcÒ¾Úê [z»ÜÝ]ÓꕲFí!®­j“Ï÷Ü­û#¶1pÖ¯Ýô×—þÔ÷‚ˆô\ÿK¿mµ›%ý=7ÐÐ"òKùeá‚Û—-ºzVMUH™a¿eöÂ'¯5Í9T>åÙúÚÙ•JR|òvÇ{l­D¼à,¼=Õªýíox¶×Sʪ-VkÈçKéh;V_³l¯R¦¬`Ô`€èÀ®óžs8Í8­ƒ<¯aTá`DÑ’“ÿòì’);—)e Í_öðíJµ¸¢]0T˜‚0Rh¿eÚ9O\Y4±y™a9þ‹âÆÚ„="®@´K† `„HJ9˜]TÚ´Ü0Žw™‡C¦ÞµyÙZ»úù‚]`äc ÀÑÕ‘Óê÷‰_D$2¥ú`ö+>ÿ¸Îḗ;egþÄ)OŸïpÔ$kí·Ðk‚Ha`ÄH÷­{áúgç•—uw¤{Z=sª‡ë X“fm½,3·wê¸âê ‚>£o×›<ÔÓ=­a80‚ø}Gl¾õ>̰ϒ˜ì-IJÖ©>{Ø×Ù>ÞcáÉÀPÀ˜£E”¼oìíÌ¿eR4+ÂØA¼mG÷7ìzª¾¯ýذCX¬½v«5ì<ñ½a(IÍl?Ü÷D˜‚0"x*^m‘'RÇÏÏN+^8ß]0·È•6><Ô÷±Ùìöæ$‹EYNl ‡µTUÌÜ2Ô÷N‡0‚´Umn‘§’óf¦gL\¶À]0wB|FÉ‘¼¢­3³óêf‹-"ª»ÓÚ|pOÙs=ÝeÍÃÕsœŒ0uÖîj‘g“r§¦f”._àΟ3!!³TŸmgzÝÑ©û&Ï®¼Ù0ŽÏÄomJ-¯;zÑÂ"…0‚uÕ—·‰Ès‰Y¥Ée+¤/,‰O/t\ðû :z»ì É©¡‘>¯£Ë•°?ÓÛ3¹yÈŠ>Mè1 »é`ç‘uÿûbOóÁº³¹ŽRV]UQøZueÂVo¯êJÏj™ä÷¹{‡ªNàL 1D Áê G_¾¹»#¥Ög&%$÷å)Ýk/úÄŠâ²g›á>‹ˆ+£c¸0 `Œ±XŽ&µ4NÞßÙV¿ ­9moná®®„Æ2gœv$¹*«;ZøVjfÃÄý;o}Ü0f´ëÅèB²ˆ%'- 8XápVo~ñæe=]ñµG*ÎÛÐçµöy ¶o{ã¢ã“Ìä¸xÓ^¹wåó„ F@Æ¥\¡Æº©[®Øøeoï®úŠÝ×­1M¿åð¾ìÍ9Çfú}®ž¦ºqåÑ®£# ±å,G@´h3h´6Í®nó8ø¼®îä”7&ƹ*3D…•Åj W–OYôáÙ úÈ´¹_gš~ž1døaˆ)gׄn†;%O^  »¹ñ•[_]¹rK(` öö´ÊêëïWpxV›§¤Öjó'•z–ålœ:TÕ€1Ä0’Çß𪈈èd¿R‘Ó”·`ù_>_üâyímsØó±ÇíN¿õ­7Îy>” ÝásF¹lŒ"€1"-ãÍ ¦ÙiWÊ¢OÞ®,V3k\ïÔ‚â#ç[ O‚ÃÙäpÖ§/¹tí—ŽJÞf·÷%F«fŒ>€Ø2È)XZÒ³ªÊ2rw–ˆxm'ïq8;Ójªâw4Õ§”/^ùü Š×/òöæ{ª*Êž …’=‡ö_÷êPˆ@bÌ`z@´LXµÀîôº»Ú&‰ ž¼wÿÎ+WïØpËÃîÔ¾¬æúÄNWoZBbCªÏk÷ƒ–@rʺR­Ãgýú_@„0êe[?Åjõ&ìÞò±¿ƒ9=ïDQ*1P2ùåE™¹]3ƒSšësœ»tÃÝ¡PœïÈ+ׇq}IÉK¢T>F@,ÀB„Z›*#ë²¼¢òeÕ•½¡ Û.,X_3sOw§½ÞçKnjª[²{õw}§µyñA%J¦ÏÛvMNAC1£  ,D0J—>³8%£¹lÛ†OþQI\øÃŽõö·nyíÚßûúœQ¶°Åê ¥¤½UP8q×’øøPjRiý…÷v¼.’æ‹Tý ±¥Ÿ£oob瑊Ëïÿ°‘“–€uñʧïlkI=ÐÛånÎ/>¼4-+P$"âïoœ«-¡ÏKÁÙ!€ŒJnSý…»U?&Ükí·Ì<ïÑkÝi¥É)¡¬°Ùl-œÐ˜fwê¸Ç8âÄ•™[1ñ衉-ÃY5F?z@bË÷adån-±ZCq5){öïÊXS¾}é#~¿¥çýÇ¥gy&õ½1ö00Êh3hˆx­ÊHôçøôìªi÷ι§{rãñ ôÚ¡7ü'ö×KØåŒ ¸{»ã›‡©dŒ!Œ€ ’RÊâLMwÝ.ýfJIBRDîÙu@Jgüså‚ þ|AñsóúóæªÎ¶¤†®Žñž߇âq¡mj©9<áÍÚªÜ-ûv®\{vÕŒ€ ˆ+%?)­dI™+µ`Üô~åLNH›²hÍ—&Í¿ìsK>µð’-Ïn?xõW/ûÉîueoŠ~»ùûWç*õN€P¢Þ^TP‰zûOýîvuü«wÎ9¾=.µàCƒNNþëS'N­¿ØjKJzEáÑC3ËEå2JDÄf¯Mús»êŽÎÝmXï¼%˰ąަo.,m^®M1‹J+¿µáЇ•ÄOw`  1ù¢ùçÞ6Ùbsžx`ïîjßq`\aÓ’âÙé?œµüÊÔü2YîÎjÞPþÖõOY)ýš5´Ùæ(¶÷*«U,""Ê0ÌùËÿy—§1o{UÅŠZ'¾§wjUNs}V·Ö^Ãxw D)CïÝ~Ë3Õ‡lIÏÚ?ÉgÚƒÁÜžþ4´g¢´ÖÑ® f(¥ìÓoøÍ)…çÚNl›<óñ‹'N«½ü=j‘Ú£IÛ·¿ñɇ”2Ž?pi-ý]ÌOÖ=¤F³kÑEÿjJº™yºý­Ö†ò·æ>ÞÚ4çˆ;mgaGÛ¼#ý¹®6 •ðÎèG[Õ&ÿž'î¹w õ'00Zë@î¬k_²:.MÌžlˆˆ´·d3Í9yA”HnAçœêŒíëÚZέ9þàÞ~tëÖ3Ý#èµçŸsë"WZчOyÒ¦é¶MžõÜÅ6{ >1ÙLyÿ!¦©¥|[þS@jKkóÌj1”nóÌtC`  T¿óŸGÒK–>š3óêkR‹æ;ëŽÎ®œØ°;Å~òq†¡TjF}~[‹T‰ˆh3¨Ýþgº¾R*>oîÍ Ït\NÁÚéÓÏÙ{«Ó¥]§Ûð)¯ßoéuºzS«*¯UD‰h‘þ†÷ÓfÐp%M‘ºÁ] € JË¡užÄìI½×dLZžQ4cSQYËùï?®¯ÏÕ5ˆËk9Ã(|ˆˆt¶;ê¶­?ÿoÁख!Y>D)ð%ö‰xÎ|,ð ƒÔÝxÀ«”úG°¯ãb‡}öºŒÜWfÄ'¾w”cP ·Z>ä4Ýk;oéª;’Ü¡ì:Ä kíiH©…\¡Z»P)«‡³zEúÕ>œà,h­ÃJ©çƒ¾µåϘ>}^Ó5'ï·XÎÁ\öý Ä4ý†+¾ÎWQš5®vFj¦ü‡]À°(ŸØ—¦Íüî¡_;<ÀYz{¶Ôæ ¿péïR3SÇçfª·—û(,©Zêi8zÐÛ[Ø>Ы¾ûµÇ¹ø¢G?Ÿ’á/´Xúÿ.ÜüâŽymž—+kª.Þ6°{Ÿ¡2“žt os"¯üö…5ùNÍ¥û¶¸þéóÝ""î´@~éÔu+r‹Ëb†ï_NØ4×7ð!"bXÄÈÈi˜4 “Î Ø×aé¬Û½s(¯‰±…0„<û×5<öýM·­ù»ûguÕIÛMSëÔ,Ï\¥Zâú{q3‹âfŸ¿þú²iO^h·NMÉh-²Z•Uk‘¾^éõ÷é>‘k9ÁÖ]ìNÛ^0˜Ï¢T·==ksɉïÍPÀhÜûÜÁÚ­lÌõ"J)Ëø%w_0e©\ ø¼MU©:ê:ŽUo¼ïÕþœå·/¹éÜK’þ`³›‰}=ÚŸ˜bÄ7TéÝ¿ûü³,¾q^YñÌÌ»:Zz»§/Jød|¢Jø°küÊ·wÛä¿×V¯|ëÄ6‹¥5nÒÌ—.j8V²·½µ¨Á »ýʰ™'ö;uI3ç={[g[Ú¡Š½7¾$ZKÓ¾Ú*^üÉ?´Ö¡ÁÿÍ`¬#€ #u¼Dæ™kåWV\‘~åöúgÒóÝã_yhÝ3þÿ;‹Þñûkÿ>q¶åÆ@ŸêŒO–”}''hSË‘é¯kÈï³{î¹ö‘‚ /ÏÍÉ?6'+¯wZ8dŠÖ¢{{ì}½NÖÊ ì½i™“;Zãl㣈r„Û«ß ÛüÀõ»zÎò¯c FM¾xRQk]kذXÿï‹öÛÆ{^0ÔÚì8òÆKwþ—RÖwøÜ);ó'ÍÚxmÕÁ)¯¸SÛ²;ZÓë®ÞÄ`ÀЦÎ)¬žm³†ÞÞ„æ».\ föö4T5[y¢ùÀË,@ˆ³Æ[°bÔþÕªEDÊ.š”_w$´güûì“÷{{ëN""¹û¦=4åÕ¦ºeåMuR."¢µ©”:¾^IC­ì9ùxw³¥qϳ¯>0ThBˆq/¨i¨ Ý÷þ‰-Zm§¬íS6…Ûf¸Ï’äÞ“›‘½iâ‰íá€×Ò¸çÙÝu;žØóþs€Áb`Xõ?/ÿ¹pòÕ·+–¹Z‹t¶Y*Ëç½§á=ÎU’?¡v™R A¿/©»­¹¬~Ö‚Go²ÙMgrJOqÍa÷ö@ ®ËÓ¸ R›aÕ´ïź£›îMä¾(}*ŒF€QÀßä÷~澎Šsjvmãš¿iî=ù˜üâ³’$I$,3ÎÝt‹·÷­Ö켞éÁ kg®óöںܩmE¦é7Úoê©ÝúȳZkóƒî `8ÿ®%‹/¹=ûŠ`P‡•Ï\óþð!"b³ÞY‹$)%˜›È=Z™°½²|É ÞÞ²f‘c‡ƒ†Ò†n«Ú¼£¯³ÁÉÏ€±€wÍ÷/ÿø…·æÆ@ +˜–vWv¾žqâû¦úÄ=†ÕuÊJåÎxŸÛ oçðùŒîŠÝ—¾®µIN åM|mþÉÇÛâ’ÝJ)ž1äø¡ˆQJ)9°mzmÀ§úBAnª‹ß«$àRÒ{Êëwì^þòËÿ¼ü‡~¯xã‚V[K¼¿ÏÖubQêPÀþž~grN‚ˆ¸"óI0–Є»Vg¾õP¹ÿźc3wû¼ãÛœ®#iÊHñ¿ÿÀ` »GtfoŸ÷•V‡ºCÁôÞoÞúX0øX_É”¦‹&Ï>x½îs´µNÝïí™ÜlOÈôÒeÙ"r( Ÿ £ Fŧ';³í‡+f¬%âë+iù ãµ+‹-g±…ã´†Š kÓêh³ÖÞWøšÝÙ– ÄDD¬Ž„+µ(G b€•R4o¼=>-ØßãS3öäÅ'†Ò»:ìõ†%.$"²oçU/'Þ³¯lÆŽ¾>òùr»Œ·'é;3S‡§rŒeô€Ä¨øô %ʰèþŸ¡¤¯×èòõZ»µé³Šˆ(åÙl¦¥¶jüVðE´:q´-ÎMÁS'[2J—»óçNr¥$d•ÅY §¼ýêýÌpŸE”!)©;ó;;æUŸ¼OkS)e¼ópØÝ¸_íxäÓ÷j­YC†)X1Êsðµ#"rD)eÍšzéxwþÜyieZI8-˰ąµ)¿/£óýûN""ŽÄL{rÞìT©úê1V@bœÖ:$"•J©CãæÜt7Ïw&eà4¥¬Úç+n?Óum®”@bViž@0„èˆqJ)›R*^DE›JË™ÎÑfÀÝaÿðëÚ™œËŠèRŒ€Ä0¥”}Ò¥ßûD|Æ„xÃê°ØâܦՙxÆ^eØM{àLÇÙ\) )@ ›~å¥ ç]ë¹1>©!ñÈþsÖaŸ3®2±­ezm\\EFaÉžsZšóuwæzþâ6‘øÄŠ ›Íëìl߬µÛ/r|ÌœWføû2Ú ‹itwet—nšŸàP‡•R«ÜsâRó²l ‰©fÀT5o>òRt?9boÁˆaq©¹Ž¹7ÜtϼKÛo=´Þó…w, ú-¾ÔŒîñ¢”®=â.Ÿ0¥qy8¤õÚçîø^júÁÜ9 7Ümsˆ#²ôxê( 9ZšÓõy“ÚCô¿/Ñ«Œ°RJTBbUnnaí4§+œbw’{ºl-oËøIG.¶Ú̸Cå¹/îßyÃó'Â0”2tÀ_Ü^UQ¼±©î`¥¶†•²jÑ~‹(¯U$Å/¢E½¶êŠÂWjŽÌÚ äw½qBàl@ÆoO©ço”=,b‹ˆ¸S7NÔ’Ðw¤âêuÇ÷E§>Œn€1íÝ”ÑѶ¨2Š…`Œ @Ä@D @Ä@D ý¦Í Ï8+¼ gdµz\q®F÷ø²-Ë=¹–}Ž,ÇŸýMþ`´ëBì!€à)ÕâJI¯ÈËɯ)+*­¿ÈbR8QŸ—”rE‚#Ëq›¿Éïvˆ-| ¢‰ëÏ™:·úцq|ö•%g7¬øä£w?pcá®Wk¿¹é¡MG¢[)bsøpZi™JÓ³jç*¥Ä0Ô{ÖEצ–‰ç¦\;ašÜ˜_­{À)ìöšäÙ ·Þápê8õÞì!""«!yÅF±6µœf7ðˆ-zX/®Ãʺi‚iz­á„,–Ž # ­Cª¸ì‰G*V¬Ÿ~î–Æ'˜Iá°„EHZ€1Në°š½à‘äµ-·¶{¦Lë^íº0:@Æ8›­!!·°ua1dÒŒƒW†¶G»&Œ^€1.ˆ„ÊkµŠË•`ºz¾Ö®Œ64¡ŒiZ &lf±ªAÿbšft # cXFö¦‰ÓÏ+¿ÍjU–hׂ±€1J›A£dÊÞ•„D# cŒiúôÌÝ…%Sw­HÏö²Š9"Š0ÊiV©; Š'í^*ZéäÔ®WB8Õ0hÞ@ä@F­»í6k‡#ŒLšùêÒ¬Üæ™ Éþ\«íäFs¢ƒ0Jh3hLœ¶êüÂ’š Î[keÚlÊ8ž5 £B·m΢'nÌß1ÿøkqwþŒ$€ç:êöõ%õMšñòòqE ‹] :1Ú5gBˆQ&¯½¤¶ªpׄÉu—–Dl €Ä Óô9]eùÅ;çE;|hÍ»#Ö0/ †h-"bÓÛWo³GAÆ^0€¤T·=>Ñ—í:€"€Ä Â’õs’ÃÑ®(@ JLîÊŒv À`@bÐÑÊ)ÛÂaÚ¿{ 1¨³cJCkS|E´ëŠcŽŠô¤äÙûwÎz>´ë‚c´ˆ²ÚZ’]ñÍY=öÆh×  Æø}%-†ÅïÈί›–¤1…c”²è¶–ùû“Cév§Ž‹v=À@@b6“÷L{V›¼ ±…£k§T…ÃÄ@Œ2u²¿³Íu8ÚuAˆQ†a7wmYòPP›Ñ®è/@ ëîœÔÔÒ”Xí:€þ"€Ä0¥,ºrïÜÕ&Í舀˜¢OIœ_Ȉ€ç÷'zÃa E» ? 1.Èééj;í:€þ €Ä8¥ ]]YºVŸ:; q £@mõÒ=í-Îêhל `Pʪ»;’«#u?­Eº;TKÅý@SµgK¤î‹Øgv¦©ÂÃqÝ`P‚žúäÝJ‰6,!GW›4yª›ŸÝüÌ®‡ê¶ÕvÈÃqWŒV€Q°Cy=3¬uS}ÒîŠ=ç½ØÕ>½îÄö¶ªMþ=OÜs¯|o(‚0JhÓîªkÕqo>T>÷µîΩ ¢ ºÛ1d 1NkSF³+1¥cüP\Ï×'¾Ý[.}:Îê5WÞEˆqkcüE×üõ§ç™í|}ª·§ÓY Y½}½®VG\oºÝJm½[ÈyxßôÕápVï°Ž1‰ãBÁ4oKƒ{gf^ÏT›Ml§;Æ4µüÊ¿qÍŠÿêéšÚøÞ½ïΰÒZ+Å”+ #@Œ3 ‡¹}ã§ïOËØ:~Î⟉séø“÷{{ŒÎ·6Í{ ·3«Õï/ê8õ ïγRÿ¿½;6i(€Â0š'bÄ´Iåf—r#H)öV)2€ˆ4Âs«à÷xᜠþökîñÁ¿ 'âíu½Û<Þ<¬nŸï–Ë﫳óÃåÏ×Å~·]?í?WïSïƒÅB€œ”Ãáúcûr¿™züÅ't #@fdp—™ @F€d @F€d 32.Æqê p d @F€d @F€d @F€d @F€ÌË8õ8†2È #@€Œ2…t¤¹ºIDATÈ #@€Œ2È #@€Œ2È #@ædÇ©'À1 @F€d @F€0'Ãà³&@€Œ2È #@€Œ2È #@€Œ2È #@€Œ2¿.èï0J±‰IEND®B`‚calamares-3.2.20/src/modules/locale/images/orig/timezone_9.0.png000066400000000000000000000305001362604102500243540ustar00rootroot00000000000000‰PNG  IHDR ™q*UüsBIT|dˆ pHYs¢¢EÝ1¢tEXtSoftwarewww.inkscape.org›î<0½IDATxÚíÝwx•ežðq,‰®:¢4+bAi ½w’sB ½C’s’@è5„$ ¨ƒ•"¢€ô"Eé³ÓggvÊ»;»3ûÎìì¾ëÌè8Þ<¸Ìƒ# Hrøp]Ÿ L9‰ÏïŸó½îç~îRÇŽ+gëöšIµ£»Ó›d½›v©4¹!«ÜýM+šGÉã" @ "@ €A€ @‚@€€A€ @‚@€€ "@ D€ ˆ ‚@€ @ D€€A€ @ˆ@€€ ÄEà,Þ8ý¹õ¡.Õ?1üRÆG£1[¢UÚMê}C…û¯3@ º®ìÝ7TníÖpä†È%‹Ì}iô|fÔ¦Ô*j¡+ÌE€{«WÜ^3ù‘¢7þ#ƒ¸TñQø›‘ûšGº\_îÞëÍE€ƒJßñðM÷·Î 7½ù’­z$DÞɨѭpÈ-5:V6@l®z\yg^ukõùæ˜K¹×£Î€¥w7Ò¼è÷‰3@ º¹RÝòUÚOîÝ8m[äÒm2ß­Ò~JŸ2÷4¸ÅL±¹êqÕ]õû5®Ýïå´K¹É¼fÏE£ï¬Ý£N° c.€T¶r“;ªušÙ/!cgÆ¥ŠÃߊÞ×"Òí·Vÿ†™bsÕ#®R£!-ê\qÉ 4|°ûÜ!·ÔèP%ø…ÌE€ƒÊWiywnùƒ‚§L]²Mæ—gÜÝxh«¢îˆ7@ÉXŸºôµn?÷$ŽlWoèêKÁ÷ª¦ö-so£ÛÌP€P‚AQgÀ²ñ †¿•}¶£{.Ù-W5{=;úŽÚ=ê›ÞÍO€P¤áÈ Y—ò¼Ž³Úd>b}侑¤*¿˜ýnøƒé»zü.å±ÏŸþ¦?1sOzË k&ç·É¼râ÷6Mkß:+2gôŠ‘»&oëýË1+Gìi:vcÖß¾ñß—–Ý•!@ œ·»Õºûî&Óê[›¬rt™½à±àï‹ÍsÞÌi9~Íø¯ Á)íæ‡(Aª·¸Æä­É¿ V>F,lL[9z×ôwzü.õ™É¯&fîNOˆl‹$F×g÷yjÆ ž›´<ø;¼`΢Ö—NMˆl$DwÙ VGÎ&:ÌxiFxÁ´oF×:š¶rÄžä¹óŸ €Ë@³‰ F½š¼yî‘бyß ÿEaÑwËŸöü„M=ÿ=w_øs$|òçç +8”|,øÜ¬=)ïg½ÙçÇÝ f<{6á0ø…q« Oúy³ßKùã˜×†ìµ|ØÞ.³ ŸH[9l_Úª¡ï úæèMAÜ@Œ¨ÛóÑæÓv%¿J\ü¯ñ›úþ|Ú®ž¿9ÓçN—½nàwš n§Ú—Öl솱/ ‡nsæ?Vp8ù³3½Nþ¡¿~|îÑб±ëûý0uѤ¥gZ]i8º(@î €¥ë”vYs~yd|™9ûCMØÜ÷gÑ5©ß½bðþÞON¡sîÓ)å-ÏϺÿ³“–§.š²4}Õ°÷Îö5 „>Ë~«ÏOZ䬜(@ 1 myòÞ¯' Nùï tÎ%v‚U‰[¿I*œþ¼A€Ä€©õ«g¬ ¼XòUä½úhÔŠ‡ÛLz.÷ôi4zSæÍw× €’¦Û´ö½Ç¿þiq Üwë(³ö…þÔfÊ 3 F$ j\¥(B~Vœ$måÐý©‹&,´$mcBtg†A€ÄÌ5)‡ŠS€«C_Œ¬ïûô˜õM2·dž eïm\ÉÜ %TtuÊb·døƒÞ '¾š˜¹7]€ @bHÒŒNÃÇ® ÿ°¸EÈœýáºç?¶@€ @bD\¹¸ÚfµJ³<ôNq|"Ö̽=þ§ï3S_NÌÜ“þy€lÌ åv)(ú½ãÍP4аjÿ§’µ4eôáßž~nGq3·è÷¿±ïÏú-¿bøË›æìOúô‘n×0K@1WºAéR‘U¡#Å98þ^ˆÌ;>– ùÓÛ­àIX€â¬Ùˆ&m³Ö†¿3koÊû%1@þò”¬Ã¡Ï¢¯§¼7⥔×LxÀl ÅÐàg»¿V’Ããt‡ÂŸ´Ël™b¶€b þÖø+»Né0xÔ+)«û=Ùý‰1ËÃïÄR€Ì=:Ö÷±.‹Íp©n³Ù¬vJ^§qÖ„—ç¬Où§üƒ¡c):NyBÖžðÿKžÙ.ìk1{\€K`àÓÝŸŸ{46ƒãôÕÁ‹»¿jæ€K¨L•o\ŸõFøÛ±ùCŸ«:ÁFú¢øx!þÖø83G€\bu{Õ®Sp(¹ä„šПÇoÿ${mÊ·Æ­KùÁ˜e¡mÁS®&mIù列’_O}¼ÛüȪð¾VéÍ;Ä—¿ÒŒ ÅióyùøÛò&•¤ùxØ7“VÇWˆ¿ö´ÿ+€âîæûËÜ™°ä¬€LÛ™òÛЬ£m&G€”@wÖ½óž’ ³ö„þ_!¾ŒÙ!@J GCµj–¤= S¶‡ÿo¹êå+˜ j—Õ2©ðH¨D=áj¦ä_Å—¿Ñü %ÄU߸êŠäY2‚'I•´GìNÚþ׸2qW›# „ÄGÇñ-žœý^裒xÆGðÈÝø žz…(1âÊÆ]œŸQdÎþð‡ýv[\³ÛÕãÊÅÝXä†REânŽ»Âl ÅÔ°%ÉkKòiç¹ûÂ6¥OÛþÏœõ)?ûVøýŸîöM³E€Cƒw_:÷hÉ 3ÉÛþSûq­z9P̽I/;{_èÃX ã§¥ }’¶"¼§~Ÿz5ÍP\¤Büµi+’ß›{4ôY¬EÈñSÓw$ÿ¿¢ÈºÉ¬ ÅÀ÷\_zä+É; Äf€ä ÿ9%¿ëD³F€\bqåââF/KÞ7ïhì…Ç)« ;ÿ{°ãC·™9àê:µcŸ¼÷ÂÆr|œÐ£°óL›Ò —P¯y§MÚþ·ño‡«·`0sOÊû½çwfî€K¼ =®LÜÕ]¦´0ü…ЊȪ”=+C‡b-@‚G ÷YÐ-×Ì ÅL”Z-æ }K2asø_nºïúÍPÌ6¦[Òyÿìw“?Ž¥Õ¡KºoŽ/­#@ŠßmYqÕÛW¹oüÛáŸÅR„ xºûsæ‹(¦zÏï2'–nÃøtÒSæŠ(¦Úf·ìQx86žŽ5sOè÷÷&V,o®€bªÿ“]_ÎÝú dҖЯZ¥7«g®€b¼!½éˆ„…GB1q Vÿ§º?k®€â»ýš¬7Â߉¡Ãÿ§Û´vÑŽ9­{7Hmð° ŠS€ÜmÎú”ÇÖ„¡cs„Šb$ùƒ‡:×xÀœÅHï+ˆ‘èi;S~›ýføÛÖ$/k•Ö¢¶ Š‘kn¿æÊ.“[O‹‰} GÃǺNm7Â\ Åu#z™¸«Ç, í.éñQp(üéä­á_·Lkž`®€bªÃ¸ÖçtHÖ›áï ûfè•qR~4sOøýâ £_ mŽ/½™"@бèê”Cg»¹{ø IkîòPÙ·n5L­_=gCø§s^ÚøÈ}7üA ĺæ‰(ÆêöªSiÚ®ðï¾ì ~þÁЧÖ$­‰/íé¯ÑtDã·’/Ù&ö‚ÃÉÇÚD›÷5O@17àéîKÎô¦>oø£yÿ»ª‘÷^èîSZ,Ý ô_#aPãZãÖ…~šýfèÑ×S|Ý›Ùg¿ú°(Œn6O@1×£ S^þÁÐÇAlŒ}+ü½Ì5á#鯅w´Û²OÖÉ?ž¹7ô‡þOw[ôe¯ÄIü­ñqE!Wô:ÿôõn>}Ú6Ú¼oü-ñqfŠ(Æ‚pHÎí”ÑgA×9eª|ã” Ü­3𤽩/}®¯9ê•äM_÷mXù“µÍnžQ¥UåÍpé=¯ëÌK±)}Êö¤ÿ¹¯iå f€ˆq¡ÜN™Ñ5)‡ú>ÖµàVUêÏÚúÃ×ÁÓ¹ &Ú6«Ù ³@€Ä¸ø ñq‘U¡Ã‰CÉÇæ}+ ³ö…>è:µÕE¿‡3@ ±®Uzóö…‡C—ôQ¯vß_>þJó@€Ä¸Û½ã¦±o…~:ïìû(<úlâæäßÔ×~Ð, 1ê¦ÊåoŽ¿õ¯+ÍF$´»« ‡Â÷,ì°8îæ¸+Ì‹{>ÊÇ_•¹&ù{YkÃßú|ò+iËÃ;&l ÿâRÝ~U>ŸµÛ"l6€W6×B»/åž¿œØþ^èƒ!Ï%-«ß·~E³A€Ä¨Þ󻿇½4¼É< 1®éðƉ‡“/y€ô,ì”W.îâËÇßT£ã#ÕíA€Ä ªm«ß7sOòŸ.Å“¯N–û^øS·‡ÿcæîÐûs„>í‘ß±À| 1¦tƒÒ¥ÊT)wÛð’×½Ô+!s„Ž}+ôÏuR­e>€XÝ^.îÚI[RþíRÆÇìwCøL·%ñ·Äß`&€Ô|dbÓÔÇ» xªÛ’à1¸—*>æìý¹ñÀ-‚sA€Ä˜ø ñWEdzyºԷ]MÜ”òó9­SÅ Ö£|üõ]&w”µ6åƒýÅá¼ãÖ¥ü°Wa×™M‡&0~cÊOû?™´ M´y·ø ñ7Å—¿æök®<¾²rküU]§¶–¹&|8suÊÁ¼ýç~k×´]áÿøt÷çÆ,Ky»(j¶ÍÚ›òþÉÑÓa\›d3 ” qåââ²Ö†¿{®qýføûw}øŽ³ý9͆7i6}WÊo/ÔmZ9ëÃ?)Šž83 ÷è¸9îŠû[T½+œ×iböÚ”ïžÏÞño‡ÖgA·Üsù¹= :OÍ?úä|£#òzò·?—üRÖ›áoz5iwü­ñWš§ ˜º¯iµ›‡.I^]r ÷ÝÐ_u"º:|ø\žT|múk¡÷Îù0£Ÿϰ%Ý7Ä•‹‹^çšÛ®±ú!@(Ž‚ý½æu’³!åŸ.Ô-Pyï…>ì3¿ëìsý]RŸèº`Þѳ?}ÖÞÐG/MÚ]ט% ˜i1ºEݤ™Óëõ®Û`Ðâ¤%«RöŒ^Úv!±lï:¥õÐóùýÊTýÆõ“6‡ÿål~NÚò¤åjÜX&¾¼[­ ÅNpkÒÈW’¶oÞó&_´SÌ3ׄ|• ࣗ†7ÅY ßo:,áQsE€SM†%6Íݺ¨'™Lþ4qp£f_å÷l•Þ¢Yî»á?~ÑÏÈ?ú´Ëäv©fŠ(Æî¬w×#^êòí‹ Ö$­½OŸŠ¬ ïÿÂÈ9þdТn¯WnvoisE€CëÝ]!gCè_Îvƒ÷ÿîåølìºðztžÜÿ©nOæî ÿþø ÄäOç qïÇÈ—“v\ˆß7ifûIo_Jðä«Ô…]›- 8®~Ô-?ê•ä­gùC‡ó:N "<ñÍG7iÔ³°ó´‡»=ô`üΓ§íÿ&‘@ÆÊж™Í;UjX±Ì…ø}Ûeµî˜·?ôwO`þB÷Mf‹(¦:ä´m=qSè_s÷…>œsàÔÿŠ‚ãÓ)ÛÿÎZ›rtè7C/%Ïê0êËÎð¸ñžëKw™Ün`¯ÂÎSãË_øSÇ[Gš·í÷D·Â¾u~lÊÖðÌÚûù Ì é¯…ö˜+ + …k‹ÜT¯wÃy'ôšÛ%wÈsÉ/¶‰4oâWlï[â¯m•Ö¼m°9=¸ý*gCè­Òš56SM›h«V¡Y3‚ˆr= €€€ @ ¾i-UêÊJ·¹í‘îýûº"W¸..ŠŠõR§m‹4Nß©7ø± 5ºÏ^µãôž•[f¶/ú\£ ÕÚßv쀮¡€³{ƒZªT|•öSú5ÉÜ—vz€¤,˜óLþ¡Ð' “äHþdú;áß?ÔmäP›ÑœM|\ý@›ñ=£{NÙÛÑuÎÂyM³×ëÿìø×Î'ôÍôõUÚ ¹ž€ukÍÛnî6½CôšÛ¯¹ò+ÄÇU•[d&%DÞÉ8ý¶«1+‡ï›ý^øOyûS>­Ã óŒ+îm2ºcBÆÎSã#k_ÚðWÒ6OÛÕãwyï¥üqúîÿ5nÃÀï}v">2×:Ú$k[ôäï VP*5ÔÑ|1"îæ¸«ãËÇ_Ûoa×çs÷…ÿ0ç@ø£~Ï ][µý”¤ª¦&Wí0-T$\µãôÕ:ÎèY­ÓŒ^Õ:Íì]¤OµÎ³úI­Þ9·_õ.³Tï’788Ëãô=Á¹·ôþס/¥¿Ý~Úâ9M³7dQ’4wîÂñ›R’»/ù£æãÞò÷‡Vn™•rí·^kN€’eâ®®z´Vé¥K…ÇYo$ýó”íá_Ï=:–0üç¤Â¹OþÍS«.€^ §¿(ôé¨å&fþuoHpap»U$'>Ö`ø[ÑJ µ*UªÔ•f&@(ÁzÍë<'ï½ä?ZÜ}E÷"ÑÕÉß9qTÎÛý~rr\H©ÏLZl>ï6§`a뉫&}Ñ×ÕîÿJúE…ÜÏe^€¬Å˜æmfî ¿ÿEOžš¸¥ï/.V€¯;hÉÈ­) r– xnÔ¦3}ÍÃá'FV¨Ö¦’Y J°šÝkUò\ÒŠ¼÷B~Q|ÌØÝó?û>=ýÅ‹Á-X3–äî 0mgߎ]Ÿú£“C'1º;½jÇéJßYó&ó ”Pñåã¯ì9·ëŒi;S~ó÷ÎÜ6‚wÉ]œ±â#¶räî?¯àpøÓ~‹'- >ÞhÌÖè}Í#IÁÁ…f&@(ÁôëÜ3ÿ`ògg £ác“¶ôýÅà%ãV7»)ëbÆGpHtí€<ùçOÙÞëߥm‰ÞÕ`@K›Í1 z—ك æ,Ьz ÿ@ø£Sn¹Ú“ò? ÑM™5=Ó^é»zþ¦IæÖÌ‹±ï£Iæ®Èßl@?þ4óÍ~?Hˆìˆ@ŒHÛ)˦NØÜë—³ö…ÿ0ç@èÓ`õáôüBÖÚ  Ýæ<>¿sî“…]rŸ*œ¹§ÇøYc× øî‰“Ј oÁj5aÕ¤öÓÏi>îõ‰Éó¦=_p(ù”É?ú¸KÞ¹â°Á„ȶã«ÍÆnÎê8ó©‚9CŸœvØáÿ €“%dnÉœ¹'üûÓWArÞî÷O'Âà|õ[ñÑeö¢üÜwS~ÿEáqBî¾”?&F7f Àe m&/™5ç@èãÓã ðpè³®y ç}Qd«'3¶F£»2šdmÈNž[ød¿EV4Jß•ºhܪ¿s†ÍØÝ㿃³HºåÏ{\€.“‰¬|äô@ÈÛŸüñäm½~p<.þ6>ZŽ_3>{]ÿæ½ú¨($þ+oèÏóŽa:6ûÝÐG_tÛUÁÊHúªA‡3×öÿÞðWÓ7üºD€Ó{@v§g¿•úà fí }8rÙ€ƒ£W >ÐqƬ§¢[£ÁFòÓã£ý´%³¦îìõëSÃ"tzGbæ;=ŸþBbæö¨ \6²9kèKƒ÷{%msï'³W6Í^›DGbæÞôV—Ni5aÅä¿ÞªµtêÀoŽ[·?üAá‘¢Ð(2mWÏߎ]7à{½Ÿ÷Z“Ì×&¦,È\9aSŸ_|¾Šþ ¹0ïéîùùOÒ;å.ÎOÌÜi5qõÄ/º­K€bú¬}i Ñ_ôÝ+ ÁJIÖ›}<ã”ÿžµ7åýÔg¢oôy:su«‰‹gymøÞàV¬á¯ÛÝó‰ñËŽ¯€µ|Ä;­&¬œt.›×ˆ Æ÷€›È¿8BÞMk;eÙÔì·~7smÿïvÎûD‹ñ˦´Èyn椭}þOþÁäÏ '_ òbæ[m§,Ÿ2eGï_]ßÿÁjǹ>=K€bü¬‘KJ*œ·ðLA²`ÖsÓß ¿ìí8~nǾä’çæ.êñØä—ƒMÚÖç_;Ízª°Ï“S_>qšy‹œ5ZŒ3ç|ß+@1¾r¦æ Ñ‘„Œuc»Ìž÷بå}¿}ã¯OÊ V7ÚLZ19{]êÚM=¿sBˆಠ¿Õ"gåÿnßé8cÎÂAßµåó'[%¬xœ8äBƇ \¦r²Ž3æ>l<düÆ~?žu¡ÃC€Èç‡NxmòÔÉïÞ½bÌö‹D€ @Òšç¬?ðùa;Ò_ïû½öÓ/ìž"@ g°=Ú|ÜKÓ.f|€ùü6¬ñ+&·žøÂL‚à⯀dnʺØñ!@äk%@äœ%¤ïˆ1q®êZ‘#@äœTë4³™{U:ו½'Þ¬—Y€´ž´rrçÜùO€TïœÛÛõ ³9oå$fíˆÅú,"@¸ •¹»Áͪ¶®|BnC€‹âî„áͧm‹œÝþ÷¡ý´—§wÎ}l¾A€pÎîIÙôìÜ›Þ"穼Äè;ÀÅ ¬}E²+â,_C€Ø‚@€ @(‰ÒbüªIÀ× ÍÆ®'@ ¸ € ÎJ…ª­î¨X·Oã³qWƒa‚àkqgížõ‚@€€A€€A€ @ ‚@€ @  "@ Ä5 @ D€ @ ˆ @ D€ @ ˆ @ D€ @ ˆA€ @ %$@:ÌX’Û÷™)¯4ÉÜ .j€ŒÛÐï‡s†…ÌY$@\ÔéóÔŒ"k†h1~mŽ `€’ ‰™Û¢g=S˜¹;]€ @¸¨2fåÈw „Ž¥›Î¿àkªušÑ§T©R×§+ÌC€ @ŽK]4ùÕÉÛzÿ[·9 çÑ×4þVôÑÔ#çê‘Og—½·ñæ!@ Ç x.gåÈ¥#w&Fwe\¨=#'4¹!«ÜýM+š‡@€¤%DwfLÛÕã·‡’?k3ù•iÀE]éž¿àñ^ g,IÌÜ›.@ \¤Ù—6ü•´-Yo ønbææ,‚à¢HbôŒI[{ÿÛœ¡O†¿2ìñûþ¬õÄ•“€svGíõƒh;eÙÔιÏÎ9S ´ž´|J§YÏŒÛÐïG‡CǺÍy|¾A€pN®/wïõ&ÍÚfò‹3¿þv·ü'þnX4ÏY›Ó%÷©Â&ø6,"@ˆõ7Ž¥J]õ@Û ½Zæ¼>a܆^ÿÒ8ãí¬¦Y[2/ôþ"@¥îNÖ.!cgFß§§¾œ³¡ïO³ÖöûÞ3ß .ì¾Gõ‹Þô?P°ãŒÅs²×÷úù¸ }Ò4ûÍ‚à‚)_µÕÝu,ûËŽæãÖŽ¿©×/‡¿:fk÷‚Ï Dé;¾éá”§Fž|ÆGBdsæÐî þ}Êãw³¶G-ÉX?ô¥QÛšŽÝ˜uüãÁæó‹pHË3‹~·rf$@ˆ}qU;NïJddîN´däÖ^ ÓÞìš·pÞé¶¿rR‹ñ˧$D6dw/œÿÄ„Í}6asêOû<5ýÅÆ³3÷¤Ÿ|^Hà\ã#1º;ýî„ámÍH€;ñqŽÍÒºoöO€–ÖŒo’µ1»IÖæ¿yV³ì%3z=‘³lÒÖž¿.<:6ï[áãæ ›s ùÓ¾ÏL~åó“ÑßÈ ^gèKƒö5É<·'iÕè^8´è÷‹7'@Œ¨X¯wbý‘od+§@òÜy /‰®;Ó炎ÔEÙ¯ÛÐï‡³ß p"@N»¾ÿ>ÿºuc37d7³:§qdkôó팤<–·¸åø×'|Q|ÔúFä–êíî3#@ì¬~\ÙddöÌÈê¾ßïóTtM×¼‹;ÎÈ{òävS^œyjxl‹{yðÞ3ž›}âc=Ÿ˜öâÜ£§Ș×FïøËjÉØMY½N}±ÿâôum&=—›±zÈ¡àëçì}”õÖ ì<뙂ēö$F÷¤ßÓdT{3 Ęjfö=y“y›É~ùÞŒ`?ÇÉÓwFú>3ý¥á¯dlì·xôÛ=Ï~mÌkŸ¾r2xIö6¥þsá‘ð§'ÇJááÐgã6ôÿaÿç&®H*œûäCáÇFÅÑ5æ#@ˆ1•[DÛÿMdœ¼Qôï¤ÂyO¤.š¼4ynáS©ÏLy¥IÖ[c3ÿº©ýV­Ó{HF½š²Ël1èÎ:½ë·<…ÔE—OÞÖû—i«†ï öjt/(\YÓÿÛS¶÷úõô])ÿ5y{¯Ï}7é“è¿Õ$sWäÄS±ZNxmòÔ=sbE#ø;ÿ`èãÞ §½ì÷ÈÝ×ã÷_Ù?òVÊ?š ÝtWíÛê3ûD€´ž´rröºß»¾ßš[7.1º.»ãÌy ¢;3ÁmU]óžš]3èH×9§>žwàóã^/8”|¬ßâè3ÞIùï`5cîÑÏm|7ˆ V7¢_S³÷ss Ö—*xüó§PØqæ’ÜÞ Ç/Kˆl§¨§<6饼ý¡?ŸK|²ßLù–ÙbTõ.³^èÌOh7õÅ}žšþ°W2×OÝÙë×§?-ë 䨹bÔmrº]¬9õ¾;#=Ÿýìèåc¶çÿé dmøˆ¹bÔ] $^ˆÀHˆlÎl5ñÕ©Çc#k{$4Ö³_ôµf-Οº#å?ˆà2S¾J‹ûÞ”ùU¤Õ„§ó3w2V·ü¹ 'lîõËàÄô/úúî³)@›‹ v7¢__»ÿ«™òv«þϦ¯ë·(ãÍÓ7ªŸzKÖÖèÔ½þãôýjhƒ¹b7@®x°ûÜa4@žûzðHß/ûºÐ¼¼gr÷%r@áð’W™‹ †Ui79|/­ß¢q+[OZ”w~¡²)+<òK“·%½r€Œ[—ò3 İ{G´HŒ¾“1ø…1/º31ssÖ™¢¡ý´%³ÿ÷Œà»‘5ý¾<Ýê\ã£õÄU“¦íêñŸÁÁ…6÷øU'Ñ[ ß7@ »íá.Õ²b|ýAO~0”ŸV½K^¿*í§ jš½bÒÉáÐrüë‚•`sy›Éóç§£ŸÏêǰWÒ6çÅÇÄÍ)ÿ‘º(ºvÔòÑ;Ƭt(85}Üú”š‰ †]W¦R|é;kÞRªT©ö„»³vÏz_~úùíi9áõ‰ÍÇ­šØ$kÃØOÊJÌÜ>biÚ–qëC?6ÀeæKä¢V¸;½ÛÌϺþòµ¨Ùû¹Ñ·× Õ,UªÔuæ @ ]BÆ®ŒGS_ŠTi?¥ïÍw׿Ù<ä¢k4fkô–*›‡@€\t&Œ*_£Z5ó \¦Òhô挪¦Ž¬Ñ5Xn#jõ~|B¥„þcM}1»qÆŽÈ…Û¾7ýŽGSê›…à2GzPµÃ´^u,Ël0b]vã´­ÑÆéÛ#M²ÞM þ®Þ%oÐí5“jU¨Þöàë €s„ǃIóG4½)3ˆ¿'!cgFÃQ£5º«ÖqÆð«¯¹þ&×P€ÀY»³vÏz_g’Ý“^µóØqqeã®ù¢×¾½VÛÎqåânt|¥ ÔHš•~ÛÃ]k÷pþº7UªS¾jÇ©Ñ[jÕ­é: øÊh0lmf…‡<|úž’Ê-³ºÖJ]œSúž[oq\9¾Ò½pÄÕ7^}}ðzª·­T­ó¬Æl‰ÞÛ¢Ÿ F\g,@§o‹ÜÙ Câ ·T¹ñ‘žÏŒ >Vo芜ÛkU«{GÝäö®³€  ‘öHªÒnÒЫ=ðÅIwÔnÒ½Þ׳Ê?”ðk-@à‚H á¨‘zCVgÿ~´ßâñwÔk©Ñ5ox“̽i÷µlÓ¾T©RWi³:ò•û?ê \žÙþHï9wÖiÕùÞf£"7U®ö€k.@ ,>ê3«ÜýÍšÅßPî¾Jz4õ¥ì„Œ] F¼©X/5Á5  ºRwðÊìzƒWMˆ¼“qòÇkö^½2þÊë\w€¹è‚[²îlر‰ë.@ ]ýákÆUjTßÉèò5¬€dîM¯Ü2+\ªT©«]{€¹è‚}!•j]!ÿàú ÈE×8}{¤fïg3î¬Û»ñíµBu®Š¿®LpNˆyÈÅ ‘´m‘„È®ŒÚý^žXîþ¦ÍC€ @.º†#7d € "@D€ˆA€ @ "@@€ @ D€ @‚@€â" @ "@ €A€ @‚@€€A€ @‚@€€ "@ D€ ˆ ‚@€ @ D€€A€ @ˆ@€€ "@D€ @ ˆA€ @ "@@€ @ ˆA€ @ "@@€ @ æ!@ €áRûÿ%úö§00ÍIEND®B`‚calamares-3.2.20/src/modules/locale/images/orig/timezone_9.5.png000066400000000000000000000036471362604102500243750ustar00rootroot00000000000000‰PNG  IHDR ™Fô¥ÎsBITÛáOà pHYs¢¢EÝ1¢tEXtSoftwarewww.inkscape.org›î<×PLTE8ÿÿÿ8888+Y8882b"Ex-J08*YH}/G3d#-\ ÍL&ReŒ€@@ €@@ €@@ €@@ €@@  €@@  €@@ @ €@@ @ €@@ #€@@ €@@ €@@ €@@ €@@ €@@ €@@ €@@ €@@ Ä@ €@@ €@@ €@@ €@@ €@€@@ €@€@@ €@@ €@@ €@@ €@@ 1€@@  €@@  €@@ ðWtZ²`öÈówŸV_Ú»tDó •F­[µáY½9½lçäMÓ1áú[QÙÛûS1S¿¶ö½ÞíŠ1í¶}в<#ˆ™_ˆõm]¹Z P–»ïãFïåúèÅ ±@ÖüÓŸmMõí;ñä㎎Ö@E•iDŒ-~¯$EÛãjÉüèd2Ô@¼A@ €@‚@‚@‚@‚@‰4:Øl‹@HB -ê‚@€@@     €@àyðêîÍcù‚@ iOö©Éå‚좺ú¦F@Šl‡y ? R…sZ.Zg¿™q½Æ‹™OJëU@\¯{Å.šö ùâ³¾GWäöÿ,rQ PùT¿ünRÐååñR '•YÝ.ô«$èÚ3¶on&ß(HT5(s®ö¹@ A÷+ï7Íö=#HÚ¤zd‹ËøoÑ @Ús=ïT5Oé{u{A ~Ç:zJ *×_ ЦîuF€@@ €@@ €@@ €@@ €@@ €@@ ü¯~ á‰JõIEND®B`‚calamares-3.2.20/src/modules/locale/images/pin.png000066400000000000000000000011401362604102500217600ustar00rootroot00000000000000‰PNG  IHDRóÿabKGDêHH©qÛ pHYs × ×B(›xtIMEÜ 6L´}*íIDAT8Ë¥“?kAÅs>K\Ð!NÀ•«àKçÊÒÚß'$" ¤Tî²&•Û8(Ä··§û#½wŠÿ¥ËÀÀ°»oæ-óžÑG–e8çȲl8N€i½.+çÜf÷À¸Y–=¾H:ja þÜ€j3»^;çnv»7ù ˜#19–îÈëšyY²¨*08wÎ}ʲ¬cÐOþ±‘ø8™h:›a`êæ $±¼ý­·«•íuM^8çn¬ÿó7à凃½IS«Å£2c¸iù¼ú¥÷ÞðxÇ’ŽfIÂt4²ZúÔ½NuÍúÖsÚ46‹"$ÇpÒÂà|4êc]ÚŽ½ ªÀ{Ì{Ìçœ5 - €“˜ H£èÑNè¬×l‹B€²D!0’Ðd0¬go Í+K+ T–PXßÁb`i@Þ´¡f¡`„€BÀB@¡€uE>™ìÈ.#à2†z^x„ASCáÁ{ä=øëk­+\¤)1ÔÀe\™Ùõ¢\³\ýÔ¾/Pž÷`|W«®_Çc-’ƒkàê©@§Ue;ê„Û-êÁïmO³¿Bº“²4˜µ-gEÁ¨çƒiÊ"IºÍ˜=”ò3Á¿ÍÔÑ~h¦ÿµó@27ÈÁ’ IEND®B`‚calamares-3.2.20/src/modules/locale/images/timezone_-1.0.png000066400000000000000000000226451362604102500234740ustar00rootroot00000000000000‰PNG  IHDR T‰=»ÈgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“ pHYs¢¢EÝ1¢$uIDATxÚíÝyxU÷}èë™B!!$!!! ¡Y€™çAIÌ£@Ò4@lcðlŒÇ§¶ƒ§:‰ãÙŽl3Yv÷L÷œÛöžž›´}NšÛÞ¶çä6mszËÝb'mì^ccÌð¾Ïó}„„6¿õÏú™Õ-‹Ê[^TwœWwt àœäܹ=R‹Æå.ºuaþÊÃ[+CoGpN·kº Î(8ªlÓÔœ¶Tß À9Ãó—öUÙ4½dÓwB•áw"Uí§‚¥Û_Ž”5¿®î8-àj–œ;§gZÉêâüúÃÛb÷/Tß [pSsfMKCñ†§Î^m¨j;úè¿*r"ýž`Eë-ÑÍÁcÑyóÜ„ÞnN4<Þ GÃã³Ý!àÒ5$«20|ââ~™5ÁÅçNâ»B¥M/¶å.º5=‘—m¥mbÝ}%›Ÿm/Ýör$wÑm›3«[f§7NQXW4¢pÅä”IµEi“'gM ÏÈ™·oyÞò»W¯{rSé¶—Z*#Ç\Î’ÇÏë?fæ×ê+#Ö=Þ:aù¡Õcçìn*h8²=oÙ¡5éå›·ŽžÞÞ>vÎÞM é“Ç÷èÝ¿{BZq ÒØ@üðñÑÙi“©E+½ã“c'ý=,3ªbëªhhk:ß p9ž·°gz醒¼Ú{ùKnY=²|UaÜàŒÄÄì©Y©EõÙƒG•O-nÈU±9/ú½ÑÒý_ÿŒÄ1ÓÑŸ=½-ñÑï?~ñíó&5>¼¹¼õõÖó­I‚.]I¹³{ Ÿ¸¨4kZ¤d踚¡±¯ UUÑH›¼*S#ŠVF?ßQ¸"4nV`TeS`dÙ†Àœ[þ<öí݆Œ®š^¶±<{ÆŽY–¬+^ÿä¶Šà›áêήPt¼% .W ¥Ý¦Mêýc÷á“ú&$çÏ HßcàÈ ½â“ÇöˆþÝ5CFWöL+nŒÏ¨ÚÖ?£ª9.½|cŸáy FOô³†ç/6nÁ­Sš^h« ¿»Aúÿ?\ú†Œ®:{ãó ´I}t‹2*nPZaÊ Ôüœø”1c£áÕ?yLưñóÊG–®kL/ßTŸ^¶qIôÏ‹ÆÌº~]ñú'ƒ¡cÁª¶“¿Ž€.U€+Q4®‰Cò ô¢IƒF§õKÌJ˜6)'†Ÿ_””3sü€” ‰£«&§—mZ7iõ#‘šÎìÃWI0R —’sçöO-n,:vÆ’Áe “'Ì››4nÖÔáùKfgNm›·üîÚ¢5ßj® ¿>ï+ ‚._q ©=R –dM‹´]]“Q–RX;vxޢ촒5ÓÇ/¹³½2r¼­úì£R»ìô W“Þý¯œY>4yÂü¡c¯Í=½mѸ–æÌ»aIôÄ~Ceøàg¾¡Y0À•¥á÷Î|ôÇ^i“ £'ó±'»©ùtè‚Æ‚`€ËKü°œ@Búä@ßA#â’ÇÏ›ž»è–ΊÐÛ‘h4´NÞøLË”­ÏµºÂW¡ü÷ú%fö˜Z0løÄÅy£¯íhÊox(X~7\ÞòýPôÄ>T²ù»‚®FGLŒQX7½hÝÑ ÅžÞZÐx$4aÙ¡ÍeÛ_‰D?o+Ýþr›·$ÀÕ ©!YUÒË7­ª ¿Ó=‘W„Ž…Ê¶½ŒC¸dË÷"Uí§.l,¸<ôš}͈¢ú̼Úû"Õ§cû+„¢¡Ðž¿â¯®~¤óì#T;»‚®0ÀU¦ÏÀ”Øfmñ#§¬]5aÙ¡íEk¿ÕXÐpd[ñú'[¦l}>\ºí¥öØÕ…ò–ïGçõ– ²ÿ‚`€Ë$ ï‘4nÖØ¬i‘­ÃòN6aAÅÈÒõ«ÒJV¯;wïʲæ×Beͯ¶LXz°©hÝ“ÛjÎnÚ&àjЭ[÷ž}g”'Œ(Z™Õ³ßàCsfV³gKþŠolÔøðÖ)Mχ+Zßl-ÝöRsEèíVoI€«G÷èô=½ý〈2ªÿÐ1Ó‡eT5Ξ¹³*³ºeÒø%wΊ=-©úB^] pIëvM÷žqC²kâR‹⣟÷’U•’55X8vîžÜìY×=½-eä”5CsæîP¼þÉVÁWQ0ô<  y™Õ- 2kZ+Æ-Ø¿qòÆg:bOHš²õùP^í½FUn]™¿òðšŠÖ7Cô†gÁ—v0ôì;(~xÁÒôÔâÆE¹‹nÝ^~'RÕv2{|jMçû¡’-ßÛš95ØP²ù;‘š }uA0À¥ Ñé^Ó ÒË7—Œ™}ý¬Ìê–9ó÷-/¨hCÙöW¶GCbCášÇš\}®‰Nßn×tïÝgÀðQñÉ9ã,ž’”3kFÚäUÓó–ß½¼híѶh0\ÅУw\¯¸„qý3³ã†d œ»êл_bFÜèkwäox6XùasUû-‚®.ݺ÷Š‹ï;hDþ€” •CFWU Í™›œ×9 eÒðqó:W.¸é[77Ü÷Îò¿ÜÿÞóƲ?ßñ²yfé÷›.xhó۫·,i^÷õúW#ß©ýpÓ‘/–oX½6³:œ“3Ϝҭßî¬î|ïÂ?!I0ÀWcDQVü¶GçïÞõýeÿõŽÖþó?®ûïúƒº3±9ôï~3±Ïo>U÷÷MG·œì|iÍv¾´á?6=ymþ¾»î*\óxxÊÖçÛb›¸})± àâªX_èÑ»GÏÍÍ¿îÀ‰åõQ$Üöƒº_ÝøîŠÿû¶êþq÷ëþxï±ú¿¸éTÝ/oÿAíÿºý‡µÿtÓ©•{àdÝÿ¼ñøê?Ûñòöæïì@uç­_j,¸¸Æ^[Ð}Õ]s·íysÙOn:¹âÞþú¼óÇuÿtûVüCûóþ}ÓãMïÖß·û‰Õ‡w>³óÕµ´ÿøŠ¿½ùtÝ/ïøáŠ_í?Qÿ—»ÞX÷G/mýÑÜî¿ O ðÕ›Ý6mú o-ýߢð÷»ß\ñó¶çÖü—ë_køiè;[»VÞsÇáeïøzã×o8ºá›¡—î¿á±µÝxtÛm¯nø½=OÍßÿÔ¾Y{ž»~Öž×vÔt^À'! ¸4´]üà­]µ¿¼õýºØ¢î{ÞZùNÖÿõÞcõ?o}fãæï?|ûª¯ßøhðÛ[O·=¿á¢»Z¿ÝòÎÊ{n}¨ºãd¨ªýî± àÒ1aN~ÚÞ7—¾wçêÎü°îÌ-ïÕý2 ?ÛóVýßóVÿîµUÿmý7ÛžßôHçs7¼Óðó›N×ý]ìë/­úãÕ‡¯ººóT袅‚`€‹(n``é¾9ëo:¹üÏ?ºÑùìœ}Rí™ÛÞ¯ýÕõßoüéõ¯­ù?‚ßn}»ù©àíÏ·ß{lõOƒßYÿá¼¼­ºãtP0À•©[Ë‹ÜùrýOœ\ù7±›˜;bU½¥kå/îüQìè•¿¼áÝ5úî¶SëŽìzzÅÝ7™¹û™==\£ÊƦî}séÉ›O×þjÏ[õ?k~íÞ¢þ¯cOGŠÂ?Zñwý»Ú÷^ˆMôk¿ÚýÆš?©½ë¦‡§íxöúØÉûÅÁ_º…×Ϫ?p|ùOîøQí™'ë~±÷íúŸ_ÿzãO÷«ÿÙ®×Wýt׺ÿxÃÏoû`ÅßÇÞ¢ôQ4ÜÒµâïv¾¼ú›oysöÞßß{1c¡¦óýètEƒáˆ`€/SãÁ…mN,ÿ¿bpûjÿéöÔýêà‡µgîüñò37Ÿ^ñÿD¾·ábUÝztÏ3{­û¯?<·ósôã?Ç¢!ö¥¥wºï"¾)T¼áéðø%·GòjïmO)X.à˲á‹n¸édíßÜù㺎|oãZŸYÿá®×þtß»+ÿêÀ‰•»çÍ5ÿçÒ;Ü^Õ~*Ôpÿ­GîøáŠøÍ.еÿ+öèÕ†ûnyøbCÑÚÇ;&,=´c²Cíëîkw…¾DM,¹ó†cu¹û­Æ?ÛøHðÕ/¯ú“=oÕÿÅõ¯7þÙŽ—Öýçð³M§8|[U۱Ȍë^üZøÙÖwoéªÿ·~Pÿ‹öÖý§§þªéñÏ_¬`(o}=\Þúf80Þ’_²íGÞýú²ÿ±÷­Ùñüêÿ½ó…Æ?Ùvtå©MßløÞÔàî—„ë2«7-Ï™ãÊI«Ù\~&4ßý–Ý~Ë=SÛ¿¹kîÞ‡nž·ÿÉ/Þ= ]¿7=À—níýs¶l{lñ=/ß»úž•»çìÜØ:vÆâòá¹’ú ÍŠï›tm÷!Ùó¯Q¸¢û ´¢Ä”Iuù£*›Ê²¦¶NU±e]ᚣöa€+Ô™3gÿÃöÀú¯/|xæTìKÝfîy,Ðwpf Gï~g'¦oBZ ßÐìÀð‰Kéå›)“j{gM -©j;´\¡z&ô<;ç+µ¸±OÖ´È’è‰{«` Á@0—`0ÄNÞ;».þt¼Ûé¹]0À%hDáÊÞ™Õ-ó˶¿²½¬ùÕ‹?Û_iÎ[~wpXÞ¢DÁÀå„òKÊ™Ù}XÞÂÌQ[&ªÜzñ'ú{Ó&75¥¯£ÀÕ]4\XCsf†MXpv×ç¯jR‹ë é%_˜XàÅ ˆ’è74û«›ÄŒ@ßA)\jzÇë¾½ã“}u“4°W¿Á×8p‰I)XÞ+½|SMáªGW®þjfÜü×$Ÿ›°“7\ZR‹ûdM /­ŠTµ¼ø9ɯ°sxþÒ$Á—d0D–T·Ÿn­îx/xñçt° áH[JÁ2Á‚á_M{, Á‚A0€`  Á@0‚A0€` Á‚A0€` €`.õ`¨j;̯?Ü><©`Áð›™ÒôBÛ¸7­É¨Ú¾qHVå`ÁWy0Ôt¾›Plrßöµ¤q³ ú%f è3pÄ5Ž\ÍÁÐÙ,Z÷x¨ ñáõ“¿¹%£jÛ†Ä1Ó&YÜÑ€«<ª"ÇÙSÃíCF×%Ÿ—•Q:¬ïÐÌnƒÒŠ¸Úƒ¡2r<’QÝÜ48³bdÞñ× 7+0hÔdù)\ýh8kjpsböÔò#&öv@0||ÃsEèX$ MƒÒ s{Å î{ }Ò=úÄ;põCWpÊ–ç"cçÞЙœ;·¦ÿÐѽú'öN+Y{=£ã)IpµCìê„%wv&åÌ\78}hzéú@ŸøäøäñsóÓJÖ,HHŸ<0`¸:ƒ!6åͯ…ræß9e튌ªí3sÞ´ªxÝÛ',=Ø9lÂ;=ÀÕ ±}*Ãï†Ë[ßUßj­ ¿ŽþÞPAѶ”‚eC\ÍÁðIÓ~:XPÿ`ÛˆIµ‚ÃïC~ýƒ‘Á‚A0€`8¿`X †Á‚áƒáp4–  ‚ÃyÃ7"« ‚áS‚áë‚€¡›“CÁðQ0L\ù@xxÁRÁ‚á‚aÅᔂe‰‚ÃïCÝýáEõC  Ÿ ©‚çCD0€`ø7‚a¥`ÁðIÁp_X0€`øÄ9{…¡P0€`øíéì –5¿;Éãç'8 ÎN,ŠÖ~kó¸f¥LZž?l\oGC°2r< …%YÓÂ#†Ÿ×7ú2úDçGÃÙ)¨08¢°.ãס †îކ³÷.¯ª3¥`Ya÷ž}â£/£¿`€ `pfY 1»&0tìô 2#KÖöŽÃâ‹ ]Á²í¯DÆÍß¿2)gFRô¿ôÑ[’º9ºð ɪLšsmvrîœqɹ³¿ð Ë[01kjhMl?„‹ ¥Û^ŠäÌÛ·lØ„ùÃzõO p!eTmŸTÐðЦ²–×¶–muËŸW¶–5¿z1®.„¦4½3ûú…ÑØIŒý_ŒÈw@àBÊš*)Z÷tKeÛ‡-Uí´Vwv….À|é±P²åÙÐèk;æ$›=(öÿHHŸì`À…–QÝ6yzÛ]»W}㞯/¼åÉýÕ§BÿÖý_ÕîÍ¿5áÉŸ fMo»6yü¼øž½ãƒ3ÊHø2¤LÞY´êÞ¦'ö½»ò¯·=¹óùꎷڢaÐúQ T¶}ÐRÕþ~keät°ªýX¤ºãôW §CEk¾Õœ95X™”33.9wŽ_¦Q•m“gí¼eÿ¦G<¾ü®‡o¯î8þu,´ÎÚóÝÝ[îúNý}w}}óc×}÷k¯nýñòƒÞYÓûž‹{µ¡ªýT¸ ñȶŒªíÅC2Ê{Ë[ààÀ—-vCáÚ§Z*ÛÞž”ÿæmG±ûêî¾ë}ï¬ýiøÙæÍO·¼½çÍÕ?©=tß=±¨˜±ëŽé×½Õþ¥_qèì VEއòW<°eTù漄ô’Ãó:pp±‚¡xý“-5üÎÉúÔo¶×ºïîùžÜwíu¯wÎÜýòΩ;ŽG¦í|­³íùmïµ>ÓzlÆ®ïw~Y±PÓù~°"x,œ·ì®õ#§¬Íœ^rMJþR .r0´ÆNÎ?ë‰üŒ]Ï]÷µ×¶þ¸ã…mïÍÜýÊÎ/+ÊZ^ _|{cjqã¨^ýw1©Ö€K=b3kÏww]{ý‹_«éü·žªôùc¡tÛ‹áq o®M)¬Mq”à« †©±}=)TÕ~*ø™§í½Öè|âß}¡]ž;»‚%›Ÿ çÌÛ·0yü¼¡gΜqà«’V²º`ìœ=›&ÖÞ·5¯öž/<kïmš´ú‘Ðùß Ýuö±©±=ÆÌÞ5{pFù Ä|µ†MXÐ#µ¨¾ÏÈ)kûŽ,YóÅfʺØÇ„ÑÓÛ—×U†Ø“ÚN†‹Ö?Ñ’=£cêÀ”¼xWà^º>·üž@Ù¶—¥M/|¡™²å{Ôâ†>YÓ"K¢ÁÐúYc¡2r<\¸æ±mYÓ‚åý†ŒŠ‹½®kzôqpàJ“ZÜøÙƒ! á·Ã“Þ2ªrkQ>{Ç%¤ZD ]ÁŠà[áü•‡7¤•¬žèÖ½g¿¡YÃ{ÁòÖ×Ãyu÷®ž¿tlôŸu>Þâ€`è V´¾Ê[vhur@·@·©“,†Ø} ïK¶|¯9£²©ºï ÔÀ Q“-†ßÜèùì J8"?:R& èŸ46Ð/1+:®†`¨é|?X²ùÙæ‘¥ëgHÉ:(mRÒÀÔ‚¤Ã' –q‰ý“Ç&öOÊ7$cHÜàô„~CÒ{YY¸ ‚¡º£+X:,^ÿÔö¢õO®?7O¬/Z÷Ñ<£ëbSÐpdCfMpÉбӇYY¸*‚á£9ªj?þ¤‰þ]dòÆg"cf_·|DÑŠô¤ñszXY¸ª‚áS¦³+X<Ö6aé]Ë‡Ž™–û™I¹³,,†÷‚5;>­{<œ=£³¸ºít aT‰EÁpîþ†ÊÈñðĺû6Œ(¬Ë²š ~ á·#ùõ‡7¦—n˜˜VÔÛj€`87í§Âù+¿±uøÄEù}ú'uO̲¯†_ïÍ0eës‘œ¹{f_Ó½WßÄÑÕù·"UµŒÔ?¸iØ„…c­ †'¶ïBñú§š2«·Oé=pD+‚áã=J·¿Ò>~ñí »÷ìÝ;.у‘@0üÖ½ “7}»-úý‹¥MŠ« ½c@0üæ CYók‘¼Ú{#YÓ#3³§Æ[A ÿúJC¨põc[R‹êó¬ \¦ú% Ä ˆKø´Iû\ÁPÕv"RÐpdMÒ¸Y£¬2\¦ÇN™V²zÊÈ)ëÊ?mÒK×W™ùµÑ`~ö`8ɯpCRîœl« —©‘ej¦4½°µ"t¬¥"øVó§LKôïƒç³Ësìæçâ OG²gîŒíØÖÍJÀe(½|ÓôòÖ7¶ŸÝl­ýýÖŠÈš«Ú?h}þÛ±O,œ»ùùý`é¶;sß:7úkzZi¸¬ƒá½à¬½Ï]¿æÁƒÍ?ðÔ•‘®Öª¶Z«Ú»¢q"TÙÖÕz¾WJ6·=gÞÞéÑ_s•€Ë8j:O‡Ö>ðèþ«~ÞòûÛ·ü~Ç++î¹ç¾ÚCê|©åÔê÷>\Óy*tÑž´ú‘Í# ër­2\æÁPÝù^hþþ§öm9ºûÛ›máÀɆ¿j~:øfÃý·>tëuÿÐö\ÓûSwœ¶·#Ý‹¡}ÂÒƒKâÒú[e¸Üƒáì= ±·OÛùFûÒ;¾qpÖžgö.?xÿ¡[Þ«û»]¯¯ÿÚÎ7Ú?ÛÛ‘>–lþNûØÙ×Ï´ÂpEÃGWN‡Üôô¾Õ‡>¸õñÝßÞõÆúÿràäÊ¿­½ë®û«?Ó[’¢á9.¨p“·#À• ]gOö§í<Þr´ãÅ›N­øÅ¾w~¶ï5?i{.ôöôë^íüŒ÷.„ŠÖmM/Ý{œj¤ÜÁ.W#K×_[¼á÷Ã¥M/vNÙúbGé¶ç;ì»óžu‡w|gÙm7žáCåÍOí*oy½í³ÃéPÉægƒ£¯mŸ—˜4, ½F¦ªƒs,6\n³k’F–nÈU¾%76éÑI)Ü–“œ¿u\r~kÎ𖜑eÛ&޽kÕgßé¹+TÐðP[JþâÙqC†ôí= ¾GŸÁq­ —©nŸ0}PZaßÌšà’h0|¦½jv|,Xy84dtõÊ^ñ#ò¦&夎L´ÌpJ+^Õ'kZäü‚¡ñHsò„Ê™#‹GdæÎÉWÒP”8(½ÈbÀ•&µ¸ñü‚áÜ.Ï‘¬©L¨K+W–œ[’2(½¸—Õ€«<ÎNûéД¦ÃëhJ/Û´.!½¸4nȨ޽â,(\õÁðë+ Õ]á‚ÆvŽ,«oHUžûyñ)y®ö`øh#·êöSÁ’Íßn;wÏ©“†Dd·øaã-,†vî NÞôLk4–¦LZžÙgÀp÷3€`ø—oQ*où~dÜ›7(\™90u¬ÅÁð/£¡lû+í£¯ /‹ƒ½@0üî> Ù3#ƒFMÊ­ÚÖý ñÃo®2®ytGîüæ9Yå…gŸ³:tÌ4 ‚áÜTµWµ>pcÞâÖUÃ&,Êî—˜Ù{Ø„ù}Zp¸ÚƒáÜ““Þo-mz)RÐp¤iôµíÓ³k†F]·Á™®ú`øõãV£*mz!8aÉ#§¬/IÌžÚ¿{ß>¡ÙS->\ÕÁð[÷5T†ÞGáeÌì¯ÕÏ_œýÕÝR‹ñÉ¿ Wu0|¼+tÇ{¡Šà[áÜE·¬U±eìÌŠ³PJ+YHHŸì`ÀÕ ¿}SôÉPáêG[sÞ¼5º; ‚€O '‚‚A0€` Á‚A0‚ €` Á‚A0€` Á@0‚ ÀU ±`8"àŠ†öÓ¡êöSç=Um'Cù u  p%CWhÒªßk}mÇÒœ¹{gEgöùÌØ¹{fgTmŸ9$»º¿£W\0¼Î[~wCüðÜŒ^ýûôŽzÞÓgÀ°Þ½ú vu®Ä`˜XwßÊi)‰Ù5Ï3ƒ3+ý“Ç:pë ‚A0€`  Á@0‚ €`ƒ`Á @0|‘`¨½weÿä±)óïú›Àú—Ϝ׬{éL`æ¾?оŽ®¼`è å×^—:¹qò裲¦…3ÏwF–®ËœYÞËÑ€+-:»‚eͯ†‹Ö=‰Nøüçñð¸…7µ%çÎ}9ݸ’‚áÜU†`MçûÑxøý·GÚR –% ¸"ƒá Lûé`AÃC‚ƒ`Á @0 ‚ƒ` Á@0 ‚ƒ`Á @0 ‚ €` ÁÁ‚A0€` Á‚A0‚ €` Á‚A0€` |šÿî j•—.’%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/tEXtSoftwarewww.inkscape.org›î<IEND®B`‚calamares-3.2.20/src/modules/locale/images/timezone_-10.0.png000066400000000000000000000245011362604102500235450ustar00rootroot00000000000000‰PNG  IHDR T‰=»ÈgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“ pHYs¢¢EÝ1¢(IDATxÚíÝw•õŸèùQ%‡&4šÜ É9§†&CÓ@wŸÐݧÉYP’fQ%HPÉþîÜ {gv·jêÎÞÝ©™©½w«ö­Ú¶Š=§#Š’ôõªúÔéxº¥ÏÏÛïó}ž@à.iØe|BϹs2£×B™%_ïí”ÓBgKºæ¼=*ö«<,‚ €` Á @0 ‚ƒ`Á @0@0‚ €` Á‚A0€`  Á@0‚ ‚ƒ`Á @0 ‚ €` ÁÁ‚A0€` Á‚A0‚ €` ü5@0 ‚ƒ`Á @0@0¿"²J¿ gFËÊâðm0Ì90­wþ¡”ùŸ„ÒBç"±ƒùPVôZ°" üi5ê2¡Y‡Ñǵµ¡_Ûa«R:ŒÙ8®Û´Ý {ÌÚ›ŸZp"~`Š…C(vp_ñø»F„`€ZýŽ#j6ê:±~Ã.ã«ÇޭҰ˸ô„Ô¹Í3óÛÄâaTçìצÆftÒ¤WGtžüú¤žsd] ðgÐkÞ'Äþ%fi¹šõZWn–ž÷Tƒ¤Ñf¿=д×Ìš iójÕï4ªf¶ƒ¯Ý"­qëÁK'uŸ¹§ -x¦ ×‚c½æZœûqA,$ò{/ü¼ =r1—‚ÅWBå«ßÌ­û#n¼Ã9ÁƒÇëµ $¤Î 4ê>¹üý}‚7bb^,fÇ?T©q÷ìÇšôœÚ¼yúüÎMSf4Lè=§I“äiuco×n––×¢õ %ÇmÙcÖÞY½ ¾ÈMÍ?‘›Zp27µðÔ‚´ÐÙpzäB$þ˜Zx:˜<‹ŽâΓ^-à!VµÆÓjOÔ t»¹üý'ê·«tëçÿßë×ËvX©Q× Ôm7¸V,<u›Ô¬q)-ûwKš¸cX·i»Ç%M|yDû‘úµ²<¥í°U}cQÒ=ö­Õü+ÀŸ@Ízmµ›÷ 4H›Q†]Æ:g¿ÿT<2ªÄû-û‡@ëAKýWþSàúØ€ÚÍ{ži‘¨ßidàÙV}âªtósUk<ýÍ"µzjÇB¡ÿÊÿ9P«Iךõ:kðt³”ÆÏ´ÌlðlbŸJõ: /ÿºÊU«Ò¨ë„@ݶ5ë$ú‡€?ºj?SþX·Ý '[ö ui?ê…Im‡­Ìi–š›]§u¿¶?Ûâ‘úG>Z¿ãˆžuZ÷íÞ¤ç´õ; o÷Dývµ«>úT¥¦)3Ê¿ÿÉýcÀÉ#U tº3P¯ã°gÛz~LûQ¦µìé–Ø¿¤^ƒN£Ö¨P+ÕëwÕ½í°Õù]rvæ÷Î?¾ Óø4ìÕ¸Ëcµ[¦V÷Ï ¡g3íF¬ <Õ(©Nbÿâ ½ó»L~sz“äé k·H«4éÝëÚÍSŸŠEBûv#Ö%Å‚"­Ýðµ¥±8v·¥0µðTQZáéHfÉ—ÁŒÈ¥PÊüO :MØžÝnÔú¬XTdÅÞÞvèÊî7x˜Ôn‘úD»ákºv»e|JÞÑ…E—ƒíG®ŸÑ ó˜®O6èP£EVa÷X(Œé6ýÝ”yG"½‹ô^x<Òmúîü´Ð¹PfIY0 ßLñÕPZèlQjÁ‰’ôðù¢´à™E]sÞûQú×€LY{O4èX©êcO=R©r•Jßût¥Öƒ— è9g_ìàÿl8~À;È·¸hF‹Ì‚ 톯ž<÷`~jÁÉpf4ÑkÁŠÇ²`VüíïÇÂ7SöÍ×Åž·$ £<€ê´éW­nû!-žNHnZí±ZÕ¾ {LnÝzÐÒ1©…' 2Н„2Š.‡R O/Œèǧ"¢?·Á´†Ç6n’<-«qÏœFÕn¹ÑZ³ôù)^´èêØiÂöÉ©ù' ºÏxal ÓÃBw‚*O6ìôÄã϶|ºúõªÄƒá©&]Çm 4î9õ™Ä~EmºÏØ3»wþñâNã·Eš¥çÍl;lÕ‚Ô‚“‚þ$*Çæ‘ØTjÑ'¨Y¯ícm†®ìÔuÚ;“â÷RèœýZqìýYMzNÝ$yÚÐî3÷„2Š. ø3¨Q»Yõj5ëTGCË~‘ŽI“^—’wtAï…Ÿ—t»epÓÞ³3k·LëôDƒMv?¨ÛÔ]ù±` øx²Q—* ©sk$ôž“ØeòSS OÆï™Ê(¾î0fÓ˜úF¦6Iž:¸EŸ`NÏ9û ÓÃçcúWüÔk?´N›¡+F%ç,ŒEÂwèã÷Qè4a{AYÓCç~ÇP ðPhÔubBל3â7Qûö¾ e¿sx(5ì2>!yîÁœ¬èµPŪÂÙpjðt$£ørH0€`Hè †ÌÁ¹J\g_µÂ‚á»ÁpoG0€` »ÇÞ|³R â&ÇêTzùúuÁ÷BÓÞ³MRfÄ‚atÝö£7f%e¿:¸sökì´¹~P½Þ p$¤Î©œ–›ØuêÛ“{ç¥ÏÅ'#|¢$-tªèæû÷sRƒg#©±ÇôØïÔ}æûźM¬¨X  p75í5«c÷ïÏI\ gFË‚™Ñ/ƒCV\¹àƒ%‡'¾¸c[fÉ•PÅýÊîÞdU˜Yr­°âýkßûü—ÁËNF‡¯Û»fþ‹Ù°zG‡¡#¸šôÈiž4aûÈ”yGòâѽÊ޾嵵—¦ýë²S3þyÆ›ßê»èlÑ×—¦G¾.¨8à¿Í1pìk3ŠoFAÙ7_ß§ô|dØÚ+,;^š¹L/ºθåVƒV|¼,|8t.zlÎ߯»<õ?~0ïTŸÜþMÜ{L <úTÃê-û†ÛwžüÆè”y‡óû.:^:ýçß^}aòÿ¹òìäÿˆ´g–üð~e±ƒüEÙ;¶o¶vߪ›!Q\öƒxÈ(þ2ØoÉñÒþK-Î*9SÜ'z²$³är(½è/_|ù¥ÒÏæýÍ‚½ÑOgí\½§pÉñq›Þy¾"Ê‚Ã×½·néÉÜ¿/þdAÙ¬ÏíPºmmbÖ¸ú‚õÚ:ŒÝ¨Ý¼÷“m†,ë4éµ ½|V˜óÊÖ×f¼ùÂξ‹Îÿ˜6+z!2å•ͯ¯¾óoùžQ|94hÅÁåC×ì[„ocá«Âakö¯ ,:Yrtá—á ÏG?]p-{û«/õþuá¸Í¯l *¼0g×ê½…û ÎÅeê«[^O/ºrãû¯„FnسnðÊCË2о ö˜óq¨Q÷)uÜC•«T 4è<&pýúõ@ãîSjµ¼¼KÇ »¦¦,¼¸ðÖS„¾Øüú=ë~=–½mûöQÏï]SúÙÜ¿]üÅü¿Zq`EÅéGÁ0dÕÁÁáÓ‘ÃóËB/¸²èóYÿeòŽí;Ò"_çÇãÿÒÏe–\Y}dÙ¸Íïáò†hÚkV,–¥÷˜µwvZðLì€ýjèæF䊹߃PŠ¡k/_°·èó‚ý%Çû”ž(¹õë²¢WBñË—QÁ+?[ÜwÑ…È·›ž+ö6Ä+â ì'öD\ p¿ÕiÝ/РÓÈÀÔ®êµòH£îÙõÚÜ00yîÁ9iÁÓñ«)…*®¨ôíÕŒ²¢_û,ºŽOùÇ¢·Ì7ËÃà–+"ýÚ‰¯0 ð xºyï@³ôùÇë$>’šÛ"iâËCzÎÙ?¿wÁ‰’Ôò9ùãSx2›Øã©›ýù9Ÿ’o&øí¤ÝœØÇ»ÏÜSâ> ð€©Ý"-Ðiü¶À“ ;>Új@Ib‡1›zv»96[nNrÅlíÙqÜÖäŠy1>ïÝš{ŒÍ‹?˜NñÿRìñƌߖÒi·“4a[¯ŠÙÞ«Ýð5)õÚ©q×ÿƒü:5ëµ)ßÝ{Á±;ùöJ¿ãÜ}‚ T}4P¥zÍo&¾ùºúu¿™Çžn¨Q»é7S½fÁÜG‚ €` Á @0 ‚ƒ`Á @0@0‚ €` Á‚A0€`  Á@0‚ ‚ƒ`Á @0 ‚ €` €?G0˃a¤`ÁðÁ°K0€` pW4KŸh‘ŒMa EfA yfþ·“±06 Ê'þu“h–6¯|RsoÌÜØÌ $ôšhZ>3 ;kZ eaÁ–úI£ºN 4ê6ég'Ф×̆ ½çÄfvÃØÁ~ƒ&)3¿äé±™V?>{NMNýÆ=¦ÔkÜ}r½Fñé–›Iuu›X·Q× uvW§Aç±±S§a×ñI=fe…8϶ʪY§M¿§ë´éÿ³HšøÊœ³>œÑcöGÓoÌ´ïÍÔïMÎ-3å{3ùÆdwŸ±gFjÁ‰…™Ñ² `€J•ö£6ôë6m÷¤³öNø¹ $Ï=X;ÈÇW~édþÈû·L8>¿± à6ªvÉÙ9%-t¶èÆ‚Ÿœ@òœ%™ÅWîÓ½`€û oeÇ‚!?vþ¹ckÁ‚A0‚A0€` Á‚A0€` Á‚A0€`¸{ÁQüUaFñµBÁ‚á;çYÑó‘QÞÜ8rýîõñp n™Ë¡AË?^6pùÑ¥E)¾vÏÚ!«>\Q|%Tñ ” øÓCü”¤²ÂØã§% Yµoå°5ï­ë»ètIfÉ…È Ÿ,é·ølñí~ÁÐ`øî\ eE¯†2£çŠú”\š½mõ;ÃÖ¾¿¶Wð¯ 3ŠîÅ>Áp0|ïà=òepô󻞟½kÝ{#×ï]›Y?UI0€`ˆMZä¯ùyï/9´îröÿ:Xpaðª#Ëîî•<4Á^ô—‚i¯ox;ÿ£¢ãÙÛ·½Üoñ™»¼ŸA0ÀC ñ黸\QßEg‹3НïþægÁU0¸¬*<ØÁß6ù:ÿÖí‚Cù ^yxÙ”W¶½ˆo) nÞK-8vÓ[›ò?*ýdÌ »žÏŠ^WÃÜƒÑØ¡Ìhì ï ð€ÃÎX0œ ÿø½ï¢óå+ 7?è:uWI¯Ç‚½~ö;ÏçÁôÈÁ`0$MÜ‘“2ÿ“’Ô‚“E?76CW¤t³±çï=m‡¯˜’w$7V%!Á”Ê­/íÚiÜKYI_Éü¹ ´¶2Ðqì¦Ølþ]§~Ò¨¦=çÌÉŒ^ x°<ÿÿ]½~=ðÅmæ®iÔmR³X0Lƒà»wŸÒ<¹<œ’|O“ž9ñ`˜f…øa0$Ok‘œ+€Ñ4efËäܧ à‡ÁÐkVbrîAÁüPBêÜVɹÏ ÀCîý†©åÁPÝ_0ÍÒòZÇ‚aæý †nSß ð@Cú‚6‚þàêuhØuB|ó/Ÿ”™æ ­0ÀÝ3­2+=ÛºoµºmÖø¥S§MÿÍÒó’’çœ%à«qÏi5Zö+NNš¸cd§ ÛGüÂûú)½|–Ÿ- øƒjÑ'\+“²¢×±ƒÿЯš’û ‚î™VÕNšôrNE||8F0À=ÑfèÊg:g¿>£b/BÙÍ)?(¯8ݨ,ô›æ®œ²$àžh=dyíN¶MN-<•›Zp26'榞žŸ<ìÿÅüØÇæV|üΦwþñÅW<ŒêwY­a—qM›ôœ–ŸÆÝ³[¶¾&+iâŽPbÿâaMzNmqósw2MSfôL™wx~,B‚¶`è0<Ð it q÷ÉåÓ¨Ëø@§q[Ût›önq·iïŒ|¶ußš7?w'óH‡ÑÏIŸ+ ðÐqìæ¶És'Ï;4/±qÒo}¾FÝ&%¦äÉûýVÜ7Æll×sîHZè\¤Ë”·F<Ñ Ýwú\ÕkÖ ñ[ž·VÓîUÛ~~lzäb¡`€‡5Fß _–¯2ô˜ýQnâ€Òvwúœ>Õ0:·RãSZ¦ä]˜Y|U0ÀC c6µOÎ=XtK0S OuÎ~}p­„žßéóV«ùl  ñ½ ã2~Ó*ƒ`€û ›Û%ç~üí Cl²¢×B=f87q@´MýÃîèyuÏ4ì:¡RBïÙñû2ü†UÁ÷16¶ÿ~0ÄÒSƒ§"³_T¯ýš¿åù$®ÖaÔóã3Š. xØ‚aty0}7â§&] uŸùAn«‹Zÿ–çoÔuB¥¦)3[¦äÉ¿³UÁ÷/Ê÷0ú‘`¨ØË4ñ•O5éöøoùM’§Wo_±Ê à! †? 7®˜Ô}æž¹­,JÜyýÎîþ\³^ë@ýŽ#+'ôž“˜’w´ ³äª`€‡&F¿ðÓÁßËPxª(iâŽ~õÚ©q§?£ò#UÍ3V¬2_) ðÐÃÆÉóÿD0Tìeè6ã½¹­–¶|¦eÚÿœI£*7KŸß2ö³~å*ƒ`€û cn « ‘N¶õ{¶UÖoÛË2óÑö£_ˆ¯2x(‚áv+ 7ö2t›þîœV5û-?«N뾕›§ÏOL™wD0Ààýè:¦Ü.nìeè8îÅ>µ›¥Ôø-?¯eßðc¿n•A0À}Ó! y‡‹>*îþÜmÚî¹­”&4ì:þŽ~Vͺ­uÛ |¤EŸ`«”yG <ðÁ°1 GŠn 7÷2t»%³~Ò¨Çîôç5í=;Ð<}~ØÏŸñ‹nä&àwÓ,-/ÐjÐ’@Ÿ%è»ìorú,þkàúõë7‚áè/†ŠU†®SwÅ÷24ù-¿cÝvƒª¶ìNNŸ ¸‡t[©q)%(©•8 ú“Ój`i­–ý"µ:ŒÙ”Ükþ§¿(nîeˆEFFíæ½ïx•¡v‹ÞU[dvK ¸‡š$O¯Ú"³ O·ïçuŸ¹gÁÏÎŒ÷ç'çÌψ\ ÿâ«EËâ« ³[ (mtÇÁÐ2M0ÀýÐ,m^µÖƒ– Ê,¾ú+ï¨üË/sšZp2Ò~Ôóiõ: }T0ÀC WîR0”ïev™²sNbÿhÃ:mxƒ¡Oé¥pVôJ讬2žŠ´¹¾|•¡j§<Á †Åƒ¯øxéü=‹ŽNÞñâ«é‘¯ âÞ¿k4DËB]¦¼5''õíï(à>IHÍ«ÖvHtð„­;¶®¹˜óïÑcsþnÜ–û.:[ü{¯4¤žŒ´±®÷³­ûÞö@¾R¥Êj5Ÿ pûÙh‘YhÔm¢üX0ܼJRzäËÂÌâóáŒâ²»vÕ¤´Ð¹HZðtQZðLńΖOzè\Qzø|qÅ\(N\(Έ\ŒÍ¥¢Œâ+‘_ºÁ:ö\ñ`õDýv·¸¸ÊmgÐâ*MSfV®Ûvü\0Ü<è¾[±ðíóÿÜü¶çÏ(ºî9g^DZ[Æ'MØ>ö̸Vý£i±hxÜ+n Ò”3НÞÅeÁÔðµÂ´pYazÑ_ ÒÂ_çg~E¤øjìë®ü¢‰mש»´¼¬q b?ðàÃÕ`ŸÒ3ŃW\ž^t9”Q|6’þª`ЊÏç¾»bßÜÝ«÷NØúÊ‹Óߨòú€eŸ/ú-«©ÁÓE톯M¯Ûvà£^ðCÿ%gŠóÞ_rhéÉÜ¿Ï}7z´ôXþÕ鯯Û=Ï¢#ë.Oø–œ˜ú_CÏ»¶òÜôÿmìæW^Ì(Šß?âÎïFÝyÒ«³ûש•Ðà îm0”,ûtɸͯn¸üÓÅ¿ä{ú-9[Xúñ”WžÛ5kçʽÁù—šò¯«ÎMûß öžËÿ(ÿ|ôØì¿Ïyeóëi‘¿æg]+ìü²°Oég¥}Ÿ,I½?jÃk'ïxéå!«Ž.½õwÈ(ºn7â¹a ½f»Ä*4ì2®r³ôù ;g¿6!-t6ôs§ýÑ=™òòŽ^|mk|Â͕ЈçÞ_ýo¥ÅoVwË*C·é»&ö/n¨TÉ%Vø“C× åMSf=Ûa̦a©'âqºq¿ƒÂËŽ—Î~{õžÂý%LJ¬:°ò‡çþ—Ý]¡Ë‚i±þøAÿOŽÔ§ôRxÊŽÞXwyòÿ>4篫ÎOÿoÅŸ,¼’Yr1üíêÑo®gÁÞ%‡¯:°"«ôdÉô76ìZqfò¿Eçþ%x ÿŠ3ÓÿkÎ+/¾:kçsï®:›ýßî]|$-|)”þKÁ¤m¯¼”ûî²#7ì];vÓ››²·o}eèš}«ú-9MŸŽo~ÎhÔubõGªÖð"àÏ­Aç±¾Kÿ!Ш{vÍ6CWf¦ä]˜Q|%”QüUá°µWYxuÅÙYÿëø-ß¿téÕ`|ÂÀåÇKãW&ú=ï¿ÐÉÉèØM;7ŽXÿΆÐÇæ¼³|fÉ•ÐwW".…û,:W”Q\q SßÅg‹‡­Ý¿jЊ—MãùûÂ'Çl|û…!«/³ñÍMƒV]Ž!«.ºúÐò¾‹ÎÇOU ž[s1ç?Ö\Èù÷è'sþóÈçö­î4ñµÙ­–>íÕ1ºM ,8u=cª'ˆvë9{ßÜôÈ¥püô A+?^>rýîõY%—ÂßÝðé’{*¸0ú…ÝëÓÃ}~tŠ¿]qÈ*ýñ ‰ÿ鑯 n®|Äïÿ¾øïŸ¡«÷¯,<9::3|ݾUý—]Ròé‚kÑcsþnÌÆÝâ{ÆoycˬköDÏ쟶öÐò^ ¿'ö/éüL‹´*^pCýN#Ï$fVi‘Uк۴wrÒBgç•ýà@}ðÊC˃‹O”~6ÿ«ñ[ÞÚ¿tê½¼±[|eaðª#K'm{yÛU‡–ÇOª¸ÃÍxøªpøºWG‡Î)¼ßèÜoÉg‹ ö-þ¤pñ#Ö´:£è«Â›W`Ê(ºJ\ùæù;ŒÙœÝ¢O°æSMºzaÀMuÛ T}ìÉÊ ½ç4JšôʘԂ?ñ÷¯­ødéÐÕWį^toï]ìSz¦xÎ;«?Xu~ê¿Î{oùþôHYáˆu¬»é­M}JÏU\’õJhЊ£K­8²4³är¨"&âWJ:Uÿýîg$ç Æ‚¡e­&Ý\bnU§MÿòÇÆ=&?Óa̦½æRxs3ô÷Wâÿ'ÿö÷S¸s)<~Ë››~=6~뛇®9¸¢èhÁ¥å§çüÓ¤—^ÞvsÅãÛU‡²`ZøJpÁÞ¥‡¢ŸæþÍÄ—ÞØ’©8ªßâóE}J/Fâ7Š‹_½)~:S|GÛak†7ÏXð¨W|ϳ­ú”?Öë0äñ¶ÃVõê9÷À‚ø} 2£ew´";8¯8@ÿ=ãâJ¨OéùHÅ]¡+®œ4ÿƒÅ‡‡¬>°âǮ蔾,Ü_ôÅ’/¦ýsüfnñ+&eEO”DNÍ{/z4rh~YøPÞ—Ã×\™ºj?êù)-ûFÜ“~Ì3-ÓÊŸnÖ«z«¥ºÏxvzøü¯Ž†ø‰²·¿úÒø-;7õ[¿ÿÂÝY‘(ßì\¾AúêFKVôlÑì]«?È{¿äÓÏ}´:¾ 1`Ù¡¥¥Ÿç¹èóÜÿ¼è³¼ÿTz,ï¯ÃV¿·¶söΩÍRç5©í®ÏðóžlØ)ðèS ⛡[t™òfvjá©X4\ûÅwxºæýµ+ÎLÿ—è§³þ§Ïí[ýÃÿû/æZùÝžK>Í¿ºôäôžøÒ[ã÷„È(ºÊyeÃÎñ[¶îè¿ô“%™EGu™òêä„Þs?Ù¸Kå'tð€Ûy¢âÀ¹RÓ”™õ;ß6²×‚c¡_¶ÒPì¿ôóÒ9»Ö¿;íõMoÆoºö‹V¢W·;LߺQ{ÌÆ÷Ÿ·yçÆþKOFãû/†®yoíÒ“¹ÿPò鼿[½guÇñ¯mÚkvƒêOÖ¯T»Eš?<üR5žm^þX?iôSíGmè—œûq~FÑå`FÑ¥ïLæ÷¯@T\V˜ù2˜¹VP~¯„ÛܸmàŠ£Kòö,>¿¡2üEÛ¥^Û‚ƒ` Á@0×…¾‚¸p0l €` ÁÁ‚A0€` Á‚A0‚ €` Á @0 ‚ƒ`Á Á@0‚ €` Á7—>S6ýQ0‚ €` Á‚A0€` Á@0‚ €`ƒ`Á @0\ÑtúÇÔîþ6 †Öì%üÚƒ¡2ü×pÑæ—š 6<×X´ùå†)›žß’½äЂ”ÚÖDû~UÁp2TÝþU¸{Ú¾ —ìx«9cÞ¾íI¥uÓ&Tl“µøàˆ´Y]ÃÆ­íßXrOû®Ã`Øðûõ§ƒáÔµ †S¡ê¶ã‘©ÛÞO^õØöèÔç®xxYrå®ÉÃ&–g O©LY÷ÊwAîò‡‚ÌwÉU ÁˆI3í ¸¥ÏÞSZ²ó†šŽ“ák §BUmÇÂS6>N©iY?¡dDü„©Æ®é5,¹¤GÜ =†¥”÷è7Ж€ÀÀ‘½2æí«ˆFCculjðO]a—ì|#’>kûÒá©UÉ úO¶•àÖoШ>óï¨(Ýõ^Ó…¢á²‚¡2üE¸`ÃÓÇ—M3"ÃÛŒàf0xÌä`ð蜸ŒùªÊ? Fd̲%à&”·úpðÆwßñÉeq™ –X#œ í_…§n{¡#Íáå îÌS¸jäwÑ™³À€›\Ü ‘Aʬ¶`XJÅ-™ ï^Pù¢åÇÇ0t};}j[iÃ{-E[^Ù¹àΊÑyËF$fÏíqúNƒ¾†ÛšpŠO. Ƭ謊–ÏbÇ3œï,I§¢áp*;Bº¢åÓÖ¢Í/­O*­K›µÿ?kŸÊ›? ’kv‰™³mQ¸ÉŒÌ™ßcláêŒh \(~0Ñp¨ }Ê_ûäÊŒyûF¥N$&•l3¡j[Bbæœ~‰Ys»Ã!>¹Ä–€›*>»H0DC¡¶ë›pulj¶h0t–7}Ü>uëkÍyk7¤ÍhoI*Ý´iĤéé éµýã“Kû9©—M 7{0DC¡¦ãd8¡¢-¯n+ÜôüòÉ«ŸS°á¹úÚÝ߆«Û¿j-¬{¡5mfçÎQ“ÏOšºqöÄêÆYc ×$Ù´p“Cu4¢1*ÞúZSþš'ëÒgïY–6«slbö¼ÁƒÇLŽOYQ¼åO-S·½ÑRºóݶ¼5‡[Ç—mY?®h]eô{'&•nbÓÀM …u/uÖ½¸-wùƒ‹R§…’RjCC2f Ș H*ÝŒ-Z×kBÅŽøŒy'ÍÝ;*mFÇøÔíc¢_’^Û7}Öî ©¤Þ–€ܘ‚Á°”òØY’Îôœ6³£ebuã”Ôé‘‘*¶IÌš7¦pM46uÿиâ Aæ‚»‚šöÁ¢Gþ¿ vm†=ÿþ]2- ›Xn«ÀM ïÀ„ ¹º1v†~)µ¡òŠÐÑ–î`(ªywtšr—?PŸTºyÞˆÌY£GdÌ<ïôêÛ?2® [¸:˜{Ï ŽFã!1{ž­ 7°Ácó‚9wý×`lñúÙKÍ(Ùñç¦êïs>s C¸¬ñÃHúì=kcq‘±àŽ`buS0iÎmAô‚¬ÅƒôÙ·I%uAßþñ½Gç-ýÞ)ÑÉ‹Ã@›nL±Å‚>· í6£-§`ý³ë*Z„xÕïÏ’t2vv¤Pé®w[²—þvî¤yûÊR¦…ó2æí›š³ìþéÙKMO™ª_¶µ"kÑ=Ó¦n{½¾`ÝïšS§E O­rÀ3Ü`’+wƒGçô=yq|ö’{g”lsWuû×áî 9ÿ8¾?­j4bj«h=Ú†ÊÐѦØçÑÛPyó'-e¶V´|ÖýÞHYãGmÙKï›?pDzœÍ 7ŽIs÷ÅΆÔ{buSÆ” Ï®«hù4Ú§ÂÝ—Yø§‹9ŸçÂm§Î®ï§ûó“áhuD¢·‘êŽíEõ¯l•»hœM׿Þqƒ©;þ$•ÖÊ\pGmaÝ ;Ë?j­l=ªh=ÒTù2|6N](Îh ´U·ÕV»ûÛØêC[áæ›‹·þi}ñÖ×7N^õØ´h0 µéàú6pĤîÛ”ÚÖ1Ñ×ñËbïÊ_÷LCÆÜ½k³ý¦>mV×Ò¼U--ÙñV}YÃM•á/B?¾ÒóCáôÐ-¹Ë\“·úñ•…u/6æ¯}zUôd'¤Õ&$fÍK˜ [®cC“Š‚Þ}öNŸ½'§pÓó›ªb1Ðu*TÞô—æâ­¯m*Þòê–º6NšsÛœ”š–ùÙKîÝZ²óíX\8*Z¶f.¸c倄´Äøä’!i3;“’J7Çÿ÷ï¾ Få.ÆLY O¯±õà:5òûK $¤O˜µø`ÕÔ:{`s4j»¾ Ç&vœryóÇ­e ì(kú¨©*r‘†hq´æ¯}ª~láÚÚèý÷W´.˜4o_0±¶%èѳ—-×¹1˃ӯå×'N^õØÂØ»‡j:Nþè,HçÌéã—/~ CUÛñPޚÛÆ¯1¶h:€̸âuÁà19}R¦…Ò§lüÃúÊÐÑð#ásN0Tw|šºí† å[K†Ž+è?aª‹²À d|ùÖ 1kî€ÌùJŠ·¾¾½ªíxäjcáÇÁÐþU¸°î…]ÃS«2ú›0fèø¢Ä!cóƒ¡I…¶<\ç’«vI¥u#r—?8§¬áýæèëüŸ çKRäËÖ¼ÕOÔ§ÍìX5hTvbBZMÜðÔÊ!F¤õJȘ ‘ ›×Ãî€_^ï¸AAÑæƒqEëz¤Ô¶LÌ_÷ÔêŠÖ#±×ö០?†“ÝWv«n?‰Meèh[ÞêÇw O©Ì5yɼ¤©Î_6axjU¡ã‹ I*L´kà—501=¨ÿà»`d“æÞž ‡­UmÇ/~`sçÉØ"A8vìrìãË †®Ø”îzogaÝï7Ö=³qêö?µæ®|dÛø²úì!ãòc§UØû–Á}â“Ë$¤OË–Z9Æî€_Nü„’îÛ±…k†æ,ýí´’o5> ÒÅ vBÁ†ç:Šê_m; —†©ÛÞè*oú(’½(²ybí’)ª×åå®<¸#V&ÑkÎ\x׬„IÓ“JêFMš·¯(Z.Ë'TlO–Rn/À/`DÆÌØMωU ãò×<¹´¼é/ߟ õòÞfT}­_þk$v±æËzKR¬2*[ßì*Ùþ‡æâm/ïŒþ–îoˆJyó'¡¢Í/­/ÞúÚÆÒ]ï6•5~Ø–·æðâh0 :߃ïÓh÷×ÞèÉK‚a©Uqé³vçÖ½¸©2ôyäJbáêaèú&TÛõm÷•ÞÎù…?¸ú[tB­ŸµM^õØòA#3ô6©ÇøÒ­=Ǭè}ì=¢ÿÄ Ù·ïÀ„>þÏï‚Iso·GàW¼¶ûvláêA™ ïª*ÙñÖ®êØ)Sÿ…±pÞ³$]|N…ª"_´lxnÃ𔊉ISWg¥ÏîX0iÞޙʷ¥È˜1pTÎüìĬ9ùÃÓkã“J6õ±kà'ÆBѺ w¿þ=&Tì™»üÁÅå͇.yÕæ_**CLÙðûƬ…w×O^y¨«dÇ‹Um_…¢…Óœ±àÎåÙ‹®Ë_ûÔ–IóömHÞ–f÷ÀÕ›P¾5{OAQýË;ªÚŽ…k~ÁX¸ÁÐ áŠÖ#-S·¾^Ÿ³ìþ…I%Ó£54jbuCþ„òm‰Ø½£ÓÃÓ‚`tÞ² hûëÁØ)«ã³œ{ Rõ5{ЕÎÑöšÎ³WŒ¾Š`ˆ£p*ýÚªÛŽw”5¼¿+{Ñ=µ£ó–ŽˆEÀ QÙc²ݳ&oÍáì%÷f^`›ô‹NOO ~íFfÏï¾P¾m|ÞêÇWÄN"ôK®(LÛýiWM牫†ÊÐç¡Âº¶å­9¼(wùËÓf´-ŠŸ05%©xCJæ‚;K&¯|teéÎwš‹ê_nÍYr(ÃSÎ5 !%èÑãô»÷Òjz§Mo˾Ʈ¯Šü¼§L½ð‰Œ®ô-I±‹Btœ •7}ŠÁŠñe[¦ŒÎ[:gTîÜÙ©Ó›¶æ­y|[ñ–Wv–6¼×ý#ÛjºNEŠ·¼Úœ½ä^Á?0t|Q0"sf÷Ç#sôϘ¿zÉηªÛ¿¾bá a¨nÿ*TÑúicñöWš Ö?N™®K*Ù´(gÙËJv¼.¬û}¨hÓÃ{j;^=P~uyË]µ]ß´F' ˆÁg O« Fd͉}Øc|i}bôuõòŠ–OZ~xÌÀõ ]§Bµ]ÿ[)h¼úÁ)Ó7ÌO›µ£&{IK8íáÎ’oDªÛOœYyˆ~ïçíÓvé¬éŒÑÉî¯wC½`€3FfÏ‹]„-è30¡wêŒöIë·¹*r¬õ×2»®æGÁp²ûE~ìË›?ˆ”ìxî¶Ò†÷Â9Ëm-ØøØöâm¯·D?T´|ØYÑúAÇ?ßÉ?O쾊bÁ°X0Àé`˜ †Á“æî­.¬{¡¥2ô׎ªÈ—×ákÿQ0Tµ¬²!íö‚ OÞ^¼åɽ­Ÿ¶G¿ÞÖ}E¹®î3#u¯(\ÎÒ‚Ε^$Lš>*mfgÍäUÍÈ[ýøô¼U×Û<6=v©„òæON¿öCÎÒûömy©m|ÅÚí w†Kw½³»ºã§½‡êL0d è68© <.¿w¯~ûD?½^§o|rÉØÒï¶Lßs´sÍ#òV?qkþºÇ»Š·¾ÜQ>>S?5ô g PÜ=ÃRÊ£Sq]ΈÜAbÖì‘åo†6¾ãÅ-Ïî~+˜ºí®êö¯ÂgX¾#àÆ?aj,F•7ü)²øà3÷͸õhÇU\éY0ÀM ™³G•îz¯ùÌa ‚8O0œ €`ðS|÷ÝwAbÖœ‘‚®o=‚Ó×EèýsÏà1“Ç”î|§E0ÀujDÆÌ¸qS7”ä.`iá¦çÿœS°î™U­GBg.» à:3jòâ^ãË·ŽÌ˜·¿zÊÆ?4V¶m¯Š|ÙQ9Öþ/Ÿ¶cí?¼F›`€ëÌÈÜ…AÖâ{‚„ôé½'Ö4ÎYvÿÂÒ†÷«Úއk¢¯µk:O]Ó×ïÁסá)UÁĪÆîGç-KÉ*Xÿ»ÕåM‰_©é:%€ 1iz÷ŒÆä¯œµðîÒâ-¯nª }þ9VÜ Æ¯ÝôL›µ;«póKµÝoO À÷³æ“æî[°á¹Ñ×ÝaÁœ# ã ÁÁ‚A0€` Á‚A0€`  ÁÁ‚A0€` Á‚A0€`  ÁÁ‚A0€` Á‚A0€` Á@07f0lÿsWôƒpMì—;¡ËŸSç|^»ûÛpñ–W[r– p=C÷køKOP°öéPÉŽ·Kv¾}fšNÏ;çLéÙi.93»Þm.ÝÙ=-¥»~8ï·æ­9Ü”1wï$»®·`8*oþ$\Úðþ%'H*©+ž4ç¶ŒŒyû¢³?#sþþÌÓsGfæ‚ØÜ»2³b³ðE±ùÍéY|Ol²³<=KîÍ9=¿ÍI›µ;{BåÎ!v'\_ÁPþ¢}òÊGG_Óæ,{ /gÙýœ W¿AñÕmǃ̅wÑ ¢Aðýü&:÷Ñ ˆÎÁ »{î ¢AC§géo»'gé}§gÙý§gùƒAúœÛ‚äª{®³`¨h=Ò9iÎíEÑ»êU²ãí ¬éã NÐoèØáÑéa³À¯'2æí+î;`xßKþ2Á¿Î`è#@0 ‚ €` Á@0 ‚ƒ`Á @0@0‚ €` Á‚A0€` þÅÁ7hä°[ÿ×ï‚ñ¥õ×tÆ­ Æä/·7ຠ†ýŽú蓘9;¸ØC’¦$'fÍ:2{Áµ¬¹ƒ3gõ±;àú †´™å}Ž7(±_Ü ‘·\h‚ì%¿]?eãó+ 7ýñÚMÝ +r–þvIÚÌŽqv'\_ÁPÕv¬mÊÆ?lÈ_÷ô‚)ž›w± J¶¿µ;úC‘š®o®ÙÔîþ6R¼åO­ÙKeØp}C÷tœŒT·Ýv© J¶½ÙYÓq"tÕ¿è<}à¡¢úWš³œdwÀu —9ÿÊ`hÊZ|OºÝ ‚ៃ! †Æ¬E¿ Î /7d-º;ÍîÁpÞ`È\(@0œ?ve.¸S0€`8O0l~igæü;RíN †‚ÃyƒaGÆüý)v'†óÃöŒyûÜüÁpꊦv÷·§ƒav'ÜÄÁPý·ÊÐÑPEë‘ËžÊÐçá‚õ¿Ûš6«+Ù6NÅ ){ñÁ•ÙKMÏYúÛË›e÷MOŸÕU>¾´~¸Ý 7o0„+Z>ÝžTZ—“½äÞà²gé¡ mfg0¾t³½ 7{0Œ/«Ÿl·€`¸Ð Cn‚3“¹àŽ`TÎüîU„Ü•?ü·+ôY»ƒ åÛíu¸Aƒagêô¶ò¬Å²£»4çÖ!£rö~}Xö’CÝ_O›óÐð”Y Ï\ý|Ééï»ÔÄ~nbM˰¤’ºžCÇM±çàÆ †¿…ª"_†Š·¼ÚR´ù¥†Øn~±iòÊG—%fΞœ1ÿÀª¢Í/7Ö½ÔPÙôhGM냻‹·ü¡©ðû|™¼ò‘íÉU c ŸØÃ®€,º§ëÔÙéü[[ÉŽ·Ö Mš2~òªGËÊš> Ï9ðþÞÖ7»>îú é›•þþ¾ªö¿·œó3™ª¶c‘hxÌ_¶¥_ à †Nlj¶’í^7xLnBÊ´PôþqÓì½ÞÞôÚîÚÞmþzÙ}Ϫjÿ·–+y…u/4M¬iÓ+®¿d€9ª£Á05 ñJ‡§VõÉ]ñpeYÓGí³ö}¶{Îþn­íú*ræÕß´Vwœj½Ô}VEŽ…3æïŸ=¾´..cþϸ±ƒáÍî`(kþ$˜XÓ<¾pÓ뢉™X˜yû‘Î…¿yóÀ¬½ŸuUw\Ö*CcrUèøäR« p£ÃÐñE‰±{˰ q“W>Z]ÞüqÛ÷Ç8„*#oÞüìÁçoûtóÞö‡»_ªî8‰EÄEWÚŽ…'ÍÝ;;¹rGß!ã < à*‚¡ªýÛ–Øëñ³ÿ™ÿKöh0L8 ý†Ž‹­2$Ö½¸9¶ÊÐ mÿÖ²ñ©‡žêú ñ›Í¿»ïÙšÎc— †šÎ“¡¢Í/6N¨Ø>jðèl« p…ÁPÕþ·ÖÕ<ýà¶çïxeɽ¯Þ]ÝþÓ£á*ƒáh08󀇧×ö¼òÑšò¦¿Dά2Ôv‹Ì¼ý£=Óö|Ñ^Ýqê²î»*òel•aVråξžp%Áp*TÙv<úsǧw|¹æÿÞòÜÁ?VF¾mù¥VÖÆ? #s)5Í‹ê_þÇ*Ùƒž/½²pî*CaÝ‹ãKëGe•.?b¯ÕOµ.¿ÿénÿ´þ?íùxÛÿ²äÐ ¯ô ¦?=Ú¿î^a’4%á‡:nÐȸɫŸ^ÞüÉ?Že¸š©Š ÅŽeH*­ï³ä±ÿáÙ— ß´ÎÞ÷ÎÞöwÃ_ìùËŽÿ°òÁçîûE‚¡ø<Á“RÝœZTÿJ}ôû"Wý :N† 7¿´+©dóÈá©ÕVà2ƒáÌ̸õ“®éÑ©é<þùß’tz…aíq…? †Ác'÷Ë[ýÄÌòæO"?y•aÎm³Rg´÷ŽŸPìW § 8õ Võû`<6ø??ðøä’`buSZñÖ×êÏËpu« Eõ/ïW´.qxj¥U¸¢`¸¼©í:ž¶çx$v{íWÆæ ?߃<6/.oͳÊ[~ò*C뤹·ÏJšº¡—§üÔ`8®î8§BUmß´®}üÁ§:Þk<¹òÁ§¬íú*rí‚aëë †Cÿã»`buczô{¶üøX†S­Õí±S;j½Œ³1ÅVvŽ™²2axšcઃ¡ãëð†Ã®öž?λ㽽µ]ÇÚÖ>öÄ£‘·wº÷okÿßÖ7ÂGæìÿ¶k _uÃàÑÙÃ.ôô‹wKþš'çV´|vÎ*Ãô=G;þæOw͸íHôw^ÖuZ&͹mæøò­=7½÷g\q0|ÓZÕþy{ׇßîÿ|ýÿ±æÑ§ªéú`ÏÞ£õÿåÖ7ýûÞÏ6þ·»¯ùV=üÄ#5_‡¯E0´OÝúÚÚA †¡cƒäêÆŒ©ÛÞüÇ*CìtNõÏ|~ï‘mÿ±þ¹ß¼0}Ïç—:£{•aË+;ÆLY™˜1Ã*\A0T·Ÿ Õt|Þ^Ý~<¼ú‘g\ø¡'çßùÆÕ<üÄöºÞm~½ùËÆWZ4ýi÷ î~ó@MçÉk ¯Gƒ!gØÅþˆa©•qùkÏ­hù4|æ"n?ðtׇ»þ¾ñÉûŸ™¶û‹öË9r»2òEkúœÛfN¨ØÖÓSbÁ°÷’ÁPù·–MO=ð»[ÿ²ãÚúû{^¨jÿ*\þŸ×>öÈáÝòï‘·w|{à‹Mÿ[ׇÛÿü;ßÚWÕþMëµzKR{ñÖ×Ö“{Ñ`HÌ™;cRæÔíoo™³ÿ½}Ÿúí³Ëî{ö¾9Þ¿mÚžcmWpÌD¨¨þ•£r&ŒÎ[âÙÀ¯^Ê´ð¨üµOm¬é8yÁ3“V¶ý½¹î™{û§›ÿóöçïz¥ºãX$öŸøóïxã@ÃË·¾³þð¡g·=¿ÿµ ‡ï{fæíG:/ôŸùW mßÃèœøKý!qƒãrVü~î†Ç÷ÿñÎ/7ý÷–×Û?™½ïÃ[côÊΘôe󤹷Ïì?l¢·%ð«7pdFïŒyû³£¯Ëw],¦í>Þ6ó¶O»¦íùòÿa2öõHM׉ðé3#]üânW Gf^2ªÛãË›3gv=Þ¾åÙ{^Zqÿ³÷Õv»âë3ÄVŠ·¼²mtÞâVøµ+¬{!ˆŸXÑ/káÝSKv¾Ó\Óu*|-.Òv‚áx4þ´ær‚!fИ¬[òÖ<³ ¬ù‹ÖêŽo[¯öV†ÿÚ;cÒÈœùVøÕ‹C0¶hmÿ쥇ªKÞoý)×@ûÃkk&¤ ½œ?dè„âØ“rJw¾»-úóW]>UmÇBykžØxK|RO‚ñeõÁèÉKå®xxvyÓÇáË9©ÐUCìô¥•¡¿¶V´i¸ÔDHË”MÏ/:ørÿØÕŸó×>µ¸¢õhøjË' ùëžÞÜo𨾞pÖØÂ5 ykž\\ú-žV ›X _»"t0`DZpK|RÐ;nÐ{¸z=&V5¤o}msuû×ái{ŽµÍ¼ýÓ®Ú®ášÎ‹Ÿ|è àç1t|q0,¥¬GÚŒŽÉS·ýyÛ콯ï_õðýO.üÍï™që_v×vž  gÆüý%%;ßnœyÛ»·/üÍ3÷ÍÙ÷§µ]Ç#‚ÊŠËZtOmYÓ'MÕß„¼% ø‡„ôÚØñÃC 7¿TW9ÖvÝô übúNÙø‡ •á/®,r–=Ð3nð(›nnqS6>eÁ½ô¾5GfõNH¯ &¦Û„ NCuûסÒïìÊ\pGy|òÔØÅÔº¯‹†ÎšŽ“ÑON†Ê>hÊ^rhî¨ÜEƒº£!©Ð¦Ápâ_¨h=Ò2yå£+Æ—Ö'Fï¨ÇФ)6'†³_ŒÓP°þÙ©µ¡”èõŒO.µI@0œê¶ã¡¢ú—·Mš»7¿ßàQ}ã'Û¬ ÎÌ©PuljpÉŽ·²¬ŽO.»çø Sm^ ßOÇÉpYã‡-¹+š?*wÑðؽO«²‰@0œŠ–ÏBùkŸ^=¾tó¸è/è™Vc3€`8;Ñ; núc]êôHVÜÀá}Ò§ÙÔ Î×PÕv<\¼õõí“æí›:d\~ÿ“D† Ýþu¸tç»ÙKMOÌœ9´Ï-ñAÊ´p:=¤Ô¶«›‚¤ÒÍÁØ)«ì øuÃÙƒ¡Ë›þÒš»ò‘Åc W[´¶wlƬè=*wQ{%LšÑþ€_c0œžpEëÑД¨ËZ|Ï‚ì%÷ÎÍ^|pvÖ¢{f¦Í쨞P±}„}¿Þ`8³ÚpfZ»'úµ¢ú—›³—œd_À¯=þij»¾ oy¥%{ɽöÁ‚A0€` Á@0‚ €`ƒ`Á @0 ‚ƒ` Á@0‚A0€` Á‚A0€` €` ÁÁ‚A0€` Á‚A0‚ €` Á @0 ‚ƒ`Á Á@0‚ €` Á‚A0€`  Á@0‚A0€` Á‚A0€` €` Á@0 ‚ƒ`Á @0œþþBh¹†—¤X%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/tEXtSoftwarewww.inkscape.org›î<IEND®B`‚calamares-3.2.20/src/modules/locale/images/timezone_-2.0.png000066400000000000000000000125701362604102500234710ustar00rootroot00000000000000‰PNG  IHDR T‰=»ÈgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“ pHYs¢¢EÝ1¢HIDATxÚíÝùsw}èñG’eK¶$K–lmGû~$k³$k;G^d[¶µXŽwÙx·£}±]CVâÄI ¤()0!-”†èåB:@$ÎvïL§ÿŽÁýáþ¦>RH[hÒ„I0–õzÍ|ælÏ‘fžï/Ï{žsÎbõ#Ïæ·Œ}{"~ýÝéøµwîúôν>º=T7x+Ñj€` Á‚A0€`øðYz탹öÁ¼ó÷ÜÁp( †Ó/MôÝø_Ó}×ß› £`vibówæbsoÎÇæÞ˜ëžúÕ|×Äks]ÿ4ß3ý«…ÞÙß.ôν1¿tÛ3ýëkK÷ÃÿÙðý¿ ‹÷~7‚îaÕ{?ŸÛ0ú¥«mç^žn<þõSa<Œ¶Œ½4Ú|ò›ÃMǾ>Ò0ú•Ñá§÷7ûÚö­Gžï Ÿë _ÛÝ|ò[Í'¾Ñßtü…áý}áû޵žùÎÕŽK¯N·_øÁÕö ¯Œw\þñL÷ä/b oÍ XJºÎ¯«Ø9SVŸhÜ\½«*»¢gcve|cz^]ZF~4-«´}SBbRÊCÿgñƒ·,دY³vCJx»vù~JZJ~Ó¡œÒÞ«e5û­©=ðXiÝÁ'Êê†n׆±ÑÁ`ûÅNÄæß #ámÁ+ņ͕)ë7&%¯ïö%•Å ²Ë{6•÷$¥n*IÊ«?œiÉHÏ«-Û\³+º¥vOdSéöÜ0ª ZhË­ßß•S½£-§2Þζ-Ñîü­ÃÛÃ×¶µŸê+j;i;y´fàá£õ‡þr°íÜË“a$,q˜YšÞ¹7&£Ã‚îIkÖ¥%­Y—žº.mK–ڽAvE,%Œ‚ÒìÊxUZ^mñ–º½-aôäTõµ´é*ê8Ó]Ôq:VÐ4Z»±°)3³¤-%|mmNÕŽäÍÕ»’7FšÖ§åÖ¤…õ‘‘žÍ g4¦äF÷mÈ× ÁjÀ=*ucáòmxПN~vyOFbrJâÆHKFVYgÆæšÝ …­ÇŠ;Ï%o?›ÃòöÕû>¾ggÃòíÎ/üë‡þýõÙe[êöU†Ûm#bCøwš‹:Æ*«öÜl)éºPYÜu^0À½.Œ…åÿ0–oŒ4Y¥Û?tÛäÔMÁº›‚µY©ABrd–´ù#AaëÑ  ùp°¥nož ׬ Ö¥ç.GÅÒsÅçƒÊ]óAÍþGƒ——¿áãH°’¶žJãƒÊþ¹¥‡) ‰I©)ù×çD6§•e¥Ô¤m®Ù]Ør¤8Òv²2Òz¬,¯a° «¤cÓúM%é©YÅé›Ê»2#íc%U{nvÔ<Ûßpø+û¶~î@ÅŽé®òSÎ0ÀJUÐ|,±´ïRJqïÉôœšø–ü­ÃUÅ]ç»ÊâGGž<yú\ÝÁ'Æjo¨¼u¤öÀ££Õ{¿p¨ªÿúhÅιѪ=7Ž5ŸøÆ¥Îv¥süç“ Båî… ¨ãtUÚ¤e—9•ñôÂæ#%…-G|$ V‘¥_>J¨~: ³Afñ¶ y}VžWdÖyÃI‘¶“Eµ*í¹¼£´ç’`€Õ"953HHLú/Ïo®Ýäo^[Ô>ÖT{ðpYl¼³¤ûBúÒ `•Û\½3qKmEdۉ܆ƒ[r£û“¶y>ˆ?eçÀj—SOÈ©ŒånÈ.[·vCvPÒy.Èȯ·c€å`'¬ßT¬KÛl‡À½$-·:È(h¶Ôî ªúoÿcq1¸°Ê¥çÕ™ÅÛ–î&¦m©ÚP¼ýlQ¤íTq8 ö¬RY%íÁ¦²® ªÿZ²1}nýÚ†Ã_n:þõKÕ{¿0Rµ÷ó‰ö¬2 IÉAÑö3AjfaBvEoF¤íd}ýÈ3CÛ>÷÷{¦ÿy¾wî©èðí¡ºÁ'¬d9•ñ »¼ç¿Ý&»²7Èo ÊâãAÓñ‚Ûÿ1È(lLÊk8˜_=ðð`Ç¥W¯†¡0¿öN8ïN÷ν>Z †[‚Vv0ô%§çÖ$EÚN.?Î,j 2KÚ‚ÊÝ Aõž›AÍÀ#KO'nÈ)_WÐr$­bçܦÊÝ×"a(t7Ÿüæ¹îé_M áíò¸o‚!–—W°6·a0£íü+AbÒÚäÔ¬Hzaë‘Hi÷åHEÑ¡§ZF¿¼«ñè×F[N½x¡ãÒ«3=3¿ž‰/¼ýï‘ðŸG0À} ¯~0È,jY_ŸÜS³ÿ±Cá~sy|²;Œ„á†ÃÏ]j9ýÒÅmg¿w¹kâµ™Øü›sñkïÎį/Ix÷CCA0À}bKÍž  q4«zßCíaœÙ~åç:¯þtrû•ŸLtŽÿl¶wöõÙ0fú®¿÷»Hxç`€¬nðÉ °õXáÖž küµ©0f–ö—Âàú{ÓŸä,ÂïÏ»ÿyfzçÞ˜|ÿW’¬(9Õ;ƒHÛ©ÔèÐí]—<¿|á8{ð‡›¿3Ó=õ‹ñî©_>øÁtŽÿìJíÇ÷×ìÄ…Û`¥h8ü•`ca㆚‡cí4¿öö§Š…ðýÓaÌUîšßQÙ£¥jÏ_4Wí¹Ù\Ù½©¸ãLiQÇiÁ÷ ¥%§¤ç볊—/¸¯É(hÈ êã—~ôàû?…úibáý`Ø~åçó¶...a(,OÅî… Œ… ¨}ÌJÀ½&«´#5«l{Á¦²Î¥HH+î<[V»ÿѡֱ—Ntÿ|)f?},üG0ä7Š$¥¤;›+AN},½ õP_ÅÎùcuŸ8Ýzú¥sÝS¿œ{ÿ§Q?‹3 ‚V¬Úƒç×zv²íü÷–~)¶ðÖù«G‚î[õ#Ïä·Œ}{â½~‚`€U Ï @0‚ À} á¿MÈ©ê ÞŸøÒµ –XåÁ[ zcaÓÆÌ¢ÖŒ÷§%#£pkj8Vo0¼3Ý;ó›Ù¶s/Ÿm¿ðÊ©ö ?Xž¶³ÿp¢zÏÍXUÿ S€Õ ˳ðÖllá­¹&Œˆ™èÐS#uŸH´°ÚƒáÏ:̽>¾=T7xK0€`ø` Á‚A0€`  Á@0‚ ‚ƒ`Á @0 ‚ €` ÁÁ‚A0€` Á@0‚ €`ƒ`Á @0 ‚ƒ`Á Á@0‚ €` Á‚A0€` €` €{&–¶ýŒ¦wîÉè°`€• á6]¯Mo;û½‰Ö3ßoýÜw?õ„ÿûjåî…ý»æ¬¬à`è»þÞL뙿;S¹ûZ´nèvNô3˜ºÁ[Ù%Ý—ÒKº/Z XéÁÐrêÅ‘ö±‚†ÃÏŸÅÔúRP{0(í½j1`ÅÃØ‹'‹:ÎÚs Á@0‚ ÀJ †Sa0´ŸŽ¤çÕ'dlý ¦1ac¤9œ‹+>N¿t¡|Çt<œÆŠ3ŸvšÊû¦¶F¶,.Üv"ÁjÀ †¥‰Íß™îýíd8ŸÁLvOýr¼nðÖÁÚ_ °Òƒá³žÞ¹×'£C·‡ÂhH´ Á‚A0€`  Á@0‚ ‚ƒ`Á @0 ‚ €` ÁÁ‚A0€` Á‚A0‚ €` ¬¦`è¸ôêdóÉožm:þ™/œi<úµ±ò¾éåñÉ««(¶ý꩚‡·Tí½¹þ#gÏõEgÖµŸ¶°ª‚áÈó'ªJ¯z2ø¨©=øÅ ¤ûbPÒuÁbÀê †‡Óíe ‚ƒ`Á ÁüÙ‚¡æÀc‚ÆÃÏÊo:´99%#uMJÆú˜Ô¤µÖ†c1`5CçÕŸNµ_øÁùö ¯œý¨Ùvö{gª÷ÜÜUÕÕž`5CüÚÛ3±…·fców>|îÌöÌüf::ôÔHÝÁ'­¬ª`øøé{}2:t{¨nð–`Á @0 ‚ƒ`Á Á@0‚ €` Á‚A0€` €` Á@0 ‚ƒ`Á @0 ‚ €` €?[0 ÀG¨x8·ñØ×/ǯ½=[xkyâ o  ò%—÷MUF‡o6ýêñ0N´_øÁ¥ØüÁ«Ü•ß.ɲŠ;Ï­©Þ÷…äªþÉuƒOn £aªïú{‚V³„„¤  ùpPÙ=ˆ?4Œ~)(í¹’ß|ò['â×Þ ÀïÙXØ”ºõ¿ÚÙ3ýÏ a4à÷$Ô =ÕÔ~á‡sê% X¢ÃO7u\zu^0¿'-·&¥áðWâÝ“¿ð‘$à?µ¥Ý ZN}ëTßõ÷f|éXVÐ4DÚNnlýòž®ñ×fîÆÕŸÜë¡Ð|xù¶°õhftøé½]ÿ4¿ö® ·Àj7÷/‹AvE,)Ò>–yf kâµ™» ‚îq›Êº’K{¯Ö7áRÏ̯ïZ(XÊû¦²·~îdlá­Ù» ‚îqÑ‘§ó[Æ^ÿ‰¯· `ª?ôl ßž¸¿ˆ$`¥È` Á@0 ‚ƒ`Á @0 ‚ €` ÁÁ‚A0€` Á@0‚ €`ƒ`Á @0 ‚ƒ`Á Á@0‚ ‚ƒ`Á @0 ‚ƒ` Á@0‚A0€` Á‚A0‚ €` Á @0 ‚ƒ`Á Á@0‚ €` Á‚A0€`  Á@0‚ ‚ƒ`Á @0XÙžù¿ÁÐóÿ/X\\üDó“p¢#ÏX 6•wÙ=ksë¤ç5Ìø¸ÉoM¯Þ{³¢õôK‚îw¥½WËû&;·ýÞ…¶óß¿üI¦ýâ®vOýjæÏ ‚s‰Uý7úÂƒð‰øµ·§ã ?±…wÃyoJ0Àª †7&>ÉÁzßõ;³ýýô枇üPÏÜ[–p pCüÚ™ƒ·þöÉ+ß™ûùÄ÷g~yìùç¿[xcV0Àý ;f+w_÷ÌüújlîÍɛ޹7'v\ÿÅÜðí¿}êì·ÿîøË¿9ñÕg¾Ñ;ÿ¿'Üg [Ž&DZG*vÍ·Wî^Øþqn×Q{à‹»[?÷ýɾwfûá#û{åÑ»ùÑ$ÁwÉ–ê]áìNØ\Ûÿ‰&§zWBtøvë0Ê•žÁ@0‚ ‚ƒ`Á à.ù7ÙÆŠþÑÛ, %tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/tEXtSoftwarewww.inkscape.org›î<IEND®B`‚calamares-3.2.20/src/modules/locale/images/timezone_-3.0.png000066400000000000000000000371771362604102500235040ustar00rootroot00000000000000‰PNG  IHDR T‰=»È pHYs¢¢EÝ1¢tEXtSoftwarewww.inkscape.org›î<%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/ IDATxœìÝy”œWyïûgïw¨¹znu·fY–,Ë#² œâ ÁÄ€$@BàroHr“s‹$g)œ{’¬É2@ ( ± Û€À#Æò,ٚǞǚ«Þaïû‡lÇ—mIÝ]=|?kõ’¥~«öS½V—ß_íýì­ÀR—¼ìmŸxEvå–mŽ› DÌüŽ®D…•™Òñ{þñîÁG¾q`~çJ·º @SM4E`ДÛê,qVÛ(vM¹/´=“’ž­™Ë·w¦*õª=póž’ˆ4žùÞé7â9¯ü €³¤å¹[´¥¬Ä"Z+%b$¶¡rÝÀ[±ê‘ ÙíA1wÃkºV_ÜqU6¯ýØh#bR6ŽœzÍšTÒ®Jft—5Ö|`夣TÅZÝk|¥MŠS)ÝSc'ÓS§ê':º“ùØ;>RšØý•½§d|¼ÜšŸKÀ‹SF)e”mÒn)‘JMgª•Î’5éЊoD…N[î`o2]ÈUÊkÆl”Wo¼çªöîÂ*Ï«¶ûžûö8j¯+­×&3*+ÖZ¥•#≉mìzâ9®kDìSŠˆ(-bŒH2#•Ž.wJ.ÍL(G§EÄZñŠÛo¼f´\V§ŽÌp=åä;î§ÓFW¿s¾ˆHÖÚ(”hfLy¶aJƒKx©øŸ&°x¨÷ÿÃ6÷ØÁПžˆsÝ]ýmݹՉv¯ÏÕ’Jçœþ0¬gúÖz‰UqqÊÜ45mïñw¦VÕN}Õ`¯žÉæŽt_tÅnèZ1}©%q¬ƒz-9^­¤‡+…üÐèðÊ#Zb§½g²/×6³2›+®Q:JOŽ¥$’âû‰z»—ˆ³J¬N$LÆKˆ'¢D)kEÂP5\×$”:··Û§Ÿ­‰"ÕpQZ['ŽTEªab*­\DZ¾ã‰¯Ä:O=4 Uªåh½±‘­Š23ÆDÙ§ïºåÿ»åÈŽ;äxt¼Ýét콟½wZh )f€êúß¹>±nKGZ¥fAdÝ©Áp•u³ïÞöZ÷‚l>^©”J‹V %:!bµ(•›Ò®¯\%"JÛ#ö«•BtŒ¿±³ï;3¥Blj“G/~ðÀÞm·¯­ï›éì¸$•Ž;²ùÚÊL®¶²«w:X¹áT5¨»¥zÅ›xìØ‹îÉæN®ÉwŒ¬ïê­lÒŽ8§o¯­ÒZ=}“þL³çÙÄÙ~a­k$0ƆQhmPWåjEW ÑpµTûaÔ#Ïõz´ç%×õ×ÉX‰=eŒ¶Æè ŠËRíŽ\GòÑé)§æ¹Þ[òî¥ÚsVº®ßÕÖΈÈÁr_9þ†îwtöy—fr×~üŽ¿¾ãÉíÛ·;»wïŽDDvìØá{¯©fòYßËŠH#éÚ„©rY¤Û`òÞ8¸ùÓ¥@äôõ,e`Ú¾s»Û÷~#;Þ˜ÎeÖ‰·«ßƒZì'ÍL:ç ø¾J»ž8OÝ»?õHõ¬?lB+›ïìsò}f lÔÛ’©©T2}_W‰cѵŠ;ã'LÖuÅSJÄq¬ï8‘ïûQ{&W_•ï<¸±83xtäÔê‡ëµü˜HÕ8ŽIÎÅkVJ¤Z–™‰!y¤:ÓW:ò’ùD:‘ôÒmÝîê¶îì»ÓÙL·ŸŒÒJ‰zª Z\ÇG¡Tº™:ü¨7^7©}©taÃù—e~ßKªnõT£µvYkå›JÝZ¼æý×|½RÌÔÓy§ï²_¾lØ[£¶]½æê'ÉD#yã}é_J¤Õ€Öâ§DŒ(W'³Õ«r2ósrð7_ž9¨Ý7>Ѩȑá'Ìà­Ÿ¸•™KX€JC%•]ÛÖ–ï²/K¦U—R¢ríJLì†#ñþÒT<–ȺyÏ3ÉDJ§GœŸz+b#v¬P—u÷'®RZ”“¶Ùdºžmï©oˆBi” Þx"gçùû ”å'Lº{EykgϾ ­qœs\gô¬œîmhï–óW¬I\é'™§–5=+ýôðACªÕbx4Š”Š·Ñ¨ÅãÝ«œ­é6õ%ÏmkóSv…R¢ED”‘8¨™QõšíÎ;>š¿¬w­ù¹â¤j·±Yûöõ¿V˜ˆ.«’‡:úÛ¿Þûƒ|»tŠzÞ•J[E¼×[ëJµ$åá£ñ-ÙÞx§ˆìŸ«Ÿ ­D°@lض¡m¦0c§MÕD$ºqç/¼îò×v|6•QýJýçïªR§1 R êqà¥t:‘P?sÓob‰ãz?ÓP¼°)yɵŠ-•§ÃާSɌۛHJ§ãŠVê©§xêy¢ÀÖ&GímOÜ_úìšÍùM]}ö©œ¾$lÈŒ5RsÒ‡2…¶ày¶'×=MËS"a QµdOøæò”¾³2­ô¹ßÝ5~ί€ˆÀ´ÈöÛÝàðTçêKV]í'Ü«ÎW?—LëL虉ayÔÆvóÚ õž§R/ô<ƈÕzyþ.[{úþéykæû¶V±#G‚›‚@…ýœMÉ”se"%§·zUÏÿ&øÜçiÔ¥Zž¶O4jr*6ñƒ¥iùþ‘G¦Þý·»Ë³ûªXX–åMÐJ¯¿>ñÊw$³kßß»Z¿-™Ò«##~P³:Û¦rJ+1‘ÔD‰u\I>½¤gƉ æäØ`ãñ¶®dOWŸÚâz’WZž™y°V¬µb”­”(k$6±­‹#¢¥Ä1ÆFq Ó墘 >7rT}eüàxñÞ]÷ÖZú˜'ô0óä]K{G´!¶ñÏgÛÕu=Î˼„Ê)%≈ç©Pik´­}yÁY¼+¶V²ÅÂx0ºnsâçü”Ê>¼¬ˆ‰mÒˆc1&V‘ãZO)«ªEœ5û´–Øõ´R:Q/ELŒUÿmc_â ˜¡úM¶'lñ«`^1Ã̱×ýþë:/xEöÊdFÞŸÉéíÉ´´é§š”Ÿ»Ö³ÄŠ­×lÕO¨”vž3CcE‚Àµ²I¤œRÖ‰BU·±4ÂÐT\O']ÏæëU)Š¿?y²þ¾¾óÖûZôJh9f€9V*†9-æ]©Œ{ë‹/Jœ08ޤ¦îx’J¦tJ-Ó>„9¡D%Ó*Óä{â'´ï86?3n6j±£]I…õxÔOêö°f‹ÆØ{´–ûM îzôÇšçêXP À»ç°¼¨ý/gZ>„Q·Šde†#¹žôIgÔ•®§<¢Âü²V¤Z2'Nê&œB2£6'’’xºmˆž…Ö‰#‰§Çãê¥ÚŸë¬¶wÏï)´º.*>áæØ?xí–K_ÓþWíÝêúŸ9ó. m0x8Þõ‰_ýÆ»Z] ‹7/ÀûÖ_Þñä©ÃñßWв™…Ö²V$ ìèàÚW[] ‹˜{ö ¿ýoO EŸkTe¼ÕÅ,g&¶á£Ñ†Oîju-,N« – ë­Xs¸§ßH¤ÔǯÕ-7ÆH\œ°ì»¯ø¡ÝŸúѱV×ÀbA`æÉÉWòk×èH\è'e»$Íc$šµwjüþ×þä»¶º0Ý}hrõ%çOµõ¨Ë½„êQŠÐ0‚ºßwá¿þë|çG­®€Å†`ž}¹zùwFŽÊß7ª2ÒêZ–kÄTŠêd£1Eßg`¾íÞmô¾Mvö'³ê"ÇQ~«KZʬ•¸Tk;:¾¸{×¾¸Õõ°Ø0ôÀøî½åƒ„/LÈî8’0Ž$ Ò°FØxuöÙ8êÐt?[Î3 @‹øÑ™Þ ú&³þšéÑð«¥éú_OÙ¥)»/h8• ® ZKB;⊈¦ßá¬iDZrðÁ¡Ýûï<:ÚêbXl¸ZK}àŸoì|ðá‘꽿·¶nûöäº {ÜM—ºI?oýâhùšDÚÙœír®êì‘—¹¾Ó­qNŒ>#&–`ä„ýÖÄàÌÿt¤ãÔÉÁé`lHGÕ{D‡ EÄ´ºF*°í½mh›ÓNw§óþE«/l}2+«:{ô ®'ÉV—·˜D‘¦ÇãS3#r¿ëË´çÙz,ñ”i˜ãÓ£êž/ð–ƒ­®€…ˆÀ,.úMzåö+®øZ&§Ú[]ÌbGÖÖÊq=hØŠˆ[÷|ëjG‰R’:yX}ì3ïÝõ‘V×ÀB䶺g`Çeíðdq"ºÓ÷Ý_ôŠY†—H;Jϱ¾²ÎÔh\.ND?N¤½[üdôªzŲå*MÐô ,&ûöÙwëÿÒ†{â8z¤V±mÙ6½ViEOËP"J¬ˆ¥RY®Uôž©çSû¬Ü?õäÌáSûNE­®€…ˆÀ,6*òÄ ì©Ìfü²“ðû’§Ûó—÷yƈđT±¥8¶clÍÆÊ#ÊZÑ¢Nÿ©”­Š’0Žu{:¥¯é]å^Õ³>»e²X`æØ ¡€ç`I°H]÷šN†N}äpíÑtÖY—Îz» O0F$¨Ù±jUÝS‹î«ÕGËSш/—íJ®Kç•é¬í÷’¦»^13ÇŸ¨Ýáû~”Îy½m½ñ9uM½b~ÒµjuÇ196Üê×ÀBC`©ÛêÖ¯ö¯Þ6œu3ណ^¯-‘’¶V×5ŸŒ)L˜ïŽœ°_zøöã7íÙµ§ð—ûrzûÔgf¶íØÖÖw^ׯÚL4²ç_î$,ð<Ø% XÌvоìáËÖ¬½¸ë†ó_ÖöÛýëœó—Í,ƒ™6w²þû_þƒoíiu9,Uô0‹Ùn±#}#å©Þ ‰UGªÍ_L«|«ËšÓãòøø©ø«?JÜ¿o߾哘w`±;&æøžÁ©W7âgÜ«ríNŸv–örÃZYJãƒßÛÿ…Âßþö·ãV×ÀRÆVŒÀpõŽ«S’®â„Ù7|4ø‘5­®h)‘¸¹³ZÑîÞ½›]˜c` ˆSq:nÄ6êÎÒL£ÅK·“¡Q“zµÔøÊ±ÏŒ´º–°ÜâþBD{E$ŸÊúGı&–%µ\G)‘„}´fœv~w½Õõ°€¥`·ÄQ¬‹™¼ãuö;âP¢FÍT Sñ”µ²df¬©ƒ½¯0ÖêZX. ÀpÉu—¤SiÙšëp×&RNÊõ•g"UžŠöž u[ŠB ãHõšÿ0#¶ñÀîOïžnu-,Kz'`ÙXÑ']:hëtÇãÐÆ•†õÆëwÙWÞÛ3ú…òLb*‘Mugs&ÛÞez”R‹ï %R«ÈD2‘YZK­XÈ Àðèo«Äõ­_;|_×}½›sýžoóå™ ³£'µFâøžF-}e¥Ú>­UqM:fI›iuÍgJ‰H£*§ª5]lu-,'œÃ,ãûÆã㟠Ǻ»¥»­7}•2}|ú¡Á#ÒÉ5I‘0²ÆÄÉT˜w<ñZ]ó™PJdfÂ>R2·´á5§‚\{}ÀOÆéV{¦Ll«A`ƒçù–µãc;ɸ 'N8Ñ­Ÿ¸5Y: ß´Êâ[Ç  ©m;¶µõŸ—{ýÀ¦üõ®o7y¾›J¥´N·©n×sòAÍ)U*îL*veóQ·Ö‹gã¥DŽ>üÛ©áGSž;<5ÑÞ;ܸöµ½¼¬Zíº*—mϽ>Û5âƒaÐØîȬOê†ë9¶Q-êÃûª“»ÿvw¹Õ¯€Å„` I$‰¾ó2W®Ûâ½Û÷•j4¤69ß5yÀ0ÓѱY9ʸ^¥«Zv§µÉæÃÞÅô¹A&¯/X·5ñ§®ç8+BgrÓ•kÇÛºý×eòê<­ÅÕŽrDD‰86 ½ß®–Ô°«ÔXi:8V«ÛÇœ8þ¦ˆìkõë`1!0KH*‘RA]…•‚L˜¬Jz¾¤ûÖ¹¿Ø^•ÂЉÜ¥‚†®…SL$MçbÌ ÏÇ‘FÃÆOÆ·UJõº»öäîÏïžiu],v` Ú³gO¸gØ4нþç/¸"Ûy¬ËJ¶–ÊNõvö4Ö¤Ò6o`Z0FŒR¢”õìÙgÏ&súËÆcËVÌL¹è=ì*Í„ßØõá[Çç¿r–&°„m}ÝÖζþìµ/9ú¶Î•Å Å™Ì`®­4L™œã*½ÐƒR"AÝÖu[NçT›ï«„‰EâX$¨›)±*%A›'M NU+jhz$:8vhjÏäXãøÏÿqYvŠiõë`)!0Kت-ër=Éó]j‹Ÿ\Ïw²Öº¢I9Ž]P‡·Yñ|ILÇ÷OÙc=îùÀúAÍ›mÜéùÉñ0–òá'Ǽû“wËâìÀ`Q!0KÔ›v^»¦w ýÎ|§z¥1^XœqÇ£PLyEg2˜hë ûÒå)½pvJ ëR+ÍØ‡*SÁ—¾«ü½õ›º’â…þè¡òäîÜ=&4/0ï ÀÕ–Õ›ÓyuCG¯Û­µµQTé6±DõZbJ‰øŽcýf{’Î7¥D*E;=5}²4|vß§ÇîßuoíþV À¥Ý¤tyžd«eUð|åø •k]Ï òŽk|ÇÕJ-„À D¢Ðũƭ÷{òŸïùç{Ž·º$ðŸt« 0'La0~pz8þj½lFD¬8®õO¥•X+Æ£BÓsX39ÝqdŸüï{þùžÃ­®ü4f€%*NdÊÊ1SJßÄÖB'PZ©LÞ´;ޏZ;ó2½`­Ø8’Øq­ûì k¬„ÄÅi¹}fÂ~äëtóƒóQ83`‰Òõº ýêLN¯ñ|m=_%\Ïz§oÚço)RÐp‹Ã'ÒOt÷ÏÏ´Ig[Ó¨Ú‘‰Áð{Vâ»ãºóÃO¿ï¦ýóV8#`‰š‘ê“©ÉÄg<_w·uyk­Õ¡¤%ãùâÏå¸ÖеVŒˆ²QèÔFO¥„S«•£Ñ“‡‚ÛMhµë=¶ïþÆÍ÷~ö»3"œ›ÀB¶:Ì•«íê•}kÓoßpyîíù.o«ë‰J¦$=—½ Õ’351Ú¾76‰j­’›®–“‘‰`è±Çï¨6fdì!Y'Ñ¹«Ì°Äõôôd_óß~á×Ï»T¸«7ˆ"*%ÊõÄÅà`Ã@Wƒ†[œ™L|øÞ_ücÊOï«V¦JÇîþÌ=C²ô€Å†%IÀ7>>LŽô v­nM¦&3Q,Q:ÕDÒ&S™¸ÃqÎý}Àef&“'Ç»ž(Ìl>h̪Ò3ßT¢D´(å,€=™À™"0KŸ*δ×M<TÊþÄÄhæ˜ã„ÉT:hëî3~:kÛÎyeU&ô&’åÑâdÏôl ° T‹¹ÆÄpz£!eÏ«¶gÛjýÉTœu\›´V¬Rg¿<ÑZ1SÞ©r!11>²fhrÙ¬´·KŸò´o‡O\q°4µöh¾­ÖÛÝ®êè¶=~BçDD”ÝÞt÷ÖÖ*í‡bÓñlZÀ,ŽHµÖ?Y)·6Ò°Ö>ûµ³eƒºª•‹RjÛW®¬+ô*°„°$ X&´2ªTØ81:<ý ëÕ3Z/Hçl›ÖgŸŒ±RœQ…±Á®Ç‡/ûI­´njK XF;S#—œ¬ó·*uW”HN^¥“â需1bkgºTðGK3©‘Ác¯¾³V_]`Ÿf–°Ìí˜jqÕŒR‰šÒÊœÍ"¥D*%U:qhÝ}3Ó/;Ш÷T ,Mô0ËŒ¶V)'zâÊ»OîÿQ¹àLƱ5gòJ‰êìú;º +Â0Ï®H,a`ÒÚªÒÌyG¼ò®£zï)ô´5/}ªÁZ)EN4‡e€€%IÀ2¥µUÅÂú©0÷xÞOÇ}E&w>{ë¤8–H+q”þ™­Wm©(Å©ñ•ÇâÐ1,G`é"0˘«#ë¦Èý¨^{`jݦ#¯Íä‚^¥”­V¼‰â”;æ'ë]=¦ÏõÔ3﵊iÌL·)ÎlTâžÑr&°¸€åÎjk‚¾òøÈÆ#®×H5‚Ž ec7ŽT¬T1×30xI"VWÜ(Ta£îGŽŸ¿' ò fXÚ D©X×kçM;°ö.û¬-5·8}ðxafß%kÏ{•ë* j6œïØW*l:ÅìKÀiV[+~üì2’ ‹¥K†eHK¾mo²8¥Êí]••µJç°5ù U¥€ùC`ð‚¥m©péàÃ÷]pS*5’44*E¥}fX ^”ÖV‰$M½¶vZÄ­!/°¼DF´%ÂÑ ,'Ü )€¦ š"0hŠÀ )€¦ š"0hŠÀ )€¦ š"0hŠÀ )€¦ š"0hŠÀ )€¦ š"0hŠÀ )€¦ š"0hŠÀ )€¦ š"0hÊmuÎÞöíÛÝBŸ×[)'Ô[nÓêšÀÒB`±5oÏ®Ð6ÿ§3Ó}CS]ówÇïnuM`i!0‹˜ÆAÛ•)w¸îIÔêzÀÒC`±Ïýî­"òq±"·¸°€ÅÍŠHØê"ÀÒÅ.Iš"0hŠÀ )€¦ š"0hŠÀ )€¦ š"0hŠÀ )€¦ š"0hŠÀ )€¦ š"0hŠÀ<ÖwežIDAT )€¦ š"0hŠÀ )€¦ š"0hŠÀ )€¦ š"0hŠÀ )€¦ š"0hŠÀ )€¦ š"0hŠÀ )€¦ š"0hŠÀ )€¦ š"0hŠÀ )€¦ š"0hŠÀ )€¦ š"0hŠÀ )€¦ š"0hŠÀ )€¦ š"0hŠÀ )€¦ š"0hŠÀ )€¦ š"0hŠÀ )€¦ š"0hŠÀ )€¦ š"0hÊmuΚںc«ç&i™ÂÚB2ßæoïê³—º®ø/v½RJ2¹`źMÇ®ÛzÅmoX½g})úÀKB`™ 4ÏÞS˜ýqlã—ö(%É´É÷¯žº¢ÕáK\§ìEh/ŽÀ,2»w‰»7~sjTzö÷¬=ýÕŒë)ÎÕ»2m£yixQô0‹Ð¾]û¬ÓŸÏgSº­Ë½VDL¥ïo4ìþ ¦f)µâù§”k#§^M MŒnVÚª§¥ç = ,j`‘Þ3n{óǃ†rà þáWGþäæ¿~àoÖ]ÜWHå¼kW¥ôóü†kǤ]ÓVªÕ(ÈWÃ0Îih 0°¨€EìÁ›÷W~üpøC/NÜç«Ôñ}ßÛW\õòõZ¹ûMd«J©?¡ÒÏ~ŒÖ¢RÙúŠdfª«\N• k¦µŽ àyq°Ø:ÔØ}èб§ÿú|ÛIùÂ5ï¿æöm×uÓ®û_II=û!Ö¨¸^ÉUfVL+eæqU°ØÐô ,Qw~úÎáñSê?JSö¡g/8Š# ƆRF½qíN¦§ìÊ3¡A o àÙX’,aßYZ{~"•H»¯ð|I6êºtòhÇžÂdv¤»gz}{ÏкÎîc}ƒ]µzº\«dÆD‹gÄj+Žˆ’sìo`I‹K’€%lÿMw—6myÓ¿û©øB¥õ»Jgjz<=ºbeyMÿêêÅÚQZ©²Ôª#å4’vm²áz_«æ åB÷ÄÄÈúÑ8jk(mµÖK—X†˜a–¸w(¶­Ù\bwe:kz;º+«ÒÙz_"))­EE‘„cƒmz~¹sõ†ÁíÝ+&.éèÛÒ½bpCOßñéô`.Ž£¨ÑÈÕ”8g~v3 ,jÌ0Ë‚®dsÖëèVÝÚ‰ºÔ‹ÓzÒÄÖ«ÉÉd*hϵ×Wz¾øJiñ6•HÖÖd²µ5Ý£åÕ›O:¶ò'Ç÷¿æ¾Foh)±Úžîw0­~q`€¥Ï&3õñL.1íùnRDI2%¾ï[·^uŠ~"èOgãvíüôŒ£µJ”I¤l6‘ªeÛ;NÕ'ÛöL„m•®î¡þâÌÀhµÔ?Æ^†‰ÈÕ‘V*RÖº6Œ‘­-˘Xä À2ðÝÕ#8ß½=w¶§sªCkq´'“;åôÐ/B‰‰ÜÚù[÷¼©½3\áùÖo4öV‹Ó¹ƒµJzª\ìN¥+yÇ RqäׯF6žœX;ÕÛëŽcÙv €EŒÀ,}ê=;r—5ÙÖâQ•s;žnDx©'<[k¥«¯¼9‘P¾Ò§÷]M¥#?•ž¾RdZŒ´JÖŠé_sbjbtÅCCÇ·<4>¼yÄ(}æ½`A éXâ~ùC¯_·ê‚ÄÖû¿‘Ìên¥Îü ¥”¸žr›Œ§ÃÂÓÿíù&o/mhëZí%§íä`ç‰ÂÉÇŽÓô Àâà °ÄuŸ—ÚHë«iñí<ö'+-*ß^_›HêȦ†òImO½ñ·ÞôÀðÛ³·Çîڵˈ3,pÌ0KÜkcóöl‡ûn×kÍ®kÙöúº•õËðzi[:qijƒ}åÖמç»kó'‡÷ ³Í 3 ÀW)©‘TΦ3jC«>ÎwåeÛds&§6Šh#"RšÒ?)Lôýá‘{ZTx ؽXâö|¯tµ~- $ju-J‹£´xÚÏKêÍ«¶¦®juMà…€%îþ/|oòäÚ-Ó£áÃvt X+â%¤£½3Þ*"ÉVך#0KÜþè kû×%oÈu:«Ò)j®'Z;²qûû¶olu- 9z€%nÍæìÙNûÖTFúÊ ÃÓ”‡¦g0f€%.¬Øé8”A·º’ŸGbQ§ôè`«kͱ­*°Ä•L0Ñ»ªs2•q/ð“Ò×êzDD”©WíÄø |ùÎOÝsg«ëÍ1Ã,q«j«âS{+ÕB0j]G¥u©§ì·Nnju-à…1Ã,qǺŽ9k{We”«§uû“„y`j,:æùªÝOê¶ù®'hHujÄìšœŽþÇW~ÿ¦“ó=>83 iÓsGËöízã©”Ó¶Åu.½Áû•5ôŸæ:ÕÊùj„¶Vl£fgŠ“öߺ}dç퟼{h~Fç‚]’€åÁÈîÝæH$‡DÿâoþòZ?íÌÛ®Iƈ-͘'÷…yðáý»îþ§ý¥ùœ+°ìô¤µc{]oþ–$†=i¿ôùß½éŸækL0;hz–¶PÄFóÕülŒŠ+wÿž[âÛægD0› À²s¨!¢‹q<·‘ÁÄ**Üñr!9¸ÿ‘ o;ñ;5—〹Á’$`ùÑAÃ-Ä‘Ôý„¤æª!h8Å'ºà¦FcõØØ‰žc~î!6Y`"0ËÌ«ß{í:Ï5WøI'9WaÁ±µŠ?}êä+öºN66jfœþÎK’€efÓ+:.u“êrÇ™Ãm••(íX-Öµ""Ú²…3‹XF6¿js.ß^žLé•s:c¬(å2³À"Ç’$`™¸ò=Ûû^ýÆüzV:ÿ——9[Ž$"§gtäY)B‹Xúô[>üº¤ÞÝÖã½7‘’9?°M)«|ßdR©±l®)Îíh`.€%îõzýšõÛÒÿ£{¥ó+ž?Ç3 O±VÙ8rêQœ ç~40— ÀvãŸÝصfƒ~G{þ%®—!=‹1*œ™Îžˆã®ªV4<°˜Ñô ,aÝ}îE™6õëéœôÌWX±VÅõjfJóÀ¢ÇÿÍ%L…[+óº,ÈZ±AÃ-NM®85Ÿã€¹A`–°£Í©£ï׫R3Fd>™X×Ü;6¸íˆ™ûÀœ¢‡XÂnÿäíÃí׺QÓc}úªdF.÷ªÏõÄŸ«1­Õq©Ø6ac?ž«1Àü!0K›Ýõá[÷‰È¾íïßÞ½ê¢Î—¯Þè¼;ß!7z‰¹ q$a'‚¹xn0ÿX’,»?½{â_~÷ëß rWJ¤æ`yR©Æè`Ïž‰‘ ŽÏþ³€V`†X.vîÔXÿЛÓyûþDZ¥f{×$kÅTJ‰‘'yÕƒ°«ªÅ²*KX&nÔ\œëöþï\»ºx¶g¬[)ù£ûºâëúªa€¥ƒ%IÀ<ºú}¯ëض-=ßãnÿ­Ùu[ü7eÛÜW©¹ø­·ÊL޵?91vɉ9xvÐBÌ0ódÇŸ½ù¾µê}¯zããxëŽÅ¡Ý;½»»?}AÇ {‘vljä¸<òĉoßûñ{k³5îö÷lo?ÿ²èm]ί'3’‘Y^Šdb‰KÅÔñ™É•‡¬qÙG€%†À̃þËÛÖoÕÜÞ£_§•2‘„ÆX3POßÜÖí^šmÓçkGÄO™A×í]¹ñ¯®ûìÿð¶Ê9ë¼ù#o¸pý¦ÄûºV:oM¦ÕªY VD$ŽÄhG´µ*îxðè—íž?oT¬žÇó¤À| 0ó ‘T¤óúe‰äSÍÆžxJDú×{ov=qõSË„²mzåÊó½ÝNìø‹k¿µëCwÎrHõÿ|î-Wæ»ÔG;Vè—»¾$Î%,X£â™Éä±é‰Î±QƯ¡´VQ˜¨ ­963¹eXk¥8¨ €¥‡ÀÌõÔ—}êë§t 8ë]Wµ?óöôE~ByϽ6“Wýç_šþ›ñSÉ7¼ÿsoþèðq3|ó¿›1/ïê1oô“Nþ¥nešH©î ú¥ig[>o[û‘ ˜<±å[ÿú¡›÷¾„‡«Þóô%mÝî/mX¨Uý‰éñö'†Nlx´^óÅ™µcqÔU{zÉÑÓO©žý°$€ÙaätXxfMÎo|êÍ/ïYå}¸­[½ÆOJúL·2ÕŽrں傶n}A%nÌw˜7ÿÞ¿ßøå“ûê÷|íÜúˆ4Yÿ³mǶ¼çÚKÓ9Û~&»›*%Òh¨Za¦}ÿ©ƒ›ï9uâÒC&Ê„""§gÀrD`f‡•ÿœY‘l‡wq¦M½2™–ô¹’æºâv®Ð¯ÌÔõeíé'7}ë­÷~¤ú¯_ýð­w?÷Ú _¹f ‘p^¥µ’—:®5b«UgfèÄê;‘–ìMXÙØ±bY‚~˜¿úçoÝ ÝøBdzbg10#ñ̤v\7ù+»ñçO>^:i”‰óYÕÖ¿9sIÿz÷½Ù6çŽs&ϪÄñ£¬Ÿªù³V(X2 ÀlÛ)zņèÍýÞ拾êÌ>éJ‰Êµ«5¹K½ÿiŒ)m¾(*Õ« Ö$b¥é[/ŒOYðØ—ïš#ç¡ZEfÔ»WJ$ Üraºm°RÙ0Z)m ]U­é[/ŽÀÌ’‘ÃáÁzÙìë kÅÖ«&|é×[ j©±ÑáÍâp "V[3—%€%„ÀÌ’»¾1z$Š‚‡âhîîÆ­Ôm=ŠlôRÓ¨ÙÒè`fßäȺ1œÀ™âæ˜%ƒ÷ß?U)8?©er®–%Y#¦\étF§^ôZ+Ò¨ËèÈñàÓü°}—vèYgŽÀÌ¢DÆñµ+‰¹ÃÛ¨–íqk­X{ºGá¹” ê¶4v"ú‡/ýöÝi”{G´¢Áœ9>qfÉŽ7œçûrm"-Ù¹Ú)I)Q®+Ñ“ÔÿmÍ’v·ÇOû¯O¦¤ÛZ±J‹ÒZt½bG¦Æ¢ÛÿpýsSSSµÕì†Î˜%+·xWfrú:×=gA‹nëRk.xYò ã£áî½?ÿ«‹¯éÿ¢ÖõÆÄUí:i%º; ÍýGöÆ~ç/¾3."IeôÜì,`–øé°ËK&:æúí¨D¶Cmó’‰õµK{‡?ñίýo9½¼Ðˆˆ–­[]Ù»7˜Û*ÀrA0 6^}®kb ežÿhmâj9œ¹äÝ×eä?÷I5„0›˜aÎѯþù;²=ú­©6yO"% ™§Å?Ž«Û×oMÿV:ÛÐ~Q>3?£€å†Àœ#“Hž×¾B½·½K]:×Ë‘žM;âµuÉ–ò´wùü ––$ç(“rŽ£^ô\„ÙfŒ˜jI;Yþ‡ù,൸©Ìç˜ÆˆTKöÀ¡Gªÿý+úî#ó96X^ À9Ú÷ƒÉcA­ñ“8žî¥~öKDÄ‘(8¨Û±Z)¾{ð`ô·_þoßúálŒ Ð = À¹Ñ—_ï ¤³ªÏÄbµ>·=’¬)Ì1­uR”¸ÖHÃÆ¦h­kN5êîñÉÑàÑÑ“?ºé£wËûç«Å,Wà\ $3]‰ò]Þ;ÜÙùm²C‡£+íþ‡ŸpA`ëå[>23òýO|ÿ”ˆ4ž¹ò/ge<€D`ÎÁ¯ÿñU[Rý×S2Ÿõ+%’H;©FIûïýJáÜŸàÜ€sÐÞ¡W&RÎ%g™žóÀ(´Qu¦ú/÷ýàdmv*874=giÕÕ«RJ…iÉžéù ÖŠ êv¼Q“’‰Ežî|ˆc%õš$Öô­™§ó¢^3 ÀYèH+­<ߺr†½Îa ñ©ƒÁߊö&:{앎«6Yk ¡‰b»¯ÖUç¨l€3B`ÎÒÔ •2Õ³y¬ãXÇq£©OüÙáO÷ˆ|þoYµ¶^0Áíÿçö£"Ír©gÀœ¥jt2Šã®J‹œéIŽ#ÊYûêWuôår*;}xhè®/?6=7•œ=p–~鯸 •Õouݳh7PJúÖ¤ßY»\:»ü‹¦†Ûþ£{ÓyŸüæÎoÎÌ~¥gÀœ5å‰R)±bEYƒR"•’­O7îËwû¥ØÄ&/þH€ùE`ÎÒáGfŽ%®ÊÝÑÖå]äùgÂ@B¥í}¹¬»ï–züó‡n=DX Ûªgé{ó½qqãÂ@ê â‚R"¥999ü_>øÝ; `!#0gÏØÈD&6±1gvn[IÅMø°à€³´uÇVÿÑïŸ:trõ³•¢x)³ ƈÔÊR¯ÃožU:÷¹+«V´6F´_ÖA÷Ôäé;Îê‹¡g Æ']%"Ò¶%ëIØ/%öDzÿ…Ç…ÏhBüÃÔ‰1ÊØQq¢*I¶ô¿yòÕÓ7&J'Ü#g~%ìé›…¨“@û~àYË‘¨„bqkŸÝ§úÛ»Ú¼qâµnVfÌ1å=õG£s®‹e©H{ÑH¥W3÷,Ñ«3&›í DV·l Nr™üP<î\né°»¸Ók íPÊÄ´/ÆhÉ•iÊS -K©–އ»BËÎ+ÚÈÊÀ2ªÔ-ôÞ=?3&SÔ…¨“ÓÇFÆEäWI§Ujï˜Úvé/%ÏŠLùÝf`9iÒétÓnIŠu%±®Dçª+QÞò‚³tõìùˆYt ¾Œ¤ÓÆ÷®7Ý{^ý0ï @³â[@UUQTEaP…@UUQTõ7•ȇt³(RIEND®B`‚calamares-3.2.20/src/modules/locale/images/timezone_-3.5.png000066400000000000000000000022301362604102500234670ustar00rootroot00000000000000‰PNG  IHDR T¾ãKúgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<)PLTEh‡@x¯I}»L}¼L|ºKwµHk«A®ÿha¢=}½Lªõ`X—Cn­I¿þr]Ÿ;„ÃO`¡@l­FìÿŒÿÿÿA=,+/W31t§G|ºK|ºK{¹Kv´Hk«A|ºK…ÆQˆÈR‡ÈR‡ÉR…ÆQ¿Mi¢Ex¶L„ÅP‰ÊSƒÄOPŒ>v·I¾N‹ÍUƒÄOs±I~¿O†ÇQV™íÄ3mõêô™T9*œš8R_뤵ÊjÃÅC/Û9U¸pìÂõ¼`pã 0MÖµ÷ÁŒªço±}]ý‰d^{¾$™vºˆ“Jt ß›t3Ýâ(÷rs²#‘µQX«ÍŸ|ñÖY‘GŒˆÈÈÈCq“é>¨tjg=;Fs¡,N|›à ƒF¢Qœžxì³ÏˆHx]/Ü0 @“1妬¸‘rª 7W±ªªÃj1«Rª3•¿%ëf:Äq\ëW Ž•H;^¸:abñ|ÞM¦ßÔñ<6öņŒÉó"âì9ÜæØFÛ’¿”‘·wuf²fEŽû×ëZÀG}ç¸&‡»ƒcÝžï-çºnÿàžtçp¿ã¦“Êq3¢Äm”j~y>ô«+gT<^ðT"ãÄ“ƒÕâl¸¸0ößVŽ>Z‘µ–FUr)ø¿cS5Àz1Â4Y_¡»={èö;²#;ÜtGZiíX£¢ò܉…òòø«1ëÏ,ÍÎ{Qi¬cù‹ã"ì?ü³¯ÄDdå¨Ôdí° —ß#,€¦!0Mæ&rùLçÈ ›êH…~µÒXž*×V&¦+Ås'§Ÿý̲\]{¬ˆŒ‘±ðø‘ß)·¸l!0M§Ãši¬Î-×W&Ç—Îþ«~÷¶½‰‰‘ìè áN<9|<æu(‘ 8[ _œ“£49€Í`}Ô'÷“îÄ™‰X4!áõuvõ u¼«½/~O¦]ÝO:·)G‰ã:él×ùcúó¿s®ÕE\-F€«§~ìß}ä¶¶îÌ?jëÒ{Ó»MkIˆ’œãª¬Òâj%"JD)‘zMjKÓ_zæ—~ëÉ¿f¯°µ8­.Øjö>ø`v÷ý©îŽýo¹vÙåÆT—ã©6ÇUIíˆV—ÃÂk\O<gwz[r¼æ<³pâDԲ⮸JwýøÞd6ãuÆSN’·ViÇ•¸‰Ä#¡Öo¿¯bIÉ+‘þl[ýÅ—?æb+êXp•Î=y®ñÒFO¤wQ¾û|£fŽU‹‹…¥`ÒoHÆ‹©„ë)×ÚKS’” |§ñ„_o÷{÷õ±ÓÅV_À• 0ëpèÐ!/·-¹3 L÷ùÑò…Å[,/š¹ZÙŒ)åVëUµº8ã?³4ž\š33/ =7;}ë Zû»$ª¸CwuùÆ…z«¯à;!0ëpq`ÀÙ{kzÈK9ÄFÕd6’tNß’H;‰0Ð3Å…Ú‚(LåÝé¼loë¬çÚ;{+»Û{ä¾DÊ;™ºc`lâÈ„iõµ¼–UÖãèÑàž>òüLûÌ‹‰Øùû{v$þi[—{§(¥\Ob®çzÖÈ¥öge%ŠLµÜ¥÷$ú±>\ÊΊȳ"Bh›# À:9rÄýÜQóÊ—ÏÎ ß»ódd¼s« óA`kÕJ£f"©È‹i×ó”çÅ$æ8â(%’H«1’Þv×à³'?Whõµ¬…À\;óêWƦžûË“O—ŒøÓ{z|èdv(o­z}”Àˆ}ù¿Þ‰‰" e *sQ£4?kCõâɧž_û"{9€¦cJÐ\6±‘YqÌþÂÅ‘´ãH<•—xªÝIv VçÏ xNe\D  ét« p¥. 7–Rù¡ûwå¾§]%Mư…8JÛdûvq¹}™þýýÅÞû§ÆÆþâ›21ÑVWŽeU&Ë ÞÙ™íݳÝKäõLïÄSÊq“Öúâ&Ùî¥Ó¥êÒdiCðLI¶"cDie¬Ž)'‘R6qK«K7&°U9ž¤r}6™ír2}»ûûîú©îV—n<ô0[”£´Uùî(£¸JéžFáè^Yhu]àÆÂ°…iq$–éŽ2=ûÜTÏ®[ûîzø6ᾈ `‹s”¶‰¶>Ó±ýÞd<Õ¶£÷ö'[]¸q€@4$ |Ïtw§º÷= "^«k7pˆ"_ÕW'u½4Ÿ°µj§´µ¥[]¸1€€KØX¾WGµ¢®— ²ºZ—‘‘¸Œ<oum`k#07G7.ÊóŠ•¥sçrƒûSÝá`{¯í9Ìjh`Ý À–§E†jçŒ_ZX°ÆY.N_uÚú^ºgoïíÙ{ºül««[¿<[žQÚÆRåܶ‹í#©LTùP.–ȰJm¯.Žå륂‘gZ])Øz À Àqã6Õ¹+ë%Ûßklà›°nýʪú•r²{·c¦G"¢DĶºV°µ€ëÁ4ÿŽëY§­ÏFQÃkfCÓ¨•m]7ÝÞnúöu ¬h¦‡vâÓ‰¸QêºÜkQª ¸¤«óãsÅ¥ñ—òÝC~½0å+s¹.±Üh @}`°xÈ9HÌD¡­k-ªygÓùÕ(ÏQP±Ö¯ïY™9é{1¯’ð+Í;/¸‘€&IÞÖÞ{î' EçÕñ‡Ÿ%åkk›´ˆˆ‘FyyñÔS¿qDŠÅ•m·~°Ã8x‡Ä{w‰Èœ0% \%ÐD³SfYœì™(JÔ$Öp¤–jêbÆÊZ+bâ=ý÷ÊPÚ³ËÓ¥³ÎW¾Ñ»èxBXë@`šH{Ö‹'ü|¦m¦ßX7˜ºóŒæMe0F/mÛ‡îÎÄ3Ýw¯œ{ºÐ°vjW÷ˆ•>¿(s¯œB¸J ‰g+ÉLǨ﷥k•LÙ*ÕÄí8¢ÓN&‘ÉÅrÛcM÷W¦N‹È˜ÀU"0MT]uêÓc»ÏÌgn³Qà'*§y'5FåÙd¾G‰5ñza.µ¦pã"0M´ëV¿+™?~g£±Pœ>£¿^[‰¯dúnÛá¥:’¢\«µQÍ\í´Q-:åùÓNiþ\(Œ.€u 0MÔ1vuõÎ}WÌU²9ÿ/žø“^ÍöÿÜãîÈ%“Æ©×ûJ¡MÍZ9)¬.Ùâì‰rueº(° ‰”rl*­©ŒlËæbÿì'þÕ½åzõ•>‘ÓñJ9¹X, L,Í8çû]µ ]guy¥$í˜d¥¤jŽ3·™±gʳ™Îö~ýád:Ÿ¬ò‹¡qu,‘^×Àƒ #ùµ0ª/:ÑÕ(keN*w5àfA`šÍZe­\ê PJu©šH¬ë©D./¹ûc«g0»Ô¨èÖ=:ì—ýò‰ ýoV·ÅÚw=p –Ì_uƒvœ(ÑÞ—èùÐ`y~l&ªÎ.ŠˆúÀU"0Í©”u¥^Ïžô¼(‹×Û*%û~Cêì6ÿ8žV·ç;eG&ûßµ ƒ•àâ„úF×ÈÂò…Wç¹íw(“̈¾ÚeXµÇIÛX2g ¬+3Z ` @i­U­â­®. ½Z©ô/$¼“ÝK3“Yœ›{àá‘uö;{)‰»®(c¬­×m½\ê-–ïÿ`ÿ]]a,Õ©´8ëzÐE)]Ûð“eߦa¢ŠWIa9>½4ß{ìâôžSµr{Yt<\wX#N,iùmñö¡{†üLïÅÂÜéñ»2p³ 0M”ÎÇbÝÛj»ENUK™ÂÌÔýgˆV–oŸœ/}Í÷'–ºúJ#ÊQ27sçËÅå‘­­Ú]ÜŒ‘D¦Ç¨í‡bµT{‡Ðô ÖÀ46ùŽÚ޽w¼üP¶}ñ…ÒrûâêêÐÜÜÌ»OÏNÞ;Ú³íäöxºkT»Ë—ö_ØÀgz-¢•£ÄuE ` @³Y­•´w•nÍdÏl¯”ôêÔùó/NM¼ï)¿6Xš›¾çœˆˆr"­×»Q@“€f»<¿H)%±¤I{ñ(]¯–—ç—3~£¯ì¼þ €Íg]»È¸2ÖZ%Ö|+ØKÁ¡{[yÿðîo~(—aH)ßáV›O)@UVtae1uºRö±¯÷hmÝd¦ÒßÙuzŸç-¦ÞøÀf”$ ‰ªÅdqüÔðs+Ëɱžþó;º ·&RQ^”¿‘\ªVû'#“öµ¶LK›h¢¾a¿·sÛø굋çNÝùµ™óõgòÝ ¹ÜÜžÒjf¦°²g2ðÛê°Y€&rãÖÍæý}Û'noë^Ü5züЗN½ø¡'sùó§Ó™ ½™Ü…ÞÈäüÈÏ5„’À&D`š¨´jÇ—fÓOY+w§ÓµÞ¡á—×ˉ/–WöÎWÊ=«Ö:F$Àfå´ºàFvâ+§fêáß™™_80[«wL†S.º–b‰¹|G×ùþ0è,ùŒ¯T“–VUJLÐp‚úêüܱϟ6nW‰ ¹‚•…—fâÝ?0;}þÁº¬Qé|ç±þdf¡·R,Ì‹tUZ]$ÀZ @“Eõj E"%Vk'‘âê¾¹(è¨Ô5­•⇰Y€ëD)k_ËJb¦\ÙVTj¥ŒKb›h2k29bŒk$2bEkmOÿ³;£È K…}Ó&Ì4>€ÍˆÀ4™5ªÚX½h#SWÖ£¬5 e:ö¿to<Û6>–®•‹{æ4k€MˆÀ4ÙÜ+ŸYœ[|æ©.?ë,ªe+Z[™›3;o}¨û¶û’¿E/¾ûìÉ®¯4ê=e6p› h>#33ÕÅ·¼è:Îü†þ¾žm‹šàëÅsc‡Ÿý®ÚFOM2ÊÒÖM·ºàfµ8¹ÚU\ –Cßotö]¸¿«ëø°_s[€Í„' El¿{ü¥¯ÌþO³þ缘qGN¾·½s´GT¸¡Ó’´ULsëF`ZäÈ#GÂLWfxÛÎøí‰”ÎdóµÁ᣸±ù4ë%€Í‚À´P2›¬Õ«ö¬ãZOJb`ûò¡Ûn?òÁXl9ÙêÚD„uVýÚ貉µ¹3óP<¡úÇÆ¬mx…•ޱZµ³¢D_[òRb‚†ÔWççŽ}þœ°¥4¸JŒ0-¶m¤mHi•QZI¶=ì¹íÎ'´³û¥!+!÷(h)–UZK ìNýˆvt¯ˆˆ‰lT«Xa.>Ù¨¹a«‹à×K µTX‰B EDW¹‰¤Š;*Q7°6Tܦ •èaZËÞö¡}‹É´ÜOª~¥EiG9™|µ/“]Î4jRB×·6½¾ÑzÀ5"0×É¡OòÞ³ë=êĉozhù §¦vÞwËJ¶Ã¹Ç‹©v¥D¹®Ä2¹z{ÏüöZ5\©W»WŒõŒˆ’K#J®èÙŸÀ®= @ó¹ÿ»ä<«~ÂÑ¥â'îyèñgþƒ,ŒÕ"‘’9TJ6!o ðÚ'•®më8wOwïä¾¥…'굎Bqy׬8Ƙtàj˦l © @“þ‡‡Ûóñ’is>ëp:je{¢ã_ù+•.E’v<çθ‰øƓҫ”¼)8®8ƒ;Ë·  î·´4êXµäÔ–o=±4`Z,£ y @“ h¿¿³_¿¿­[ïqq2yÕkûãï·""J$¨«ªãIÌuß~?*¥D)Ññ¤ÒÖOéÀéì™»;•Ñeí±¥ù[æDÒ{C€æ`ù ÉÝ“H©>ÇùÖ”#¥•h­D+%ñ¤¤¾]XñR7Fl­ê–æcsÓ©SõŠSò\q:{+Ûú·Ým¤ìŠ2LMMAÓ3Ðd;ïÞ&3î@<­†WbWóÝ0°VQ¥™ ½Ï8ŽuóõmÙ¶¨;™ŽÚ¼X·QÉÙwâ^/>ç•V;—ŒI‡oêkVJ°®ÃúêMÏ`= @“èºs¾7ª®ä{Ü;ãqu©Oá ½ Aî˜HEÚ÷Ûõ0(±N¾£ÖŸo¯o‹'MNkqD”h-N¶-èIgký¹|q «Å•ù½“êÐJ‰õ.«$€õbJÐl>yiNióï…5VÀ"0-´ÿáý±ãû‡ÿô®ù“Î>õî÷Ϋ(5êNabtÇ…Åî©ÕùÔdmùìxµpá٣ʴȣÑõªÜ<˜’´ÐñGûò¨HõÕÅÎ>*õZ`PòÆDQ¤L¹”œœ>»ý›§^¸ãåå¥éÅs¯Ÿ~öø9‘#akª7° ,]ŒŽ¥óíÏ»qÝæ8aÜqƒ¬ˆŠÄè0ŠœF¥”š}y×S3gó/–æ^­ÿòèÌÌÑj«ë7>° Œ¿\;U,ß÷Õ(Ún¼X¤ã©RZÄLäDF¯•r¥ùÑc+Ó?5sôÏ[]/¸y€M — ã·¿ëØwדÁÌÄÎWæfn¢¬/"¢”RbQP™]™9úgK­®Ü\ØéØ œ[b‰Þ;;ܘÉç;£0h4j]%¥´(e”‘È–gÏ,,dRäË£€ë† õT­s/œ½{|a¶mNëH"㱚`ZŽÀ4ÑáŸ=ÜZ7µ8Z,ì|Wg¯Å3£Ï‡Ó£O¼º”¹7;°k¤3–ëëpÜøvÏKyÖ:Q1ð6Ð$ÿëàðýsé¼ì$Sr”î4F§n9”:þþ¿óÞÉj%¥'ÏîºØv„^<)J\óÚžk‘­xZÅ£K¯´h‚þËì§ýO8nòÝɬs«vÅQ"¢”H:ÝFQ8s¡í©ø\÷ã¶šõ/…KÙÀJ¨]w2™áUk]Ño<ð#—ÿ®æ>M`¶«†TíÑåÉà‹ÝÛ½]ñ¤³[©K«;ŽÕ‘±Q¹˜.­tÌÄâ‹™0Júa C«­¶JDr -qÓÑuºßõVA-_-;º°ü‡¿6}ùêòŸ¾ü'—ÿ­ÖøX$€æòþÕûèïeÚâ?ùZ`xMµì.ŽŸz¢«Tºúé’çYoi¾o®RÞ±ÜÞ9Úsû}_û‰‹ç{^>{âð‘ų''#^PÊ\j†Žku XQG\]YÏ'zóI"ÇÚ¨ª£òÊüé¯ýÖ„¼qûh€+À”$ ¹ldUd­’·äI¦‚®Þms·¯¬$/*©D ß­¥3•žZÙy¦QÏÔö|öûü† rmKCÛ¶¿t›1÷Iêío<†¶¡Š¬¯”‰Yqµ•7O`Ó(z••Éc"r^ à*€æŠV.Êé˜g—SYÕaí¥öÐWõR!>¯œzn`{e R QäUëUÕØuë™wU¥«ÙÙ©Îé´vêAǪèdèyîÛøßq^¡ ¢@´‹šuàÆF`šËž~¡ú¥D¹'Šï­TRsõjb©¸Ú?!¶˜NgVâ)?ÛÖQß‘o«Üµk_¬µ±BââÔxÿÑù‹÷¼â×Û*õF®áj«^kŒ¾rZľulàÊ€&;ñµäÙÅ©žÿض}ÿ Nb»ÎåçÚ‡v½zo÷ÀÒ®¦|ß©*¥m¥›,®dÏ/ÎŒ.ÌW;+&LÆX{),\ Ét¬gÀM½·?”áZ*v¦{ßÏ|[Wi¯Ö¢ ËésÓž/:–vNAWUY׊}­×ÀˆÖ,NZ‡À4›ç*íÅD)ׯÓÅ”ˆuÂ@ùåRöÜØ‰»¾<7u焉£µRꪧ4h¶ ´""ZU\Ú3sæ¸þ\2Sh[™š.†źVk£XÀlFàº1⇹ÆÌ…»ÇED´ÑZ­£‘àú!0×mÒoºëU›ÛÛwy€Ë Àu ¬e(lIk"0XÀš @“)Ò¿¶,€5¬‰À`Mk"0XÀš @“©À±Fi+bZ] ÀU#0XÀš ÖD`š®."‘p»€­ˆ'k"0X“Ûꀛ“–(RFÄÇ 5K®€ÍŠÀ4™RŽ}ûkughäå‘0t¢¥ù½Óa#ëÀfD`®›KÀ(e“Þ|fçž ckÕü§Wk™­Eµ¸@€·!0×™¶JùQ¾6ynß‘(ÒQ­Ü]ÖZ)‘· D´¸îŒØ(ïŸú®cÆ*ëºV1 lV %ŒhGD‹eØÔXVÀš Àõ`4 `K"0MÖðÂز ÖD`°&€5€ë†Û l=<ÁXÀš ÖD`úãHð IDAT°&€5¬‰À`Mk"0Xh2¥|«”µ­®`= ÖD`°&ÐdʬˆˆµJµº€«å¶º` sîúñJïöbÚÎMw•æ'{ªÉ„ÿzWʱ~¸Ú¥´›P*²B'Øb ÀúÙƒïŠv VÿM*kã»ëõÂÂLytâÌÈ©JqÛŠã¸V¬QiíˆËZ!.€-ˆÀ¬Ÿéª%Ûºã·d²6nŒ/½õ}}C«wÎÏM[œÙzµ°sQ‰kĘK_¸üE怭‚À¬×þý1J¯ëH,ðº1:ˆ" ©0¿c×Ô{Úº–wœ=Ñxbiî®É|û©Þ|~¦G\‘J¡}µXع`Âtð­°9€õ:~ÜÍž™•ÅøX©Ø{ze©ï‚_OWV–†ç‰•ŒÒu§VÝV1ÒÞ5Ý704vO,&W—ò“㣙oWS+ZË[¡µ"ÀfB`®Á‰çzN¹ÞÀ§#çîj£ÚSÖÚ(#µJûò¥OqtàL»çäÌøÁ3""M†bc‘Ööm«&)»Z%"±š~°)€k0úÍüjÇÐöѶÁ®v­Ã7€7X›ˆ"›ŠDD4#` ¡÷¸Au<°Q¥fº‚{ÉÈwšn¤%ŠÕÖõ&ÚâÞ|F”aïÐRà„Õ™ºŠ¢²5þÝKFD‰Š%KéÐZ¦%€–#0×`ñô“5k£B”Ñt;Y±åÒÞÙxj9³1X?pmÂÀÖËA­mäAµÄŒ6V%SSíLK­D`®‘®uÛ¨Õ7ô VlàçjFÕ\k  u À5ªÛb#²aUì[÷T¸65¿­â(õ­>µ±Ç¸à™ÂE_B¿j­RÖÇ "Z¥¢ZyxY‰k"e”èåø†à €kTX:W‹¢¨l¢ªã×J: µ!·–ÕÖÚX$"âXmÅÄ7´OàJ€k´<öLà—.Ö‹O‹ž9í—fWDîFŽ6ˆˆˆM{@€ïŒžkpˇÿIO,Ñ~¯ë¥ªËæÆ¾òkßyèR«³#N:“Oeón2¯Þiö( ”RÚjÇ¹Ž•\p TmÉ~½$3Ïû5=!"ű/>]î½=v>ß1œŒº÷¤;‡F¼DÎY1"JiG»ž)/LÕÅsgb™ÎíÉ\oÆ8Ú:âŠK©XÚzaÅj6p-ê+ÀµQrø°#GŽD"ò¶ûm÷ýýÁt¶sXk×D~¥ø¾änÝ•ìÚÑé¸qguâ¹ÅÕù3_µÖOi72~©z®î¼ûÐ}hêo9þ¡/ùõÒº«ÓZ‚J!VYõå?ý™¯È; u|Œ0×ÆÊ‘#áZoN?ó§Ddú¯õÞþá3±™þ¾¸Ê$–ÃÕÉågÿsQD–.¿¼çáùŽù@ÙB! JJ$¦+€Ö`„ØŒz{Ó½=ß×Û¶}瞮݌¸nb}÷*# à±J°ÍÍUæŽýÁxyîd£$ÐTÌm6©‡õP>ß—ùˆÔë#®g]=“wí9øØ»b‰…”1ê;Žh«`Ýa6¡G=žÎèÜûåDÒVêÒºªJY§­³º³½ûøö¶ö¹á3§njéâãZkC%Ö(QÚ*å^Ú9šNip À&tü¶‡U[©0‹«6í|k¥D%R’1ÒÝ¿pOiõ›§ÿæÜ§•8Ö„ZŒ.eÇI$½tz0ݱ3iuÌ•pÍ­"ÞØ„ýÑG£OþîG?33QÙ¶3õ¿:®J¾ñ}kņY5þê±Ñ/ê˜>¬åˆˆÈ#"j`àP¼˜2¯ööPÆkÛkU´â:ÀÖG`6«XtK"©êÖJô¦×­ˆ_·óçO×ÿõ©gW>#"FŽyÓ䣙™£U©–Ç^Y9¤/}àêÐ ´ÐÏþ§¾? µW©Ô§ÎïÛ{àήÄÁdVoWb?O:wz1•xãwŒSX²ßüåüÅûD„¹F ©œïüÍràCƒý;sÿ|`Gú'·ÜëˆýÝL›ó‰xB}w"å :ŽZcPÉà]·,{™ìøÅ¯xO€«Å²ª@ó­9’÷©ÿáë/(Ç Ü˜{(×éýT®ÓyW<©²Ž»öàßåÆçí#wÄé®ò-çq}ò·µ€›= @“}üWïh4ÂØìñ‰É§eÊ—G_ï%0""KÓµ? ýx¶­Û}·Ö*~%ÇTJT2­¶õíþÀ'øË‚4 ¶¿/žt»¢À«•£Ü´ 7°~ä#©öäÎXÒ‡"’JIÒ‹‡ß5‚d÷ŽÛ~ý韚:õÖQ‰u‰\Y`ÑZT6¯Þù=½ÿÖFáÉöÞøÏÅ“’ª–̳ÿ×ß;zì±êñãGŽ”7ôÀM‡¦g`ýôoÿȇÛúÌ¿Ìäœ>Qb•–t")~ÝK+þÿ}ì³ÿõµÏ>ü¾{Ûྞ÷eóúÌä{µ£ÖÕSdHˆï¸¢µ#nàK­Z–ÑêjøÄ‚ýôýÌ_=»qWn64=hèÐ@ÊFA[·s[¾ËÙOJV»âºžJ)­ï|hØ¿ûwß÷G÷>¸sîeÛʸ{´£ÖÝO¤”ˆãŠ£ô¥ž$Ç/‘”¾DZÝëyÒÓ±cäåÑoŒ.nÜU€› S’€£÷Ü{o¦#þ±xBwØ7ìz µ¨TVW2•Þo­hk¬ãÆTFiÕ´Q¾X\¹™œóÞÔC"2*—{&®«$Ç1Fb^L·¹qzë›Z‹8žêpcªÍKèl3ˆˆµ"ñ¤t´uÉ÷>üËß{{3Ïn\LI6މ÷n›êê‹÷$RÎZ·¾GHiQŽ«×Km|áÜ“çJ­® l-`M<;Q¼ÿá=nL} –+^ñ¨™”]«D©âB4—ÎæG/Ž^ Z]Ø:˜’l0홤vijßù£×…R"ž§3ùžDLú…°® Ø@)G;bq›M’”•Ìèžž§ïèïZ]ØZ ÀºíGïÚ!Êۣݖ·/|‹‰%$OÙ~ìW¾çP«Ë[ Ø@ÛF’®«wl¢¸ ""š-¯šzG—»«Õµ€­…}€ ÔÖmsãî`«ëx#¿!õ•Eù//µð›¶fçZ]ØZ Ày辜ãÙ[ã ÉÛÍÒ¿ D‚†,—Ôó_ý¿zºÕõ€­‡)IÀ¬%«Åeç•‚=ÞêZ^c­H…cçž_~¡Õµ€­‰}€ 211ar‡zÇÛ31íÅõ»cq•luM¢D‚ºDÖq^zéó§O´º°õ€ 4qdÂ䇆.¶÷¸=±¤>อ¿Ç´£Ú½„jÄ»žf¼ÒêzÀÖÒò‡àFsöé³ÅáwÌerÎmñ¤Ú¡Z¼d’vE™Hú]G–^øì™DÄ´¶"°•ÐÃ4ÁŸþÏåg¢OU‹ö|«k êâ7ªòx:{\ à*€¦8.­x^Z‰þ¤Q—Š´h”A)‘F]f.žSŸýõæ¤ÀUbJÐ$'¾|"ìÚ>ÙÞïíˆ'ôn­¯ÿý¦”HˆÔåÕ¨û–—. ®w `k#0M4úÔ¹å}ï;Neå]ñ¤äZQƒëIÚ‹ÉPG.šyî¯F7Í’¯`k`JÐdµŠYµÖ¶lu"%"J«íÊSûäÒ-nÃ[ ;=78+"®gu{÷ÿøøÜeŒ4*E[+,×ÿä>ùùÇ[]ØÜ À{ø‘‡cSǧœ§}:øñßù¾l* *í¶l7¥DâI•Œ%ÔAkå ˆHØSK¡÷ç­ª l`ƒ©DåþÛ>Øuø®ïh9ÓO®Íùp<)yk[\—ºôg­ˆµáѓϭ¼ÚÚŠÀV@`6X"«÷ïÐÈv&Þ§±Jm®žYqDÎ?÷©¯Í¶º°ùÑô l°?ú¹¿z~yÖüa½j§µÞ\aADD”ˆUÑæ« lJ`ã™Ó/Õ_¨W“­ž†ôíh­$²ºç–ßÞÞêZÀæG`š`÷]¹[c oÚ„¿ã+%¢ÄÙ¶÷®ÁÞV×6?Ðñ”Í*G2­®ãm”ˆ_—0 åé~âL«Ë›heMB+ñZ]Ç[)©We²´ä›˜˜¨·º°ù±J°Áþοý¡ɬúp"%éÍÖÃE"õZxlìXéT«k[# À+VüœˆévÜÍu…˜•ÅðÏæ'Jÿââôų­®l Œ0¬´P›®W½cº¾3W-Ûáù¢ÀV KöÙ™1û‡ÿéç?ÖêzÀÖ±©~nOüöç'^©þEi)mu-J‰ ñç¦ÌŸýBé§w.ßùx«k[ # Àûéßù½í}ÎÇÓmÎ-JDZÙÆ–Wí‘Ò’üîc¿õØøcòX «[Ø@½½½éT»|¼½ÇýD2-ñV6=+%Ò¨ÙÙ™óѧ?õ?ó\ë*[Ø ?ü°“=<˜ïp~0‘jmXøåÆcN¬ÕU€­ËiuÀ⮿wË}ÝCî¿hïvïÑÎæ¸·”’„(SêØµãxGowuêÄTØêšÀÖ²)j€ÁûêŽ{síú'SYiku-¯ÑŽhÇUÃÙvïÝ}{Ó½÷}ì@0tßppâ+g*­® l `ƒÜöÁý½™¼ý®dFõµº–7r=OçÕötN¿×‹©ïqµnëÞuêÌÓg ­® l~,« l¹‹•åÈ7³­®c-®+N¶CÓmr·ÕÕêzÀÖ@`6H"áxÖQñV×ñN KæÄÂ…è÷uIŸlu-`k`•$`ƒ„‘²Ê¨M±6Ò[)%R-K©°hþèŦÿüèï Z]Øa6HuÙ©G‘]³™X)‘(cŒˆ¨KÿûÒ—þÕ´eX/×ÖKæo¦N‡Ÿ#,€«Á°AÚ{mÊu%ûíÞSJ¤^•raÉ<&ÖÔ¼¸íUV'Smú`£jç£0|^‹)h7öT^ߢõÆ„ùË!Å–ìKó³æwÿË/~öøFÜ< ÀéÜæt¹qxÛJ¤Z‘Âò\ôÛGÍ8óÔj¹}ÄÍŽx|Ç~矗ƒ'Ž|iõ‹S_~ºüwÿŸï{ppOòWÛºÕÝZ_ÛýiE¤^±¥â²ý\iÉþÆWþhå¥k9¸9€ 0<<œHÆÍmñ„;øÖ™EJDêeY-ÔW?ý 5qùåE‘üü~ñ܋疦ŽLÔEDþèþ«?öoú…½wg~=•“}ÚYÿ=Z¯Ø™™ñð·Êsê÷ÿøŸ~f~½Ç77öa6À¶ïÞ—ÛsGúû3Î{õ')±"åUóüÒLø—Ǿ|úMîãß/­N¬¾i÷åW¿2v¾÷¶íOŠöñ¤ Ѝ¸(ѯ÷<\¿!µ•9ûÿ}î?^ø•¿ùÝ'–¯åÚÀÍÀl€tkoO÷ý©¬ó>¥¿õdï×m©V²¯—ÿþñ?;ö·†ƒ5ØãŸKtë'¬í˜ÑƘÕçz—+õJxâä³Õóô|ýÌú¯ €)I¸‰tŒ<”óRQšè*~«¿B¥¨Ý¯J¿v.Z)‘jÉÎ.L›O}±øÇŸÿµÇGE$ºšCùãå#rü?‰ˆ|×O}W÷êùÛ¹Nû±dƹ'ž”ìZ#Q(6 åôgùÒ3×vQÜD:wÝ}g¾÷6å$6t9a¥´ üÀ©5žÌšh^^ µ²šY˜¶_øü¯=~Í›¤}ýS__øú§ä·~è‘ï}lèÖø^ÜÎwÆþv2#o.F$ ¤T\öFE„åSÀ5#0à¦KäÚbùm]®—ÞÐÀ`E™Îìd{&/;ô›&ù߆Ælä¹>óÈFEdôá_úžW†¸‡’ÝùÖÏØÈ.^/¸9±Ó3nBú£¿ˆ8KV®ëg^I‰heQÑÆ.,ðÈ#ºw›éÛûû^\¥^?Ýå~†FÍ–+åè›§Ÿ8ûꆞÜ´a®‘ ­ÍæW:’éÚ€%¢D5©6jÂKªâFžëÃå§’µbü£&²Q¥¨¼˜´+%* ÅoÔÍxa>øý±cáçÎ=WØÈ󀛸Æ(K-'3¹åþXü³½mƒw¼·mûƒ{DÄ6«.pã"0à&´Öÿí¯<,£l,^H¶u\ÜOmöõGqUmÔÃÒµVøN"/ámà“ÛäÒˆÁšSýXG¾÷ÖÚûîŠg»˜’Ö…¦gÜT¬e%ÔÊêkûµÝ*Édçò¹üòN×ÇŠˆ_“j£ªžœŸ OmLµow¼{Ál«Ö³íƒï»ã‡}ÄØ°VšyõByìé%cÚ”çÕ¢¹¹Wü]ïùdz`ÿtû-ƒâ9FXè¬7Úʹ EUëÄ®ù×vë‡z[ÿùîT¦²Ãб"õª9u~4øüÓ¿ÿåå¨÷Û:r$ôÿäißÔŤ;nÙ—èܹ«cÏûkÚñ´1Q´-¬^²½ÍIä2^2gƒJ¡iå€7s_=)#OŒnı>þ÷vß¶}Oò½©Œ“¿Ô`ÅÚhæØß,6}†‰#X‘·<ðµ“|¨}ç=yc¢61"ÖDV{®(í^]CÀ·A`ÀMäH(c^ëQ}ò×;;ØÖãÜ÷ÚkÖ*‰ïÛÏœ¼Ö\¡D6ZGÅ¢ !ŽDäRWƒsy1$cD4mJàÚð4\¥‘‘ž!'®?OJBD$Š$,­ÈsåûãÇÇÏ^¯::¬TæÇ_,/ž)p+€fá)¸:±t*8ÔÞã¼_DD)¿&奋òèo|â3Ÿž82Q¿^…Œ}ñ7%iœ KóM]• ÜÜ À•s~ê7?ðž¡ý™G’•{íEkÅ7VU¯{5‡ym^z$Ù{[ßÕ, p5 À•3‰6/éxÞÈ_TZ<Ï“äu®ÅÛ™{Ï®üà]÷¥ò}ô"€¦áA¸r6•ÉÍ6ªj6™¶ÛÅŠX+âŤ=Ûì;ôÑC©£Ÿ=ÚÌ‘§k鷺‡d¬›ˆezö§;cbÙÁ4¸ •RØp]gQYµýµ§ô(4«…`F'²9¹ÖÀàŒ<ôÉa~£7±tÜI¦ÚcÆñ®¤²:žèsâ¹îx¶;‹§¯h’Q–@ÖÀ\…óÏÕçvß;bbw‰1‘H½=õ©_™ú¿W_ziuN¡\Wfðî”¶™ÐhÇQʉ;:æéDÊu½L¤´2b M ຠ0W!×#9ÇÓÛE]Z!©Q³ ‹ÍSDDLz¥dî–.íf.íH­ÄŠˆ#ˆ1W7` ­ºæ­ÀÍ‹À\¡û>q_®m›þ¡ÞÎ÷‹\ê_C37uÖ¾ºQçhßu(›í=Ø%â‰ØËÉ€ Eàÿoï^b#»Ê<€çœûª[·Þ®*—íö«ÓÓ„tI'?3ž³Sì Ý`–R·R–1­uV;—‡.¶¸¨g2noK­^ø~‡ˆB"¢È#]ɘ+EŒà>€À°Oå’H[I:Etk9’’DJ©¥g—® [+³²“ÒÞ_<;RžÔs£ «RzÛ’+.´dEKL¦q„¸/ 0ìÓÎj¿‘Ó^¶l‘í»ñZÂóœ‘A4|7 Å;ý3­’¥™"ŲúnÄIqaç¸&Œøpî`x8¸ `Ÿ®ÿÐÝ\»ZêêÅæçn^ ¾xäSÎøNä†.V«q7ˆú® }7ÒL››©²Ò„uàacUàn Ã°OKKK-Ñ ]ÿÂw?V¸ìÅ5{´Eôæ°åT½vá·ÉÆ´ì^ÏVšLO<œÕuë®àΡÃ0¤³_;[ÈŒXïÏE: x¸Pܾ“çH#f~"),©‘gâPÆŸb¬*Ü t†tü½N)‘Ò1-–Ï–äɳþ•ˆ®S£¸°èdÆv’¹c±‘ªŒ M¿uÖÀ}€}ªV«zv:›µ,=¥›¬¢$Žš,M¦+ÃÖ²2ǧ³£'æ­Ü”ùVX84ØÃw`X*•RÙl–:î1¥«˜ˆHñ8òÍê—ªú0Å 3ir]'†—y¸ÏaIÀíœ#q¢q"ÛédG§GŽušñƒ½NÔ·ÝÓ->WýHá›ë+êée¢n_lQ+=( NinŠ Ë$Å‘<ÔËǸ ·sžbãó†§úáXñdÂÑÊNFd5´fÖ[è¿~ñ£þË{•˜›û„)fN4+?+e0ae§óšisR¸¯!0ÜNµªÇmoÊÎNa"ŸË—õSv’M#á¤XºãpQ[ª þü‚!¦NŸJæ¶sÇl¡'nµ69Àý`ÕjUŸz2sft¶üw¡'e}Ó-_ÑNëJy½øúÅŸ/Õ¼A5Æ÷–œÒÉy;?™äL{ ÀAB` ú¥ª>9Qzlü¸þ­ò´~6ðdËÎèËfæŸ{BpnçŒ=‡hŠëœqÎ;ôý  `€Ù#)å©ÖW½—,[7±LeÆ<-ãDDqL|½ÛŒnìUçš}ã†~ãÕ‹’ä{L§ls¡q&ç$Þ™¸ xcà3WüÄ̯v~ÚÿyWë¿dÙb~¤bœfüÖÐ!¿¯êõøçÿú¹çö,T«ÉÆÊÇ· ñÊf·³²#{ÝH’ÂLp:쩪Œ‘ }zÍ­Íß?¿B8†„À O‘\¦åÞlu63*¦OKÅO¶ëÑådNŸ""ÖnÈ¿ú\ûYÚ×KøSòÚ2­Qkþ#ß(ÅV†:¸àA``ñ©E+Kú‡L›ýU·¼^µÛz›„jÚ)–#Fî/ÿñ…ÍajǬìʶFÿí€ûÀY"K=!cùD¦ s]gAù˜~J¢0P®»_'"F·ï0°‰…s¹ää©“©òô¬™Okš… Ðp$ 0 ÐsÐëu/å‹ÚÌèLöQÆXȘâJ±°¹#¶ò†÷<íc9ÒÄÂÇs…?ü˜]˜VŠ ÆÑY€#`€NÜ‘™d"È•Ìé„­2õàF+%Öþ|áâKoÿø™¥kû*”žÈ›ÉrÞ°3‡µÀQ³çüx€ÿϲQV‚ubI½ÝÍøj¯np®z+oøÏýÇ3K5Ú«»P%þÈeÌn=ixܧ‚VIDATàèÁ ÀΆ¹^wËëÆ[×zÿ”.X3ÁŠÅqëäm?¼ŒNü߀À0ÀùóçUw­ãõ[á•vÃÛ #)<7f…’üäçŸ~òë_ü‡O}–nmz~;Ñ[?„ÿÅßxtà·€ÁäŽë_éµýÿtF¬ÅÝíð EÜÍjÕ“š_™ãŸ%"ûm>§ÓrŒ˜¢ˆ+òø­ßgzË`Ìá‹ðŽÀ¦g€=d´Œèìzéf½÷#&˜ÈæD6•MŽù}%ý®Œ©\&Úü_G1„tñ`¾_*_ŒŽýâT®YÜÙ*­'lÏ)oÍ´w3µ?>þ[F©à`¾ àí!0ìaÓÚTÅ(ç+é¼ç†Ôiøk«+üõæVt5_¶G¾úÌc_i·´×8SL1ÅBŸù[×Ú×~òŸÜ »^’äjŽS;öæ–CfÂjŒ =H–®¼®ÓÐ4Éâ\ôðvö0·=Ò ïOfB×☽Ëë…i:f¾ÌG3#üdZ¼¯Pˆ1"FJ© ?bþÒÿò™©ÿ©½|ñ§W‰‹;Ú͘¦âض×^îvóÍ\áÊLÏ-n5vŽmv{“MC(ŽÃßà°a4Àjµš¬½ºÚL¿»pÍ"ݺšOØsJJÙ¸é/+Å’šNÓâé^[v¶×úW…Æó•ãégJN×ïòKÍ$SÅ㓺•¶öqÎÛÿ ©0È÷Z»3[^¯Øé´Ç7Z6ã(åkBò}ÕbŒdè‹ÐknmþþùîÐaØ–Ñ嘙¢‡Z ïòÍ•neb.yztÖx¼ÓP—ëÝè’iK¹sÓ¿Rž2?+iÍ`)+!ÿpi,ýoýZtÇ/éœ+F3"¢(v!b *€w^>nOýì{¿¹ÞßXý¦ÑMÈ„Û ¶Z;QK3ittÚø¨iËÈïõ.…ûãß<þϹ8"ŸÒe,™’Ú Ñ«CáJH€a 0ìZz¶æ§ éF2g9ÉŒ1ôTÃÝõ[-ÿÍV=ÎD‘6ÝÙî½öíÏmjiŒ3E¶M±ßBßUR†œ898Z°$ `ÿÔΛÞew7øÛÊ„3K\•ëk=ƒë¼X([ïÑ öîHs[aŸ1ÍW1“DD7ÝíÔö•Wbß}0Q˜µyA { àh@`Â…óúDô*-Ÿ8ûüÔCÉÅlÑ|(]ÔËé<+rÎãš…*}¥2¶n󻎻þÒ+«¿úÍh½Û¬M[NiF‘M–Oš©B;Ë•bž_r•2â{} S’îPýêZÿô£•Új­ñ‡~+l»ÍèÒîF|ÙsãL·-»­P¦Ëúû™Ÿ ìâ#aP4ÜfŠéº™`†iêNÁ0ôÀ£D ”ÂLI€»„À]8ÿô…>½^}²º²ÊÜÔìBeÎHR_*'Ot[AÇm°³æm³ôÈôXªTPJ2Î#" §so`O `ùß—{DÔ{ý‡¯ož9wæ×+—Vøü£ói+)ÆÛ 1%•qÝ)cŠ3†aGpt 0°·ö9Ðæï6»D´>û¡sþÈ™œNÜÆÉÌpÔ`Æ#À! ÂtŸ˜Üëë¸ ‡MÆXƒG „À!0À@ 0Ð ôÿ:ÀÖIEND®B`‚calamares-3.2.20/src/modules/locale/images/timezone_-4.5.png000066400000000000000000000054071362604102500235010ustar00rootroot00000000000000‰PNG  IHDR T‰=»ÈgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“ pHYs¢¢EÝ1¢ ×IDATxÚíÝ{l•õà_½ ^Ådât8— È¦‹:T@ÚbOï=—•yCDA;.-”+½ƒ$t:§L'ˆ· ‹åR@.--EÝE³l.·sÉÜ&J÷–¹ÄL¦‘ÄÒçI¾9ïÉûžs’Ïùçýäý½ç„Àa/Ù8"\uÏ%áæ‡Ç„©+ÒÔ_Ž ôUG<0Ÿ“V¼xD¿É^1àÆG÷Ëšw¾  /ªÛµm‰pã—x^Þ’{ÞüywÌ^Ëœ¹:«pÖš¬+Ç—w”¤ )yv|˜ñtf(}>{hisNrâC£ONŸ8쨨,LªÞ§zGÑúò yK£ý“',5`c÷Œí ¶„ÊÍùavS, M~à½f<•æ®ÏI»eùذü­ÂÏþx]XÔUîŒ>ãš{G z›éO¤§Ee`øÂíEOÕ¶Å_­Ø”OõŽøª†Žä‹ºRGóQãžÔ»õ»¯-h-˜:á¾ËDÇ÷JÄqóZr¿ùá1G6î)>P"¦®L?3z¬˜ÕuÇÓãO™¹&kМµ±“§­L?úÚ¥£„ ½Íœ¦ØiUÛ ï_ÔU¼oñÞâýQAøw´½?ÚîþüD…boekÁ’èø¥wo/Zu÷‹…OGãšÒçsÎ,mνÀ¬5Y!:á¿0:¹ÿÝÁ ÂA¦§H|òéôlïoèH¾½~ÇÂíEëê;’^ü™²Qßžø rsþcQiH”®ËvÃO/?6Õ8BðÐK É Zóg6t&?ú? ÃWšúÝÉjvÅ·ÏßW2gmvÿ‚ê Cvå}ðM6ýÉÌÊš³‹kvÆ7ÊÂÐ3‹ºRûç®Ïiœº"}è5KG—Z|ñÁ~Æø&I6^|tyK^A]{âÍC\ö×ïN¾Qßž|µrS~ÝÌÕYÇ( ð V°ð¢0ùÑ+¼–Üá wµ.~éP_e(ɯç®Ï™8»)v´Â½@Ysöªm…7t¦ö5îIuÿo¾ö°'µ¯¬9§lúªÌcS–$@¯Qº.ûì»¶”,Ü^TMEÕ‹… jÛâ[zNò¿¦« ŸÔ¶%öÌ{!·túªŒþG ?VèÐ Nî}åêðÜ?o ¯wW…—»ç‡îî÷ì5±U«Ûü[]{â­è„ÿµh~߸'õá—- Ñëß™³.;sÊcãNš¶2#Ma€^¤gyЀ'†!9§†3bß ™e?#¦œ}DT†Ì}!ç‚ò yß_ÐZpNÕ¶Â% É|ÙžkvÅ3suÖðóo<+­jk¡À ·›ôÈØðÐׇGÿrSXöÚµá¶ÇÇUÛ_û韶}Ù%Iûî~±hãí«2NÍ*??MºpvÕá»ùƒÃ€‹O w>;þ‚ºöÄÖ¯rCCGòÝêEkf<•9d²Q nnY>öŒÚ]ñÕ‹»¾ð>…·kÛoFåàÃE]©žx~;:~KT\КÝô'3¾3åñqi–]*L8Üœ2ö”#æoÌ›?¬0Ô·'ß/ßW1Cn¼jká’ò–Ü)³›bç^½ä’V¾wsøÉsW†iO¤ G£KÎíW¹¹`^}Gò¯]zÔUÜ]±9¿òÇ÷]zÒm+ÒLüù˜cjv%´•顨æ"ÀálØU§9¯%/YÛ–xeÑ,KŠöý¶¼%·lú“'ßñÌxW ¯8-cP(kÎI«ÚVXÑЙüûÜÜüvÕÖÂûf7ÅK ú YM±Ñu퉽Ÿ- ©Õ¶%:çoÈ»õ–åcÖ¿”ôE“1öøŠÍùkvÅ_®Ùï\¸½hë][ JJŸÏ>ïú.ïßÚ]"$諦®H“sÌœµ±ï•5çœ9w}î·ozhL¿†Žd¸}UF¸lÆ9B€¾¬äWãÃý¯O©P±)?ÌZ §Ž$࿎x`¹ÿ0^†$% Fï%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/tEXtSoftwarewww.inkscape.org›î<IEND®B`‚calamares-3.2.20/src/modules/locale/images/timezone_-5.0.png000066400000000000000000000535211362604102500234750ustar00rootroot00000000000000‰PNG  IHDR T‰=»È pHYs¢¢EÝ1¢tEXtSoftwarewww.inkscape.org›î<%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/ IDATxœìÝyŒe×}'öß½ûöWûÖ[õÞÍ}‘iIå‘,KŽm 홌­À“ñž™Œñ8ùƒÈ$ñ$ƒ‰ƒÌDHgÆ ¯’-K–ìE‰¦ÈæªÞ·ª®ýU½}¹ë9'›l’Ýd³»«ÙõøýM°ªÞ»÷Ü‹*à~ß9¿ócp‡~öþliæ‘ýŽWDúîžœwÖΆí ß¹ðÿéâÝ=9ÀíöàÞ…À7„À7„À lŒù°Ç°!0Ààc°p‹à†à£¿é·Äú°pï¹QºxŸ¬™Œ0o;–CÀ¶†À)Z[†ˆHÚ}KZ‰$%L’ÚÊ(K±LE&Óñ¤PÂP"´± ³1D‚’8'‰›úÙºïeÖó®×É%‰÷Ú¥V®Tò3½|gz­Ö®ªNýˆˆH˸™À t²Oþ¯?›ï¼èö;¦ÞŽ »ÞIàƒA`€ÇJ˜4q´åÆv¹²XÖB[®”‡'w»NêEq®tKuZÝÍä Õ™b%Íæ‚QmdBÆmdÚn/U—ÆÏOì¼øXy¨¿ÛvŒv³Q·W‹¥pÚÏë¼JEö_nÆ‘Ó6†t9nG·Ò¨ýhÔæuùxÿø?ûù/Íu;±¯zfš¥˜Ë–3ÉÊB£G?,^¹&LÜ`àiÓ³¦v¿0ëåâJ!¿¼«4M„=§îåºÙ\2*-íJ‹%³á$½ÕâÉ 'ÚRŠl¡OX6ÙD å ÑDy¨v8 9ÐÚÚõóñX&1 G9¶£rD¥ %qÄëËv¤;’¼îy¾ûY×¥bų¤E™8¤U!MŽtöâÚÃAÇè5"Š>ä[ð&þ°p§|ù_ýÔ¿’}¸×(¥+ ¥f«VîEýœúñ/¼ü'gƒŸu]á%©ÝÍ£)!µC†ŒÒ"&2¶ɾz£é¶­õ g7Ë£áNÛ&÷VÆ“&§‰‰‰-[g,i,×5"âÍ?Â8¤¸¶–þ•í¨+‚­š2"®/«3ñbãk_}úxxûwàÖ`††å{G'vñox‡{£â _¯v/ÔWók…a>’&N(--s…pJZd3³!"Ò¼+ °`ÎÕh¶ F„¸õPmÙäXŽvˆh3Ó»ÚÇ™ÍÙ.9ÓÖ„°X+¢82½ŽËÝÍ~›ˆàCƒÀ#ê‹Ä²IæŠjœ9¥B¥134Ö[Ñ&µGùZ˨Ys˜µ´,ãdrªd;ÆâÝÛ"11߸ëí‘Äoÿ¾1DF“b¢(u­]'[áWMb½˜ ûíÛÀm@`€a;Æb&kóS{&)]Šfˆ6WþR&gôCZ“i·ìÕŒŸ–¼ŒÉÞ‘pp ­É!Ão„cH“!c •šÄ(S#A}f¶“ÄÔÚ5ùJc5y¥Q«ýµU Ç~íxŸ°ƒÜ``8.IË"É‚Þ\úsm`"f6’ˆHH¢Êp2M×üŒ!¥X‘‘òöþ6´2&Ž8`&ÒÊè^G7‚N:OZ¶Ujœ §.1s¯ÛŠ–« í?=¾þÜe:Fš®?'ð¡A`€t)V)¥ïªxÆ]Y Ñs\•s=—òÖÆ` ‘J)NDè†÷6§"²le¹>åØ8ÙLÞ~8ìǃŽùK껋tŒ°*Ü“``¥u·ã4…E C†™‰µâÄõtÎñÈãw.:2Dͺ\ ·FšL¾¹žñ,ûÖþ.Œ&ôE+‰Eè¸*ççU)“ã<‘´,G%rªÓH¿ÑW¥å]î6âÅ• ž?þÕãéí_=ÀÖ@`€á¤›Ím>¤MZkVDÆa&‘¦FYIf"­Y#’8ýÕ+Sϱf‹åÎt¿ëÔÃÀ´l'Íz¾*¹žÉ|ó³ ö2&çfTVm±ÑŠ£nK®4V“¿Ž‚î67èÅc¿ùõ­ºw £Œ6$cDÔiyËÕü%× ÊÆ(˲Øä ª¤”ˆû]¯ÖëfjýŽßÎøÝ’ŸëÙNœÏæÓ!Ë2. âÍÚ‡›¯ƒ6f³ÈYHcŠ#ÙmÖŠgVv¿2wÊ>ÓX^ùó×ÿðßž%Ô(À6ƒÀcí¢\'{ü™LÁ?×\Ÿ¸²¾v`içìs÷ç ÍÑ$"ÓëXK,„v\í–†z£ë÷I+õ)„q——/Öw•‡ÃÝRÇ2ôÖ¥)¥I,úB˲µËÄ,¤q\7Í%1GÕ•ÊÙµ…N´š‡VH¹)K#„ÐhYÀ½†Ntj”LÉlÎ ¸U™hÞ_éôjkù³Íš¿bI•õü¤¨”ˆ]Oå-›œwÇ"2¤‰I02†Mr/ ­fÔ·:ýnfÃr¤) uö¨DDíVq~}åÐKíæ}K†Ù©0«ÆÒ¹>2ãŸssñ”m+ŸÌfã6ÛV¹±©æCåaÓDô“TŽ“æ…$ûÚ÷M& E? D[¥F KÛ–†H‹(²[‚YÄqf#ŽÊ«§_ý±²‰™Im¥´£‰ˆ„1ïžRDF§˜j€m ÆÊ‚lËç—ÎÜhe´~ÈõLVÃoT' ×5¾ë)ÿï3šLšR…*m7åz§•YF‹v«¼èçëyaq}mæôòÂÃç˜ ÉÕé¿Ç`„ 4 ¥‰ú"íw”tј ¶%™ ¯ÐÍmT½•¨ï›\ÉW{–­ü°/º™l2”ÉêÂæ–©o1ÆJºë)ßqz»T"CM-Åì„ÚÈÔ¶—(—¾÷Z#AÄšÓ4qm)î7Væ,G®…­õv«ÙªnéÅlûgv¾üÙlÞ̦JSÐõ×êmnKI~±’Û®q¯·.HHfË&«4D%Ëf‹…d.TÔ°JÓFYêŠuÁ¶ëžN‡ƒ«ïÓÚR)§iO˜$ÔqPïFAs#M‚z\[Ù¸|î™%Z?Ù½‹·àŽC`€!ÈX–•29‚(_èV´&…f|“’äÞkY,-Ûd¯~…&  tjÒvÇ[O“JK¥¥ˆ‰ˆ qÔÛˆ[«¯¯%q°B­õuR: …é[+ª?7÷Õ”ˆÒ»pÉ[Æå“ÖJe‚¯dòfÖË+¤±…$‚,ïÓ‰˜7›1C¤5+Û2NZžßûZ³vß"“0D‚Ò¤+zµK…ç¿úlwõÂúݸ6€  Œâ°ñ-ÛäŒ&"Æq¯cm¨”t6¯*,Í~ßMˆnxUÄ‚Œl6¼Õf£°¸±´çR§ýÀÂÛ^ÌBY™²·û‰|8ê¬,´k‹Õ—5&'qÔð¯½ö­ÞÖ_-ÀÝÀcx<-ùyYv3ì IÔkÛëõ o¡<LaÈß ‘š1¤–ç†~T[;|Š--¢0ÄA¡'…øíïÐdÛÙcû²Iyê~¯»sv´Õšy¸t–ewåd#?ùȹÎò‰ ¢7g5ôÖ^9ÀÖA`€Q_1-rGžï÷¸a;A^JåUF‚™lZÖÚðÚböd¡g²ªtíNIF³6Zª8*ÕC«*•Š™™¤"AÌ×{ÞW:!´IG}[wŒm{ÌóGµµ»棠8¶ÿS ví!£”•´k€Ã“Õçÿ¿µ»zCîåIÊM´÷–Çôa!•kÛd[69ÄD½¦µÖkÙͰﶲ¹þ¨Öœ ¡4µ‚µ/uêÓËÍæž*2òj§fóæ®Ë˜TÇI+±í,K骔ڰœÄvK¥$¨ ‡õ…(ê®×Ã~«)dÞ»pg!0ÀÀ°ma•†ãÉ\+ÆÓæó¾!Ê—Ôh®Ðff"6œÄ”XYí¦^íw+µBemÔñúîÚòCsF[ﻄH²mdqZØ…ÉLи’4/?®TÏh•ˆ¤V :KªM´b-)®I°MÝp›I€íæ¾Ï><èy-é(«´64vêpЫl¤éX_ÜZTxËñ›Íd†vNù£»´’Æ.wè@«½øbçΜàîÁ  Œ]G{…œ¸ol*zÈ/´¦”²2¸™`˜È°Ò××FOuÚcK½v©ÙhŒ6æÎúÙ4)‡|‡?ýÒ&GÚÂÉä3*é±§"ïNànA`€1û`¼köþ‹_Ì•Åìÿ‹¥ùÝFÏ›^×­n¬Œ¾tîäOgºù"çNÐ[ýÛ¶,Ìæ½Š„`&A,„–,z&…§y€÷€‡%Úð59ÁP·m­Ç‡o‹†È2½wÓÔé3÷lº¦ë3¼f``ÔDcjÖ^µ.«”“…K3ß+V3¥rg·åW+VAÏ©ÍzcuüÕµ•‡Æ£6ؽàF``œy.·Ô‹žø}¿\N•%q!’œHiwl¡ZJ' ûãmMR«ÄÑL–ÆÔÀ{C`€'ÂDáP_„S-2Ú0 J•§’4…ÁT‡Y³š•bMDÄÌLôVŸ6!˜‰¶°þ`B`€±ûh³L~3O4AÊhöÜuhd~<“o—˜ˆÚÊzmcvuvÿ G˜™ƒ^¶Ón 5¤ÐBÈXv;£-•d–(¼F·îD…Rߟ|~6WZœŸjôsѰÚ%" ûVóÕ¦0={îÓ¾ŸTˆDª”Œ˜ 3§±ì7…¹¹ó÷?ßÚØ»fŒ£ÞÆÔÁhxç}ûù±ý¨ãª¬mWH&óÆ|e§¹Ù缾î/ÐHŸJåp§ñ›e Æ7äú;+ÃõCW.Ì¿xúÓÏã!4ÀG ÛѶm¥~š¶lCÄlŒykËTf¦‰©ÖÃÕ•ük+W¦^pì%Ëvâ’VvDz¥µ‘ÒJ²l4—‡W÷Úvýõ ˜i±¥YƒúhøHB`€‘á\aXdóT’_§¿‚6d¤ª‹϶ë#«¹R/ßïù=?S*5v¸~Øh2ý~¦5>}r6ŽWšÕµÙU”Âãš>l 00Öæ­Úè o䊴Wˆë7c‹ú:^[9éç—F ¥I!œ$æHËËË£½ŽKŽ%I–G‚=ÉôFG¥2Z™åä‹_ü1Š¡à£FiXg™-;ŽL"„›Û¤¾1"%Ò´ïÈ©Ÿòsñxšp´º=m9I^ Z‘VD,%Y‘NÜ^×´¤UŸ8úè}¾QŸ[˜ûÄ)A‚´6o†!°\  K²ð2ìxY7šap3”Ùdå3Ò2.3±ãhgrWï¨JNSR~Ž"b"C–ENÆW¥|±Wé4•ßMR(¼Þê´­x™–'œDªØOÂ0±‘Á ŒK§­U·˜=™É…»2Ù¤d®³€HZ$‰Œ¼ú5 æŒo²o|uÍ+™lÛ¡b·-a¤ÔøäÊcŽÝ+5ÖVÏŽL-ΗÒRgêÕ™3 —>›Å€¥[|™w Œ$HÈÍD9!µ{'Š ˜‰X’ÈUÙv”Ç‚™ÖÞb¥³«\I&¥%LöúB¥VÍâÌÎj»>ÓØì(®Ñ0``Lìâbe8ž²lrè–' AÂÏRV2Rša!RaŒLkUk9Ž)uݨ°çÀ™7«s¶½~12a—‚(îa¶7• ]p}*K)äõ–#]O·-Ddüœ. qã§{CDÌĶC63S’ɦCÙ}åâC/µ–Õå4è¢lK 00TJJk‘l†…ÍĦƱÙÜ0É1"aa,æÍ:†^×]kTË—*ãÙl4’ÍÅc,ˆÞ+pCdYdgóÆNb“ˆH–M™\^W”JÒ$¦(ˆ¬f+&u²P(¬_yåìËK[î<ÕEY¯Œ»Ó”="NÓÔëÖÄ"ÎiMJk¥)§LNèe£J&ŒårºÐëjçÄ3?ýûž·‘{ü©¿ùUi³ô2iéýÎÇLd;lçKf˜Ù6¤»mnE¡Õ“ÒÈ\©39³§!Ò‰ö_<ó{'’»qî4ù’òßøDvtíffëQ¤UØiÝé• _êú¹•¡^'ߟ:{Øñ2KíÆŽóA˜ëLœšmÕ¦—/œ<ú§NfcxçÞ•'ýœ¾©Ð åæR&¥HI©<ËVBi ¥îî´OõµªÕÝú«Ø 00r%Ê+áŽ|)žÕ#†´ªSšµ²8úƒ…ÞôjgÃÞòç=¿æ÷úñåV=ßkµ¦ù¹ñl®:ÕÜ88×hŽ®í,/î½xz×_N6v•†Z]OçoæüR²ÌdÉscn°6éêÙôßÿÑÊÞÏïý½ W\C'O^è—~û§ÿΈ¥~~m÷Ë—åÿÜïý‡þÍúmÞ€;FªŒŽcÙ׊ óÖ ¥7žç™µm„­I³!qý§ü(œh_<}ðÏ2ùöJœ°Õ^­®¹¤Ó|Ònæb""!˜u²‘Æ¡W7Dd i­I A¶x.Ѿq!ºÞ÷‡g¼_¨Œ‹_Ê©µ*ÅŸ<ñå'‚G¿46Ù­™xçúCK˜u€ •’êÔeWý\Zt\ã3Š#lT˯/]ÞÿB§9Ñ‚™èúOõiœI.ýÉèễ¹º|I“‚µ6&[¸0´kÿß~²2R},)í÷¼¥æzù\®Ô›Èæ»Ó¶­óBÞ ¤‚ˆ¾ô[?½G$V6ÔúâמþZ¿±ªÿ$›×v§m–â˜Ö÷=9ö¥BÉúç~V7ϵŸýGDt™n4`€-†ÀÃó_Žg„%3ë+™ Ù¼*¥‰_«UGÏ,Î9Ýoïh "zŸì ™Í×½Ek6 쩯ìÙ±çì¹BsVHc)et¿ëmœzå‰g,KÐÐøüÔØäåû‡Ç7r3”yçê¨/>ý…g¸¿aÙ¼§¶ýoO}婯ÿ_ÿô¿NDß$¢„ ñ?ú?¿tÄÏó¾$á¾±¢=MLO#0À‡O?ñK“ —&sv&zÅñÃJ»V\I’b«Ýœ\k·w×$»Fˆ”ß7,\‡Öl2¹jnöÐw?19S}Ìó£Q!˜ 11ù¹pxzö¥=,£…2u™HDEýu“H¿yRÇÑ“ÙÝïx|¨±®Çν޹šL’Í+!Óú7ñ¿__2' Ù­¦›;K¿~ ƒ¸C`»ãû~î+G|,û÷òÃÁ‘N«Üýl×qúùF­4ßïíhØRQúÞ•ÉoК&I‚‘$fsùRûqØÏ¶ˆR‡™ß¬S0Ä”ñ£ÑÝû~ÂËè, #… ©i£¹×X±»Woâ𙥋æ×Œ2Ù°E?\>q"xçŽýú×.Óæ2$€lkÙ]_;ò ïKiýJšR²² Nn¬:ÙIÅr—úï\Zô^´f“ñ«9?×ñ“8õ;…@“e¼Lßq2=§Ó_©.·^šÙ³òB¾•?lÇdlGeÞy<Ë"‘É›‘á&õ{Çž>Þ%¢ã„šØ&`Ûšž~"“ÙÿèþÜÐùûœL½ì§ã3­å‘W‡[ñ µU{.Y×4•ZJ#Þs9k. Ÿ›ÙýÒÇF'‡¢Èmt[ÅÅnÛiû…îH¥Ü›rüpÄuÓÒµaáý&!ø];2!,À¶ÀÛ–{øã³™ÑÊþLÎÊ alÛ1žë…9c‚=Ãc§f.¯®.ŸimyçùfuïJj²Éæ\o%ä¡g._êít=Ïs °ýìÝëf&ŽîÏƦ]?B(›Ø]“’Èèæjòï^ún÷O>þyó¯F¦‚_l×ÎÌ©ØMbå&*ÉÇoõX ê÷Ç;¯üà'þãðÄü®l¶3G^·×-ol¬íZ´œXjÅÜmU:ŽÛ·Ç§ÎîÙ{äÔÏdóñè»»J_ƒ‰nÔ `»@`€í†÷ïù¹Ý^qbßôÞ•éɯ>êzý±4¶úR—¥‘FŠB§¶xy|dårö¡(Z+k$3{ÏþÔ䮋O67 —ΟúÌ·£`ôÍÝ‹´rÓõ•}+ÖPËõ;èŒv YZ+ùfáƒÌa¿\¹\:ÉÌfç¾3Ÿñ|UR»–¥|æ·ÒƒVœ¨X†i¤B#Bl[7ìF p/šzüïåÇ}$74=>:}iÚvbocuêõ84ÝL6ld£V:9þз7jŸX˽¾¾2z&諺ãö³¾3óf0`¢8A­ê_Z÷^j­˜ïyæõ•ó¾Ü*Ì0Àö±w¯[™zl¶<=ce é¥3O¾Æl½ª•£§gŸiYÉ8ñ:—Î=úB»¶{có^ÑzõàòÚêáe!ôónf#ÇCdË\Ý5‰Y³k7òå‘…Cǿ׮ïžgïYÚÌdéNggÍmt2#c«‡’DôOgÉ0‘!r=•«Œôw÷êÎÉKgìð®Ü€-€Ø6ö?üË;3•}f*3c„`°”ZDýbg}uÇ¥¥…£çãþpOÈØÚsð;ïÞ÷ÃÇg½ôc…Ò|%莭GÁXO CD†4½Q`„é´§jA¯²öÇZýÞd[)³ó2 "b2”!Z™Œº:Á’ã¤tZÅEöCæÀ#§¥%B×ñtÆPB–¥¾÷ê_œœ»ûw àöa†¶…]3îM1 IDAT~±äVvÌ Ï™X½½•¦4Í':ÎÅB0+Ãff÷÷ŽîÚ{î3?j7ý+æðjù±š‰ˆ,»çx^=Æ¥^åcD½0³÷ÅGªß.®oÔv/ÆA¥/ˆ(Չȯ Yr^ô:ãõ ?Ü3ÚV”dÒæÆÁU£øånï|#èŽWsùVqfï¹§ ¥pš´Ñ Ÿ`C`€mAe§}ieÊ–åk2×kÀ¦Iˆ«uÇýr«º<ñ’!2Ks¼Únî¬m‰˜xöÐw~|z÷•'ÏŸ<ðõ+—ž|Íuj™£<÷39Ua"c é°²Ýndç¤mì ï6‹åî?u;ÞòÒÜîïÏ_xèTôÙ2ÜíìÙèuwÕŒ¶t­ªyueßÜØø…Ý*YÕ(¢ÍÉ tp€m¶…ŒkóÍ® "åõµç×ל¿Ñk¤PvØÍ^g¢j´ÔÆøIÐϬz~·(,ã0ùùtØÏ·†‰ˆŒ!z£¤™ÊC½½ÿôh6WŸ¼rñȉng÷ºNó‰1z3a¢ÞTûÊÅ©WSÊîʹòŽûþ~éÊë¿ß¸ÍÛpס†¶…¡ÝOìÜè./?â߉ê›ÍÊZscäR³v`…Œ¥•±tš„½‘ñÕ#–mÜw¾žß¶¨ˆÉ²›/ug<¿–o×ýå ˜l‘1Ì,øÚÉ!RQÛB®®_<^¿íÜe˜a€¤¨?Þ {“)• "’¤„çu × 7bÛäŒNt»îߺ­Ú… íVi½×-5ûÝJ;IŠA’”BÁDÄÒ’®D8€m >’„0LôFC5Nض狖Ó/q³Ç0†È²´Wé) õöi½G÷W'~xáä'¾OŠÈöÛ®mi7•¨_€m馎–±Míi¬,<ør¿g5é®yb&’Â8¶æ,K{iRhõûÓmi·Ý±‰ç OžŸNúñõ*µîy˜a ÍFlQ¢½±R~=—ßøÀ­P•2Z)JÓÔ‹ÈUŠH Aë«/ôëa˜îì9ú¥ßñ5)ID469W˜Þ³8T¨Ðw÷—ÿ¸¶5WpûˆˆXs6¿Xv3qøƒ¯b±ÙZba)KÈX¤I>ŽÓ\DžþXï0éô°af“H½ãðÒ§ŠeçPk½ÿ?<õ•§þüøW£4Ü“°$ €ˆl«ëNïzùÑÑ©ÖýÌüïBbË!'ãë\©´1;81½öqêöZi#ìE£¦ÓáG†;+'VPë÷,I‚<Á¡mÙ©«RY¶ò™oíÃ~£É#’ҙܵx( W:‹——Ÿ½xúcÏKGšññÓ{F&.?’-t§3Y]’RÈ]‡ÜÏ1±oÈúk'Çæ‰NÜ᫸= ð‘—Æ•àG/ýÌ7Úõsã»æ®?`ÙÆù ÇaAœÍ§ÃDDZ#D’›˜š*ã·Æ‡Eq¨½ß¶UŽˆ bbâ$æ8 õŸ6)|ñ䱿ŒïüÕÜ""í§sž|muyßÜá‡þ¦7µkíI!n­ÆG+ÒJÃL"“£\&×|„ !™hsó¥7§0F¼Ù=QT8NÔ½CWpÇ è¶… J ±ÙÒægBŽÃñÎ¥3?Óï8k·zÄ–-„ã )-fi±‚¯[zázä—GèWÙ¦C„¿G¸á¶…¡‘ÔÉz9âD*%ïHa°¡ThÍFóÛ÷Q zcæFù™[«®f&f¾¹] ¥ µ\W¶‰ÏpÏÁ’$¸ç}ùéÏUÆö®ÿ‚“ ¾Üimœ[š»ÿd»=Þ–l™ÛzÆæ†—+†neÃ4)…d„!"b6&NíþÿûY_JЪòÊÝ:ÀmUážöŧ¿XšÜgýÊØë_%»‹•Ú¾|ii( ìfmºÎ,‰HÓÍ~¢•emdƧ_<<1õê£qGQ0Õ ’†H´"9¶ãÔýÅR}ÀãÞŠVU]\]ŒŸ}püáÚ©S§¶tÙÀ…¸§±ä ןñóT2†ÈrŒ;<Ö|ÀuP˜Ùuî|³Q^ÝXÛ±ÐnÎ4;ê¦KJHKËn{t>Œ¦× Yzó|¡›zeßðHãÐÝ DD£;ìG;õô§ªî"jßsÜ,Ì0À=í¾Ï-ŽŠÏåKbïÕï± áùq%_lÏVFjû&vÌ=?•ÄÜî÷K}ËN¤àT’Ô‚ˆÈÍLâmŸÜkã§ÝÎtµ¶q`! 'z̆¤Órgv=ûàÞÃg¾Í'£wúZÌfMÄ»Ú<Øç299›979;;wá‡n:øl5Ì0À½ïºe LB’p¬4ïzIÞó‚ ?ûìL½Ð°,íhÍ*Iì^¿›¯†}¯³²ðÈz±Ž›ûš’&M³‰euœŒ_sË•¹É‰çkÜï¸:{'‡o ‘V:ÞXV—)_¶f„$Ÿ™ˆ  "­¥«^Y½‚%IpOA`€íÍb’–‘ÅJ´ƒ(ša"6onbÚÐA;íÖÌR§5Ö×ì æÚ …½GŸyª2ÒÛY(3Ò2óß9,M(^¹˜|·º˜|/ “Ní+<\å'¤46ÒRÒt³JßU,_üêßw}ߪó§‘n¦š_{#,mÎ~¼9“ðÍßþ›“[un€Û…Æm0ð\/©Øv/CV,Hßú7ÂTWö]IG[ÕCÚ¢|YÉð¥ßúé=[s€­ƒxJs"ziöÀw3†ÌÚ•GNÁhwó§å°ßÍTý\·B[ =ŸJ•Qù ©²_øüûùÜj®wìØ±7wBú¯~ç§47”ÎX¥ùcOC ÜS0ÃOæááê>ÛüB©9áå—†˜cID¤R[µåKZsú~ǹUÌD,H¹6ÿjq‡þù×¢×ük~l•Çüßšðÿ19ÝâVàVa†že‘=2Ùz w¾°ö£Ÿýf âj“òÂ¥û_ŸY}ÜÏ%#[Qül ‘Ÿ§a/+FŒq^Í»ÃÏ|á7g3i=]þÖï}««âÔï7£—×ÏG;}n€Û…À Ò&kz÷òdzÅo–.ž|ì™FmOÕpÊž·š¿¼Ã²”óΆjw3±”‚†&ÜÿòóÿÍÈ2ßo›“…™Ï}ghRíwÕ>öÕã[6Ëp«à#A~N•ÝÌú þ¾wúµÌ×ÒHÓôž×îÏxõqÛ59¢­ÙZõZ~ž‡29û)b"/k°3¹ÏäxÚË8;ŸúòSÞñcÇ»[=€>2Œ!2ÆŸmï¹ï‘¿üÅ(ýá±Þþ$6 ³‘ï„;3†Íÿ!r\¶*£<ËL,,ïHùˆëÓ1B`€{ |¤A"_2e¢^Y)mÈ9y!¶r9Òµ6Ïc®ýš‰ˆ29¹gd‚¼»3 €›‡À)ÌWAY–¸K1aS‹ í†JœvšZ}fÚ°bbÓ®‡í(Ôws87`«1QØ—­å…™gVfÏDýb/ ²!‘&×[,ŽÏï‰{*mÕ{w5ÀÜ €­bÈhÍ©R¤Ö—ÇNœýñ¿£É®°")X³QRG³Ñ¬YTzá¾lÚÅ’$¸ç 0À¶’¦¤ÒDô„Fm³0–ÆÞŠþ ·CkJšõüù¥¹™»íJ´¥&gNï+|w— JBh»ß÷j+Wö¾R]yàru>=®žA¸ç 0À=Ù°Ö¬‚žl47²—çw¿Ä䇹|sÈÍôŠcSke Áô]Øõú Qª(ÑŠSË6.Rk+¥—Î|ÞͦîÎ}g+U½LZ‚äÕaVL—<¯;Ùk—þ vÑZè…ú0À=îiiœ¤qèuëÙó—Ïíûn½º{©×Ÿn±‘šˆ.¤J˜#½»sï…/8nZÌÄâî&Cd´bGEì´[Ù+A×ߨ}èô'³Ùöi무XÆuãHlhÍFZœz¼¼¾d?Û\©¾µº—£î2µsá‰Ü]žm`&v\ãIË8ë+Þ©$´z3³kOº½¶ùJé¿UI’W©³ÑjZëIÏeËŠJµUgõµ¿´æçOü‡:Ñ…è® à@`€{Ú±¯RzðÈý¥®f =4úêN)»ÙêÒƒçÒt¤/„á ?ѽpjúGFÇBÊ?vvÌ^)9žÎ]Óî`Ë)EisýbŒÔS»i­Lu1=¿±_¸ü|ãÏ{®~÷Fpçܕ,7aï9<¶æ`ûÉGðÔÐØÂiât´ò;ý ÒWšÉÍ´½\¾žó2}—LË)×w8nZ »ÔM¥”¶›ÖšÖ¬†FÃݶk2‚ÉÊÅÐФýɱY{õÿùü‹we0wfàÞ¶ø\ðÀ'+Ò¸;™Í±oˆzÙ=—Z?Z_¿øšQ"ÎZ™lwL+eu»¹• gµ…ÔžmkOHa6ÌÂ033‘1w6H° Q(¥ãÒ"ADL†HHB’#,ãHË”ˆH:³À¶sOmE p#üâ#Õ±ÊtªR³ûpnïĬû_ûYó“ÌÄIâ4âȯj-2‰×m[fmü‚ãZäeƒ‚ZJ+θ^P±Ý¸àgƒ ÛÖº [±jm¨¾Òú_ÿÌ_üÅ[}>€; ¶¥ðÛŸÿ¸%GQ‹±BO6:Íɪ´j…=_}‚…±/~®ºüÐe•zŠˆÈp,üüzÞ϶²S;Oݹ÷ÊglGg·~¤†6VÕñ¹×£_ÿOÿâ/°, ¶Ô0À¶¤ îÚÙ3<{éEsY%»{wöè ?65SýX±MŽL¬ìw2¢Ó.¯㥖Eœ/Ÿ™èw‡[ëk.KnÆ…Jk§”ÆÞÊq23 !& ‰ <³óõ‹{±»•ç¸Ó`[Z?µ®Z矆÷}~òOÏ}ñàÃ/þÌèxó¨ë™œÆrÜ4§bÕëÓ“~¥Ï‚Ù–Ìþ£ßý¬¶š¥‘Ñåý¶«soëÍôF­´!­Ymn›úAǧ5éͬÈp˜FœXç…—¿~zùŽÝ€»EϰmÍþÝ‘‰}âÈôl÷¡ÑñîAbñæÏ”b§N—u,ÙJ¤N…™\š™˜éÜ7>ýüýaàÔü\:,1‘!£ )ÍZ¥¤T*{iⴉ✟UEióÖ†Œ1ÔnfZµüœÒ^¿z™/4ëÿÏw~÷«'èŸlÁØB °]q~÷'¦&vm<èçú#,˜Ì5}êë™ Q ƒý÷=ÿÔüÅäÙÕ+{W'wÎ=n;*Ï‚ØÍ„ycˆz»ÚïåâÐo†¡ÛŽB£ûíL» Õ?ðÜ—ó%]¹Ù©”ãnÛ[ëvüåõåÙWæ.>xŽ(›v×.Ýú¹úæþIÛ lK##G²ÙJyT“VËïê’ìûª”/V'7-tÛsKº:Žò7;Do®0ê4ÅKçö}'¬XÚ$Ó(ÓowŠ-?ÓÉM︲?WP7Œ1Ômå.~í¾oÕÖö-ÆQ9¶ ÁÌBhvuŠ `[B`€m)r [äm¬Zì÷/®æKÝ=|M£6¿11#ÌÈÄ•‡F'ñüxÄ‘C¬5%ÌÚš˜š{ÔvS?WPCDd´’±Z +ÍZ–qof,ÌDAÏ­Î_šýÁêŸcÖlYæ)«ƒò¶à.l=Ø–LN1YDÊØŠ´xwC4³¹þ§ß-Ï'-É¢UË]è´Jó,”µ¾:2…ùîèäŃ;gW>叿-VÓ>c( íV½:ºF,ŒJ¼ÿ»¶Ø–²©+ÒN 'ï?±/[lí`ÁôÎ ^Ç®n¬å.#’n{taáÒc¯ 6\¨¬ UF¦w\ú±ÒPç€eßÜL "K*/WZê¶7êd2©1Žº­cÜ#`[²Â´Û©ÍŸ® ¯~ƶƒ~GE13Qªdt «µêä)ÜtÇž— ¯îËæÛ;2Ùh\Ê[ÜV˜‰È2†H+2AÏ©vºn5›­eü…~o¶F$‘¾:Ô/À¶…ÀÛÒââsÁW~s¸84jíwË1ï˜]0†¨P§½Kùé=Õ–d[vTt\•e~ûŽJ7Kkc‚>õ£¾¿Ümg×ÒÄ¢([o6¦–Úc5!S™j'5ÆVLï^%°!0À¶ôË¿ó³O9ÿ2_â—ÉëÄžŸ–lKûäÇòeþ¬ã]?,\µù³;°"ÈE·~îõÿa’ìh’ZŶrlG]Säl`° 0À¶Äl˜™¶t7¢4¡Äbi‹ˆMªœNПi]ŠKŽà#¶#6ÚØ[UJ¼¹üH6»]Ùôýx(î¸-!Í=ô=•–B!4Š˜à#¶)#¶"0C‡&n5Ü!•m;B,Î ¿Þ¨í¼°¾üØE! Â|¤ Ál;Gž:’?_nÖô‹iBw´ßAQÔiɰ¯£„ÂX^Fy+ Ÿ'c¡>>r`Û9yüd/íåÿ`þdü+sñ±(0D›½n—åã¸*§\8óà7ÎÂêâìë–Œºø(ºµÆU²SÇO©ýÕ¹ù‹ÇkßœýäD›IŒþäñíÅ`f"ŽCÖgNG¡ÝX]|òÔmã^M©^óòúÅãõÛÀ‡¶3Óï÷ã…Ëù×…ã|_Jz•Xäl‡§„¼ÕúcÒ„Ò(”½(ÈÔª+OüÈèLzË#dæ´WS)lS(z†moùĉþŸ —‰èåòÕ/Mº>?j;äÞJƒ6ffÏ'·"Ò CK÷¯,è“·»ÔÉfm§(–€m 5 08¾üe™+Ѩe‘;ÕÉZôL¯ß]i¯æïØø¶!¿øXø /ÃZ6Yt‰™É²ÙÊ—ÂÑl®^4”âï>²°$ ÂÏÿ/_Ø¿û¨óßåËü1!é6–ÿŠ“.Í•^ÛX=úr»5³¦0 Šà# ‚ss\~ȲIÞJí‘1¤Û ¾±Q:ߪÌ×ÖïŸgò´dl§ ] 0:ëñ"¯jˆw~Ð÷CFkNµì…³¯>ñgõêîµD¹©-%Ývï¾ÅQ>¯~íäë>õàe­ÄcâT¨”ãêJùåµ¥=¯Öª;—º­u’D¶4X„@ 0 æ^™k†á#‹®O©ãÞÌﵡ$–Áò•Ñœ}ýï|;ê õµ‘Z³EsîV`Ë!0ÀÀhUéL6gªŽÇ“ïõП¦F…}wmeaê‡WÎ?úbŒô‰ÉƬÀ;!0ÀÀX½]ßᮓáɽF¥F/Ï=³¼¸ÿ•êÒƒóFÛJˆ- âv[¿|x``‡Ü!”c&ºÞNIƪ. =æµO}§ßÝÑ”Òóé=Z0=Ñž?ÿ‚`ª-¥B36€›€‡&WNwÎjmÖ ]oP·“›ë‡ãMÒŒ­Nnf``ŒÌdÆ™¸õ©k ±ë‘Ïâ­)׋*Ò ìsŒÛ  !®­%ß´¤<%¤Æ¦å?Íäøþ«}²ùh¢P\mÕfêDÚ7ÜksœúnúÂëþl“ˆÌW~÷¿XÚ›ùÍB™•Y–Årbúâ£õõ½ ýÎdç¶»8|È{wÊÜ sqõü•ðêׯüŹ‹þðЉéÞ'¥-F™ˆ\?j6¬¹^k¬Fdm}-3ŽºN‚æ¥sSßòóÜa(z†A¦Rr\ýÿ·wg1’]÷}ÇÿçÜ­öÞ·éY{6‡.’HK´dÚRÇŠ”@àrò 0'#yO A<$€$ŒDŽeJ EKE‰¤¸/³pöîé鵪ºöå.çäaH𔨳VuMw?À35Uÿû¿ƒ¾@ýælF9.dp]äsk³ÚëºüøÜߘ°£rÎX·­ccnœý¬”’™ýëår¥ÂVNI²&á¼°-°£½øâõç»M}.‰%þðµÜP439sæ¸û‰“úý(ø}®ÐìhëÏŸnœcâ'«‹é·“X…""Z‹›Z>dšˆH*3?2:ñÒa­óAêì¤ö*©Áv pÿ 0`Ç»ðîùù G~v½Ê‡¯iÇ|ô³Ÿ„©°Z™[6f¢mM*;³_”a €°K¬->|eáòŸ¶[nÙZ+Za1îú±ˆHO5£îdÓ˜T”ØBw£t|ÑØNïv³Ÿvî4ÀöÀ9 ØñÇ(ÑéøÜ;_ý™–¿pócŹūÇßèt3áG»'étº’iÖ÷oˆˆ(YÍ(§éÛd¢5ÀÖŽÀ€]C‹–Ëï?õŠIÚ¯…ÑxK«§=+ëÉ©·M^?vö©ï›8‰L´Å®§ÅÖW¨fÓ…V>ȾXëÄ&Ö&вín3×j´FQg¸#Žˆ¶®4ë'VDDÄj+"bÅ7bc­ÝÕlï«*åY-Z¶òÀ7€A#0`Ûsƒ¬ò³#*(L[›(39rabÏ¡s¬í´Žµ* RÝáüpó çÙ ÝFØM­×«…ÅËï?òrµ¼gÃeDò‘Öö£±%¾Qʵ&™n(I´²-×Z±ÊÉGFB­m*ä}lv cµõýÅÂìÜKOå ­™°;´²|}ß¹òÊÜ¢¬Í8óÙ|¡¹Çõ¢Tn¨1—n©ìvýj³–).\9öv¥xòº÷¯‡¬¶"¹X©P+ihk½!ÁÞÙ9 ÖM˜Ô¶%v#bc•Äʬ\;þεpèåÒLùø©}1J·+ÅãËï¿=ûœ´}׉ܱ‰«{G'—ŽerÏoͬ<8:Y:Q^?wîÒ™Ç_êt÷WLì%NORâšÄŽvGDI¬µJ%bo¯3Ë!p`#0`Ûë¶VZ²®Êa½""Iec!¸nThµ½¢ÎwrÏEÆóü´kâd<”¶Ó´ÖÚò’µuÖڮ봃Gžüá†[3™å©É=Ï>Z-.•V§/¬¯î]hÔæJqœŠ´Ö’Ê, ¦‹Å I4Ñb=Øézwš-0 åË¿»¶/»pF•—ÞSå•÷ôÆòi§¼tZo,Ÿ~%õäk…êµ\P˜q½´V*QZ[¥•›¤’°“ £0ßm5Üe‘¨vÝZ~¨yph¤}`l²x"WX_Mg6‚°“î$±%&Ým7öVE´(%ÊŠh¥>í—Ña»"a»r©ôþOJƒþ·¸SŒ0`øcóúë›üWÿëÿYä«ß±Ÿþ·F´%VÛâÊã ¥Õ®ï9øÂ#žß R«âl>ÏäVÆ<¿1Ö¬ûíòúãó©t;5½çµC•ÒX¥RtדN½ä¸Þ&” +IÜÙàÄh°-°k(ÕqŒÕö‹š?bDDK·=V¾tnì{qìG6rc퇞X«ZÍázØn)‰µ 3ß{âØ©ÎDm=zó—ß_ü÷çªÎnz]]·#B`Ûø@býdõú—ÕVkù`'¤³ö”Š”ãFŽˆQÕò¾µññë˳ÎÑL§0ãÙÊÕç*ƒí ? Ø5¬õ7ÝÛÔõËé±Éó{=×:íÖhµÕ©·[ãM±‰5FÙTºœÞûêƒÚ‹½v=Õè´"µ¾’?“JÕ–V.U¯oél!v‘MNiVF¥3ËÃûŸ{2›ëLµ›þFqeòü•‹_|ÕÆC]­•2ÆÃ0×Ê®OKÆëj'ˆK«ûÞ鶪Wݤ˜Úò[Ø"Àj[¯œ\~óÓÿ'_Xî´r-Ñ"&ÎF7F$ŒÄQ6\šêìÒ¼|]êaKdIDAT´VAk¥:••Jqiù6OdØ~ À¢x¼Y^ŸjŠÜ8ÌYkû‰L¿úgQV)G™¡}Ù­ë`k€hk•èøö? ´µJ|)ÀŽ¥ݰiÇñ\˜Àv,p·ŒˆÖ)í¦³ Ý@?€»fDûõ‚\*7ýXaÐÝô¸Z;FkÇ™=F`;¸GV9¾—Ý“tý@`î…ÕÖjí§r#°#€»dŒ²"m7®¹Ù4;%€‰s€;¦%I”É\=|üµÏÓÎ]x5¨ÈøS¯JñçõAwÐKàv)£D ‚Jfß¡7OŽM.ž[i´ñ3¾Î¾*NÖ ºE€^#07£ŒJçV ãçA+7±gý„çÅ)/èŒ5+áó—ßnüÉŸý‹ëÝ*@?€MX‰õÄÔéÙ£§^þz¡Ðٗĺ›Î$#I"¦Q5?zý¯ÖþÙsÿîÅ…A÷ ÐOìxa[~mª1ÊÆV[k«QF9ŽÕòÑ[µx~äŒOÏŸh%A’QJ$îH­¸¬AX»;Ú·ÿÓ×þf½|ýK¥òÕn¬;Z¬#¤‹ÙÃGÞy ›­4êCÅFu´\Z?¸j“ü©E*V…Ñ‹ÓãÅ9QÖ3Fl»•,.žo¼1¨{ØJΠúé3_;ùíýDÿ(?ZÊ{^ÙM§Ör‡xõñÃ'ßzº0´z,M˜Í÷ú¹Ññ…érqtÑ$©xjö̓'N½úõáÑæ­?öœXQùQU»úBãÅz½ êÞ¶;Ú#¿wò7³÷Á‘ñæ‘é½+ϸþèðXùAcŒ½vùø/Ÿê•Z¥°¤×‡G'6NMÎ,L’FçÄ#oÿ½üpû v>ùŒ(%ÊóUÖqœCãά¿ù—çÞÔ½lv´ìÄ#æúò+•Ê‹¹|eX;aÎq“ôüûsÏ.\þÂ[ag´‡#­üÐÂØÔlå¡t.œ-Î¥Òñ˜ã¨O?ØP‰X£¼Äªk/ÿ¯³?Üâ[ØRìh×ÞzïZzì ùD=¢+³óÕ’¿jå»]§µQ:¼`MˆRÇN{xlu* 'üÀf´sóSЭuìúÞSG.O<<ç?ô•&Ž}éØX£™ïÔ——™¦v uë·ÛÛ‰¯~ç+#>{ÌK;bc•Î-Ž4“U­RÉGoR¢FÆNO?ô¹ÿÁÐHû R·~6¢Ð¶{Á»¬” DiÔÌOæÏ¨?ýó?þó«ý¼'€­Â.IØ]”¶Íú’ÖJÉÇw[µb«Õ#륕Óïtö‹Ø[޾y¾JN©S"rêÆ+Z²û9­’½ßú7_!•ñ|Ç—t'*j¨gÿôŸ÷|Ÿî  o Øu´¶êÃíŽ>Îe뵑Uc–¬s›“õ쯔ñS*;½ßùƒ‰=Î7D+­”8¥{z=”7E„À¶ð¥­ ünJ+õ©âv9žJ;ž¤E‰˜XDÙøoü°|¦‡­l™›.ìv+Ûjgkö^ÒÂ' Š$±ˆöìü»Ï¼¸Ñ“š[ŒÀ|À(mMìÆIb“[¿ûöhGÄ„îþÏÿã¿5Ú«š[‰À|ȈXãÆÖ(së7ß×ñSîïžüü©^ÕØJ@nì—”J•ÒûŽ^xÒóÄïU]kEâØt¢Žál°-±è;Ÿ+7ÆZ5½}so_8:9½ñ˜Ò·ÞRõfÔÇNp°"¢”Ê»žJÝKM€A!0`wSFMïÿå'çz¾ ä3L‰¢®ÔL"±ˆˆµ¶GæŒrL¥'ýl1v)-ÆXë¸õ`jvþ”ãŠ+÷”i7duérüßµëþÒ«ºµ¤µ¾\?ÿÌËñBØRìJž¿œ=rò•'F'JG³ùÆ~}ÓDnL?ò|›Ï ›Ç*ÅÆOþËþàÙ´ 0PìJ¹á¥ñ½‡~+•ŽFïq`á#ÖˆtZáÏÞ*ýk•÷.ô¤(À€°;||£TÕôö=ó„ï'ù^……J‹Nºíhñ{ßùùJO  Ûªbç‹ÿú·Vb½ÿÐË'§¦7ÕŽõzy¥DÒyï÷N|iöžþ£§‡{Y`P Øù>¶­ª•Pï;|åó¾gûq)?Ï÷ÕgGò¹ý¨°Õ Ø]¬¶JWDÄk{^ÞŠX1õf;¬÷º6À °«¸nÇëvüZ³îl4ëºbí'V7ܳ$±""οvþb/ë »Š1ÃÝ7~ñµ?{ï̓?h7ƒ’µªw£ J$U7‰ÝÅ«Ï_íô¬.À°;|0ŽGÊ ­ŒÌìmM…3½8áCJD¢PÊõŠf‡$°c°­*v-"bä౟Ÿœ;~úoFZsJõvOU+"qd–V¯%ó½¬ 0HŒ0`w0"Vêþ¡c§¿\iîuXIb‘8LÎ_ziþ|¯k »H:Û©š5:¾õ{ïœãˆ¤²ÎO~ãàoË7¿Ù³©NƒD`À®¡Ä7Ë‹Sg’DuûulAÏí‘òû×ï×5¶»J¦Z­f°nôü ¥Då îSÌ~ûÿê3ý¸ÀVbÚv¼‰~g.]Ø3æx)ݬO•»í`ÉJÔÉä3ÚéýÂ×Gk™sœ¤´´4òvmq±/S ¶;Þǃˆg«³åõµ=ó…¡Å¡l¡=­TïŸÏWi­ôìô‘üù7þïÙ˽®°U Øñ>Œhm•5™¸QÉ.M-Ìù©x¨»&y)5¡L’›xðð;ç~r¡Øëú[À€ï“áÃ¥ VÂp¨Ó¬{ׇG—øA’ïuhPZ”ëé¹TFU§N<ðÖ¹çÏqú3ØvXôŒÏje•úõ0`µ-­=´xåý£•$*ìýuE‚´©ŒóûSÝÏô¼>À 0`W³Æ5Ë×;[ÛÈ\µVL?®á¸:ŸIëL?jô»^ u/|Ù$ªO»Ye¬êË6®ýF`À®gkV=W-g/Y{ïç3X+ÖkEâØv£®Y‰ºQ³½lµžïAlGÎHû™SÏ>úù—÷ÉÞK­VÝÛM9dlT-Æo]}«óg«­Ú»½ê`+QâšòÚ‰kËó /ì›[üŠãŠwWu”ˆÖJ*¥î÷þǾñ_'N5/þàb·×ýl¦$ˆ£|xþô_¨–ÓWEînj’µ"éœLLÌøßúûÿòsÀvG`>¦Ók_<ûÙg5oínk(%â§Ôƒ#£öT/{ð1ʸfué¡……Ës?Žcu×£aÇ^©®ê ½ì ` À¯2A¼výäû¦S¹ë±m´¶Ñ˶À| k­c·uWŸcm·Ûê°~l{àS43µËgù~µ’¾r'ËŸ•é4¥ÚnÊÖVõûýë`k€Oa?YœÿÜ…³¯ÿÆÿ.®æß3F’Ûù\êv­âltZêÚ‹ÿñ™~÷ ÐoΠúmâø—§†öŒ9nJÝÉn©J\ÛhLU«å‰Ë&i×ý s\“ÒÚ:J©Où„•f=X»|zÏOϼ2ñ®JgWj‹—Ú½»€­G`ÀŽw·AÄŠ‘°;ÔY_92¿¾6uFL·îèDDWkh-KJü Éç‡Ãa›˜ l K§ß¾ÖëûØJœô Ü%®iVæÊï½zðÇAzý•™ýçæ&÷\;1:^z8HÇCòAnPJT*ÝžÜ[¯\»À¶Çv¼»aøUV”‰M.ÜX;¼\ZÛw¥ÛQ+^Ðò3™Î”(%ÆX©¬ÅϽý³òŸ<ÿ~t©g70 Œ0`dzVÚ‚ƒ»¦­UâFN·=Ô¾xöé·›õ‘#¾NÔî´ÌJ¥¨¾ûÜ¿}CÛÀŽ@`î’ÖVù:Q¥Õ‡[­ÑïNO½ò®ã\º¼t±ó¬ˆÄƒî  @´{kgÃÏ_ºüÂw¯º€^á G”x)/³'-÷¶Pà¾B`zA‰µÊ ´7”t+½D`zÄŠI¬éFƒî — @¯XÅT$°ã€QÖ8Úe#°³€QJ[eÄ º€^"0½`EYw;ÝZ{Эô¸gZ’°£Âv£Z»~¦8ènz‰À€¯ï‹ ´H’tU¶ë§¿_í÷å¶ 4±ãYm”ˆ|û“‘•£µã{JDâ¾\`@ Ø5¢zYÅIËJÒãÂŽHÜ©Ûnc)éyu€"0`—ÐÒ(]ŠZÕs¢2Ý^W·¦¥ºÝjU„]’ÀÎB`À® µQQ·VmŸ~þâÕ«ÏwÝÀvÁ¢gìÖjŽåù™¸|y°)€MlŠÀ`S›"0Ø;ŸÕjÐ-lW›"0ØÀ¦ 6E`°)€MlŠÀ`S›"0Ø”;耭’šžuƒ/ÿÎøÜWâ{­eMW·6J•K§𶬾ÓìE÷#vcÄfÆŽæS&Îßk-­Du[å°Y]­Éê;^ôp¿"0`×püÀ:Æ»·"ZK‡ÊFÝJgáõs"’ô¤9€ûk°{˜ÞÔH:µ¸¾viuéüóÅT¸¯€;Ç ·S[m—®¾tvнlp›¬‰uX]m”/ýô¥âÙÿ·2è~¶»‚Ö¢zQÇ8:,^~³,"¶õîwà6)ǵ¾WpÆ=26è^¶ ¸J‰ë¦Æ³ƒî`«€Ûeµ×KåÆL ÏØ%øÒÜ6#I&Q»ÒÖ0€]‚ÀÜ-QØV…âú¥·^Ø% ÀíJ¢¸S]^/¾ÿõA·°U ÀíPFe°´Tt+[Ét@¿MÿÊ‘Ôð̨vRêîgi1qèDá†u³£áÄ¡§Žy®›´*Kž6 pŸqݰXê¨S »r8<ûØo¹AÆ­•.ÕD„ŸÀŽÆ”$à–´ÄqdÃêR5nÕ—‚üÄ´öÒJºžœ p?#0`dzZÝó{%Ö„íZè¦2Žã86é´WKó/_ìE÷3p”²Öñ³~~æÁÑA³Y[\‘hÐ}ôk€[2âxYŸyh&îÔ÷iÏ+wÊ‹,v»¸M®—NDDºõ%‘¨!rãù‰Ú@Ÿ1% ¸…ÄÕ©-ëÒ•Ÿ«ÆÚ9§½~ÅM¢hløàÓ¹A÷ÐoŒ0·à8®•  ´v‚Ne)r´jDõòBeå­ê {è7F€[HâŽî6×=-nŽÛÍòšikr÷§ÀlŒ07‘ØHuJ Éʹg¬5^vhÿPsþô™Zm±|»5r‡¿0éÙnwãòëŒH€m‡ÀlÂ$‰tË‹qùÊËó•3ϽššØ7wZûJf~ãNê¤Â¶Ú‹£À¶D`6a’®­Ï'ÁðÞ™©'¾ùP¶Â… ϼ$««í;©S¼öæJ¿zè7° ×Ϩñ£Oâh‰å‡J—_º.««¡ÜùÚÓþ¶‹ž›pœ@’nG·Ë×l»|ÅøÒ?=2zäoÝÀVa„;žµZIrçŸ3I$­õ+quåt7éÔÒIgt·¶×|%"gzÞ(À}ˆÀl"1‘ÔK¥¾zVD¤åø™hcñü™±ãA÷°U˜’lB+GéáT›È˜¨³d£æ²$ñê;ÿ­y'uFífòõ•K5¹3ÜüìC)oÚs³c¾ç¶úÝ+@?€MXí(å¤\ÏÏå‚É£^mþõëín¥*"Ñ­>;´ÿ7ócy47utÖÆ¡Ž›µ«ýï ÷ ÀÍ(åzÙqÝÀ‰ã¶3웫Hê¼ÈâÍoÓ{?ûÕ#¹Ñ¹üÂŒ×,^i·»5ÎbÛk€M8JÛôÐlœŸ>¡¥+azxÿpzdÆYìÞü“{RŽSóÒ#)íx‰X{§½Ü7anFYk:-77~Ì1ÙúR2—ËM-¸ã'2™±üÚÒëßûõµ }Ó­.‡ÑÐtâÃj]ô # À-GYc㎠»VûéÑ̾ǞÊOøíO ""ͦÛX?]ŠÂjÑÚ.lkà&”ëÚÌðþ0O¬˜Dií)‰ëIÔ(Žúâ)ùõgH8ñw'Òc‡GZ×’n­ÈS¶5¦$7¡Å‘ ?nÝ̰Ö~6 »5G´ÊÄaמ=ùˆŸ7ê5›ªÖÛïzé=Öê(ìÖ;®Ÿ«$ô=Ü p+ÆHÔ,«NmÅñ3c~”›ÙÛ®-ÍWWÎ^,Lšr‡ö?h}¿ë:©Ù¥3gÝ s^ûq³~}m_jdöóJ«;:è à~Âd à6¤rãfxïgâ ?Ñ5qbü 0äjg:¬—Zëó/¼ëyÙŽ—ðr£{‡—^ÿŸÅêF9S^¿Ðn¬_(w«k¡ó¬€í‰à69¾oƒôp¤$©u»ÍªŸÍ{¹±ã‡ÚÕ…‚…Úšš}ò[{¯¯þ¼(KW㊼–ž}x¯µ†“žÀ¶D`n—ÕÖÏOªÉ‡ÿÎdÜ® Ŷ‰»•lÜ®ìmW—êIÇN+­’Fmf,ž±%¹Ú)ο^‘ù׋"OsØ– Øœ^1â¸Í2Ö?êÔUsõ¢©7Š-“ÄkÝÆÒªv¼X´6Ú÷2¹Ü‘°‘ª¸R,F"Ïǽè`«€;eÅ*ÑÖO ‰3ûòrã¹`ílÎDá^›„ImõýZì8ì#AA{íîhëz–.T®¾UtëwŠÀÜÇ lnì@”ÎO«$nyQ§ªTÍÚn3ˆã®Vnj8«Ý‘(®­ÀvD`zÀñëøAâçÆT*¿'cm¬¬ MÔ¬«vùŠ5µˆg lK|‰zÉq<߈¤D´ˆ—•¸S‘vmmÐÜö†úˆ#""ÊK•βKØ– 6E`°)€MlŠÀ`SÿPvàA\ó7IEND®B`‚calamares-3.2.20/src/modules/locale/images/timezone_-5.5.png000066400000000000000000000015401362604102500234740ustar00rootroot00000000000000‰PNG  IHDR T¾ãKúgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<‡PLTEY‡6^Ž9Pˆ.7|Z‹GS}2W…5W„4W„5H~(.t}½L…ÅQ‡ÈR|¼Lh§@ÂOÀNi¨B‚ÃO€ÀNi§BÂO‰ËTŒÎUŒÍUŒÎUÀNi§Bu³G|ºK|»L|»Ls¯Ib™Dh£>m¨Cl¦Cl§CeE‰ËTŒÎUŠËTÿÿÿ1³jÛ)tRNS UÁÁ_ rp~núùùú|1rpq7ÇÜbKGD,ºÝq« pHYs¢¢EÝ1¢mIDATxÚíÓµÃA™™™™ûïω%¥Ž”ün 7sIÅ(•s•ªVo4S­vGëöú™ÁP½Þ™ñD›~òfs=0ƒÀ `0˜Ìf€ÿ-–«õÏf»ÓƒÀö‡cêt¾èA`×Û=õxÖôŠðá¯ëòØþ1%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/tEXtSoftwarewww.inkscape.org›î<IEND®B`‚calamares-3.2.20/src/modules/locale/images/timezone_-6.0.png000066400000000000000000000406441362604102500235000ustar00rootroot00000000000000‰PNG  IHDR T‰=»ÈgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“ pHYs¢¢EÝ1¢@tIDATxÚíÝwxTUÞÀñÁ¶®uí}EÅÞ  ¤ ÒæNz%=ÓgR'u’I§w-$´@ @Hï=qW}ײkï®EEòÎM@ÁõûyžßCV²œæë½ç‰8‡.»nä5£§oˆ±Ò¶)­uŠó>úNåîùNwŒñ¿’Õ‚ €` ‚áÃÔ;Æ Áp’`pƒ!`‚ N3þþlÐU¬@0ü,q+p¾ó¹`‚ €` ‚á׎•¶[n©î±Òu+lô]*ëéT™¿V?âVèrç¸éðg +m§ ÑÎY«²¼f§-›—£zÜ»ÈíI¿å®Oú.wgÔDí˜Ûžñ¸ŒÕþpÁÐydįÛ¶±-*Û8óĶš§^ãž?¿0`qƪèRe­j£ÏžE®Ò+o·¼úºQÖW_{÷¸«þvçè+¯¾ëÑ¿^}Ï#X à VÚ.¹¥¦SnרqHÞkož‰I;âjo[ØrÁöÆGÉmOyJn}RÜò„»ä†‡í$×>0šÅ~ïÁ`£oQMNߘì;¿pAØÊøMŠÑÍêͺ­¡}->Ÿì™çpþ.áPv—ìÛœÙþ‚¯…ïãwÿQ®&ñ·ü!‚¡Sa¡ê‹70½ÑêÞh}£ÚknÎbý¶é{̡ЩÜÚ_é÷ïÔFïÓ›½?6¶Êöfußåö?˜Ã¡¿ðùÁ™±GèO­ÞSo”9ò· ¹êfÉ¥»í”ó‹Á íPLHܲ6¬<ìT3&tS„…ªñÇXO6rËW˜TøZr]À-ÞÿÍéöú*¯W¶_|ZPø¼´?³ÍçÓ°U† vqµÚ Õúi¦b£Ï¼Ì"UYÈ®ä:ŸwÓ›=?Kkôú$¹Îû}EÀÿE‡7ë·¼¬¯½*_Ë`8ÃȱáåþæP[kÛ•¿8?¾ŠÔ®tÉÉŸ²\S1}…²R·5à¥ÌvïŽîC8v²»¼¾RmR4ºå-És2nHqL]Ÿâd,Ê \’¾Z½)¦ÙPü²r£².hi܆øÊà—LÞŸ%Tz¾*/•Ù³:À°†-~ÖúNåñÇ¡öÄXiºc~º;áè´¨\²—äF•†·¦6Ê>Ïlóü"­ÑçƒÌvÙ×' qħ©~ï$×½ªÝÝæž?{–ל9³CW¦–¸ä,ͧlSL5®Ì Xd( ]¡«ðžµÒ%-èiVvÁЩ˜šYlôœ=kŽ[Þ¢<»¸zͱO’×',Ò–O_.¯R•íIªñÿOr÷{»„ç †Ù#nl–öçt{}­*‹lS–…uj…OCŠb7=+oSø.(\P5ýŸ©!¯ÊKƒ«ýæ<ÇêÃ,,5Šˆbíö„¯¤5ú¿ã=·`¾ml“úè Íö†ÍIêM¡})õþo&×ù¼oŽq>ïTøÅ`8:»…þÜÏo³:¼¿Èî”}“Zïó^à’´b¯9YK«|ßÌêðø!©Zú®fǪÃ.Ä™œ¾Ùà’½*S¼Ù{nÎ"»øŸž2ØÆ6«üe-OmðËÔ%=`l•}m¨õy·p·ôHHÌ/‡ÃŒ=GŽRís?¬ÝÙ!-ÌZ½6ª)®Òÿ5u™÷®ÈUžãY`XC…¯µ¾ë˜= rqìâšÔ¶±-*ñɉ·8;$¯K‰*hI¨ò}#½ÉëSS§ç×Ù]žû2ZüÞOoö/³]öUnp ¯OÚìÅl'¾¦”Ó%û.µÑû£ÌvϽ†ÿ7tÛ¦ï \Zbù« ±›¶¿ë¹¨â+m»JÜìüó[œO1æhp6-ɉ*Û¼,}µÿ”âé+ôåþ‹×ú-H,•¯Ø_éù^Z£ôëœnñr6éá_zÚ`þùþì.Ù·-ÞŸDûW»¦=ÃêCÌ2Äa´jcðFÅýN'ãºT u»ÂJ{|XiÚ–šö'Çžš$Æ8Uo´¾Yå5Ç´$v{x_F‹ß{-¾[½>Ÿ˜#à›Ü^áÀ‰‘ÛëùÝÀÝ ]²ýYíÞŸiÊ#:åëÃ:"KBzܲ—X†G>ÌêClJœãc‹ûÿåõ «C^ÒWDvù-2MH¬Ò†A«2|ul¹øÏåëµ;}d/™”º.EÜË`£oUÞøÜ¢rÍYœµ6ª1¥^öé©NL:vctf»×纊À—4å¡}á«5Û#×(«“ªýÿÑâùEl…×?#VzÙ±:ÀsÔOŸÑäñOñÈSñµ ñC}f›ç—¾ Œ+lô k]›2zmtcN·ð}¾9*r{¼ö¥4ø½¾:®¡ÊëݬïÅßWÜÕáùubµÏ;¦NÙ79]²oã+ý_TuÏ/˜«ÚÝbêôüJüóÅ_ŸZ/¼¯ÞÈ)IÀ³txF±6dmjCÈëÙ]^{ ŸçïòèWm’7:g­ÉŸ¸çÏ›_9ýñ5#1Ä0‡Å¡œÙ·ÓWh+ÓVÅ'âëJâ½ ³g)7ÊÒ›ÞÊl÷û@<žUµ)´'d¹z[TitC\eèó‹ÓVSÖª}çç/J©÷+«Ý÷ãôfïM²oô[¼wÎ÷µdu€!6ÊÚá^Gà “±('xYriF‹ïæ`Èëóè^«ª¶7TƉ¯Ù'•¤-UnÏh•}•Ùîý¹±Õ÷äêà—½çeÙÆnµPuÅX¨zc~Ú8ݬš˜´9išiY¶kî’\Ç´õ)ֺ̈́„- “¶&ØÅÕj­õMj'ã2Sà’„õÞsEŒܡ+õ[½g„­™jðå¦g`¨=hÿôô¢°ÁE ›&¥gøÌ›9?ª4qsôÚ¤M^sæÌÿã -ªi¦Ya«R×/K)Ñmþ¼®búóŠÊ:å&mu̺ø­á«“6NÎXqì¦hÛØFµcjiª½as¢¸yÚZ'ÙÚ-·‹¯Ò‡®JY›\ürjcÐëɵÓ_Œ*MØ<Õ¸2Ëͤ^âUàfÅêCì^[ûû¦¤ÎVOË.ÍŸP«§êŽyNÑó¬¼'ÚBÝsÜ©Hšî˜qÊ.¹½¡Ì ÜÝWüO½9b·M!®2èeeYDÇÄÄò„£¿ÞBÝ%f,*H®óÿOjCпÅ#X'$l| Ѭò™Ÿ·(µÑÿÍ‚Kß<úsº…ý1ëTµÎiòÅS“ecX`ˆÝp¿Ã£C·ùXi{?ÅAç/ÞÁ`W§š¹>Õ9kmšcjy¢½a{¼cê¶ûäÊØÁ£W¥¦KîlZnRl˜Þ¿3äEÅFUÝ„„ŠxKM‡bbR•^<ÆÕkNöMyÐS§t¿¸7"¯Oö}ÂÙkÑÅ2ûc¿Oë0‰ßl‰kªƒäYZ8/ozÞâg­ëŸÄX¨;äâ“+ÍÀ rKMÏ1ûÚ•Ž©kÒÂWÅoÒnnה˛ÃW§¬ó_T°H˜¹$ZvI†¸ùYüwıP÷F[k›Ôö††I©åI“Ó×§˜#!-hiÖ ÝÖÈΔz¿·Òš|>ÈlóÜ›×+ýáè%n©õÂ{ª²IÇ~Ÿ·<õä_ÜÓþnjs•äÒF°rÀù†F>²ÝÇ1mmº{^þ\ÙLÓ‚¹“RÖ¤ÙÆîÔ‹–í“Ë Vš6…xï‚{~Þü„ÊÀWÄ[™OK’öçöŒ­ÞŸ%ÕýK63w¡KÎr“Kör“÷ÜÙs|æÏœï–»0?¸(qƒ|CT‹|}T³©SØoê¾Ëß%=\(»jó×3 ²wO †ˆ.þq•е®ÙaEÓndå€óà®q“îõš™\¤ßâ·@¿Q±azObµï†šà©7G·¥4ø¿™TòRÀãŠññõÚ ‰;âÜóçÉ7D7§5ù~Ý%|;xƒ´?«]ø6v›ïëiMoŠ“Ñâóqr­Ï{Šõ¡á«cjÃV)ª‚—é7i·DvŠá`¨õ}ËPë÷¦¡Æÿ?úm!û Ä1T ï¨Ö ÇCÜvé:s˜ô'TJ_W®÷x€•΃ _é¿6¹Þ÷Cõæ¨vÿE†]…ÿ+9݇òú¤Gnf–ö‹·0OJ-O÷(ˆ¯(9¤”'y.,0À梴5a« ‚–¦­ Xœ½,¥>à ñ6ñΆä:ÏOb·ù½*ßÞ±&ºÎwARɤ”Ò4‡ä-‰®¹+³œM«ÎYÅÆÉéR¦צyÏ?ÛŘ”ë xäØï3bÅä1еÎ)˦Λ|9+œLµÔ{Vä¼Äjßwsº…éM>jÊý_6¶ÊöæïŽƒÐo¨õ{Ë1­<ÉRÓ-7OŒ•¸GAÕ3>~MªlfÖk]£jðò¶f•÷ÜÂù© þo‰·F‹'%ìôzW¹1¤/ªDSé’³4G<¢UÜß`¡Ú=Nµ+Jüq`¯„yÆ©vG?êY|Ï„´‘Ç~Ÿýýý’§¼,.59¢ø+# œ•“,uåÞ5ºŠ —ŧ)õ>ï%V{¿“Ñ,ûÒÔ!Ý/~èouŽÛðÊ´ìŹÎY«ÓL‹sÇÇ—'¸æ®0ù-Ì^¹&¦nbRY’•9&Ä–lô 𠥯•y½Òƒblý=rºeûµ[Cw¹åÍš55sUæÔ¬’t·¼¦i¦ÕÆññUzKu³rŠqCêä$cš]LÌCÇ~Ÿã”¸í%“´ÏI.¿u΋GìrÎÈ6ø_–瘺:]6+ankàK¹=Â÷…÷#ý¦.Ứµª*—ì¹…ÞóÒVúÎ_'îGH®÷{ÛÔ%û&³Íë3Ý–˜V—ì&ñ•¥)é› Ú-]ù»„CGŸPˆ“ß'Joöþ8©&ðUCmÀ µA¯¦6ú½“\ðM¹²1z­~{üΗt[<_Œ\-Ldu€!&ÞÃ0æÈ= –êÞÿE©«­ž_dwʾ5uʾØ„\ëý{~ák]½zBbyBT‰z§©Ãó«c`Ï@ ü *‹nOSš”º%Qµ)ª¥àHpü|¤#žˆttÄ_›ß7øÏSNr¬*€!ðã= úN¥ø:‘CrE‚×ìy³¼fÏå9{þLó×3= –䉛”mb[T6ú•÷ܼ…ºŠˆc›ç—¹=²ý»eów ?¤6ø½m£Û©·Ò¶+d3çÍÌhñú¯øóYí²¯ wî‡_OÊêðÚ›ÙæõEáI‚BŒ‚–ÁС_)²PwÇ;–æqHÞ<9­$ÍFß:°¹Ùɸ"ÓoAü:ïyy‹äë5U‘%q[Ä£W-5mJñ%Û¸{Áü€Ei«Å‰Ûö|r]à¿ã+C_ð_˜¶*²$vkf»×ç¦Nïϳ:¼?7¶ù|šÙæó‰±ÕçýVï=‘«¼Æ³:À0 ñ)ƒ•vpó²ùÇ Uo´¥¦Ué˜ZœnW¥³Öµ+]³jbâæD U§Ü6¶Z7)eÓÀMÎŽ©ek]½fœ²7zœª/ÚB%ÞúlˆØfµ]\­Ö6®^k­kSNH¨Œu2®Ìœš¹‰÷Mˆqñœ¢]>NÕ¤§jW>æ¹zú¨‰©#Y`˜ƒ¥¦]é9+{‘¦<¦%¾2䟺­ÑíQ%‘M±Û|_Kmý7¹Þ÷ØíÝS2JÓÄ'vq5º eIëâ+½ß.ØåÑ/^ÔvtÄ ÌÙ]žâ†ióxîKixÓoaúJkmƒúh0Xi;“Ó×§-3®T•iªã¶Gu%ìŒØ¿3²7|Eèϼ€1¬0ÔÁð€ÃOWø.K-Õn |1­Qø2·Gz0—´?§Ûó›\óˆ' ‰w((6„vÙ6'‰¯%Ù'—'¦6ø¾'FAÁ„täô#óï±OY¦ª›”"ÞÝ%÷HLHØ©)J_RôzN·××âÐ…Ï{˜Cã?µÁÿ]¿9+ìb¢fu€!v·…ý(‹˜’I©eÉþ ³–‡­Š®Ÿä™?Ä‹ø Í1ÙîõeÌ:E“qaž[î¼B}“Ú!¥"!­Éç£O8Cáh0ˆO"KtÛŧƒ±Ð%·7l‹(NØ”Ùæýéàñªƒ¿^¼Ø-¡*ôÂ3-£Ic‚ `¨MÒØ[…¯ /öš3gžCòæ$ל³“ëüß*Ø5x jn¯ðCÂN¿ÇWNÿgÐ2]ytih§x˳Cò¦$c‹ççøw ‡sÄãS;|>Ëîôþ2§Ûó[S§ç×âkM“¶$ˆOÄ×Ä ÒAËLËM²¯O¼—!¥>ðßÒ e³fÍ YT´ÈÖÕ†ØDÕ$«ôF·f4û°3üùäzÿ7Ì‘pà˜ÿòøè} éÍÞŸh·ïñš“·È>i{¼zstk~Ÿìñ×d¶yîU–E´.Î^¶:umÈrãêI)eë#±`©é–;ggÄíÛýó ݤýq;"{ì ›CŠ2еå>/j6K§°:Àe7ùþ¨Õ¡Ë“ªBþÏÔ!ûúÔ·3ÄC¿x´x‚ml£Ú)£8ÃØâõ™øs9Ý^ûB–'l¸»aà8ÕÞhñ¤£GµZjZ”¡+RKsº¥NvY[F‹÷ýå-qHÞ˜ì5S¾Ú®ÌŠÕ†Øµ£&Ýi­\=}JƦ‚Åùò êS§×—'„Âá£_›£bŸ[Þœâåm“¶&h·ú¼–\çó^ÌZuÕÄÄqÇ»zìñ©vñ•±Q%ºíy½O ™mÞŸ.ÉXå=/gItIPSôa"« 1ñXÕ1a¾VÚ…¥Z¼¡¹^°(kyZ£ÿ;b(ˆ§%¥5{~–ÝåýeV»Ï§êMÑ­ö†q#³÷ÜœÅI5²tþÿò[˜µ|rú†+mûIƒabbE¼²LY'ž†t²§æ?çPìöðÞ€ÅIë"V…ÔÆ”È`8Ãñ7=‹Ó®ð(˜;3¥>赬Ͻ‘%Ñõb¸d/Í_§œ¶!ÅoAÚª¤Ÿ·Å¨'·W¶?±*äEï¹3çYë[T'ƒƒaK¢bƒºZÙ^ÙÁ”†€7‚–¦ÛÆ6ÿj’¦S>%c}ªf‹¼9§[ØŸ¿K8”ß'=”×'û^<žu`ô Bj½ðžz£l« ±gdöûÌÖç 3—LLªŒŸ°=N|}èÄ=âÓñëñ 5:ý¶=æûOuüªùçúS|>ðž›Qd¥m;at‡bBâÎXaÆìÙÊò†ø!ÿ_­®Œ^ÙœÑâõ™øû&UÉþSâiÏêCÌ^9É:¥Î}OF‹÷çáű[ì“·Åû ’8)å‰NƵiVš6¥ml“:ªT¿ÍÔîý¹¸IyÆéÀ±¨GN:ú>½ÑýɵuÑ¥Á-smb«µVÚnùñ{7V‹ab£¯ÓºäÌ+”ÍJ[¼,i|}LsàÂàr“ÿVbM²(´H¾@³%º3dyâ‡äŠ„c_G²Ñ7hÂWk¶‰' …­2¬wH^›âœ¹4;|µb§~[ð?’ëƒ^Koö{_<~5£Ùã r›‰¶Ñ“îs5FºdÏ+ôšcZâ\f°‰­×ü 'a§ÞÞPž(þ?¿¯¡;ÆÙ´Üµ&´A»Ùc « ±I:{¯YòSÒ×-ÔŠ©™Kr\²ç3 æ+Ë i~ïæ÷ ‡ŽÞÈ,Þ›Ù*ûÌ5#$s\HÀè¦fy9¦–¦¨6¾XíûFnðCN·ðÝௗöçõ c·‡ücrÚRÓä´âtÕ&ySr]ð+‹3WLH¨Œ=ñøU»¸­}lVšƒn:÷0Cí × ¹çè³ÓÊRÆ);åa«t[]sLL*3xÎÎ](_¯¨_GÊêðÚ›Ûãùm^Ÿì@n·ô!Û]y·pÓCÎaÓ¼æ¤/ /VT)6D¶žltf›ßGž³’NŠÓÅVÈjóz„ý9ݲoTeêZÛØ*ýàž‰N¹¥¦;fZö£[–z“ÁçVbO¶pJJN¬½ag¼¸wÁFߤ¼¤m`c²Ò!e}²lVþ|}EàËñ•þ¯©6Et¨6Eµ8¥fe=îµÐï© õ ›Ø*]à’ŒUÉu~oÿ,öˆw3xí‹*\z壮+òo¨Þ(Ø-J0‡ˆKÎ’\ñä$»¸…ªY©Ú¤©M¨ÞTmàXU`È]ŸÃc¶ùXézÄ=rKMOÌàtLjÿå_6+}y|¥ß¿­ž_fuȾÑo ï ]©Û25³È4-{¥ÉQÞbåFMUf»×ç§:fUáó×?»ý9¿OöCV»ç^qÃs^¯çþœÏo5›Ã»íTñ^i•D2NrŠ`¸-¹Ö­Áü{V®ó(ó™á~Kü΂!¯Ov ¾Ò÷¤¯÷Ò›=?3u ßš:eû²»<÷‰‘ÑâóIèJÍ6ÙÌ‚ùþ‹2VzÏ)Xd5/r¤Ų_úæ›öÄ…ªõnšÄJéÖEÎÒgýÇó„ø½ÃÑ Ý vIûsº¤?je'Uû¼­¯ø?ÝÖоé+RJ§fgXi»ä6úN峑19›,F\xÉÅÉí§üæÆú“D®pá”8öB›ˆgFüõöGY1à÷ Çml~~ð÷Ëî’}£.nµÖU무Ýrk]§ÂBY¯zÂg©ëmO{]û«¿É»þ:0ίË2š]Îj0ˆ¯'jýތݶ[·-²+`qîRÛØ:­ ÖÚvÕèõÁwÛ*QÁß>0¼¸ÂØìZ-¾Nt6b!—p8¹Î÷€EI¥N«Œ •q–švÅ@,è;ÏFí?ìV`wý}vñw û^¸ôoÍ®µg#òû„ƒ†¿7}æŠmôjk]»ÂJÛ)·Öu(Fß©^v¯C“·>)ðw û^¸âÚkÍÁP÷[ƒAà?ŽiëSN pþí﯒ô÷7˜g÷NµäÊ{î½#½ÑµåLƒ!·Ûó[¿)ÅÖº6%Á #á˧^//™”°Ã9:aûÌç(EéCV›ûëgú:Rv—×WSE&ñD$‚Ft[„'“ª„Oóz…þß2¿eÿ‚©ÓkïÄÄ †ÿ p~Åo“=‘Z'ûxÆá¬ÝÒ|ÚO:½¾rÎ\š-Áà 0Ä™ƒ!Å C âdux}é¿0s¹cÚ&ÃäŒM† ‰Õz‚ ~<%ÉØêùE|¥ï¿S}ß‹*Uï´Ò¶ Á08ù}ÒC9]Âwâ^ˆŒ¿÷Mâ&èN‚ N8fµ×ó»˜uê*KÍI.p#€?w0ì§5¼å²6Å6®E5>¾Nk¿So× ±Ñw¨Æ„‰Á@0Ò`èOkòþ8¸(v“²LYo¨ z%­Éï]íÖÈNÿEÙE“g&<8Eý«ü ƒ¡Ð y}ÒCy}Ââ†èŸîx8œÝ%|£Ùä¾Á2ÌéAVø3Ã)F CµG½WË3Vá“Y<€`82{„~S‡ðºL0yº°pÁð³`Øg†,V N &V àO æûÆVϽ¹=Òƒ@0ü89ݲïRüߌ*™Þ‘Úàù‰x)Á ¿3ø%aæÂBÇ´’4UYdk~ŸìÁ #ß ¨Ÿ˜T–d¥íPLÍZiLoñýðŒž2 À/rº…ÁE‰ëmc4¶±-*s@4œÑS‚øãƒ8i~ïxÏ+\`£¯ÕNI_‘iêôúŠ`†##íOiðK±QYï·Ð¸B»%´/—ì‚ FÜ·×+üWéÿjTih[f»ç—…§³—`þ¸Áptòúd"K¢ëbÖF7œÖS‚øãƒ ~ “‹Õeá»d €`8öÕ¤C‰Õÿ2u ß²‡ Nòá_ÊÅmÀï"*dOšƒáÓå»åé>êêÑž÷\3Zö¿Ç6àÁ+C—ºE¦7 ïÍØsžƒ¡]ا)2-¦Û³pÀùpÉ —œÖˆ"–ËüÍÁðîù ñÏÊî¾S—y,¶ ›x+ S²ìi‰;=Z³:„orº…ïr{¤òz¥ vIŸ£“•ú³»¼¾ŠÛ1ý~s#gÝ7qê}¬0Lö±þKà<‡§¢WO±‹^í89j¥ÃTyñ„©ŠR—…-Ò ÎâÆèü>ᇔú€ÿø-Ì]jŸ¸&ù™€B·¿Þ* <ê¸èº‹%_1  'vÑ%ýý»$ßö/5ÿØÿã<î>úfÍ&·µ9]ÒýgåVè^ÙøÁ/ú.ÈXá’³4×F[o‘é9ÒúÉK—.—Tô'H²{B%.©SX`8¹ßþÉ­Oß&y`Ò}’Qv÷JîóÀ?wËp´NoôøÇÙxÊÛ#ÛŸÒàû®±Õëóäú€7u[£:õ[}Úä¥SS´å®Nê²iÎÓO}Î:Òá*÷ôi, 0Ü=äøäÕ ;¤Ûóz…ƒç⤤Áe¶ ßdµ ߥÔy¼®\ëšâšê|«Dò, gO¸¹"jµûìì.á«s}ÌêŒ#“Ú ¼ç7Kˆ¸è/¶W\yóC#X`˜zÄyÌ!ÛÉÏÔ!}ï|·Z°[z(agè?§¤/J{Äm®çH‹°»X`˜zxÊÓתÖ{¬Êé¾=w3d´xýwú õ6‡äãcžKÝn}ÂýV¦.¼è‹ô[<Öæv Îdž¼^éaÝÖ¨.Õ<ÃýSrž¼á‰,0\]ÿ­—ëÊ=6åt ?œ`Èé–}U»ý1¯¥Ò[nb€aìÎgï½4xáäñYmÿ:›¸ü•$iz³ÿ{B~úâû—Œ3ÿñ²À0æat² YäbHo–¾a†Ãç:ÒšßtÍ̘sŸÓ¼Ñ]z% W7=v§Äw–k˜±Eú¶9—MÏ­~Ê —Ü3iþÓc|ž•X…=ÇBÃÔ…Ò¬©YíÒw^²v®ƒ!«Ãû ÿyš5·Yä>wã_6Öï©‹X`ò)œâ[áV×+|s>6<¹‡¡ßPí÷ª¼Ôo]ä §¸Éq“F²Àp †ÓÂ2Û¤ž§ ÇGƒp(­Qú©¼Ô5É9ÙéVFn}j¤$d±›D–3Í+«MúÖùc«ô£¨Unsœ Ž£œ N,0œÜòÔÈ ‚ºÝV$M1uŸœï`0T»m·ŸðÀÓ2‹ X `˜¹í™»¯ +rËŽÝ&ü_nðÝùŒq’ª\7=!µ¼Ó^5ņ›;ÆŒº4ºØÍ1¾RØy¾ƒAÜôœ\ã¼ôƇïã`˜ƒD^ê!ÑmfgwA0TO[q—Õ㛟ñÂÃÉm£ï¸ µÁ}K^ß¹½ÝùÄÉëj<^™¾ÄEmj}“ùûqÛØGX`ØÃ3w]è•;é®ô&÷æü]çwÿ‘cU§7I?’—L[,dÙ=Ñßÿ_Ià<‰S¼#‹ Û({‰|T"qýUºr·•¦é¾ÂÝç?ŽN~ŸôpJ­kUt±‹Wþ´'žô˜p©=•…†$"'ÞS,õ”—x²Ú<^ªP8.v ý™mÂ׆Ý1k\âÓÔ[X)`LŽb´Ó£;»S¶?¿O88‚Aœ{GWîÖ%Ëu~Š•†€Ôäæ”Þ$}yÆžá 'ìkèWoœ¶v¢jâݬ0d9îSÓ¥ÿ7ì‚Áüý[¤F­œ&ÚÓò*V Âp ó÷bê¾V®w5ÚÅL¼áq7  ~Ú¿`¨ÞŒZ%d5‘E†ãƒ!£E¶W¿UêÉ CÈ3×ÝÙ ÿn{òz…Ãqα7ßÇ%¬0D|f¸{¤7I_ާ$éË]‹í¢þÎ*ç‰m”dr¬½Ä9i’Ä)ÁAâ7k ^nÁ ~?IUÒB—º[²jÀY0ÏE¹ÒC¢Ù,“h6É$Q«<$™S~Î:ÌêJõħÄ:<ã¨sxÒg¦‹Þ o Ç`Ho’íÕlò²¢ÀYà‘å<Âg¦ÛEÁ‹\Ž*öÈÖ•Ëf™gvÌÏ\çÇF{;ŒœçnWá±#³Õã%c‹Ç‹ÆV·óz…ýÃíu$1RêdïÈKGV8 |g¹þ=l™{VR•´9»Kº?·WøÁ?dw ûvxÔÌq¶Ÿ¾Tê›Ú ¼3ã…Ÿ>˜·Xø)„·ä¥RV8 ‹ÜïÓoñØaŽ„'~/Ø-JkðxI½Ñ£ÆØ"ýh¨BÁü} LáóÒþü>áPnp §[ØoþqN·ì;ó|›×'>«]ø^_îê{ëSQ’;Ÿ ’Üú¸+‹ œ©‹.¹pDø ûäZÙ;§ ‚‚ÝÒÃ✋ۙÆüA`öHž#±p8«ÝsoRÏÛIUA¯(ËÔ5QkõÛ#×è¶E•h·‡¯N, ]™´^±A]c¨ |ÝPíùžr³ûõú]{Û×_w×s^uË#,4p¦ë<Ç$UÉ^=ŸOħÆV¯Ï3š½?5Ô¾¦ßÙ_Ñ—Öä÷^Z“ÏG U¯˜:=¿Ÿ,˜:<¿ÒWøÿËw~rñ訞èç”m +m‹ÒJÛ¤²P÷FN‡Â)sy–Ï\eÉ”DmÔ>k¤Oú.÷¹×>îþË®»û¢ëïŸÀB§ëö1Jtå¶© Â'ç3òúdßË×G´I gÏvÎZ“11±"Þ!yK¢{þòl‚e¹Ži%i!Ë3VÇï zY»5tWÌÚÈ–"u…[Þ¼BKM§ÜZשœŽ#ÓiŽˆN¹ml…ÞZ½Mo¥iSYiZÕO®™>j‚þ™›vú+« œõF»ÔzáÓs â>ƒôfï3Z}>VlTÖ9¦­KµTwÊ-5Ý1VÚ.¹8–šž˜Á鎱ѷ¨S·&Ú¶ÇMHÜ7)e]нas¢µ®KþS(œ8âÏuýø¿ÍÑ |&xò^‡„»ÍÿWG°ÚÀipMt}ôj—tc«ðeá9 qSµvKÈóÓLsf8¦®Mµ‹kÔœúCÿO#>5çø§ §1úNÅÓk”£&èî!€Ó0wÚÝúr÷Mƒ§«ý ÒÃq;þåd\šm­kUžÑÿ3s0<é[3Ò2≫n}äbV8-×_]ììœÚ ýâ\Eƒ±M¶×s¶±È6¶Yu^cáÈŒSÔjîwLžpÃ.c½€ÓpÍI"W»]ºdª°Ãµö\DCf»lŸ‹©p޵nh‚ÁZß©|hšÉá–Ǧ]ÁЧ)jµ«øÃåZg÷Œ&÷ v ‡ÏòªCWè·Ž¯Ó]0dOºå17‚8!–’ ¹ã/ Yää’\ãñÊÙÜ-Hìö’wÆás0¸ À™ºå¾k$U£t›]ÊÎæ†ÔŸ÷CŠ’Ö¯× ÀÁéå:7}f‹ð錳ó:Òá¨Òˆ–ÁûÚð;65ÉI¼›áÆàSÃ’vº·æõ ‡~k0D®‘×NH¬ÖŸû8hWZkÍ£;q:T9 ÀYÑßß/¹uÌÓÇ”x¤5 ÿ¦ Å' %šÊ ‰5ºs Šqòjùذò¨±á["Nœg#¶FÞï˜lwËc.—³ºÀoôˆÓ£’‰ªñ’)ñ“ïÒ”¹Î5uH?.Øeþð¿çÌ‚!f½ªfbÒ¹{Â`£ïR=î¹PzÓCŽ÷Þòè´ëoylÚ ÇË ×ßk{ÅÕ·?q« œ%ZG‰M¤íÓ—¸(wJ÷äöûÏà•¤Cá«ãÊÇ'œ»#UÅ`xÂ{‰Ëõ£¬¯ûÛߟ–\sçèŸÍÕ·>&¹âÆûXTàl/·“Œ ¶¹Jš5EH©uß}&{"Öè¶MH¬Õû`°ºþæG%'›î/¹ö®gYPàlzZf) Yâ.¹îá'.‰Ýêžkê¾?ÍW“Çï |eªqY¶µ®Uy†›™¶±Íêñ õÚ‰†íñ.9Kre3gÎfZ–=9}MÚĤªøÇ½–º\w÷¸.þëß.¸øòë~6¹òƽúf8»ná3ÃþƨÕ.wªÖ»ef¶J¿>ÝMÐy½ÂÀ%)%¶±MêÓ…6¥KÎʬ˜ušÊ„Óÿ™Öä÷®©Ëkon×¾œnϯ’ëüßð[0ká#Â*Ÿ»¬¢¬F×¾Aók‚ÁBÝ)÷ž;{®±Íëó÷Mäï’ökÊåÍVš­µ®Kþ¿nz&€scDèûû”kÝR’ª„¾œnáÛß ‡mÞŸ 3fÏž˜X«³mVYi;æ‘[iÇFߪ²‹kÔØèë4BáœYI5Ó_*|^ú³ß'¯OzH½YÙh¡ªWÿâÓ‚8wnû äíþ¥ëHÇ¿L‰w¼G·Åcnf›ði^Ÿp¨`÷éGƒ¸"µÁçýøÊÐ"Šã7OÉX›69­<É%{u–´paAHQJ©ª,º9h‰¶\·uúó…»²!¾•Õîõ…~›ÿ+ÁE©%ãTÝ1ÿóiÁœ;¹Ž”xå;Kúûë%ö*»›ƒºùÆn“.Mor«Ïhv5¯Wzà´o6‡C~Ÿìû¤ê %V¿”Õî¹7·WøA|mI¼ì-ß$毾ÁÚüç˜:eû"K4;lcwÄþÏבàü±šn% ˜ë*~9âÚûÿ~µkÚd ý×%Æ釿ùý…¿qsôÿñ ƒ±Õ瓀Ŧ" Õ®è_uâÁœgI$÷ÚÝ'ñÈœ,± ›pƒr­Ûd}¹Kfb¥´ÝÔ!|U°[zøÜƒ´?½Ùÿ]¯93çY¨{ `¸sJœ$Éî ’\5êÉKç{Ü-/v´^í¬ÛæÑ˜Ýåñő׌N¸CAöƒxúQv·ì»ü>ÙÂ_¹"¿O8·=¢×1umª¥¦K.Ž•f§ÎZW©·Ñ·¨lb›UâÆi+­ 0\Ø«ì$+<$ßô/‘ü}œÅ%ž9“nð-œ8QµÞ}Eì¶ ç3Û|?Éîòþ"µ1à-ÅU[Þü¹3CŠ ë’ëßÃâ—ƒAÚ/Þôì· }¥læÜ™Þs ç{.*pË]œë·0kYØªÄ âFêé+RJ¥… fØÅUë,Ôâ¦è.Á ×ÝÄ)ÞAbê“H.¼iÄ?tÃskTN+²¤3æÌ²7lITµÖµ+ÄŸ L3­ÊÔmîÈéöÜ÷K—ĉÀewɾÍé–}—×'=˜Û#0Ï÷Ⓡ‚ݲCƒ#ÊlóüR¼óÁ=QÞÄÄZýîÎ0 ]vÝÈkFOßc¥iSZkO~g‚xÄÄq‘kâÊMž{gœ…ýbTÄnþ§KÎ꬧͘J0Ã9´æ`ø…ÍÉânããktÁËŒ«’ë_Ÿ&ˆ—´ý–• u~oº¬ÌyÐy&Áüžƒáh4Xi[•ΦbcÐÒÌ•‘%q[T›éÍ~ïçï’}_°KvPÜ ]08ÿ#(¤ýŠê{Ãö„‡\ y% ø½ÃàtšÃ¡K.þz›Ø&µ]|Ö9«$ÝQV‘²LYo¨ z-agÈ‹q;‚^/q;Õž‡ü]ýA˲VX¨:ÄMÏðdžSM»R<6Õ6¶Nc¥©ÓÈfe/N®÷yW|’p²`Èî–ð_”³ÔBÝ¡$€?|0÷BnW£ó_œ½,­1àÍ‚ÝÒŸí_H©÷}WZ¸¨ÀRÓ#çXUàO ƒÑ`¡ê’{Í™57¹.èUñhÕcƒ!±:è×Ü•YVÚ^‚øóÃÑÛœ[•ÎY+²ª¦ÿ£`—ôH0Hûãv„¾àœU’a¥å ð' †Á' Ï)ÚªMÊúœnéOöýÙ²}ÁË2W™ƒBÍ)IÀŸ7êf¥|½~{R×ûiM^ÿÍß%Ÿ2¤5ú¿í¿(§èI¯4é­O‡ ÀŸ/:Ža”²9I63¾ÿÂŒ•º­1­¦ï/Ä”´å>½öjßiWÝ-»”Õþ„Áp4,Õ=1–êNùĤmñAKÓWg¶ù|ªÝäÚë7kÊcæoe«üIƒá¸xÐôÄØ6B–ë˃{•ùÏ™vïuسÁ086ú6¥]\£æÙÐ|åCSÃï»í)Ï Y €`8~ÌîCÓ²§Þ>Ú÷JV Ž}§’{‚áǪÃÉ‚ÁÝ ã€` ‚`‚ €`ºS’œ9V N ùæ`"‚`‚ €`8nlô-*»øZ­•¶Sn­ë$‚ap¬´]r‡äMI…KSKSÇÇ×èÄ€8ãp €?N0˜Ã@>!¡2ÖsvÚòÀÅq’צØÅ툵Ñ×k¬uíJŽUþÜÁ ŸP£sÍY’;Í´*ÓR#þ{Mj}­ÖZצä ð§†Áh°Òô˜ÿnù±ÿŒW’‚S’‚áüÃߟ%‚á$Áð°[þÔ;Æ^ÉjÁ @0 Á@0Á€`@0  þ„Áà*CÁ ' §;Æø Á@0Á @0 Á@0  ‚Á@0Á @0 Á@06ÁçtÇh_‚ N S€`à @0 Á@0Á ‚Á€`@0øÓ7=Ã3îÁ;åöÑÞð?Œ0Ï…æ¹è|ÍýåºÑ!ëå0ÌcᎱþ7=&Ì‘>å·ÂÅ<®çcžðZ,½Si­mW À0†»mbîZ–h©jÒXªÏÃ4 ÌÅÁüú`¸ÇVy׳[c­u +m—ÜRÓc­ë’Ù‡y‚^Á0v ÚÉÛâ]sWš&$VéÅ€ ‚á®±áú ÕúЕ†u†Ú ×ü™– >i ‚!¢Bo_¯ñ]¿H½YÙ 1†•¶[N0Ã{lc›Õ«b­õmªÁW’Îå À°†»¬¢î¼N3N^=N^5.Æ<òÚèÁÿ}îÆJÛJ0Ã=nyÌåêûž{`JÚ˜ó5÷NŒÿ\t¥|Èïax†`~Ñ-M“Ük/¹rÊy™'ý–K®ùÜMÏFTDYåMÏ.b0x ÀprÕ-H®»Çêfs0D €ß ·šƒaÁà‚alÄÖh+‚Á€`ð[ƒáQs0X ~! €Ó†-€ã]qó’kﶸilÄ–(‚ÀñÁpÓýæ`G0  Îr0°éÀ©‚ahU}È%gòmOË`Xë: O Á@0¿—ß0JrÍȱ7 ~æ²ëî’üíÎÑ€“Ã5‚ÀÃs0” ŽwùõwK®I0  Ίˮ9°éyÌPôÇÛž”^ÁŠÃÈ¥Wß*¹úö'o ü<þv›äê;€3 †0‚À)ƒa3Áàx5Ãßîxêz‚Á€`@0  q0lŠÚ`Èv¼õ ‚ N “nyÂ`†“í0¼\rÅõ’«n}ô:‚ÀσáòëÌÁðÁà‚!”`@0øÕÁptÁàÔÁPF0 œN0ÜF08‰‹.½ZråÍ]k†h‚Àq.¼ärÉ7=píh‚Á€`@0  i0Lß8äÁpËãn@0œ,L“nyÌ•`†“ .ºTrù÷^c†‚ÀÏ\vÝH‚ÁàŒ‚aÁ€`@0  Vàôý?™X·ƒê®ÅÝ%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/tEXtSoftwarewww.inkscape.org›î<IEND®B`‚calamares-3.2.20/src/modules/locale/images/timezone_-7.0.png000066400000000000000000000353621362604102500235020ustar00rootroot00000000000000‰PNG  IHDR T‰=»ÈgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“ pHYs¢¢EÝ1¢9ÂIDATxÚíÝwxTU€ñ‹Rì],¨‘®´$HïÉÌ™ôNÚÌ$3)“Þ{£÷z %´JzAÔõswm»ë®}]A±!’onbE¥êû{ž³ ¶÷æy=÷œ#øÃzb¢oŸ!VK3}ƒÚ,ºQs-Æ„àmúGF¹ô´ÐJu¬S¸ÿÉ)w=5#zÐ×¢I£U‹Åçר•¥Ù‹5›õ•^ JÌHØç’¿"×yÎ õæ¸]ú ÍÁ˜]aMêMêÚ°uÚjÏùYËMtG´i+ÕÖˆsAaª«×šêšÔÖ©[’g$ìH0U—¦˜…Å å®×Ð#cý…»ûž4n»¯ÿ-ý'zÆ9oÊX¯Unãý7O ¯Š2¾ ×JëÜç.ÔW„6Î\­Ûm›¾2+¡Êïï¹ÍŠ/ŠŽÊ:KŽÉ;‹ŽŠé‡”Gm nµM_—nª¿H,èZ"œr˲<æå.±Kß”bªûÞ,„t.ƒ®Q㘞8_žë3ž;\‹Pé"L«0¾'ö0Ñú®‘®š J-Éû½þ™¼ßïMÃÞàc û|þžÓ¤ø<ó°êã° šé$iÍÁ”¨¶ð)QíáÒª ûbœsWæx/ÌY.+^Xìµ1Í.}{’EBuÌÙmV»On6~ìm3‹>é³$wYRÏëúЧœ¥y&ºîŸÓ¬ãµZ3Ì©ƒÛ€«¡ç-w ý'IïÞtÿpý=O˜eŽ™¡KˆÔn >Û¤ü´è¨x¦ø±³°C~¦ëý³ŽÝíûŠ}æêL³èzíôøêh·Â¹ò’¥–É;ã»×"H/òëµÒÛóg0tŸÇ05æ€Î*yG‚t¢ó…gêµ6©[’mÓV§O‹Ûi0‹>)}® c½Ë´œô \}Gxu½½ûIÿûûO+k¡ORû-ŽY›Tí÷ZA»â) ŠŒ#»Qy"¾ÒïÕüVåÅ/È;óZ_Åìôþ?›ÔM)S¢Z"¦¶Åû.ß\¦ßé½,gjLý57uE„}æú4õæè½QÛÔ³—æ™ê[Ô[ül›^ž¬œ5w–C–´îáˆÖ,¦EÝ p%ÝÜk„Ð÷¯{¦EÌçkÒüë×ÅW½,­9¢@Šiä6‹_Î\»Ãc^Êêì÷Óê<Þ Y“¼I5gÎYѼ’5I›µ[uÕát{mÓVgtÏü4ÌãjuÊY³æ*ƒŽ¶Ë¿ÍmV~6³,n›©þÐq3‰j‹KfÏŽÝåÿrü>¿¿ú,N]3ݰÓ0Æk3 À•tûƒ„>wŒ¿e¢¿Á>pYØî´:Ï÷s›UŸJ3Y ªO Ú_CáëÄ*Ÿ7´å! YeY¶iëÒ|§—É çÛ¤­5¾ŸµB[Ôb¨tÿWÆaùçÆÏýB»5â`Ô6mmÔ6MbÖ¬9æ†:™¾;¦ÆŒr-XP¬Û1³%»Qu¢¨C<¿7ðE«¤ )ÒÌÃÔ˜#Úé†ziß”flÒÖ§†oÐÔ$ïw/å€ê}í–F‹˜ä‚¡ŽYƒ¸‹À•ÓcˆU°q¾ëfzÎÏY²F·'tmÜö°ušï…ñª^I¬ö~S9»t®´N!`yêºèŠàvï…ie‰» þË [ÒêÜß˪—žuD~2¯E<Õ½ÎAñMa‡xº°]IÓn]íœ7kVà M¥÷|ŸŠB÷ ÜIà è}Û½=‡;æŒ>x[„´ëÐÅÎD0Ó7©­SÊ“<ç-ô˜_°È"qoœkÁ¢Ýö vÃ^Ï7â+=ÞJ©u7¯YZó v浈_§Ôz¼›ß*ÿFZQtTÞYb|[Ð&~#mÅš¼ßçäýþKª x5©Æÿ¯ÙRœŒsÁ!„z³¾Ò$j”bÖÂ’µ‰[äÅK L¢šÔN¹«³3æÛ%ªŸåN—Ù“æQÂ“ÇÆx.ó0Õ×G]4¾ ÒajÒv-r-XX¤-×Ué+Ô‡ •/g5(O¤Ôz½Ó¤ø,rkh½Çü„õRH¯ElÐìÚ:³)º"à),ºâ˜xîäç3ÒIÐùƘÈo¿ÊoU|)ý1:¾2ì zÑ%YÞtÃMÚšäª÷ƒÊâ·L‹­Ö›êÛ"F{®Uuàà²êsï(áî~coáZ2mRø¾H³èu÷ùÍÝCפ>^Â…BZ‹0-¶Fo·/Æ:uK’¼xA±SîÊlåìy¥Ò¢h±´h¾zSDmB•÷ëRH¤ôx/ã°û‡¹ÍÊÏsš”Ÿ&Õø¾³+¤5l}Ü÷¹¥óü–e¬ö]œ½ÂoiæªÀ•©ëTsçÎvÌÙ&-íªäd|_^¼"Ï6}k’ôwfœÃ\)÷ôfóô„À¥a‰ûâ¬SvlÓw$ÚgnM6¾0Ow+\Ràš¿<Ï*yg¼‰®^3%êüÌ‚ô¶ëÏÆaªk‰8Ò &:cxè4ŠÒÂyÉû}_Ïiôøo^«ò‹‚6ÅWy­ª“Y ÆîžÙî½(g™Mê®xˤÊXéÀ6é#élS½tfí™ñýî¯×¬þîÜã×>÷3œ;é™`®€û‡8Þ=Ö#ÛÙcnÖ }EXƒaoð ‰Õ~M9àýÌ#îÿ•ÊmRœŒÛܸ2}¼dA±sÞÊ‹Äñ.ùeÙîsç—Š¥‹ ­’·'t¿ØoþÁLĴ؃QŽÙ+³¥Yƒ™«·®HYï>·p¡]úú´iqÒâjéÔ禮øÅG¡.2à ¸ëÑg„ÁV‰ƒF{¬˜¸2smN£òSi7¢ï/8þþVK­S}˜XíùOíÖÐziÁrvƒòDæ •3;Vd¬ž‘°Ëðãhè>ÍùücNf?óxÓÅNwîZ3qvvãÇŸO0W$FôáZ4ebØ>EÒž¸ð Ñ»¥­L¼KÑ÷GÑQ±k§£‚vñ´ô~ñ±³Û¦C#·Yy2nOH›ûÜ¢Óâè~ëŒYtƒÖ,º.jjÌÁHé1%·Â%ù~Ë2W®J]ç³8g¹mÚ¦iÝÁ\!w<ð”ÐrÐC£” U¦úf­tZtEX“1N],.e´)N¥ÔzýK^\:Ç"q·aFÂÞXéL‡s»+ýôÑ£îÙ‡óߤ‘g³NY—f™Tžä’¿ 0fgÀ 9ªOòZ•Ÿçµ¨>ÕïPꎆ–î™c0ŒñZ­æT@0—ÃÍ7÷é1Ì!sØx¿Íj‹¤ñ‘[µ ÛÅo~MtÈ&© ü2§Iu"©Úû-í–Ð#¡k5U‘[Ã'ðy3Å8dEóJ¥ÝŒf$ì‹™S59òì£EÆûæ†:«ä=qÒ!qÝ‹™["œrVäh˃[bvw„oPïØv(vwÀKmòÓÒv«ã*Ì¢¥Œ¦³‹ž´SÂæ&& áΗÁƒCfÜ9­Äj²¶N§šSï75›Õu‰Õ>oœ[‘×,~•°Ïïÿ\òf•ºÌ) ^¥©LªQ¾_ô¢tþ‚SÎòœØÝ!­%ß[€-½ŸvÐóÕÜ¢S"ÛÃÏ=Ò$ÍTHç>„­ <¢Ù¨˜ÆÝ~§[ïé×k˜CθIá屫Ò׿4©>)¹„XÈoSœÊªW—Ã&­<É­ `¾t›ôXÒEHŸÉiT(h;»@ú|HœN¬vÿOì®Àciu>ÿH­õþgN“âséë¤Öù¼å’?·$heÆÚ¼ñë~ñ”fsôÞï?ŽÔ=Ë`|«)M™=”» ü½n¹[xb‚ï}Ã]渺ä/)ŠÝã÷Š1¾:ûÑσ¼3¡ÊÿUÏ…‹,“vÇ)JgÏNØçÿmНöóŽ]8$òZ_I3ÒÌÁw3 ÆÍkQ~¾>f§cöªlã×õ1bü¸äý~s+\Txn Ĺ]’Æx­Qu,bÑ3ð;õxÚ6eÐ8Ÿ5æqô6iR½,Ž®kÌ8ìù^a‡â›>‚Ôý‚¾è¨¬3l½a»©¾6j‚ºA³+´9§Iu<·YùE÷ì¼kH³RDH1ðÛvZ’w¦Öú¾¡(Í[µ-âp~ÛbKCEnÜo•t~Ûª—É}'ß6Ü)gÚm­®k+Sý¹sŽh¥ÅÆÊà‹ŽÊÏH‘ =‚”yØëÝôC¾o%TþE5wÎlS]ƒÆTרv+\X¤œ¿Ðiä.C¥ÿ+Iû}_Kªñ6~œ×[)Tïe7Ê¿”f~K4¶‹§s›_\h]„´†"óˆûG>‹ó—L>»–`.ƒ›{ß&<5]÷Ð(åã‹líL›Ù®œ5¿Ô°7èXRMÀ+á ®‹ mÓÖ§šöÆCá§/OÙ¯÷[–².b£ú@äÖ°#q{¥ðúgA›´K’¼ó÷œçðs‹®Óê<ÿ£œS2o²–`~“^÷õêçL 3îz¨oϧmSGL˜¹#Ê,¦é',7i¦FŠ´ÏØ˜j›¾)Å$ª¾k¢îGÎ/2>÷±‰Û¢¶…6H –¥@è~|é»÷gÎn‹z¦¨£ûý³ãwGCn³ò„¶\»ßÎøsšê?³ñÿ‹ Ã9¸ ¸¨qò1‚,ËNÐnõz¥4ø»³Ò™=æ˜èà5Z™.7Õ7FþøÅÿ÷OZ–Pë>EùBQq~L‹=å”»&3t]\EÔ¶ˆC‘å¡õÒºi=„n{ø‘ȭ꺙k Ûý—¥¯ [½K_Ú”Tãûºñÿɢ߼ơ{qtA›â«Äª€¿¯ÖíKKæM™k)ÏtY.dOAè7þ1a´ÛX~©pcd6Pj5DpM·¾*˜YܱVì²Âm€ï\«'† Ãm&ßìYbã +—ý%bcÈË¤Š„s †Í¢ëµæqûõæ†êè©1GÎ>¦ÔÔ Ý£ùgÃÁD׬–>ß>sSªKÞ²\yÉ¢ByE ü—§® .3”‡®‹Ù¸2i“ÿò”õÞ‹2Wù,Î\µÝï¥Ô:ÅïLƒ4{QÐ.~#í¬¤+÷|Áo¡ÏÄËqMÓ|„ÎÎréÝ›¼ç¸òK€O¯z # 1îÒ{[é,ûEnr³ÑnpÍŒÝ)¶.qÙê¿ÐaÝ õ´îÅ“t[e¤Ór[”'#6ê÷LŽ”1’Ö!TéU³3—ù.NÜ8-vw¬ æq5zë”ò$Û´-)Ò©Ê&Q‡"§Dž{4é§Ñ0=¾Â ÛVŸVçõïìFå ig#i—¤¢£Šó£CñmA»üôÙ3ÎüÖÑZÓ }­¤*Å{QåÊé—ãÚºN¿+|£›z­½¯ªÐi¿m¸aXëg¶1‚zƒBúcÏÐ27…®Ü1/|­ËêÈM²6}¹ëѨ-Î1;\þ·Óå¨ñm}R•ë!éгsÛ–fñ|ßkAÞ’ÉÚzSÎòܸ½¾M¬ò~Ó1gaÁ”ÈMÀòŒÕñû‚^L¬zÙPÒµ-ªÆ{QÞR‹„]†)Q-Ýá ?¿¦aZ\UtĦØ]Ù îÿ»ØÙ ¿k&á…‹/ ÎnP~šTãù¶÷üàí–Ñš¿æZö|¤—ÐßôQÁ$h´ÐwôýBŸÇúHÝÃwîŒçÒêäŸf7È-uKá·×-ÏR'A³A”v¦¯c ­E‡Ë¡ÆPˆˆß+[š\#ÿ·ñí;k;ôÛd¯„®rª7ìq}¹°CÈiRœ<»ðùWŸÉ~Èûí˜]3[¥£/´h:­Nõat…ï_ÂÖúÖ.óžtÉöჄqª¡·LW8Êmpïáö]k¦{x–X Ô•»®Ý)Ûå3ÇÑúûŸæ–n!(óíU¡£ ô¹‹_P\[îE·„”‰wZG[Ý&Ï2}À-ÓÖ9¹Fv8§Q<žV'ÿD³ÑåXâ>ù¿³ëeŸH‡šå5wpiçtˆ§Ïžò|F:°-¿Uù¹tèÚ…>¿ûÑy§ñc¾Èmöø_v£ç±Æ8ð[š^昽2Û*yg¼EâžXç¼%ùžóò–¨æÌž#/^Zà’¿&S5w:Ïw.%ФŸIúMÊO“ª}ÿîµ0g™SβÜÀ•†ò°uúÝñ•/çµ(¿(lW~Ýý3+¤Ç¬>KªR|½]nùk‚!´Ìå¶ÈͲEYõn/i7º‡¬rì)ý“mœì&‡‡½æ¸>zÿÓO÷<ÿIwÃíLzL µì=CkÓkç\~ApmùÌu‰Þ.V…¬p\¿×­C¿ÍõÅÌÃòÒ±ÜäÔ¹ÉåhVƒüä•8óà_Üw-:V~•Û¬ú,í ç; ûüþ/y¿÷?ršT'Rk½ÿ¥ÙUíœW–m‘X½sf»1FNI‡²IoóÛ”__øŸ4~î§¹ÍîÇsš<þ+Í&Dm8ì1/g©Çü‚E^ 󖄬Ûnüܶè/ú,NYë’?·Ø{aZ™ßÒ´5¡kãv¨7Eí YkØn—7w‚Ÿ~è¯ ïÙ3îŽÛ-—âëdÜ.Y¥{É´>· ¾MpË´7†š“¼ÌM0 2ýÞ'ÝÑ#p‘õÓá«ÓBWºhœ-ûò €k*d…˜œÛ$~,¾l|±Ýu¦AQ‡¼ëÑéíåZ<|%F~«xʰ×÷¯Îy‹óó—åj¶èöEn‹<±1fwÈšÄrß%i«=æe-WÎ.뜻8ºa‡Á>«,S[ZŸ|Àã)>Òzÿ+vWà ºíG£¶Ílö_·U^”»È"qG¼‰®-¢ëìˆØ&íÄàùqã½ÿš`gÛôô(¶Ÿ®Ù(‹SØM’e[ß$ÃÅÝÖKWnœ×,ïÌ8(ÿ·ï|7o~Cp=Ãÿ®×(¸ØÖ/¨7Gï Z•±Æ1{U–©þpä”Èæi·¥)QíáÝCzÿ`¤y색no´IT½Ö>kCš4«¶>r_èÚˆÚòÆØÝÇrUÇó[_gö|W³%â jNÞb÷¹³Œ¡±Ÿ_ÚŒFW0ø øÓ Xì"/— KeBÐ2™ño– ëdk Úů.× ucœÉkQ|•YïñQbuà_bvEÔk¶Äìñ[š³Â.}cêdm³Ú!{Y®vKÄÁôƒªó[e§s›Å/£+f¶J3…—1^¤Ê8¢<žZ§ø¸ðìŽPp‰ÄÛ›Ü í¢óšåÇ‹:ä§‹ÇÖªùmНöùþM[>³Á8šf®Ñí.Óï [¯©VoÖÖHçؤ–'™èZ"ìÒ7¥z-,Z°"{eÀòœ•Þ ‹Úg,ÈO®ñyó·äüs3 Òâ·—ºm,Áœe4©‡yø”§‚–:Æ„¬pˆ1ìv;Vô×4tÿ×|ÕSë<ÿ#-DÎmöø8¿Uõij꣰õ¡ý–Æo’NožSeݨ17TÆØe”eX§®K›[¶>â@^K÷ãI×v‘5Át¹ëɾƒÏ>ÑcœÇŒÞ¦ÁSï Xä^Ð.ÿòò=$ïL¬öû›X:gÖŒø½±ŠÒ%!k Û]òú.‰ß”~ÈýƒìÕ' UþM©õx§°]ü†`®ãc„ç=Ç Ï:Žîai:(v—¼­èèåYCPÐ&~“¼ßã?¾KRטEWé=ä,M¬öy#©Úû­™k¢wi6‡2ÆÂñëm›W‚ø‘a6ÃzØè§ô*—–ž÷¿<Á ø:ýç;‰Õ¯*CÛ’÷û¼™TíþïØÝþ/¥òz§kqó±ëñÜ‚ø KÍøž¡«\LµVgÕËþWÐ&ÿærn­ZtTޙתøB:÷Aúóõ{PÁü@ï{ Öú‰Bé+ÁÂÿI}ƒ[ÃÁuMA›øõt*4Á\)=Ág®\HÞÒõ'—TË'uå²²œFù§¡×½„ž÷÷ì Ï OMyRpH˜ú@X™ÓüÂvù·€xdìð›•ùÓÒŠ^ÿ/ö»×IHo à*è;üÉÞ³úë·Ê÷ÿžS ãApgr›_JÂýÂnL§öy½¹ÕïõfÿvýïWâ+½_ÏiR}ú;‚ÁOèzH ÀE=2jˆ`£5ëé¿ÀÞ2¹ZüÇU †£ò3ñû<ßÔ–t¤Ôzÿ3»QõIá¹S¨uÏ(ä·*¿ŒÛíÿŠûœÄ5®ùK|—„ïKªqÇŸKç@ü¶`wê·X À¥x­s— *t¼/¬Ì%7ëˆÛ_r›å'¯Öù EÆ@H¨òy]9§`cÖÊìÈ­šºì¯÷¥‘vÐ÷­™«ã¶{ÌË\¿ÏïÕìFå‰Üfñ‹ß;RØ <’\š›ÛèÂC£îee:D³Á-+ó°ìƒ«qBs^‹òóäý¯®0l™n8 Ÿ[«sÎ[šg—±*Ë2i}ª÷¢Ü¥Éû}Þ¸œßS †¨MVÁ]ÿÇ\šÛ»K°Ðš®éw„®t–'W;—å4Š'/ëEmâé¢ygN“ò³œ&ñ‹ˆÚ›´ ©æqUÑfÑši±u:¯…ù‹C×%–ëvhë²Ü?¾Ü‘Rhüþ‘›¬Cÿ—{q×€_ɽÈQXöQŒà¿ÐqBâ>ñMã‹ìo‹Ž_èGa»ü›‚vùéß>£ ~Xíñvø†ˆZŸÅée6)›SÌãê¢ÌãöÅ8d­ÊR”ÍO;èþ^~«øµô¾ä <%Í0è6[ Ì0¿2ßá¡€Eαš nËCVºä‡®rÍñ›gŸ»ÃiGá/ìltñ…Îâ™üVÅWyÍîÇSk}þa¨ |ÉPôbzÏ¿r=>Îmv?Qt…wk*hë _EÏÀo7ÙjÇ$»^Ê—[,õö½-u½ÇˆÓzùÍw²J®–¿|yvJÏ]åí\óZ¤EÏ6>Üaàw°·êz<)p‰[×[÷bgÁ1ÑZxxÜÈ[µí½Rö;ïH«sÞy¡‘\ã´+·Ùí½+0;ðyrµK‹ñ{T\ì{ÿÒHÜç¼3t¥¥w¸;Òø¿·ô¼õñþw÷5ìÞGýÑv¯pëý}S8ï+긼ÁÓ {Û>ÞÂóÞ¡Cîùé÷½Ä1bð½÷Ø›; \!C­† £\G Ϲÿéð/}H.» /w04Êÿåšië:N9îÂßûÆ8Åa¤ón"p Ý’~Ðe÷ † 7./@0 Á@0XM V‘æ‚"ÏQð(qT…NÒ_÷!&cïrI±˜àUêäá;Ï%À{޳¯2Ï. ­ÖíXÑQ‚øS‹ÞáªÉ8$ûw~«ü“üVñ¸ñíñ¼ùñÂñÔå>‡`n0ñ{å 9â7%Ç®ü)Ípƒ‰Ù¡Ðf?#üDäfeHÆ!ÅÇ€Ÿð[èê³CÞ˜×"ž$ü€¢ÀáVÇDËa†Ýnkò[ÅSÅÇgy”: ‚[ºÃȸ]®+³ä\îóàç˜`/Lò3}0´ÌÍ=¡R¶/¿U~’`ðÓà©BX™›`®ž>:­Î­™ƒÛ\ÈMQ[\ó³äŸ£á Áà;·è/(r­î Zâ³CV›×ryO"€?ˆŒ¦ a¸íÈÞÊ|ëÌÃnÿ!üX°2ç¬z9Áà§î>ìõ:'uzüÂñ[‚ÀwÆ«& Ï:N¹-h‰Ý”Ø Ùö¼ñs‚Àwìb-„ÎÎ*Á9qú‘›dóòšÅ€ïŒp|V˜ýF”ðœrØq»Å½íâ)‚Àü½óˆà3×E—ß*?N0ø©¡& é äyka‡xú·Ã8å8á9÷ñ—4ÆÈÆÏØ=Ã…n]oU6N¹Íò~m08§ÙÈŒŸÞãW7‚Þölc­…¦“óZdïÿš`Èm’}à7ß&Ëo¾…ƒq8þÒðŸoá¤ÊŸaf7ý~®<pƒpIµí!Ë´õ)h•ÿïW­c8*ž)l—SÐ.;u)£°Cv*±RörÐÙ ®:pƒpJ¶îášnãYÐö+ƒáWŽ’cbgrµø·•¢å´3Á4h’0Ìz¨ðèØG…›î¹Ièu/np½±Ðš vqæO&UÉ›‹~åÂç_ ™G‡­vŽ™>u´yè䣜Ÿyø©iî~pø=}Ù÷¦{ æ†×“ŠÎÕÂ##ïìá=Ç)8ãü­¢£â™+ Ò×Îi”½—uÄíïYõ²—Œo_È:"kÞæ¶QU`7mˆÅø^‚p;7¸^H Ÿ¾»D°‰µºÅ{¶ƒ]Zü¥‚6ñ«+ùxÒ"¢3¿Eþmø§ OpG€ë„2ß¶kØÆL, ­ÕÍÊ<‡†]Švã ùÓW+¤‘qHþqÐ;÷§LŸíîŸ`0µÖM|¢‡Iy–ƒYïÛ[W®Ø[Ô!~s5ƒ¡ ]~&d¥cy¸Û®×ÇsA̵‹‘gÛÄZé§Vä:ع¦[[%U‹¯¿½šÁ` ”3‘[ܪ}æ» âÎ×½ÁJpL²{n@ï¨-²µéÝÞÍnp{-»AöŽq¼]Ø~ugÎäjñm]¹Ûhîp tžzëqún™6N9²_‹8øé#Iâ·êu.Ä\ûǹCÀµÓ3|cxä&ç9 •ò£…íâ©ë!ŠŽÊ;ÃV;-wH°}„[\;wfqk+ìw½H¿bAÒϺÊi‰E”Å#wô’»\#wg7¸•Î?¸^báÜy ‡Üþ°ÐÒæÎOöä6ׯ]Yõ®E×W0dV|lØ-¶zÛ: µÃY À5Ò'~¯ëÒôƒ²¶Œƒ²·‹ŽŠgJމ?W3¤ï—¸O|]³Qœâ–n×{¼rbnp ]i|ó]Ý•†ï¶S-l;£¶8/qH°öÄ„!7så‚¡3¿U<•V+{Ù°Ë­.x©õtÙ2¡ÿÄ!\xàzf£·ìãloŠÞ.Þc †—¯D0H3 ‡ÅO#7ËB’ž²‰±`ípcƒõMŽñ6S´å Ó*Þ7Ù+ iuâG1 ;U¡£à’jÉ…næáSovLœnÛ,ÿß•ˆ…ï‚¡VñAôv…=W¸ôׯ‡YÐÈÁÆ`øøJ.v6Çpƒ¹ïéûKíøû »eµ…âi‚Àw†X ‚–н¹Ì*h“E0øÎÏñ‚ªÀâ„*y{QÇ•ÙRõÜý6‚¸aôy´0-Ìì&‡ói9ò¯ä†ÔýŠÿDmVØpÕ€%úõ¦öô™c¯Ì8,çŠì’tìl0è k®:pƒèÝ··àš6厸òÆËý8R¡ñëå4‰_dÕ‹'³ÄÏßãï¡e2 ®:p£ýçdÓ>¡«œSSkÅ׳äŸvÈ/5Îä4Êÿ½]V½M¶Uoñ{äGrÅãÒŒBæaŇ1;ÄÌÄ}âtÙeøZŸyŽ÷sÕ€(“U‚yøŒ;Û ö_0crÔÙú¬#ŠŸ=“!¯E<[!6„­v‹·µ(Ëv½ß-Ëõ~Y–ýSš nI‡Ä§Ôˆo‡®R¸%׈Bá >Bb•‡¾NÉEn$NÉ6‚˜ë ¬þD'tvv ÁËeEm‘W½ø#J¹MòO"Ö¹»¤Øõ­èÌü¸ ¾óÜ„–Î4A̱ë¾ÚEfŒ‰Å‹\¦ “sÀ æÜ‹ùÑnC1Û¡OÀBÇ ¼ù?7ËqHö¦g‰“êñçŸúîëŒp˜ Ì\á*<0ða€É [™=Õ‡« üH³ žÅ}c+Äú‹íš$­QÈ®ÿã·@|±¯Óò@a é“\PàFòèh7a¨]ª0Ì1«kŒ”Ç Í‚…{Nüîc,uŠÛÅ\yrV½xâ‚Á`Y‡å¯¹e88rE€?GF:õzÊ"ú¶ÁV†Û¥ñŒ£úŽGG9öW´ ~ EaæJQxNåÚÇ6Î#ã}rB†:äÙ<21þ Ù`ßâ1G9|˜ƒÁyFBeLÀŠ”uYõîÿ-lOŸ‹…‚6ñkÃn·jc0L⊠¦?7E³?Ä,ºQ# ó¸=±Î¹³JýmÐl$TŠ-†ÝŠF÷ÒˆÅfÑ#§Çï×{ÌÏ[³+¸£è¨¬kýBn³üSí&×Ò'ÍÇßvßÓ}¹¨À5¦ÆÔkeEóJuÛC›Ò)ÿ÷Ý#Gõžú,ÎZaªoИD5«óVä&Uû¾–ߪ8%ý{úAÙ+¶±¶=î¾½R€?j0HÃT׬¶JÙ‘à·4{eôÎÐæäýÞouˆ§Óy¾ë1?w©ô1ÓbGº,Ë‹Üq0»Qu¼°]þUê·Wõ[]¢o8¢‡,Ëž‹ üq‚¡É Mêï¢A߬6Õ×k-“öÄÉ‹ç•Äí ~¡ Mq*­ÎûŸ å‰ÒÇšê›ÔÖ)åIšÍ‘ÕÅ/Ⱥf"Òk]_”g[ØÚÄÚÜÊÕþ Á`¢kÖL9 3Õ†î!…DƒÆ>sSjÂ>¿WóZUŸù/K^/=š$E…UÊÎøˆú=¹ÍªãÅGåÆhŸI«u{=`¡“7WøCCMˆ¬hQqøý^yÉü’i±‡" Ö)» Ñ;ƒÛ¤ÃÛÒê¼ßvÈZšgªoìŠ ‹Ä ƒ÷¢œeñ•ÁÇòZ”'s›ÄS±²|ßù®\`à†mMˆÏâ´5É5îïø.M^on¨Õý05Óã«£VÄnËiRžÌoU~´*f»Éw³Mê)Q­¶éëÒ£w†´ä·ÊO'UË÷ûÌw ^ç"ŒSLàB7¢þ“ÇOÞ:-z}¼sö¬ó˜uñ“#öh'…Wj'ETj'GìëS4Õ‘ÓãwÅù,Î[jØðRü>ß¿ù/K]ëµ:SZË ÍBL9霷*[·]S—yXùqÊ~ù‹š .‘Ï{L¾Ÿ+ Ü€<íŽþý|Bè}G©Ÿx|bxÿ¦¡š…85bР©ê'cèÓ¶©n¦úFµ´vÁ!kCZø†¨ÊôƒïÇî i“Bâì¢i3â÷ÆÎ\“´9«AõYJì%U‘“å¼j§d.8ðÓãÑQ®}[ÆYšéºAÒ7i,öÆ—%nN9à󦢴tŽ©¾å{;,5©§ÅÖèg®NÞ”Z«úÀ°ÇmUÀûÑ“ýlnQäÙqE€?’'&úöbe8 ]QШ±Lªˆ—Ï-5‹þñ"éîmYÍ UÑAeÉÒê<ÞOÜ'{!h©K„,ÓöQ®(ð†s‹Mu-?Ž…óÑТ6Û³3¢¾°]Ö™\#7l“•Þ’‹ üñƒá—ǔȖß%ÙË3ëÝ?*zA쌭pÙd †A\U€`Иê[#lRצëw5䵸ÞæRåœb;†«  “¨&uâ¬dY¶2Ôk–]€ªÀfúc#úõ檃Æ4êpÔ(å"÷¾ÃûM *ˆ9Ö‚Ðãf.*@0GL“fbèîðaŽéÓï4ü®»<+,ïìîíÿ<øÓC×¹ Ú‰¡;ÔÏŠEªAÓ#Æ=2Òùή¯;ÁW¸óá¡\`àO ]£AkuH;1¤"âY·ëþ“~`ðÔ>Æ/ßÃuQ§0Ì!‹ üyƒáü˜Q¥ëµÒo„k‘Õ0Ǭу-ã=ôŒý­ch«ÿh÷Åâ`KƒécÏy<Øo´¬×=íÁÝþŒÁ𽇮xÐ7DJ‹¤'kjÔãýÖ‡ ³Ïpxpˆ¹ôŒÑüyƒáÂÛ²>¼UÿÈ(—G €`øÉ˜¼`‚ €` ‚`‚Á€`@0  @0 Á@0Á @0 ‚Á€`@0 Á@0Á @0 Á@0  ‚`‚ €` ‚`‚Á€`@0  @0 Á@0Á @0 ‚Á€`@0 Á@0Á @0 ‚Á€`@0 Á@0Á @0 Á@0  ‚`n„`hºŠÃ 3· À ¦úzíÍýÕû£Ÿóßhxd¤S?‚¸ŽƒAŠ… 3w„=m›b2µèyã˜p5ÆP»´  6»ƒ»\¯Ám ÝáÈçü7ÿúNã¸é*×}0l–‚áŽ[îé'\ÍÑóÖ»¹À \‚Àå †Û[„«5™k…¾Ã¬¸À  Á÷ ˜ðð“;¯ÖxbRÀ ™ÆNIÀu ÒÁmúí¤°½ê‘ŠyªÑîKÄ«3‹ÃóÄGF»²Mp]Ct£¦kÄ4i¯ÚˆnÔŽØõÄŸNzn€`¸ª£A3Þcäã@0 Áð«ƒG’‚á‚Áð\À&) ‚`‚ ._0°† . #Γ`‚ €`¸\k€` ‚á·ƒÁ @0 Á@0Á ×t—¤¾@0\0§"‚áBÁ°9ê±ñî@0\  €` ‚`‚ €`  Œ`x>p‹1<€`¸H0ŒS=D0áßXÁ @0üš`2Ã8‚ €` ‚`‚ ®Y0”ƒAI0Á @0\¶`K0Ã…ƒA×oŒüa‚ .  Á@0Á @0\ñ`Øj ‘`†‹3 Á@0ï }?I† C°1Æ Áp‘`à‘$€`¸è#IŽv{„`† Ï0 Ápá`ئ#‚`‚ ._0°† . ‚€` ‚`†Ë ]kd@0ütt . £Ý%‚á‚ÁðÈ(‚ €?šÿ9PGJÏÛjŽ%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/tEXtSoftwarewww.inkscape.org›î<IEND®B`‚calamares-3.2.20/src/modules/locale/images/timezone_-8.0.png000066400000000000000000000201431362604102500234720ustar00rootroot00000000000000‰PNG  IHDR T‰=»ÈgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“ pHYs¢¢EÝ1¢3IDATxÚíÝwxÕU‚ðñ ˆ ±€AŠ (ˆ€H½…„r)ôÐIO!€Ôì;V,ØP@@DZè:³ufggf_gçuvfwŠ}Í{£âŒ;» Î æóyžó„z“çœî÷ùÝsNð¹"nN£vi+2b‹*sb§îü›˜¼-Ùm/Œ´N(­m5@0 ‚ƒ`Á @0@0‚ €` Á‚A0€`  Á@0‚ ‚ƒ`Á @0 ‚ƒ`pBCáŽÜnÛrºd®ËjÑ¿$±Eßi‚jl0zý¹1y[r»ælÊì8vÕø+Ë/ï™{ÍEí“\xÍ‹5*ª_³hWu$äw™²6«Ó„g3®oÒ¼Wa§ ¯Ò°Éõ'RÿüZ ·~ôžó¾ÿÁPy(ºnÏ¿~ÊK¹Ç>™Ñ~Ø}ƒ¯ˆ›×¹ñµá%õκè䪪ªàœË»^ƒƒ“O=ËBÀ÷?*snÈÞßaÌc®I»+ñÊÄÅ×5í6¹É©g_rj÷©•AãkSƒÓÏkfÒ FC᎜.Yë³Û¥¯Ö:~A§}‹7lÕçÌèË×jÕfp^‹Áiç65ÙPs‚¡2·[ÁÖܲ^Éj7ìÞa-ûNoi—1 ‚ÚuêtÍÝ\ÒiDPÿ¢¶&jR0t/Ú•“ÿz~—)/g¶~J‹¾Å·ëŸ}YçZ—ü:¸ m|P÷Œ†&jT0Tod.ØšßyÒ ÑP¸/Ò²ÿÌç·pVÁ«‚óZö4‘Pcƒ!úw]¦¼œÕ.íîH«³¯9ÿʸÕ']pU¼ € E‡N>Ê»&õÎÑ@8'ú_j]ÜqXP§î©&j|0LÝ™×aô£#›v›Ò¬Ù[Aý‹Û™4 ‡78_?yMö•CÊcN9£áIf ×°ÅämÉ»vøý‘‹¯K=ßL€`8âéBen§ñÏLlÙ¯¤}ôŸÕ2S ŽØèüJÞÕ)wÄ×¢Çéf ÃÁЭpGÞuOŒ¾¬ë„3~^e’@0TyçBÎUIK{Õ«Î ¾ò„!¯ã¸§G_Úyt ³‚áˆ`¨Ìéš³)¿Ý°{ŸÕ¸›Ù@0 E•¹'>?¹eÿ·‹˜ ŸîœnÛò:f¬vÁUƒ.23ÀÁнhWn—Ìu¹m‡.ïW÷ôsk›àÈ`Èë<ñ¹qMc&]eV€/ƒ!}EFLÞkù׎x0rN³Î0+ÀÁpOF—̵™­âæv[Qå¢6à‹`˜Û¨]Ú]ã:MxvÔEí#MÌð…6ñ¥®JZ:öšÔÛŸT¯~3| ¥ç_7'½y¯‚føŠf±Y\3)±á}˜ à+µpN£Öý¯3À_¨wVã:õ4>ÕLÀqnôC‚‰&9«R‚É…A¸0!ˆÔÓÄA0êŽÄÖîONÍz<%}âýaRâœøö-ûw©7¨¤¯É€š.ëñHÆŒuá¿•nÿkÁÖðí¹›#rW%•%Îî׺ç¸'u›Ð·VUUUÿlZV‘` &)x6eB4~·üaÕò7êeo„U‹wG>˜¿%òéÏEuë aÉóc›_> ~¸8¾¶€š «SÆÏßþöóXø|T«–î –ïM~·t{ä­ÌG’žqK¢[™@0üå(~1Ü3ù¡°•ÁðÕñæá`˜²R0€`øš`˜öb¸ÒÊÈ緿ʤ€`øêXTyü½‡ šžœ÷tJûTJýx ™Û/è>9ÖD@M†Š‘ª)+¿)©í”GS.ŸòHÊå ›,ê}F‡Ô޵Ì$Ôð`˜½)üÉÌõ)oÎÚòwÑñÃëÂý#nŽ—8{À©fjp0¹Ÿá‹ý}öcÉÏ¿7ùìà´ZA݆uM(Ôè`øêølúËÉÿ8lY¯¦R[žÚ++¦Nâœø Îy'™X aÕ¢]‘gmˆl¿qS䵑·ÄM2§W=Á‚á+·B/Ù~Z¼fèö¤¹7œ#@0|e,ÞyÔ­ óÒ—&œrå «M,†/GùÞÈGcî|Ûu)ו¶tPÐ!l\ig‚@0úXÒg ¶FÞ*|v轊b¯×¹aõë·êÝ$8§å™&jr0|ñ¤aOx°tÛПå?“¼røòÁg¯®Z\Ø®¡#W@0yzRø^þ“CWFÊú]QçìZn‚ÁðÕ±dO䫇¾Ð¢gÓú;\d²@0|õ¸ÕÒm‘_$Îî×/af_“ ‚á/Ž[}wòCCo‰”Æ×¹¬ËeA³ë˜t _žž4käçéƒGVUUe»'›t GìeØþqÚ É'Þ×w`ZE\Ó5UË‚Í/0ù ¾Üϰ¨2òþô—’× _>¨kô[×y[Ä€`ør,Ýœ»9ùŠ_L˜Ÿ47®uõÏPû”Ú‡~–K;_zh54ªGõ÷*ÝùÕð›ÇO¸?rò”‡“êFŽºýò:×ï¶9kÔíC- òW§LˆÃïÿ–ÁpèFè½á‡3Ö…û V‡«Š_ ×ÏX—òÊŒu‘SŸ¼ ¥<¹ÞiMÎjÕ¯uè†è¿6€ïДG"‰3×'W.Ü™ü‹ÒmCÿaþëÉ?]²7üøoÕ'(Uì?ŽÏª÷8Ty["¿˜pRFõÏVUõZtøš±':ž²xð]ë•Ýó¬¸â>W§–ÇŠ/éue¤l@ÿk“_FÃ'_ å{¿±ÿÎö8ìFÃkC·>WPòr”’—2ÿ|¯‰Ï{w¯«‚ÚAm+ß¡žY=‚Óú©‹ãƒAÓ{UÿQÑ·¾~ÚóÉO-Úy÷ó7ò‹v…ÎZŸ´®xM⬙듷/Ý~ü]ž¨´do¤ú8Ö¯‹wGªòžýYO¶‚ð7taûæÁ´—F©K_,X=tmdá k£ÿ¤V¤,.þÆ‘7ªO<ú[î{øò¤¥HUáÓ§øÿd̉Áué}NwwÂıw HN]Ò¿qßiñµ[öitS7}iïÖ³6$¿Z¾;ü@0@ 4dN\Ð;§ÿIAµîÍ’ÅúóþS{UU? v>?ëѤҲáoÔ@©‹ý ºMº6ÿâϵ½ hÓäЯ; kS/ë±!ËÊ÷„ï à uϯôÉôÊê~ÁÔç†®Ž¾‘ÿX0_ˆ{èk¸(®uÉË‘¾ÝÐK÷G>)ÛùÏ9¯†?¹qcÊ?ÍÞ”òãY"?ôàÀ”è·­cà87çõœàŠþ-k§/˜¸`[äWßf0Ì\7dÓ°åýû½rqþ3) Ÿ­þ¹dôO7óp¨Û°npýè~Á°eƒN›¼rHYé¶äŸ,ÞþñЛþorctôÿ–¼œô|÷ÉýZ–¼œL{1%(^“½ ÆÞ=ÐÄÀ‰¢OnC_¯èײ^Jù žÑ7õónÜ8tû¢Êð½c †ê›¦g¬K~=iÁàëÌ0œèêAÛ„ÖAê’ø ªje4oеO'¿}óÿÙ±ìõ‘=ÃnJŠ2/>hÕ·³9€¾κ(h—Ô#&œ1æÎÁå ¶FÞ9Ö`˜ójäçãïM*‹,ŒoVýÚg6in‚à„ƒƒÓÎk\ÒiDФ˘ ñµ)A³Ø¬`Ä3UÕ]»sÚ5§§WÄåÍ}-ùwÇú±¤ŠýáÁ…;Ãw‹žOªè™ÙóµUÓ‚„û™|8žÛ¼[Шußê_ÖjØ¢çéõ/M:㌠o8í¢vaƒV§7½:9¿K¯œ±½2IY³doøÉ7=-©lgøÎ´“n~ó ëÚ îZoÊÊ¡Žç`hتWƒ6‰‹;µK¿;¡ë¤ùïI¿)¡mxw¤ãØÇ³b Ÿ˜5àÆeËóžù÷‹þtbÒò7¿Y4”ï ÎÞù‡ÜUI3'?”|aÝÆ-,ι¼k4zŸÝ&qáðEÏÌ(Z3y_öSYÛÇÜWülâS»mË‹/½»|â#•¥;".Þ~4çµô_Uˆ|£h¨ŽŽÒm‘²uÒÍ뎸up0°¸¯€ãÉm‚Fmú—^?ò‚Ž£—ŽÍ{fÂöYSÿ#û©‰Û{MßTؽhk^ü‚;–Ny|ÔY#¿-x~Ä?e=9úÀÂÊð£oãB·ÂÕCÖ„‹\4?þäÎcúײ"pœ¹¼gÞ¡¯MºŒ¸¤Gni^Þ3cÞÈZ5~WÏâõE±Swæô*Y_”vóüûÒo›¶*åæÂ§KÖ…ÿ±°2ò­Ã’½‘?Þ¸1òÆÄˇ.èÓ$úcˆ8žœRÿ‚ Áe‚sšÅÔ¾¼ûèæq³¦Ï›òØøæÜ³¨:ªG÷¢í¹=§¯+JY>ûÁœ§Gü}Ñ‹#´tä³%ûƒå{#¿I4TìTÍX7ôÇ#oéýqj[8]Ô.)¸ôúñµ[ôžØ¦Éì¹C—.XÑ{Æs3b§î8 =¦mÉ8÷áùýfÝ^>ìŽéO¯ñ¯3^I}{î–ð÷ßôIC4ö¸yP÷ ¸¼ö€©,R¬ ê{míË{\›S1µ×ôç§ Õ£[aev÷¢… e7Ý4ù±±»fmLùMÙÎðƒŠýÇv ô÷4Tݸ1yûèÛ§FƒáŒ™¯¤)åñŽ7åUUÁIõ×¹¬Û´&m“ozCö†¬n…Ûs?†Ø©Ûrãæß³hâ#ãvÌXŸöï wF>Zú ƒ¡zD_£ªt{ò/sº|زÁÇÍRëºÔ ǓӶ.í<úЯ/é4òÌ–ýft¾.㉱1¹›£±P™[½Ÿ¡WÉÚi©·,¼gúÚ´·íJ{§|oê‡Õ{ªŸ4T84>=æ{öD>*X=tUúÒMw¼Æ&h8Óì† &kôk×:—^?¦qÛä›ã;OZ3¹×ôuÅÃn_xߔdz^ôhææIæ¼’õÄÄí%kS~9kcê¯lOy§lGøÞ7zÚ°/rpÂ} SÍxº•€ãØ™^tžøBpnó˜z-úNoßiì½£†,*¿%ç©ñ»g¿šúë9¯ü?3ÖþQÉÚôË[=úž°õÆM鿬¾Üí›\ðV¼&Ü5éÁ¥,N°p¼kÔ¦_õ—Z];âü«# {÷-^<{ÂÊ™OÏÜ0ò§e;SÞ­Žƒy¯§ÿǘ{ó^œüXΆٛÓÞ.Ýžòî±Ãâ]áû“îOÌŒÃi§^ÒØÀñî¼–=‚Øâõ/î~J³^em:Œz 3qñY«¦l)Ýžö»¥û"ŸÍÞ<êç£î.~jä]SWO~tÒ–Ù¯ÿű>i˜ûZä߆-ëݶ^ã‹ÜÏ'‚SN?7¸¤Óˆ Uÿ ¯I½;#vêÎÜžÅ¦Ž¸kÉŠê§ ¥;RÿP¶3å½â—'R~GÅÈ»ç?4o˰·—8ú“”J·Gþq{ÖuN;Íæg8‘\7§Q»´±E•Õ§':nµWÉêã˜ñԜ׆ÿbÁ¶´ÿÊ}&skÏâGæŒ}`檲i¿_þæÑÃ÷J^} Nì`øüb·ÝYýg?yㄇs×–¬þÓÂçǾ1îÁiÏ¥ß6ç¡Y2þyù›G÷ѤٛÂ_<3¸ñ𛇘p8у!¶°2»gñÆÂÌ'Š_(Û‘òîÂÊ´?Ì=õ·™OŒßY}’ÒÑâ]‘÷'=4$wØM‰§Ýúw)AÉ=L<œ°Á]óöf†7ݹlöæQ?[þƒHUéŽÈϧýë¼-i¿9Ú$U™¯„?yë A]Çu?eÜ=CƒHY¼É€5b§VfÇNÝP˜¹ªðåò½‘OíJyÁ¶Ôß/Ý~r,'%Uì?]°5ò³‰÷'¤‡ ã&Í‹³NÜ`Ø™Ó%gwÖ¸g?¾`[ø^4K(ù4¢â@øÙ‚­áÛcî2{ØòÄSÌ>œÀÁÐ5o_戻Ý;kcÚÛå{ŽíÉÂü×#¿Y¼;üèˆhødòC‘cW$Ÿjöà†òögŽº§üÞê£U—½yl—¶¯Iþ—â5‘—í ß™·%ü¿ó·F~5âæø‰É¥quÍ>œÀÁÐ%w_æ¸<¼pgʻDzѹâ@X•óDÒ#éËú÷œü@ßn“ÔaòÊ㊻Ÿ3¾«= p"ÃõÙ•YY«¦?¿t_òQÝî¼tXµd_X5wsäÿ޽«Çè·©u°ê‰à©§/WÍ Ò–Æ}ózš|8qƒ¡2;&s~ÞêÂW*$ÕS…Ù›’·ÍXyxü½‰ùéƒÄNº>8õºÁ)êuÀ‰ …»²»­+*x.wó²7þ÷Á°d_rÕÄûz'G_ú¤è¨Sûœ3}ô¾oÁS°'+¡lå‚’õãp47;—ïM®šòPÑ—®uY×˃Ë{´4Éð} †.9{2Ç>PúÐÂÊ”÷ŽfÃó¡' ÷öL ‚Æ'GGí 8Ï$À÷/ö>!©2ü`Ù›G³á9R•ûDüÝwÄK]< þú±§”¬ ƒ#Çô—Â`èüAüŒ~NÄ`èš¿73íÖ[o™óÚˆ·ŽöHÕŠý‘O£áppÖ†ÈO‹×„£¢cÀ‘cÚ‹a¿¤y.TÒ·¶€0ºîÊîYüRqáó9[ŽfÓóW>ž´7ü¤t{øî‚má;¥GŒù¯‡¿N-ËNš;ðd+'`0:VµàÕü¼Õ–8¶`84Þ «–ÿÙ¨8~4ò¦ø©aÙ ç«À‰ Ý vgÅÍ|îôµ÷Í)IÿË‹Ý>qS|a4~Fÿ“¬|o‚áp4ÄN}-âóž,Ý1ì?6l¼¾¤G‹ž™ÝOîWÐ×À÷+þt tÁ¶ÜÉ¿°hWê{Gs ôâÝÉïôÏïÐöœVÔnÔ¶‘€ï_0TïgØ“•¸èÞÅÓ׎ÿAéö´ÿ*ßó¿;fuɾÈG“CõS†žÓ7)`Qê-Kîš°²ä陯üsÙÎÔ?,Ý~úßCÅð`á³áÖÁ3»ž[¿éi¾ŸÁp8bòwætÍÛš[½¯!nþs3Ón[~{ÑšI{íN{¯zÏÂ_θ3¡¬á §^3$=¨{ÆyjV09¶ä<—¹}ɾ”?þé†çO2î±âªA£®¾ðêÁݤcݳ›tªuNÓ.j^0Tæ )¿§|Þë#þ½â@øYÅ”ƒ™çlˆÍ&§ãø§'¶ŽŸ? q‡Ô‹£ÃùªPó‚agN÷¢m¹cjñžÔ÷ª£aúºŒì;kÝ´ØÂ¹]s_ÍlÙ¯¤Ï¥×©=äÎ*‹5-ªGï/ÏÚ8úÇÕ Ëv¤þaàÜ'æt+%€¿Ô:¾´` €ÿÁ%FM»M Z œ³¿~ ¸±:ìa€š¦ñµ)µ.é<úäf=rë6ë‘óµ£i÷ìºÑ`èÐqÜÓ‚j’˺NhмOÑ€¶É7'_•|Óסˇ¶K¿gt—Ìu9îa€äŠsµK»;ãÐøÂ}|Ë·< 8Þƒ!®:Vd|ÛOÁ‚A0€` €` Á@0 ‚ƒ`Á @0@0‚ €` Á‚A0€` Á@0‚ €` Á‚A0€`  Á@0‚ ‚ƒ`Á @0 ‚ €` ÁÁ‚A0€` Á‚A0‚ €` Á‚A0€` Á@0‚ €`ƒ`à[óÿ4œ ö¬9%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/tEXtSoftwarewww.inkscape.org›î<IEND®B`‚calamares-3.2.20/src/modules/locale/images/timezone_-9.0.png000066400000000000000000000230071362604102500234750ustar00rootroot00000000000000‰PNG  IHDR T‰=»ÈgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“ pHYs¢¢EÝ1¢$×IDATxÚíÝwœ•…ðí{¦ˆ(*‚ ”"‚ÒËT†2½žs†ÞÛ Ó ½÷D±¡Æ‚XPDv¤ˆš}w7oöÙlžÄÝì&›7eSvMtÞs0š5c\…ëú|~Ì™3í”ûûËÝ‚àÔÕ¨GÁõƒ•³q›r‚ðªŒ`ÀؾAãó  š·oÜòF]Z•Õ1½.­Sдmóú×Ë‚Qr‚ìùÂV—µ p:4~pP°4-¯Ì"k²ƒ)·‡NÞ?ys^ÂìÝ…;ç=™ÿbå#Ùõ#×¥¥‡WgQ•zÑ“ k‚Ú¯³/ ÊŠ9 G S|• 3 ˆŸœ¤ÌL&Ý–tÚ/úyü9…ËÓ†FVg†GÖggO¹#4¥nWhݲýá¿_"òö†×" u» þOí®ü‹÷~»ì¡ü›gÞ®®ÝU´röEk˶Eææ.ÑoÐÄø&;Þ©yÿo544¼{Þ³cƒÉ·)ʼnA³¶Í‚¦m›žœ/m0Ô¾ †§§Ëu÷ÆY]ÎhyÅuó—å6¹.­ß¸M™õ5;óO¬<úáš—Ãÿ¾æHä'õÇ#oÅBáú×# ±k†±îDä·×#ÒP,òëè÷übí±È[Ñù튗ÂoNûZÎ=ùKR‡ŒÛ4âÂܮ̞›Ð#£¶×eiÕ½»¦Wõ¿jòæÜsB« šÁ¹q›¾5%¨?1>XõòØ â‘p·(-è™Û#Èœ;<wcnP|_$ö(ã®)Ø8(ºÒ>ûo G~?ïÞN®ÝWXqßüîùë&^:hʵ–NyÝÓúÆ>4Q™Øŭ´)ãoL+-ßVpÓâBßZòBÁÏ–í+üy,bApòã_8ë^ ÿw4þ}ÑÞÈ?¬>úÁš#¡F?þÇÚ£¡Eïÿîœ'"/T<Ú<펌ªyÝkw\]ûõ®Å[C—öŽ 9;öغf&´È]œ}áäÛ"ò§]Ü£pÍ3ž­Iª=Zö¹»R‘P¹¿"¾üùâÁeÏ*y²$úµŠÄê—*úŒ¿«¸]ÏÜøs;ö9ÏÒÀ)¯mkš¦W% ªØ–óØê#áßDWðc[Þþ,qð™æµÈ;±¿·öXø×+^Šügt~´ü@ä ž ¿ZýhÞÕfTT=’»¡fgÁcsŸŒš½«àé)wL¹+kÙæú亪ã«NÌJª;Vž\w´"6IµÇ¢q¤ìàæhY|ÕñÒÄšXtœ …ŠøŠj•>SÞúÎ =‹n-¼"©4áŠäòQ—'Oè7åáê~S·Ïê4¤"é‚«RZÇBÆÒÀ)-ajjP¸lX—ŠmyO­{¥èw_X$|ÊÙõ¯†cQÑðþVŽØ®O¯½µøÅ ß­ÚYõ¨VÞ”Pzû¬>·í3iÛ¤äÊ;æ¥ÌÞ=7©öèGÆB,ªT¦ÎÛ9oÔMëoK[üõ…‰Uûªz¿oÒ5¡yGÌ+ì8p∎& ¹,~Zj‡¾£¢Á0àŠ”²Ä. ¶îÒçì :§Xx8uL¸%/˜rG~P³³(˜ÿì¨`ë›'ïO)ֲ侜²U‡#¿Ùø/W,|ÒlüFøä1sžÉœÎê8pÖE—'×´4ijŸ¾ãëG˜ñxibõÁŠÆÂ¾ª‚u7ÝPþhù‹ ž›òÍÙOŽûfÚÜùsz„Ö¸øºÂîm®Nï{q¯pNtR¢¡PxéÀIýÎ:ÿЦ]2Å^®Ø…F\=ÈÀ©eì ùqã6åµ(ßVtNù¶Âs'Ý4ôÂȪ!=JÈ_µâ¥ð÷¾J¡ðÁhˆ4,z.ôÊèëó®Hž\9lapëo~´ï3íì+‡ÖuížWŸÖ{ܽ“?YšP±VÚ¢»––oŸtbÅÁÐÏæ?úΔÛóÆ š8²ÝEÝÓ;µïNo×3¯w»kóÛ¶é6¼ÅEÝ3Î9ëüKŸÛ±_pî%½NN«Žsàs]ÁuÁô»óZ—Ü_pß¼§‹/Øyué¾È?­>þÁºáÿþªÆÂ{Á°pOøøÈ ù‰ï=ß³.¸"èš¹4v3®}ïH“}Ç´¼tðÔË/OšÕ³{ö¬¤äâɳ2ggŒI«I/é‘›pÍù{5¹¤ÿ¸aúŽ~~§„v±ŸkÛ#'h×3'ˆíztÁUÉ"Né`8#²:µÿÂç#ÿñUŽƒO ï9ÿÊäàŠ”Š`êžw¯ùЪÃuqm¯ÉkÙ®[ãæç^ܬm÷+·h{Qó³.l×â‚+ŸwÙ€F­Ú_\Øe¨…€Ó*§U'\W³³`Ù¢çBÇVŠüüt†?§I‹ÖÑi4;¯uÐô\gGàô†`d}zôV«&#×åv¯x¸`ìÜ' ÷¬~9ò‹Ó5€?Ҭ͙AòŒÁÄ[óN~Y•Ù¡b[Þ¤¥/F¾ý7ð{#ªR‚â­á ½6ã¼Òûó¯~9ôÆêáÿ\u°ð‡kŽ„¼îDä·_•ˆ ð98nP5wxP¼%|»á–Ø]M®JívAþ’´ÄÈšÌ)K‡o˜¼9k÷Ò}áŸÅ¢aÝ+‘ßmx-òŽ`€SXúìaAÞ’ô“·GT ë8íÎpþìÝ¡ÚyOæÜ8óžì‰ÙóFáÕ¹-r :zÃðåÛrþ±êÑüWªwXñRøÿû2_ÐM0ÀgTúPa0pÂð¸ÂåÍC+3R¦ÝUXUú`Þƒ+Fþ}íÑÈÿ¬9þݬûóË[’–’³`Ø€¾#{^ž=oHÑÔ;ržŸ½;ÿ›Ëö‡¾ý¾_Ú§ Èêô &Þœ©Úº}åáÐ÷¢+ÿ¿¨?~ëäƒèlx-òöÚ£áÿZs$ôýè¼±úåÂÿýø½µÇÂo®5òöÆo8†NY£¯Ï¨Yô|áë«E~…7ןˆüpÛzÁ‘~£®mZ™9tÂ͹ Ë·[y8òæ'®„ÿ~ëƒ`€S\ÏÜ«ƒ= ·‰Óûw˜~wÖ]ë_ l l|w¥†U‡#¿XðlèÄâç _©?yË.Ip »,áÊ G^|\΂”««-¸oî“á—>WôÍ…{"¯Î}2ôlÝ®Âݳw‡^™½»ðïç7·|[Á‚Å/þ¿«_ŽüϪÑ_­;yç+u–$Áï ¯Éí\ñHdäÌ{CeÛ 'U?V¸»ì¡ðþ1×ç®Q=ôÚ”âä3>ôC©¥Ãƒ††9ÁÈúì‹J¶æÝ¹êpøwk†ßZ~ üokŽüþ”«N« §B0G‚÷„‚û~:/(\ž}Yé¡c7ævM¯vNjÙoaèIŽ ¯Êl=é¶œ’êÇòÿáWº¿J‘ àÓirA“ M÷óƒ1×çÑ`¢Á¤× RËR>ø)3“ƒÜEYgM½#·nÍ‘ÈÏ6¼öå?’`€/HJqrã±3ç=UøÑXx§þxø·ÿk+úŸã ÁŸƒÄi‰MÆlž³ôÅÐÏV ½µúåðoþ7b¡þxä·+E~±ò`øW«‡õÇ_ÛðZØAÏðEë;º_³$;¹vH«)·g••lÉÜ †ÿY"ò»úãáÿ‰®¨ÿÍψ´öXä7 žü?3ïÉ\7ysÖMÓïÊzbÉ‹¡Ƕv¬{%üÖÜ' ¾»àÙ‚ï/ÞþîâB?Xs4üÖg †.Ã/:ítN½ÊÀi'výµ”’¤ yÆOþæ³/=7H-í,Ø32öi£ èÔ¸ã ëZŽÞ^¼ð¹ÐË·åü}ÉÖì——ˆüääÿþ ÿM¶<¬>zsÖýù·M¼%ýÂ=¡«_}å¡ÂŸ¬=úm4ZÞžÿLÁwó§.­– š.Ek‡O+¾/ûÕeûC?Y÷Jäíè÷½µþDøí†Ð+áµù sžˆ œ|î±ëKÀé&¥xp‹!³’›™54îÓÙ¥äõ+½?cRéÖÌiáUiýÆÝ˜^¾lÁ·Výwýñð[^Óùí¢çÃ?^y(ò«ÏóŒI«‡~5ysƺ”ℾ•†¿ „·þô8†/þjd}Ú})3“F%N20efbjþÒáóÆ\ŸV[ýXáƒeÛrv®>þåúW# ÑŸíÖôN4$Þ¹þõØ.Lᆥ/†þ¥ì¡‚ʺݑޕ§˜t˰ŒüÅÃZ¿9ïÃ/Ê™±1!è;²—¥ €SÍIÓ&'N‹ï3xRBóO q©³ú_4ãîÜÛOîê³7ü‰·æÏ¿"©[ÓЊaýgï.x8¿ŽÎO<:\öPþ}K÷…ÿuã7>Ÿƒ‘W¿~kæ–Ümy‹‡´ŸvW~ÙªÃáýÑ.Jo-z®àŸïÍ?¸à™Ü¯-KŸ1'cuÖ¼¬Š:´jÓ½ÍYÃ*’ƒó»^Ô8gþˆk¦Þ™·fÞÓù,Þ[p×¼§C«wŒ¿¿îñ™Çç=3íï–¼8öû+‡¹pOä{óžýêEßš~OauxMÎy£7d½ÿz¤Õ Ž5l:¥ô9/úi£Šc-RœRšµmÖ¸M‹Îl×ëâFŸ&‚ø‰É†–¥tœqo$£dk$³`iF§Ëâ»6¬ ²ç jW½3<±r{QÑÈuy×%MOl_½#¿>º2ÿWAiíñÈ[ ÷*{(omÑšÌkó–d5xkÖªyÏ|oÝ+áßͪðõ²s7ç-‘’0-ùÊ>£_^TŸß5}`Ë9;¸|p»3'oκeæ–‚Ç+.¸oÔú¬~Æ%ž?öÆÌ ­.5Z‘,ymnPÿÏ+‚ÞEC?ôοª_СwßàŠÄîA«+[ÅîjÔ£àúÁƒJž®Kª=V_u¼tPùñYËNÌJ[üèÂi[>²à¹ÉßZþRÑOç?z±xKÖÀ~£ûu(¹¯àÆ•#ÿµüàÈ_Î{&ü¯“7çÎQzÎý?­Œ¾i–.øs®+ìß´ôþ¬™Ëö…ß\¼·ð{•>^·+ôøòáïÆÎ¦´èù‚ÿX°§àûk…~¾lè+†Þüã€xo–¾þ·Ò ·)³Côׯ¶h9ýkY—o µË]’s^ý+Ӄ̹´šÏü¿û¿†§ê’ꎔ'Õ¾üþ$Ö)Kž½¿*mÉ®ùã6¯»sþs¿½àÙÐkU;‡æïùÆ’}#´ìÀÈŸÎ~rü?¯8þAñ=Yó#k2.y7 ²,ðq:¥tiQ´vDÁ¤ÛrV-K(Q=¤ûÌ{ Î,\1¢_éCywoÉ^3ys~ÅøMÙu3îÉݺò`ø§uA¶%/„ÿ~ƽ…KB+³/þ¾¡Yó’ûõ ÷hZ|_a0îÆ¼ ½.ù¯}¨ ïΑ“áXóryAýõµ—YqpÌç<5îÛ“¾VñÄ¢½þeÆý3,yqôb[ªw>7²>³gѺHÜà‰ñø(W錬L¹='H«N ²æ¦FïK §¾(¹8á©wäEõÙÙ‹ž+üÇ ¯}0V¿ysÉ ¡oM¼yDÁYí;ž;´lHÑØ2·å/V4s@«Ïñ¡~B0|0Rf?W;jÓ 7O¸cöŽ™÷©÷Î|±|û„oÔîóí¥û‹~ZùHþã9óS;vÏgI€¿PâŒø aÚà`üM¹AñÖPé²ý8ãѺ‘w?_øJÅÃåË2 Sf&¤ß”±xÆ=¹{KÈ=0¼¢ï Q“FŸãÃù ‚áÝhH¨~¥4}ÉÝ+=?îÙOŒü×’'«Ù5ág?1æ;3¶¿8çé‘ÿZú`Á¦ÜE -½Ûðè™Û+»1+¸:£Ç™“7çÌÞÚ·æHì Ñ‘†EÏ…ÿ¡ü¡¼ãnÈêÕäÂ+ΟûTþæêÇ Ž.x¶ð?—ý²|[Þñü%ÇÆOHhò¿ ïNÊì}UîX¾% eÛ'üÝÄ;«wÍß3æœU7ÞP¾}âë+F~2ãžüù£Öe6oqEaÐô¦Þ|ø8½Ãƒi_Ë?yÕäŒ9é-+)œµl_ø{õÇ#oGç×Ë„ÿoÉ–ÜÒÎÜw an4»øŒ²m7V?–ÿÏ•ÛóMÙœ~oáò!½²æh1¼jÄ繫Ïg †¤Ú#eɵOÎmX|ÏÂçFÊ=åOO¼söŽ1·.z`ÖCSŽ-Ú;æ?ï ÿߢ5iI±ç<àÚÜžAçÔ.ˆiÚ¾iдÍ{ÿ³~Q£q›rÛ—lÉέ|$ïÎØÙVýgt¥zïô»rW,Ú{òm™~ô308«ÃA§þ—´Î¨K™š1;uàЊä±ß’·8=H-úy>ÌÏ ïmiØS;ëá²½%Íz±ä¡©/ÏÜ:íЂçFÿ[éþ1ç©ñߪy,ô|å#ù)y‹²;ÄÂ!²&;(\žiáàô–;?-˜~wað«†í'·*L¹=³÷œ'B;c3_ÿz¸aÅKáßß—»)izrÛs.m}N»ëÚŸ9ãîì ã€®Aë+ÛÁÉ<ˆý{Æ9Ñuú3§'É3ûþ-ê_ ±I_üÐÒÑ7¯½cì­uÛGnš³mæSŽŒß\òÌÔ{gì›÷ìè7¢qôù<^µ=zþ’ŒÎ¹‹2, œ^:%w:ëd/H †W²ç¸`Êæü¢¹O†ÖÖîÌ[Sµ#ïÑeûÿ\¶/òÃÏî«Ø–½tâ-ïÅDë«..îÕáäï‰ÃÙÑ`hM…“67:£IШq³¿åCÿ«ƒ!±æHybõáòô%,M[|ÏŠâf½P÷ÄÄoNÛ2c_Ùö‰¯/~¡èÇË_*úåʃ‘Ÿo)¼¹îñ¢¸Ö—´Ðpêë8¨gP¸"=ØðwSN~>¬"ñŒ¼%éËÈ] ƒªz´àcÇ!L¼%ó¾É·¦MŸtkVzÁ²´nApv“ ‹>üûtm †&Ñ`ø¢NIúWÃÂáhÙ9ÏÔ¬»þ¦¥ûFýhÚ½3ö»½jwÕÎ1ÿT÷ĘY{<üVÅ#áçÛv|™`à´‘^7´Ù¬ûó.{}j|håðQ“oϾ¯üá¼—ª¶\Ÿ^;¸kÁ²¡C†W¤ ‚³šE×Ï[A³3ûúèÝ‹þd—¤¯T0¼{LÃs5YËo[W|ÿôCóžûÝ1·Ö<Z?ÿþ±·ÎÞ±ðùÈϦÝ=zG›.ƒ;µ¾L0pŠJ˜:$Hœ–$L‰ V¤·SNIõÎÈ‘¹O™pSÖÆ”âÁéCfê™3'©YCà AÐô’¸ø V}kq×ü̸³Ú´þ2]Ðìó †ºØ®Iª“ª¶Í ¯¯x0²aþ½…k—Ü:¨xËÌôyó*§Ý5þ–Ô²±¹ç]rEã¦gµ¶ pj³17{cnpÇwÇI3R/Nœß=½&±ýäÛskŠ·ÎÌ[”18qjbÇ :·=»{f¯s¿"Oës †3¯è5ö®Âîºæ.¿&tcr·œÕ/é7¶c4oÖäìn-ÆÜZ´jÛÆÂÀ©å«âcÁÐ< £'Ýš]ÒuØÕ×öÓ¯gÄ5‹¸|ÏùK2‚!³†Ä¾=î÷sšÃîŠ+’ËRÎ:ÿò&ÝCkƒIO6ÉuG‚KN šµl´jß3:×Z˜8ƒ¡s|§ÔYIÝÇmÊydÂÍ97·êвU,ž‰Î-Κ\ð‡‹/7>·qÐäü&_•§ö¹ÃÐúÎ’+Skú\|mA“æç^Ä5:ÃÂÀ©ïâž½Û¥–&KšÖ¿sÑÚŒó®Ô!îeûJû\ƒ!©æpE¿)Û‹; ©ìqÎÅ=Î0s—…€Sߥ}»Å¥–&Ûª0õk¡àâm‚FÍ †<½ê¡ò>˜qEriç .ˆK[ýï  ØÒPÞ{ܽS.ŸÞ©}ü”à‚«R¼Ò þhKCõÁŠ^cïžxéÀÉW]pUòÉÍ1m»gmº÷ªÀé '£¡ê@E¿)Oëœ6?¹í5YgGÿ^\Ç‚Fg4ñÊÀé ï=¸tOiÏÈÍ£®H*mmhÖ=}pÖù—zõà´†÷·6¼TÞoêöân9+‡v8éÂØävOÁð\ö|Åu£ïÓ%mAV÷8ó’þã¼ Þ›#å‰Õ‡*úO¬¤gdSÆ%ýÇwhÙ¶«wæ"¾|oeŸ ÷îÐwÔåÞ  œº#Ñ¿=ýÒÁS{y+@0|D0<=í²øé‚ÃÇÃ`Á‚A0€` Á‚A0‚ €` Á @0 ‚ƒ`Á Á@0‚ €` Á‚A0€`  Á@0‚A0€` Á‚A0€` €` Á@0 ‚ƒ`Á @0@0‚ €` Á‚A0€`  Á@0‚ ‚ƒ`Á @0 ‚ƒ` Á@0‚A0€` Á‚A0‚ €` Á @0 ‚ƒ`Á Á@0‚ €` Á‚A0€`  Á@0‚ ‚ƒ`Á @08-ƒ¡pc4ž®K®;Z~2>ij8]‚¡[ÖŠÁ}'=4o`ñÕ‹ÿó3óñêøòç+“j 8 Äu8é‚«F̽ºkæÒ®Ÿ4ÝrVv¹vä­#£Ñðùli ðå¶¥¡!øMt>ÅÜîùõ™ƒKŸ À‡u/X/€ †,Á@0‚ €`ðÕ ×a>Z·ÌeÃÍz¦4º²/€êÐgdç3vMIª9\!€?Õ¬gÑ-…ñå{ÿúÝ’œbâ—%Ìì3°ä©Ñ•þ Á|@«Kz·ì5îÞ1 •ûðaW Ÿ“<¸tO‰`>¤M×áíúM}dRbõK‚øSqݲWfÆ—ï-ýÌ? 8uµï¹ràÌÝÓkUàšµjפGèÆpBÅ‹e‚ø€v×—ÅOï=¸ôÙ™‚ø–u=»×˜»Ç'T À‡]9´69¾|ï,Á|À…]Rƒ6݆_Øwò¶©‰Õ+ð§âºf-ËJ¨ÜW*€÷Ŷ0´lÛµq§!Câ+^˜õ™‚!~z¯f-/ Î<¯ãÇNós;±ï¾"Z_60hÞª]“«†ÍîÝoêö‰Õ?Ã1 OMëÐolïè¯k3þÌ4òŠÀWD‹ ;gžÛ¡I—ŒEúOÛ13±æÐg¸Úó‘òÁeÏÍêÞ¹väæ”è ù¨¹nÔí©Ý²–÷¹¸W¨•W¾äRç¿´lwuÓ®™KãûOßYü™¯ô›šÃ •û«ã+^¨¯xñ#'¡rßì^cïwIÿñ—xõà ÔîÚü ã€ AÇ“>ÅL :¥V\•Ô´kÖÒä3vGWø?EªH™} ò£¶0üáãÇOrÝÑŠ>ï †Þ1øebã6݆Ÿya×aŸ<]†žÙ¡ïè–ݲW XüDIRíáOܲ0dÎþªQ›6Þ:cë‚G‡/Ü5ï½ûkbs 2±úHÙGý\Bõ±²„ªã¥‰5GÊ¢ÁPÙg‚`€/Z\§”òÎWç®Éíº1«Gè†OšÌáMEƒf=3ëÓÄBl†/ÜSWùXÉÁeûÇ¿‘»æ¶õñ•ÇJ“ë^ª,Xw÷š™Ì´pýëkŽ~ b_ÏYµmYdãë‡/|jNRí± Á_¼F= 7TòôìØn?±³}Šù‹ŽQHžýReîš{WO¼cÙÖâfï{ý)sž¯™|×’–õ£i[æíH¨>Vú‡-Gˆ-x|nù£•Ï/Ú;ö1·®ßœPýj™`€ÿ`(¸> OÕý¥!ð—Ll·£œÕ÷®Zº¿è'Õ»¦OªÝ_™¾tçÂÑ·ÜtSƲGýáX†wg2go͸Í6ϼÁŽœÕ,O¬}¥\0À) ±I÷|mxãíbT{øä–„øªWfÅb"±ê@t^*}oNªÊã+£÷Õ,ï=~ËÈKú p*ClËABõѲÄê?:^!ú7•>[Ò5ky¸kÖ²¤Îò¤.™Ëß»Ü)µúº¶=rÏñ–À) w¥ç§§]?½wÇASâ:þè¹tðÔ¸ýÆÄµé6Ü;§]0 žÞË[‚A0€` Á‚A0‚ €` Á @0 ‚ƒ`Á Á@0‚ €` Á‚A0€`  Á@0‚A0€` Á‚A0€` €` Á@0 ‚ƒ`Á @0@0‚ €` Á‚A0€` Á@0‚ €` Á‚A0€`  Á@0À—Öÿ¨Ê8Ä»«‘%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/tEXtSoftwarewww.inkscape.org›î<IEND®B`‚calamares-3.2.20/src/modules/locale/images/timezone_-9.5.png000066400000000000000000000015401362604102500235000ustar00rootroot00000000000000‰PNG  IHDR T¾ãKúgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<‡PLTEY‡6^Ž9Pˆ.7|Z‹GS}2W…5W„4W„5H~(.t}½L…ÅQ‡ÈR|¼Lh§@ÂOÀNi¨B‚ÃO€ÀNi§BÂO‰ËTŒÎUŒÍUŒÎUÀNi§Bu³G|ºK|»L|»Ls¯Ib™Dh£>m¨Cl¦Cl§CeE‰ËTŒÎUŠËTÿÿÿ1³jÛ)tRNS UÁÁ_ rp~núùùú|1rpq7ÇÜbKGD,ºÝq« pHYs¢¢EÝ1¢mIDATxÚíÓµÃA™™™™ûïω%¥Ž”ün 7sIÅ(•s•ªVo4S­vGëöú™ÁP½Þ™ñD›~òfs=0ƒÀ `0˜Ìf€ÿ-–«õÏf»ÓƒÀö‡cêt¾èA`×Û=õxÖôŠðá¯ëòØþ1%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/tEXtSoftwarewww.inkscape.org›î<IEND®B`‚calamares-3.2.20/src/modules/locale/images/timezone_0.0.png000066400000000000000000000316431362604102500234140ustar00rootroot00000000000000‰PNG  IHDR T‰=»È pHYs¢¢EÝ1¢tEXtSoftwarewww.inkscape.org›î<%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/ IDATxœíÝypœçØùßó¼GßîƒI¼)R”¬Ã’,S²lì•íG“dª’ͱã±9¶¶j7[;[)UmRI&IUR³•ÍÎTƳٹyì±ðÛÿ]$žóD‰]ûˆ?óƒÓÓWôã±ãÏ.¬ùónYºÑ°~ ê"ÔE0¨‹`PÁ .‚@]€ºu ê"ÔE0¨‹`PÁ .‚@]€ºu ê"ÔE0¨‹`PÁ .‚@]€ºu¹¬=ùX:®Õ^íÚÂSÿÛ3§=Ö‚À¦öø“GZ|ßñö½òFu¦ ý°5•–=.Ö ‚Àæõ„8Rsûý&}_¥·r©89Û61˜ùÂ.L4zh¬ìa°y=%&˜+œž/-—Ì9Õ@Ї;O7zX¬'Ì0ØÌì‰×®¹­ÝM;µëÍû‹c¯“c¶Ñƒ`=!l*?ùx<“ >ÕÜé§§F+³•y™¾v~n`øÊð‘#GœäaÝîg"êëO>3Ôè±° 6…#_9’ìÞ–;âD*ÝýÑ:ô}ûv´ÝúÍ=-'ü×üÛÑÝ„ÎçÅêÓ"B0 €Màñ'wt¹_ìÙíüŽ £n$®:§ÇÂËóùò®žÒŽ,˜RÑ«¸þ‚«å)lzà€ ¯9ãøn\ßO©^çúŸµ«mÙ–äWLhGçòεmš²Õ¢9vôÏGŸ<úGÙø À;ž÷¬©…Õ *EíÚx¹hÊåðt$ªkZT2‘}ZKL‹˜æ™~nô˜X/ÞÀù|Ê賎ùa:+‰©‘êÿ÷ò__û«é‹Ó{>¹§}KòQ× ÖZôjåT£Ç ÀzB0Øð¢­Q‹Ø¬ˆ‰}#xúÿì™/"FDÌЩ¡é¯|õñd¥jï9õÊäs¯ü—£S/ë Á`Ãkòµov{·ô˽™&?û¿<ý…» µšw®¸`_›_M%<ÛÑÚ*"Ì0ð€ oÁ÷¿\»`­3ïEíNª åTª%3—nÒ÷»ëï#ÕO4z¬¬7€ ï©òÔüÿô‘_.'Î7wúwG¶%Õ±X\|¥lS¥h–¼ØôZ£Ç ÀzC0Øžú×ßϋȟ½ó—ÈõóUõýçpkÛŽæ¾çþÃs'DÄ6l€¬S€Í*‘ðè_¼1,£ @]ºÑ°~ ê"ÔE0¨‹`PÁ .‚@]€ºu ê"ÔE0¨‹`PÁ .‚@]€ºu ê"ÔE0¨‹`PÁ .‚@]€ºu °úl¹Ñ#`™ÜFV˜î{ä‹)ÄU£ò^¶<’ÔZÖÕ˜X ‚À†ÒÒ²;Kõ=‰6»Fi+""æ¿k³´ìF[c”Õnø¡fcµ2ÊØ}®ãÆQb?Ìc°ÖJŒ9±ÜÖæD¶×G[%N7ŸéRÆ1Óãû†µ#"Ê(QÚŠ‘ë 3Í/>ŽRe§µûL)ÆÇ†ö_ªÕ"ÖF™ QµÄðøi¸Üä‰XçR(F<»à5w¾Ù'v!ÖÓwåÎîí§‡ÎÞþÚB¡oJIÙÑ^>R 2•têj.™žhš/dòž+:"ÕdÓÀ–ήk{²-ù]­í—ÏLç†&Fw]X(ìWKÝÿe À­‹`°!yî\¤½ûÕ=ÛúÏ<ª¯êºÕT{jao:3½íÕÆÿ4ž,E·ö}°RI䛚§û’™rçüœ;¥”(ÇS:‘¬¶;Žñ×Dcññ¦\óäœç…Ïž;Ó9«T<ËÒ"Àæ@0Øp´ T&w²·­kðP­›v}WŠ•Ø¤ççw[[çZÎw·uìÈ6ú’éÉNe]Ïú~¤–3FBÏÿçÏ'–0é-}—J¤¿ÞqõÊ¡W&Fö 9Ê#Á`Ã1VÙ|¾oxðbö¹â|¼hL$H&Gš¶ï}-ÙÖYÞ±ïŽ7þv2mš•QJ”¼3Yà¸â8"ÎÍS;⤲a[4>Þšãfn¦u¦Zê,hm9ù°¡ 6 GÂZKÑÚk­-ÃÛ‰B.š˜o˵Tº]Ïú©LØ¢Ôò>ç—ŠÞÌB>=nLYÌŽÙJeJ:Z¹. p "` D£¾ŠgZ£‰ËÙÂìG.[뇫õ\&¬Hqj@åGNªâÔÀpiràdhƒJ¬f&äíãÜX‚VŸ)-´æ½ÈTjUŸIk©¦œÙ«ÇfçÇÏ_UÊTÄ™»“ç‰À’ °”¶&È•+%5kÅ]åeA®c¬](ŽŸ»ZgÆdfÆd·Ýžœ­vUex¸$" Ùx ¸5 °†LØ1/v•OJRJ9N$ÍmëpM¯ï´û›ÌªøÀ¬ìº&Ì4–€`€5bŒ¶MÔ{L’RUÇqgcAM‡"m%‘ENLXkÃZYlX)&bÉá‚v­äóÒêgгò̪ílLÜäkH[YÔ‘­Æ(›Ê 6uõ¾ø‘ÐxKúoÚq=ßÕ±t¤RžkŠÌç{µ[2.\6™¥ì¤,JµõeÚvn¿3ÝRh›Ù~Á‹£»¾öÉ\K©ßZ_Iž¼v±ÿU£œ0›l‰Æ§a Œ Rµå„jÅq£6’hŽFÓ­M‘dë³P2±j8177ÄÅm€Ec†Ö€5FY ôôø–+Ûvœ¸wj¼y0Ӕߣ”(¥¬nj-nmí<Õ­µñD‰TJî칓û¿7|¥íŒÖ‹»»á+Ö‹gÅçüùñ3ñZSJËÐʾ6ÀÆF0Àq´k ÛÇÆÇNE£Ã[‚ªªÙˆµZ‹“ʆmJEDÄ‘…Bf|rdÏ­•úÐw­#J‰•Psi`É8% Ö€ÒÚ¶M•lybd߀ã†^­ªKA ?]d­’ ¦‚Âl|àâ©Û¾W­6Ùnh4‚Ö‚ÒÖ˜ëßð+ª æ–‹ îŒ5V¬±Vl¥,å™)ïÚ…S½?ºzåÞ ×gh,‚ÖÒÎ5_Ø2=ÞqµRuÊ£Cñ3&´¡ˆˆµ"¾o¢½;†¸ã¯ï×Þt”·i@£±‡VÙ_ü¢;ùæ€ë¹W9Q] ýªÏÎÏf®UJ™Éö-gû#®G¢Dƒ¨’¹ötÓÂŽxr®íú%™*K“B0À*ºçïÞÓ~è£ã_*íó2©¶o}ÄqSÇ ¢WÎíyulø£¯líùÇ7 UÍ„ªªuqüh˜hí˜<Ôµõø¹¡ËGN:Z¢Ð¬¢T“oG¯þñd¬[ëyGé±V?òföÌ›÷þµ Ä\l{)¬9åZUž¾ÑÅ“&-V‰çéžm—ÏMož/´”D ÑXk¬°'þígîìÜâï¬Õt9(U«}ÇQŽÒ×7$XcÅ‹T3~d>~ñìC/¦r—: “û¯v÷½²ÏšÉbÔbŽk=ǵ~sûÌí‡î}&92¸ã•‹§?ö¦v¸o°¶XYNXKfÕ—ýˆò=ÉZ£ÄN],Á+Ëf[¼æX\Åc •½ÉÍJéоºÿ’˜x "2=¹çšëT\Ç eÜÐóMTÞó‹Ö(ãºålk×Û;ggvŽ‹({ýÈÕ÷_žT«ÅTæ%¨•MyöÚlenèÊØñje…_/`ƒ#`e™™ñÚ3µPuõG?Ÿmqz´ó³³Q•OT[âñ‰d¡©ºÎ‚ÛÙû7w´uNìŠÆÃ¤ãUSŽ£~î,Uí(Ì„M]ÛFNŸ«s•j¬Z­%ª7ºú¿»ÿ÷×äU6 ø€ö?zû í¸¡“”zÏò¡w¯a³¢Ìõý FŒˆØP?&s­ó{2¹ê–›>¨U¢U-±û¶W?uø¯ÿÃ]¿÷`<>š2FÙŸþŒæ-°ò˜a€ôÈï<Ðϸµõ::ŽŠ‹-bB‘jÅ™ ]½Öüfq¾{V¬¶A%Z[(l2fô R7YÀô툓m®l•æÊV¥Œ8ŽèÑ«Sg Ýùþݽÿç¾DÀ&C0À òÜÈ];⿞nÖ»ü¨öš5ó3æêÌXøòÌôé Ì–g¦:'‚0ø‘©øÞÃßûd"UèÎäv¼ûÖZQ?‘x/J8?¹z¥÷åéÉícŽc™V¬*‚V+á‹ù±rËÖ±¤—(Í•–KòìËY)%¶ß}ϹJ¥µUa g§sóÓíWæçFFsͳ;ÅZ-:Œ¤2aNnHk¬ÍÏÄ®\8µûû£#‡/“ ¬ 8ù°ª8ÐVй#Ó¹º5ómí9yÏãŸ?;ª~¯eç=»¿MkiµVÉì”=«¬3“ë¼´ÌOöGÜî{º;ÒMÛ¶øéΖH²¥Ã5%œhŠ¡+`€Ô²û³©ìÞHwîíóciT¢5*´ÊºÖJ85b_™.ªo=ý[ÇjKô'uß}©î=÷§ÚwÇźŽ‰ˆ(m®ßéðîò£÷¿ß€¥ `…ôÞök¹ÔÎ;?–îÜßãGSÚqÇâÉl©KiûÓ÷Úò|x%âE‚¥?úÎŽ#ùí©®C÷%Úvf/Š+bTX)kQÊš°fED¼H|å^`Ó#`ì¸ïKmÉž}$Ûöv¹~\£lÏöS»"Q“RJÄ1ŹphnjáÇSam©³ ªÿHGg²k×=éöÝ¥ÝPŒˆØ@çFƒâäÀt<Û «¥Œr|«[z¬£<–'VÁRß_ìMöº7ÑÚßîzI1K e¶ö]ú¨ë׿î·ÖŽ_³§§Ff_þ?¾ºÔ›–7ÑÚIuw*ׯ„aE‰UJ‹ˆ©ULearÁO4«dËö¬u<ã(ŽO¬‚–Oõ=øÛýéÞCw'›·7;nÌŠ1FÙló@§•jÌŠ(%"Z+nr»»·&–ó¾kLef¦Z›‰¦š¦XZ­$ñL·5m÷ýd[ŸÒÊh7°°ÒX–'œþ‡¶ìÉôÜù‘XnKÆq#öÝëZ[55¾w0ŸþI³'r¾çCó¿‹•sgO+?Û;¥¤¢·æ¥mXŽW«UÇ([tª…±ùâè™+ÅòäTX+_=úG£7}ÐÅ<1Ë@0ÀÍémG¾ÔÛÔyÇÝñæmŽŸ2+ò\•m>×Õ½uön׳ÑHô¹ØìLë9Ï "Ê =k•-Óù‰äð¹×Ô+ùá«/_|þ?^–„`€_äö}òÞžíÜ{O<ÛÛìDæÝ}–ãüí»N|ÌómT)ëäZvçZçw‹\¿áÍZŠ-õرt*ùƒ_ÿ柮ȰLüœ;½þGÙ•î8pw¼©7í¸þ ÄÂõíÚ«¸½}/ÝÞÜ>·_)ûž= ×·“Ùwæ´+*Wm-½þÝò‰øÐxWÿc‘½;ïuìÿH4³-¢D…ḃ8B‹•ªŽÅ Ñdn ­»çÜÁö-ãwy¾‰¿ï¯]¥®¿G+a9 œþØøúû‹´ôä`ºó¶{Z·{-­ç»”¶¶RJ—•ZÞ‰rJ•œ­»ŽÜuà¥_Ú¾ëü's-…®gc‹ú]†át~&úÌèÙÑÂrž€•À­Ÿ "ÒÙŸŽ¥Úú"¹no˶·öí½ý…¼eÛ±ÛCã.k=’ CÙ±ï‡wíÚêóÍí…~Ä&”^Ü—4J‰hG$Ó{?úDϯ _îˆ%Ið«]%JÛ鉾­ä™é‰ž+JÛe|±¢Å §zû.‰ÆkMK¹òÆ„ÌçåJJÁ‰ú·kéÏÀÊ!à=­elxÏðèÐ!%vÝ`ÉË‘Œ*:îøÑÃÑx­y±±¶:=&'* æ•ùiù/Aè,8®uKåJ^DÂ¥Ž€•B0À \m•èÚ²–£lsÛ™-­Ó×Dû{AM §+d¦£úÔ¿~*¿œç`5 °Â”RÖ.ò–·ZUJAÅ LOÈ åùðØ7‰À:C0À ÒÚª©‰í£ÕÒ+…hLÚn÷_ŸþÎ÷Þ’cRkа¨‹`€%0"bíõ»¥á~„À(Û³íôv?ZKß å¢Ìת2W,Ô^Õ:8[-z§ôÜà_ûƒcÌ*Ö-‚ÞáºE×õÇ&ŒU‚j²*Z©ëG$]_]†Žéí;º·sÛÛwMŽn?qùìý'”øæ§«”QíÇ·îæäµð‡“—½ï<ý/¿1Õ¨×À‡A0€ˆÄš´ŽÆ« íX_Ä)al&?“ŠÆ‹¹–ŽË ^8x^{á3¥ùÜl4>›Ús𥇓é–h¬ÜæGMòÆ= ""bÚ(îQܲ‘™÷'†â/ÎNf‡F®ô]šË·Úº®´&RS¹Ùɶ±BÁ–fÇœò# ‘{>ùƒÏutOÝë¸âØ÷Yd”̺»'¯·‹È[²È£VXO–|ƒ)lDû÷?áçÛ›[Sñ–xXN„ñœŠ®Ôâ¶Zó¬ïÍ+Ïí%J‘ƒ÷ ÿêÎCÅßHflÛûÅ‚Èõ{*åðÄØùæØÐÄW7;ÆŸzê)f· ‚é‰'?±¯ç¶ôo7·;Ÿ÷cªõÝÍÄZ‘ &Å…‚¹TþcG¼§ÿà7¾>*l€ÜœFnw~ññøí$¿ØÔî|9W¹›îW¨C)Ç/“-¹Vçaqô=‡?½c¾yËŽÉ ¯\(®æ¸ø°X„~n÷íÛ/%3ª¹¡”ˆv”—HËöXÊ}4ÛîôìýÄžÂëßz{P˜m¬S|0çÈ?ºíÓ™&ý…HT’+ñ€®'ÑXJß‹ëûîúå}­­}[Çξxab%€•Äxw~ñNïžûzþV[÷»ñŒìÕzqû–¢V•je!õÙr÷/·v{ÿ*Õ¤vi½:_²8Ž8^T÷¤›ôýé¶ä[ïéh¾÷ðÄÀó§««ñ|,Áu<ò;ôöí~)ÓæÑ+>¯ðó”q\‰ÆjW¶ÕÿD:¶üÔΡ׿unZ˜m4Áu|êËͶy¿K¬Ì¾…ÅPJ”ç«t2£ïòbî}‡?³ËmÛ¶sâÜKçf×j ¼Á7ñ›òÙû[ºœßM¦õ>Õ€Ý^Z‹ŽÆ¥3–pÌu¨}ûÙ[ÊF µµ `3#à·ýÚ¹=‡â¿žmóþŽÓàwIÇ?×»âiõÀÎtíÚrh{~ÿo9ýÔin‹¬ ‚npø‘½[š:œÏ¥rîªœŠ´TJ‰x¾J%Rú`S‡û°3k²~¦åäà›ƒ\úXuÜ@åT¦æâ©H*SÛµ#n£Ç$"¢´h?¢²~LíN5Çœžƒ;Ï<Ÿž1`ãâ¨ã7¾ú«Ÿné¶¿ßÔ*}vST)Ù|aÚ«VÍó³³îË3WÃ7¿ñä7Æ=.ÀƳ.¾5€õ(–š#Q'×èqÜL$¦2‘-ÎÃAÕù¸³—b1ý¿‹Èkô¸OÃ׿ÀzÖ¬1¡¬ßÍÅVÄóÅI¦UwÔW_øÊÿó…óÿÓ§I˜=¬ f ŽãÅ7éÄËÉŒó™F¥kE"1‰¶oUŸ j¢g'd\D¾Ûèq6f ŽoýáÅ«ÖÖÎÛõ¶áJ‰ÖŽDW<Çq¬p34` PÇ÷7§•Ó¦qsÛ2X«D”åÄ$ÀŠ" ŽÝ÷fy1ïþ[¤ÄZ±Š`¬(‚n.’ÉÕn‹§¤g¯H‘ë—»…Ôj.5z,€…MÏp~åÁ61z·ë­ÿ/V¬1F¤˜·oL_Ó§=ÀÆB0À ú{,²ï®èý~\L©w–ú¬Öˆ„¡HÚ¹ j¯(1ó¢lÕXY¨ݹüdí¯žý“ñc'`c!à÷<"‡³­ê·R9½m½Ä‚X‘J)8;3a¾TeàÔ+ ¯ÌL–§FN‡[‘ªˆá„$À #à¦ΚЇÇU².6=+‘ *sǾ›ÿËçÿïç_kôp›‡ÓèÀzsò¹‹Sí{ºFý¸ÞŸÈ8]"ï¬ÚàpPZg³í‘X¢kËÉK?¹4ÛØÑ6 ‚nâÐã»û}ßùŒUk­RJ‰Ökp\ñ#1½7•s›§&#¯N]+4r<€Í`€›¸ûoØ“iv9•ÕÍJiã8J)Ýø“´#®V:Ó»7¹óó{t×½ÁÙ\œkô¸Á7ÑwßcMت´Þ®¥•VFkq”jìÂ$¥Dü¨Ê%²ÎÇÄê‡\í]yí›gÞlä˜Á7qæ¹ó3Ý{Þr”s¼²`ªÊU[£qot0ˆˆ#Æ je™ÏÛ¿yýé3Ç=&ÀÆÅ)IPÇ_ÿ‹\‘¯}æw?5Üç¹ÍÉ”}8SÉFŽ) $ÈO…GÇ®–ÿs<¦ÏÎÅ®6r<€`€°àU_yë¥òÿ5ý¯¹ïøñ1¥D*%?ÿÏ_þö_ˆH­ãl.,I€0ðü€¹òÊ•ÙmwîRJ”QÝŽ«R 93I‰gµØÞ»v¾}òÙ³£ `“!`‘N|ïíQ•éý‰SåDFïó"*½Öcp]ñ­º•ö®¾üµS/­õó6‚–`è‹¥ts癦žH$¦os<µæG­j-®˜Úx¾Øttìí« kýü€Í¥ágŠÀ­æù?~~v|°z²º` X•ä¸âhWµ§r‘\ž°É ° o¾[.?¨Um¹!Pâz¾ç5ä¹› K’`ßœts¯'›Üˆv-®§’kyGC¥h®½|÷òkÆÖê9›ÁË4ðêÀt"³å˜k“®¯ºwmŽ\­Íå+'¾=ðúÀ„ˆHÿcMéÖö„?uµX]‹çl ¿±6‚_û—_èËõOd›ý¿j’ýî*„ƒ1b¬±Ö§::èüøØß4ýÉ̵íÊWžã9­#ªVªM¦.\ùáÉ«"Ï+=ÀæÃ ¬€Ï™™˜î<ÖÙï§R–x$ªú]OEßÿ·¬X+òÎw7æÝøùû¬X£LPsŠs3Ñ¡‰‘Ì©ñ¡m?8ÿà«5³ÛñS[Züd[[$ÑòRmÉHª£%KõÄRÕ¨Sœ›)§˜q|(Ì0À û{ÿæS‰dKâ7;¶ë‰é>×ïzX1F$ œR¸Å ª‹µš.™PתU¿àyµ¤hã¥ÒÕ6Ç £Æè Zv§ó3©Á‘¡oMŒìº*&Ô/´Æ µ¾ñê8#"ZD5}å˜Y9ñì¥ÿð\þ6‚VÁO<á8w”>Ö½/úX*i>îøÎNc"•â|âÚìdó¥ñÑÞ+s3í3ÕZ¼,ʵZc$Ô¾7ï7·^îÎæ&ÚËåxaèÊþ aÐ\«í¢Ÿ\k©äGÔÜØ…7&.<^ÄM¦[·EÃ…¹ÉW&Dž Wñ¥6‚VÙãÿôÑýͽ©ççîÝ69yhĆ©ªRF]Ÿ!07ü´c¬µV[¥”ÒÚÜägA‰*ç'‚êÂdÁJsýD|nèäÉüøë?;þ,—½= °Êν8ñæó=CéÞ϶¹‘¤r´U×`½Ù¤¥Dim•R¦ÎÏ,ŽKéHª-Mµ»~¼É–f†&JsƒC ckË5€ÍÆmô`P]}ÖÕ:ÔÚŠõ!*`)Œy·8”(«CmÂ*3Ë€%á¦gØ ”¶®Ÿm‹$·uÊ‘#|YX4‚6c¤yû]MɦmÛÛ§ýH£‡¸u °á½ç­ž¹À °Y t,>˜qüüõYsãÝ ¼?¾k€ * Ó»ãÅ}}{O}rj¬íôùÓ½$F[‘öF p !`ÃÑ×/|VJ•ŠÙB±)/dfÄú¡hÍ `IØP´Ôjób*Åšc† m®]zè’XeEÄ UÇ›]›c]Á‰©ÌÔæ§NèRuÜzáÏÍ(Tg'òÃ}ÑŠkÔ·‚6¶:?S«ä‡*Öx? †r~|væÒ÷çäå5º8°! °‘#‰¦­~,Ûu‡5&|÷­(=;ðâ™X.öÚð±o9DÀ­…`€ F{QÑ*ê¿÷ϬUJ\?Ö*lz, Á‘ýùeGJY‘P³ °d\Ü .‚@]€ºu °úØl ¸eqJ|€öƒŸJX&UÉYÖ U :g•åKÀ-‡`€÷§r=ì‰5÷ŠÄ£F+«‚š*»ø#J­2ÊXãú‘”ÅlàÖB0ÀûSÚÍÆSMº÷¶{ŽÝã8¥øå³wýhvj÷˜r‚EÏ(¥íw#p+ `\¿æúÑZÔsƒ„5®(ת%Ϙիˆ`€÷gƒÊlyz(6øê÷ö‹ˆ”+±²R— *4N$ÓÓŽ·:£`• ðþluôÒùÚÜ•ñ9ý³MÏÖxj)†ó-Ýwüê½~,ë°p+!à ¼ùdz"2ûa£©ÿHh­5"â¬Ì¨Xñ«OE£þ’f$X/u ê"ÔE0¨‹`PÁ .‚@]€ºXcV­½Š+J¸Ì °î °†”®êžíG÷ºûk¿’ξÝ.Ê €u`€5¤”UñôtG:[ìL¤¦2Ämô`31Ö /œ~èèøàð©ülß„Xm=&ÞÁkÉh1µ¦òôTˈÖË‘ëÁkΈÖì]ÜØÃ .‚@]€ºu ê"ÔE0¨‹`PÁ .‚@]€ºu ê"ÔE0¨‹`PÁ .‚@]€ºu ê"ÔE0¨‹`PÁ .‚@]€ºu ê"ÔE0¨‹`€Õg=–‹`€5P.•=–ÅmôàVÐÿðoíðb-{"ñܲ~¿VcŽqD1Û¸µ °:ÞÞœhîÝÍô‘pYáx1³ÂÃ`Õ °žr¬r£Æ‰D˜w?÷k1ÊZm•¡{`™B(-󾕪æí°Q1ÈŽéÛó£C­ƒF¯î|mèòá ¢<ö'6¾€å°Úºþ|2Ïw9n1Š#¼¥6"f`7tÏìõ±«·)—rEGiË>ÀFD0À²©UÓ•J9UÖšMÏ€‹`€e3¢µ(.rld,¸PÁ+ÌJ •Sð­¼ÇnyüÏ V1Êöí~îÎû>ñç_êÙþò^¥ÊN£ÇÀ‡A0ÀJSޱVW¬a'4àÖǦgXAZ[uáÌï_>[:. ÄjvDni¬0Gi+6Uã¨UÀFÀ’$XÄ`c`†à •µJYcõrb@)mÅraàÖC0À"„ÕJ)¨LÏT ¾ —þ&p#ɶ¸v¼•«ˆ`€E˜{óâÌÐËcÖDÕ2¢}ûƒÿÃÑh³+Š™À­ƒ`€E>ö­¢ˆ—ûû]>å+ÉI€[›ž`õ-wV€†#ÔE0¨‹`PÁ .‚@]€ºu ê"ÔE0¨‹`PÁ .‚@]€ºu ê"ÔE0¨‹`PÁ .‚@]€ºu ê"ÔE0¨‹`PÁ .‚@]€ºu ê"ÔE0¨‹`P×ÿÑ›gGÌþ‘>IEND®B`‚calamares-3.2.20/src/modules/locale/images/timezone_1.0.png000066400000000000000000000464071362604102500234210ustar00rootroot00000000000000‰PNG  IHDR T‰=»ÈgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“ pHYs¢¢EÝ1¢K×IDATxÚíÝw|TUúÇñ‹ –µØEE± Ò[zïÉÌÜ;é=¤ÏLf2é½Wz'¡÷Þ{é û[wÝâ®[Üu]u];*e~sƒ¬ˆ¸*Hôó~½Ži“Ìežùã~=ç9G? £ÕÞÓi­’Û4VÉ­×tXÛµcƒ–‡=i§ŒJ@` 0@` 0 0 0@? #ìõÝ7ÒI¸ÿy×k>îé, }Ú–7Ðø åQÃ-ã&=ô¢òчÇI]ëñàÅcæà0˜wp]C[ϰ66i­º ߟ®=¦™·?ÖäuýöØViVåù°¸«6³@`®N`‡sÎöÌøq çÏYˆè6î~5óÿ¥íÒ)¹¹ù|ßBÐÑ«37Û§Ë»]Xb$?G}Rà‚ÂZÃΨn㞘Nݶ˜Öü†€·Ê;¥/2‡ý.tiYKî¶,ë”3 @? ¶iuúÐ¥ù«òŽþ½¤ÍïƒòNõ©²õ§rP—"6½é?¯r‘MÊñ$KÃ¥ýÍZǬý©®ù;32••sg….Ë^¯ž5–SήtùçßÜ)‰Àô›Àp~ÛÕFSö¶Ì EŵúÑí©ûÿTÔ¢þØ>Kܬ=b¡—gÚ¾åÆ_>|MÞJµ-Q>QZþ[çw>ºøñm‰,Iúi`øª'A^¢´%+v]ÒÜcþÿÌ© ú³²r֜˺öýG›Æ6uoÊ:cÀ\ÿÀp>4´'Ú¤Ôé¥Yóg.˜=ß!soêû{­»´MYÖÆƒÉÌ0ý<0\˜°HêJ˜žÔÿ;…+ò’¦-øI†+òûõÖÆví”Ø½ ¯ ]½fjü„©qûâÌ#þšŽøýñB×%<çYlÉ;ècAþ?üÂ×Gô,¶{Ö=ìH÷‚k;< Æ>í”>v¸EÌ#¼€>Æ-{ÒV÷¨ùæ]éQxG‘ð´S†0Ü"–7pýCÛÿ vúǨð³ m›”ú$»´ý)ÖÆ†$@`øÚù Î9Û2=‹VÚ¥ïK¹ôägð3 ,I ?¾é™À À À  @_7èÞAÿð_·=z›à‘á(į‘„µ øŠÉd<2Ÿ÷«pV© ín'0€ÿš>åYûD+We½›O®Ím?÷À0.¨6ü)Ýã¼33‹È©wNœt»Éô+!y_Ðu¿žkÚ­ m—„…f­MÊA£{nj¥²H5…wp>0Ó¦OXï×suC›Æ&åx’}Æþ‡Œ6){SmR÷¦Ø¦mÏp+¨-ñŸŸ¿Ê3?~öôh¿Ñ¼3€>èꆶDKCG‚¥¡-Ñ5EQÐ"ã–àEúíÞeùKUU…K¥™Ù«"j“v§î |]·E}"b©hG%€Ÿ|`hÓXZ5òŒ‚[ÁêB—¼•…êÙk5[Â^JÙð§øõáñ¢›’vDvµø¾_Ö!}ž¶Oz5fµäH%€Ÿl`hÑØ¦NvÈÜ•nŸ¾75¼6ukÚþÐßj¶Dvj¶ÿ*ý€ôVa“ê³¼ãâ‡Ò%­ê ¥·Ë;¥O³K¯Å¬<Þ3P¸ð±g H€þ¬MZ»´£÷ÂU…!‹“·»å×»ä®, ]š°_·-ì%s8ø°¼Kú¼¢Kóåï — ùñ Ò)Íos^@U€~Îf­¼,Iö»ÒäݶÀWs©ßý¡Aá♆¢féTüZϘA÷?v3Uúm`0c£Î­pUaèÒäm){^OÛð—ÒÕÙ+ _ŽÊnéœn“×b›xû‡¨ ÐOƒµñ¸NY9g¶qwØ+%­Ò'ò;¼]ê –%e³R1ªý204kÝ Vv†üª¬]üâdž„o†ýª—¢–yM¦*@¿ ÍZ‡Œõ9A Ó7¤ìñÿSa“ôaõÉÞ ©»•Áó¼&È×õøôhaèÓvèû¡Ek“zÔà77kMÖ‘ ¿”u¨?­8!î `þ[§ ›üÞ-jñ{/û¨ÿ›³Ô†Ç§+xpŒâ¦ÝN€¾Ž\rk‹uÛÂ^®”ìV°°"jeâÁ¬#~o–´I§ªz¡oA>Z»UwÔ!soš|žÃ%Ï«¥¨ŠyÂ:Ñï‘ þò«äôµÀ ŸâìQ´´Ôwv~­qOÀ«ºüÌÂ…QÞ%žÖmÓsÈÜ•~q`°Ô7iÇ…¬ŠzÊ)}Ì}#ß~ÿ37Q! O†vy9PÏÍ»uÊñ¤àÅy«òêƒÞ(l x»¼SýYïí†$š ›ý߉¨Í]gm<ª7?o¢¼ôÉ2©A;6`Yøûägïå~ャ½…ÁO¢@Àu G46)uÛÔFKÃqXU¾0¿Áïüõ{iûýÿVÞÙ΢IÞYÉ@þ³&k³Uòñ$9¤˜ƒ‚fbøFÍHÏ"éÑ©aÃï¸ÿ™›Ea€ë<ŸžWÌô²ÔmNq/¬šã77uC༕Ú-¡/g ø›~gȯóüßþq'9‹&y†"§.ìµÄ͆ÊÊ…UÖÆC ]ƒÎ ã‚WF·Œµºo¤óÝ÷Œ°¬’[) Ð<íðô£¥ì@§Ì²êÐ¥ 2û¿QØìû~Q³úƒ¼ú€5ûýÛ|Óî ·M=WÞ)}žs,ôQ+s6ºæ¯ËŸ¦mO°4t$N×Õ Z?Zš§zÆ%{ÌÏ»Þvï3¸ž¦GXzkóg· ð«t¸É¯Ò96f•tL¿#èÕ´}Ò?˻ijò‰Ë+Y(iS’´=ªSœ9oÖTMGOPèin6¶i¦ÄìÒ=çUâx÷°qw™/fÀ(E%Å®'ÛxáÑiãn£xñ‘¦F-s]–´Õç•ôýÒ?Ê:Ä/*Oôâ.HêSúÑ^¥KË­ -š‹w`²6¶k&FlNé^0V¾®ÛîNq€ëÍQg«KеG¦MQT{cöå{yõÊÊ;Å/z+(œßI2·¼8¿¸ÆR/o™zÉùÆ6ÍÔøÉ/¨fÙ›/ëf*ôü&=ºÐ¥Ö°ÝçõôýŠ¿6©>úqÍÌ—òßÌ9ö·‚U…—9”­g¶ÁBWŸ4Æw¡ò<ï¥2@0øéGîKXë¾.ÿ¸òóò.ñ\y§ê\Y‡xº¢K<Û§7_´é3í6MÝô¤–Ë„… Ë’:´ã‚VD ·ŒAe€>`à/n<Çy–q—âì#ªw2(ÿaþü/yÇÄ÷*»¥³½Ê:ÕŸ&nÒœ¦ëŽÿÆr¤¯–%éÆÖªzQùÐcS„ûŸw¥@ÀõtÛCƒ‡†ÌuZœ¾_ùNi»tª´]ü´´]uJ>LíJ·N½Üÿ^ÊÞè®ùsì3- ­_6=·h, Í_~l’—$©îéüðÃcÅA÷>m7€ ×Ñß±O©ËœªSvù¼ž\|?û°ò]yw¤Þîa8Ô_ä7¼¥ÛžxÜ«tE‰¥AntÞ¯X«³[k•ܪ½3i´47âI[íƒc|†P!à:rJrêšbê[á¼Ù°ÝçÅ-ªSÿ«wAn^.mWòc£åÙ†ôƒ‘¯¨ª—TNš±?~”r¦fBø­¼µª¼4ÉRߨ-Í {|ZÔcT¸¾ApO³ œå|0ç¨âÝïjt.lòýOæá€¿VuKg®40Tš7ëHèÔ³ç̱Ðw%Xê›´–I Ú‹ÎdÐŽ ^:Â>™À\oî¶~Š|û ÃvŸÎÿµI¾ÑO;òû„ õÅ­~\Iƒ<3‘×àûnèÒ´-úfí·4?›ÊÐFp½MP8Ë5ǸÓûÏåâÙËÝäçüGôjãN¯ÒåÅι;3tÛ⫺էȬBI«ÿRö†¿^“¹Ñ&å ÑÒЖx™° ™špÐðœWIðÃãÕSà:{ÊnÜ”]ÞU…â?Ë:Ï/5’Ofžù²h*ï’¾È<ñkß9sæÚ¦ÖéåݬSštaËrÖ•¶û~ô½zºÄ3iû_óŸWºÔ9gK–µ±Agu¹°ðe`˜½3ñ×ï‡ÆŠà\oOÛÆ(ÆÝU£’¶*ÖdQ½RÐàûÏ캰ß'lLÞçš¿9GÞöTÞõü)Í-×ü ¹‰›bš+O|w/CY‡ú³„M‰uÓu =MÍæ¿a‘Ôžhihùæám)ÚÑê‘Ã&Ú›4˜ê}À‹ÊqÂŒ…`o÷@@µÏ4E‘.Û9{E¾|F—드sÖçZ%×'Y%7kÕsÊ:¥Ï¾+0È3Ñ«SvZ$É Îí‰îE›rƒ¬ð*]RnièH¸$4hLJ®MzÚ)=ðñiQ,Iú÷tG!d¾ðŒûl©ñG­Sšµ6) :Û´CÉòIÍ©û"^qÎÙ–%Ï28fïÈH;ö›ª“ÿûDè’6ÿÿ„.ÍY+‡K}ƒ.jeîúô¡¿õ.[Ta©ïL¸¸ÙybĦÏy•LÆ5÷¾‡ÆJ©ÐRT{O?¨gV,ôŸ›¶^·uFGq«úãäÝá¿tÌÚ›f%÷2u¾sª·úý§úlÇZÔðŽX·Ü!scŽ…¾Y£ªš3;tYîZ«ä&íŽ Óȇ¶9Ý6ä±ÛGz ÷§@_ô¼b¦·}ê²¼«âŽÅ­jÍ«÷û—¼Ó‘nkl³¢¢¦Ì&¥I'ßèÛ¦Ö'…×d¯/móýäâp¡iZž}È:ðwÿy©- Ǔ΄u²üyÛ%[©® 6)h8¯>ÐÇ=ç=ËËwvÖòì£Á.ï’NWœon>—~0ðOá5©Ûä“,ôm‰Î9[²ýæ”,-nñýà¿[¨š[Øð¯‚Æ dÿmÀü¼•Eµ%ç¦/³3Òù‘4.h…bèë{ýbút`ð™é¥(+XPØø¯ A ¸Ù÷}y;U—ܵùÞesg.ÌY“¸9®!~CtSI«ºg‹ÕоŸ%mK<î;gö\qæ¢*Ÿ²š2«äcI–ß¶êW3 ºqÁ«ü™àÿ¯>ÐÇÉK’œ3¦î‹üeå õé’6õ'Ú-á'ãÖiŽH³Êé¶Íè(hô}O^ªä7·l‰~{t{I«ï‡ÙGCþ$Í,_$o™j‘Ô™`ÑÓÔ|ÑÒ£žÏÛ¾¹ª±]û¢ÿ’ÄǦGáÕú8¹éyºf¿Î^áòÒvÿ šÔ/NÚ™¼+â—Q«4#jÓ¶¤ì yU·5²Ã.}k¦cÖ®t¢õùnÛ³œs¶e*++Xê“.„ }‡9<È=uz»´#ÉrÃôùsÌÁBw<~bÄfÍsžEIOÚh^tÏ aн_ }00LK8¬ñ(žWw<è’VéTüú¨Vçœåö5Eá5Ú½a5I»Õ³ó—Û¥oʲÐ×ë< ×åŸ?Œ­Ykm<œliÓ“ºâ­Çu>å+‹C—–Õ$n6Hܬ;¬ž={îä„Q;õO9¥DÜù˜ÃäA÷*žÇ;~cš#¼kZ&˜L&á ©D¨VP Ï†ÄÃZKCC’agt‡¼,©¸Õ÷Cݶ¤£µ¹ëœs—”ºæ--UÏ®\¿Á°/fµqWDmü!kãžy6ÁR\çn¾sæÍŽ]—¾-·>ø¯åêÏ{𢻥³9ua¿^“½)ª6qOtò€n“û¬Œýžú´½>‰iû”qû}Ò÷yãVy‰¾åŠ¡T¸N<2Ý„1Ëðq‚ƒÖZþÖ€‘ÞeŠ©ñt®yëó´[g´5«?ª:)™ªNªLE-Ò'‰›5ué£^.h |³ò„x®¼Sƒhª0ÿž<äÏ«Nš¿îMeÒ¹²õÙòÉüµdÊ«ßN\ï)O1  RÀ5tÓÁBèoÁ^3õ‡„1w¹¦ŒðH·:£V‘“ºÛ¿5acBfKtKa“ÿ»EÍÒ'æP o­*Ÿ­p®¼Kýyµù&ÿÒ `dõÿ{e·ªç†o…>’·ûÔxe»=LÅ€kk€o…×]ž9¢Kêqoi›êïeíªeVý³¬CüB>{¡¢K:}!$Tü~7øòclH¸ø¸ÌƒÒïâ׊S)p °{OÂZŸŠèUG³þí¿àdïÜì÷Æ0‡–/Ò÷‹/%¬WM¦bÀ5âï$ÏóR4¨þPÚîûii‡úTU =Cž]8$þ1džW¤½Æñª\E.ÉŽBâ•`2U ÞyNã;}–wJgz£ÏàjÂFÕ;ñ«Ü‚aðMT¸ âÖ(…ïi…ïŸpCT­êEž½…o…SMêï7+»Ås}5,ô,IêM†­î†!ú…JWAäRŸÛ£—¹<¹ÄÝ?y§¸%ÿ¸ê¯…ÊJÛÅ/úÜ2¤ËŒÔ=ʺÀYc¶Vz—“ÁEÐlðöÏ©ÿQqBüÌÎöõ€pé.IEÍÒÙ¸U®‘ 7¤¢Àô¤õáI«Âp‹§þû=e¾«0£V!ŒVÚÝ‘¼Ý»¢¼«ÿ„„‹›žKZ¥O2*wG׸L¡ø¡ž²{jàSvOß;Âæ™;ï5Éü{äÀðHt­"*}ŸX[Ô(þ¹?,=ºtf¡°Iú·a›²X,qy¸ÉT!SlàÛŒö#XDLÔ¥îBØB!aR˜0A[äùXì*ï†íŠåÊ|GG×dËÉ1µ.™ùõª÷*º¤sýnfA>ü­[4¥îöZh9ihÈ7þ¢©ê¤x¥MÎg²ªNÆ,÷Éšëý”M¼zË#„ ô«°÷Í>"¾{-—&UœNç7þÓ°3¾I¿=¶õJš°+»¥³9GÅßÅ­öVÌöFºŒïùw ºwÅzÃ̓ _äœS§ü¸¼SúâZíf”{ÜÿŸÒÌy³2v§©gU.,jV¼+ä7Å­¾ý°“%Sþqé7ѵÞ1#]'Þ=ëwq–Óùè “¦ß°Ö=¯â„(ŸÍp¶÷BØ3 /9ª¾ÌÌEQ‹ß¼J–”[%·h2÷¤.ÌZ«(Ï«IؘpÌü{g~`1¥ïóéï&†ÍsyÞ#mÚP* |)a£}ÏÐmv´Ó…»G n{èVá)Û'…;»CxÏÀoý] ‡4ë+zsÇ"9,d×…ýÁ°3±!ûhÄo‹[ýþ#Ï*\Ô¬|®°Éÿ]¯’å%Ó“:¬ m‰VƵqgš²ræÜŒCþû¡} òß/n‘ÞKÙ¥úSÔRwÞ€YD­¥²ÏEˆ^m38q½ÓÄIA“4[N7 ïø…ÉdÒöú I[Õ‚n“ZHÚ¬bW‹Bü•àWé%D.õ}Ö¸SÝùCûzÿò׿.k—>Ï=ð7ãîØVï²å%I-§ìm™!KJ—åÖÿÅ|Sö¢¥Dg2Eü:¼¦x…}úžT«äV<ìÒö¦/Ê^›[ø÷ê—T¦r]òc³‹¿‹Zæã8=Üš7½ÚzpÊ^‹üã^³JZ•/çSÉ­SlÊ=¦Ü˜wÌgWæ!q©q—T®ßªÎ×mVç$mQçÅ­“Öª’ª½Dí&±¼¨EýÑ÷ú?øÍÒÒö(ö$oWlJÙ­jÉ9*þ±¬S:%ÿ,¿^|3e—"Ã-3Ùh“¼õËЦ±4´'ZèÛ#–gn*ïò=uéI%m~$ïŠo±M;h”ÇÒЖh“rL¯ž=o¶f³îpúß—´ù~ü}CA£ô¸Õ>:Ë(Û»ywàçn@ÎQüòNÕï+»ÅSÖóWvŸòç]’©¼C:]Ö!}VÖ.’?–¶K›?ÿ¸´Mü—ùë¾ÏxîQÕï¢k½£ü*<pIq»7`–Ïc3j<Ÿ^î·Ê»"j‰‡»³~ú-ϸÏò˜špäËÙ‚:½Kîš|›”z½sîÊ‚œcA©ê–¾Ñ'QÖá÷qÀ‚Òe–†ó³ rÐC†MÊžT·üŠ9a5Ú½¹õoUv«¿së×òNéLÒÅŸ|÷gy{àg/vÍ„Òvå/¾¹ïííQ¿\êóëy çÈ%Þ‚_¥‡¹T!T½2C¸yØ‹7ZŸÞ"ÄÍwF)ª½§%Ö:dìJOܤ?˜¸9ºÅ%og†}úæ,UÕü™ò2¤òίÏ4Tu«ÏdŠøgñÚ‚éºö‹¤Î }g‚<Û`ihÔZ'4x–,)—ÿ^AcÀÛ'¤3—û7ÊßË8 þ&|‘ÂYUìy#ïüìùÏžò`a³Ï+]¢©¼Suº°Q|§°A|ãJC»l`ø¥dÊ=&þ;~*äÒçw1Ú R©‡à‘nßóõ—Aã]º°ª¸5àß™‡B^s/ÜžeÕ3{ЬuÉÛœ·Þ¸»¸Åÿß_?SA}:ëHØïC—–-g.­ð)_Q☹7Užm¸Ðß`•Ü ST,ª4î‰é4‡ŽO.òŽ©þ¿ÆGë[é=˜w~ö"k­žÎ­÷,(hô.Ì©óÒG/÷ñ™ï哱_ñòÅMÆW:³PyB>ç@ü“~‹bføbÕ3ßu=f³¶e¦î‹|9zMòn‡Ìƒ)ßøÛ¤ÔéC–-Ï© ùSe·hšùÒWᦴ]}*¿!ðæßý¥k^M‰<Óг‹Ò—¿k‘Ôžèš»>/ŪOª.n2ö«~¹TI×3¹ÜêÓŸ¹ù”i¾°ìõP¡¼Û_[àœsDõ»+ UÝÒ¹¢&ñí´½ªã†m>e3–yÚM ´½+b‰ê;¯§'0$ÐY'7é‚笨MÝæ˜µ7í«Y‚ ÍÐÍEymiÌšìÍú‰ ÿ2?÷¹óAEž-Q–¶?údäŠÜõžÅ« åÙ‰óMÑí‰öé»Ò ;5 òã¾¼æsò¿µ¨Iz+ó€ôrâZïju™ópÞ 0,·B—L^ .übÒBì åÍÚÒŽÊÒé+œY8—wLùûˆÅÑ!óL ´ûÅS®àl°¬c,ÏL[Á%ÙZ¸õ¡.{=Ï+fz;g-,ÒlÖÖ4½YÒê÷¾ÿ¼êÖÆÝ×CC«ÆBß‘`¡oÒÚ§ïK ˜_¹0ý`Ø«¥m¾^|ø[Y‡ïGÙu¡ŒYkÜåQ´¦@îkp/\S¶?ê噿<²+¹Ô½8r‰›ÝŒZñ ÏLǻ͗2€wð¥'mž,"' áÏÝšºWj©ú§%_Øa©à¸ø‡èZŸ° ~V7E/W >9N‚É´V¸éþg=4qì@¯l»{\ÖCn}øÁËÞË3 Ówë »b:*Ì¡E^r´°t™MÊñ¤KÃ…Ù†óKŽšµNÙ;2"–箕·Z­<¡þ¢²[}&ópÄ«á5YŒ{¢NvFPV,®tÈÜ‘¡Û¦=VqBýya“ø¯„õ>úGÆŽº]~~ÍFµà_å* ·|š7pq`í=ò¶Ðù®.âß¾v²ò÷EÍâqk|âfú ãý¼ðÐxù 8a@àLÇãV{äE-svsÑ[X8ê,&ßòà½7}[`˜D“¸I{¤¢KýYå •I¬ž?Ë*¹I{ùÀðÕ·UµÏ8` ^T\›v òÿJÛý> ¯ÉÜh©oÖºæoË ^\°ÒwÎÜ9I] ŽéKó#kBk6x•[ΰ»W,³¦‡Oå|[`˜øâÝ3j}Ö•wª>ÿ¡aA>·!ï˜âÀm=JþÜd2 “,†¸$»ÜÝódæÛóC ßk‚®ˆ^¶Mšµ`¦mj}Ò÷ _ÚæS¶ª8mÈïÓF¾¢ªž?ÓÒБøˆ¤&Íß%1Ã&[Þõð‹·ß7ÒiÀ}Ï9¸w¤oàbcUc„„uÒMq«•K*º¤S?4,”wIŸ¥îQí÷Éwž&ÿ=·»[œ’¬{úî1DpM±ù®ßyç·U=¤•{äíS-Í7ÿ_?KáÂhÑØ¦ÓÛgN–‡MJ}’]ZÁ1û@ŠsÎÖ¬ðšìõÙGƒ_WÏž9ÿÂIßX¤oÔNŒÜléQ9lbÀ”ûžuxÊž¼ÿy—ÛyG™à;NpI¶¼5j™GuYû›a¨8!™rë”ín)cž°ƒü÷\v‚£Îê{=÷ {ýwÆáü¶ª‡´çCB[¢eÏNH —†;sX[–µÁ°3¦=yWL{üãíVíÑÔýÿ¿!¶1¢6ygðâ’šóa¡íò=I ÚñÁ«’FKsõæÐà5xø”Gïéøèƒ£½ïä\äY§g„i¡c‡e[ÖñýžåÆèâéï™×)7N°Š¾üygÖÑ‚w¶‹¾H)Ĭ’„yŠž@á™é,,y#EXô½0çµxái×Y“cëÌ!áD‚ER³Ö­`c®gÉêBë”ãIIrpH<êõáËs×¥ˆ9QÔðvU·¼Eªh*i xOšY5ßÊ 7IG߃±M35n¿nbä–äÑê¹ÒÃ÷›(<ã’ɸØgï1‡†'n×mQ'ïPÌÍ?.þãâ’ä3 ä-N+N˜G×ù‘wLüÛŒe>éƒv›a»ú¿Ë6ÎJ¨öÖ©Ãv_Ádê&øN¾ß-Õy|È|¥ëŒå’8[á<-lÚýÎz§§bW+Ãt›ÅDÃI² nžßÜÒE «%lLÙy8ò×9ua\X\0¯|±}Æî4sО?‡¡=Ñ&å`²ÿüYóu[ ‡rêB^/jöO¬®ž!X|Ÿžë”N͸eÚ'ìb]ís¯@4ðuCŸ»WxÎåI!m¿$LôŸ>xF­·ÜËðYå ñtÖaé×ú­>5†íN¡ÉÛœ‚ []C [Ý¢u[|¬’œ‡Ž÷'D-SM¦4Á·Òót»‡ƒçz©7¨³’wøV¦ï—–æÖ©4(UØ(þ¥¨Yz« QüsÞ1å‘üzU[q‹ôï’Vé“’6é³’6ß‹[Þ-nõÿ·ùù¿g ä™óüßNØW+ýë3m‰Ó“:¦ëµÞe+J‚W.qÉÛœýý›¤Ï‡†išÃÚI3¶%ŽRÎô|tJØPÞÀeXÇX Ú‘‚W¶ÍÝÕzýV冨¯g“\î–w;º0Ì4 >9.Â]Oº!pŽòNÿj÷añkQ¹u≲vñ²éÓòNé óÿ9ùP·ê—Ï™_~ìùÞK_}}ágÆÅËŸŠ[ÔI3çϲ6~Ûy - }ƒnš®#ÁÒОøÃÃg´cƒ–‡?i«{œwð-ö˜–õ| ž§¼-`¦çm þ”(øWzw>~{Osòý/ F¹2‡&aj°Å/"—x¹ë·©veQÿº¨EzçBèÍQÙ-5î‰>á’»%ûò½ MZ›”Æ¾ÖÆv90„°Ó€o3ø©ÛëèqBÌJ• Ý¤µ“„A÷ úÚcxñé}òlžÒlô*Î;&þ¹·Â冼\IQ¾¤âÛg~ܸž´Ó?Æ»øäÀà[î<)e·²íÒåCW),|”°Ñ°ß>ýñj„лA°×º ‰_íUy-f"j WÛ§ïMýέR @ß05ÌvpìJByËÕ«*º¤ÓšÍšºÀù™ë2·dY%7é¾<Øí¢ñcƒÜôÜ¡´"l„=øÑ†>ÿÜÍñ«\ƒË:Ä3W{–¡ª[}¦´]}J·-¶ÙZ·È85~_ü´„ƒóHO†¶ÐÕ'™oúµVÆöŒmZK}SÒtÍÝ´„C‰£ÕóÞ°N|œêWÈ+Û^ˆªQ š ’µÌ㉴½Š#ÕWy–á«Ùñ´«Á1øY×”IÏûTXŒô*™2JQm36°ÖsbĦˆÉ±;u–úƤï3£`~œnJìžØñ!«Õ£Å9#Ý ¦}˜S3^P—yÓnðrÒoU®/jQ¿-zþ;Ìa¤¬Cúí”>𠫸›zQyß;ý„1¾‹”Sb÷ÄO×Öé͵/¨fÛßñàÈÛ¨8ðÝ;HxÎõÁ;ÇU™§^2Í–¿}“ªÈ}¼q‡jWQ³ô~Õ5jl¾x4ˆow)çúUØßãM7|¯ËC/*„ǧG Ïy–ãƒW &“I¸û‘±ÂCcUòÌÃØ1~‹ÜG)*-™pϦøÀÿb5ÃJpÒ;ÈŸðÌtPíåa¾IÏÍ>ì½(爲½ò„tæZ… #ûˆêOb‘í8aà°~ì¿Ó„Vsx0»ÑrŽªÿ2ÇÍËAc5ˆj×Á´°)‚uôt!¯1L˜f{“W¦Õ°øµªÜ‚㪗ÌÁáÌõÜ5©°QýîŒO?eËÍT ¸N䓞G{?'ŒÇÓÃ&Sƒ§ßà“ã8&m¯jvAƒôÆõ\¦”±_|%r±ÓCb©§ð„å£Â­ ¤`Àõ䤳"+…G§º%f¥Ê+m¯r[I›ôñõ åâg‘K=’ÜÒ'=4îÁÛåëSº Œåð5àº6ù ÁIo%,|-BðÈryD³Á;4ëøRå ñšŸÙPÜ,¾Sؤü]Þ1å¹¾ö‰67i7ù þU>‚eätazØÔžk¾ùÁ¡‚£ÎF[¤ÂÍg´÷8 \MžÙ®BÜIôÀs7†Î÷|&q½OEQ³ø×ÊÒÙkÝßPÙ-™rëÄW£–¹Ž‹X¢ºßÉèu§ Üqc@µ§`;]È<j¾âGoK•÷ˆ¥Š»M&“¶ÀGå1†BWËcÓž|r„M¥‚}¢í­!sÝ­ÓöŠ[JZÅw{ú®ap¨ê–ÎæÕKIÛ+5è6+—ůvuKs}DøØÍÁó¼_H\ï¥ß&î2lW­[åá¥.÷~ÜüOj£½ÇSLàjí1^ð+w\S‡Ä¬PDåUÕ—¶KŸ_¯Ý”Ê:ÄORw+v¦ìö.Ê:$¾\Ö!}ñå¦âéýŒýªÃú­>Ú€™ÞáŽ!ó|„v£($p5yf9ËøUxß·PÞ)NÞ©¬ šíó¨S’`1•ª½t›<Õ…MÒ§=KŽ^îûáÒÙ…ì#âŸg,÷qËk×QM ·‰ÅîOè·*V”uH§úSXGi›t:y‡¢XYèz•®‚'í¦ß`¯±~B»Ñ«ÆL3ûÑ,CQ“øv½{¤Éd¢ÀÕ`ç ·{Kä/·Œýªíª×Ê:ÄOûC`È:¤øeÈ·@EžçT¸JFØŽÊþO+¼à5a°•WhÖ!Õ+ýa¦¡²[2¥íU _¬´nyœBWÃÆ Ó§Þ:-|ʰ€Y¡Ù‡ÅWûC`¯± Aú q½bÆ­÷=5Pn¤˜@osÒ; MX«HÎ;&¾TÒ¦ú{Å éóþÒÇPuR:—¾O<:ßgÜL›(&ÐÛbWŠÖ™¤Wûù —›e(l’Þ×lP¤¸'[ß9lÊ‹èMêR¯Gu›”³Š[¤÷úÛY FþqñÍÄu^Ò£SǤ¢@/‹½u¹Ïø´½ª¦™ý40È'Së·¸ç=0nô´2½Ì#Óã®ÔÝ>ÅåÒ¹~Ì!§¸Eú$n¥›nȈï ¼!qƒJ°Œ¶£°@oðÊñÌa†ùÆût\–TqB:SÖ®ú«v£gTl?YUhëã6SPY —¤îVF5KŸõ×eI=Á¡K<]Ô,¾·Ú»ÂÉà84h¶‡`cCq€ö¨ÂÍáT _5AKow‰‰Ê"·aMžzƒpÇýø1Rv)bŠ[¤3=Á<*Oˆ=£¿†ó¿å£Ô=ÊíÕŽÏ Â­7PaàG[àf—¸Ö{CòvÅzýïeºI›ÝS ÛË Ž‹®êî_ Ñrð©è’L±«¼Ê\SíîKéi®”å ë[“œîuNv¿gj¨ÃÝCG¿x« hï:8x¶»Oê^ŸæòNñtÿÙjU:k¦Ò6ñÃÔ½âaÿ*—ž˜ü$3 À•pO³ÄbWÁ¯ÒSðÉs´ÖÂôðÉ‚Tâ!Üùô¸|r}s뺸ÇáüçòÒ%éìõ ò ÕUÝçgÌáàߥ­â¿ Å×»ÄÍé¤EÍÊ_å×+Påd9ÃêV* ô2Ç${óp|:mŸbKa“ø‘98¼sÄçÿrŽøþ.ëHðkúÑíMÿºö»"Ig TMyu>[Ò÷©–F.ó ó¯öUE®v>yÎwE׸ßh=ùQ‹ð À pUBƒÞQð«ö~!q½"‰_í]0ÁwÊħl_¸+b‰·à[é%(ò]÷4‡žëž8A'½( ›ôˆpߨ{)$pµÍñ ;$!r™§ù†ÜVxÎ{¦û”øºqæ¼ÙÞ¥ó«Ý –§ }µ²[:súΤîQT—»tvQ!à:8x`Ï=ï]î95þ Æ£hE±CæÎtKC³&reê¶Š.ßk6˺GñÛ€™^V1¶ƒ¨ЇJg£ÛT¸†<- ŽzÁÑ"ŒVè„éÂSŽiæ‘*÷ó¡I—´=¶µ´CúìZÞVyR:§ßês@‘ï:j¸õXŠ\k·=¤ºÅ"*`øÔˆ°§ŸqŽö„µöá'lÌÃZóð(E•8Ms4QšU½ ¨%àÝk}Ú³<›‘yPõ÷Ðyî “É$ø–{Q0àZzÁÛÿù„uêåI[ýxä–¤ Ý21bS脈¡“£wÆYè›4Á‹r×6ù¿{-ž/]–TÞ)}‘[§:»Ò'Ò†R1àaïÿBâzß­†íݹ¥EãB6ÅLß75nŸÆÊÐܳ¥ª]ÚþýöèöŠê/®QÃó¹¼cÒ_Ò÷K/ç—ÞÈ8 þ*|‘×|U¡ëT ¸†îîq³T¬xȯÂ÷±IAšûžr̼g¤GáÄÙªi‰Gzƒ¥¡MãS¶¸"ëpèï+»¥³W+(”uˆæÖ‰¯¤í;ÖyÅŬ”†%¬õz:ºÖëqßr÷¡>9Ž©p ³Ð É{b…Œ£:A=w½`e|Y˜µUx^Qé9-ñÐùCÛ’[Í£Yëm ™G"~SyB:Óëa¡]úƒ ¤¿G.õ1L µxÜ:ÖúŽˆ¥’àWéI€ŸB`°JnÑz–¬)Ìoxû Ou>[Ò*þ#ubTªxF­”0ÓÓÂ| 7R ß†V]úQCÂÆ¤ƒUÝW~6Ce·t®¼Sú´´Múĸӳð†›o»•*?À èæY¼¦ °É÷½}&ÃIÉ”¶Ç{Ù >Óï§ ÀO 0X§4ê|çÌSÔì÷^oä–¶Çgý´»Ç¨ð ¶©õú°¥9k«ºxãó7†<ðÛkñ°©c‡Rà'¬’›µ^%+‹‹šüÞýÑáeÉ”sTõêŒ/AxH˜:YpJ²lb-( Ð?C«Æ>ãHrÜúä='¤Ó?64”wJç’·{æ˜/cyÜð˜Åä[FØO`×$ ¿yxmÊÍ=øº$SÊ.¯3;zhÖ¹EÄÔºçTÙ¦*@? –†6[ÁŽÌì£Á酒Ε´IŸ”´JŸVœÏ·Šg“·{¨© ÐOƒÜÇ ªZRYÜêûqoì”tñiÐÅ-ÒÉ;¼”Tè‡Á&¥A'Íž3'ã`ä+òì@/ì”tÎüwÎTuK§åùÇ¥÷ôÛnTègÁÚØ¤UT.­È9ü—ÞØVUžQ(hþ©Û,nŒ_£ªJ\§š¹Ô'?p–Ǫô³ÀàyȘ¼{Ɖª“½p×!ó€x2xžÊVU¬è[®èë~“kšóªô«ÀТqÎÙ’Upþü…s½^ ™¯²¦ @? ÖÆFzöÌy]ê/z³É9ó øË°*ªôãÀ`Ÿq4Y·-¡±ê¤úLïé—a EÐ_ƒµ±Yë]ZSZØðNo-GúZ`X$Z¿à=Bý10ؤ4ê×Vvû~ÞÛç.äÕK‹]©T Â&ØP  ?†€ù%5½äQÙ-™rލêÃx8 ~v Ÿ<7!t¾B[¨¼²…'­ž¦@@Ÿ © IµY+»{¯áùÒÐW/þ*v¥wœ"ßÍÎÔæÀ` O™ÃTèË!¥!)tYîÚÊê^›aO‰®ê–ÎTv‹ŸWt©>.lßÊ:¢úm^½òÙ‡Ä_k7‹‡}ËÝbìlS! ù —Ü­ÙYGBÿ ßè÷JïÂ1ñõ„µª•3j|ŒA³#Ú™ïî»ÒgvüO7ý6Õý¾nw:ë˜aúv`wJjÒ**—TäzãGï”Ôs`›òkŠëgƒ§9<8 Î”%Ü?nò±Äë¦ñ~–R÷ú 3='=úz`¸Ð˲¤pEY§úT/†ƒÎ—Q¼úÀO$0ÈÃ!sªaWL{ÕIé, 0\2šµŠŠ¥Å­¾Ãef¦è¶Å7Vu_á,øéy–Á«dUQN]ðëÕ/‰?l;Õž-UESÆ~E90¼À«üäƒÜ}<)pAåâÂ&ÿ·ÀÙ ¦¢fŸW²»/ÐmrsÐ:>È«üƒ•¡Mc—~89vmò^9|¿ESæ!÷%æ§(?¯ÉdâÅ~’Á<ìÒŽ$G­ÌØú}gäÀ[ç)†Ý?H¸ù›yñ€Ÿx`Ør%Wø‰›Ô:}ز¼Õ?dIø™«ä­²jYEQ³ß{€ÀðµaihKtËß‘™º/êe@`øÆNIÎ9{Ò’¶%4Ã%£Mn|6D­ÈÚô}N}&0?«À /KjѨª–U6}wøÙ†¶D÷‚­Ù©û"Yý2 0|c{Õú¤Ð¥%µ¥mê/ ç¾%0,&0?£À Ï28fíIKب?PÖ®þ´ Aõ·´}ªŽÊŠ.ñlöa¯9æ§¼Wø™† Ã){ošÿœÜž¢6q»CnêW¥mª7KÛÅwŠ[Ä·R÷¨Íöpä~†Aþýéš#š1¾ó|9ò.§¤é#|ËÝÝBæyûT{*|ò\F¸§¹à~–¡gh§ÄìŠzljäóÖ3& b±›4Û[ð«ð<3y±€Ÿu`0¶i¦%L|Þ§Âå–;d6 0\Ò­oÒMŒÜ2lbàãSb÷ð†¯÷2LK<¬-Íõz`”ûí·~„ 0|-4h§ÄîéQd3ðÖ»ò*†KÎghNš¹9ðÞgíâU —l±zT;Z=ßï¾çœ áë»%MŽÙ•ð´S†ýàG'°$ 0|}X$5èÆ…¬öúŒýÃ-¢…;Ýó|7ß~¯0xøᾑNÂó>åBÐ6“`2™(ðs ÖÆví¤¨­±Ã-ã‡M¸×üT7<2ÞO~Ê7 ¼ùÖÛï{êöG'‡>øøôO™?ÞI%€ŸQ`8ßÇpD7>tvŒß"ß'íô/<ô¢rØHÂÉ/ú/õ¼Â{|èÚàçUaOÚ% §ÀÏ*0œ Ö)òò$픘ÝÑ“¢¶†M‰Û—hþZ/ï¢dmlO2s`Ð?F%€Ÿ]`øú٠溋ŸG^¶46h9 0\¾ÏÀ À À      T 0 0 0 À À       €À@` €À@` €À@`@`@`@`@`@` 0@` 0@` 0 0à'ëÿÞ2ÆÑäÔ³Ý%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/tEXtSoftwarewww.inkscape.org›î<IEND®B`‚calamares-3.2.20/src/modules/locale/images/timezone_10.0.png000066400000000000000000000402761362604102500234770ustar00rootroot00000000000000‰PNG  IHDR T‰=»ÈgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“ pHYs¢¢EÝ1¢?ŽIDATxÚíÝwX”W¢øñWI6=šbbC=vEš4é03t”^§ÏÐ{obï½7,ذ" ¨³½ÜÝ»wïîf÷fKvóÛÝTß¼M¢±;ÆïçyÎ Çyýc¾9ï9G€§ÇÈY¹Ã¬ãêtöÆ6•½áìMSòPG•tˆ4¹— €` ‚`‚ ‚Á€`@0 €` ‚`‚ ‚Á€`@0 ÀR™ƒa(Á@xú…×…7&ø ALBŸ!¶=ûORôãSæf“zDko €ÇÖ+o9£½ŠÅO{¶‰yi„[–õäˆõ³íT'Síõ­%à!{ÙÊZxs’\0™LâÇGÎÊ7!dy˜­ò˜Jªoyh¡@0ÙKƒ¦S£¶ /™þìHܱæPœžX¯|Ø‘@0Ñã}§ÌNá¹×†÷æ¨=1t…¯uüîd©¾Yó°Ö* ÀCôlß!Â`›è®ÏZG>aþ|È8ù|¯é ûâ%šSÚ‡µ Á¥Öñ{â%êFµùM¹úÞÍ*´Ýó!ÑŠÁ &€ûÁÊ.NüÐk¨ƒòµ1>¥SælŽ7¿ WÚZÕ÷r&@ª;£±S7êîõ°M=¢jŸj?D’H0÷Êëo{ M&aÀÔÐׯøVØLŽX;ÇN}R}?n’êš5ÓbvÆŒW,òž¶Úcbت{5fMYæ:hFÔðÖ‘p7Þœ$ž~i€0ÔA)¼6ÆýåQžÖ“#ׇ٤¾Ç·]’DsÊ0!h‰—ù)%KÖs¼|¡¯MêÝÃ9K`,Y¯‰a«ül•Çuç”æëƒa´w±p£1Ò#G8-Œ+<@=o-®ÿžSF£Î#GEëý+VV:gž4ÿ÷­ÝßKoÔ¹åîÍrÉÞŸá˜vF#Õ·)¯7ïçû~q¸‹ñ‰aNš'úO’±=*ð€ƒÁ×Vyì†Áà˜Ö¤# ;ZÔžE› U»”§ š"þPq.øß%­¡5ìOn•Õ,«qÏß“µ*oKîÉÈßæžœýß±ë²vxäoÏ÷*Þ‘ï]ºµÐ-÷`†½á´F¢kW~ ºVõ”¨mqcý«dãäóýÆÉæûcÈçûñ-“ žÝßüœ‰ÀR‚AV³¨vÎʼÍ.ÙGŒÆú”mÊ“%­Áÿ¬¹¨0Í}§{Tw}^t&üOš=I­†ýqâcæ˜ø¾>ö¢jgìùü“¡*jýKú¡ø‹ñ²wù–­-³74«ÓNi]²d8¦ÔÍPv¤LOmO±Uµ¥J´g•ÝÙTóPJõ­J{}«jzB½a„[ÖH³Ë † ysÇ­ÏØí–s8Ý-·.7ãðì_šcáòÕX¸vTw*®Tt},~^z6ì/‘+2·êã/Ô\”›j/)ÌCn*<úçÐE%«í´-*Eí²¹ÊÊ“ ›²wÅ­/Úœ²=koÄÒªîyÛòÝówäºæìÊ‘êĉó©ÓF¸ Àƒ †Ð›ƒsæ£cÚ x;’kΞlížÄ¶Šö ÿ\ bˆãËÇ.Š3 ŠOrO„ÿN¿/êݼ“¡ïåŸ ÿc~cÄÿ&nÎØk£:£’hϧÊjVV©v¦4eüuY›â£šN™©¤5䃜Ñ¿È;óóÜ1?5ìSŽ\V¼Ö^³1ï-—Ü`AÁ`~\ùÕ÷ZÕâz„¸õ9Û O‡ÿ©ò|ÐÇ•çÅ[Îi÷$·$žSíÔMؘ³3juÉúÔíÊ“I›4 Ñk2v)æ-Xà_¹¹Ø5çPúÕÅÏÆÓ·Üý™²¹«+£V—®3Ô§´ ûsy»âãŠsòÏJZ‚?H;ûN袊•vÊmÙÃ]s™al0¬¼y0èÛ•R}û—»‰Ÿ;›´žE»òóÍ‹]—»mVÁ¶‚™™Ç 몂 ÆSZqa³Tתr6?æšs$Í9ó„^\4-Ñu¤^û»®þ>‰¶#Ubþy—ì£FÏ¢º¯’­Þ%›‹<‹væ¹åÊpL?­ž¸ß8Â=›`,)\²÷f¹äìÏt0¶¨¯£/þ|«ÊÁجoWrË=²pɼÀê5R¸…êÕ8h»­s¾¶ «9XÚº7ƒ`,,< Ö•Ï/\ã’µ7ëêY _Æ3š€ª¥5ÆýQ?IبipÎÜåY´¥Ð1½Áh§íHí¾­éîx# ñÿò{—l(vÊ8œv£`Ÿ™Õ` [\½L]—Ø’{"ö'ù§¢þ+£!±3n}þV·ÜÝÙww’tW0pK`iÁÐ 7Ÿ%pLoÔù”.® YX¸.ûXÄWžW|&n½ZÝ©¸\ÞüaÚÁ¤v·¼¹]·(é[UR]³òvÇô„½úán™b0ppðà‚a…ÏwÃwñ¶éΙ i³ öäÈj–Ì]›·-ykZ½v²)e»þKÖ¾L{C‡Ê&ùPê8Ù¼±¾e.c}Ë]omT¸Žš•ï1Ð:âu‚xÁv÷Áеӑ®#Õ1­QPµ¬ZV³ºÒ#¿.×9ãPš½á¤ÎVÓ¢²QK±Õ\L™} î-—ì©C%I=‡JSny ±KèùÆ8bx Ápu†Áx§ÁЪrÍÙÛµÈ9°zá<}ýì6…ÿ1óHÂ;ÆýÊfÝíqÕδÉ[³ë7n ™Ÿ½Ð66Ɖ—x‚!äÎgÓNk‚æÍ_`<×™~(öݦ9¿-où°ö’ÂT{Inš+Žwd&ñçŠÙçy'åÿ—²Y¾ÜEãaÅK<2ÁpD/.\ÏS¸>®ž‹Ð®ì>¹íºÇÄŸ÷*^_¿Aw ¸9èŸÝ‘ 0GÂW£æ¢âJÑiÙ%­÷ÉI\ãf»ÒïÓ¦ŸòÊB0ŒS¬öò/¯^”²M}LQ»¬F¢mUÙiϧJ´çRÅ]sfx•Ô庙?Úš4ΙGŒîùõYõY^E{rœ3§)æU--ïúèÚP芅NÅç²ÏYê6ÆÇñ©šÖñkxÕ€GD‰¡ üõ{ã.TW|–s<êqëó·„,\Z+«YY•¸9«Îx ñ\î‰Ù¿1<Ÿ´9swäòŒ¡‹²¶¤lKnÊ>õóÔíº†ÄM»‹Î„üõëÁPÚ*ûŸ  Ï ÷tïž>9îÂóƒ^ä%ž9ñÉy'BþؽÞ@a2‡Ãç%-!+h {¯ê‚â³k ºS~%¿1â÷ªI-ù§BÞ¯¹ØýXu§ÌTsQþõÙSaS`ç(·ñƒx•€G”w–ë„‚Smâ›ÿ/ßðw-Z¾~¶à꯾ Æü[¿ÿEt|œuXÖ¨Þî`fû¯2ðèz:ÿ¤ý§3_¹QÜê0ÇÂ'¹Çä§ýòݦ˜L&aZÈ ^aàÖ;z¹odêfÙ’¢ÓŠßŠ·ÝM,ëeGÜ4£Ö¼—"xyu€G]@‘OÏc‡=~@¶½òÜõën3þ£ß°W·Ë;LµM&ñÌpë7T2ŠxÔÙD:öQm—m,oW|t7·$‰k!*:Ÿç•ÿ:r¡¯¡ÿäaOòêb”ËHÁ;ÓM©öÂjý„È…BÌŠ@!ØüõœÅ‚f‡BHZ/þÛ´D°Žpìá™áÝcÎYϘþI§ä¿1¿á¿|Ö1|VtFñwýnÙ§û±\ÀB¼í5F˜etyÂ/Ïçiw£ÏÓ>y~?PT>ã¤ò|ʯÀÿIÏÏ^ø¬_ŽôµÈžþÑKý´©[äóŠNË}/=wo§*ÿYÔ@ýnÿ1îzçç¹*€…4upo¿\w›èeþ¥)›j•[—«wÈ6%oò/Wm \’¾_Ѥß-«Ë9*o©èP|P}AñóøtîÅ» …ël“³< ³èL¸à¦eá3`1&øLyvö"Ÿèì£òߘ߼_ž{±k\o5ªùâó¹÷`&áë®”µÉßÏ<ä¿Ü;Ëu†ð ×°(oûX÷MÝì]VÞ®øø~DÁF×n SÞ ùYóÓxÊ3Õ‹Xšqþ¶¯êvzϯé”_y¡PÓ©ø¼¬MñÌÊVc½l¿rKÀ¼Q.£_æJÈ&Ú¹·¼ÄÕ&ý€ß‘šû ¥gåÄ­ô*_íåµL>X^îß/ ßû•I“{s% 4=ÒQpHr³2ìñß&Þ&tßf.*L%-ò¿DÌs‰å1ã…ä2AVâ!„Õø ü&r!K%wî§Ùá· ¼]ñiÍÅë×ÜÓˆ¸¨¸RÞ&ÿ›r‹_YÌ ÿiƒf {ê‰V\À’ š>ö‰9‹}'è÷feößd;²ög76æ“ÿ¨¢]ñï¹÷0ÄÓ¡uu²ÖàŠYAAå\À’ ³Ÿ D-õ?í1jÖŒ>åö¯:&¹õ÷ÌðPä%É:,ÛWyNñé½ †ŠvùßãW{§Ï^è31r¡x8$HW­“àatüóg AÞ‚ÉôG!¬ÚÙ*y£FÞ Ù»ÕäwUç§íÜ5`Ú€gŸÔ‡xTõ;Nè4U I’‰y'üÏÔtÞ]0Tw*.çhŸ¬?hœïÛ¼ÈÀ£¬wßç„joáåáVO%oô7”¶Êÿ|»%]Î?)û¡¼d–ã ›½^ö"/0ð}ÐwÔa²\Ò7»AVWu^ñùÎ.|f¬W4úåÍ;A6^°‹µå…¾/좄ً¼gf’7™£á“;ˆ†+Še 8æ˜"PâÇ‹ |ŸŒñ¶þ~|UE»â£;=Ä­ Iþ;y™{È+£ûôà¾GŠfy5þü®vJº ¸œyX~â«g{óŠß#sûz擵W_¸³³ÌÿÝçò_)·úç†T9ó‚ß'Á•ž‚r«¢¢ì¬âÿÝî Ð5ŠÏs˽,Àmœ÷ÄçÆxŒç¾O&)lúç—g î`—¤Ï³ËÛ& {eZ¸kO¯LÏ^âïï;Qž·píÝ5®úú×,œS²ó´œ£²¶êÎ;>éù£¼­³y©cWøfùæ:oiG¬ Ú,d6„ ±+Ÿl!ãP„Pónœ «S)›£;°dn—'ÌoÞ³ŠÏÈß7¿ù7ÝI8ˆ;%U—\Ñ¡ø9>šVÏòM\ç?>f¥|D⺀qaµþƒl渼¹Àû-åVÿÉÊ­Š±q«†ŒõqzêÉ×FpK墜)8$:¼©ß Í9&ŸŸsÔkE‡üowqúó•ò6ù¿óN(~“}DñNî1ù¯ÓöËŽ*·ø/É:,k+<¥øcÞqů͟·&¯÷õ„§zq fŸ`/HbÊK}\Âk}S NÉ-¾ñ¿›­VÅÔµ_ŒêNÅ•ŠsŠÏ®}\œ•Èn<î“í1+X(“é’ÐwÌÔú=²ªÂSòß”¶*Ä[“>Oq¾«`¸…‘sTöãðyþ\À °%8§Îì\áá•wBvQ\¿P{éþFB÷Biù¿òOÈ~®Úækœ½$ð®`™z¦l Ì(n–ÿ±æ¢âòý…« ¤s4GÌ÷’Å,÷f~=¼2gq%K¿j–WÑiÙk:ï(\;ÊÛæŸTü>óìpìJ_ÏŒY/s5 ÒgÔ°òŽ쯾ð f䦚Ny÷Ç/ÆÜwäâ&ã¾ÀS…ÞÓ¹"€y~ЛÏä ØTÙ!ÿì>Üvt¥ìlÈ?ŒÏ¥n7LÜœ³+n]Ѧ„M¹;b×mNÚ’±×PŸp.ysʱй±É²b¯>\À„W9ÔïñÛXvVþï{¶ ù‚ⳜãQ¿ ]T³Ä5çpºcÚI½á´F¢mUIõgÔ]«ÊÁxJëš{(Ý6ykÚ(ŸÚé å\ À’˜L&á¦z! Ð1 °)à¿î:ÄY…¶h÷*›< ·ØÄ@hSÚÚTö†³_âcJëø½Ú·k¹ °4C¥£žœïêž{,°­êüÝŸ¹PÒö×è5EÓŽë¿ßÆv•uüs0Ì%K3Òeü³‘‹¼ ‹šd»›³ÄíX OGü1~Cö.;ífn s0Xs5 Ò£×=%±6 {ývWž“t§±Py>èãôCñï(æ-ë”qÌp+¡p]0ÄթߨžÊ,H¯>¯?³ÜGUØ$ûýÎ*5‡ÿ9v]îv÷¼ú,‰®Mißµ^á6ƒ!v—j¬å®`Az¿>è‰jÏQ9Ge‡o{ýÂE…)çDäËj–ÎuL;­•êÛT· ×ôØ]Ê1¾å“¸"€‘—yO5ì ¬+;+ÿ§·s[~ãìÿYX³Ô!­Ys'¡p}0ìLãS:‘+Xå6yZq³9ºN[–_ZûŽ[Legƒ?Ô×§´V¯¨·L½›Xø"ÔÓbv&ö*Ï,HÔRï©É| ÊÍ^iÉÜÂ26Tv(>ù¶X¨îT|–v0¾3lɼ%.Ù2ì -ê»…¯‚aGâ(Ï‚q\À¢ôí!CŸtN™ùzp¥{Dα€V_¸~–AœuÈoœýÛä­Æýîù»³í4ZçŒ}™Q«r¶9gL¿ÛY†/‚!aä¬Ü±\ÀBøäxuò³ÔÍÆ¸7pki«üïßvKRE‡â“ÄM™{äµ+j䵫+ý+Õú–-®ÑîN<ëU¼±Ø^ߦ²ÓžO‘hÏ¥Jõߨ!IªoWJ´çSo ÛcG¸eŽâª– ý×ú5É:«;¿ëœÅgE§Ãþ\t&ìÏñ û«çÏŸ™¹)ßÁجžU°3/lñüEŠÚå5ù;s¥úkcá¬Ê£ .'dÁü…ö†&Í‚ajô¶¨aNš·¸*€…(òvVo—(iQü¿ïZìÜ5.ußž”´EyB]}1 ²f‘Gþæ‚ØušƒÅÍaï‰øcfCÂE¯âE_ƒ®MPµ²*qsÊI§ŒúŒo;ý¹+¢¶†¶‰±âªBQæýrÊ&ÙÛêíòÂ’fÅ{â!læñyy›âŸyǃ~’}Tñ®a¯¬¡´UñþµAQÖòAá鿦nO9eÜýnö±ðÿ¯½$7Õt*.g‰ýQÐüù Óu.Ùû2ç¬,Üh¨¹äSºª\¼=é[‚A3eÎæ 7&ôçªB^ê-¤n– î:÷ÑÊ-²yÚ:ÅFÕ6ùòØå>á1Ë}ië‚^ñL›9¬ Q~¡ºó› ¡«.}">.FÂ×vSºœ{"âwa‹ ×¥lÓª8üï’ÖD­ÊÜ)Ñv|ËZ†Ví”Ùû¾%}•«X˜éáö=¢—öŽY¡x2~mx¯À"A±+'Uù¿XìXvVöçÛ9º{W¥ˆÿ ¬®^¬Ú©>!ÎÃЦ²S0L ]én~Or% "/õ?ô4ÃkAUÞÞö4Ê~UuAþ‰øF_\è|»± Žòö“·¦4æø­ø{į6eì±Óž»>Œm*›”ý„à%NâóàŠÄMçÕ+l®·OvƒCi«ìÕ—kï0®qmƒar›gÑÖ‚ÄÍ{*Ï}ZsQ~9ûhì‡Ò®Û)É 3ë5ãdµv\ À²ô˜³ØÏ+ûˆ¬£ê¼âÊ݆ÂÕQÒö—€ª¥5]Gª寒ìcs~%®c(nÿ“¢vÞB‰î«Yc»Ê:n·jŒ_…5—°(O=©ÙP[zVñÉÜ{ ÕAŸ§Ž»do8¥•èÚ•²šue§Bßë¾-)ø_É[Òëm5)×ôØ])£¼Š&q=‹òj¯¨%~NY‡eG+Ï™£áƒx;’nors×îGæ`Ï]SQt&ô/bˆÛ­¦J:o¯?¡»z[’xhÛ´˜ #ܳÆÝ¿aÿIŠ®ñæÄÀ®à–½"D-õbW¨‹NËß¿·$‰Á ÝÒÜ}Ês‡2 jSIÞɈÿéþ¾x[RÄŸBÕ,½z[Rw0læ¬}/ÿf}‡I÷’ß™c!¨—y 0Ç‚8zpÍ€[Xì#ôŸnÛsÎ’€xs0üþžÃù U;U'»g:Re5ëË N…½gþÞó÷>-i úPµKsÜVÕ¦¼ S£·Í¶’Ä¿u/þN}¬ftÍ$¼k2 ý§ÿ`¸kúôɳ7D¶6hÆ‚¸UòRßç"æ{ʲd­UçŸÝ‹[’*:B> ]\¾²{†¡UºhÁ¢ŠvÅ'¥­a™½¼`c@Õ²ê yå+\²¶åIõmÊ®`ˆÚÖJÐà»ýû¼>ÖSè?5Tü´Ç`Û¸×ÆúUúÚ¤4¤Ú©“‡H“¬ÍÑ@0·Ê;Ûszα€æêNù•kßô_=Á¦ÊsŠÏÄ“›o5 Ï„ÿÉ%kw–¸FÁ1í¤.fMÁ–ÊsòO3âß‘êOèÄHpL?jpJ¯Ïê[ÅmU5Sæl ~m´[ÿ»ù» ˜, ¶‰^0ééîÙc'†­š#Ñ4}q’tSÁܦASGöÍ=æ¿«º³;ÄQuAq¥øŒâO¹ÇÏf5ÎÓï–í3Gÿ¾3ÌQQÜö~ÂÆœö†3êî†6eÐüås³ŽÎþ¯¨U›®ÝNõêêšu“#×¾4pRß;ý{üà¥Â0Gµx+Ò+oÖ8O‹Ý•l/ÆÈ†9à<¡Þî—™qPÞ™wBñËÜãŠ_ö,MÙèPè3F^î-+ñŠ+o—ÿßÍb¡¦+BßXZµ\ªïŽ…î5 ÝÁÑõ³€ÊÅs¥úvåõÁЦ²S7&…¯öéýô ÏÞî“ÙÊZXm2 /¼9®§9FšOmêõ×£¤+ì“§[ÙÅ Àmô‚\í×7j©ì-Õ6Åè”-ŠÑ³Ò=^>kÊB«}„€B/›ŒCòcUn¾åjy{ȇqë³wØë›Õמâ,Õ5«#–V//kS|¤Ù£jtL;j°×·)¯=åÙVyÔ0!d™{ד¹ ¯™uõã3#=r¤ÓbwÅI´§5_…«Á0Ô>Å ñp;f/ö×ÉÝn… Ù¥Âj½„éa3“É$¤n‘×”·+>¼é®Hç‚?Šß˜±Ç9ó¸áoÖõgÔ‘Ë+WVž“].lŠøCØ¢ÒUNéºkƒaFòAÝ8ù'óS¹å7óý'É…ž½žìe€þãdómR¤Úë[Õß p¼8ØêÙ¼“²SÕn²àù¢âJfCôO\²¥óz‡Ê-÷PFòVÝá¼ÆÈß&l4ÖÇoÐ’Í¿@ªëè^Ë`lWMOØ«ë_mw«ÏkMŒxÆÂ3#Ýs&Mž½!Z¢9¥ºQ( À}R(Ì^ì^vVöû›îˆt:âAó,t06_w+D{Z55z{’Tµ5-h^Ùšˆååk%ÚsJל=ÙÞ¥JÍ1qõ •u\]êhïâi·ò¼F{—¦…÷{;`®ûô„})R}‹ú»b`î‚oÎ,áW¦!t®_ Ê€oLž,øåÍšž{<°£ºSqùF‹œó#~º¨v‰½¡YýµXPN [>ÔQ3|¬_ɸÉa%3§F–L ]©˜¾nöäÈ-‰Öñ{4¶©Gµâ~ëØ] #ܳ'Þèù½2©ëãSϽúÄ[3õc'…¯ µSÿÌ[Š…/ƒAš<ÝÊ–EÏÀmñ/ðìíiÿJÒ†UšÀBy±‹›~OÀöŠùÇ7ˆ…˹'fÿF^»¤öëÿ‡_ª=­ž2gsôÀ鳇„l1 ‡L&ñ­~ïy£½Š^é‘;h¤{öØÑÞÅv#Ü2͈ømÏíñþ⇯õÂhŸGëØºxq!õµ « à>òLs·6Öî7W_P|\yNöAÕù§ß ՊϳŽFÿÔ¿ru…½¡åë3 ê©Q›£ÛÆŽêõÄS]oÌŸye¨ðÚh7aÐô9Âð™Á ¤ðÕ‚ö‡¦®xáÍ·ŸxmŒGï×Çy÷üúó4cŽðì+o=a%I2!x©Ü&¥Ay;³ pŒ÷µîWp2à`ÍÅ›ÌVuAñ™ñ`Ò9¯â-…ߌ…&õäÈuƒl¢ÞzmŒ{>Cm…>Clnøg>ñôóæïÏL 3‡A”ÐrÐußê úó}~¤G®õÔ¨­1æ7üw p÷ž(hôß"žö|ãƒÙ䦴ƒñ<‹väË›qõÄÐå!­#½Þw€ÐJð?‘ç^ÞõÑJ’øæÛ²Z¯IÄíR5w p‡”u‘³}žé•wÂcI‹â£ŠÅ'_Ÿi(oúñ@Â9¿òõ¥ß˜YМR“/”œ>»Ÿmjƒ0ÜÅxGÏãñ~]_ì?á©n™ã'G¬èZØllSßm, ÀòÊpzÚ3ÃÕQµ=d캬=qëÓ÷柊øCåù ËÚBþ_úáøw#–U¯pÏ«Ïê^? .6îz¯6¿¡W ¨ö0-¼ï”9›„7'ÞÑs8-\èÙû©oN’õãW1Ó:~wR×Âfc›ê^ÄÁÜ¡ J/—ð…á++Šk¥š}*‰ê`ªsú&£¼¦x®Wá¢'ÃNmê‘D›Ôã ¶Êcæq´kØ$Šã[æ9`jèógL&a¨£úŽþü!Ò$q­Cï¡ÊáB–›ÿ sŒ´ªïU( À]ð0Ìì7%8zò·´)Ã]3' wɘ8ÌÙ8á­™º Ü´ã‡:ŠC=Îü†þí!ÒóHk%‰3È&zÔ+oÙ?-þqÑòízþÑBè6“0`Zèó£< l§Fm“êÎhîu( À]pÓÍ&È¢…·fÍ#Í< Â0g0ÌQ- uTuíV4Ä>E"I¬ìÌ#^l- ´Ž^4ùŽþÌWG: BÏž½†Ø'¯Xä;#é€ò‹ÛœTð˜ê?%HèÕûÂëc<žá–9yÊœMsìÔ'5ÆvÕýŒ…«Á0Ä ƒ Àò µOžx楃¦ÏymŒ_…ÇŒ¤ý)R]³æ^.lþÎ`°O™aeO0–f°mLï·fêGNYn§nTßé‰ÍwuKÁX¦aÎÚ“ÂW'Ûë[h( €åë1rVÞ0ëøÝºu Á×oÔ Ï÷}Ý{ú¥O>ýÒ.$pÿƒ¡Uíš³/3xþü….YÓ»·HÇ cÚQƒgÑÖ‚Y;sï$Œ­jc‹úF±à”q(-eGÚø™»ÝódHõm]á0ʳÀ}¨}êS}†Ú ßCl„çúž{}¸ßÁà˜~F¿!³®èLä¢VçmqL?­í~³ß¢¨\U©Ý£<º¨zÙ·-|–êÚ•ݵ³âLE›ù±³Ê™æøˆY—¿9v}Îvñ§îŒë‚Aé–»=/çxÔ/ÓFýاtGþÕŸƒÁÊ.ái®ðƒA ƒÀêeÕ©Ûõ‡}Ë×”_pL?¥XV¶ª )ò6¥í»6¤ú¥cÚi­oé–"ßòÍEŽiMZ1œ2Nêü+וE.«Z¡®SŸ(:ö™Gb~,›»²J¢=—ú-‹«ÕžEÛó]s÷dÙNi¥ú®Ç•`!ÁpuÝ@w(\b³Sú ½w麧ŒãWoòÏh\së3CÕ,M;8ûgYG¢ê–»-O¢½â]²±8í`Ü;emŠ7‡¾¯ß—ÜâW¾¢Ò1­Qw£­Y¥ú6Uð‚… 7e×y—l-´7´0ÃXV0Üd|±®àêÙ žEu¹ê]ª“™æPHÞª<ž°±`ë̬Cé⬃Kö¡ôÈå•+ãÖl YX»Ø³h‡9$:Roz®‚®]™º]}¼°)øoAókÙi›U#gº À£ ×Ï(Ýóë³’6§íÓìÖœpÍÙ‘k«iKí>Ü­{]‚æ\ª­ú|ŠD{>õ›ë¾}ñ³Oé–Â…ó¥lÓ5¤n×6̘“*ë79‰`ñÐ3s4LŸž°7Á&ùÒøVÆ@óxs’|ðp×ôÖñû´ö†[™=¸­ÓUîy»³=òwæŒõÍž5Ø–[’€GM‘9ìãêtöƶûsÒ³žmU€G7fåÞß`à€` ‚`‚Á€``ÙÁ`÷ÔhŸáëc”W¡0`JˆÐrW°¸`è:‡a·ÎÞpÿ‚a´W‘ç0gíKÃÝ2~ðõñ–«ñé7'ÉŸxsb W°ýÆy }¬¦?9ʳ`†MÊáû “goLš¼töøà%_ã BMŸ=qà´ð\ÀB¼2¡×[3 #¦ÌÙ”pw±pw¡!ÑœJꨴ"M" ÑÃJšÔoBÈò©¾Es‹a üz8OiŒ'ôö†fõCSòP•Ý ÁX'ÁÊ6åù±þÕ>vêÆïŒ©¾Mé–»7˧ly•kΞlñ믾FÓ g4w ©¶V’D‚xØF8z<5I¡‘:èv¥Iõ­*‰®#UªoWÞèÖ¢®`ÈÛ‘ë[¶¨Æ YÝ?ûÕíHŽéÇô^EkJ]²÷g8¦5êì ­ªë£âV‚AiC0À¿À¯Oä Jý¾”³Q«ÊÖTm(õ(Ø“í`lÔÚiÎ}k<8[Ôݳ­ß¸õHjhVÏ*ØXä–»±È³hY¥gáÚ’™Y‡Ònu}ÁX ÊÀWR6ÊVÏ}Gaª:¯ø¬ðtø{™ ñï¨v‡/©]â’½7Ë^ZsýL­ Ç´º€Êyó}JÕ¸åîȵ7´¨¿+ÌÁ4Ô!Õ ð°W™ƒa“l ]ã’ÂT{Inª¹(7•¶†þ=«!á¤ÍÙuîùu9ÝíFC›Ê)ãPšGÞê’ ù…k‚æ×,™™).ŠþŽ`°O™aeO0 k¿ †kFí%ñ£ÜTy.ø?ÙGc¹¼b¥Tæ³mßøZ\»¿!³.ëHôÏf/ÏܳV_ï‘_Ÿe“5 ]Á MžneG0[Huà«©›dë¾-®rSîÉè_V/­‘hÛ•]³Ú]ëœÒu3³Žº?ÖgÌÌ<˜îœq\?{Eɺìc‘¿N;8ç'¾ekË\sÄ…ÐÝ;(9¥5ÿüÁtq¡õuÁ =M0–"ôƒAœm(oùÐPŸØ>geù¿ŠU®9ÛóœÒ÷§T-˜».mOÒÃAÝÞ¤6ý¾ÄvÍî¤ÖÜ‘¿M;˜p>lqÅ s@®]á˜vĹĭMu»ç4Huͪ !«bLW¿õÂÛ'¬$ñ€©!\³!öIÂßrÁÊ.OŸÄuþ‹»·P×'(>-<ü·ôC³<¿`­¸›‘CÚ¸hÙ-wWNÂÆ¬ºÒ³!tŸÕ ¸œ2òºnKÒœOg®‹ý)m÷am_.jV~[4XÇîLåY`Óoœ÷óC”Â+Ãûë2Ø.ö…á.Æ~­#žâ_)Ï ¯—c–ûÕˆ¡Py^ñYå9ùg¥­Š%lRuÊØ‘coøjg#q—£™Y‡ÒR¶”·ý?q-Cu§ârú¡Äó¡‹j–ºçíÍw<N\¿ ÕÕÛNwÍ>8g43§9›Õߘmзªl’)ÇÉæyœÞ/hIîšþX_—îY®ãƒ–¤ ¶mþ²§•]ÿXðàM–¹?㪖ÍY¦Ý»6w{¦‚m‰›swT­+“èÏ~ËŒ@‡Ò%{_fòVýÁÒ³Áÿ˜{I.ÞžôqqKè_’¶Ì*\_<«pEy`uÍb·œW·RcÁ9ã`ú·Ã5k&…¯ 1GÀþ“õ¶ª#ܲÆö.í]$椙d†'ù× €®÷ =ž’üÜëÓ ì4wÚ˜€5²éIÇUݹԞƬkWÎÌ/oý@»'¡MV]½Ø»dî|ïâ¥ÕNÇ _ÜŽ¤ê>oáæC¢iL±²‹Ÿ6hFÔã~C¯×ÇÌ;9r]Â(ÏÂÐaŽšçù× €îÕÎÂi’ºË$ô7èÉñ†ñÖq[uöÆ›/bgÄ“=‹væù–¯/ ^0Qü†ì©ÛU'ôõ1—‚æW,·7Ö§Û»Ov¶×7‰§B«¾kq´DÛ”d~>Öƒmcë`è;T"ôëùäû”Á§E¼ÚRP/þµà¡éõäëBÌrïþ³ÕÊ* WHõ7žaøjˆ³mÊîѪr06kÓuÞ%ëJ]²÷g\;£ žìlo8¥¿oõg†«†9ª»>~d2 .ÿÅ?RÓ×§´ÚiϨïõ,ÃÕ]“à‘ñЏÆcFÁ)ùß»O|–›ŠÎDþ> jÉÜoÆvŸGW0اL·²‹'KðêÛcŸŒ[á¡(oW|*ƒxêsikøûáKÊWÙªßI–Üó[“n C Àr ±ûTÜ ·ˆª rS÷ ƒÂTÑüoõ.ÕÉ€ªåÕ~åkËl5â®ImðꑸÆÕ¹¼­{†A5¦òö OGü!ûXÔ/#—W¬rL?®¿ßÑ@0æÕ!CŸHXãîe†O®C׸$Þž$7ͽ(7e‰û¡{Þ¶¼û½¦`°Þ¯ö†9Z þ…ÂH×ÂëA×}ß/Ï«oò¿ù×ÅÂ5CŒ†‚¦9¿ ¬^2W¢;—J0ß³`4cPog¥ë›æ/{¦nV±+º¾çã%D/ xS['k¸q0(L%­¡‹Z]¼ÁFÕ™L0ß§`x¥w©Šáoê÷ønKßÌß!e³L˜à?^ðÌòy2q­_@q³âo7 qT]úÄx ©Ã³pKTÿvMê iòt+Û8‚xžèÛ»‡cü¨aÿ®<§0å“¿›¸.0fbà„~²bשiõòÓ7‹…«³ åíA%oM¯·UŸU À÷(âG 5Ã?¿ØéJÙYù_‹Nv”´Ê~Ruþ«Ý‘n6j.ÊL†©-¶šFíýÚ-‰`r0\»uê­„ÂW?/7e‰ýѬ EÝù‚øÃíŽî Cÿ¿1{§cÚQƒ­º=UªoW Áðå¬DIKØ_ŒRÎF¯.Úèš³7ËN{ïN&€G8®Î4Ô^’™ÊÛƒÿ•~8ábIJòU33¦KõðØõ'A‹ëJZCþ».«½þ”¸ZI0Ã5CnÊ=9û7AóÍ—è˜a†oFÃý¾”÷üº‰î\*Á ×­k(h /|IùJãa£DwF}'kà{ â¨:¯ø$çxäoÒÆwÆ®ËÙá–·?óv·]%€ïi0\=ÜMiâ;½Š·Ht©@0\w{RqsØûÑk 7¹dȰ7´Þ^0ا̰²‹'€ïc0\Å-¡ÕíKiö-ÝX,Õ· ÁðÍ-Wû“Ú=‹¶H´bœÑÜlÆ`«`P˜ª.(>K;˜x>lqáz×Ü-ùöÆ3j‚°°`(k ü[õŧ×Nŧ5ŠÏïw4˜ÿ¬ËªÑùÛó¸% ° ½ûö¦‡½ýròÆÀÒÔ-òšÔ­Š/†¼ÚüõBã>Y냘iÈl˜ýK¯âº\©¾MI0 Säㄈù½"ÉÍCñÅ÷òʘÕ'n¥OyÍÅû YG¢~î]B0 w½ûKæ`({Áw2ü÷>e;òov˜Á<¦ÁPÞôï°Å•+ŒMZ‚ ¾14»“[ÜrfØÚ€`øú:†9¿ð*Þ›s£u ð¸ƒùÏPíRtÍ9œÎ @0|í,ù•°ÅÕËŒ§5¬a†ëFáéÐ÷ý*6–Jõßqp›Cê +IÁž½¼lcÚ©žÁ@0c0\R˜2ÇüÈ«hgÞÍnG"€Ç,Ì¿÷JÑé°?‡/©ZÑ=»pãÛ‘à1 †¬£Ñ? ž¿xþwÝŠD0S0\R˜JZB>[<±Dתú®™‚°@>9ž/'¬ñ›wïoE’_ÑîQ6yäïÍ–êÛ•· `aäe¾¯$oXu¯ƒ¡èLè_B/X(Õ·ªn5ÀÒ‚¡ô¾ÃÃþÄsžÅâ®HJ‚ ¾\»PÐþqvÁÞТ¾X €ï{0¼#3)wè;gN»µ ðCE‡âã9+«VÙªÛSo7à{ µâíH§Âß ^°¬ÖN{îNƒ!y¨ƒÒ ‰ð½†‹Š+â‰Îæ—³Íþlîª*‰Ž`y²bß>IëüW_P\©îü¶óWJÏXz6äb\û½ª AŸ6Eü!í`ÂÝޔ攭†ƒòÚ%µNé'u·zPÁX0›9ŽOFÌórN? «Ë9&;T|&ðG¥­!Twʯ˜#â³ìc1? _’·1nƒî@ASØ{5å&sX\6Äê:í1ï’-EN:gópLkÒÚZï(À œ1Ixyø‹=^zëùÞÏõyúɉ²Éòª¼º½ªSê:ÝQïÒÅŽi't®Ù;sæ¬,[“q(æÇúúø Ë+WÎÌl0ÚëÛ”w`áz¿Ò»kˆFzä³G#Ѷª¤úSÚ¯^kWЧ6»ålËsËÙ‘k§=Ÿr§· À£©ÇÈY¹Ã¬ãêtRs ¸d×gz­/¹ö<ñó«_Kõ-j÷¼¹®9õ™Ò{4Ó@0H0¸æìÎö.YY.îx$Ñu¤v‡ÂÕY…6•æ|Jð‚òÕµ Å ‚xL‚¡; ZÕÆÓ‚=Ù²š5âG1 lÕR¤úÓ—ìƒéþË«¼ŠW—9u÷â%‚x‚ÁØÖ5‹ ÑžVǬÍßRØò—̆øw7åîŒZU¾&e{z}ÚÁ䶬£s~9gUé:uG*3 Àc gUvšŽÔÙ+ª—‹[­Ö^’›*Ï+>+oúOõùñëš‹¦”mY»§§v¤ Àc ⺗ìCéâ«Uä—k/)Ls/}ux[å9Ù儹;f( à± †îY†ó)¡‹j–4…ü¥öÒµ'AËMÙÇ¢æ_¹ªB\M0a0ˆ»$ù•o,É8ÿNÍÅî[‘ÄÛ’òCßKÜlØ?3«>ãÚ­Wï>RÍÁ@0B0tÝš¤kUÍ[ €` ‚`‚ €`  ºN0Ä Á@0Á @0 Á@0 t¥`ƒÁ›`‚ €` ‚`‚Àó «ŒÁPB0Á @0 Á@0Á€`@0 €î®wÿa¢WßÞ±Ãø3§-."€€‰q¼ÔÑcЗ¾Ó}+ +ï¨;mq±Ý i•í ɪŽÒ*óðñv:‚èªL¦ûV8Ì‹?’j«ªÖÚ*¯vèkêUÏ$ c‚ÁL²Bl¹ä´Ö^ßl¼ÐnêàqMñlƒ¡Ê ¥ðTÁtZk§Æøð|ƒXkšãÅvƒ’`ðM0èZäÎé'Ò/]Sá–u(S¬%‚á[Áp*uqÑ–"·¬“i“éþËÄóO¨í´ r±¦Qf«nJ>Š5õò»Ç3ÛO`ž±â¤ñ“Ü3œ¦z8LñÈ¿oL5ŽI®©®óâ'=ÓǤ ÀoèŒÅ&ÃÍ{Œ°~èèùj¿~Qû"lÕµj‚À½ú ‚`‚ ž L àÑ ›í/c›(šèšf©<ºl0ƒÁ‡`ÉÛÓ=MFX¿4Ú*¶çãŒWû½ÝŸ`^pÃ-‚ߘࢷ2õ)_hêS¶àQÇTÏÏyñG—t¹ž àѰ”½m°-ÀVs].Ö\“‰µr±¶á‘†®QÑeb`ÝhËQ¢Én®¢…†)~Eú€ë–»fͰÕ4(Äšë2[a¨Û?ŠµÍÆ8hêZq@0ïW­ûDǼi2Ùeü릮“\õqQÑ›â/ÈöŶ$íI¬Þl8´ªxcô–¼]q;²÷Em*Ø.©¬Zîœ~<ÍNW¯|!‚Á»¸Oÿ3EýGÌúÁÇ#çˆú™Ì‰€çÏ’¾¢qsG½¿ÙsAÆyÿKùµ~?Í«üuA}ðŸô§"–´;ºE*è×9WCþPÒøqÉõÀOKZ‚>^Úú§ì«‘¿LØ•zÔ=ûxzû‡® 3ƒÖ%ŽsPÌmkúø#Ît´Uœé(ËxÓ‘ó…‘Ðöë¶Ï?òŸ™>ÄtÑÆÃa €ç,$½–ìXì—}IòïïH[+$m-½.ý<åtÔ¿EoÑœT޽QØø‘ðù;cÙ»ÒÖ¥ÓŸŒz/i·üÒâ¢mE¶ê–»¦*u­h«k¶ªš%Æ‘ô¸ÃZQŸh£¼²Ä)å„Ú%ýˆÖ-ó°ÎÑpJi£¬N²QÖ%~ïÏP×$Y&RNrKŸa<=9#ð\IÞéi™}YòÛ»ƒÀ·KZ¤Ÿ—¶üÓøëÝýµ;£ì¦ôË¢kŸ¤‹þYÂNíiÿÊU+|ʶ»eO·Ó5*ï_ßФbB¬mùÖZˆ¶Èдt¹5b­ðw­S-.ÞQ˜°3gŸö¸¼Öp:ézêÙøwÔÇ”WÂ×—opÍ:“Úþ}ßõ³šÖ² ºÉ ²f xn„¯ô>ôŒÛèZÒüà(x”Qñޤµ¨IòyÎÕßåT‡ÿFw"±Ù§ts‰X{Mq'lŒq`£ªS:§Oó,ÜQ(Y¶¶2`yÕrIåÚJ¿²e‹‹·-ÈÙŸ-|p§Âx-¿û‚úù›ÆÔ$wN¿ Þ\°#çjÄ•ÝÜ®xÇ¿uÙ»þ­•Æ%-’ÏSÏFý\ºlÕJ!Œ¾ïçYË/ê&/Ì&ðìye.4þ÷Uc0xLÞé“YPëw³üÖ“ÃÝÓ”„QzÝÿ¶þdüÍØ­Ù{c¶äíŒÝ–³G¶Ïp2õlÒõ¬Ë±?Ë­‰üUA}Øï êCÿ`üøA~]øçÕFü:§:ú?RÎ,iŽß‘y`aîÞ\;mƒÒ^Qëœ~$ýy‹ánˆ{ö‰ôø)GSÎ$ÞPÔŸMÜyHyHsaÉžô#Q›K¶®\»|Aް¶£IN0 ËpV¸šøæ.˜´}±¾°AòÑÓ†Â}ãaºRÀç%-Ÿ”´}Rr=𓲟 w"–½{÷Þó{IÛÝŠÒëϽù_Ñ›òvÚikT†ËÚθC þjƃǶêZÕÌÀ5ÒÑÖ±C_é;ФÏÀqœ¬xf^™j32|åâðÔÓ’÷îK;ûž°. rcÉ&¿òÕËBªÊÖ ö‰»²÷/Ù›qX~ÐpZ¶?åDä¦â-+«V®\µÒ»ds±[ÖÁ,÷œýÙáëË6¨Æ·¤ž ÿÏŒ ¿”íO®ñÈ?ã˜rÆ :’xM˜6ugTù-ÿÖ¥A;úßùu!Ì« û]nuÄû9Æ‘_ú‡Üš°ßiŽ+¯Äl-Ü´jE•{öÁ,keƒñ"¿íîB‡Åƒ­êª1Öú²Œ"êу=ðlŒ·75±‰²zË#ÕÕ1q«÷º¢kÒ¿?S“$­e7¤_äV‡þN¶/þZNuЇ%-Ÿ wDŒŸÿ²ü–ñë7%ÿ*j ú¨°!ôCaä×Eü&§:ú?…Qt-ø/Æïû\yxI½¤²²Êké®ÇÔjcêE]àÊåUBýúõÞýfáöƒ†ÅÍŸ6„üOÎÕ¨ÿL9›x3~gÚ÷œ½¹vº†ºÓФ°Q^QÎV£!j`ž¯˜Œ³WpÂà‡5GbõjÔê…’ÜjÿŸ—4K>(¿)ýòy\Ë \¨—´~š~!ôý¢&é߸æâ[öß, ¾óyaWjánü€æ¼GÁþ{C­ÊÁp^¯9–Ð"Üex¬¿Ó]¯óÕíUÙš±AΡLçô‹:;]½òQžŒôÝÑpUiæ·ÌÔü¨·„ã5|¶”“?ŒE™^“ r™†S’[ÏëÂç»ÆmᱯO÷è×ö»ÚK®ÉökϪ&47ýMøÙ2…êFÀgõ!6œJ¸¾®x“Cʃº}-Å“=…©Ia«¬VL÷-÷5?¢-Oqåä@ç³³{YZä4[wÌkMA½ô¯Ïy,tx|T¶OCºÝY?éµà¿(Ëj‚VU®qI?’n«Ö:|ó„¦ÇÂô¤é¾‹G˜½õæ˜ù¬i@ç0[l&òÊt%†šÏê½fRXÐÍbá‡|,lkA}Ð_RÎÄýH¶?夰£µƒá’VxŠÓㆃµü¢rš×RQó#_åL@‡š¶ÐT䦲2ñL·ëå›çn&Û+MÑ“VèOø sqßÙk0„…ÙÒ/ êCo8½¤9l]ÉFçô³†Ç[ãШ˜º9i´ul?Îht(3¯=šØ\Pô¿ß5ý«ôzà?r®ÿ±¨)àÓÝ…(5FEæÅÈÿˆÜ˜¹×-ë`æœð-I£­t’— ùæ:”í^¼ºâ–„)I<„MåÒÎǿ떹/;rCގ†€¿µí6ýŽ´µÂøµŠw¾ï®DÛæt_ ßW~S"ü¼/³.…ÿ*hUñç´©Æ`XB0 Ó´¶¶Š,¤3ûÄmtO(¹.ùŒ‹üŽž†$½Wüaø†üí rög«Êk êC?ȼý awéôóq?YÚòçò[_>èÏ/m”~’r&ì—¢þÝp*ú½%{WV®vJ»¢³Q\RšIV†Ž²ŒêË™ €N!-òè¿É;¼ Núá÷ýk7ãA üËÿí’ëÒ/î]£ ÜI(i‘~¦:×âY¸¹X¬i’;.èœÓާ íõ J[M2tÍÒÍùu!\öcIÛ´£{†áTÄÏ= wˆ55*{]ÚNרšŸx"ÙL²ÂcäÜaƒ&9ôàL@§Yæózüfßò¢kÒO€Çãûö©þdÄ/´ÇÞv>ô×B S‡JZþ™}%ò—ŠCÚsþå›JíõÂ…þ=¾y4ªðÄ#—Œãi²ý†SÙW#~¹ôZàGå_M vÜμö~üvåY÷œ£vºf¹­ªZ5'|Gä䙿&ˆ{K7·ŠNs" s¸iÝ{ø,#ßë•RtMò)!ðxÃÿ̼ú›Œ aïËö'ÕEl(Û³¥`gĆ’MÞ%;  —5¶šë²ïÚ±YبMØåÙ»xGapUÕJÍ1YíÒÆÀ–^“|¦9ösIeÁFÃEeÒiùtÿåžclG]á³%¢W^{ƒ“Ç#m¡hª»EÏ€"÷ÅÙW$ïOv§AXÀ\ØügÅ!ùÕØmi‡mTµÊöPxÀÍŠ­°»óu™µòF²Kú™¿ò eÑ›3÷I—/«rJ=œf¹=nÒ‚L‹!f^¯'\i žæÎÉ €Î7Õ}†( ÄYä$sé·Ásé÷íÀøÞxøW~}ØïýÊW-k[)î‡&¹0ìõuj+Ù9ùt¿¾£mâG¼þöÔ—¬’ω†˜.âÄÀ£×àÁ&îjû~IÛý¼ '|¯rÑÿô£èZàÇ ;u'­-ÉO ±¶A5?þhÂT|ûáæýú ›.š°ZÔoø NZüpü c¡ >ääݚ3¡kŠ7ÅmלJ9úÿ ¤ (íø; Ò•Þü{Ö•ˆÿŠÙ’z8l]ÑfÅ!Õ¥ô 1?öUP•Õ9¥žJùþ…ÏmS”óŽ%›ú”9 Ÿð–ñИ¼=Ý“ÏÖ›h×_ô¢qöÓzJòÅoúäºOØâ¥-¨ó¯¨Qòañ5é_ÿTÒ,ý´ì†ôvq³ä#ãï?(º&|Nò‘ñ¢¹Ó.þ…MË*Ô>„ÅØå7¥ÿ*¿%ü ¾¤µýãÝßÛ¶oÁmÝÉäFkåEMÌ–ü… -»)ýòÞï}Ú¿Oéõ€æÕ…~ ;¹¤)fkΞEùûr Â> JÇ”jµsú½[Öá ·Ìcéß{WAߤ°U×(Í#÷ÄLZ9û­±V½…ã2`¢=''ž&‹B+ˆv¬µ¶¶Š,Ãç¿â®uœQå”´ÝIÄ*ï0å>ÿ¥ºc~‡“wùhƒ+{E®ö MÚî­Ë¯•¼×IÓŠnÔ‡þ!ãbÜã=éäkª£ªËú“IM™—¢‘}%ì7ß|¿¤ÕŸçÖýOâný [õ­æ˜òjÅ;þ.ÒVc,}‘WþÛ´ó‰·w§÷-[_f¯¯SÙéO¶°¹-”Öò‹ŠYÁÆ;ªÇõèÙë%áx¼1Ò‚“Ï/‹ ¹"Wµ£È ¢Äíþ¢pãG‹`ÛÞV‘âáÆ/÷*_,Ѝò5þ²OOõA]aƒäãeïv섌‹Qÿ¸råJ{ý9cÊiƒ•âšÜFÝ(wÍ8š¾>oGnMØï„iQ·¤·óëBþ ; ?¼ºbíââ-EùÛ ÓÎÅþ¤ýŽÀÓþ]$­Y—ÃÞ—Ôœ÷+ßPn¯»¨µQ =m–?q(´¥eâÉäé¾îclâ ¡tY ."•£h²ëô¯?7ÎIl’´Ã/"÷ªô å·¾L=÷®oÙº aä¶ùÿ__œ7ÉS.kÃ×çìÌ« ú“05(åLü¤ËÖ,³×_ÑØ¨n&Û¨¯É£6l/lú¿§ü;Ý.½!ý\yXVãS²¡ÌÁpQ+Ö´Èu#¶ïÞÙ¹^57fÜä…Y–ÃgK^g¯àÀ Å$°ÄyXØŠ…ái§}ªËoI¿èˆX(»ø”³±?ñ(Ø—+Ö>lªO£Â£`O^ÂNå¹ÄÝ©GݲN¦‰5×ÎéçõË×,“íSŸÏ¹þþ½Ð Sœî<1IøXv3ðŸ%-AŸ”^úÄøñãò›_ÜùZéÀd\Œþyì¶Ìý®'RÅ!Zž>„» 6Ê«ÊÙ¡[CÆÙɧ œäðò›xÎ&¼pzÊ÷x$f_ö_XýÔ±ðŽ´5·&ü7qÛ3ºfžL³Ó~ß…wƒÒ!åŠÆÁP§ö9ð-Û\¢;³¨)ð£Šw¾¼³Pú«ÅÑ·‹›ƒþšv.ZxrчKƒÿ×p:ñ†ñµøW¬^æ_QµÜ¯lu¥òˆ¢ºäzÀ?².Gþ2rSÞN·ìiíkž:Úž‚d§mTZ-9+›!Yå5Â"xØkƒ&™ŒšΙ€“´xѤJoÅ>ß‚¼jÉÿ+¿ùÍ]†e_íCÐþ(SIÛ¢á‡MþE?çjøoü+×U<κ°†@¬­WJ—¯Y–v>îÝò›’Ý™ÒdŒß¦œI¸%,ŽN9ûãÈù;½‹WWÈö«.DoÎßá`¸¤½?J.蔇՗‚«*Ö:®j:&ÚŸ‚$ÖÔ)çÅN˜¶¸HÎë³.‡ÿJ¸cð¨Áж»óé%Í6êZ¥­æ†ÌV}]ö X°×_ÑØéŸôéI ùEÅtßrÿÑÖ±ÃÿÛ&'9Šz¿5Šø.clâG›Gî í¨`Ⱦökc0Ü~´…ÎÂt$IkÚù¸Ÿ8¥žJyغ[u‹,`EÉ:IEÙ{]Ú^_¯6ŽBà{Ÿ‚¤©WÎO8±dò‚Lçáæý´?k½9f>xãìdcÍ#÷„wL0\Ö¦žþ·G¹Ã`üžÖâæ ¿5ÿ%ûJä­*_g«î.esæÅVvL0\S¸dœ5d]ûÍ·>¿#„‚ô³üºÐÔG—4DoI=d£®Svl04)æ„mKï¨2{mðÄ—ÿ_¢×‡šr€€§aæ¿ÜÒ2ñ¤Z˜÷ßîÂÂgÕ‘% å·¤_Þ5 éKÃ騟zì(tL©U;êT±)ÛìMqSfÏa$LE25?B4h¢xB/Í®¶³–×uT0;•.[VUzý›u e7ÿ)? ¼Ø);7ßs—Á2é”rVȦà)yæoO÷xóÿZ[E£­c9ÒÀã3yufÐ:å]Çí¬Ü¨Xs$3¿.øÏ_=>õv~]ØÞ%K;?ÚŸ$Ö6ªæ'œÏÛ0ÞI;Ë /s¬€ÇÔwð¤~³‚7zˆ5õšŽ¼hwË:“’}%ì·e7>˸õ‹Õ•kít3 é»ÂÁV]«šîW1Õ#¯GxL': š²ÅÇN×Ôaóbm³Ü%ãlJâ.õåayõ¢ü9vºå wÝí˜PcêSJ0kØ,ÿ¡s¶Øë›U ׋ vå{-]Uéš¹+ÏÁpEólBá›Ç¬Î €'3Ú*fÔœðí!²i›¾AéSº¦2z³ö¸gá†{]­ªm!µ¾‰`º¢ñÊqæ;#;*/Ý\ìS²µX˜‚$ÖÔ+æÆì—YDï“ Sƒ ‹™ä–:ÉB†|‚Áà1Mó,$€î*âd«(æR«èBk«¨Å8šïWcä¼°ÞÓý*  ;e-ŒQS<ò¦MõZjz÷˜& ïâÙ³B6ÆØé Û™è–n2É=Ãg^Üa¥eÒIõýã”ÚFyEu' ™â‘o2Õ³Ð[¬¾*·×_SÚé›÷ ]“‚`º¡ùÑ«Xudò^Õ©5¥SªÕwÇÁƒÁt^Ù±&Þy1)y5¡ï+Ëk\2.êï ±¶Yn­l–ÙjšåИúd™L÷Ëò÷/¯¬\˜»?Û^_¯¼;„ß{.Ý“µ¹h«WÑ®‚èF„5 S< ½m”µÉ÷®U†cêUMÔ¦¬= ÇnM=L0Ý,„E϶ªjÙƒÖ+´Ýa(Ü—¹©t“×Ò=ù@0<` C‹LÌ€`à)I‚Á€`@0  ^(“æ˜LY”çi-»d dc8Ü3j’ÅêZ9ÁtC#æ†Gè„ñŽ*‹ Nšy÷މ®)Ö3ׯÙi  »bº°m á-:Óç¾1uQ^3ÿå!÷ÃN!^g/uö9/\4Â"˜ƒt×”3VÇL÷)íÃѺL0ü@Ãøº3ªbL €` €® }¦û- 'ÜgŠg[0D ¾eÐ$'Ñ4¯¥½Íw¼>ÔT4h²“hfðZѨùo̬Œ&ˆ^2E4É-]dÒó—GYÆL÷¯rTöLb`ž/¯ôøÒëøñ³ƒË.Ê29§îͶÓ?£X €çG¿á3zMtMu{0ÖVyNã¹tCiPUÎv{Ãypñn¯oPÚêTm›¶ @÷2`¼­pwÁÌfþ˿هÁ .gRBÖnؘ¹wqñº2Ç”Óç´©vºF‚èN¦y-‚!êÞÛìõu*§´‹:Ç”jÍ‚œƒY+ò¶zì(k›å»ø·×ÕªìuÂS–à…0Õ«ðÁ <©=šä†«¯¥›Š…µ ¶š¦ƒXÛ pL=™â˜z^ÿXS— ëƒƒá¼Þ-kOŽ®VÅcU‚á[òŽ)unÙû² €`¸/„iEßµ^`ºC0xô1ó[y0ü@ƒ`žã`ðÈïmæ¿<„`ÐéÁÐ6éq¦2 @÷!æîÍuÏÞ“k§«Q·¾‘`c0h®Ë¼‹6”Ê$ׄ¬^Qe¥¨U:¦Ks0\Ñ=‰Û€n J;ÝeîŠú©b‚`^¼`°Q·È–¯X•°SuNºlõ2a‚°È¹íëú:•ƒ¡Fm¯oT @7 !\ÒO§ÄmËÜŸr&ê§ñ;38§Ÿ3ØjšånYG2¯©pÏ>”e¯¯W @7 †öѤp0\ÑDn(Þ¢>šØœ¼_q9hÕŠUŽ©uÂBg÷ìݹN©§Rº~`^ä`øê)Hê&ù¼ý9 »Ò+%5„­ËÛá’q&ÅN_­¶×ת¸Ãtã`hŸ¢Ô"kë•>%ÛŠü+ÖVº¤ŸMùzMÁtï`¸3EÉVÓ"³U·ÈÄÚ&ž’ O9€` ‚`‚ €`  Ïq0ˆµ J[UqTk?O0Ý9ìõÍ óˆ] Så9O^5{ò‚ì9“fÏç œg½/^¬®S @÷ åìMQãìe£?¾‡I—Û†ñ×}Ì#w‡Ûªj4Ѓ!tsägíÈ7Ç̽5ÞF4`¼­ðR½,¢ö @w†Y!£GΘÒgÀØ×û™ÒO/÷yc yÄŽ([uúÛÆ ÒU1¦Þ%𢃾Ia¹äŒÌ"zo„EÔÞ ;à ÁVÉge‚軿_X =eQîÂqöò^ ๠†…X]'·U×Ê„ñ”!<I%ÖÔ«¿ÚáηbÁøyå iUøXñ’CL™p4€ç4l•WeÓý—‡NrK·žêY°È*ùœ®“÷`PšGîLk/ûúÛÓz ŸÈÁž×`°Q^Iž¼0Û³ÿÈÙoŒ±‰Ÿa™xÒÐi± oRÌO8.Ÿè–j1Ü<ðŽðœƒ­ºVnµ'vNØVŸ9á;„€PwV0XËΫ¦zºŽ˜ÚÛ àyáiEmk ´B(¨ìtM bMÒÌEÀ(ËèÆ—gÝÐ%‚¡£ž’ô]CÛ¨œ²9v¼ƒräà)®&¯ dž¶u ʹ±e]SÌú 3ë9Â<ˆ7 ¾Þ›Ai|-»‘!½yׂáë!, žîW¹xä¼°þ#-‚yÓ‚á®u ÁëÃÇÚ-!b‘3@0|{s¶Ý‰]S&™¾°ÇkÇ󆃰n¡Y1?á„bŠGžå›£ç¾:r^(o6@0´/r¶–]P™ú”/5?²?ï2@0|=lÕµê™ëG[Å 5?‚7 ¾Y·0'bGÌgíÄž½^{‰w ¾Âæl‡dSåÎ2mAÏþÃgðÃ5…½¾Ya•|ViêSîŠÎÑ÷sªcaýœ£#ÿ6²3vhÀÂue#Ÿ[²¦ßüís®K4¸qÁÌ«Êí1sOAh{b_qù¨¿·~þ¦Î±÷s.]aè3÷ÍY£×”­²xí’ì­ù»ç–øû)›çl ÆË£©à PKƒáâþS‘>sß(zjÉš¥ÝgìË¿2‚ñªÜ½5sòæ™oä¼–stò¦¼Ýƒm* ÆO[a€Ú ¿ùC{ ~64°dcIÁž©ï罓]9°tó‚`üŒ= *ÃÉc±1k­ mÏ96üÙeϧçˆ|å·" ¨ùÁÚÃÐ¥`O~ÞîœÓE‡FþÕˆUÏ®ºtƒ`€: ©ÉHžŒ*}eþÓK_\Ücæþü«y:Rêg®ÉS”Ôì`ø0ñªT\ÅÏž÷˜¹¯ [ád ^q•qðq!àFC~óŽ9ò‚‰OÖöe§WÑŽ¢Ø[‘c‰]¹ÇǾX²±[ááÄo Œô¼Ãñ@ìSžº$àúC“nÓ›§ÇvÌ´hCY¯9oÎúÌáÿ-V :ǪrS`í;o˼&ÿlaňJ¾3á¿ôž³{Ægm’î’<:lùê剷#ÇF=¿ä…N‘ÔJÆ%¯E0Àõ†¦=b-†-+Y?ûèè?mÏÛÓ)Zúâ±P•;°dÓÂÐöäÞ‘Ï-[ݵàPb`É«óF>¿jÕÅ/•u)8û¬ßí’,6fÍü Oûåԭω¿:1zMÙúV=\ÿ`x°[~óþÅ«—…ßÈ=:zMé†@ü‹C ~&”õBɆ¹åY•³-¾¿ç¬=©³:GÏå¤þü¼ßí1ó@2çµèÃÿqê–ì#sü»i¯ä½“Z© pƒ‚á¡Í;…öæw~4ž‘"úe÷-t)8œTº¡ôGE»f¤N޾Úßë6ýHbtulDvDõŸ¿qaŸâ×gw+<˜tKÜÈ`èYмㅧ$]§Ø>÷±­‘ŒägD†`€ ¿ÍcU¯ÍT:‡çmn~/ѧøµâŒdyL0€`¸$NDŸy5±·¸|ì/2W,î·Ú3! vCFòddôšy›òvOùqÿ…//üÌý ‚êb0œŠŒZ½xmdGì½¥‚Ãe·$ŒNÞ4ýÍÒ3Ã9êùR§;  ­0ŒXUúbiÕˆÿ“³-z°ûŒCy‚ÃSîS¼­8üF½Y2eóô73’Ç£ÁDe®`€: ©9é3÷Õ¹E‡ÇþiáþqôôÒµK{ÌÜŸ/ fC‹N¡ÉŒdUõ‡òªÈW<=-iPéºE“^Žîs,ë/³VÏ}9?›ž¨ wŠž uŠT…>q¸›`€ë®~ã@öíFmx¦Íø×&å3aû3ÁøÉö3d>»rUÞîìªä;~6~ýüÍ=gí-˜´qö¶ìWgììZp )àÆªw_«¡·?ü£Âö.ºï«œGzÏjд{^·@´ü™# ¯÷_°®lö‘‘{kÊÙþó_››ÿîØ?,:4æÏºÏØ9S0À öƒ6#Òí[œÖ|À¯tÚMÞ‘Ö¨ã¤ÖÕÁ}ù£VËcƒJ_.²ø…¥á¡c9ÛrŽ}±èÕ 7- PGÜß~\½Æ¦´¹2RLT„—½TZ|lôŸÏ>:úóŽø‡Ø[9'S+‚êx0\\i8°pcÉÀÒõ¥S_)Ü9båŠçÒ/}ܪ`€º WªrSÓ9v6ŒŸÉuK†ßö¤ç–w7MwA@0\ ÓÞ™Ú´[¢m½[n­ïŠ€`¸l±ã‘'ÇmÍjÔqâçÏŸwQ@0\:•áΑ#‘V£6 «þï}ïOŽpa@0\vkR¸søPøñÌÕƒ´Îüî]÷·uq@0\¾Ÿ¡cè@îcO?û£»›f|3s£Û“@0\>©MСæƒÊÒïn¸í¾ÇŸr‘ îCe8? ÄΆRÿàk‘vSÞœöhßâvw?øoÜó u/*ÃÝ å ]öâ’Ìk—f$Ëc}/Qm;éIÿhúcõëßr«+ u,ñ3¡Á‹6/,Ø;þ¿˜ô³Þs^›“:ú£¢ã'¢OŽ{e\“n±¦Õÿ«z®6Ô¡`&N‡–¾Tš½5çèÄ—fnëV¸?™žW¹ôÉIXy´Õ¨õ#ì’ÛðŽß{ Þmßúž‹µ=‚‰ÊÜî3öd¿š¿{αÑ1esüÝñë‹_ÉZ½tM ~êòÇ­FŽF¾æ©´Íº×€: ©ý ÉãÑ¡ËW/Ÿ²¥pç„—fn/:<ú‰ÝáéyÕßϽôg;…Fº²Ï÷|W“n1jw0\ºÚP•ÛsÖÞ‚Ì+WYüRY ~i,|¼ÒÐ!{O¸ÅàÅ]¶ý»÷4ëéâ@]†¯z&té¦çOFCU¤ýÔ]¡fýçw¼çÑ·펻¼P7‚áª'ÚvÒŽìGz=~Çݿ֨Ó$oÔ¥`H­2¤V.ßÇpÉ$*"OŽ}eòC= þÞãƒê÷á®Þ¨Áp2ÒwÞ΢Áe[t/|/ïãÓŸ? ­²^Û¤[¬ñíw7®ï€Z ©•…3Þ™~#vpÆÁ±ÅŸ1sš7ë7¯yãÎSšßÛ¼ÏÞ ¨5ÁðÁcT㕹©ÜzÎÚ5cÊæ;";"‡û/xu^»©{#-ŸZÚù*_†Û‘ öCe¸kÁ±ø ÒÍ ²^([7tyéÚ~ó6”Dߌ-<0å÷Ÿ^¶vi»)û" ]q!nÿöý¿qnûÆ½Þ ¸Ùƒ!µ±¹sôýœ3÷Œ];s[öÖèþá+®KÏ;ïYôöŒ>s_+NOžŠvÈ~'úa0u"NFú/xmîäMEÛÆ¬-ÙЭp×ô`¢<ˆW|´éùÂIÏɪ°`€: Áêè]¼{FdgèxI刚uhÂö.~µøB \ùóÉJÁu)RÓ%¿<6hÑú²‰g¾>öÅâ-=fì)øÔƒÙÔ½`HÅA꜅I/ÏØQtxô/²V—¬ÆÏ„†‹Á0ýpbôšEëâ»ÂåÃV<·Â-I .‹†`üT8˜8Ä+s?õgÔÕ`ø(r¯Øî;÷Ù™+V¬ê3wÇìöÓö¨»ÁpåªÃñè”ͳ·Ï=>üNÛ:sç“÷…ú¬`Áp:œº=iÈâ—Ê&oš±ã©%µ›º7b…ÃÇóáÁmyn‹  Ÿ»é¹I×hZÓÉÏ&Ýâi ZK«W¿¾7jk0d䟈v~4Þ%ÿT´Cö»Ñ–O¯6h3âÖ†íÇþƹ·EŸúõo¹Åµ1‚ñS‘‘Ï/_Ù:>|åªUrކ[emÓ|`I¯ƒ÷þ¼i6`a¿û;Œ¿¿^ýz– öCe8#y$>eóœmEGÆþéÄó¶tŠœÍIOT„«'÷s'¯"·cÎþ¼GzÍz¢úåÜê€Z ÎaÈí9ëÝé¾¼°ûŒ}ùWžÓðy±Ñ)ç@ò‘Þ³Z ¨¥Áða4gr¯>Ô™`ø¢·3  ‚ƒ`Á @0 ×8*ÃÁDUnj†Ë ëô£ñþ ^ŸÓwî΢ŒäɈ`€›;ž¼VÁˆŸ =µôÅ%{Çÿ<þö3§zÎzsæç¯4¨±L«×¨Ó¤k¶ÂÐ9v6Ôoþö99ÛòwOÙ2{[÷{ ÜdînH¶á|Ú·<þ;Íúψ•‡¾ä­H¹] %Ƭ-[?íÕéo÷·e^ vêÂéÏnI€›Ðw7®ÿ`—p»Ù{¦¥'*¾ÔÊB0q&7uûQtgnyÑ‘16ò¹e«;ÇÞϱénBœOkØnt“6·O ÆO~é[‘2’'¢ƒË6–Œ[7{ëÐe+VuÉ?OÅ€`€›Ìwè˜voËþß}bä‹#±ò/ ©= Ý ÷æç¾;P|lÄß]»pcçèÕ¬.¨q¾õƒ'îh1xñ€Î‘#¹×êQªÉãÑ¡Ë^\2aÂMýæ¿>çêÎ` Pc|ãû-Òn¿«Aý‡{ÍtxfÏ3鉊ȵ<µ9?ê=—sõ±  &©×¸óÔ–í&¿99˜8uMcáˬN¸Á¶›vßCîk=fÓ˜@¬¼†Ä‚`€îŽïÜŸvo‹~ßüá°•C:‡ç~ÚÓ‹ñ‹ÞÔ1_»ý®ßiÖ~·Ž9ûSO.Š|ò‘¨§"ý¬]œ‘ÜŸ¼¸ÿ R0@mwë׿‘ö;ÖkÚ-޺ݔ7§|ö¾…ŠHßy›äl ™úJ᛽æ¼9+=ïzíq pÃ4l?¶I›ñ¯Ž ÆOD?oå Kþñ购რOÿß³ÞÿG½goŸ]‚j£{[öK»·y¯ï<1bíÓÇ#¿ù6£ŠpÏY» “ïL;[|lÔ_XY².uzs0q"" –¹»iðŽƒ—ô꘳?”ž¼Ú= ‘ÞÅÛçŒ_ß}sò¹Œä‘x·Â×g‚j“[ª?€·o?uWö§mrþ¼Im€XºnQζìã6m›´1oWŸy¯ ¨î¼§i½3B¶ÿÚ„`üdô‹|ˆÏÈ/];ëµÔ~†ù'GþÑkænêRp­AëÌûZe½4<=½ú[‘>±:–õBɆ¥?ÎüõÒŸ ûϹåY~#z(sų«²V/~±pÿø?Œ½s2; pøîCéi÷¶è{çcCWö혳?òEc!õ¾KAylê–ü]K’ùëe?v>5K<ì׋ÏeþëâsÃþ­ìLæ¿ä¾}/; pøVƒÇnkÖA ýÔÝ9_<R{Ê£O-Y¿hÆñ?_ú“aÿña0\ˆ†Ÿ ;_Z•ù/3öÿùà²õey PÓÕ{¨G²eÛ Û&§'*¢_8òOD‡¯\ö|Ñáq’ZI¸4–ü8óßgšðÇ_š¿å©%/, Äφlz€›@ã@öý­²^ˆþæó>ÿ In™z=ooqùè¿\ò~æ¿ ‹Ïeþ*üFîÑŽá÷s®Í­H‚®‡z-/îÜ~ÚîxF²ê }h&*.ÌÅ¿WåvÉ?Tºu~tgî±oK*©ùOc×ÍÛüe‚D0À †Ç†>›Þ!{Oâ‹ì]ÈÈ?ËZ½ü…a+–­NÏ; &ŽÅ‚‰“‘®GãS·¼½ô'™ÿ±èìðÿÚߟQÎa€›/‚_,*ýæl-žrÔßÏ96òïÆ¬]°qÒËÓw,y~i¿›çõ‹ßöëü=ÓÎu/Ü“ïà6¨CÁð£ÙoÍÌÙß·øÜð_¥Î[XX1â•TfþrÒËy»ûÎÛ:÷™mÉ=áÉ}ý¼2ÏIÏP—‚!q*~#ú^iÕðÿ»ì§ÃþóÃÍÍegFüóÈçÊ^ÌHžŒãÇ£É#ñkóøTÁ5?•¹XUî€KæŸÌúÛKºèl毦n)|«{áÁ¼?ÌWOî—‰ê×¹bÔÄ`HÐ%ÿP"óÙçWÌ<8á穳.]Yˆ½:Þcæ¾k²W!?é”{0§ã3û¦tÌÙ7õƒ™Ò)t §ú{‚jJ0gr;Ç*ÂK6-¿‘·oá©‘ÿÚ³péêBb÷”s½f¿=3=¯âËßfTý::d¿}ìéå›t‹5oÚ#¯EjštO4o>¨l@õ÷B¿VÁ7(*ÃÉ£ñ ^^ýÚô·gÿ'KÞöï—†BÙ™a¿š}dÜŸ´)oW·ÂÉk±º:¢ý”·b-‡,ëФ[<­iä…©†´fýæ·o?uWŽ`€ ÁDenׂýÉÐöüwçû‹Eç2µì§CÏ_ …&þÁ¸u¥•¾2¿Ï¼EÉÔIÑ×*ÞNCÇ–ƒ§µ²äâTÿ½::¸‘Á<I=25²3z¸´jø?_ ©)­ö«á«ž]ˆŸ âgB×ôIH©`˜º+úØÓ+2í;çÎfýæ~0Åw6XšÞ~ÚnÁ7"Rþ–l(ËÛ]µèìð¹2R³ô'CÏ'veWöž³{Fj%â«xTj z,ÒvâëÙ­F­ŸÐ*kÃÄ‹³~B› Û²;GŽ~ð&Á×1R«GâÙ[ã{K+3¹ü÷? ©¯Í?5â‡.[»$˜¨uç+8‡jT0óÎ…ú¿¼`úÞ PZ5ô_—¼?ì×WÃüS#ÿ~ò¦™¯÷˜y0ùñ¿ò ¨õÁžW•Û­p_þ°åk–|nåsS·ÌØ9ó½qÿ­´*ó—‹Ï û·¢#cþtôšÅëºN¤'N×€X pý‚áÂFâÊpçØ™PÇð™ÐÐe Ö Y¼lÕಠeC—¯^ÞwÞö9éy'#_;Á7A0œþ`CñÑØˆU¥ë–l( &NUGÂ…G­†kN(¸AÁpú’p¨‰‘  ÃÍ0‚ƒ`Á @0 ‚ƒ`€Ú ûâ½ælÛsÖëEÁDU®`. †½ñ.ù{ó3’û“5ÿìÁ×9Ü’àÚÃñhzÞ©ˆ`€: -ŸZl?mw<˜8•ŒŸøÔ ÄÆ‚ñc‘`üä§}_0@mõ`—È#öŸß¯Å¥}Z Yò³ø³¿7xQV V P Ýßa|½êh¨ß´{ÞçLòS¿þ@zè–F'¶ D˳p™†m³ê5ê0¡­` Á@0 ‚ƒ`Á @0 ‚ @í †ÿóéü Hì•%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/tEXtSoftwarewww.inkscape.org›î<IEND®B`‚calamares-3.2.20/src/modules/locale/images/timezone_12.75.png000066400000000000000000000015431362604102500235670ustar00rootroot00000000000000‰PNG  IHDR T¾ãKúgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<PLTE`@wµI|ºKv´Hj¨AU6n­Cs°Fm¨Fa–F^œ@t±Gy¶Iy¶Is±Fh¦@dŸA~½N„ÅP…ÅP…ÅP}½Ln«Ch¢B…ÆR„ÄPq®E…ÅR„ÄPg¡AƒÄQŠÌT‹ÌT‹ÍT‚ÂOp­EXž8q°Ew´Hw´HwµHp¬GcšFŒÎUÏUÿÿÿ~Þ‰÷,tRNS$#zÅÂÄ~¡¦  ¤’ëëë—+FEF, -äwbKGD.TÓ‡ pHYs¢¢EÝ1¢gIDATxÚíÓ‡‚@AÌL˜bD}ûoO °ƒß-áf.I€?ÍV­ÝQ‚èÆi–¥“©Do6_äùrµV‚èm¶!„ïn¯f8Ô3„£àTœËòr½)AôîgU½Þ%ˆ^·×¯ †Jqù™{à”( W%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/tEXtSoftwarewww.inkscape.org›î<IEND®B`‚calamares-3.2.20/src/modules/locale/images/timezone_13.0.png000066400000000000000000000016171362604102500234760ustar00rootroot00000000000000‰PNG  IHDR T¾ãKúgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<œPLTE1A@.d?R(76%[Ž8€¿N†ÇR‡ÈR…ÄQ{·L0]Œ6„ÄP¼N ]Œ6„ÅP€¼N"„ÄP‹ÍT‹ÍUŒÍU‰ÊS»M aŒ<{·J€¿NÀO~½Ms±F Av°Gz·J|¹Ly¶Jl«B‹ÍTŒÍUŒÎU‰ËS‹ÎU‰ËTÿÿÿ矋-tRNS oþÁ=˜S–R“úúúúP PЇŠ,;UfbKGD37Õ|^ pHYs¢¢EÝ1¢ƒIDATxÚíÓIrAQ@Q½¯'}ßDHâcÿ‹3øÏØÄ@Õ;g ·êærð6ò…âCI ¢VMjARWƒ˜5š­vÐéöô bŸÿçLzééAÄÃkÜFc=0ƒÀ `0˜Ìf3€À `0¼v†Ét–™/–+=ˆØz³ÝûïƒD¬üs<¿=ž¸m3%Õ¦½Â%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/tEXtSoftwarewww.inkscape.org›î<IEND®B`‚calamares-3.2.20/src/modules/locale/images/timezone_2.0.png000066400000000000000000000400501362604102500234060ustar00rootroot00000000000000‰PNG  IHDR T‰=»ÈgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“ pHYs¢¢EÝ1¢>øIDATxÚíÝw|TUâ°ñK±¯¢Š R¥·ôBz2íÞI# i¤×™ôÞ;½wÞ!¡…’ždûê®îúúSW]{£IæpW] ͰÏ÷ó9¦Ï„{òÇ<Þ{îºÀP‹È‘“·X蛣ÍuQ]:ôMQÓªâÆH l˜ €` ‚`‚ €`  ‚Á€` ‚`‚ €`  ®"&í¸ MQ]9ŒÏy% @wôÔô€á£¥ù¾ý7…O˜µ1¬+‡ñ9ÃÆz.‹zÑ)Ë’™º¡A£]ï|Ú4ä¡çlâyÖ:®k‡MÜ#C-"yrŠß½ÌÐ wͬÓ~'¸-¼ ¸Í?×µcÁaFîÂäàÝLÜ|ÓϘ† ÏZÅÞ’ñŒy„ðäT?&èŽqë÷Ĥ™<9Õÿ¡[1ž˜ìóÐã㥻™  zjšÿÓ£Ô®ã}ÖzŒŸ¹Æ½K‡ÏZ÷1Ú…žÃÒ'2@74Ô"rää  -1æúæè®ÆçŒž~ þ%i¡-3tÓ`˜¸=ÀB~¯kŒêÒ¡oŠšV7FZ`ÃLÁ @0 Á@0Á€`@0  Áôô`0k03s]SçÇfñÍ‘Ÿ‹o‰$€ÿ‘`˜l s]K”…¾&Ö\w2Æ4îd´IL]”¦|a…¢pyqççã›"í3v¤iÊ—–9foÊ2×5D™Åµü;&àv ËðQ6;dn̶MÙ”a¡ß¸:y{ØÆØƒá[›¥Šœ•>KÒ7Ú¥ïL \°+±jÖVÅîóZ”¿ÒkQñ2ËĪs]MŒp›qN“Ü+BÖy-ÔíZ^={}رŒ£^o§õ|{ÖŠÄ1;Ãêu{gýÞsAÎêìïw²k4_® 9ž}Òóý¼ÏRÌz5zGHƒ4gΫ¤#:‚¸¸eª]Ý+‚6ú¯ =–vÄó¢éBÙiñ’~_Ðé¸ÝAmE-î_æ7ºžß¨ý¼ì´ÔQÚ.uäÖI_”´‰ß·jÏ¿þua³Çç©Güÿâ>·x‰…¾>Ú\×ݹ&BßD0=YÀ2•_ì϶Ä*ß× šÜ?/?#Ê_ y Ÿ·iÏ—¿"üߣ Q:›VíùnäÖÙÁëc(‹æÍ1‹Þ©7‰:;qÖÆ°)³÷Ìžq(Ò<¾`z§D{A™é((Ò„ ¢ovô– e§<~jÈgÒŽÌ|3xmpMàªàJ³ÐðÐQªb—ÇÆ‰ÖOMœ9J]1Û4æD¬¹¾ÙÍpù¬CÁtG¦þ¦½\RìSç8Ùª²Ÿ \.úƒáÿUœ¹¶XGQ³ôuʱ)d›.f›ÂÞ1~êã÷ xôîG†Yß7h”󨧦8 wÉ÷à»höôÐÒØ‰þ›#&툞²/Ú,îd4Át¿`x"x…kAÆ1ÍI•ªíKUósjÅ\S0œ– ù â§1[Õ[Wˆ/ŽÕ˜õ×ïûX+á‘ç§ OLò–ŸªÏožœ8ä¡¡¦ž³ö4ÉÇgÐó3’{Á>eÈ0û´çF¸æÛŽ÷Y;kRÀÖØÑšyÐM‚¡¯W¹ëŒ¤JM•ñEÿ¿R©ßË«Ó|YÚ.v”µKr·‰ß”œ/ýä™…ñœÿ§<÷—Gt{<—{Á.Îö¿žëŽ»ê}×COõµÏ©LBãåBƒ0û¨¡ókƒF9ßñ´IðƒÏ˜‡Mj>Ž™ºG0ŠL—^¶Ñ–ƒCÖ¨Rª×eS·çÕ‹Ÿ—^ †‚&é«Âf鬼FáÇ‚¡°IüB•eíh0·4ka¢Ç„ÿzžç¬b…#„‡†š ýîyø{_{è™iÂ3f!ï?:¾דS|{13@7bh&„®UËïöqËp¿S¹¸ IóÁU-vn/%W©*c·kB­#L”ÃÁ2Ô‚ƒ Ünñ˜ Éw¬#gLË<¦n¿†;$ò¤Ïô{Åni3†Z†Xp–¸]Y†ZO¯V5\Ó­Uß›uB|Ý-Íz²YioŽ"p›zläãw'îW¯)j‘.^í Ù5âk~ ]­ú›Nç ·³YKTA¹uâÿ•_Å-VKÛ¥‹³W+—»—8Üí»ÔC0 2á·3c„åÕ‹ï^ååH™ÇÅ¿J…Î&މ.}zß߇ÜÎBשòêįaáó%ݱR™iþà€p€Û™[ªíÀä*õ†‚Fñ³²véÒÕDCa³ø©˜ï tÐÏèËncå¯%.ºÉ¿™µÈÍ#©R}kºIìÉhÓ¸–³øæHs]S”Y\}Ô´ðƒ±c=—EµŒtji7p¸Ý³?oÕ›£ ôÜ`ßô¾èÃß;ðŒEèèÉA«CmRv§Z'íK2=o›º-Í%ou¾×ÂÒ%³Vä­ñXP±Ð!kS¦…înJðzÝ·»áι£¿¤|tÈÏÁƒF»>6h”+{/=ÙSÓŸéßzÖbx¯íCÇL½%Ø2ñD¼vîÜùñ{"ê²Nøý=·ÎçíüFÏ ›=>Ïoôú0»Ö÷ÍŒcþ Y7óm¤É¨…ƒðØ8Q2É[0ƒ0h” ¸ þÄ^安>‹£¶KkSûýµ¬]ì;Ëë:ï dW@çÕ‰Í^åä’b}ßpDZ@àv&X ^å¶(huÐQuiÎJý¾À3MîŸËwEú±Û©&î×¶Gn’†×<.Ù'Ä^¾ûÑåaŒ†ŽÒSÚ‹Æ·—~,.Ø¿K}Ô³Ôá©ØíÂKŠÑ—‘Pàv’T)Åæ×Kç¾ W;JÚ¤ >óôc”“îzønÝ^!|ƒ(¨sœE†#èÉž6yJˆÛ¡S+}r=ÁP~Z2d×ü#í°bŸ~¯Ûò™ó\ÕaÄ@U–ÓE†So{ èi^˜1V^é, A“ï N9 úÛuÃ+—7r+3†Cq›hȯß)h”>Î:¦nUdÚY:$Øöæh=Ì“&/õYëò 2Ót’KªU|êAÕï®7¾7®üôýR‘‹˜[«yõºÏ2œ– ¥íÒ¥ôjÍ_¤»`c, ¶˜mÎz‚~ƒû ½‚ðÔô'Ó€)‚]¼¥à”h+ØÅZ cUã„‘N“îK?¢ÞZÒ&uÜÈ¥Iò™†œÍ{I•ªÍ&þÓqä€Û€ÿJ!x•&2¯NzïzC—¶KSJL=,5DnR/áøâw<|‡À"h ‡Se»\¦ŒË«ÿïzƒ¡¤M:ºN½B[`qñ!{Uü!T0j„jCŽ0}Öt2ÐSùÎWÌJ;¬yµô”téz/G*m—¾I9$µXG˜?´J¥ˆÛ)y'îWÄÆlUhG:Ox€£ ôP3ç8NÌ®Q7•Ýà-V‹[¤Ï3ª•µY'Ä÷òê¥Ï‹Z$CN­ønèZElðjàQêÆÁzš»ê¬cª½¥í7a3·+»A; ›¥¯"6iyÏÕô·‹sékiËz’'M^ê½Ežß ~t3‚á{—*’.f“þ½U\´Bá?ÙÛ¢Ÿ]œUçóŽr)˜ø³¾èÖÜ‹]…—TSF¥W«nø²¤ŸÆÇ½”}Bó[ç$GÇg,'ß»Ï&?u¡ïÓwXEXvþ}ìËd݉g¹BóÝ^ˆÚäš™W¯yóW †ÎQÔ"~ž\©®KØ«œ—¸O–´_‘o|ÞÈqZ“Ç †ÃBÊaÁ³ÔE˜â=•‰º¯rÅ”¤ýêÝÆó_ÿZ¡ð#—) ›¤‹%Æ·âÇiGTSiæGn“=Ë\ì§ùN{Ðo ¤€[«oÿ;“ö+·ˆ¯wÿ…ëßy>ù¬Fq[gD|W/¾·SµÛw¡bÜ"ÝM×›ñIûUG/Ö;º4~æîJr<$ìU5‰ù.p ƒáÞ„}ê…ÍÒ…î ÿÞË¡UêˆÜè²j˜ýØ'˜%àÖÀ˜­nºœQÞáù›n WÎ0èw+6OõµxšYnç$GaØŒ1wÏœç63õ x¦äVƒ1òêÄ÷©ªâwº- Yíìih}/3t¹G„‰3zGoQgß7V»™/þËN‹×øýÒ795ÒÛÑ[ÄDužËãÃ]ÌxvÆ´~¦ÖLÐUƸŽl¢,…͆4Á£ØÅ4½Z}S7i+9¥½XÔ¬ý:ó˜ö£ŸºÄéÊ¢æŽâV÷¯ ›=?K?êóÈM3wø-T„¹¥;?ç»ÀMpH˜!̈'€.5ÜîÅ>“gš> Hw“\¥Y_ÔróÎ,ä7z|¹-öHàýž yuòžã×DyÏ…oJÛ¥㸔[çùaÒÙík26y̯X4#iyîXù3œ“œ{[„Ùôb–€[dªÙÃþ‹#÷« ›¤Ïoƾ òåGùKÙn®;c¡?ï1?wUüžˆ“º}‘u •A¯¤ö|;õ°×ÿÓíóû£vNÞ ÛÔýI¦q­æºÖÈiaâÆH l˜à3 ²¹Ç±«gæ1õŸnN,H—’üÁwiñ Ë„£qæºÆ(s]S”Ilc¤mê¶´ µ »“ùÿ)¯Áý“œ:%VúþYQ8oŽY|]´eÂÁK}UÂä º1ÒB‚èÁ LôœÑ?`©›{ÚaÍé’Sßßmùc¡£ä”ö|ø–¨j }mŒ —ƒA Q¶©{Rf­HÛœVíû7ù,DÅÑPÒ&]L=âózÔ¶úø=ÁíbqÔÂ!“BϘ…½ÀìÝ€ƒÞA0íØ7b£[Xæ1Íkù š‹[Ås× ™Ç½ÞÞQ#Í™7Ï2ádÌbáÛQm¡?ë1ÞüÜ:÷Ïó¼>ÒïŸÝ°:c“Sκ\×ü5ù–ú݉c=—>c>’™º M¾‹ð‚õswª²í&©sÓ«þ|­—"…oŽ>b›z0Á\×ýß±ðŸhpÉÛúrÂ^ïE%K-:×8ÔÿçûõMQSÃ*ãFKó¹%ÐÜóøÁ%u†¸Bí“}B|ëZÖ4”ž’.içÌY`¡ÿ±3 ?M‘¦q-fñÍ‘ÿõ5c0L «bÑ3Ð]ù.PZ¥KŒp5±PÜ&O<ø[‡¬-™òZ…_†ŸнMô˜:8z‹zYA£ôÕ/-€–:'Tv+Ü+_ntC±@0ÝßìUêÀ¬âÿÉ ™éìBQ‹öÜÌÅy«,jb¿W¤ñò¥H­&±máW†ñýÖÓ¸ï\šD0Ý[ÀRåŒÔCš†’SÒ…_ ù²¥ðÍ1‡mRªuòÚ„Ÿ[³`™pX§(\—çµhþ|¯… æ¹Ï[R!U,)wÎ}9gjä©0“Ø– }óUƒ2ÓIðž£ü©„àUjA*°zñ &ø5ô¾³wç[Ïrg!p™Jð_ªšS+¾{5 Ÿóê=>ñ^TºÄ\w,Îqй¨Ùø¾Y|S¤UÒ!ýÌ%%Ëtû"ê3Žù½žßàñ©ü39u^ïçÔz½—r8à¡SwxÌ›»`ZTSääÙ•q£5‹­íbÌ„‡‡?,8&Øê\gÁ:ÂL°1Bשå[Á>áQ¢°š9Oe¸\­UdÌjüõ{Mõ5g2€›É%ÅYð¬pìåQdÕwæ\Óà•š¨Äýš=EÍâß®SGq›x±´½s!ô¿/U’?ÎkpÿT¿Ïÿ·QÛÂjýW¦l \¹1pMÖF¿åyk¼/×í kÊoôü¨ì•Ë›µÉë"*¾3ÊO˸‰ßäœôþ§~xSÈú˜*eNXªs¢Å„ávO?ì–f;Y*tvqÐYŒœk1:l½:*ýˆæPNæoƨùGîIñý”ƒšC³:;šYögF€›äiÓ‘ÂxɾOÈZ…{R•¦:¯^|£°Iü¬°IúÚÙµžDo?¼.¦ÊkQáŠY+s×%ì>•]ãùA~ƒö y£6ùsHËK¤9%‹B6„Ô¦W{¾[ÔâþeQ‹ÇE-žŸÉQqµ·h-ëŒíù‚&íGù ê7òêÕ¿+hÔüÝø;ýÓøñ_ão…Íâgeíßãs÷‹Íá/kžó™çÖyÉ€ «”ßôöªp5K=¨®-9uùE{a³ö\ìÎІ„ÊÀWbwù¿"–ç/³LØ›d“\™h™¸?Ñ>cU^ئàúÄ*Ÿ×bv„ÕÅín‹Û^·;´1¿Ñý ùlÄ5î}ÃCކ”ƒÒŸ¢·i½ÊÝ•ò}˜aàLõ8À.ÎÂ!a¯jgIÛö\(n•ÎGlMØoŸ¾&×!cyMòöT³øúh×üeÅvi²”…sÓ«}þQܪ=/ïð|奎«¹«Ò¯9Œ¿÷¹¬Ò[ËK¬‡0ÃÀ 0 ˜2Ø%ÅÚO¿Gu¼¤Uúæ»ÿ·>½ÚûM÷¹ÅKÌuòÎÍòmO›¢Lãê£Mãš"=d¬ Û8».»ÖãÃ[q6áçFN­ø~È×DÛh“Æb/f¸Nö‰ÖÂp»‰ýÝ‹í$ýnÅéâ+Ñ ¯#H>èõÿׄS•Ì+ßÕR@o¡¯‰‘o‘꘽&Ï9§tžnŸßKNI»S0¤ß Zn?N™Í6À {ÑnX¿±êñüʳ÷kþ”}Bú(ã˜ô~æqí¿’y¾¥ßïýzÀjÝ»´íiæñQfq Q.yóÊ=ÄïˆÙá÷»â6íùî E-â¥àöŠ>=Õ—ÙnÐ 6Ãï´Ž43µ 7—b¶ªVäÖI_§Õ¾¹Å¯5j{`[B¥Ï«³VÄîµMYŸm,VŽëä)byñâÙë#6¹uËCá»wK:%BV9ELó3»[îg‚€ñ¼õpašß¤Gå³ Ñ[•iÒ§ò^ ™Ç=ß›µ"a‡¢pa™MÊÞdË„z³øJ½¹îhœ¹®!Z¾LÉ%w^EZµÏßËOK?uÛÔ«½ê ãïüyNøf^ôa~½ô¥n·úŒï|ÇQÆ`` p£¦ùNÆªÆ îÅnÖ1ÛT՚ϓÍü»û¼ÂeV‰ÇãÌâ//z6¯±KÛšn•x,NþØ2a¢Ï’ø]úý~Ì­—>/iÓ|wtGQ‹ö«ÜzÏKÚþ³ úû{.HÅ­ÒŲÓCq«ö\A“Çg× ÆŸ7dÓ¼µIè»Pí¹QrÜ¤ŽŒÙæ–íQlõÁÜDRžóC3纵X«÷_>{kÁÊ"ÓØ–s]cÔåQmtXo¡—ïœÔe¡?¤sÊY\ìš—¿Ø{qÆúÀ5©[ó<>‘oµZÒ¦='oêæ¹`ÁÜàµY“þöÊiy×èKÅ­î_ë÷‡¶ÌZQ¸:lSâžÐqUI~_þŠxU— åÕK'ìUïð_âj7ÜÍüNÿej!z‹$ ùŸreý—$7/ò]„Y‹Ü„'M"FN™½<Â"á˜ÎL^èßi×i&xyÈg.„…þXœïrýNÛÔ­é¦q51Ú¹sç‡lHÚå»,wSö¦,ùçLã꣜ó¶d†nÔïK¨ nÜwÈgYáJ»ô]i&1Q¦±õQÚ9 çdŸùÖÕ\Â$Oâ>ÍQ1ßu² <×Ë%Íáßÿ†±ê ÂÅXãx‰ ~ ϘGŽœ¸#À\w2NY´´DU¼¨\Y¼¦@Q´1Ç1kWšmjU¢|–Á&ew²¹îXœUÒ!½¹¾.Z޳ø†(‹„Ú9&Ìu Qßž£ÃB_k—¾'Å­`cŽkþú\ÛÔ-é ‡uÓcÚ½Í]WïþiùÕÃqÏ åh½=t¥¡—ƒÁ"áx¼ïòœu«õ»C7FUGn ¯õ_•°Ë}^îJ›äýI–úêøË»5FýÒ°N:ï¹°tIÜžÈÚ¤³þúrDµ]º|ç%ù Ck„û¼%åY5^ï\í"éøn˧øZ=Æl·$¶˜ë›£MãZ#LbZ#ì3v¦iÊ—–©K—•º¬.°J<ß¹ú*bA6ÉÕ:¿åÙëõ•!-QÛö‹å‹ËÍuµ±ab íÜÅY'~9ä¯4Ic¶¹Å>m1¹?³üÀož½çßã×  c0üç’¢æH9äa//„¾úXøÏ¨±NªJ0‰©’çÛK•¬“&„nLÚSܦ=ûs±PÜ*O?¢ù}Ôfeê¬EöC†ZOáø®~û ÎI“…“†b!b£Vðž£ü—¨÷bWÁÄšpÿÐû;¿çZ=:æqA•å ,U O™D ÿa0ÜœÑõï[´^ùœi\s¤vÎÒ²ÌãÞoÿÔÙ…âVñ‹ÔCšæ°uŠè™s_˜èiÙ¯!›?à‡ú<ÔG˜î7üŽàöSý©ŸsÍp{̽Xý„]¼Ó@AxäŽÌšY‚g™³`5âªo˜ýaö•`0œ¦øXÿƳLýÔ81À|¬ífñ­Q77¾?äxPGl?PvZìø‰³ ú½Š•S¼§õpÊ!ÍŸSˆ-‰û4{“*Å# {U[ô{\SC׫í•YŽÏ=6ñÛ½~ÉÃ}ü)FÆït LØ«Xf|¬ã±Û¤CþËõë²ö¤NnÿÏ­T›nj0˜Ä¶DhÊW”džðþÙµ )UŠ“gš>ãQê"<>ñ9þ€ïê7¨Ÿ`o*ÜóÄÀ^R¡³YR¥²¼¨YúìÛEÀß¾Ø.=%²k¤wÒ©«Cתü†Z û¥‡î¾ÎÕ>í°X_ØÜ¹©Zç¦hòãµHçu{Ãë}—¬R®,²ÏØœi™PoùÒ¢›qy’¹îDlàšì—KOi:~ríÂiÉT©ú‹{©‹3 Àãý„i~cûø/QdUÿ¶¸Uºôsw*m— éÕbýd¯ :%¹öyI²è-?NÖI?Á³Üíß;ÒyÊC‰{ KOý':¾;ä™ š<>Ë­óy;ç¤ï?B^NÚíš¿²Ð5Umêî«Äcqúºy¿³xcÈãJLX&œŒ±J<¤›‘¾3Õ*ñ Þ\w´36:¿ïÊ~ Š¢µù)‡üÿTñƒÝ‹ZijG¥¿&ì÷ÇnuË ßàää·H1ˆ¿àäK‘FÏ&ŒpÒ?ù XoŒŽ«Ù§ ¸Mú2a¿æ`ðJe–ßB§`ÏR«Éþ‹]ZG;õ/ýC˜0Õ×Dè?dtߤJeJQËÏ.höü8§ÎûŸ)‡þ²!q·ÇüŠ….y›²ìÒ«mRëE« Â6ÅL«ö}=»væÿ¥ó}#x]ôAUÉÒRçœMYª’Å«37%úmY»ôÍwŸ¯Ì82«ÿì·ÐÍO“¯ô„éôþ¯*Ÿ…nü1?TüJŒ°âŸé‚£~Æã)‡ÄæÒ¼Àþ¹QvZê0~ÿ…Òvñ\a“øQÊA©%j³*ËwË‹‚ðBÿ±6O%W©WÈ ‹é±äËJNi å§Åï=~Y»öbI›û¹¼z“ü>nwx]ÎI¯÷JŸ—/'ºò}òâå Ú¯òÝ?+löøBþºüó?ú\Æcê!M{‰‹©sò aà˜Áü!?Æo«<Ìãw*7·h¾*;-®6~r/ƒj±E·Ûµ0å zkA£ôEùUì®\Ò¦1¾¿þç–ã  Isñ*GCÚÍ™À®®ü?ãÄIð,sò*hÔ|PvZº¡XøÁ xõ<ž e7 %§´RÏüGa³ôõýòeVòÚ‹SRGvæÝnEJÄF¥©ñŸß—¿àg¼0c”0ÙkâÝɤãÆÔoV0\ëÏ.”´‰—~ê2¢_þyé›´jï7cw·|û%mÚ É<ñ²zsr•TŸ°W³Ów“ñŸÝ+z«J0‚[¨?kú¬©ÂÚéŒ/ µëKÚ¤s·*.Ÿ  å7p–£ ÉãÓ€Õ‰;3ŽÍ|S^Hßàñ™ïbÿró`›Á+¥A~ Uá™ÞC¦¼ÈÄW+j‹¶wô6í†[ 7):.e÷~;|sXm^ƒÇ'GµoOò y|bðýÚ’8!t­Z0¶`€kºVì¶^\l †¯oÝ‹}±óNI7ºŽ¢´]º˜rÄï5Ÿ¥i›f¯Óíç½:b´8Ïíñ î2–É®Uü.moÝníî’SÒ…[¹†¡¸Uc¸Ñ»4É£°Ùãs¿§G7FZè[¢¦G‰¥.·¿ÿ±Qw3ÛÀ5ðš£f-Qõ‹Ù&mºÕ—$ݬ»4•µK—Òªýÿb_wygè†è)³÷„sȘvïÀúÜýà“L<p5(k¿ñõ %mÒ×ÉUb»n·¸MëbÍQz(÷RQØÞ+˜Íšð·4 “„½êªâ6éâÜ9)¿AóŽÏ<ÇЀåêî2¤Gè¡ú=Ò¯óm£a±ñ¿ b¾“Mê!õ±¢éë뾕j»Ô‘W/}¬ß£Ùíšj7"õD ¸MôRe9¿½EYVØ,~xƒ—&MªTô_ª´zÞz4G詾=Ó0àé‚¶ÐEî0éÁ¤*±ª¸U:CÑpJº”rH]5Üaì#!kT‹3Æp°€žÀ:ÌB¯'¨2…üæ@!§Á·óóª\·»MíîTçX=²ZQXÐ(~tÝÑpF^Ó ¾´\ã¿T}Ï Ö#{qä€nÎ.Î^îÑ×ønŸÉ^¶÷­p¹I5Ò±óŒ¨ÍêEáë•¥³WÙ9úγqÏ<¦ù‹¼kóõƒ¼xZÞ.¯Nü8f«jÁp‡qpô€n ¢6ºøëw9'èv*¤WKÈ<.½•S+½_zJº`|‘ßQÔ*ž+n•Ε´‰—®'Œ‘q)§V|+û„êdö å‰Ä}® F+&áèÝÜŒ» {UGsëÄó%§._:T~·R•Ï |w·ˆE-â7)Å“þK•.“§dO¡ß#ý8 Àí`Œb¢0s®›à^ì$ØëìÅlUFgT‹í%mW·ž¡ì´t1f›¦2r³:3âeU–UØøþÂ}W Çj6¡óíK‹Þ㥩÷ûÎwS.WÅj‹\|¸ÅÄîk ›¥¯®~Ã6éë‚FélîIÍÛ–!Ÿá0‚;$=×€^ÊLËg}æ9ùûÎwÉL=¨j.j¿0ŽŠZÄOå³ ×´ãó™Î3 ©‡4¯X†L~f”Ë(‚詬#mŸLªT­-j•wuå8¸tÝ›µ¾ü¶ô”t~ö*—ÕÝGÜwï“÷r€žè¡aOA+%—Œ£Òk7°QÛ•XèÈ<îþü¶´]¼¿S¹ÝÄoäýý²èè‘ú>2ð® ÊÐìÒ?o4JÛ¥o‚ÖDÉ«wÿ4债U‘i7B™£êE0=TÄËΚŒjõ_JNIn$.ßRU{ÑoYò&2Ÿ R×ÉŸæ Ž‰ìð ôH“½-Ý.Ñ?§VúâFÏ.\¾$I{qÖÊÔ£”)^‚ ë³ú_™d §4nBßè­b1>ºIÁp)fGhÝd¿ò°ÇÆiïæ=˜ßB·ñI•šÃ%§®ÿ®H?Xô|I·7¨}JÀü蟞>°Ñ`¿¤ä@=Qàr•UR¥øJQ‹tA^°|3¢!¿ÁãMQVÅ8Ï…nC&y=:xŒ‚=€žÈ.Þî¾°5n㢷(²ô{ÅÆ”ƒÚ¶¼:é½o÷R¸®qZêȪñýžó³—wÒÛ~ ô½ü{8êìÏr7!`¹FˆÙ&?3¬·{‘Ëe¦í8—dëÁÌp <1uäÃñ»\çåÔª~Ÿ]£®I9 >\Ø$~p³Ï8µx|¼&bûÓYÓ?7ì †ƒÆñ¦Xé%$Vy“gû¸¤¹<æ5W=,b£8.j³bVÂ>ÍžØmbMÐ µ3Ü/Ø»Ó.ÎúE›(«‘ÏYÿÍ‹öc_Ì©Q6Üô`huÿ:ôåè*³ˆEAáþ {•áqÛA5ʘm¢±Qœ°W½=倨–qTz£¨E:'Ÿ™H®Ò´Íœ£šÎL·$^ìã­…±ÖÂHçQ‚i ÕÈܓꖛ M^Í\œ½vÖŠ¼µ¹uâ×EÍÒ¥‚FéëœZé_¹uÒ§yõÒ'òåPr$|»þA~›vXúsð*Éš™nM¾kŸÀåš;Ã_ÖöÛ í¯Ìr¶Í=©ùý͆ÂfÏOV'ì Û”°¯âŒæßwUª8óýHøáÚ‡Œ£Ò»Ñ[%Wf ¸fÎSÚDm×%îÓHاݟT)56KŸÝì`(iÓ^Ðí :¼>yGù+š«^,vD|+l½Æ‰™nˆÒììé}ã ô޲ӗÇÍŽ…+»u¤õ}ÝwYÊæ¼z®6²ŽKÿŠÛ!©„»ž`²€[ 9µÒûgn~$üÈ’>ÝÔ–rØç«y>ù{r뤯âvªáÑ>ÌÐÅÂ7JÁÆ`x¯+‚A>ËPÜ&^,i“.^íÏ·J—âv¸³›üf èb] ×<ä ߥ³º]Êðñîfý˜- «ƒáempW]’t­±PzJü&a¯j»&Ïéű¢)“t5ÿ¥jçÌã⟺S(È£¨E<ŸT©9¸L9e¼‡m/f ¸ž·™|oôEDnø²Ó?¿/¯ ò~ MÒ¹ÌcâŸâvª+|(‡û/U2I@W›9ÏM]§Ɖ&Æh0½gö*W÷ôjMKN­ôaæQíß3Žj_/l–¾”#â׎…Òv©#÷¤ôÏÄýª-ñ;•A³©§Nõ³½×o±ÜR‘k_ÿeš»—:ßç–:å1·Tk¯ Ç Õn.¾ ]ƒ‚WªW¦ÿVrêêïht=£¸U{.nW@»¦0*Â9Åi Á`ŒÏ-¸¦;2IÀ­¸Lé½UÜ™vDÛ˜W/¾Qܪù0§Vü»n·æ`ÎIÍŸKÚÄÏJOIä Ý~½XÎ'V…¶Ú¥,.¡XbåUá* ·Éä·ZR¥›_/ý±½~íµ òsäÖy¿¾YW阽%sjèØ1ÒBfè&’«Ä¸üé\y.n–C¡¨E:ŸqÌïuÏ…e‹Mcë£ÌuÍQÓªâÆH à9ŠÛ´çõûO«KW›Æ6Ešë£ÌõM@0\†Ø]‘µ¦±uÑæº¦(‚èFú=Ò¯s\ †Ø®yu^½÷û3—¬4k €näÞ‘÷v¾•o]ªÛ¥’ƒálWoÐVÜê~6j[Ü¡iÑmáÐôêÛ«wø:+›ÔCιYÇUGŠ[Ý=~|á³hH;2ëUË„]Éæº¦H‚è>ú$W:å—œÒt¾pïêX¸ÿˆÝ{ÔoEÑJEáº< ݉ØÎ;$q[Uà7ŠÛÜÏFïˆ:îV°1Ç:éˆnztkÄå Û®ìòL0ÿ£ÁpZ2äÖy~¨.-[`×iåŒÂÁüƒ|9R›ö\Ô¶È? ð¿ Å­_®IÙö½KàÖ1 ‚½Î¦—÷ Ð= Áo‘ëäè­ÊÚüñ3ù Á·á` Cq‹¼Aü(å ÔžTåßœt0´-¡2¬)õðì3Çü_Óïoo•*VÌŸãš¿ºÀ*é°îº6 @÷4ÑcâýN‰6Ó"^VéÓ«ÅßçÔJŸ¦RI®Td¦P뢷ª¼Æk}ÇÎÜ`[==º1ÒB$Þ.}kº…îxìôè¦Hùl‚Y|säM ‚¸õ¦ùM\Ól…I3íú¯RŒÞª¶Óä9 •¿öša¾U;SxÊ$zøäÀæúæèË/ä¿ „¦¨_% {Qf»É½…²ß a´Â£cž„»/m¨EäÈIÛ,þ ]8 {è7°ßåñH¿ï}ž`ð“‚Á€`@0 Á@0Á @0 Á@0  ‚Á@0Á @0 Á@0 t÷`hŽš¾W7ֽ̎™†Œ–H‹¸—ÓÍÂt"3 ?rIÒþø—´sl™ €`` @0 Á@0Á ‚Á€`@0  @0 Á@0Á ‚Á€`@0  @0 Á@0Á @0 üoøÿ£‚20HýL%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/tEXtSoftwarewww.inkscape.org›î<IEND®B`‚calamares-3.2.20/src/modules/locale/images/timezone_3.0.png000066400000000000000000000453671362604102500234270ustar00rootroot00000000000000‰PNG  IHDR T‰=»ÈgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“ pHYs¢¢EÝ1¢IÇIDATxÚíÝw|TeÚÿñC¯"‚ÈŠŠ"bW@:é¤ÞfΤ“FH¦Ï¤÷Þé½÷Þ{€@zGv×õÙâî>îïqW×îZ‘’ßœD\Q@@J‚Ÿ÷ëu9$Ì$ãÜçóå.— ð+Ðïá‘ýGû,¶·ÐVê, µª»]º*ͤˆ]Áƒžž:”Ñ × f€ÀpÀ0b2 0ü40LŒØüÐSa4 0ÜD`˜I` €ÀpKaø8@`¸Z`Ø<ðñ±€À@` 7ÂÛÃF 0ü(0Tj'„m îÑo4ÃÐ¥£Õ¡ÖV.îY`ÐW«'Ï:0ë%ÏB—W}Û¾ªXÔ1J\`÷¢{ÞÔÝ«†{ÚCC•ÚLuB7Uu\Ã¥üA©no™I1Gãƒ7Í8|4gî yèI  0ÜÈLD½ÒLÛm—¸/^^R¼0pqÚzYIé|ÛÄñ–ú:åŸ[m åÚé©;’Ýs×eKe[®»…þ:r`°Ð7(ÍuM1S5õ1vI»Å9óæ,ÊYå37o™[Î’B[Ó÷¬Œš¾ÆÊxRg¿)Õ« paÐ’¤ÍAK·Ø&îO 0"0H³u×޾Ni¡«Qyä¯Îõ[·|ÆòÔ³6Î:=sMxUðrÍ~¯‚¢…²âü%.Yk²¥=Òϳ^£¯WJ3 ÓŽÄJfÚZ¥TÒÏ4×I®QZ\1A`îb`¸¼àûÿ+¾ž\ïž· Ä9sY~{pøéëm޽‹•ÊŠçÎsË_*/I^7cYô‘™k"N.Rð™»UVœ³Ì»pþœé©{-ôµ*û¤Ý‰>óJ†­JÛä]´°Ô&î¤^úyÖ±•›¸SºiñG³7÷Ì® ]™¶Ñô÷:pWCÊÊX©±Ž;¥•6";¦HpÍY—5=ucºcÚŽi•ñ„Þ=gE~øê„í‹7ûÎË^9=õ`¼¥QÚoðßU©™ž²!Ãw~â¦ð5Q§b¶†6Åòÿ»a_À_foiRm>±6òTèÊÙe¾ ²WÚ'ˆwÎÜšê¿0mí¬Ñ'fo‰¬ _«ß¯˜[´Ø9s]æÌµ ;"ZŽ„þ!§Ö÷Ó¼zŸÿ¨wÄTØ&5€»lâ=ò,ÊX½E}L½sv¥vwdýŒ¥±;U;B[ÂViøÎÏ]w(ào9µ>Ÿ% ü»vwxsØêØÝÖqÒ{Ò\Û3UÝmŸ¼/A^š¿ÄQúÚKS6†¬0îŽÙQ3kãìòÈ Ê²I[¼‹Š(ææ.wÏ]^à¿0{eêÉÀdW‰Ÿg׈_åÕɿͩñûH·{vWá¢â™k“v¨w¨ODo1œ¹6e«bîœùvI‡c¥C`îB`°KÜ//™7oÆòÌu1Û ‡ÂV'ìTÌÉ_ª˜›ºV·;ôlìÁ7foRO8úfԆؽ!+³Öù-,Ydw(ÖB_#-S2(æ.*±¼p¹¼dμÀÅ©ë26§KûÌuUjûäm)¦›ÿYqñ‚¨±û ûcª"×Çîõ*˜7×w~ÁRínÍIÝu¹ñ@t~Ÿ²2xYö‡ä=‰í§%Ýjjp›–$ÕµŸf¤mˆ1ÓÔ+Ýr—,J[ç· v[ü¡À·b†ýÎw~Ö*iÂw^ú }¹Ö6á@¼uìI´ÿÀ)}KZÄ:ýþè­ê2·œyÒÏh¿Ù¯WZÇ1šÈöÄcSí˜Ù ßv6ådàÿÎÞl< +.]à‘¿¨Ø.i{²™¦ZÕ^UjsôúŸßØL`îJ`¸²¬Œ§µvIãìw'z¬ÎuÊØš&md¶2–ë¤|Ïü¢ù!+ãwH¢}#ô ½SúÎûäý íýê¾"Òמkrƒ–•,‘—.+rÏ]Ÿmª,)lLOÝž¾&~gÀâ¬5¶‰‡âÚOHª»=ǹ€;u¬j][“µö%ER§åe{c5Ó÷uµ*i´SúÞ¤i Ç ?~þOoøëTæºåTMcŒ4ƒaús[IÏ•N?rLÛŸ`Ÿr8NÚt}[û?€{Ö‡Ae¡¯»-³·ëç€:~ 0 0 0 0tªÒ×)¥®ÑfÚz¥•ñ´ÖÒP¡1Ó´w‘&0¿âÀ uˆ¶Ž-Ó{®Í \R²dÖ¦„Ý‘’·ûÎ_0Ï1}oø5iÖÀTfÚÆ3M­Ò!eSºz‡æxÚ© ä7ŠçJ^—·Ÿ‘·æÔú~º*y ¸ƒ…¾Zm®­ÐXèk¾û^©Ni§§nKõÈ_‘?smêÍ.퉤c¡ÿSÔ,o-9+¶–¼Þ^E-â…”“ÁoÉç,œC`:u`¨3…) Ô¨¬ŒÕjûä½ ÓS7d(·i&•…½{0ª!z‹ár»¶,áhÄo3*fü#»:ðÝüŸ¯LAáRûŒ‚x±¨YñmN­Ïgq‡"^Ú˜¸Ë³`M®¥¡ZM`:e`0]­Jڤ윱:G,-Y¶:uS‘ðßeœøW~ƒø´´È.™ÂÀù¢ñbû×riába“Ï×¹u~%•…þQ³[yzÆòì5îyë²RÅI?Ó\W¯lÿ †:•¹¶)ÆR_¥ö*\Q¹!~wÊÉ+hÏ·(.”˜Âå¥E¥mËŒd­MŠs9µþ¦ž ù‹4Ë Ú®;º*}£[îêÜi Ç ÖqÚ¶Ù}tbǪ-0HËŽ¤cOÍu§5²’eEëw$•…ü©¨Y¼p9 ü0(4‰ßfWû~8ªyÖæÄ]~óK:¦mOµ0½^:I*ú0÷A`N5²OÚ°({õìÍš²äãÁoIKޤÍÉ? ÅgÄÖüÅ7©åAoÏÞ·×aé¢iñ‡c§ª£Íum}hÜ܇Á6Q ñ[Žøþ_a³übéÙ+g¤½ òó)'|Þ Zš±ÞÊxBo¦iо•@`:M`º0W©Å9K´»C~›Vîû~a£üâåcP Åosë_D4‡®ŒßáU¸¸Ø&î„þÇ{~Y`ØJ`¡ƒ†öÙjµcÚêì™kcŽeTø|Tüݦfi9Rñù¥´rÿwƒ—%m‘ŽS•žki¨¹½ïAW©¶=ôÁ'Ææ*¡ƒi“³mÂÁ¸Ùkâ…ýV E-òKÒ>©BvµøeÒ±oEmˆÛë˜.mfþeK®Qê©1GU/y9õ2ª7W   0Hý<òVåFo‰9™p$ð¯ù ²ó—÷,Ha!·Nv!©Ìç݀ũ̵§4ú†;TS•Ç•/{¹}Ée )0p‘€ÀÐ1fªÔ©»“Â×ÄïL<¦x7»ZþUa“ü¢),\”6<§œôûçŒe)›¦ÅнSïÁLuBù’W‘÷£¯¸ |ì5.îu`z#Hœe% çhwÅœN<òÇÜ:ù¹‚&ù…¬jñËäãŠ÷Õ;Âä%sæ[ÇžÐÿÒ®Ž«^‘Í• }Éyà”Ù‡¸8€{¤.ËvIGbý,5ì‹l,n‘K››¿ïÚœW/ž“NIòÌ_Pb~gö+´‡õIõ«Š…òG_q{˜«è0¡^阶#E¹mVU^üÜ{,4‰çc…ý^,-]`—x$Öò»4ßl™kN©^U,ò6F6´ÿ#ÏCž›Æ…tŒÀP«šž¶-E½#º²°IüörX6;çÖ)¾ŒÚ·gŠª)ZêËpG‚¶Âú=6ÎçÑÇÆÈ„ac¼¹(€{ªUîyë²Õ;•åÆƒÍy â×?œ]h >ÿ‰\Ÿ´}Šºeö §U£}=1!àÑY ­ÂØÀÕ\À½ u*ëØ“º•¤ŽÍMŠoŠZÄ‹? R6‰çµ{´'͵•šÛ=Ã` ê1~Ë‚ž˜0Ìô1tú’Ð1ƒ´©Fåž·>K·'ºZ·'²>éXÀÛiåÿ̯—Ÿ+>#ÿ>4dVþ+pqþò©šú˜Û,t•ê±+g<1)èÉÁÏXtòì4¡×p1%0\Þ¿`¦­T»f¯Ì [¥>4c©fŸjûÌúìñóË Û¤ðVü·€ÅEK­Œå: ]CÌ/ûUª±«BžœúôccEf€Ž./O²2VjœÒ·¥zÌ/ ^nÜ™vÊ÷ß…ÍâéˆUS`¸$5nˬðO½CsÜ»hY‘uì)ôº[ëâ|Lý¤ÙÌ1>ñZWShàÀ¯K‡{|_#0\þ—ÿ¥ÔéÙ)cGŠbîÒ’ÐUë£6ÄîÚ`ܳ-¦|ö易k•Çsò–N‹/3H¯™–pÔxùÏ7zäê”Ù‡4ó}²ïà§»rµàWcrÐxÁAg-L×[iáÂÌž‚{êtAèÙ9Ãû2´7h«R[ÅžÖZÇžÒÚÄŸÐÛÄ™*þ¸é±¼mvaZÂÞÝîè*ýÞ¨zŜťÒßK£¥%Kí ¥Qw•ÀpXóøxÿýyŽÀ€ûŸW¦³ ËqZ[?ÆûM}dÈ+#ûûÏq²œ¹Âk‚k’CÛ @#0ÔÝÖPa—´;Q·G]žYéÿnZyÀ;1[5ÇÜsWå:elKµKÚ—`¡?¡3ÓTª'+b¦ª›¢Íu1R  0àWÁz¶4›`g ­‚[ŠÓxÿwÕ÷U†=îóu»¼þ²Øí "ßEmzj ¼„%Þ‚sìtÓë,‹™Sïj`0ÓÖ)͵'µSÕµÊöý¿=¡Á!eo‚¼dÁå¶Ø±ƒßŒ=úû¤²°?ĉj6ìSUèöhN¨¶Ç˜¹6c£bÎÂ9¶ñûâ'Ï2†qþOp_zvÚ(a’ßKÂÄ€©]œb힎Ù$7$–Õež–ÿ­ A¼PÐ$¶4Šç’y½£ÞæU¾Ü-#x‘WhØRÙ ·$Gs;Õ+¶Jóe/v·×8véóÐÓw40L‹?bŒÞjŸKÇ£æ×û|³Uyrzê–Ôÿ.SªSZêÛOJ²Mú§˜­ñûü”,’6›_£³²¹¶^)/-^˜[çÿ±´g@ZòSØ$ž7˜]瘾+Y ——µ•Z§rHÝ‘²ÒG6gWû~,íµ–Nå×+¾’^›W§ø*ñhÐ[q‡#[LáàwÙ5þ´ïGøî}žýéû–ö'äÖúü§¨EqþFÿ?ˆoÚ*§Œ6vxïacŸàšÀý£ç#=…qò¾¦?=ÒSÌs{U¿ÓkM~ƒøÅm™mh»!—·ÝøçÔø}hÜ?«Îgné©AÚ£I! hIÖš¼z¿OL¯½”Yéÿ^âÑð7t{f׸f¯É‘–YªÕÓöÇ»e¯ÈÙª)K=ú§Ü:ßÏÚ7&_ý=Hßo ßo\¾Ñ÷}ã•W'~–^îy¿Ô)RÌsìÁU€ûÊXÙhÁ"|‚0ä¥ç»ù9úäÔˆÞ®åIÿ½q—··ˆÒÊÿ/`Ñ܅Ҍ•G¥V©Œ#š¥}©åAoû/*\*íi°O>gÝÖ\­F휱!3õ䌿K3ùòómàìí}Ÿ·8›ÒšUéýoÏ´i¾:«î\Q¸¯ôx¸‡à¨ŸÚ=l±«Wf¥ü/¦à‹WîIŸÏ¬ôù8·Þ÷³ËË…nùûŒ¼U»K}Ò.i_ü÷4H§2êöÄTæÕû|‘Ué÷r›¶LÚ¿0EÕ=EÝm{\?cyÊÆ]*t7Jú¤°tTÞPê('¾Òÿñ ,IÀ}¼Ò-ûjwȵˆ~|c,-)Š?<ãϳ7ÇœL+z;«:à=i­¿t´iÛRŸ³7~ƒ]Фø:f›þ°]Òx3MK´¹¶)æòIJæºJuìÁˆ–ÂfÅyéÔ%ÝeEÈÊìµak²×)·%•…ü±øŒâbG ¦Ï¤5»J|?í¤× 1ÏÎÜ2Ê¢mfaΟó¹ pÿ† Ü»….q“gW‹ï•\åt i©PRYàßÃVkÊKæÌ_“µ^³KW&uBΩñý´°I~¡äŒ¬õªË„¾ÛË]ã÷aÌ6ÃaÇôÉV±eú€E¥‹ý”.ô.ZZd›x(vZüÁ¸”!)niÿýmMÒåç ›å—nxÿÁ]¨ŒÓâ;ñ½—Î^/ó³˜i9\èòD«Y\H¸IÇÌB_ì½Á³¤¨YþÍÕ{-È/eVú½¯Ý­:´$o…uì¾8çÌmiþ‹æÏ]™·*jCÊ6õNmYÒ±ÐÿÉ6…ˆ¼zñkéù Gïޡ?ê¿p΢i ãœÒ7e¨¶ëŽeUù¿ŸSãÿAfeà?#Öé÷-ß–[ë÷qG W«”ãò·¢V{øM ²z0»6XpÔÛ“ƒ&sàþ6èù«Hë.^ӞϨß¾^i¹PNßG³6÷›ij•fš¦è©ê†3mµÊ&î¸Þ9sWŠWáÚ\YñÊÏü ÙR#6ۄñù+ó¤eFYUï6+Î]^Þ#Íä7(¾Î8íóQám:Öõ¶njn‘– É?O/ÿ¶ÄmÖ¤€I}} Ý„IS¸pðë!Ërîá_âšY)¾[r½¦eg¥~>_FmÔ4×Ö¨Ú7/·÷Gƒ™¦9Zê·ÐÞéYz¬TÏ\›²5³ÒÿßRØèÈ3?ü”ÂŒéý¶&—ÉëÖ¸Ìð-°{Ü-ɮǀ‘¹Xðë3cG¯ðe‹‹[Äoî†:§ÖÅÙ«¬Œ§µöÉ;’­bOê¤#PsÎñ.Z™o{Jg®kбÐKÚNêfoŽß—WïóyGÚ‹p½Ê­¿Ê­¿M.“ _æ4å‰ÑwmmÝ*ÎqÌB-¹XðëãWäÖsÆ|÷ éô©yÚõn¨ ›Åo¢l÷$LOÛ’f·?.tUæúŒ ß÷ÓO½¹>a—{î’"§ŒÍéú*õ´„ñšÝê“Н;zXH;éý¦z›W’n§—6h®³ùD›^\øÕóJwîPêöBì~ySñUŽW½²ä­é§ÿ1=mM–¥±Fmi¨Ô(æ.˜›Tú?…MòK9µŠÏ3*þ•~:øïÆÑ5ªíú#Æ-¹u>ÿéÍÖ®Uù âEõV·øaãÆônm=-l?Ÿ!XEÙrqá+üç8³nó\<“ËÄ?^oãsû,ƒâÛŒÓÿgÜÕ0cYÎêiñGΙ[Òå%sæÅŒl*y]ÖÖṨE¼$mf.jVœÿqS¸ŽV¦°ÓªÞì’6Üìµ<õ ðø„Ǹ0€6ÝÁ%Á¦»o¡ƒcz¹ø>EÈ,rjý>6˜‚ÃÌu)[ƒ–f¯I<þ†ÔG¡Slp¾²IÝEívœ©aÓqA?4Ï¥gØRWez¹ìõü†›?âTšM(jî$'!]¥ƒsêqñê-2;«Ùö\ Àe5Í6ýwPWE¾ëDã^ϼÜZñ³Îxó«Á¸Çû˜,Ûí%®àlc,íÎ@Á)Öf¨~·üTÉÏìe¸ŸCü!YKè¯I\ÀU¸&9 aËÜ«¨iý–8{eVŠïüšf2+Äÿ¨¶¸Ë¸€qŠsüKÇØéC£7x$g™ÂBñ¯dvár`H+W¼¯Þ*sæj¾ÓsHOÁ<|¢0k­—0Ýà0B»ÃsQ~ƒøÅýŠÏȯ¨Â&±Õ¸W^²Ø{,W`òœí ‚yÈAð`1ÏÙ"á÷ž‚Fñ›û9(äÕ‰çROxW%r›—xØ­$éˆk¾© y$F®ô°žãÐ+¿zãÄIÂ$ÿI]´æÏZçŸQ.{£¨¥³Ïˆ Ä/ROˆo¥”ÿ± QþunüSÓã7™§åÿÐïòÚ½Á5*pŽÓó‚ðxAèÑShë@!tommÒN…:G.Àb¦¥`3Ûê¹YëÝפ—¿kºÙn[ÇßYÂÔÿ!¹LöæŒyΑ+ÜF/tºØI Y`5>xþ4ç œ¬<ÒÜ Ânyg"„ ¾…×äc„gíF £lG Oxܸ.€6Îqö]œâì';ÅZMÝçu §Zþ¯¼:ñÃμÑ9»Zönäj÷ä¸CŽé÷LµÎ~pkë)é·‹TAóÝË(sø9Ýì+ôzäÁnÏ;ŽØ5iºL¹YvT³]¬È8-û¨³†é}4ÈÞÍ­õ:šUå±;ù¸kÔOöÆ)ÆÓb,tàFÙ̲ìT–¯Æîs[“zÜ».§Fü,»Zü$»JþéýЬ­ Qö×øÃNnŒ4p“ìÔö‚KÂôn¾Å®ªœS@ø®ÁåêôG¦¶È/f×xK&>Êh7É+ÓUe»Ú¤žÏµˆîÃãS/6Ë>ϪòXÞgH/¶27#d±L]"K-h?»Ÿ³åÖy¶Ò¿ÔŸn‚<ÇYs}óëåïßÏMÚò½[´»í'0âÀMó\E¾‹^ì¾ …M²÷SOºêqঃ«)0¸ùeVˆoß'"]304ËÎeUz, [iÑ•QnÐD¿q‚UääãŠUEÍ÷å¦ç˧%Ï®öܶÊb£ܨނ0ô•A=g¯óÊÏoÿs¿†‚FÙ¿“»Ä/5ëÍ 7¨çžÂŸq‚yØø! ‡½[L¡áRQKûMöýЇár5˾άp_á7oòCŒ:p“¬"^éµÖÃQ¿Ë5V»ÝuYÚIñíä2ñwR×çάªØšYéýÏèn:×Ì×èÅÜŒƒ{–3Ǫ­ÞÒ—]žµ;P½UþZØ2ùË1ÝfdU‰tòÀp1ý”üí =#ݳÇ1àÀ­xrÊpái‹‚mŒ¹ ß%R+Âït‹aÉeâßJ:é JE-âÅÔò¿Ï\î¾Ü{£ Ü>]\â'<È«¹3Ï0dUÊþ´À+*t©# ÜNN±=üŠ=2NÉÿÑ¡û4œùé2¤¼:ï·ÓNxžŠ;àõ[¯Lg7F¸Í¼²ÝT›žQk½‰‡½ÿZÐ(ÿ¶s,E’_ȬðØã`°åWâàa=ÛìqF¸ þ0N°SÙô šçb¡Úâ>§ Qü¶ã£*ÿ0­Ü-Nw(Phmý³©ZHàNsœë® _ê¯Ýî}°¨Y¼xº5ßðs ›d‰=èè(½©×„Tî€Ð%îƒÕÛd‡‹ZÚ—#Ý«†n¦ßßÖSágÃB³Lš]H–O¤«3p§y¤ºô ]ìŸ['ÿ&í„ìo¦jI)ó<^î}¦¨¥cm„.>#¿˜]ãYæ]0þ»øW<àN›hÑU̳J·Ó5,`®Û41ÏmÌ«^Sõ/q¶K8äÝØaÂB‹x>«ÒëLâ1g/EéD¸Ì­Ã^ióp¹x,Lœë.ت¬„Ày^Oª·y‘Ž0½‘¥Bw² ›Åóé§äžïèí™7¾£ÜE=éÙV½†õj+‰kâôAóÜt»ÄM©'忽}ŠšÅK¦ ð–v»l¹_±£ÙSf“ºGm°aÀ€{í5ÙShpêê™j×K¹ÙÝ+­\üÔt¹qš´D¨µäì myuâ§©'dûÄG» ùž=…žïb¯!,Nø ÏáÊÍÞ†¤£ÞËSŽyO:ê¾6í¤÷‰ü†ö›û¶“•nCxȬ”ÿ;é¨×–œñÓ”ãò¿ØÆ˜½*ý~×{è¨Z[+”µ ÏØNèg5Ûv„ ü¦Ÿ‰ý šmn†Ø=+âÈ*3NËÿUØ,^¸Õ°[+~µÆ#Þf¶å£Ñ¼Òt;½7ZGMþšlLFèÀ.7Fs2ÚnÉ«îc„?¶–Jßê6ÞÏz o‘爈•n–ÑÜeVÈÞ¿é^gÄK ‡Åßú;=.ôš(L œÖß+ÃýÑ—œŸïöèèG ³yjêÓÂXï1‚»)@„.ñ2}çñîQk<’2+åŸÜJ`H9.û“gŠÙÈ^<ÔÅ-ÉQ(õÆ‹¯ ÏXàÃ:«®ýº ]ûw^pœ0T¿Ûcm^½üÒÍîgŽM±À5Ï2bJßÖÖs|¨Àý"p‡p 5Kúcwã^Ïâ¼zñÂÍù…„ƒ‡ùŽV­­_aK½çX˶£^t2}?%Eε;½3“Ëä‹3+d-Rï„[Úø|FlÕí’•kwˆá˼f¸$X÷z蹂ÅL³¶ßÙµGo¡gÿ‡ùð€Ž®ßá°ñ‘Ýüçø˜éw˦•+>ΩQœ»ÕŽÐÅgä­Å-òÖ‚Fñ|~½øMv•üŸ3WxiÅ<çž­­­B>¶ýÞ^†òá]ïO÷~ÖA?ÁR™fôgX½eöéŒ ÿ—¼.¿-ÍÛ¤®ÒÉGe¿·S™¿ðœÍã]ºöèÝ¥{ïzöè;°Ÿ>ÐÁõìÿl¿ñùξó²×&üߢùEÓþ¥ÛÕí¹¸E¼˜xØëo~ÅŽ1ƒŸ|lp×î={õè7¨ŸÐ¥K¼®ŒÐÁt{Hzô{®ß¸€ç %©[3NK3 ·'(\î--mJ9.ûWðB—¢Gžyê7]ºtíÞëú1Þ#/èþÀ‘ƒ}ŠÂ¢ކüµ°Iqîv……üù·ÚížMÚmkfÌsv'¾Ö–LAèÙo°Ðç¡'„¾ƒžd€Ž*tét+åf½©ÇÅ?5·Ïܦ} ­i'åo»§Ø™O¶ÜÚz\˜c.îq¡[ßnßÿ^S`èÖgàãƒ{xt£tP˜) |ò¹¯æ»úÌ+^{`V}vuÀ¿‹[n}Ó³)t\4îõ¬ ˜ãf•ÿzd×g¬'ýä÷J3 ÝzöëÞµ{Ÿ ë÷ðÈþ£}Û›iª´–úr­ï¼¹óÎü]a³øí­.Q*j‘_Š?$k´Ž²~u”ͤ«ž€Ôµ{ï¶Ð ƒ…¶Rgi¨Sšib\³7e¨wjŽçÔú}\ræÖfrëäŸ[ENsekÖ½ëÀn|Ð@ç µ*©Ìu JÛÄcF¿ùsç«¶«gUùÿÛ.ÞÜ)I²/Ýí½Ÿ˜øJ·…Káƒî—À •…¾^i¡¯QYÅžÒúÎ/ZœYôÎÍlˆ–ö2$’×)òŸŸ¨˜$Ø©¬ù°€û%0ü·êTæº µñ@LmQ³xñšû¾û~A£øMA£âbû^ñ¼q¯÷!Tûg´Ó®w„ª´ÏuK@Ç Kì-tm{Ú‚¥ñ»Ç¶?׫'DVÎ\={oÊqÅÿ¥—ÿ5¯Nüâr'g)(˜‚AkNø¥ôP|C¿ÛkyV¥(¶ÔšzBþ7'£‹UÄÔn]»õ¼ê{èÖ£wïî=û=ÔkÀo #é?äÙ~ÏMO¶ºU3%ú°vBøöèq3ÖGMŒØ¥œ8s§jŒßrÿç]3'ÌõŸ¬Þ&N ]æ5U¹É+5á°¼&ö¼KÆÃÒ×ÏØŸxÊ,b`^ý»E®t;E!r·`:½_ørÙð€¹ÞÉs½~ó‚“E¿¿µæ v*ç³ÖÉF¸§8<(ôÞÝ"Ê~àÿk]%Ä–… Ý{ èѳï .ý‡>ßµ÷ÀǺö~𱿕®¦À@çg c†ç„çS„õ­­m_GU¶ c|— ­¦¯÷šêeÙá7¯¸]ñY¦«½AÞöœÌjµà’à Œñ-øä» ³×Ë÷{Á*ÊL°Sš ÃÇ?&tëÝGè>PL!¡‡é÷Iž™êûŸ×ëGºôz`{€ŽªßÃ#MááY¡ï §Ú¾–– ™nä¯ûšžôìaªëÍ HKŒºHÿí9`P>ƒžÚ³ÿÃ]ºtéÚ½K×n? ÝL¡OÛû<‚ÁÐV×ÑCN@2eƒ^÷ê÷ÈSOõ:â'ã»`ÒÅôØßj ~ú |´[Þõ4´OŸAC¯õ4)0ôîÿȳû z²7Ÿð+ðÐÓ£»=4bôÈOŒñØ«>BŸÁ^ó¹ÒLÃЗݺô<¢+ŸÐ …,òT[D!b¥Lð+vìÔVÂ3Ö#„C®þüžÑeÀˆ‘9æ‘ÁÏLìÒø€'GµÕÕô2DèùÐ|Ð@gÒ}ðP¡µõ=SHp{>zƒh²H6Ñ3Ãí¥ç'2ýu×ÖïNYú±>O>$ô{ê7ÂC#_ú¼«)0 4……>× Ývïj*ú1…,Ç]zè6k‡WâaÙ©ôSâ¿ÒNÈßL<"«K<ì±É¿ØÁcZŒuŸŸû9¦ÀÐÍ6……~× ÝLÕƒOè$Ä|ñº]²â¬Jñ‹[ÄÖÒ³íUòºØ*}»Ï»)`Žã ¦§vqM°^r}­À üÜ’$SXh+„v‡˜l ŸIájUÔ,^ˆ^ï¶2pŽÃsÎqV½^v͇üZhvˆ)95âg—g®V…MòoËþä‘bmý¼ã«L¿öºéBÒQùÂüñâµÂÂåJ:&ûyδ±ÃÆŽâXTà~6Ñß\[ê%XͶ*å¸÷ᢖ뇅¬JùG!‹\ÂÌB's&*p?í=EŽGuKvíj§ž6,b…WxâÙ±üùg?7»wPþFÈb§§Z[ßú~ˆ¸ßŒ‘Mí&ËœöĬ5žêä2yu^½øÉÏÍ,|?ÃP!~0s…kØ´ó¾3Wx ãù@€ûÉ+î“6îóö+|S|æÆ‚Â÷uF¼”]-ÿ x¡³ì‘1£ûª·ùá„à¾Ñµ‹Ð5î€gJnømÉÙ› RO†3òKÉÇä¿×íðLö+v?è¹Gºý¡õ4,ÐYÙ*­ÿR!áhôe÷àÅnQ©'åï–ÞB`h+Óë Äó)e²f¿b'Ït§îB>g Sšn˜6|Æ|ÚbQê Ùά*ï7 ůn),\1Û ¶êvÉŽD¬tíϧ tN]#W»ÉRÊä2…„s7ºÁùÃÃñÄŒnƒS“ø¤€ÎÆ{‘B˜<õå&mV¥üƒ[^†tõº”S#~à[äþÂ$¡»t\«}ÚŸ…glõB¯þCøð€ŽÌ"|ZÛãóÓ' _æ™vÒûo%·70´5‹çgo04ؼì]4î%÷¼—Ÿ¶˜ýøqSxèÚ­'ƒt$!‹\„èr!j(Lô·~`ÖZWŸ¤£^{²*eoßô1ª7Pâ·Ñ›Ãë­õëÒ§DÒOŠØ£~-pÍŒ§­U/šÞ[¡€£Ïp!t±ËËÊ-ò¹³7ˆ)šm²yY•ò´…³·?,H•W¯ø"xYÒëØ ­¥±Nei¬WYè*Õãƒ×†?11päÄÈÝŒ Ðê©Òlóð/õx®ïð p/ƒ…¶R7U}fvèªìµÙ5¾ŸÜÍMÐRI¿ïòï,j‘K£[³*Åÿ÷zšC_F ¸ÇÁLÓ¼,>sCƒ)0¤—˽Ҝ¦0J@‡ µ* }½Ò6ñplÐÒÂåñ‡#Î4ú|y7CBÉwK‘2NËß7ìöÌ„®œ« t”ÀÐ^uª©êæh‡”݉º½ÊŠ‚FÅWw¼‘[³x!£B|7á¬Ì¸Ç#M¹ÅÛUÌuRؾÜÃÀðt¿WÅ…væšÓ? íe®mŠqLß’–|<ìÍ;µ<)¿AüÒ°[v"z½›ZµÅc‚¢Às¸ Œè™Xæ/ø—¸3@À½Ô½Wÿî#,f?7Æ…ÿTeyŒ…îÊÐ0Eݵ1aW^½Ïçwâ䤼:ñÓÈ5²SHè6ï/QBÈb/Á:Êœ:‚‘¶c…‚3n€§=†™E%FÙ'mK±Ð7(/iOƒ}ò®¤Øѵ…MŠonw`(j/¥”Ÿš®·”Ñ:G££ôÐ=x¡ÛXý.”øC²ªÈõI;Í´5JiÃCƒsÆÖ4ýÞèê‚&Ÿ¯ïÀ,ÃG³7x¥0"@âë84r•[Lê Yc~ƒx±äuykÂш³Î›2,t 1?Üm©?ltÉ\šŸ|<ôOÅgÄK·30·ˆ—ÒOÉÏÈ29Bèú ¾Ežcc÷É*.i*íQȨø§ÿ¢’Åfšæè+ュá 1|Mâö¼z¿Oo[X0…ì*ñý˜MÞ+cíG3.@³ÑÛ%í¤øÎ÷›™Myõâ׳6JË’Žê- '~prRMÛÒ$ßù…KrjþýK7@K¯/}]Þš[çûyäºÈu£lœFñžÐQ:»hë!†Ýî¥EÍò-/’·¦ž ~+x¹a·SƲ¼©š:ååMÐæºÆ˜ %™krký?º•ÀPzVÞöó¥ž ¹µ~gœþ_ÕÝq§”¢ØŸ´yÌ2‚:‚À¹Þ¯Åí—×\íÆ¿¨E¼˜]íûIÜáÈ–°ÕYëÓv%[èk¾Ûü¼*'£"èÿI7þ7Ù˜í|ú© ·ãÌjRn‹=¸¤p™[κl3mµzbÄÞà‡Ÿµ~œQ:E¾Ç˱ûdǯ?S oÍ«÷ù¸VƒgþÚs]½rŠºVw(²¹¨Y¼ð³AáŒtlªüRnÏçÊmú#^…+ó§%ˆ3ÓÔ*¥¦pm3úÍÄ™»BzjâÈ}ìÓ½÷€¾íõ@Ÿn=ûõ`¤€»l”Ýh!l™lbÂ!yËÏ--’þ¾¨E¼x,ì Ÿysç[è«Ô¡«R7]mãsq‹âBQ‹âÛÂfŸs95~Ÿ¨w¨NJ3 âœÅ¥6ñÇ Ò’&i–âÇ¥ÍT'”ãfl˜9!lkp{m ã»4h”}üXF ¸‹üK¼¤‡.êÍn9Õâ—%goø4£‹§þ´´p™¬¸tAvµ´ñYnú¾\j¾v>³"ðŸªíºcë’¶.É[áš½)cZüq½¹®Ve®5…}ÝO‚ÂËB_­±ÐUkÌÔµjsmzbÄÕ ®ÙfŒp— Ÿ2Zódýç89%r?(-ºÙË™•ïÎ\¿S·;¦2­<ä­„£¯«whË< VXÇÒZ«Õ–†µ¥þÚá@:¦õ'3 ¦@aŸt0^^R:ß»hiñÔÙ›µ/¸æÒ—¸[|æ¹áË\]RŽËÿ*Í Üêq¨é§üÞó.\Tl›¸+I:zÕL+¤T§ºÞ •Aá”Ö!uGŠ´‘ÚÒP¥–~†ô}Çô]É3–¥n X”·Ò,fá×<p§½¦˜"ø; Aó=GöÈöŸ¹õþ ÙÕ>ŸivEÖ»dmÊ0oë}­ P£²2Ö¨¥+c…ÆÊxZë²#Ùw^éBÍ.ÍÉø#‘g\²Öf[¤‰SÚöeIuJ3McŒ´!zR侘Ýr¦2zÀö¢Ëk]乎=õ»D»ÔŠ÷~IÓµÂ&Å·R…Y›âö9¤ìONN2×Õ)¥åHvIeFÛÄãéûÁ+2×E®Oةܦ;dæoãG¼žUôN^½ÿÇÒ«95þ:¤lN“ÇTåq娀•cV…¶Uàê°—½KCFÚhÇ3zÀ6Ñߢ_Ð\—ÉÇä(h¿ý%š/w„ÎoP|)mrK—‹¥KŠ£·% {Ãx ²)åDð_ }¾*jV|[Ô¢8/Íh˜êR[ï†ïÂJfEà;öI[R-ô5êI‘{B‡özæ9§”¾ÏØû>cgìû´•²ïƒ8V¸Ó| <×lõÚü‹ƒÂOŽQ/æÖúü'¯^ñ¥tŠ’é{—¾«Ÿiâ¦8§Ý=»ÊBw\g©¯ÖLŠØüð(«ÇÇ®&Fì2ÕaŒß2a”‘Áî4õvÅK‰GÄ?•œ½½áV+¿Ñ÷‹•)›- uÊïóÖO0RÀ]ÓGPäz žin]µ;¯$S¼ÕCq‹x!©,ôMÇôm©íÇ©€{üK\††.öŒSo“/ɬT|Ðfrký?òW´øûcX À= ]çØML:&ûmn­üÓ’3÷>,6ù|µ>v¯tÄê¶€{„Iþãz{¦9LÔlõ.Í©¿,½‡K’¤MÑÉe¡šž"5{ûa‡gpOŒñ#¸&Ú aK=k¶ygdž–ÿë……KYÕþÈKΑº€dæ OÁ"|jõV÷¤‚ÆŸ?öôv—Ô‹A»gvµ•±Ró“ŽÐàÞ[üï!rµÇ˜„Ãò3ÅgnCó¶­3bkV•ÿ¿½ —YkÔ ƒ‘ç: i]"L×Oê[èâ¯Ùîy¤ ©­ÑÚ yu¾ÿ Yž¹Î:¶â§³ àîè9¤ç÷Õí¡nÂÓ–#„ɛ詂MŒ]îŽq&Û’YáY‘YáU•S#ÿän©ZШøFµ][æ*……ZÕu‹ÀÜYý†=ÔÅ+uò‹ÙÕòÿ5Kÿº/¶JßßÄßŰWïóÅìMÆýöÉâ- u*p½ì2º›GŠå„Ì ï¿˜ÂÂù»}ljéëri™Óù¬ª€wCW¦o°M8f¼¡°@`ޯ .IvÂÓVÏõsÂÓÊåÜÕ ÍâÅŒÓAÿPïÒ–y./´Ž­ÐÞPP 0wV·‡º O[¾ÐåU1йŽÎñ½¶ä7Š_ÝÍåGº=šrÏ‚ú*µ…¾^ySaÀÜ9ýï/¸&L~аÇ{EF¹÷߯طðߺtš±]ʨøgøšôMÓŽÄšë”7¼‰ÀÜöënò,;û¼:Ùg?¼¡/n/4ø|•QáÿnÜ¡7²«ý>*l/ŸùåÍÚ¤ãXSN¿å;Þ|KC¥ÆB_§¼¥ @`Ëe½f­•/1„sßï)hQœO8ö†ÿ¢üå©;Rlâä%‹Jãý9³Ò÷£_´_¡E¼x4ì YñòB ½Ô[¡Nõ‹Â¸s´;}úöø7ÝÈ_’Jº©ÏoðýÜw~þ2KcZº!7×Õ+]²¶¦é÷†½ž_¯øê—4b‹=Õäž·>ÛBWû˃¸³f­ñê={×ê¸ýÞ'cMUÜ"¿h ÿñ.š?§½»rÊ:î¤>tUúÆü†[ %gå­‰ÇBßôÈ_“c®mˆ¹maÀÜ9îÉÓ»šê)÷çQòl»¼zùÙÕ~:¤nM±2V«­Œ§´>s‹§–¼s«ÍÛ¤ ‘x4äüÌYhe¬ÔÜ–eHàΓg; bŽ“àgÓ#x³*¿AþUVµï‡ò’‚Å!+Ò6ÊŠçÌ ]»+³Êç“[ Нջ4'\²6fZ«4–¿tƒ3¸»ìseBØRçª-žûŠšÅ ÒÆäŒJß ›çrjÄ/ ÅsÒÉF7·IlÍ­W|¹1q§•ñ„¾ý$¤Û<³@`î¬nƒº ­­­‚UäøÑë]5ËÏߎ> ¥gå­Ie¡oz¬Ê3×5ÆÜ‘ @`î¼ÉA£{G®öÔäÕ‰ÿ¹-MÙÎJœ_D®OÙf®­Vß±™pgÍ\áÕsÖZ¯´ìJù{·«‹sa³xÞ°V½KÖæt‹¶ε 3 [êÕ;r•×òâñ¶-EJ;5ãe®qHÙœf{BÏ ÐI¹§8öð)pžYØ,ÿêv©ƒa_Lµ}ò†të¸ÃFKC•š “²×Nëî•a/Ï­•~;ƒt¢’j{ôi§Œ……vIû,õõ,I:+Ï4箊<—{=ÓskÅñ ÃykjyÐ?f,KÙd—´7Á‚Àt^©NBØRoÁÑ`ûax¼øŒxñ—††¢ù%ínÍIë¸#Æ› jKCÍMV­Ú¢=0„€;`´×k‚o±W¯Åš‚Æ_¾—Áô3ÎÇlÝo®;­¹Ñ ÏScŽ©&Ï:0ÛT³¾{¼ñŠÚýZÐZÿ‡GY c4€;ÀÑè$/tbØ#;˜ß ž+=ÛÞOá–fšå­ªí±§ª«T7^ò(ô}rrèÈÇ^S {lœÏM–bذ1^Cú>ütF¸<Ó];•M7YÖô±úݲ¹é§äÏ«ϵ•zsᡸEުݭ=ni(“ŽT½¡%I/yy´ÑõûÍË.­ÔЧ }bEpÇØ©m„ØýAÂkâäþ¡K¼l »½¢ãzíH=!þ5«Jü4¯^üú†{1”½í3oÁ\3mSômFèÀžµ{Ip4Ú³ÖÊ…ÖÖVÁ^çø›Ùë審·¸Û÷x&åÕ‰ßÜàñªç£·Äî·4×[jnx†aèKŽÂЗœnºyqºðÀÐç@àn™à÷š Èwô{}…]­±‚r“÷kÉeâÿ–^oyÒÙö%LÅgÄÖìjŧá+£wXêv- ×?-éEïÇÇû 0ýÚn·X]»0dÀ½ÒS[&eÜ+?uåò£ÿ„üñÛÜZñóœù»§äµú]²b›˜àña;fZë¯èøl¡¯½bCôhŸ%!/ºçš¿èž3ñæ*wâ‹n9“žžôê §&±¤ ¸WœãœD­qI9æUžzÜóXÚI¯Š´“²?¦ý>¥LÞ¨ß-/ŽÞ$W/òí46Oj¶Ë„g§'Ž›8sçì+CÒ!ekªMüÁ¸ö^ uJ ]•Ú\S®5W_»ÌÔ§5fêS?ý¾ê„~Bض0ú0÷20Ä; ¯¸Oîin=bJˆÅî©£æx˜‰ynJ=Æ>i1®wÌ&¹²ØSpÐÛ´½fä4Ý+¦Àð£†:•CÊŽ›ø=‰úÓÛ„½ VÆŠëöl°Š­Ô8g®Í²KÚ•tåß™^£¯ÑLФÓ3pÏÙklçX;ÁÉ8Mð-tj sÜ…Ežm§,ý؃FMß>ã§K’ê•RX°ÐW©­c,Uêëíq°OÞ—`ØvV»;ºÊ6áˆñŠ¿oïôL`:›á“ƒ_˜¶5ôÇáÆ«Fee,×zä­Éͪòý$¿Á÷‹°Õ)[¬Œ5jÐÉ=6V|zBØö@Ë[ ÒìCØê¤m GÂþPÜ"^,jQ\ˆ;4󬥡RC`:¹!ÏÛ>öÚŒõ~ú*Í­üeÙÕ>ŸJ§0µu‘6=fV¼g{ ŽÀtr {¹ß«Š…îScŽi-u7¬ŒÕj×ìÕ¹³7©Žç7\Ù,.¯Îï÷œe {Á-Kxx”å×׈æÚÓÚk„:•…¾N)•¥¡ZmWfX”³J³;¼)·Öç?ÒR¤Ëa¡øŒx)¯ÞçóY  @'õŒAxø¹i½^p˶™µ_y½Ù›¸“:ûäCqnÙ›3‚–欌Ù}:·Î÷³Â&ñÂg¤°UåóqäÍ¡é @'ÒwÐpaØX¹à6÷Ká7¯¸>ð¼sšÕĈݳL7õ×Üðl®kPÎX–¹Î°/ª!ýTÀ;…MŠsMâù…VN­ï'NËó¬Œ?˜± 0ÛSfÒC—!ÏÛ=4ÊÖøü«â×ɳF_/,HK‘ì’ö&&ŸýSñ™ÿ.;ºVIÏI;ô¶cÚêlú0GWS`ö²g‘õ¸“"vGš«ËÕ–Æúënl¶ÐÕ+#×ÇïÎoðùâç‚TEÍ>碷hX~´‚Àt\}?Õ÷eïRë)ÑGtº*m{“¶Ÿ?É\×£Ù¥jCì>›¸k,G"0÷_`ðÈ_,†ý\`È©ñùÔ%kC¦¥¡FM`~A*+ÃIaÿ¬ºŸ9éb‘Ð7íË ×ïç@`î«À`®kˆ ^–¾!¯ÞïÓ뎱.n·Mü)ø ]ƒ2xyÆú놜ZßO=óWæ[«ÕàW,õuJçÌ©åÁ•NBº",œm[ŽÔªÛUû³Ë‘ À}Úº<7Ä.Í_‘Tò§‚FÅ9)8äÕù|‘\úGý¾èjÏüUy×ì½@`îïÀжùÙxZãš½--deÖÚ˜­ú#þ ç,tÉÚžf—t(ÎB£³ྠ–†º¶cV- Uj›¸r¤¯Û¿G`~åá6 0 0 0 À À À€À€À€À€À€À€À@` €À@` €À@`@`@`@`@`@`@` 0@` 0@` 0€Žj4“"÷„€_m`¨Q™«Ë•¦ŠùQE›©N('„m zx”ÕcŒð+ æÚŠ˜ç]2/8§›¿àœave¥›?ëÿÚàg,`4€_g`˜ý”yÔäÇÆùtynz’ðãzÆÖ ˜ƒtÈÀ XloÞêîh`>9¤+Ÿ8Љ zfôƒb~DTðòô-ΙÛR-ôõÊ;´èò²w‰pe /¸¤ ƒŸ6c0€Žæ¹éS†hwxÍI9ôNÐÒÂefšæè;FNÓY=ï’ñà nÙ®(׬Ï:$ôüôÔnŒÐÁôúҮɪ>sK–Ú'ïO¸3 º*Õ¸àÑcWÏüI¬Š|EVê3x¤ù£ŒÐÁÜ= ×®ºË}hÜtØÀ@§g@` 0@` 0@` 0 0 0 0 0 0 0 0 0 :©ÿî/EDª5@%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/tEXtSoftwarewww.inkscape.org›î<IEND®B`‚calamares-3.2.20/src/modules/locale/images/timezone_3.5.png000066400000000000000000000063361362604102500234250ustar00rootroot00000000000000‰PNG  IHDR T‰=»ÈgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“ pHYs¢¢EÝ1¢ ®IDATxÚíÝyp”åð)V¥‡U§ƒ¶Óªôòª¥E)–$$äÚ$›ÝXa´¨€€€\ $$ñjm«µUDT9!;íô˜vZ{ŒZÛqªmm;Veû.µÇLűÈR?Ÿ™ßd³oöÙ™ç÷Ïóç}ò†pØUn,³Ê ×Ü›ý¯÷-#Ãå·1Ì®ÍÛ&Ý=6 5ÌdÀ»É­¿¼4ÌydüSVeµà¬_¹cL˜º:;\÷p^úò€Ùç},ºþÑ«—i Àï2³Ê;{qWéúE¥·Í]ŸZ*õýžÞm8q᎒k–vÇ7×n-¾9 Cx—¹öþœ –õ&žlÙ—ü[6-ì(™_·-6¥¡»lmsoâùÖþŠW£À°rʪ¬÷¦ÿ~Úšœ·6þãBU[Q¸~{,|ëÉ aù3W„hìPX®É€L7®êÌã{Êû¢`jíO¦¢àðbT/D¯÷ßðDE*ªýËö&žªÞR4iÆÚÜ!m©™}–¡rSA;ïÓ®[—7´rcÁ±3׿ž0óÁÜ“£ðqLgjNˆ‚Ékç'ò42щáC–ì*kÂ+¯„×­e½‰§æ®ÏÏY÷Ò”pýŽX˜²2+L¾gìëŽ9ëÁÜPÕV¦®ÉRÕV”[ßYzã¢ÇKW5tÇw/ݲ¾³äÆêö¢ÑQ…ˆNøæèÁQ¨Ð È4ƒ† P¹±à’æÞÄÓoZû+^Ђņ…±²š­Å#cKÎ=zf ‡þ=VAÝ9áêå_Šø¡ 6žƒY=å?MïR¼Vÿ+½kñ| ¶/ÙYvOݶØ“Vd½ï[ÏLãkÏ>0–ó!.¾yÔqÑÂ}ë›í2¤oYŠú/D!à{õ%s§­É~ï W8Ÿ°´'žjà„oŽ>aÆãÆÔm+^ÞÜ—øÃ÷»ÏDß¿¢jSÁ¨pÚà£nýùeaÕo'j d‚ª®âôyƒË›{¿9˜~ºZú’ˆ‚CÇâ®ÒîˆÍ¨ï,©nè.[Ñ´§|GSOùw£`ñìÁŽõÏ0÷݆]ñ•5íE—ÎZ›{¼Î@†˜xç˜cê¶Ç¾…†g[û+^9è…þ¾äË-û’Œê/éEÿ[ ÿU^W¤¢ð±²òÑüSt2ÄüÍéóï±67ÖØSþ‹hñ¾ÿm-þßF-î*m«i/ú¸®@†¸éû…Tê—aîúüÂe{ßøô¡®E¥ß˜óÈø“t2Ä´5Ùaú}9#v•ílÙ—|ùp……(¬YC M^16\{NyÕi«·Íií¯øë;šzÊ•ü ·>úº‡òèd ônCu{áàš-E3[û“/¾c·%õWìoÚSþƒêö¢Ù³Ìý€N@†ºfUö€ÙëòF,ÙYÖ…†ôbþ Í}‰?×mM¶&çX]€ VÕVxtÍ–¢‰»ã+{Êïkì‰onÚSþÓCZû+ö/ê*½kþ¦‚á“ïÉÒÈd{S•!•º3|¤ðäÁç]ùñ÷\u×…'U·.íŽwŠÀÐÒ—|¥vkñä/ß2ʳ Ó]8ë“a|õYá’[F…Ën=?L¿/'Œ¯=g@U[á…KwÇt(Î0Dã>…’‘éïO?zÚêl€#Åuëò”{²†Ön-žÞº/ùê¡xâó¢ÇK—Wµ}jÊʬ!Ý8Ò¤À‘äâG…Ê[²³¬óÀèÿyhH¾¼tw¼÷úí±š( œpÁ´&Ž“ï&­{ô‚Í…£ºË¾Ý´'Ñßrvš{¯FÁäüT*Ê?gâàH†°´·<œÿð ù› Î[ÜUzÓ²½‰g_ï£e½‰çšzÊÞÒ—üÓ[ÚiØ—L-Ük™¾:ûÔ(0 4ëp„¹ü¶Ñáë?¾$\{ÿ¸ãk+.Yôxé Ýñ®†]ñŽÅ;ËVÔw–̽~{,«¾£ä³Q¨hiîMlhx% ¿>×5smîQ`ðäg8å,83T>Z~9`Î#ã¯Û;)ªçm,vÙ­ç¾ï…«C$‚ͅcw—?ñ¦ÿ^u_òå(\¬ž¿±`tM{Ñð(0 rKá¦Þ›ªÚ‹B}gi¨ï( 5‡Ùç…âÅç¸^ÚxÞ1Ñû3›ö”÷7÷%~Õ/šû’¿‹êÅ–¾äߢ °?}ˆzÉ®²ïUo):;ý™Æ½åÆþÏeÏûtøDÅ)G]³*ûÔ¹ò¿° ­0§n[ìÒ(`Ì\ÜUZ»dgYcCwÙ-µOœ·!ÿýWÞyá?>øAsï ŸŸtz˜º:;D Tµ†(0Ø‘¸ýg—…m©YáéTSH¥îŠjÉþaبaÿUG‚¿V·¦ø5ÝO%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/tEXtSoftwarewww.inkscape.org›î<IEND®B`‚calamares-3.2.20/src/modules/locale/images/timezone_4.0.png000066400000000000000000000116211362604102500234120ustar00rootroot00000000000000‰PNG  IHDR T‰=»ÈgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“ pHYs¢¢EÝ1¢aIDATxÚíÝit•õÀñpi]ª¶‚(›"BÜ$@HH²\Â&‹„-ËÍÍM „M@Ön VEŠ ‚Ziq©‹²p}Ñ3ÓÓ3s:§Î™9ö´gÆiÏ´cmÍÜk‹ÊL­V#ù|Îù{ŸÜ›ûâyÞÜï¹Ïó‚øR\—½ìš·ì‰¦V×—§VûÒ'Tq¨$aÔ¢QÝ3jZ9 Á‚A0ÀÙ«GÖ’®‚8C0, €`>s0,é:pæc‚ø”`Èn †JÁà³Ããñ`8ÿ_ÿ¥O(* ¹jÕ=³¦Û€é/UŠ…*~é3´ôùŠ„ÌÚÑÝG. ÐÜtI.nÛ3guf¿¢­}¿‚é¾;ýêÐìž]†Î Ð 5~Q?÷+ž64C]Ñ#øV‡‚K:&~EÓ/¸°m÷øts0hžZÙÀ™´± €3ñ 0vÙè¦É®N²ªF4ý-ùæ¡ Ð ž‘ä­È ‚NA0º6ûª§¤¶»ó§%Avlx°ðÙ©Áe×ô¼pêæü wéh; Z‚üÕ£ƒÒG ‚ؓノ) ÞT;ꆄ›z_0ùޱՕOänŸP7&ÔcDÒySï7*¾½~ܲѽ Vå¹Y´`YöHÁ’ª½ã×,~¾`÷òƒù¯Õš>{À…?kx<>;-Vœj'ÀÙj†±e+^.ü·u'ÿ¯{-ܰñÍpÃúWì=~7¾ýþ†7Nm7þ½qÖÔþ׬r—[™Ö~ø¬ÔóœÅ¦oÍ/_~¨ðŸâQðþŸ¢àã³é­SÓø<Üz ÿí[oÚ†Á‚Îb™å#;M¾=7?öýü»VׇõñXØðz¸á¶#áwW ÿgc,ÄÃâ·ÅäÝ>dNŸoöJ¿¾µ`€³ØÈ’ô`ÒÆÜàÜÎí¿Ù“·bõ±?GÃÚãáßÖ>›ÿlé#sæ|oÜÎõ¯¾ÛÑ‚_eD3sGFnj´±ÿ Eè5®wV<ò²’‡rçUï-øþ‚§ ÷—?2nþ¸7]š•vÞÔÍc6¯©/øõìGo@xà•×g$ÚiÐ’Œ]œ´|^Áʼv“ïÌ¿ªGưóç>RäÔ¦¶.\›Þ§äá¼Ò##Bú¶kµâ'÷ØaÐ’dVf£b™Á´ÍùAñ¶‚`ì¢ì`ļ‘Á–· A¸.÷‚ÐŒô6wüûÃvð¡oÁÐÙý‚é÷Ž ÒËÒƒ´ÙÃ퀖åâö=›àZµ:§uüáœýßx­u»‹‚+dn\Ù7Ï΀–¦ËÐâ¶]‡E†_Õ/ÿŠ„ÌÚÆí Kòœ ÷¸êÆ—Û´ë;²]ÇAW·¿!ç¢ïtK±Ã %IU{uß [+’¦íœ|]ö²Ô®ÃÊûtí{C~í°Ñµ¥óòWÇnýn´wþ]é—wO»¤UÐÊN€–¢GöÒ.IÓwU¤ÄŽD’#ûKã379r >/–¥Æž©»úž9«ï¯KœòðôkBs»olhz]\wÓŠ ÛˆÊ Ó )M§+µí‘\Ò±_pÞß>íó/í< éõË»¥_Ù+hw]FpUbAÐ%yVÐ!©(èмƒÍ:¦íФV×—§VûpêËSbGËsVí\Y²»lÿÌí‹÷ œµ¿¬ï„{s2v½.{Yûî5m» ™qYÛ#.އÀ7Ûœwáùñ;§ñ3“¦î b?nnÇE\ëK:ô» u«6ç5¾~î—i§Ä ®J _Öþ†œ‹»¥W;ðõ †ÆX8)ÜpÏÆÚçgþxå‘¢wgíXöÈÈ›ó’#*?Q–4m笤©MOœò`Q¿‰÷í[´5«ÏøÍ#û„ïN»~Ìʤž9«zõΫKì¿©ÏܵCú„7¾¡àŽôøë©}‹¶dô°5»Ïø-E×f¶>çü6¹[Þw  9Iž= Ȩ },â±Py$2ñ®;6/Ý?õg^P÷Zá¢OF_L‰í¦V/kzß©‰|4±#ÑPôåÊxPÄÏÙWqã¬'ËÏ}ªbð¼g¢Câ“RùJ49Pª8‹?¯l|jÕÑÈ€ÎKU;øŠ^Ù­hNÁ0g`ûQÕ)㲪 Bùkj¿[°a˦qkïÞ4s{õ–šúöÆ7 6¾nh|¼íȤ_oéî‘‹ž©I«>‰Ù/O‰ýå)L>•éTL/ÿ‹°øókU§ÿO<*Lß5ïÊ>¹Ú^Ÿájjh.F”§µrgÖÊå‡òÿeÝɢ߮;9ñ7kŽOøÍº“ãßÛøFøÃXøpâÛïYôÂ-ÿ0gWÍÞ‰woÜ’µìû‹S«ŽD>ŸuB‘¥ÝGÎOï6"& ¹È¬Ìl5ySN—Š=yÛV ÿzíñðûë_ 7lxýc±pz8|°áñXÿZøýšg‹ßÊ]ûàêäè‰ÒÏ ¡ŠC% £êžQ# 9™¸!'¯Ë¼jyó÷_¼ø¹‚ºe/æn[ú⸽K_Ê}õ±ð¯7¾õéñP÷zø5ÏÌ}müí›oQóRìoÁÍXÑúQÁ¼‡ ‚U'¦ ¿lüӹפ¼ü¦š¬A ŸÎ¸îÿøÅ¡îõÂ?–퉾0²v_MJìx™`€³\Çþ‚”™)ñg×^X½7gÍú× Ï Ë_™ôΔ{6ÜÛxÓ7§$@ËɆ`b]Þ€…OÞô©§$6¬xeò;Óï_¹cØü—*Sbõe‚Z€Ðì¡ACÃAÅcy“V¼~÷ãÁ°ödÑßzhâ/Š·/Ù“VÕtíBÙçZ%I0@ó6hÒ€ hí˜`Ý[³ƒŽÉ}¾U¸jÌðÚgó«{ãôÓ‘·+XrdܺÛï̾õ¡iÕ£Ÿ{YUÁÍÓØ[³‚+º}§Õ“|{ÂÚ1™Ñ' -y!÷­ ~²öxøw§­¾æxøfíXþð%oÌý[/r ð5QT7¦ã܇ Ö/Û_xpÕÑ‚ŸÇƒàwM«"}òº…ÖŸÿÞ²ƒ1õ¾•Û‡”/ý"bA0@3V|^÷ª½G7¼q†¥Sãá°é­Â†•‡'½s˶¥g/|鈅/V¥Ä¾˜X ÐŒ¥ÎqQÉΜÈÚ“áßò ãß_ulÒ¯n}yêÏJ÷Ìß—^óô‚/ê4$Á_C¦ n¹7÷ºO¾Ò¸Tê¦Q8õ«Âäw¦Ý·lgÆ’'§Íß_ùyWC ð5”2'ë%;s'.ÝþŲƒ7ÿ¼ê‡%G+÷FÌzhéî ŸŸ;QúyWB ð5Õ鯙—öŸP›?fù¦u¹kw­L¯}zÁðÏW ›àsÝM0ÀY !kQçÄ›w”‡¢õe¡ÊeM×)4…B}ùß;4s=²—vIš¶+’Zýå‚`€¯a0¤U/?õ«ÂŸF0@‹—Ysu¿‰÷ņ–¡Š‚Z¸‰…\<«{÷ŒÝ»\Ð=!³¶ÛµÃ£I‰“˜œV}<" {«¡!høØ´»~TÛ¾E÷äŃ¡B0§¹*±°mß ÷ @0gpY—ñ\ÚyÀ©é”$€SâqpaçÁÓ{^“2¯×©™ÛóêäÙƒûm½ÙEÏÐÂõµ¨sÿ)ÛKBç…"š&9²¿$}¹Ì²ªÐÒƒáÔÛ*Üé8S0D Á@0‚ ‚ƒ`Á @0 ‚ €` ÁÁ‚A0€` Á@0‚øR‚!V_–;Q–ZU_&@0|ô%>% ‹ŸªÉY½mMÆâ} ãA0€`ˆO}y(z82sûŠËL~{öCKw)?Q"@04Mr´¾¬èλî,¬ôÀÄ»oßœ=Y*@0|4iÕ‡#Ê6>º†ƒU’Á-FîÝïw44ÆgÛg˜ûãsw|²ǃa§`€³Ñ½G_ÔeȌ˯N.nûÙgÖå Y‹ú ˜ñ¨`€³Q·ôذ¤i»f*~¢$iÆÞ¹nyrîÀ™— *þÿ§ñ}7ÎÞ[ª8XñUÄ‚`€¿³ÙKÓ“#ûç¥VŽä×Ý¿>gõŽÛ†Íå+ ÁÍ.^š—¹ä±%‹^˜öÓª}Åod,yf`>ú…aDͳóç=2ßÌíKvXøR•`W99´ô¹ÒPô労ªçªR+_Œ…¢‡*·ÿšI©l<}é¨`€³Q×Ô’þ}‹¶æ%NÞV˜8i[A| ›žÿ•Óÿ擇”þ(’Ze•$8µŽÏ9ë\;¢²«·ŸªÇhwzÎ Ù‚ €` Á @0 ‚ƒ`Á @0@0‚øÒ‚!%V_ª8\Ši|.@0| •'JsVíZQþxåssw-z"sñ¦ÄŽ— h¡Á0|ÁþÊ‘‹ö-h| E_-Í«»·násÓÿ1öƒyDzn}liJì„`€– C#ÇʦÝÛöE/Lü×Y;ïyµdØüCÑÌ%{k3?U“V}8â”$h¡Á\q¬lÒ–M[ªöÍ~uÚ}kZq¢´éµX½‹ž ¥鋜–‡¢¯DBñG«$€`°¬* Á@0‚ ‚ƒ`Á @0 ‚ €` ÁÁ‚A0€` Á‚A0‚ €` Á‚A0€` Á@0‚ €`ƒ`Á @0 ‚ƒ` ÁüÝ‚¡B0Ÿ0ª¶sÿ›·—¥ÄŽàtNºäºì¥YoÙý•œ–$ 9CRQÐ3gU‡ÄI”¦V Àé® À§é<èæ‚!M0©cÒ„s®³"¡ÿ”íe®aNsMhNÇÞyæ-{!’Z%€¿àÆm€` ÁÁ‚A0€` Á‚A0‚ €` Á @0 ‚ƒ`Á Á@0‚ €` ð…û_ _Ò@¯82%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/tEXtSoftwarewww.inkscape.org›î<IEND®B`‚calamares-3.2.20/src/modules/locale/images/timezone_4.5.png000066400000000000000000000052021362604102500234150ustar00rootroot00000000000000‰PNG  IHDR T‰=»ÈgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“ pHYs¢¢EÝ1¢ RIDATxÚíÝ}lUgà·ÁmJ¶1Ôi”Á²ÅèŠcŒò ¥·½åÞÛ[¦‚›Se|¬”hË(-¥eš9·9n ›P„¶0¾)¥¨Y¢Sb£‹‹ÓdÉX”L®§8]¶ˆ Ï“¼97çœä&¿¿Þ_Î9ï]׿=8L~ü®0åéáYÓ×̺íîO .w±%Ù!¯:;ôMö=îèñ®÷|éáÁaõ+÷…ù/ŒïYÑK”ïÈËù×ë=÷ø·tqSž¦®¢É8™y0|ëgÃ’½…añî‚0wkn˜ôèP²nT(Û–2™ÃWòáÊæ‚i+޽^w(Ù|ïCÏ=b˜½il¨ÙŸ ÇÒ¡æ@"TµÄôµ# ]Yªá‹aâ7^3sÃèÞ‹våO¨j‰ÆŠ¦XöŒõ£oŒnÉJ6 ì>k㘛çl7pé¾ ÕN¶=t¢8Óp¬èdùö¼Âž¦>3òƒ‹w ¨nÊFÎÂùýKÖŽ¼NÂÐE}*vcç“€n‹~œ?)*[V´¥^­oKý¡þhêWˤNDç6-ÙSX¶ì@â;µ‡’-µ£¢ÐQœé, o†—JŸ‹ àò±ùÕ­…[£û›*› ÖG…cÖ7~0¬§”à—jßKoOß˶憖Li˜ôÈà¬û¾Ÿs}íÁÄó%࣡=ýÆÊŽô»_;VôZåîüïÍÚ8¦paSlXT†Fã Qa¸}Áòzõ¿÷ÓYÒ€KÜ_3‡Ç~9éÜ· s·å†Ð;+köÆ17E“üÄÒ}Ö¬lOŸ~¯Âð^#*gë'_œ³eÜ û8ª{TB;Dˆ Cèü½`{^(Xš-|¸ÔÍÞ4榊¦üÏU4Åú”¬qCéæqwÖJþ´ñxúôÊŽâ·þÛ²p~¬hKýbþ ãóflu]̬ £CUk¼"*?_v0y¤f≺ÃÉö¨(œù_‹ÂùQß–úuTBî–2tQ3Öúøò#Éݯ½ß‚ðŽo^«Þ¯¹aôǤ ]ÔâÝS޽r1JÂÊÅg;÷_¨?’ú]ÝáäOʶ原½iŒ «Zv ±ªñxúÌE) Å™åGS/ÏÝ–›\¸=¯oÙÖÜk% ]XçFkíé7.Ja8ž~³îp²yÁŽXÁ“§î ‹vå º²ª–ø¬†öô/BYø[ÍþÄæÉéÕ/§WVèeU$èòîŒMlh/úÍû- ÇÓ^´+ÿ¯l~«þhêå¥û&¬«j)è\6õ3ó¶åÞPÑë9ù±»> Q¸ŒäUg‡ékG]_³?ñLTÞü…ál}[ê÷óž?´|G^÷²­ã®nÍ”žû¸¹²¹ L[3R p90¥o·ª–øœ†öôŸ.äU¤eGæ=ÿÏåR+šbaÄÜφì¯õ$\Žî(éwuuk¼´öP²uE[Ñ«ÇÓ™Æöt¦áXÑ™èx6:÷—ú£©S˧^ª=˜Ü\¹;ZT®²\†•Þ–U²fÄu;c}ª[âC«÷Ä‹£‘¨jŽ©ª–øÈ%{ U5Ç?_¶eÜ'ò*o¿jØì[-™ W‚¡Ñä¿ôÙ±aqsAøîÉI!“YŽfÊÃs§KÂo3uaÕ©{:wƒKö†ŠyaêêááëOæ®4êm(j•ô ÍùHÈ0; ž~Kè›ì-€ÿƒHé‡Òz%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/tEXtSoftwarewww.inkscape.org›î<IEND®B`‚calamares-3.2.20/src/modules/locale/images/timezone_5.0.png000066400000000000000000000370561362604102500234250ustar00rootroot00000000000000‰PNG  IHDR T‰=»ÈgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“ pHYs¢¢EÝ1¢<þIDATxÚíÝuxTg°ñ“P¬@¡´¸÷à„¸»ÌÌ9'!B„x2’™q÷ Å)Öâ.Å-HˆíÊÛí·ÒÝ·]··[/ÛÂ|3¡ti—¶P#Àý»®çš$L2pžü17ÏyÎðXåšÖe¼_™ÒÁРvHkÔüèÃР™²6q¤“ö)f î Ω@0Ü=F»e Á@0Á ßS0$ Áð5ÁÞƒÙ‚ €` €G<üMÁÖh †&ÍÆ ñc½r  Ýƒ‹¡ËxßbÉN[g°ÓûÏH½ ÿ‘ƒ¡;³´3ÃæFw᨞f¼ÊÍ*xµ{ÛZénz¯œ›|\G0è`ïž³O5+vOêzÁ´[ÝúŒº÷#ô<íóa6Æ3gøìؽ÷ ZÓƒáþ‡½á’ÎjÞšÓ뱇xHXŒñÌ~îƒA;7åDòìØ}1sâDß÷ˆÛ=QQ3o”‹¡‡xÄ‚Á^_Ÿj5oôìç‘ý'ùõí?ù>‡é{úŽs¦ÏXWK;ðÈÃEý´ðþ=‡ÌèÙo¢·ðm†)„>c\8êÀ# aý{ Ù‹Ã w†!3€`øï`˜¾Á¿ç`«ž6€` ‚`ð]ƒ!Õ¼‡`†» ;‚ € N&‚áËÁpÁ0-l½ßS& ÁðUÁ0‘`‚ ‚Á€`@0 <êÁÀž‚ánÁºÎ¯{ß±OqØ‚á+‚a Á @0 ß&†ÏŽÝs_ÁÐ¥ç ¡ëÓC¿0žìmzì5# ©/Gxˆõï.tï3N2+¼Û8ßb7ëÄ#‡ô¯_]ø<ôu¶Ú³i¶Ú3i·o ;m]Ú¬è ÇùŒXeN½Ok{23ôɱÞù.sŽª=ògE¯/Ø¿%ó€¼dÉ2‡´‹wYmhÒØšÔvú&oɺ ¿’¥‹]2·æ;¦Ÿ28¤5«Ó›5sâèÇû•Œ#€‡E‡'ÚûOô1ÅBžƒuâa]j½VU½¦&ÿlØï χÿ!egB½WÁº2ÛÔ«Éö†fõg± vÍ>žîU°3ß)ó”Á1ý‚Î)ódškÖî\ç…ÇÒÍn^¡˜·Ÿ`V F£ðìh‡Îc½ómfÇLqË9𹶸ŏÍi/kvÇ7%lÕ‹^Ÿ¿5|Õ¢ÕÊêMåžù‡²ì ;}Kвj]åü5™»C–—¯ó/ßQhŽ{ÃEƒ¡^ko¸œbŒY1‡tã|KÇ ÀC&ðù…gÇ8uã™3wvì¾çÌ:}äºÒMåMÁïU·J7j®ˆÆš+’±ÚôXÙôaá¹ð7µ{õ']³e9šÕæp°ÕÕéâ^ÊܯޕrηxG¡9ìõš€ŠÍ¥Që+7øW-™6/s¢Ñ&ý&z nY­æ= G»¥[›b!Ù¼çÀ»è`NúáØ«‹^•‹^ùï±ø'’±è|äï*ÖVÙë[Ŗ&Ùè®&-ØXú’á`̵yË–=o«»–ä]¸¥(îEýáôÃó©ßñ?áËÄWkˆ¢…»ÎU˜ì;IÚ£Þ#l„¡6±BÿÉ~G:ëf™b!ÉôÆ_kohЈµk«Ë‚ß¹[,˜GÍUùFÆ‘¤f§ŒãéNõ:÷Üà ¥ÅË–fŽ»j8ßì_¶¡\Y½®*ò…‚-ó×änZŸ¾?÷ôüß—~›ñ²´+e«X\åíéepy’™Ú™ÎÝû' ½†Îxb”‹~Ú¬˜½Ivú&µ]j³Ú·dgAêþ”‹‹®Ý=j¯É7 ÎEþV^²t™SÆiCì‹y; Ï…¿UÕüAYcð;ñ›ówø•l(Ï>û“ê+A_ûSæÑ˜Ÿ”\ ù{íUÙXÝ*ZÞ(ÿ]³C¹+r•b³´3¾KÞ:tìÚa¤‹~ÊÌè‰æÍÉ^…{󿝮]“y4þªéMý¿¿ju¡¬1äíè9»¬Õ)ò’eKóφ¿¹øUéÖÊÃé†nŸæ¼SÆîœù«Ë7d‹¿V|qþLßóÏêÖ ëæç_”ߎߠXå—ãeç˜èÔÉ7Ë“ Ú“~},G8i&ψÚ+¶.<ûjycð»_ ·‡y%!ãH• %+–xí(0L¹XÕ"¼øÕ[§*]˜ÿ–áæ‚zWÆá„­é‡tûâ›4»ëS÷'4—7Í{·ì’ô¯œãÊÃú½bÒ¼jÿé^i™ é=ÂæI«àÕ1öúz­SÆùTyIùÚ¼³áoÖ\•n|S0Ü:-I2fˆ{Õ%ëàBß’í…æ•„ÚÏNaZܶQZ2=G4š¯°Ty9èã’ú°¿d]𳂺¿Ô\‘o˜Ow*o”?ÐíÄ­W bF€väéa³{̈ږlo¨×:¦7h=òf‡­¬Z[Õ*}r/Á`‚œÓ1?wÉÚ—m›z9%dùâ•…çç¿uûÔ¤¯Ú(]}EþÄ7?ûüÓÜ“âÿÆoðšÄŒí-"·&›WÌ—DuL¿¨ Y^±¶æŠüé½CUKÐÇÚ½©§lu—4®YÇ2’w¦®¸ôÁ½|¯9Ê¥ßkw*WUxϘö 3´Û`hиçÌÖìV×Õ\•Œ÷ò¦¿òrÐGê]iGg'½’8mõ %õ!_üª|Oß›uLlžÿ¼¯—s¢Ó“S”ö½Fmû;uêÛ©mxÀz 5ö¤[ÁpIëS´¹8ãÈ‚Ÿœ‹ø_s |Ó›~ó¥QS÷këf&\I\°±dsySÐû‹î%®ÉÆìãʺ¨•²WºÏ“±ë%Á/ËUʼ„ -Öý©ŒÉ”‘öÄás†YŒvžÓÏ.yE†cÚ9CZƒÖ1½Nï‘·;WYóBµz·öôí}_¹ÂÐ"_×ìÑŸœôjBÈòç—žË 7ÍßgŽŠæ Ì§™žû_?§æŠl,:'ýoÚ~iqÜ))0ÏÍ:¨Â+0¨Â;HQàÚC½Uœ’m™,àÇ6Úy„`1­§v§øBÞé°ßèö¥\ ]Q½Ú#ÿP¶SÆ…T[]KŠoɶ¢ìQ¿¨2EùjHÿ ¯ÊÆŠæà÷’¶e´Ñ^Iö-ÙQ³1w§föLÊNýñùkÊׇ¯*_÷’þHÚ¡Øk%õ¡«¹ôéïƒ?®h’ÿUÞ¨ú]y£øç¢sâïS¶¬XæÛÇ>~®³üÈ&xOfOëµJ¡Ï8,®l–ß«j þ° .üMõ®Ô“~e;  çu^»ó·éNÖ^½ûJƒùë…u¿ZWò¢wѾ\‡´³©AK—.ÓîM9—}2ê%—BþQÚônòŽ´c~¥ë+Ò'^®n•¿ñ LåMÒ¦`ÈtÓÚwc¶€Ù$ßI yšçñ„ªÈÕ¶ä¢ô‡E·/szEþ$ïLä¯c_Ìß!Ö®\œ{:â7ßô¿¤>äŸQëó·ÙêNtûugj®Š7¾ÁïÅlÊß²¬xCÉŰ¿˜/Çú WPºµÊ‰O¦Kf x@Äß'BjüR+š¤LoÒ¿|ªÐ¿Máð›Ú«ÒÍo¼队{äíÈ·Ó×k#וm*©û믖$5»SÎ'nK=^Þò_ æ×Í9!þ,t‘·­{ªëÌð€(‹|,¥rŸqºÝ>q¦7éÿ¯öšü…•¯»ÛçWJº"ÝL;”Ü`««KµÓ·¦Tl¨È9½àµ/~¯dLÝýj摈×+/ËÕ˜¾çö¡¿<_ _êëºXÙÁ]ïÊ$°¹#…¡³Ÿ&øÎîä‘:Ç1ÿŒøæ7]éË£¢yÞ»Ú½ºÓ~¥; íô šÀŠåi‡’š*[‚?üïç}”{:ìÍìá¿)¨›÷·ª¯ØËPÑ$ý+b™¯Þ+ó‹Wš=ü˜ÞÜ߬j º^Ö0ï킳‘¿É?ñFÞ™¯gMjÊ<šÐjŠŽïesô}Ã5ùFæa±Ñ'sî`Ó?ÃBUì.ÌšÁ„ßWµ«àœâÓi^µCÿÈå~¡¹'¥ŸÔ\½¿Íÿ¹bÒ­«&-n»$ªd4ßýùk÷=|£ô’üaK<âr‡ógÉŒßÑh×ñBØ’AUì#Œr™Û%~} ¶ NúiU‹üÞ—/›ÚÞ‡yoEÕe齬cR½\î5]UâkÙñÙŽL2ðXŠ¥~£=ôž£bÖø'–5ˆo.ºöðDÂÝFåeé±Ä#Üh4 ‰/‰‚‡ÞUpÓº0ÓÀý˜b+$mV(³ŽŠ§³)ëJë¥?Ö~ËSÚÓ¨h’ÞM;ð¼z»*%nƒJt×¹ pQ;3áÀ}Ã<›A¹'•Gk®<Üp×S“ZecYƒü~ÑyéEþ±ÁÕ~Ì8púOÜ#ï”r_õ# wn¼®j‘?H|Q\¿Q$€û1gÞœÞ9'U»«[®ÍÍ÷¾—A~/퀸UUì=50ß› îGøREPñé7‹_}ôbÁ|ZRáyéw¾Y®Î®jg‹Y¡öL8p?ôûäbóyþb0´­0´Hï-X«,Z¥ìÀl÷)ñE•®¤^úÛ£ºÂPR/ÿ>bYÀ‚°%ÜÄ ¸_~ÙÞ…çT¯>бPÞ(ý)fm@²O¦{wW5÷`¾’ùnÇæÑ©O§¶!t‡x{A®ô+:/¾þ¨Cõù£èÕK:öÕ)zµRðÐ; nZ~€;uØCp׺FãÁ|×có¥EͧçX w˜Ù;i³hÞÃðG픤ګò'™‡Ug ûá˳< N½ÜSù…ÀãŲwGÁ!ÎVªò¢Ö(„‘Nc…¹‘¶Â€iÄß¶§8&8PoLÈ;¥\šw:pYþiÿ•ù§–çžTì*©—þ·æê£yIÕÚkm7nû0ý€êœc‚Íx›¨9üÂàñá®÷°ðÔÛtôËvºÄ?Ý]’& ô϶Ÿ¢(ô˜dãÜ©¢%¢íØX‰ÎOÔK„èUJÁ*`’0Æe4¿0x¼˜ÿçÜz¾]'¹ÂwZÒf99ñ%1'ãêÜ¢Wö½¦`8è[öÌø1ݬQ ñ$aÁQˆß$ -‘Âò×c„´!ÂÂcá»Æ5ŸÈþ‚s’£`Þ« (ðF8 :õíÄ/ _Öá¶‚\î+$¼hzS½ÖkVî)ÕOæX¨j‘¯çŸ‘ÞRoó n]Í Àw5Ù›|“ˤëk,T¶ÈŸfWmˆYh;¯6°7³ |Á`ék°î¯ßí]\Ý*=Œ÷M¸™sB|%zÒuã¿ ÂüeL*ð=ƒù¡ƒv§wtÅåv7Ê.Iÿ,­ÿh¾9Üíqç>‹ªù“¬£bcÌÚ@ŸàUAxŠ ~êíuòŸÛË›+š¤¿F¯ ,[°Æ'­ NüYÑ9ù×Eçåßœ_-8«:[pFy:í€jip•ßLÓ_ß"b…ŠI~(byÀxÃ>ÕÉö e—Ä_z¥¹»yÜûIå³#WHŽqëeo©Ì†}¬Û°9áNCϱêj &ø¡M²í«Ýá·´öjûØÇPZ/¾¥,ôP+ ¼Fêö„1k%!ñEY] øfz žz7Á1Áž‰~ öÑsºk¶û§•5Hµ‡û1Ô\‘>)¹(ýmá阢Àdž ©Üg\ênÅ‘š«ò§íær©ÍÒ»éUÇ¢VJÌð€<=z”0+Ì~@âK‹+šƒþÝbÁ.Æ‚:åe›(»1Q«Lð ØDÙ›ƒ¡ƒ\îåš~Pu¹öš|³]¬.\–>4ìW¬5ý;0KÀƒ  O½sçèÕ>ÙǤ_?¨«$™O…ªlß/kþQsUº^Z/ý9tI š€Ný: útl8t]ä’uLº\sEºþ#Þ˜ÍXÝ*ߨj‘?*kÿ¤Þ®ØRíì¹Ìujì:¿¤¤ÍÊÊ)~VØ)àpÑø ­ÆU‚ÑxDˆ^ío—}\úÕ÷½ºðùÝ™ÍpM6V4˕֋¿,½¨úIá9Õ‰…G‚6¦l“ŠBj|l"gô2ýµ,ŒÆVaV˜k‡àšÀŽÌð€X©fw­u›«Ûé½ÚO[Pô×ï ×nŸ^$™ãàÓâ ò ÎH¿È?£x9ÿtàfíNe¡²ÐËÆEí2^èѹ«Ñøº¼UÄba´óHa„Ýp&h&Îy*nwni½øqÞ)å[•—åït:RÎqůÒölI?¸Ö°×Eú!ErÒÙ;t‘ÂfŠÂº¯ Xt1½l‡¨•¢à®sžÿŒÐñ™ŽBǧYHÚŸ,_!j•j˜a¿xøû9ýH2jw´zgºŠ“l µ™ñ”Ñø†º7Xˆ\¡Ü´ŽÂ—1Âhç1¦Ç±LÐ^=ñÌ@af¸Ò2ñ%qvîIù×ßÇ]Í—b-8+ý>ñEåVE¡··S²K×Éþ8ØÀCÈ"¨ÂcdÚ~åîš+òZ` ŽÒKòû ›Šó½}}³<­½2<žä0™Àaœ×œ®Ñ«|Ô•—åO¿§Ë£ÞÌ9)¿µÊ×Ûô–> =ïL6ð0°²¼3\ýþ s0<½J’{R|å{‰…k²1û˜êWÉ›•ê *ŸAOzÎ2zµ¿à¦uæÀíÝD_+A½]̘i©,òé½Ê7´à¬ôëš«ßÓ½LÁPÞ(þ+÷”x2~c`ŽXê1Í1ѾkÿY¶BǾƒ˜ =éølG¡ÏÄ>‚}œ£ç%d¦Ùu›ÿ¼¨ß'í.kþR{íû¿ksMÛ]›¥ ÏɯÇoð/õÏqîÏlíŒÑø¡i…^ã¦?9pÚ8 ¹ÜsBêâ ÒŸM¡pãû…»òFéÃØµ¾ñÖá]§KöL Ðxê]„Ä—æYUú8öV( }fUxD™ÞÀ¿÷c„Â#÷¤ø“è•~s§ËöO03@û‹ÀåÑØuŠ‚`i¹`­JðÏóe’€ vÑ“ºg¾,5Ö\ýq67ݨ¾"}’}\|Ͱ/pAP¥ßpWÂr´«<¨`ç1¤[ÆAEfi½ügó›öůþø¡`~Í;_·¢Iþ8ý€¸/¸Òã¹QÎS8= xPÁ`8Âüa‡ØõK2^Oä’^¯ýWLqðAö1Õ鬣bSU‹ôáíý ¹'åßUx:L—­¹bðÀ¢¡O'!d‘lá•îÞW*³ÖnÎ ùÊ—ï¿`úü¦)$>ý¾6C›7WW^–ÞOÛ¯:º(pVÄråíNåÊüÓòÿ¤îV®O|)ÐN,õ~Ê&ÊžàARy ªbo!z(Ì›Ó1l‰Úü?ÿ‹^‘Ìoì?-©Ÿ÷ôñW5{4góÎF¼QRöçÂs¿«l ú¨ºU4Þï0…Â'9'Å«ñë=•Šlûg§ª¬-ã7¨çD›^aµ®ýs½º`\*H¥^‚u„´ Á?ϵ³TîŸqHq9óp说»“ÏûÔ.qÐOsʨ×yäÏð+Ùï[²7O»7ùbÑycÑù€{ÅŒ¹§®§lóß²Èk’uÄl‹ÿLô{ãÚ^þÅ– »?Î_’W w{Ú….½ ÝŒÎR˜?µìge?iú¼ýìØu¹6ê:CZ“Ú!­Qs{ØšMŸŸÕÇoÎÝ]ûŠh\t¥ËåwÓˆ/E.÷%Wxrà€ö®[¿amÁÐcÀ¸îf8Œ÷/ö² Y™8'þ Á!ÍMšÿÄBƒÖ!ý¢Öü5ŸâÝùi‡›j¯I7«¯ÈŸ~m,˜‚¢¼Iþ8ur•–ósæ×µŽŠâ™ ½{òÙA–ƒ¦‰ã¦Íߨž›r\gohÐÝ öúfµkÖ±Œ¨õ[Ò%5j÷èN'm×Óí‹iM9òç™G¢VÝ*òÕ—M•Œ9'#~e8z>e›ø¼_ŽEÛ Uù/䜜÷ó Þj®}Zs%èzI}ðÛGBßÈ;ú‡ÊËA}å Ã5ј²S{J öªá@ÌU·ŒEYÞY ‘+ým”EîO{˜ =ng9Â>ÙvfôŽ„;CáÖhÒxäɌ߬;j8ýJö‰ß×\•n¶]Õ¥—‚Þ)k~ç›ö.˜ï«u<úòëÂß2Jlò*x©Øp0±1ÿŒü{Íe–—Á¡Wèâ[{&L¦‰Ó„g'<# ž9PPy öq6m_ð<Ñ¥GÇçæÌˆÜ¬±7\úB48¦_Ôù–l)VïÒŸ0¿ñÿ¶÷]¸õ½’±¢iÞ»Ù'ü¼¬!ô毗]’ßÖïU•)‹Ýú˜þ*=GïÕÏjloÓÇ]L£«÷BÏIcܧvû³q•`5ç;ý;Ÿ³}Ff=H2k0“Ü«îCG[<=jf¿IbµúÖiI_\i°74©ýË·県zýû¹Ã³tÇþ†¶«'}wZù”ð쇧¬‚WÆÛëëµw;5ÉyáYCÈŠŠ²OD¿VÝôQÍÕ O¾ŸxøüÎÏæÓœŒ·ï$]{íÖ0\Õ"_7EÃAe‘ç,ï 7˯û·Œr(Ì« ² ªpï)•ÌZëÐ?~£Øc¼Û´§’6DÔ‰­¦89“ø¢ª ¸ÊÝ'l‘—¾ÔoAôê@uÔŠ€¤ÐZŸÐà*O±Äa’\îülÿi“;¬zS#Äm”øEÀãkàTU‡NÚ9Ö‰‡“ÿ;>Ûq.Õ3onèòʵ E½f¾úÑ«?ä¨n•?Œ^­,Š^->¡,ö¹ë¿AQä*oÁU>V©{T‡Kë¥ßŸ—~ù²t,nCÀÊ…GÍ·C¤úŠüqU‹ôŽi¼kŠ•÷MãCÓø ºUz¯ªUz§¼IúkÎq©E³Í7vÁjïIQ«ù-Àc«ëÓƒ…VŠNc½òœ¬©¿*ìR›Õªšõ•Ù'#~]x>â·ç"ߨ¼ôá µWåëêíŠõb©Ï¿\/‹;ÿîr¹—PýÓ$af˜uϘuþi6—5ˆ×ïøþ›¦H¸a7ïõõ̧J™Ws4(+ËVeÿåâéÒªße˜¯zTpFõzøRçdgÁ²‹%¿À·1`ª×.ê`ëÄ—S¿êòªŽiçSݲ÷äÄl*z©ôRÈßÌÿƒßîƒá¬øs¹ÂWékÕÙ+Ý–b¾NšîS‚–'94_ æa£»š4oÙª%ECþf~CnÞLlÞËPÝ*_¯j‘Þ«¼,¾]}EúQ÷6TµÈï眔RxNþõí;Eßq%¤ŠÎË¿ZxT<•ô’*@xj“ ܯ±ž9]'‹K¢ìõ—téMZÓ¸k0ØêZRÂV=¿¢´!ø=S(Ü(<+ÿT·G^ø¢X¹Â7Ô?ÇÙY¿W±¢ä¢øZE“ôÏÊfùãš«òÍo³ÿ íÍÿ«·V ÌãζÏM^Ñ$’}\<é7wdÊVï°ÒKÒû_xÎgͲ1먲@:³ÊܯÉOŒvÏœ93jǼÙqû#mÔ§î M;}kмxUMÖÑàŸfU ]ìï¿I¶ ]¬²pIq·ž'Lr{î —‡Q1/(hwäœÎT6K×ïù2ª¦)kßË;­j.¬_-:/ýªø‚ô‡òFùCó ÖªZä›%¥w ë¤ße¼,Õľlþ7$m–fe“±ä'm?ãÓ’zé×EçTW‹Î‰¯›~ÎkÚþ5ƒgMîí¢µc€ûºÍh~°ì=Ò¦÷PëÈç&‹‹ýçÄíO±××ßZqHkÔÚjϦΎ; ›Y“f?/Æ/ÛsÄWý<ûX;aÁZ¥ Ý$UNÔíöÏ.¹(¾nz#ÿõÁpM¾‘uLj6쓽3<&ûçúOY¤tŠZ­ôK;(©3)dRV$oVEƬõUf’„-ïµ½¦nwíÂ#òùgU¿Wo8º8 R®ð+‹Xá¿%yKÀ)í®€SÑk¼mbæ>¶Ä“IîG…~½¿Ÿ ƒ¦õç]0n’j±Û” Š)ò2߉Šjëñþ%ã†;$|j„oU‰÷=ýÜÈU’ù¡CÌ ¾nšíþYYG¥KU-òÇw‰cU«ôñü¥>q‚ÐÇ2°ÀSK„ùË”BÌ:•ð†Q/¸i= ]FvÎ=!Mm?¿SŸNÂpÇ‚\î5"f­ÿÚŒ—U¿Ê=¥øeÞ)Å/òÏ(Þ,¾ ú[E“x½ò²h,©WýE¿×o}èñ)Û|7ýlAèlŠ=墅 ¡Ñ˜"¼ôÇ!e§¿ÀÝôŸì/ŒvKkû¸×àé‡Ì íÖJ@Wó›þä&£0;a—°à‚ñ¾~æsÌB‡ñ6IåMò»·÷˜÷*T6‹ÿÌ;%_M|IQê“áØw„ýäÿºw„Tæ+¨Š}‡8{¡s¿ÎBÇg;~þg¦`è·Î7¬èœô¦yvU‹h,kTk®ˆŸï‰¸½Âo&nñ ‰]çÝSèÝ¿C‹±P[fÓ1ã˜woý>ïI;]útrìe¹úÏóùe¾JÏAVÂàó„‘NZa¸}‚Ðwœ›`ٱ˷þy3äÙ‚}œƒþ¼B*8«j.o”þ^yYþwAø¿á‹üsíŸuÕxw„Q‚õ|ÛûúÙ#\f[ÄmPØåœuëêM’±ò²ÊXÞ¤4V·Š_Xɨn•n”Ô«þ/ãÿñÈÕ. ]lóNûkÊ”uU­âß‹ëë÷‘“·¹<Åoð#{næKÿ\Ï)áÏÌ7ì—Ê#–Šþ9>Ý®kÌ1!¸$;|›k1ÿù›…G¤W¿zgˆÆÒE[<Üy多«’ùëŸæž ø ¤^ù/Óçÿ¾3*J/)~»ð¸·³<¾YBõO3„­ïe ñ‚„€\ßûþ3‚f ®jgÁ'ÓCˆ\é?L¿W¹¹²Yþèö›þZs\RÜ(¨ øwé%åÇeÊ÷K.*ß/6²åÇÅ?ªl?ùò èªZÄ ÈÎ>îÛ‹™ŽOw:õë$têßé[}ÿtiÖî:çùžöó—ù(²K¿½suÁ¼ŠPt>àfþÿ*/‹TµŠW4©ÚFu«ôIí5é†éy7¿x£7Õ_óÏøæ¥îðè+Ø$àaÔoêXóƒeè"ç¬ãâÏ+šÅ?šï6}ç›ó>óÆgS4|TÕ"~xçÍßj¯É¦`o|aoÃé†).âÕ;»›øüw4ð²®pzZ½Ý?<û¸øÚ—O+º —UÆ‚º€J.)ß»µZþ¤ò²øË’‹kË.)w™Bâ×ÕWÄ¿›W>[‘x>u¿ÛçâIaàaå“íñTüFÿ¬òFé#óeY¿êFpæ} Å×óÏ(Þ)oT½WzIñJÖ1YZlÛ9r³SŒ#^6 ûD×®«hV½RÞ¨ø]Îo—n‘}-8ÊÀCâ™±ƒÛî¿`¾‰›z»,Ä®—†è÷Jç¿ò wŽþìÊHæ°ÈxYùKÍN¿ ÃA÷g+ç ó_tÒx Fc‹à_4¥»aŸÇôÜÓ¾þiÇ< @;7ÂqŒ\5Eè;u–…³Ú½£›Öi@Ô*eŒv—\–ø’²°ðœüÇE÷ æÓ• ëT?‹y!0Z*ì“vè‹wqv¨œ D®ž+ä×ù ‹_ Š[‚)˜ ]ëñ¤à¢¶é¶Ø×%n£²,e«rKYƒôϪùãªéýÚk_¼ÂÑ׬£ÊSv±.–p\€öªcïŽBÇgnob=Ž¥¢Àefá9ù75Wä×\•?½×@¸s”]’ÿ¤Ý˜m¥˜Ó›Ú3KÁbñkZ!yk°Xà- ·yNxrpa’ßTaÐŒçÏ47A,ñæ/S˜ŸmTá_sUúèÛ„‚y3tÉEù_ºŠÒ±^³zô4–ã´gý&}rþóÞrÌ ªH¿/«îÃú™ïyÐm„ä>]öïá¦u¤,ò±[ªðÓí’S3«N›Þøß÷Ê‚y£sYƒôWíNUMÈ¢€Qc=gqð€önàôO( ݳ«ZJ.Š?/¾ :SR¯¨+­W6š>>[rQõ“ÒzñW¥—¤·Êå÷k®ÜÿÊBÛMØZåOsN¨vÙF9 gßðp0m„0É׺£n·X^Ö ý­úÊ­S‡nŸBtûªFwÞ•ù~‡)4þ™ºWµf^µ;w_6ŽqŽÂœ°Ý#WÎK?(î®n•Þû6ap;2ªZäO«[囵WecY£üaÆËÊUœÇöl{1K. )>/þ"lI`ä²ß8¨À£"¸: ´¬Aúã—6/ß4_5©æjÛeQÛ>/o”?¨º,ü•§%]–ßÕîP­‹Xæ?f¬;+ À#!z¨Ë>&^(8£©hßÑïQžI; ÌxYªÓìPlJØè_Xà=# £™ ࡆ´&î¼~úü•ÝúŒêù}¼~þãÍ£ó“Oå2­Àà mÑ ›µ`Wø Aÿíkö›à-ا^z˜+ ˜h1`JÀÜÞ#lžd6€‡<nícØ?Ú}áT謹Ü÷ëpH,;t¶èÞgT—¡sL2½þÜÑn±ƒg†ôd6€‡<Ìûæ&×M––yöçÖõ~_¯ÏX—Î#S&ŒtÖ̉;h«­K™úBòH—T‚xèƒáÖiIÚY vÅ™¾wÊô°õ÷õzÏÙ'N»'ÞVW§3½¦ég5h¦…mHåj €G$4¶š3º©óÖ*‡Û,xö~^o¬Wž³úTÒ­»G7 À£ æS“š5Ö /ë&V9XX>ñĽ¿žÁÆF}2`å`0 {ý¥TÓ›ýy¦ ¼××2;|úÜäãq¦ï× À£ éM桽s8f\ÖÎŒÞ7Ú-cBŸ±.÷ôz}Æ»›w Îôzð(ƒ]êyµuÂˉ¦kqæ1'þ`œúT²uâáÔÉÒR‡^C¦uü¦×ê9ØJ8C9enòQV€G"Ò›´¦(ˆåbp1=wÌ(×ô±æ1Ì&v’UÐJÑNw.}FÄæ¨á¶q£Ü ^ÿÚ×ê1`B× Š2ÑFsJÃàÑ †è¡ÖÑãF»/n“NSä.¶š³éæ+&M Z!·í÷u¯5pš4zNÂË1ÿ9‰`‰`67fB¯!Ó„§‡Íj&]LÁàjŠ…tGó“§NTÔØvîÑ÷®§& š, š&M0=/ö?§# Àà /Gž:ÑôtË;Æ““Å¥næ`hÛÖ¨3_1i¨uÔ §Yý×ëôïÞÑ c¬±Âõΰ°UŸNïW(ö:áó»?FóÕ‘úN ¬Œ°QŸJ (Lž$fÅY'í×™.Á<äÁpk4Ýe|ùFnõº)AKã‡ÙFŒ~zøì¶ŸÿœcÜ”)AËCfÇí×ÍM9œ1Æ;5`ÈœÙÏÌ ±Ñœd…x4‚á†y•A[§³ ^4ÒI;t€•bà´Ðµ¡¶š3z‡ôfÍœ„™£ÜuSM/kÙoŠý€©¡Ëãìtç´·‚AO0F04}íŸÙ¥^ÐÎŒÚ73zG¼)>‰©!+ #]ÔCo¿¶•4ßÃN»3uZغdV€G ìõ]ƒÚ.µéžßðÙøÏêÃŒÈÕiãüS?†É3zÏËÐN ]¦åšN0s0Øêµó–­X¢Þe8üüŠ¥v©—SîgUÂ:qkÖï8«.ýº=ñœƒ³ùå-Æù§-KåF0q0˜O5º¨Ù”¿=ÿlÐßc7eï±Ñ5§ÜÏóU•Æúæøö™àØ{„“çÈqþÎ3c¶'O }S’€‡;Ì+ Mjü½¹šÝšºì“óßY¾h¥mjkòýlжN<œ2}þ†è9ñ{âmÔÇÍ—lÕ°éx‚Á<\³e%lÍ<¸ðxôÿ„®\´ê¾‚áÖÐÚëëÍ÷_ÐÞÚ<ÍeU€‡>ì Íj¯Âý9IÛ3i÷hÏzå¿T|¿§$}Õæh‚xèƒá²Ú·dWfîLöɈ_iö$_Y±l™]*Á<öÁpkÂWÁæâ„-ºãuòÛš½ºÓ6Úúo¸/Á<òÁ`¯¿œâ_¶­Øp(©1ëDôka«Š6yïͳ7°Â æ= ûr“¶¥1Œk ]Q¶Þ=÷ðBó× à1†ÏîÅ vÊ8ž®Þ™z¼ð\Ð?#_(~ÑVw%™`†¶½ ö† :iñò%1/æî ¨Ø\j¯¿Ì @0˜ïÔ|9EZ´®:uÒ¥˜M…Ûlt—¾ã†g‚xd‚Á6µ%eÞ²eË²Ž‡ý6eWê ÝE-Á wl|ÞŸµ.oG亢-Î O¦™÷5 Á ±Ó·¤¨jÖW.<ýÚÂcq¯øo)6ßÐ`ƒ¡Iíš}2]^²rqÐÒU‹2êôœ’ _¸R’y¥Á<¾{, À# ß÷ ‚`‚ €` ‚`@0øa‚!½IkzÔÝm ÁШ±ÓÓΊÞk5oµŸiˆ³böÄ›‚`û`0…MÊ Ý$Õ"E·>£º ˜8Ì*xUcz³–`÷`H3ƒú¤nJÐrå÷…½ž³O9-t]0Á mÃ^_¯±N<¬™µ=yfôŽ”¹IÇ4œ’ \% ‚Á€`@0 Á@0Á @0 Á@0  ‚Á@0Á @0 Á@0  ‚Á@0Á @0 Á@0Á€`@0  ‚ €` ‚`‚ ‚Á€`@0 €` ‚`‚ ‚Á€`@0 €` ‚`‚ €`  ‚Á@0Á p/†ZG Ãlb„±žÙ¦‘s×1Ú5Mè;Þ`7ƒf[ žÚe„}R×»ä®Ãmb»ôçÚ`3#ÕF¹<­‚VˆVA+Å)ò*Õ$ÕZ¥ùÑü¹iHÕ^ý&x $€ÇÌxÿÒ®“ÄÅ‘¦7äæ7ÇZ÷ÜÃYbí 5®ÙÇ3Òš4éMZëÄ#Q&ù!€Ç/ºLR-Ž´7½!wÍ:³)ogA]ä‘/”¼hohRß †ÃQý ‚e0|¾Âà”y^üüóËt{ugÅÚÕµ¬0 xÌó-ì2QQ5ÏVs&ÞV{6ÁNw*Ñ)íÚN{:Ñü¹­¶.qvìÞÐþ“|G ÀcfÐ4±Ã éAÏ ›»`ü­3~¨uLÛãgŸO:'bdŸ±ÎÝà13`J€0À*PkýÖ>ÉÙ9gïçùçùfïg?A‡¸lÐÙÁ57\Œ~d@0}CNP¶5L^“d÷Ò8ða–QòÖ«S»øfê禭Ï\ZILZ•uÙc—t¾à:VñûÒºÏØͯÜU°|Ns¬©¶µð§s÷þgMKá336æN¹é}?3isF—Ñ‹©Ó. ŠVf_ÿÁAGGGÐÜ1)¸ó©,Õ”uÙ½Êwäm›ÛV¸þ÷†tZ;óZ¼>ëÛE«3ú [Я[GÇŠà¶e?Zôtƹc üò-‹Rÿo¯±Ÿ²²c¼†€ÎhÚ†ìn—§÷œÕW]ÛZø‹Cü¶Äk•» ~>cSîú OfŒ½8­ÿ´9w‡¿ûImkü¥Š]a X“}ë׸þZ:e`È Æ-Œ^”ò©²†è=µ{ߺÒðÌ›¡¡nߎ9-ñ—Êòþ¥l[Þ/«÷ÄþT·/ñv¨¨Ü•¿ÒêŒ~áGuњРÝto¿w.œQ²%wcåî‚—ª ^¬l,øEøúßÃ׿¯Ø•ÿëÚÖ—ç‡á¡¦9~°’A¢¶%þFY}ôÑiërÎÕŠÐI匿¦ûÔµ9w•m‹þ¶º)örþPÓÿm²ÂׯÏmK¼Q·/qàà‡öDG$’õÇ™›r—LX–~aʽ\]€Î«GPº-2¡|GÞ«÷Ä^½û™wN~>´’ïÍÞ™ß1ieæ¤Ñ÷ÿT¿Év¹i~š&€ÎêóŸ»0(kˆ -Ýyvö®üÞ+0$«zO¼£xmöc£éAàf$èüÆ.N9mÌ’Ô~3ë# ’k1Ôµ'ö.,ÌkO¼^Óÿ·’úÈ V *ì9á3§h=èäÆ,J Æ,N n[2ðœérŠç4Çz¸À0woá«%["Uw­Ê>~ù  ²j¯ìªõàC`Ô” ¤>’^ÕX°m^{â¥w»%©bgþ·ï|*ãÜ¢µ™Á˜e‚q ÔxЙλæà¶¬!:º¦%þÒü÷˜Ç0§9þ“²­Ñ{¦mȹtܲÝïûÁÐ`ô¢´ 8];@§ó•{® >ÖûŒ.Åk³zV6,›×–øÓ{MzëÀ¼öÄþê¦X[éÖÈä)ë²/ñ`J7- Ð#.è:þ±AÎÞ•ÿh]{âÿ%,üwí;8§á÷å;òWM\>øËé“¿ôÍg8³Ï™opŒÄk{Ó6ä\\±3ÿÁym‰Ž8,¼UÉŸ“sŠVf\¨ë}ÂÃ½Ï ¦®ËŠ×dc§«¹£X§Àû5¤®wpó”.#L9½|{Þ]ɧmXxsM†ØÏÂÀqÕ uÁˆo§÷ã.Ý ƒÁê ¿úêná÷š¶>;>á‰ô+fmÏ+ wë¢ÔOÞµ*3·:ŽÔO¦—îx"=ˆÕô žë¨Jþwþüòy÷Öî-üÏ¿%,$kö®üú)k³úN^uVò{&¯É †Ýw]pÅM_8âc›¸<=˜ò§­Ïy×}z½èà…Û— ìQ´2ãÒ²mÑ5­ñÕµ'^ ÃÎsóÚ¯V5Å~††Ø-¦vzßµ]ô:‹ãŸ F>”ÒuÔÂþ§¿ÿº&oÝ·lày;óçÁç÷¾%©=ñ§9-ñçÃà°|æ–Ü´ñúDGÇÉdzc–¤_ûV¿à¶¥‚þE_|×ùc—¤}dâ“ég¯ÍþôáÞ¯ý~"øAGi2ð|rÖ¶hQMKü_ëö Ù˜5"^©j,XÇô‰+Ÿ§çà$Âä5Y_˜Õ­©Ø‘?; w†ë¥áû7ï',üu%ò•ÌjÈ5yuæUCæ÷>#uÒ¥½ñëןÕÔQ|ð ÇáBô 9Ÿ ÆüÒ­ÑÒÃÿÄåé_˜±9wTøÙ‹Ãc~ÏyóÚ³w2¶|{^]òID5­ñ“궤ºöÄ+•» ž.^“™vý}‚AS¾tp¥æ;W NnOŸ¼&+#|żöÄëuû†¨Ý[ø»ð~žËÝc–¤­ÇàèC00d=QUÕûUݾä¤áÄËÉEÖ’ÃAú“lCò±¨ÏMY—uã_ŸKÙ¶h~~\Ýûq¸Ïóo®³?/ C×=•q¾Þ€£ aõë1emÖ šæø÷çµ%^ ëá€û×á€ûO'[X8¸àZ[âõŠyOX5øçRRI)©.˜².û¶ê=±á9¼¸å‘þ§N\žÞ»dKdòÌÍ‘ûË·çm›×VøÚ!“®Œœ\/áƒô<ä@òXÂp³ó†{úœvèy ¹»÷©7}«ïÙ·<šznuSìުƂg§®ÏN×Ãð>]sëE]Æ-xþÌ-‘ê9ÍñÍsÛ¿yû?úí‰ý³wå7–n~·¶µðÕ0,$ŸvôòìùÿR¶-ºfô£©zÃîïŒx0%„ÇúµÒ­‘ïN]Ÿs­Þ€÷ëâîÁØ¥Κ±)wlþí¯æ ¼6sKîžHY¹»à…à*ùm…/…ß½~ÆæÜé·?1hԸǎY’vî»Î”µYŸ(^“õ…»žÎdææÈšæø‹'|ÎBx¥[#÷Nz:óìQ§övŸî_¹çÚn£¦t}·ó™¶>;Ï#˜´*KçÀ±2ñÒ îÙ¯½Ç^ܵxMÖÅ%["ÂA÷ðqË^T´2ã#3·Dz‡á¡åx*Ò‹Ó6fªÝWL\189ß"ùPÊÁ-p‚uíùÑகÉ…Û‚087?üæÀ¼¬!­i‰ÿêDMn®m-üCrá¸òù57?’ú)='±’-‘¬pÿ󒓬wÌØœ;"¬‘ò+>vË¢T'³‰+_^±#oëq ®nŠ5OZyUrý„ªÆ‚`ÔC׊Ðp2+Z™yÉìÝ«ŽãäæWð°kòêÌ^½o½¨Ëà—ŸÍ<'8³Ï™Nvã— :§rwÁ×ëŽÃcUç¶>_¾#¯¦è©Œ oúFß®w<‘ _pF€¿#]*väªÝ[øú1»ªÐ–xeΞX}É–ÈÿøÀõÝïþÞ`Ìâ4- Ê¢sšãÿï†7*væ/´*óÒŽŽÁmKg]ïö#ø»5e]ö—ªšbßç\…ýUͳwå?1iuæµ7Ü×§«IÍÐ |õ}Ϩؙ_ú_ÿ‚«÷ÄZgnνòêÌ‹§oÌ9ãÖE©¹úæ 4,ti“zÅk³¯¨jŠõãU+ ¶OY—ýåxåUÝ’ŸUº5L\žž !:‹D]ï³òn›»·ð—G*vä}kêúìs‚O‡rªv€Né†{ûE+Ÿ]¹»à›uí‰# ³wæ/Ÿ±9÷¼ãyl_Õ?˜²*«ËÌM¹]J6GÊt)Ùí2eMV—ÛOÓyp"”4D’· «i‰?ÄaW~cI}ä¸NX^Þ÷ÔéësÏjˆVTlÏ/}«fÍØ˜óՉ˞«çàºë©ì`꺜 l[äí*©Ï Š×eSÖf÷š³'¶ã(æ0üëô9=çñÆ«¯>- &µóÚ¯×íòÚ[õzUcÁ†)ë²/Ó£p ÝùdVâÕÙç—lɹtfXÉm8è¿tÒšÌsn^˜òñªÝ êÚ>²Àk/ݽèxo¬úêÓ+wçϯÛ÷Î[¥ªšbõS×e_®Gàš¾)÷’YÛó×´Ä[jšcÍá¶¹ª© ¥¬!2nÔƒ)AÏÙûþ¬è¼¿¬!:¹xmöÿ “˜µ=zUõžØ3óŸyÇà¿#”ÏM¾ÿ߸þc¥[£ãj[ ñ^¡º)öã’úÈ—çÿè†ãz¼œÈÀн2 ûÞyµ 0j“ï~45ù@¿3ªcÕµ'¼[`¨j,øÁŒÍ¹=÷ñ p•5D¯ªj*x¦nߎ¿Ôܽ…É'ÍýË>+:Æ¥õÑj[ z¸°Þ÷‡öNß”{Ü' pMß”óù²†¼êê=ñÇ«›â…ÛÇ*w<^Zzè~c—¦SÕXðÃM€¿%¬çY’všÀHGGÇ»Ö_ïWZ-«m-|ùÐzMKü¿Š×dXܳ{òö%:“+ÃêVö[•Öuaÿ?w¼:+{Nsüû‡ Òw—l‰Œ³8íÜàSA—q¸œ¤nY”Ö£¤>2¢¦5þÚ–øs37G¾ò¹ìOw·t`Ðãòcà$5þñAÁ+2ºM^“uõ¤U™—]2 Ç˜Åiß;³Ï™|ØMY—D*® º_~Zðèó#Oø÷60<#0¡‚9—Ÿ^±3oþÜÖƒ Ìý¥*wl²6û -bÓ/9eÚ†¬+Ê·ç «Ø‘CÅŽ¼°ò‡ÎØ”›vÇòô³´|ˆ=Ò14xú¿n Öüæö`íï&¼]Oýj\°ø'·h øÐ»&xóñ¯Ù‡Ôà°R5 ðNÿN‡ÐDN’õ%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/tEXtSoftwarewww.inkscape.org›î<IEND®B`‚calamares-3.2.20/src/modules/locale/images/timezone_5.75.png000066400000000000000000000025531362604102500235130ustar00rootroot00000000000000‰PNG  IHDR T¾ãKúgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<§PLTEl¨Ci¤Ah£Ah¡A{¹K‹ÌSdž>%Rp¬Ek§Cq®Ep­E‘ÕYnªDTŠ6Q‡4ã_y¸Jx¶J]•:b›=_˜söœ(„©§·ïÙó¿±=ô  ŒŽ‹B˜²ÏG/&§¦_Îì¿zýföí»÷¢ª 9?|œ›_ø´û‡½¥Ï’®øK¹—¯ä-Yùúmuíûº „ìj~AaÑÍŸ¿¶¶ËAèŠK®•^ßÙý£De7ÊoVTÜŽÒ!y@/×Çx¦5%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/tEXtSoftwarewww.inkscape.org›î<IEND®B`‚calamares-3.2.20/src/modules/locale/images/timezone_6.0.png000066400000000000000000000213311362604102500234130ustar00rootroot00000000000000‰PNG  IHDR T‰=»ÈgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“ pHYs¢¢EÝ1¢!©IDATxÚíÝwœ•åèñPQ&U@: MÊ }z?ç ½ƒ ÃTºéÝ,ÑDì;XPŠÒ¹÷îæîf“M¹›½¹Ù˜Íf7&êÜs ÙhÔ(*2À÷ûù<2‡™yžùãü>ïó¼o| ´I¨Ö¸sJ˳vÍJœs¨$qîáâ¯{ÄížÛ!å†Ñ/ç"+UHýkâ«5î”ÜB0S¯u¿j ;Žl~Öƒ!U0@•S¿uÿj:& àÓƒ¡ÿ¬g1^ þF0¤Ü' ªÃ5Ñ`è †‚³ ³OCwÁUL½V}ƒ†G4 ÀÇ\Ù²OаÃpÁTÕ`xQ0@UT¯ÕuA£±-IÏå`X" ª¹²eï a‡aWŸí`hŸ²¤[ôË©aE  ¹¢yàªk‡4=ËÁPÑA0@Õ;ÃpÕµCœ¯F,ÿ‡`ÌC•Á¬×*ƒ‚ý§7~PYÔ»f@Óþ3Ÿ-Lœsð,ÃÁgR‹~®h;¤¤e‡äÅ-ÛŸîHZÔªõÀ™=ìœ}úWŽ®8Z’Xqä Øëãg¿4?úµ 8:¤,é×cô¥}§?QÒwÚŽÓÑ× *{õ´c!¡dïì>S™}ýø¾Ów|ÁñÄøÞï› žk£ßJu« _±.9ú÷›ñdÙàyÇŠ+Ž|±qº[‰*Ž”ôŸùÌ´f=#ýš÷sõ—Íuq‰•€3 }g†Ã%ý vÎîžkVó>£›]Ñ<®Zë„é&.ô`ˆmAê3åáé2VhÐnàeM»ešp '· Ǿ}TÛ¡¥×F?M«: 5Ùp¡à9JúÏ|®°sæê‘-úMh0sepeËÞÁåM»˜l¸pƒáHñÀÒ½%½'=0¥Ý°ò¸&]3jǾ=¸¤^ “ x0” ˜µ+v°9§e¿‰Í´TýšA…ÁÍâL0\ÈÁ0hÎÁ’ë¦>2£SÆÊ:%_V³N½ Q§$ z0Äž­ÐcÌ£Û +ïP«Nƒ‹Ú+ ®hÑÓ¤À… ƒæ,î_ðìì.Ùë’Z ˜Ò0öïÄn™Z½FM ç_0_sÆ=‘š3·GjN¿;TsxIJv#Vµ1÷¢Ð꜋¢Z­²²2è7aH”ŠÁ-'Þ–=.´*%aì–äKSæ«>|öP“ 盼•©J }sÞ3ù—?¹oÎS‘GË?:ý®¬9nJ8ûЦYÛóÖß2tȸÍCzNÞ–9qéžðѵGÃo¯>þñ¢ûC+S“2§Ô¨Y¯¦ €óHµ9Oä­Z}(òÛMoFÞßôÆ©±16N„ߎÿŠþþODþ¸þõÐo£‘ð«µG"¿Ž~웿©Œ Ç#ÿ5õÎÜ5™KRª÷ÉïÔ¼J4À9/u~òÉ`XöJö·¢APùç8Ý Œ÷=:8y[N|ϼ.5jÔ»ÈäÀ¹,ñúAÒœ¤¦c7ef¯Ø—wdó›_<b#ïU<ÚÝolÇËë¶¾Ô@UÔâºæA·¬®óc"ëÒ‚¡…#›Ï{&禕¯…ÿφã‘w¿L,œ †7"ïÍ.úüøKtìe[T5›¿Cðï•;?òÿj\Z#¨uU­ ¸4êµoL»3+4sDí™ßÊ-¸qøg[Þúr¡ðßÛ’ÞŒ¼¿loä{oIÐ%µmuÁULZEÒÅáUI½&Ý–|Ýœ§òƒâG"AÁ½‘à¦ÿ]ìª\TV>ŒÞѤ`{öÜe{òþ9úFÿƒ¯">¼-iÉK¡£õÚ^|™Õ€*fú]™Ýæ>:²dwøµ²ù9…DR¦ÞZòX^dÁ®Ü©Ïd,Ü•÷èêCáßlþN¸ò«Œ…?]e¨\u0ü“𪑉9ËFT³"P…?”9xÅþüÿX<òîÊ×"ÿ~ã«‘Ÿ-ßùç•"¿^{4òÞºc'o—Z¹ù­ÈW ¾ÅêìÂß.¼?\ÝŠ@2뾌þ Ÿýhý±Èocg><ÎT |B0üvæ·C믿'ä T%™7 ¼,´jDâìûsÖ¯:ù÷/{%aÓáÓÝ’ôÁŠW#Ÿ6H»áʼnª”‹U¯Ù®àÞìÍK_ýðË^YØ †M§ñ|† '"¿›u_hKxõȪšÚMk_wÊ”5‡¿üs¾Ðv¤×ÿµ>}JhUzõnYݬœ-Ie AÝÖ—×m ž™Ô¨Y=È_›Ö¼ì±ìû7½®üдèxÿlÅŸžôüûòáÇlLtè¾Õ*++ƒØˆªÕoâ æSn )¼?”·`göì;3–Ì{6÷…•¿Zs8òÎÆ7ÎàÙ„7OMŸ{„ÿ2Þ85Ö¿þÝŒ»soîН?z}VYa…à‹ÆÂämiãæ?›³uÑ y7-Ø•óÍ¥¯ä¾´b_ä7¾ùåºc‘6ž8½Ûšží`ˆ~½ï¯|-ü¯‹^ÈývþšŒ„¼SƒúmXi8]±« oK_ÃîÐÉ8ØpüÔ÷¯ûÉÌ_ùxëäÓžß_üBø`xUZZÍ+k[l8]ƒ †ÖÊ_Ÿ*z(ôÌŠýù¿8Ûç¾ò;&‹ü¾èÁìG/oӤΨõ™AÚü$‹ŸGüä„ ©<©÷ü¡W–ïü|ÕÁȯ7½q~Cl{ӚáŸDÖ¦d¥-ÈhÙwÜкV>Ãe-›ݳ®«3j}ÖÔûC?Úüæy ¿kÒ—¾þÁügó^(y8kQôÛw¯UøŒ`¨=þæ´i‹_[ÿzäó5>|¦aí‘ÐÛ³¶gÄ‚¡feåË~àoCÑGv.¼?kÉÂ]áCk…uÞmGú«±ò@Þ3Ž˜Y“š”T>¼UæâT?ð)ÁÜþÓ¹Aï1ÃkÏüvèª)Û²FÏß™·wÃñðïÏÛ­IoDþ°úpøË÷„þ¡àÞ¼y S’.n3¨“ø$—·¾"È]‘”< úŒIª>löÀ.K_ ½}cýÁù|¥!öü†åûÃÿ8åöŒ©Ñ`¸ØO|>Õf|3gæêC‘Ÿmzóü>ϰæpøwEeo‹ƒ»&À畽4)}žð?×Á«…ÿ³èá¼u¶$ÀçW»â™ÐŽõ¯GÞ=϶ };Ðý¾~·ô•ÈßW<~±è¡œMoÙÍ’ÀçW­äÑÐæUÃÿv>\aØòÖ©g0,Øy³âéÈ£…÷çݘ¿.5nò¶p½´ùi—VV¾eÅàt ¾>¾ÁämY³–íÉ;°îXäwçòU…Õ‡"ÿ¾lOèX¤Y÷ç×½1§Fì{œu_8·53¨×¾¡€Ï’¶ 9(Û ¶‡ƒ¬%#‚ÊÊÊ iÎÈö¥æÝ†ßœƒ±ðþû#?,| <}Ô†ŒÑo±ºU€Ó ƒ˜ô…ÉíËw„æÎº/\6zczãaÅYAî—_4zcFÁÊ៟kÛ“bÛæ?7êåÊÊ·ƒ±[2ƒK[^j±àtL½3/ˆËíUgðõ=ZÏ~0w몑·× ÿçœ'CÝœ–UñtèîUÃ?Ž=쬪ÂúãáÿŠ~ŒŽ÷7½ù`ÃñÈ{ Ÿ¼šTÚ«v­Æµ,6œŽq[sƒ1›sëM»3«hžÜÿ¹!ú†ûÏÏ'ØðzäkŽ„}ÓýÇsájB4j~9éÖä™E…n­x&ÿÑ»"/,z!¼kâmYÓ®.às«ŒÞ˜ä­ÌiZöXÞ-«…ß>Ço—ú~éc¡G§Ü‘}å„[B5¦ß[shA¯KF÷º8¥"©zÉã%`€Ï¯zdmf÷òyw¯=þuìŠÂ¹ kD~3~kòÈa³‡^ûæj5¬õ‘œ†øÉ‰­ËwäÜ…wÎñg,|»mê‚]á¿·yèÕ>¼ | C ‡×™~Wú°Š§C®>þùÆ7"ï+‘°þx轕¯…ÿï’Ýùß){ípô†ã‘–ï ýÓœY·tÏéÖñò¶=«Å…†V›¼-T}ÐÔ¸Zm7¯5pêÀ ²&%¸ñà” ²òçÁ+×kŽNV¼:!X¾ol°ýíâà{•[N~ÞŒÅiÕ{†:7È]>2/mÞÆc7'[ ¨ŠF– ¯‘·2¥÷¼g"OnKzë/wPÚx"òþ²=áœÿlöæñ7ekÖ§S.é=nðEŸÀÜ*¾u½td ‹UUêü‘Á„›sjN¸%kFìüÁ‚]‘×–ìoÃñð» Ÿï›tkú àŠ6—̸'ô õ6ap¡0)±ÚÈÒ‘u¦Ý•ßrìÖܶ“nM+^¸+w_ÚüÝv¼¿:0±¿I€ URùˆ {ijPx~°tÿŒ ¹|@íðÊ bW«ÑE&8eDñÀ`ê™Á#ïÌ š]×Ì„pšxÇÀ`ƽC‚%Mð _H þ_åº ¸8¨¶õ»ùÁ’—3‚…ϧ9ëz›¸Í{.%˜ûLò%‹_JrÃ+‘»R;/x>µõ¼g“¯RÑ¥š€ Tò q±X¨³tOæäuÇò~ºáDø?×É=±úPîÞe{3—çoé[ß,À¨w¸W²,®ÆâÝéIkæýóæïD*?<Ö¿ú—h4ÌŠ~hu³˜>ù}.ê3ºg½‚û†÷Zº'óÆ_˾wåìíÑ_7GÇ­+ögÝ|ÃËãft¨i¶à“¾(©Ñ„›Ó—?’³cÜM)³§Ü1¬ëÔ;†Ô/ztxÒ#/+zdD’ÇFÔÝÔÏ9¸ÐL»+·y飹÷®>þåêÃáßÎß™ót­Æmš,Ø –íÜx`\PúX(˜r{–É€ M—´žµòVŽÈ˜÷lèl8yÍ¡¼•<’µlÞ³ùcç=7ïÙȸ’GÂùÓîÈêd¶à3ã›íÊwäì]{,òûMoDÞßtò säýÕ#ï¬>ygÍáÈ;óž ý¯Ñ2rÍ\`¦Þ‘|eáý™¥Kv‡~¸å­¿Ü)öû '"¸áåð÷ ïË^˜4'¹žÙ€ Leå¡`òíÙ]*ž ½¹ùOÁ°ñDä½õÇ#X¾7ïXÎòÔQ¹ËS2«S»›-¸€tÑ1h3¨m0¤`hýÂûÒ×mz3\‹†¯Žþ·ù»ÆÿpÙÞÜœqwÖ½å;ÂGæ>)mÖ§‡I€ EǤNÕÛ m[;úÛêå¥ä®;~/v…aùþÑ¿(|`ÂáÂû'ï›óÔÔ7Wˆü~ñ‹9[véz‰Y€ó\ݦ]‚&ݲ‚&Öh×ñê&qúf,HšºðùÈ¿,y9òË’Ç'~7kyÁ=rn.uó¦m+^÷o7ìÎÙ?yèµfÎsW4‹«Ö´{öm‡–õ阾$Ò>yÖܸHáÒ¬•+oÊݰõ¦ÔåÛo2gÇüþ³öÎN^öȲù»f¾¹äÅœWSç¥ö2{p«~ÑÅA‹¾ã/mŸ´0-¾h÷ì¥{‹J^.M(y¥t`ÙâAåGŠ•+Jœ{46ŠÏÛ3'¼qÑ㶦-2s`ãVý§šD8ŸÔ¼¤^pY£A“®éAeeeЬW~½®¹›Æ%Î=\ü™£âHqüìsºG–æ6éšÚâ’+šÕnÔ)ɤÀy¦Æ•-zÕkÚ=ûšÎÙë’ûÍ|ºäsÃÉq¤¸ÿÌgK:g­ÑjÀÔømâ/kÐ6ÞŒÀ¹ìª–¦Ízº¨uÂô^Ý÷Œî3ùÁÉ Ÿ/‹]9øüÁp¸xpÅÑâ%{Ë¢¯/,1 uÌ0œ£uL Ú) \›xÑ5‰…ûL~`fô yâÜ#%§ ÞžeqùߘҼÏèÖ«ß©4Ñp®©×ªoÐ)kmиsÊ%m‡•wé=ñþƒÊ”Ķ}¡PøH4-î7ó™ò.Ùëãë6íZÓlÀ9¢A›„X$c¬ š÷Ó0ú¦>éºéÏ4çà—…ŽÒc¿9ªå€)M?üù[õŸ4ë ®î‘g1 ÊÃ5‚†í‡_Ü!eqç£ï•P²§ä+…?Ÿg(é5aûôöÉ‹Ûüùs×½º[4V’¯lÒ5­AÓnY ¨buJŠ=­UŸÉÎTþZ陈…?CÏq÷Œm0³YññSçê6ë~y‹ëÆöm;´$¥í°òúMãr,T%»¤V»ºG^ûøÙ/ÍJœ{¨øÌÑâ¥{Ë;¦-W·Y\—Úu›Ô¹:.§q»ae©=ÇÝ=£ïô'ŠÚ'/JoÖ+¿®€ª …/žÙ`(Ù[—ÿ9í†Ï-jÙÒ¨n¡­S¾P2hNì`õá’ny['´ZÞÀŠÀ s,{µ$~ö‹eK÷•~øÖ«Ý#·¶O^Ü芽, \Áð7žÕÐgòC¥í†ÏíT·YœÃÏ >:•(írCZ“®™—uµÍÂÀù GŠJö”öš°}r—œé]C[N¼-éÝóo;`Ö®ÙŸøÔèSÛ’f·ŽŸÞâŠ=«Y8ƒ!úÆÀ¬çË»GnÞ4.·v‹þ“jý&Ôj7¼¢Wßé;fÄn±úI¯kè”±*¥å€©—Z8oƒaW4nû÷Û¨85†ÏŽ9Ý£Á0ýÓ‚!vu¢{þmÓ:¦.­geà<†¸üÛ†üõçj;¬¼ÛgCÑwÌj7¬¼‘•€ó8ºR0 -ë †iŸ ‡‹{O~°¬õÀ™­¢îœÁÐÿd0Üú ÁPú™ÁÐgòC%mµ p\ß`Âí A¿™íÎl0D> m†wŽÃÔO †èk»d¯´x}]+gÁ´o%Ök8¸~ 'ÂAýø+¿Þ`<; S?!¢»ky§ô“[öà.Ip6”=92¼è¥ôYåO%5Žý¹^›ô3 ;c·Uýx0$vúx09ùж¾Ó/ˆ¾&ûšÄÂfW¶è]ÝJÀ×ìW•Û‚åû2oYw,ïK÷d.+räu®NÎL0|ü Ã5ƒfuì;mÇäoIê?óÙ¢¸QÛòÚ'-ètUÛÄËbW¿u?‹_·ø‰×Ö\s$wϦ7#•ë_½½ð…´¤È†A5›Æ‰`øø]’ZœÙ¡ïô“£Ÿ§4¾hwqÑwŽkŸ¼¸ûÕ=Ã'Ï,4ë ê6íj¡àl˜ö­Ä.ÑPøûÍ߉TÆÆÊ9ÏÏ{.­Å× ñÓ;ôšpï„Þ“îŸ …þ-®e­:WUsgаãp gÓõÛwÜp<ôw†'Âï.z1}B‡á9ݾXp¦·$5ï3¦i넽Zôи^ËëNžShÖ+ßÂ@U0¼¬ËekæŽmI: Ñ_ox9cA÷Ììž_i0“Ò©eßÜŽ_Ù–¤¹GŠ–î+ë9öîü}'4­Ó°]P¯•CÌPõU?y[Õ¦‹_JO^òrF9O%Õo7òºj_é†?„¢—Kºç#·YïQMc¡rq½f檺oüÃØ“¿nÿ×ÉA4‚ FÆWû†]iˆ/Ú]7j[Nó>c›Ä¢Áì@7éš`ú·¡ ×üóWþ¤ç¿Ž†Ù/Å®4ä´è7±ñí••Î%g6N‚Ž/ŠEÃm9­^ߨUü4“‚á/cpÅÑâ„¢Ý%Ý#·ä¶N¸¾qìIÎWµfò@0üåJCBñ+¥Ý÷ä¶ì?¹qôSW«{µ§:€`øÐ™†“ѹ-»Eßñ'£Á €`øë»'•vÏ¿-»e߉ E†O8;ÓpkN«ø© ­†Ÿi(z¹¤[ø¦œk\Õ´GnpI½Ç¢¡dOI×ЖÜÖƒf6¸øŠ«mOÁðÑ3  _(ﺴ÷¥ ®©iE@0|d$¿2§SúŠ~—_Ý¥¶Áð‰ÁPW0€` Á‚A0€` €`\j5¬uj4ŠŽ&µpJŸ1ñAñ#áàö›¾;#˜¿s¢`þ;.²-=iá®ðªò¡EÓîÊ$€“úOl8ûþÌ-ëŽE*—ï‹üGÉ£áÅ‚8 7(z cÕú×C¿\±?ü£ÒÇÂe‚8©sJ·‹’Ê[ç®94ë†á )s†¶ ÀIGv† ÒR+†#f'~eÿ¶` €ó*Ž'”ì‰ÂÇ®,”-Püzaß™ûËÚ§ÜØW0€`89•+ oÙ¶ùúûnxtƽ žQ25ùâ+»×²" ŠãKß(,z´ìŵGÃï®;–W9é–ô‰AÐK0€`8\œPz¢°ðá¹;Wõ›5G˜pSæø š`ÁÛ’4çhQêŠG—†6oÛœ·á¦[ûM,rqýn‚ÃÇo«Ú1}E¿Ë›:ô ‚Ás@0 ‚ƒ`Á Á@0‚ €` Á‚A0€` €` Á@0 ‚ƒ`Á @0 ‚ €` Á @0 ‚ƒ`Á @0@0‚ €` Á‚A0€`  Á@0‚ ‚ƒ`Á @0 ‚ƒ` Á@0 ‚ƒ`Á @0 ‚ €` ÁÁ‚A0€` Á@0‚ €`ƒ`Á @0 ‚ƒ`Á Á@0‚ ‚ƒ`Á @0 ‚ª˜ÿžÄ€Dy2Dq%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/tEXtSoftwarewww.inkscape.org›î<IEND®B`‚calamares-3.2.20/src/modules/locale/images/timezone_6.5.png000066400000000000000000000056161362604102500234300ustar00rootroot00000000000000‰PNG  IHDR T‰=»ÈgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“ pHYs¢¢EÝ1¢ ^IDATxÚíÝylÖ…ÇñÇÔáœcl.8ñ*º)s€–ú¼ÿû乂àíšIƒƒYO„ƒ)Mcƒü{‡ |ÄgûEãú|oÕÈÞÉdRà¸7\\[tùçÊ·å”—nŽDïlsZqSXèÎ&?œÌß™t<£P¾5çæÅ‡âGì/h/{*;2³1t†BÐ]%ÃÁ?Ó¿rGô†Êí9åµ{ò7´'ÞYÒ^x¬fw~KÙ¶œó„€nhÐøszÏÞ”•^»/ÿÑŇã¯Ô·ÅßJÝëKŽ[ú‹Âd]küµ¹[²¯T º™ëF“V¦»ð@¬éƒðñ[°/ÿù²ÍÙ—¨Ýn0¤õ.Ý”}]Ý¡xûÉÆB}[üµŠí9w—l õS º™Äâá}k÷ÜßОx÷_ÆÂáøŸ+wäTM[“qNp¶VÐ-Ä— nX12]ô­à®Æ±W-jí=Ù³ U-¹÷O<ý«ÓËÒç\—ôººXýÐ^·>0¦ÿwîW³;¯¢¾-þêÉÃü]¹oeL_úNáòg^”]_Ç÷,TïίZ°¯àÙŽïZ8ÙXè¸Ec/->?ºð@ì¹’æÈÕ‡“%ÁŒÆ±@W6kc¨oí¾üŸ5´'’Ÿ4Þ¿¿wü\r$‘œß’·¤x}è²ëÆõVº¨)«3‚YÍá ü7cácŸ–”x{îSY3‹Ödô¹ë±q}Ȫ@PÒ&¯Îè;{SÖM‹Æ~uJƒ¡=þμíÑ3CCRƒá33š2?èð gp­¶ð©Wº>Ü«bG4¾ð@Á/—)|óTÃ’#‰c m‰?Öî-ØZÜš 97ß3òÂŒªË{yã™âÀ§]qShHUKöıS '‡Â䢱ЛCEášÁç]òƒ§œ8P\ø´›²&£eK´vÑÁ‚?¤FÃ{§:Rÿóv]kìÅŠí9U“ù¥!wœ×㼛Πè&?š|ÿ§×ö›¾nÜõÕ»r7×·%Þø^ŠÔ1’©¡ð»ê–¼ÎÞœ•[x÷5}jÛC‚@WsÓÊ‘ApVÐsFSæ¥5{òV¥ÆÀ›ŸüÉHñ¿ÕìÍ_V½+ÆÜ-‘ôÛ’~VÍÓÑÔè.$tU¡ÚÁAqs8˜½1\°è@ÁóŸ4î/x®tcÖ•_ô¶ò…ñAñêHpkÃ8 ;(\:¢oíÞ‚Nö~††#‰÷*wF/}"üõÂù#‚ŒÔÈJ5€n¥rgî-‹ÅþË{RWµ+÷¡YÍ™çÌÝ º£â ¡´ºÖؑ޻p8þjêþRשrGtâœ'Â}ŠVgˆÝÉo’ó‚ò­Ùß]|(öÂGÆÂ[U-y»*¶ç¬ªoKü)5&~?okvþÔÕ§O]f4@·1(ñ•³7E¦×ìÉ;š ï.n¿ ;£åu­±—ëÆÞ(Ûš}"@§©f~­d}øªÒu‘!“W¥Ÿ¥Ð)™üqêÖ¦nEê– üÿùœ^¢V0åPv%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/tEXtSoftwarewww.inkscape.org›î<IEND®B`‚calamares-3.2.20/src/modules/locale/images/timezone_7.0.png000066400000000000000000000355431362604102500234260ustar00rootroot00000000000000‰PNG  IHDR T‰=»ÈgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“ pHYs¢¢EÝ1¢:3IDATxÚíÝwxUåáÀñ²d*ŠÈP6²WÈ„„ìÜ{nö ;¹¹37{ïÉ^²ÂÞ{…0’A‚ØÚÚþÚÚ¡¶ÖZ­ÕªüîI¤µNPßÏó¼ÏM" ä¼÷óõœ÷¼‚ðèè:Í¿Ü×T}^kwIõcKCƒzšÿFïçÌÂ3À ÓýË}w†€Í>f‚Àƒ¡œ`ð€ƒßF¯çLÃ1Ápç`˜G0¢nÆ`ð%Ü%6ƒáÁàA †P‚xpƒá'¾%É$„`Ü`¸@0¸C0nñûéƒ[’‚á«Á á @0|]0(†›,"‚`î»fá 6za¢[±q}ïaÔeFÀ_‚xˆ<7/ôñç­ÔÏOpÎ{a¼SÞóã+½"¶.¾*o-i¯§žYôë°Í){] ÖZ%œÕÿTÑ`¦­ÒM—ÏrÄœÞÌ,p‚aš1, *s}}¬¹¾á?Ã*á‚Ö­pu©îPXsQ£üóÅWÅÖ²—ï8nfƒBµ7ªÆ){[¶¹þÒOv[Ò4ßõ¾#Í£3³À=†['ÞR,Ø¥Nò^‘¾Eµ/¤9«Úë½ÒñÆ­@¡m¼,7~Þ>t‡"¤H5Ó5ÆþTWŒÁ š¼S9Á9wLŸã˜\àÞCÚ"îœÎ.u{¦¬4½«ÚëÝì‹>ïæÔøþÍ8ÞÉ»äó~ú9¿·Ödn‰Þ¡?‘\újì^Ý)÷¢uEVñ?ê£V5S«Ü‡N÷zŠÙîq0Hë2ö¤û¬È[¾Ew<îhÈ+ú#a-þk’v­OÜ›p"ø ŠOÚnEºúßÛ“¤Ï³/ŠæÕyÿ£ø²¢íjDq³âšzd}Ú‘¤/ßî$ 3m£RZ3q_¯ê_6vAêðîýže‚€{ Õ¦š“q¦Ú“qÖ Çl“'9ç®/ðYžºU½?ªÆï—]ÛbáöÅÏ¥WÄ›_þ¸°Q¼æ³ï–4Ë¿¸Â o-½"Ý¢äõ¾ßêü Ö çuââåKÓÎùüEÚ¿¡¤E¼™xÒÿw†ã‘M烛RújȦÌíæúÓzs}­ú^Ü–4Õç%ÿl´Ü“ÜŸ`¸ë“ˆbM5MJÕ勸óZ›Ä“ñóS'‹K^* Ù˜³%jGÒAã8 Eð†‚MÎy;²¼——¬Ž;zµ@zÒ’WÄ›ùõ^IQÑvu ^ÿJªýYØæÔ=æºz[Rƒj梪ñ.¹£™aàG †Û¯B´/b6Õ6)ÍÚ£Z¥5™®VmªiPÚ§HM;ôÛâfÅçe_Ú·áV(HÑPÒ"^—v.0F„ö`L¹®JcxNwëg÷[•êU¦ª3ú‰îEóz==²;³ |O~P0ÜùdýÖ ¾cæTÍþت¢ËâµÂF¯OrkýßξøFVuÐ3/ý>õLÈk‰á/kª.HW|W¯µI:o›t4Ñ5E™}úŽ ‡Ì™6I†ï †zõdq¹çp“E<^ø>†LWãsOõ]¯´¼gÁðß!.)[!áxÌ¥ð-é»Ý Ö:dìʰM>”lp<Þ\wAcª©S™j/ǘ难´èù‚Ö.eoš[á’eÅ%+ìÓ÷¤Y´]iøn»>O÷/·0k3 |KÝú<Óö:lv€0xš¬×x—\‹9‡ÕÒãHïu0Ø&U¤ïK3Ó]ÐJ·,µ?BUºÍHÚ¡J똵=KVºª,h]þ&ãëbKÃ}û«o[`m®oû¥Å÷Ù¯ÁøûÌ Ý§7ÑXã¯Û‰™¾ÁSÏ› 3· =ûè<Â4bà$Ï2W“èã1–†j­UüE͹ýèn ¤ÿg ‚þ’Ê:áŒÞkÙ’úÃÊšìêÀ7rkýÞ)hðþ§ôšr&ä—šª >+Š×ZÅWêíÓvdHx•Éú=÷cˆ·0sÁ|ƒA“Ý3õy)º¶‹?ÍwC™æœÚ&éX¢[áòÅE«Ê¾ËjVñÒmC'¤ïN·J¨Œû6ßãq 5f§¶"ÿ’ÏûÒBçöÐm›¼µ5ɯgW+>Pï¨w/ZºÔ:áD¼Mâþ»”]évɇ’¥øø®Á0;ü`Ü8§,‚øÚXxÑUøek«0t†wÿ ®–³C÷FK›©Y%œÓÛ%ïMµˆ;«·0\Ð~ëÑŒa1?u_ª¸8wÿšÄÝŽY;2Íõ—¾æ„¾Î {Ó GÃ/7+®Ý¾;tAƒøïÌ*¯¿§œöÿ}âÉà×b÷DWk¨ÎGï0“•®Xb¦kˆ§¾#=Êunl“ñÕ8ÔÒkcÛã]Mµ—ÿs»Ó®fÜ †…Yã à.žo/<ÞwPçQæ1£¦x­‘™ÄT¨èS¬OÅYÅM0ÓžÖÙ&íM•n3ºý €¹NÚ¯árÌ-¾ìõiþ%ï Ÿ|ó-H÷f7£á¢×ûÉ•¯¾”W>7rGâØ…9ã<òúž$LöZ- ™.>1Þ9×|vè¾hs]Í7,^6F‚¶!Ö\'=ñèh¢gÉÆBßUË—û­^¼*lsÆNí¡Øêø-©g~ŸS«øgq³üÆm –o] ¸nüø†´€ùÇŠƒ¯Œ«bk~½â㤠ß?$Wúþ)r[Âa3ÕÆ´1Žy]½ž%<9bvÛÇ#Ì£FLV¬ô˜§<¥úïz‚ÛÆWÌ´J»”c Aë 6hjÏÄj̬ò{Kº"PtYü¼¤-ä­?Y|Ï!Ýö”Réû†×Ò%+f,: ç”M0àÑ$í­ é7dJ÷1 RfÍÚܾ°ùnWª5ö©[²½—g–‡lJÙm8]Ÿ_ïýAÙ˲¶'Ik:Z Ü> ¼>Ž;¢¬u+Ø‘==h—~ŒCê8Þ)xä ›é+téÞ»Ó銧&¹—8Î<m¡¯ûÊZKC•Ö>mWºMÒá$÷âìu¡åÑgNú¾žwIñ‘´P¸ÃG‚t[ÔÅ싾okDŸ÷]–¾Ö,j‰r¢ÇRgcDM6'°ï<ôz<1TxüÉáB÷¾ƒ„çL ýGÌé:ÊJ5fšß?SÕÙö'µ-^¾µBÚ:¡Â`p$Ñ5¿`µ÷2ÃîÈm!õñÇ~ݾËrÇ…’fÅç Š¦žöûEô¶°=îÙjÃT¹nþ3å¨AÓãû ›ÔÝxØ:ÐÚÊ›·Öö“ÞÎÆñ˜ô:h²ëã²Ìf‡í‹0×]l»ª mžfZ??õX¢¥¡Vmi¨Ñ,ÌZŸox8É9wM±¬´`MÄVåiÝ¡ÀWK[ä7®Ê[ó.yýSs ¶Ê=/oÉ15pØ,ï C¦9õúj¤c$X'½"¼`' œà(të3€7n}Ž}|¼KÞŒÉâ ë)ŠÕ–S¼×ÊMb*”ÒU„/®,ÄÚ$M°Š?œèYžkW£6ןŠ3Ó6)Û•Ú¨´0œ0x—®ˆÝQWÔ$ïW¤Ç¹&Šx9r»á¨ÿšœò€Õ/yį´ˆ S ™á=ZžìÌ»œ¾ƒ&ôŸ´-h^le‚©ú\œ¹®FÛþXÔ*]Ê¡ä…YÛ³\ó׺¬-vÎ][$/[±ÄgEö¦MÛ_ÊÛµ#ñPbEdsò©ÐŸ'Wþ¶¸¹ãÜ’TÒ,Þ(h?M;ô›Ù[­Ž&È/^®=Ò¢;øË°^‡EÙp“§¡?Á€GOŸA㟜²××L[«±ˆkˆ•®*HQp"²9«:àÜÿ?çÕùÿÕ8ÞÉ­ó;ÿ’ß»õ¾ï6zý« ÁûŸEMŠK;&6zÿ+§&ð°ùfq³â³Œ \´!k›×²•KÜ ·äµíQ¼º4b«þ¨þHð«ÚýòWü–8±|ºë°¹‹ŒGª?oå)Ú÷Jh$jÛ¾/>阚¯ Ù”±Û³d]±¥¡Zc›´/%«ÊïψkÒ~ …òkYÕ^ï6*>ù¦?/ýÎ9åo+wx䊮C]Ry£àÑôøƒzú-ÉŽÞ¡?Zž±Ã1kg¦¹î¼6xCÎýeMreè«ùõ^Þþá;âø®ñ“U%ÿ[ôV×Ô…Ãâx³à‘ÔɧÔÁ&f›çí>ïŠøcWt‡#ëÝ‹ÖÛ¥NrÌÚ—½S[QtYñéÃt‹Ò·R$å_ÿ¡Ýë±Ö)qáó¼UðH4crg×ÔO)·Ë^Ôî“í(¨?Ê©ñý[øÖ”}²²—JüWçm̾èóîÃp•áû\•H:.«óÝf¹g.äÍ€GuŒ•°0ÑÎFw@~:§FüÇ­0(io5‰ŸK‹ƒËÁX¸ igä¿YëáçšîØ—w Ib¡ó4ýA÷Ô´Ó²š¼Kâû¥h |e̓qäÕ‰ŸÅî”U¹Ìå€G3 œ¥—Îò<×qªÝòEMâGj(H±dŒ¦ÒN‹¿J8ê±ÏpØU«Úíé°ÌíÞ)x$Érœ„ß¶f ÞÅÝ=³ç_’ýõ…ëge¿ˆÜì³Cëšæ,EBçÄ“>‚ÿR7Þ(x4Ùk{¯\0+îl{úYÙëÅ—å×™Pøb'ëÂ&ñZÂ1ùYßRËHëg5ûDc$¸ ó‚¸ ¶N‘ånšìjù¤…ÎÊúi”^[ êÅOòêÄ÷SNÉÿ¾Á3ÊVåØy^ï àV0¨v¹2ÎÉg †›ÿ³ÁÙÕ‡o}Ba£øYöEñ=ãïû«” Ϻý2}ìE€r»|Qð*ɼ€ÛLõ4ï´ÊeaüQù¡ÔJñ—yuâ™äI?+«¤Yüüa †¢&ñÓ„còcºƒ ÇE/ÉæØªì·¶¶ ª] !v§\0oàv¶*[饓ßÏA1Û£c¶,˜£Úå6Ù·ÌÑU½ÛíXñeñÓ‡ä ì ²Wý—¹ºÆ <³ cìÆó¾Étq¶¶ÞSÐìUM­yBAc  tÞy¾fޘ䓲+Ëú†’fùÍŒóî'¿rwføºè*Lq{Qp4Ø Ï[ ï©?(;_üÜšTzEÞšSãVcü5{3ÓÀ÷dc%XE™ [ïž[+þåaÙý¹-.ºWÅžÌ2ð=YEÎîì¿Ô9.ó¼ü͇%ÚnIj[³«<ÎÅÌ2ð=Í œÖIÌŸ?!å”üåÒ‡h†¢&ñzZ¥l¿ñW|ŒY~€ñöûj÷ynο$þóa؃!·Vþ·¸Ã²½+ÜÝ™]à‡è*3½¦ÖÑ&ÏÆîôLÉ«“¿SÖoM*j’_7v¯wN¶3qKwéÄ?Ð qª`¯µôÓ{$•×—¶ˆ×;òU†‚zñý—<“™Yàé6 ›à‘iÝ-d­sZQ£ìã Eo•-z?ÅÄ÷*¬¢­;/L°1M?ëù³ÂFù'vC‹x#«Ê£n–ÏìÌ,pXFZ ¶±f]<³Ì†G”»§ç]’¿×Q£!·Vö®w©³Öøkuff€{@ÚÄMžï$ ˜8²“˜g=*ý¬ü÷ÒÉ÷â«+Š›ÅkÉžuþK]Ý« Ü[“ݦu¶SÍ›pÄusJ…¬9ã¼øûâËâgäv¤›™çå?÷Èt´ñ.qºöí΄÷Ò ÅlašlN·™ÞO{—¸ORîSO‹¿ë ¶}wHvÆ5ÍÞMÌw´´ ŸÖ3r“¼‹O‰3·&÷Â4ù,a¶ß\aa¼­¼ÊUZå1X·_~ÎxB~³#lÜfŒ†òëeɹ(ÿ}ÂQñdÔfù ŸR™Ð¶ë€{Â^g×Ù»dáÍ^Ïõù—Ä:Ì:†«bkñeiƒøŠn¿¸5v§lïbWwã¯Ô…YîËHËnŠÂ²œ‹ò¿w´§$å_’¿¶^§Ù+všìúB¿Å®ìú ÜKÃæŽëäUè0ÂpD¬ï·#Ý%Íâô³òyŽëxé÷èöL7&¸—Z[ëË(«.þK­ÓÎ(~Õ‘‚¡ø²x#ù¤gE÷§ûöe&€û`¾Æä±Àe³ÒN‹-%-âõ·qÛEù¾Kœ™Ià>Yëô„þ ¼¦´¥nÜvY¼žRáy|¢ÓäÌ$pDoõxò’“Ü/½‡÷ïä’l24µRöJQÓƒ+RI³x=¹B‚Ïb÷žaëÝ J¯¥N½½;÷уt$ž9NÝ‚V¹™%u/É­ÿ~/£!û¢ìØîéó5ÃŒU§ß¶,#æ Š"'aaüü¶à&8 )g…yÁæOFoqϺ þõ^^e(¨—˜yÁ³!ñ¸|WàrGW§«þ–Ñ ºÌñ³|Ì.v<èÆÎŸ"¼Ýê#¸g.µÙeGIKûÉþ½ ‡Ò+bkI³x³ Aþž1ª"6º¦* }]’íúqô€À"ÒF6ep§ 6s2ÎÉß*h¯I'ù÷z!´1n7‹ŸÅîpßï–a3”#t ²Ü…}ƒW{xéÈÒ“N¸Ÿ*½"¿÷»>7ŠÿYãndõ8Gè@äy …õÿÈ6“Ž»Ÿ»ÁU-¾¸ÂÁqÄÜ ]8â@ÇÓ)lÝ«ÔÓò·²/Šo6ŠŸÞ«XÈ8'{K½Û5À·l~_3ÐA¹¥™÷ómg,Zãâ•|RÞ -\¾Óbæâæö×[»:ýFnòÖ¨rGý°¹“zú/•žÔ tD­­?o{3FàÕNî©•ž¯–}EMâͼZÙ›ç<*“+e»3Îɪsªe¿É¹(ÿCa£ü£¯{Z’fër—«a £±úb|ɰy“l‡Ñ±;]åÕŠŸ¤Ÿ‘7$“-[ïî2lΘ'¤³uŒÕ0Ïlg ±ÐeAÜ!Ù¶ÜZñS)J_–Ö?ÈÛѺø‹‘rJþ—ðõ §q°€Ž oÿrÀr×Á›\£µ{Ý£¼KÜ_„º…ot&.œÔößèmy¾³àUì*„®ó£ÝëwÈm¹áËÃ!×åñ‡=ö¥™pÌó\Ì6רµNOr°€Ž nÿòcO 1~môD£ÎA+=³Ë»þˆˆMžBkëa¼£iŸÓgôaaÒÇ^ï40z«|¼¢Ðå9Aèߥ¢µ„c tÐ`ø ³0SÁtÑ<Á$pî·ú1£Ìž&Ø ¶*KÁ^g+CAPï‘ Á«Ü‹Ž3Àýòì´ç³PSÁ=у<ªëý˜Ðå‰.B×§º ýF>) 5Rm=Q{Ifü¯½;ÏòµëÜ_Xî!xæ8sÀ€G…½ÞNpˆŸ/Äl÷Z[›„]Ÿ¦K_îlÆØÍ|"h¥³¨Üæ–¶Þsš¢Ð}´{¦Ó35àÐ¥_Á:Ö®³µÒf”Xàd®Ýë±ÑCÔìqNˆÙꢊ?â¶2«J|»ø²x-íŒøú²3>¥®¡‚Їƒ<´¡ðDaŠë˜¶}Šç÷Tn÷Ø”~FöZþ%ñ³ìjñÝÂùͼ:ù§%-bëâ«bkÙËí¯ùõâGa< ¡{ïOÁ^çÂÁªXè×E˜ë7MØø÷"Á)ɦç|µõó‘åžK¯ˆ×Ë®þo H¯_¥-âõœ‹âï5{åkÁb †ñQà!ÑãÉ‚cü!±b‘àh°¤Þ-Û¢? ?¯Þíy±¤Eüüö@øJ0\o6z}šT±è5ל´Å“ÜS¬8ª@7`â¡ÇÀ~BäVaºÜºŸO©ëdÕ.m ò¥0Žß ‹¯Ê[ ¼? Ù”pÀ!cšIôÑØ .ù–] {Ñu–ôò˜qt–å9ÍUír/I>)k)j’_û¦Høò(hðúPX}Á.åH¢E\ƒjnÔ1%Átü`xÆpØ-;õ´ÇÆ´3ž?+lÿý]BAÅ—ÿÖŽ®µM>–`®oˆµ0Ô ÀÃÀ1aÁüœÙJš¿[$üïÕŸüVç”›é.+-â.©à!¸Â-9ÿ’ü½;=õèÛŽ¢&¯£wêOX'œÕ[ÄÕ ÀÃ"l½gvA½üŸe? ¤‘_ïýAä¶ÄCfÚjµ…5 ÀCÁ#ÓijòIÙ™’fñÚ †²—å­¹µ¾ïú¬(^c¦»ôE0äYööŸI0ÀãOÍ&9L{ÒpÄópÀÚÔí6Igân¿Ð~‚_«vÈØ•á»*}[Êéà_ç×û|PÒ"^¿ …ŠOÓÎü1ã|ÀãG^ö^¶d¥uÂY½¹þ’ê«òå`ˆÌ, ó¤—.ŠByDJ¥â7Å› ît5à¿£Î8.ªm+ ÞËJV'U,ú…tU¡¨Iv3ù”÷›ââÂ56‰'â­Œ¡Ðþg/Ýu´­aðÛä=Ò,‚`$':´½Ÿ8d´Cž…ö@й¬jï¿{-[¼Ò&ñd¼E\­úëNö-ôõ±öi'4ûc«JZä­™U^-׳K>˜l÷uÁqÛ¿Þ#L à'7xŠ»{¥U2]ì4h²ëSãsÌfí0WoKά x£ôм5«:à͈­‰íR* _w²on §œƒ©ú#¡-IaW}W-])]Y¸ÛíG_ áðSéõÌha”•ZèüXc(¸õmg˜9=`³¿ILE¬¹î’Ú­`uiJeÐÿIO4’6i˸à÷¦¬tm©¥¡Fs÷þz•mÒé8YéÒ¥Ž™{ÓM5MJ‹Û›úíƒ!Œ`~B†›K¡0qŠ×*o“è“Jsý­[ŽêUóS÷¦9fnÌÓŒ©)jR|*-dŽØj8b“$­C¨W}ýz†Zµtµá»„ÂmÁàõܼ°ALð#èÞ÷Y¡ÇCþ3ºôè# ™&ï?ѽÈaNÄ!¥¹®ækêÔú:õ‚ô½iÚƒÊêÂñßÊÝQíS¤˜¨•fºFå÷ ‚o ÃMB àÇðX·ž]…N7~xkô>'pʬÐ}¡Ò ú]Oà Ò•„•Mâ‘äøcÁ¯%žðùCÜ‘¨ÆØ=‰GÝ 7XŒQa¨¿§Ã2¾QÓ ‹àÇ0l–ÿ¨ñ.yî3ƒwŠ3ƒwˆ3ƒvȯAóbO+ïv{‘©êŒfæ¢Ý1S}×ûM’-[è’êã¶ÞY¦Ùã²:·Fþ~êé _Û²§ù®õ™ê³N1Õ×8|Ö‰íã%iÈÛ†÷Zùïµ²)ÞkdS¼Öx¶ÕƱÊcŠb•ÇdÅJ÷ÿ q…›ô:fA²Ùiò'˜9àG0t¦o¯qÎ9–³B÷ªÍuu溹¾Vc®¯W9fíÊX˜½#Ë6¹Ò`_¥µˆ«QKO52žøGŽuHÿ¼•ºß€1¶ÒU‰Î­­­ÂtùôQ1ÛÁ%ßtNø¡è¶õ qõ*U“2vþdÆß¿ŽE5FnO<´hCöß•e«¬ Ç;Ø>;ɹÏT¿ ÂS/Ìúé'<Ö¿S'Ÿ2×Þb¾[Oãîô̤ǺÝ…Îãò„1öIBÏ'uzÎdQïqNY¾nŒuÌxf”•º¯ô3FZÄ#-¢…f‘Æ! ›å+ œàÀÄ?¦'G˜ôï’o6'âp´…¾Nc¦kRÊJ×”¥ž y­´E¼^ö²x³ôŠx³ Añqä¶äf±»ô=–ÙŸø¬tbÿì‹ÎÂø/‹Öº Á«<„iS„©î“¡«ñ¿öj¿ 0dš¼Ç 6Z«AÛ£nÓwDN Ø9#hGäô€Íª n…NuïÝ‹™O Ÿ) mÙk¼s®ùœˆ#Qq—ÔfÚ†Xi…„WŠšŸ£¡UyuÞ¯ÏÝb¦>7Õ·Üçykí¤þ£æuž0G˜l"Ì 2iû™Ývº èÆ¤?¦­­BßÁ“Ÿà–oa½SmW¥5ÓžÕÚ$I XS¸>©"üjñå/¯kðy?îHÈËQ;´'ÝóÓVNòÌw2+x°ô¸Õ‘f^œQè>@ÑmÜ »¯ÛÍÙ\ßë±'kaZ‚jÈ´‰çZþçßä”l/]†uë3j|ÛÚÕn™4@P1aÀ­÷Àq“#f÷œà’g1'òx”´^A^¶|©MÒ™¸ù©»Ó³ªüß*½Ò Ò(i‘·6Š×RÏøÿÑgiò¶y9ʱ†™Ãç¸=7Çßcše”ŸÅ×|ñîÁ -€>¯ ß’¼?å”ìçQå®cíMn-|î4_o7F·ß%#¥Â½\·_fˆÝå©ô.¶7›ä4­‡Iàl& ø± g+<ý‚eÏq s,æ'®NŽÚ¡<ïVøR‘©¦.V{@Y]Üüß« ÿƈH=ëóçÐò¨ó®9É+L¢w‡ZhÊÕ©E9s£ŽÄÞ-¤G¹ºlÉMªýYéykn­üOI'ä»RO˶dœ—íÍ8çYWØ(ÿ´´El-h?1‘ýÖ«È>Ø:zÞLËð9O1[ÀO`ÈT™0hŠ[÷1ÙVó“Ö%Û$ž2XÄժ勗,Ϭ ø“ñþÆíÑPbüZæù‡qGZž|À*¾Jg›|*ÞªmÇè»C£Ò%okNâɰWÊ®ÊÛ~Nq³xÓ8¤Ÿ×úå«‹¯Š­… òOóê<ÿ[ëñÇÈöC§ŒêÎl?¦áB¯cŸâ³Ék^ìi­¥áX‚¥á‚Ö9wkvJå¢_–Ü1ä­Å—ÿVíU^°I<šèœ»lñ‚ôíY_wKÒvoÜ©à5ånžc&¸ s,˜!àÁ †öÅÊ·>6×ר}V¯É©ñy÷NÁPtYñoÍØ*é*—×-üïz†Ûw€–^/hMµ5mOR27~¯‰ªN3ƱĮÏ‹ÞL ð ÃmCZßà»jñª¤S!?/¾¬¸ö?Z5~®?]gªmˆýºŸqçpøâï5Ô«æFŸˆ›àš?£Gßg»05@ ‹¸µ¹®Nå˜u 5dSæöì¿¿J;5K£¨I¼w$ªÁTÓ¤´Ð×Í•…¯ ’Õô€-Ñã3FŒY$ô9—Ù:F0Ô©­Ž%˜ë/jÌA`p^绢tMÒ© _%U„þ<þXXKÄVÃëÄÊ8«øÓq¶I'ãM5J3íeåWã¡^u§ 0ƒzªÏK/ØèÆ>û¢sã¿­óD·Bá™qvÌð`ÃW‡U|•Ö!cG¦E\¥~~ÊÁäà I{ G•5ÚCêóºC±Õ‹6æn—¬.³M>o ‡s]£1•Ò"jë„ ƒ™¶NeúEP´¦Ø¹Q•ªÛC§z¯u{Q¶döóVêçï7¤ÛÅJ¡gÿÌÐQ‚áÖÂféêƒKÞ¦|ýáÐ+ Š¥ý¤QÐ ~šYå÷–jŸö´÷òÅ+奫ʜs7ç¯ÏÞ¢=¤¬QîŽ?°¶p½ôµ…ÙÛ³Ü 7x¯)Ÿz<Ñ\I=OyJ;kÑîÐIž¥óGÌ ` †ÎLЂáÖ¾ vÉ'<‹7†–§íξèõiMCéñFûúŧ¹u¾Ë­õ;»&à­üzŸHû7_–öoðù ý\àë‘ÛÕ‹6Äð^ž·Þ.åp’™¶Zeª:«6‰9¥âµ:Ú £ºôèC0/ÚÖ%Äši›”–ñçuÎyÛ³eekJ#¶&ï7lÒŽª×ìW^L8~%û¢ßÛÅ—Ÿ–´ˆ×¥˜hßñYÖšqÁ÷Ïê}Ñ5êý±Uá[ G­bãŸ3UMi5ê¹y¡MqïÊT6¾|›’ô”$ióEMâyuâuB•VzuÌÚ“¸.§\½_s6þxTcbEÄ•´³¡¯¥Ÿ ùMê™Ð×rjÿ’xÒïþ˼\:õ²h‹„C­­Âdùrf x‚áÛî¿`®¯3ŽZµIÌõÜðõÑs#_ŠtËIÍð^µÂ$8Èûɼûõ~fŒÐ¥Gf x´‚á¿Ræ»1`„iÔ”ásÆš=äé•CM4l¦¢Ó<ÚÁ ™æ·Q1|nðÀQ–Ja”e¬0Ò2F>7P2CÁìƒ1L b*‚`‚ €` ‚`ðÀƒ×s&!@0Üaã¶¶`%‚ánÁÀ€` ‚`‚ €`  :X0°@0Ü-æ… Á@0Á @0 Á@0  :~0øƒÁ4œ`†;ƒ÷sfკ €` ‚`‚ €`  ‚Á€` ‚áÛÃ&ïf@0|5¦ûmòI0ï0 Á@0Á @0 Á@0x ƒÇªÃ×nÜ6Ò,’`†;ƒÏHó(‚ €` ‚`‚ ‚Áàa†è!L@0 Á@0Á @0 ‚Á€`@0 Á@0Æéþ›|GYÄ Á@0Á @0 Á@0  Ž`°T ÁpÇ`ðe¥ÊTÃÁ’`‚ €` ‚`‚Á C¹ß(«X‚ î *‚ €` ‚`‚ ‚Á€`@0 €` ‚áƒÿóÖj‚ î Ø €` ‚`ÀÃëÿ†jfËE.%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/tEXtSoftwarewww.inkscape.org›î<IEND®B`‚calamares-3.2.20/src/modules/locale/images/timezone_8.0.png000066400000000000000000000434041362604102500234220ustar00rootroot00000000000000‰PNG  IHDR T‰=»ÈgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“ pHYs¢¢EÝ1¢EÔIDATxÚíÝu|Tw¾ÿñ¥@·îF½H±Òâqw™Éœ31’@<Œef2qw…àî<@){ïÝ»ÖíÝßîv­º-õRò›J•m&íëùx|HHf&“ó=|ßùš à†æ™9~Rì¶DÇ”½ƒ¹MwC+¥C79~§ad`™- À À   ~t`ðÊ"0øÎÀ0À€À€Ààš†l€Ë†$€oN`@`ðÃ…s ¾éiÍs“b·Î`„À·ÜóÔÔ{'D­“ìÇ_׿ÿ1Ò·©I ‡”v€/ ¾{ˆ0Ô#íÅÉq;âoø´$Ðû=ü¼âñ‰1uáæVÀ×ÜrÏãƒÇ…- °Õ5&;˜oÜ´$Ç/C9è­í+<çWh7%¡^sãÖ1´êl4´Ï«ç…=å0óYZèÅž˜óܤ¸í3¬á:®c°†S«ÞVפ›0}ýŒáÞ96O™~×]ONº‰z±;÷ø¨µj»äcÉ×%(˜Ûô¶úÃú‰1[bF–»=6)ü¡‡Æô÷«~[°~¤€^®ßè Ï©3ô×tZ’õµì“&ÅnM«žïý”]ÂÓÖŸÕ¨[Šð”C’pÓÍ·p倾àYãøÉ »â®Õ´${S‹^^ñ|ðÅ0ÏŒá·=øÜ-OÙ'p¡€¾è‘žC&Ål™æ`j1üØ `£=¨²(l¸Wö˜G^PÝáQôáþî\d ¯xûý7[;ù ›´½ê šµã£ÖMî™9剩ÑwX_¶ÿ“vñ\\àç`¸W¶ý”¤=Iò =k®®ä  ¯Sˆé_ì:dBèý<çÑjÒ^á\TàçbÈݦoˆªÙo¶–éŠ5sŸqbL]üXi®×6ÑOºãÁþÃÜÓ„Ç&† ýú³[*ð³r÷S“oá[0ftPõ”ÑA5WªÉ£•U“†º¥ ½õÞ§=ã’,Üz?g°?[O9$ ÝÝÝßë9/„-é%ÜóÔT. ð3àap‚ ¼…ȹ áp÷áÕ„~Ê|ßþ‚ð+.ðKgeÛÏÃè>807à6‡›ûT…nAQóýBa`?®ð ˜ãý`D­¿E¿Q¹Ú°Y¹)u·ê·ºM~ ¬ßä—áÍ~©|Ó}…„•ªÑé{Õ¿®9#¯~I:_Ü¢zËPçW§Yë%º<îã*¿ÔÀá{[ü Mî!åÙÂæÀîÂfE÷…Ý™û¹VšÆU~¡ìb]îŽ[æ[Xܦ<_ÚÔýÕ*l?IÛ#–YÆZà—èÖ§Fõ^äçu@|¥æŒÔ]ýÒ…’?/j‘þ3smༀ,‡Ç¹RÀ/Èh¿ç…¨A”H»»´ërË»ÄsÃÂŪ:-/<.¾iÚh⊿ž&w¡³»Tpˆs|`æZ…!ÿ¨ô¯o†…‹•}0è”"Ïω«ü<ôüXÁÍà>xÚlÏÌýA› ‹¯}WX¨>#uç_‰šÖÝÝÍÅ~îžvSx÷¤Œ}ª_Wžº°Vá;ƒµ*OJçršTÿ£Y ]Íë‡V 3׈BÔ<…àarl¢í¸è@_á“î}{Ì’€4°§"燊_!v™RðM·†»Ü-Ü=räÀøtë KÚ¤ÿ|þ×þsÅ­â¿-»TG ŽKÿ¾š’>ÝßA8}uÏý|-ÃÇÖÀòZi»ôAÆ~ñå°*÷g¬¡-\'.Z¡¨-JÈ:"$o•³÷£Ó*ìã^¼åާî”´:0)§I|¹ò„xîj;ö׫¬åDÌe¬a³*#sàÿL‡1B&ÞD+׉óLçGM;TÚ´½ê\ÃɲKÜÝ(¾½80)¢Ö?®ð¸ô¯Ÿ:(ÈUÚ!}»Ô7ÊËâys[÷|ù­÷“wUÒ®7ЈÀõ0Ìml¿™kƒ² ›¥7Ê:¥s%mÒû'¤ž‘„ü£âßLÛU/Už’>í ¡¼Kü4f±ÅUgw‡Ð_èÙ¥iÐCƒ„A¢!€ë\Ç<˜Ý¤<*ï@Ô³˜ø'6Ë‹’ÊPÖ©:[Þ)¾c 1•wIfTýnÆ|ס´pƒÌX˜[Ò&¾ÕF¾YºŠ­µí±$q•*'¬Æoš"ßývZ ¸ÎÂjÕ‚_†ÏÓIk”å¥⛽-,ÔX+e§Ø·\5tæZQˆ[¦¤R_Á?ËÆ®·€lŸ‘i{”›JÚ¥·«N_ßο|¾Bi‡úƒ²NõßçyG¥·uë}mnºïNA‘çB£7JhbFq«øš3×{´@ìÎ;õçø5æúœÃQ¯Ôœ¿Çñ|ìb—“§½p‡³Æ¶_`¾’†®'­“½H!h7JÅ%mÒ»Õ×90Tž”Îwê×V.È;:íÕïPÊ:ƒÞLÙ´;¤ÂãyûÇþ´ pM µ¹-|–bhæ~±¾¼K:w½GrDýŸ²b^uüÚÜeÒGW½†áLωÒÝeÒ§E-â{Ñ |ã“\E ×Qä\¿HËNU‹µ#~öº.Z>#v—vŸMX›±Í1¥>Õ¸Cw¤ú%Õ·{ºgÃ×JÅ­Ò»ÙA;,»¤lý&Ñ(•¸=Jë×™fÒ6sŸx ¬Süèú´¦þÈ´SÓì–Y—%ÖÌš“Õ8ý÷—\¿ðÕ°pJì.i?ÈܧêÒlPèý²<®ï6 ÖÀ ¨KݾówRy ¡U¾Bìb_ÁnÆXÁËì(( ¼„ÐjÿžÝ•B*ü„IÊáBD­B­ Æ<Ï\JÆÁiBX×3 +¼£µó މª8)}Òó—ýk³[ÒùÒöÿh댼rër”³jS÷Fý¶Òú3®4)§I|ŰY13z¡rØý£ÇÝRå#<:qÄeŸàò!~¹JpÑyˆ[®¸Å?}Ê9ÎSÔeÞŠˆÚ€é +UÓfù)=u“îðË èšì; »»[pѺq3—²âµ ë¿÷Ýä˜ä}[p©Ãð„¹ûUGrš¤?ÿ¨Ó­#ÿØ´D..^á˜Òh ,[YbÚ™Ð!o©z¥ÅÕr`(j‘ÞMZÿÐÈaƒ|Ó¯®CRÐ/bvÀC‰«Œi{¥ùÇÄß–u¨þ]Þ%¾e­wÊ»¤JÚÅ×3ÄCI«•Õ‰«i¡U®£ž´Ÿ:€;¸„~w ‚]Œ •ú ÝÝG¿ ヌ{g®S®)ë?øA»!Rš{$ꕨ¥¹ëý‹×ÍXV´*cÌWž’>ûÎç¹.La’º‹[Ä×´+¾_íï¢.õd ¹…Íâ¿åó¾k”DþžµÎUXQÎ!UgXŸ»<Òà*ØN·}&÷°tÊÚÁ?ÿ}7WœPœRbÆÒô:Í&óÞœC‘¯”ŸG*.æBI›ôNî!ñ9Aû3TñË•a¾©®) ý®ú}« }„Tø»ê7«vËàjÞs…õ½eìS5(ó¼FÑòÀ•õ÷¶¸zSýéjO}.ï’>)j y3»)êšÍæ=RMåüŒýÓWyR<_}…ÃÙJ;¤÷2÷‹†ÍAÆÈ¹Av.Z·Çä¿ö'¬P þW¿¶À´#Z˜2¹Ÿ_ºëÓ†:ÕÞ« =ÓŸš¥7W‹)÷=?‘ÖÀ/ÄÍ‚à”h+ø¤¹÷Ð6Ê÷…«yV?±ØS‘Û¤ì´vö?¾ºéGÒ¹¬ƒÓþ¬Ù¨oLÚ ?`Úß™w4òÏò׿yh[áqéßÇÄ¿æ_IÙ!í3nUí´Kô"ÕÐq’ç ˜ÅA‚"×S8î{ýª¼ððœçˆ~~¶¦7¨ö–uJï}¿)TÒ¹ìFÕAŸ4ß1Û°k~ƦDØ 9ÞŠ7ÌÖÿ=6`”¿Ã­‚0tÀ‚WbóIˆ]ê/Ü;â‘ïzú¯rš‚š¬ûïµRåIõ'å'BÞ¯8üÁ… ðíQ…‚cªÿ‹Y˜´Òë±°*çg"ç‰wWÝ哿3(iµJ*ôÿÁ¿³<"á?aPâ*Eeù‰ï¿E¬<ÊPx\ü{ürU¼ ÜÆ Òøùíÿ¢\áÛÓy¶‰v¿?f‰ïTÝßdí:ÿjk%êT®É[$»¨ù¾CäÇ?ç=ÚáæûnÞ?ðâË HÛ´¦¼ëÚžË ŸÒœ¹_Ñf=õÅů&/w׉«D!z±JˆœpÉß'¨À[°¾gÁ´]-„×ø ãÕ“„Fß/ÜùôB¿Ûû}ñ¸w¦/ðï1Ç˽¨Eü×ÝÖ’Îgªwžéú,w~Vl¦ÛXÿíß_‘ë3L·QoÙ¥\—wX|¥â„¼½©Ø]Ö)}\p\z+ÿˆôº¡N±ÔUë³Ä')÷ª¥¸UzW^¬\sæÛb¹JÛÅÿä jË<´$û rqÖÁ Å–=RYÌåtC*#ë ª¥â¤ôáµ ùG‚^‘JüÔÊ|WáBHY,XêÕBòIØÛm„[Æ®z!r¾J¸íñÇë6+#²¨š ›Å׋Z¤³ÙAG-õbuN£ryêUMh•¯óxé…[‡¹>90rž"(s_ÐüÜCâï®v¡ówmëZÚ!KÙ¥œ{ûOݢݨîR(Ü5b¼õ?*<<~47 z7÷d~žfï›ÕeªÁa5ŠG¬åÝF©*u·jWq«ê­K…KuŒ{¶=ùe•uJçJÚÄ7¬æªN_» ð•]”>J­WÕ+ó=½},c”yN'oUß6s­t«"×ùU¡Ç”ȹÑšõb±5l,j–þvñw‘Kþ¼ÜúåµÖ×úÌú»þ9§I:˜¾WÚZÔ,þ­g$å¼Oùç”´‹¯fìëÍ;ÕkW)3¹.¾é.½Ô%DÌ à&@ïã‘l/$¬T ¹^·GÍ LÑo—¤í‘•´IoZ;Ëßó.$®WY;ûŸ”wªÞ.ëPý«à˜øûŒýêöÔÝRcÖA©½´]ügÅ ñ¬õwùÈú¸Ï®fBÕ© ë®Ë{=Õ¤>³¾§‹[Å7,õŠYê2¯‘Á·Ü1tÄ%ÛÈËì&øgz þYžÜ°¸qä9ûãÕ/ œ±Põ¼y§šw¸ç¯ïŸõœdüÒõíä_Ï’ÿš¹Ó˜{S•[ƒLú^Õoã—*ï1jÀŶq3¸ ±KEá`w©0ÆßîngëÃîÉn7s×à†ñKó1ÛW‘u@üua³ôVÕé¾úr•wIݦ­~YÖ&8}¡J°8aB¨Ã=ÓˆNÉ[‚bSw+–%­V,ŽY¢x„»×ÜÔ¨©‚_†›ÐÝÝ ˜v„ Ñ‹TBp…Ÿ .WÜ·L9ëFL¢.?"’Ñ <·"ÈÓSëU+òH(n“Þ—¿Ÿ¹_ú‹i‡8Œ»×ÜÃ㇠#½Ÿ»ÉËôâsoK‚»è½z§ùܽȿ ê´ø÷Ÿ¶*NHŸ”¶KgKÚ¤7>_?rîâTEÍê·f®Q„VùÞÍÝ €kê®§o”ý³Ýírš‚NšwJ»ôU‹V–'­V”æ4IOT¦ÓÞ{Ë´MlŒ¨U<ûà ûqGàšsN;P·I\%>&/îYØ|J˜[×ÍXï‘‚Xê7­´]ü'ñ>´†ÁÌÛ| Ÿqxþvîb\7:‡ÁQóý JÛToÓïõ » Ž‹ÿ*jß(8¦zðÉ?r„ǤÜŸæ¦DLB«„€loÿÂãªW8s¡w/r®<)uçÿ¢Y¨ «öЄÏrWÄ/ó4Üm"73®‰Á“…øå*ëg÷ Ìõ»$ ³¬C|ŽyïIK ¥â›ùG‚~±7hÛŒA‚'ßþð‹÷ßüèĤìRrCàÇs38 nzgÁ7ÃSxbò¨[b—¨ÜRë•e™ûUG‹Z¤·]è=UÞ%}’Ó¤jÏܯܖTzôMÙæ“êb3Ãþþ죱˜€ €ûáž,]Àà“î*6KÂú³!ëÈôž¯yY\žô¶¸LÌõrѬSæ–~WqâBHÿŠMGýú²v±.»óÑIé39,H¥ÞŽ>©®ë7‰î3×*œÄ"ŸÝÎÜÜøáâ]…ÄUJaÐco «ö¹#¼ÆíÁàrï;ÝtîOg4(W·ªþ\Ò¦ú[Y§ô~'8ß°*myW»Ùp0nuÆVÓ΄ΪSâ·BCÅIéÓ‚ãâÿ3Ô-ˆ¨õ'ôò¦ OÁ²;ØZ!BHe78~œÉÓœÄ-S>·Ü/Ü´M¹7»Iúß”z±!µ^:TÚ!½CçýÆVÅ õÇ…-áÿŒY™µÙ%½Ñì’¶/eƲÜu'¤Ï.ŒêˆÝU§Åî’6é5Ó6Õ‚à Ï)Á·tww ‚§ö´éÀû ï(Ü|×ÍÜàøq<ŒžÏê7*WX; g¿2õåüçE'þz×W¦v·†¾¥ÙdÞ«(_\á˜rÌà’Öhž±ó[ËîØöøbÎh·gn¾cè8!v©Bð73®½„•Êœ&ÕßX“ðÓTqkÈJÚÕï6‡¾·:m›“åh²½©Cë`nÓ¹eîMÕlL:–,äuÃvãÁ°ù5ó]ÒëÓ'Ä6D?ø|Ä(î^\wÚ*1çøªÓÒgìztc«¤-øÝËŠW…/¨™\;¿Æ-sOªƒ¹U'‡Ç”fƒoáò’ˆE–-!sªç;˜'Û&ŸÐ8˜;t6šý1O‰ÍÝ €ëN*ó{rÚ,ïøåþ%¹‡T/3ÒpãªàxÈ›bõ¢*'Ë!£“åH².T»ÎÞÔ®uN;höÈÙ•ngl×Z¿¦ýü{úÏÃî^\w“ÃmûÝ?úù›lf8?™Ñ ØÌNH7tÛÔÏò…ÿÓ¼;þ„¶NsDaƒ‚cÊ‘ä€Òùž9»2ì’[u6úN]r—†À€Î7ÍCpÓ; þ™YêËÊåse¸±uZ:_Ðò¦wþš|÷¬í‰ëÒ¶åŠøsêÞøS‰ë²¶Ä¬,\#V/®$0à'ã—á19v©byN“øÿ*O²–áFWYgð{i ‰]éûâ_*ï’>¾ðu±»°9ø?éû"ÿ¿ÖÐpa}?wƒóªb¿gõ›”öYU›Ê:¥OèÈßè??gAÞB5øÍ&ÓÞðù³ç)ÊW–ømÌc„?d!¸Â_È;>MÐoR%å•þYyªgç$:ò7°¬×üœy×ôÿŠY™¶Õ9õ€Ù6¹KcgìÒØ›:Yô €ÞÁ?Óõ‘¨y–zqMasÐÉ’ö ?Už? CýÃBÆþèÿQ–/¬tN=l”wKúrç¤/vP"0à§5dâHÁ7çßó^ÏÞ41äÅ”…v‹Z”ÍŒ6\ß“ÒöÍøW^]öų.]ô"cŸól…ÜÃþ±%íÊ_W?¦ƒCCô‡Î­™ïœº?å»C½PÜJ‡[-{¼cÊ»T¥ƒݦ$/j ͸CÓì’vÐL`@Ÿ¡¯s,õÞIeªй¿î[¬~ ž]3×1¥EO`@Ÿ`k'Ä,u“{Xy¸ò¤tŽŽýuœžtJ}.¥>þ„Sê!#}‚Cœý]aÕ~“Rv¬(ïߥcÂBÏY Rwi‡ú=UUíl{c ½ß ª Ctës©þRyRüˆÎýuYø|¾à¸úíâ6õûòǬÆÈ—#/wH9j 0 W»éÞûnÒmËKÚ$F®c•v¨?(i—>Ì?ü¦¹>ê7Q‹Ó7{doÊ&0 W»÷¹'U‘Ÿ³v½req‹øùh:ø×w›Õ’öàwµ›µ‡]Ów¥Ðëy=nr×ÚÞ9×?زKÜQÜ"½.æVyR:_q‚NþµœšT~BýQÁñi×Õ%ðÌÙ”K`@¯í-˜v„ #Üw£ÛÍ:16sСÔÝA{Ò”Ë Ž‹ÿè9 ú þT§/Ty—ôiVSè«37j‰ÕójœSw§:˜ è3¬AÐmT þ™^Ã:&LÂgù ÖÀ ,ú«±'Dtww w=ûì ÿL7›ˆZ_©ÜO°~.Xƒ` ÂÉϾ̈;ålj%~Wý³&…ÛÞZíŸTÚ.¾ÖCQKè›Ó”.uLié ö¦ÝTÍ~ä¸í†ÉqÛ“ÇG®}lbø(î.ülCDOç~Ð_ê ßäœä LŸ(üêÑ[¿×ë;%: Ã&?WÒôr_Û)uoäïbWY¶»¤}¹nÁÎpD;Vš:Ò¿øi¹Fxç>þÈóŠÛ¸“ð³÷ø¤Ç…a.C…TÏ_³× ©ôü³½JÛT¯ö±u Ÿ$¬›Ùä–¹;íË5 m:[ýaÍÈ€’€°õÝ‚´¼[ð¯9+ óHçæ¾/±$@>`î‘ÄÕŠeâÙ¾²›‚_ (©­¾¸nÁÎØ©±5œ˜i«?j e¶úC40ðc(òýŸ1nQ¬)ißéS[¨v¨?˜¹Qßè–¹>×ÁÜ¢—×/”¬*Ž\\±Ä-}SÚÈÀ²À‘¥40ðc$®V•¶‹ï^鼇Þ3 IýQÞÑðWÖZvzdïÈG.„…•%™gü®àxØkŠ²ŠšQ¥àÇŠ_¡,Ênÿ”Tü‡|–A¯^ä|R:gÙõõì5Ž–&£½©]ç`nÕyæìÈLÛ#o ûYÁ±ðxd®ÊI`~<ÿ,û°j÷qªBw÷¢fÕ+Õ§¿÷rGþÂIÓg®Û9 ç [BßÐÕiû®-°7õœ³ •GœÓŽãפî¨<©þ¤ò”úýVÍQûäƒ:kXX&\¾Ê…á^Y“vñÜÀ¥8Æ;ô¿°Eë );‚æË§FË¡}­Ón 5g¾ü\ rUœÎçRýozƒjgQ‹øoùTjë×>ú!¡ ¬SýAy—øiõKb·\U§Ekå)HÊ'8U.¨v²6~u7$¹Ü2šÌæ] ]ò{.ë y/l~Ù»äCº1ªÙêç|ó½R u³<úÄÔè;¸€+<áã6վГ_?ñ¹´]ú°à˜øZöÀC9ªßd4ìÊhPKß87¤ÂÏÙÛâ|Ïô…A!ÚbAæ~é5ßs¤¡æŒØº7âÆQÿw4䵬Æé¿7×kZ’·%¬ÍÜ¢¬XRîd9šüͰðÅÃZËÎÒŽà÷Ìõ‰®{SíMͺ) õºñQë’ÆG­ýΚ0}}ÒXinÒPwËZ¸‚1~#î2Ô©6ä‘þqq”¡ò”ô©n£r£f]Ò1Ññ©ÐÊ€)ÃÝ_xÈEë4Üú”¡UòiӮŒEABÄÅ3Æ­ªãU§¿œ®TuúòÓ™ä‘„Âæà·bWeÖù-¨j*xç¯)°1ÓÛZt¶É{S§öRaáBµê½ò¶dk6ê} VËkz¾žÒn­ŽË–£¥S79a—~”¢Â–Ö®`¼úù±K•Cg,Ô4«þœy@ü¯ÜÃÒß´TÛVªúe¸‘s»˜©=!á9ÏáÂ÷a_Ôíª×C€ŸÆCcU÷<X8cEñšâ¶·Ë:CÞÉ:8ý÷!sªçÙÚ®iX°…dõ¬š¹ kÓ·U-¬ò-ܘçdi4€^ªg ƒª6Ð9í°9°li™zÖ¬¹^¹u9òHÀµžZä‘Ýšy ê•'ÕŸ4¿Öõ{÷ÌMÙ 7±Váhé4ô¬Uø‘Û¦^>0ìÈ(l yëâp…-a¯yç­Ë'0½ÔÏyüj˜gæ” Qëâlu†ë·x¹Uç•·9§¸M}öb`(ï ~oƲì  —ð«»ú=2NüŒ³á‘ç|ómÆ….‰˜:³Akoj–;ùúk³CR«Þ-k{†ªrvmy—úc9,T–ÎË»1)+T€^êö‡G O™.ˆK»…;3౉áwXÃØ±b­ÊÚI·ÕÖÙ›Z )í?f±³!|~áŠô}Q¿«<%}VuJ:—ÝùJø‚Ò¥æcÐËÝzÿPaÈ„0!tM·pç£ãúÝýÔäAOLñô¨Àr÷ Ó7N›:sßL{cóað)\SPÜü®<ºPy2ø£Äu¦=®é ¶Uú ›u—0db˜üiÿG^Pê5%qOÒipÍ8hNÞßžw4ìŸ%íÁïj6i›Ü³7æØ;µW<ëÀôN7Ý?¥N»9êŒaëŒSq« {UÕEKB欰3¶€><åÀ°íÇKÚîÔØ•º}æ]1/UÖÌQUå-SÏ.X.Õ”/4îˆ>3maæÏœµy¶É'4ö¦N-øÅk™ZôbMíì‚æÐ×g,O¯sÏښ霺/Å%cKføãöèú½ªêªyªªåe>›s쌟¯m 0½=0dŒ³†øšüKæU¹fì³D¯ÌÝ ¬˜_í“?»ÚѲ;Õ%½>U=;kT“¹FšUº8uoÔoÍ»’ÚÜ2·eöœn•y×´9kƒk‹—†Í+_\Øò¶*O©?-í>›,ì_3–篛½w&¸ŒÁw<,<ú‚$ u3 ûº»…¿nõMs×3ܲöýÁ)ÑNP £R„á^ÙÊûbå#¼s/”\yÊ7ÿBù|þÑ·@xN.?¹ /”õÿï0 (_\1}iöú ÊùÕN–ÃÆï íZ÷¬½©‘‹-Û\Òv¥Û›:5¶†NT³°º¸U}VY(j ÿWÂZÝþ„u†}þ%«Š'ÅÕk ÀeÜzïÓƒ‡L{b˜{êøÑAÕn/FT…é7°Ô-Êwî“êr›T$Q¦Lî;Ñ äšd rM~Î'òs¾=5ŦZCµ m>/Û Ud7Ò¿ÈþË*v°~ÍaŒj¶zjÒ­CJû¥vEÒú¯*Ê8ý¿%íê÷s‡¿ê_¼¬ÄÁܬ¿ÔT$ç´=©N)‡Œž9ËŠìM¶Zµ3¶kKWeŒ|¹ò”øYasèë1+-Û<²6äØ%·±è¸’!ÃGŸ¾>ÒFs`¦­®Qï`l4ë·hµHï%® X—¼Eµ.ÿ˜ø·˜e±»Œ«Sm´“¬5S.ëãgÚj5=¥kÔØh{J{é:ø­²Õ²ƒ–o*ÈaÁ5½>Í´3©­â„ú“š3RwÅIñ¼eOÔÿÆ®JÛæW´!ß9UmhÕËkäò/^Xá`:šlgú¢$<ú¢ú;K6:¨z┄zó¥C»ÎÎx\½"{casèÕ/‰Ýò¤o†•‚c¡¯k7ëÃæ•-vN½ô)ÏW[ö¦VSê~‹vyúÈÀJîà î}ÖAþÐïiGí£c¥…ª¼¸V^$\-Ÿ_ðe`x?t^é’¯Œ0^ÅK÷T5qr®KŒ0´êä©JÑË Ö6‡ÿë«?ëë£ âùäm±îYË í’Ûµ?&,\,kè1LIØb¥`„¸¢Û.Ü9dœ`3s¿ðؤˆÛÆ™âWÅm-ïRôe`þ jIî:yÍÀ÷ Õ.ùð5ç´F“oáúü°y• 5›’÷¶„ÿûRAá‹:-u§ÔGŸñÉß÷]ë¾w±†øþn½¨0ÔÕ( sñ¸Ù7Cioܲ¥¸Uýv•µÓ.Ÿ–œÕõGeù²²ïFVŸ»;ÙÞtBã`>`JX—²«°%ø­Š“êªN«Ï]6,|Vԟį±ìrMo4ÿ°†ö ‹Ÿ¿ íúI±[5ò±´:ð=<69B¸ó™da˜³C¿UÞÌXn±Ô‡w•´…¾SyJú̼+á„}rCò(E…â*^®¿»y¦g@QÅ÷ÌÝiÊò95Y‘/Ëk¬¯Õ]qòB ×-\jíÂW+ã@Ô䑉¯uü¿XÑ¥‘·d½T˜¸ðø£ÉòLŸïΤ·ÑБæø>ü¼ò^Zøîn/¸›£­ŸM¸Ù!1Î.bNlEòÖð¶øU{'EÏJæžæz/ÓO*ówÔlÛcÙ:¥>ú¿ŠZÔï—´‰e ªKÛX’¹_Õ˜¶GÙUx\õ¯ªïXÇpakWõ‡©{NˆÕò©ÏÇ Ÿ‡sÚspíì9ÙuÙò9 ò:;c§F.{c»VÑ+2ê‚gWÍ·7uõœ1VœøØ¤ˆûHC?Ô ;žžóôÞî>-Ü=bæ½II#mbc‡òOòؤiw]ÍkLq»Ä×ÙP0O·Ñ¯J»Þ7K·1 6´Òóaë·H¥O‡Tù§dîz¹¸U|·â¤øÉ·>Kç3Lÿ½eOìK1+-Û]ÒÍòÙ Á³kæi76‡ÿ3§iú3Äý:y»îpÒK}âúÔIRwYöÄÖnÒöÎß’c£iÔ=¯ž¯|lbØ}OØÄÐÀÀµpÿ/a¤o’¯ÜLÑÂe²ðÄÔè«z®c‚›õß!ýìã*Ü7úqÁ/Ëë…ÜCb{å© Ç•wIŸh6éݳR/.j–0ëê’Ž'm0íqÏÚ•îh>š,Õ̯ [±(zEášÚ‚buÕ<s‡ÎÎpD7.liÈã“#»íaÂŽã‚}ÕëÝW«ªJÛ¥³…-¡oÌÜhÞë¿)×ÁÜ¢ï9tÍÒlŸ_º´¤=øliGð{†­ºÃ ëÒ·ç ûgÞѰYvOÿMôòĦË’wÛèë^[öÄÔèÇ›ÁÅúª'¦Œlf¸õsJ´2ë@о²Nñ“Äõ¦=Ω {cÇ[©:¥KNZol¨<¥þä Ò'ÅmÁgÓ÷Eþ>feÞú€ÒÕE¾…« K–•MIÜ÷ø”¨qæÿeÍÐçù9d4¨¬!àÃÊSbwÜ*Ë—´ý)_=_Á#»>=ó`ÔªNKŸÉÛ°VžT\qRýIÞáð¿)ËçWÛåuò–ªÚ©3÷Å>15zWèãœg:>iÞ©ÚTÖ)}(âVÜ&½/VÏ­±3¶~äóbW¦n“GäÑ…¢–·âÖ¤nÏØõ‡ÊSêO³§ÿÁ;CÞÅÝl4ûg÷Êváê}=0h§)r›¤?VŸVu—uªß·ì ÿ“_Ñò{ã—§6;ZšõQK V§ï‹{©¼KýQÁñÐû®.LÙýkùôè²®³aóòWÉ# ò‚g[]£~¬4Gi}ùþ\a ïê7Ì·Ú3aõ̽ÆÚã1+ ×D.ÎÚ(ŸÞloú20ô„†”ÃÉ®éÛ3r…ÿµ¨%äMÏܹ‹Ê–fŠú“<=ɼ+¾+°dnµkF}š}òqħÝþðsws‰€>ªÿ€A·¼0m•Ê-}s¶“å€ÙÖЩ±778˜[õ_ §¹eì·dšö—Bk`pI¯OsIk4%­×È9þ·™‡/0ìt˨˲>V?%qOô#/ˆÃ¹Ê@eíÐ?3)n{”½©Ã.îˆÔ®ûvXGZôÊŠUò¶ªÙMáqMß—â˜Ò¬÷ÊÝ”R›·*iCl[ÌÊÄ&{Ó‘d‡”vÝÔ™ Ϻš¦r•€>êgËã£ÖM·ÑÐÙ%“;úúˆ€’奩{ãOi6é¹elÉr0·Z¿~4Ù·`q™zVñâ¨%íŒÍz90ØhökG–{s•€>êž§mnÊ.a¨µcoûbĪÀ‰Ñu±¶úCk@Ð_*4Èeo}iÁêØUÙ›¦-¬™T¹¼LY¾¬Ì§`E±²¢h±_á‚Jïü¥%>KÊ‚ge¬öÉ2¤N« p¯VI%bœCB䌧GÓ@/4dbø]Ï8žæ™ùì0ÏŒg‡º¥>;N>'u•²bqå´……+"f­7íˆ9eÙ=ý"›·ë·jŽê¶hŽº¦×§yç­.0lÕ²ìIì2ïŽ;³Â´3jqúfeyÕŸ‚ÅežÙ›rœSw¦{d¯ÎŸ¶ oµigôé´†ð—­_ÒlÖR•g-TbOK½Ð³ÎÆqχ,Œž»5abÌ–žš»=ÉFwTko’§5ëíŒG ªª¥Ò¬Õ^yu9òÿSv[¦/Ë]—´!m§X]3×1¥>Õ3§.Û9­Ábg”§(ɇ¾uj\Ò›LÓ–/IkHìÊ9ùæú„®ØUEk‚*—–9¥6™&ÆìÖŒRTØÒ@/4Â+gÂä¸íIŽ–N½cJÇÅúÆâæv±Kc—Üe òní:'K£I=«b~ÒFýÌQ/'¬3ïvL9fp0}ù¶êœR} ––zænÊ‘ƒ„½é[²€Ÿ{`øE` €À@` תäõ Ú‰±õÚ‘•6´@`ƒÂ…óŒÇõîY»2<Òk‹&LËuŠœHc¿ìÀЪwL9höÎ_S0}iÁjËžøûÃ_Öo]>+pXp¹0}BxÒv$ ü’ƒ|þ‚[æî´˜uÙ‡¦ÿ±¸-äíê—Äîš3RwY§øar]ÀZu¹O„508>iûÜ Zø¥S»Ö5cÊ´¹k2†¾Z}Fì®~IúJ‰Ý9MÊ×R÷(ÿšZ¯X6Viû-ü¬C»ÎÞÔ©•§!Ù›'‡Ì©ž_Ь~§â¤øÙ×ÃÂ…ª<%¯<)ugîSl~ArxŒ–zO`Ht¸–ÁÔn­f½{öÖ,ìm™Ó—flš¹ÁØPÜ*~t©°ðEî ›¬a-üLƒKz“)jIÑÊäí íÒ¬²…éûCÿVqBmgüÚÌ-¾ëóå×ýêè“A^¿Ð¦UÏš_£ÛbæuŸän”64û/L:f…kÏîÒ#sØk®j&Oš)_8Ö6a¢9`ºIÿ-¯Ø% ýÇÌeR€'Dº½¨ôfû¥G]{ôï1Î.qÌ«²e®óâö&I·,}–¡à ¿®Yt$uvÄÆ  .ÚýÇ-è.ýG Ÿ( šì"ô2…ž”n½÷œ\ëd¹9xÎâ­0‚Ì¡k§ºø,/=j=Oaaò Õìð âï¼Yƒ&;÷Ql5 ÇÛ1‰ÀÓ †!ýæÅS_JwÐ6èe˜ß¼«¥7ðÏ$ôM*[ås(¬_<Å;ßj„•¬¿ùi[Œœ# }†Ï`€§©{Ÿ!}çÇï wÐ5jŸY<ÂpÐ_W›#F9'j{ìd¯\Û16q„N^•¯Ntdâ€g¡GÿQýç/ÙÑ í'¬&Xúºš6xàûN MÂð™LðLƒ¡_{ †f•ú’aš™S×—úö:Í‹Iž—žÆšƒaû ÕEãŒàZ¡íîMž—^ƒ^iÁ ¾h €ö ÍÁ¿¿Ý]’D0í@ÏãÚi0Ô ÀóÖkЄÖñÌÁp­½ƒ-Á<#/˜)Œ³ ,}³«È ‚MÊIÁNuQè3tÊÐùK^_ÜNƒ¡;3‹uÅýqt;"×TnPîמ_²%o¯GîñLé’$Ý%m@ùÖ2Ų•+äukê+7TyäÌq4\Ò:è¥7ý t™’Sz£fQÁ¾eÊ2O)Õ>QˆZÈäO „¥[dSÒ‰oÔw¤Ú²&ù²Ï„œÌ<T–y*8?ë”,#ý¸B•¼#$:rEàØ…1L0ðMŬ ž = »ÜÑNo~8Õ·[WLÒ ÕåÍâÅ òÿSï ,uUº ÷Îð²`†€o@QéÓ]¹Ë'ª²EþaG‹†/Úß }¬¼)ÿSöùÕø þ±®©Öýüó˜hàëPî"ê=çdœ”ýOÝrS‡†‡î¦Tv]þ7Õ¿Dç´nÁ <.w·¹Üû唚‚Kò_Ô~KbááhÈ:%»ûšÿ|ic4€Çà¦ö~)qS`xÑù;Ô¦çÇ;ú¾f_`¥«Òm€¼œK“€GTä;8qsвÂ+âoK®‰¿«½'ÿ¨öžx_ß–`B¨¸Aüeòöà|s0 aÖ€G¤¨òë»Æo”j·ÿ´ämþv)ÛK ‡Å#éÇÄË—ä?¬û–¬:ÔÜMš}!»åec˜uàI'%«ö… k~ºT0™W•O·%ëÅ^¾.S5ûüöJo´;|4˜ŸÁeñwK·úúøçp›UàqtÒv!7µ“Vã/¤í…¨•^34ûüW•4†Ü©¾-~ÔÑW .É™¼=0%bYÐËÌ8ð •ÜNlýµÂ×'ï¼ü¿;ú†héùëÉ.GÖ[2»ÀÑIpNó˜`<¸¿£¯0TÝ?Ö4ÊKýz3¯ÀZåo¥=t¼ò¦ü¯9J¯‹ï%oóWÎ ¶íé“á!8%Ù óí™`à›ˆZÔ%°ÀÝ&ëTÐ…¾Êp?ㄬ)bY€Ý¬§þBï)Ý[rë6I¾®ˆúAµ7$ªèªønGßÇPuKñaö™àKÆÃ› ‡ýK#ë]& BŸNÌ2ð $l ôÍ=/ûÑ·á<†ª[â‡%â»Ù§å?ˆ¨]hé>»;3 |…¾}c_óÉ»üvGãÑàé»Bü·È­‚ };-uf…øfÆZ$l Tä_”ÿüQ.Kª¹+Þ¯¾-~PsGü¸ö^ûóóù°¸Aüy¿ø—'Ïz)u§\)öì—82½À××[.òšu2ø˜ùÍÿý¯:ë ê¦øì³òKÊÝòªôâÖüKò«•-â_žw8dž”]‹Yåk·Ö¯ë”EÖœö Ÿô ® z˜ƒ žh0”ûÏ3 ¾bŽ‚Ê›Ä?äž¿—sVüŽî`ðvãÑà³Åòw³ÏÈî,Y`®„!Âj|þí1ì—ØõÒ’ÍWî rLÝìd~Œ·Ì÷ñ³sè˜tûýªlcm†uœe!ô`N€'Æ?ϧ{ìk‰›ƒÊ“6D¦í’NÛ-Ž *òíçŸã¶(¬ÚÍ/~ƒï¨€âà®n*×/| ‡x;!ug°wi±pÓ´YPî‘í1¿‘ÿà™ÝJõ¦ìÏÊݾ=´ö–Bw»"OJ`¡¯0Å×ÃÂMëÛÕz±[§ÌÓá‚ö (D¯ æ…Y›ß|w³Èoˆ"–~éãäù IÝ-¾ª¨ ¯¨ðM©l‘ÿéYƒ´o"ÿbð/6-ò,6<ORH©ŸZ (*?¹‘‡ÖQ°÷H±d]PAÎ9ñ{™'C.ù¬¨¸!·îÜ9©æ®ü~Á¥àŸÇ½¶H½ Æ®/¹´3®©Ž“ .ÉÞxp[ÖÚ{ògv‡$is¶ö@ÐòrÏ….ZO&hL¦cBÝw…”ra~ؼ9ge×kî<»»#µ†‰y”6Éÿ¡~= 6 ×m³´!EŽc–¬ó³Z6(fMÐÅ˼ã*[d¿¦ÁpO4eœþîâåÞ¦Në̬í„ö l}öñ¿ÒÉÏgž¯å_\sWüð™Úf†òò¿¤íôËŸn7€YÚ‰Ä-!ÅÍâ»uÏádçÖñ¦tò´ø®î |…Xá;½¿å+¦yÏdb€öÀ7ËÓµ¬Iöãç ŸÜJ5ã„솬ÌWºS§±¶“ŽwœÖ=¨À‡Éž·qö–# ¯7Uß~¶?·ÂÐ$ÿmÞEù¥Â˲SÅ !Í)ÛJó½‡3;Às׳“Xºp¢rwpmù ùž×JCÍ]ÑTySþQþEùb×øÄÏ ˜Û›¹ž£è•BçA“º{}Gå{Ï*¸$Þ1¿qÿøyCY“ìçÚýÁ¯…V/š-+víÂìÏÉ"½‡ Ü#ªfèæfž 9™uRÖ\uKþ÷g U·Ä /˾³t‹wxÿ©–= Ü™ à9êä©ó°4CrÞ9YcåMñiAý›ÏgÃsqƒâ‰ƒ7šŸ“µÍâÝ“·‰‚r¯(øe{Q+[GêN™Zí-Ì ³fö€§)nm°<÷\ȵòfñOÒi{ÀZí]ñÃêÛò÷ÊnÈ_tUüyþEñûY§ÅEWÄŸÖÜ‘ÿÓü3÷çq«ïˆÿ¬hßÉ8!¿°t‹laôjy÷ÄÍâK!Å‹¦Ç® Œ3dånYeX÷üùá ¸T x†Î-øe{ þ¹>óó.Êš¥MÆuéÐmñï9çĆ”í!åQ+‰Ñ+,SwøŽU¿<"y‡88~½ÿôämù'ÄÓ¹gņŠùï5¤•sÀ¼g<";¡Ý/î4^ß®º)þ¹ú¶ø·Šfùßã×ûÆ;$¸ö`&€'(fM  Ü# &Ó÷…yá.7ˬ²OË·^Šôè+ gœß˽œòüºõž0»ÓŸM„×~’$\Š4û¥Çß#øåútQíUt÷2¸õ_ºÅ?©èªøëÇ\ÁøXæÏß{eMâÌ!ñ÷¬Óò_¤l˜á˜Äþà‰•ù ûMeBx}ÀÔ”bˆñX2ãDÐöü òïKóüýâñ·);e›’·Éº}Õßžê5_Ìó¤Þ\PÖ$ÿëc"mþÙÊñÃÙ÷â7§kŠêÔ]Áºø þƒ™Uà11e&SÓ'Ã$اÈïQ †I©;C”¹çå—Íoöo~þáƒË¾ÎåÊ›ò¿§ìÙ°tKH·Gy^A~BÌšà¹'d·éoÞMÕ·å\’ÿ:ýxH¡ù¹û…U{öÕ…u¿0;ÿœÏdc¼Ë<ÁSëþrH‰·«X¾È7²Þ;X¹W^«Ù/®É=+»PÑ,ÿ³´Wá›ÞIÚ䜶ӿ4¢Ö\he€Å£>¿RÿžúƒAš²&ñ½¯Ze0‡Â/uÒ•»çùf¹÷LÛ"D.ón}œîû·a¢›uç¥[ƒÜ³ÏÈÞªº%ÿ¿Ê›²w«o‹˜Ç‡µwÅûOâÖ§Òž‚ôc²sþ¹.Cô‡¢…ÈúÀG~~Šª!q³Ì>ç¬ü­/ûEWÅŸ-ݨšbÝ·°1RˆßÀäßT¯1“{$nôÖ”4Êþñ8«õ~îÂý’ÙÏä%növ± ;ç^L{ìç87ÔñeÝÁàÜòæ¶ó¾èV­úÃÁG<õž–åßQ3©Àb»ÚsšþPàÖâÙ_5*ZÄ÷ .Éþ+ï‚ì^E³ø—Ö7íwå_¸ùXz3¯Ür&n]ÀËÕÿ[þµžät;éìÇìÓ²ï~ás¼'­0Ⱥ3°@^á7„ižP0Äoð÷Î='ÿգĂôæ?ÿbÈ]í`]ôê kYYÀlõÞÀ4ãÑà½Æ#þ•Æ#A»Jå¿®¹+ÿ¸öžü~Á%ùOÓ®]²ÎWŒ]ãÛí›Ñ+œÇ…W;̈^é-[². ;y[HUÒæ@]ô O+ýaù„MbŸLÿ^£l:yê?;üÌ9ÅA+|—T;AVâ#Ü1Õ\º¹©¼{þ¯©V*ô¦yMFÍñžçüpgóÿö³°‰õxÉ/Û¯wüZ¿b©ÇܬSÁ[Ê›åï^–?eG ÎSç6€Yž»x7!ç\”Ð`*j]m·ÀÂCëÓYVÔÅ;÷³ô39çC[OzŽ\(yéãõß[ðËöªü„Eº'ûö»¤9 ò2añ²!ûlxë÷|³Þ¹®3¬eÓ» ÂH&@w›Tà-xj¸ tL#ç† clâ„a3üx1|f„•\6Ó¿ë¨yácLpèoþ–…Õâ­Âï|a¼³ª5&Œ·,:uáÅ^}†M{ ]'º¬æÆìŽ›¿dGؼèÊÀéÁU.S| ¬'¸¨gŒš1~Ð$çAÝû }©ïh«Î]uÃgðßVÝ{^•-úße‚‹fʼ˜ÝKtÍê€òåº#±ß‰Û¾×6í¤Ò&õ|’Mêéø‰‡ãæDïXÅ+×qè ŸA¼ŠÀ·1ú ¦W ½Žï<ÑM?eÎâ­ úëj}‹2 boQö¹˜–ÝÿcÂÖÜ}®YçvÚÛiæ˜P9讫m•—t³Ã7÷7¿?¯$ð-4S¾Rè3|Z—I™¯Îޙ䨿®r4Ü09Ê_/Ì9ý£º7䦊–°?k©/)–¿V¿(ÿpŽ£á’ÎY¿9Ï:6ß³çÀq¼À·ÍŸM&áå‘3»N^”=^ÜëÉR(´Æ‚¾EédlÐD­­YWÞ¬x¯î Ñ$š»âG%×"~—u6ñ ÍaUCìºÄýó"âœÇØÅóbí…ÉüFAŒ³…m‚‡à¡ñzìߟèªoý8l†_÷)^yöÖ‰‡SÄ‚súU­wÑîBϼýy©{µg¤Õ…Á ú7¥rSí=™)çÜâï{¦«ÔcíG3+ÀsÔµ_×Öb…¯Ð½ßàn!%‹ÜÃj|æ,RMè4É£P°ôùdø S}‹…©~Ò(iþ¥­cš™0- \°N8(Œ˜ÜÃÒ»ÐmaòÉÔ±àhhRùÈWL¹Vp%êç¥×ÃÿX{O¼ÿP0ܯ¼ú·Ü Ñ?Ê:³ä­Ô× §Ý27Ï­.KêÉ,ÏÐ ¿W…9âÜÖϳφ yCÛ%=#êüsÎ·Ž„ðÐ)f³×¿<ÑMßw¢›¡ïDwcßIîéý&ydô›ì™Ù6eõ—Æ”E9ý§xåš?ÏlŽoÛ´siŸÅ •gÞÉLå¾Ô«9çÿ´ðJôϲÏ-ù^æé¤»åÍáïÖÜ•\~#ìO‰Ûsö»çœN÷È=gtͺ¬·×\ÖÎ[6ÒJd•xVÕAÒ‡N‚йKx]€¼Õ{BÆ ™¿þPpYÁ%ÙOŠ#ÞIÙ­>媯ÓÎ Ûf±)ò“eÙ:¢­"7ǘ?šÇæXóˆk‹7ÇÏY¼5ÑNuQ-­(| ú*¯‚£Ùº£‰·õGo)–•¯wN?¯wË:g]Y¿Zw4­Q}@{ÞAYëhhVš^m“zV9+ô5Ù+)z™Ü‰YžWm…ÀB¿AÉÛü’ô‡ ÅÊ·„þŹç嬾#~TySñ~Êž¬#ކ+ZÃM¥£±YmªÇ­,<nYç ±³÷¥ŸLxcñk9»õ6A;è4.gŒæXPÙk4óã$Mó/w>3hÀ8û$& xš |„ê7– ³B-lâœú.Ý\Ü ÿ]åMù?‹®Ê~\Ò(ÿiÕ-ñ}iÓqéõÐ?ÅmªØl«¾—òEoü¿îpNoÔUn¬Œ^¯;*ÖçmW,+Ûà oV¶ý»-*;Õ•UÄÆˆ‰nË—‡Oë>jn“xvøkIŠå+WfœŽýïüËQ?+nXü+i?Ãh¨SÚËõ³ðUõkìu7¾Ñ*ƒƒþfšƒ®Yéd¼¦ö-ÞRæW²¶*a[ÞëeMaïJ«úŽâŸú£K›]2/è´×´Öñbàyƒ_éàÙaëÓµî9‡sGÁ^Û¬ô):'.[W§X¶¾6låêåñ[ w¥îÑŸŠX]³6y·î´tbô×8µŽ7ÛÎ\¨hVü½èjØr.ÄüOñ¶V€v vÚ[iŠek–\ŽøUÝ›rSE‹ø’kaÿ—9ò—†ã‰w"V¯Xe§¹™ö ¤»ÙëÕ¡+V®È<ÿÝŠÅ{Ò¨º%ÿ°mÓ´Üdþü£Ú»â}ééÒëaïÖܕߗVjîÈ?.¼ùëœ Ñ?NØ–~$ewÚ¥ðÕÕk M*V€v ÍJYÝò†ãÑßË:ûý¥»”çC——¯¬XSëd<˜åœ~"]ºÌHº$I:CÁ¯l[iêÞ̣ſ©½'ÅøAɵð?dûžú€æ‚áXÂÝ¢†ðw¤3*Íÿ–°U}JÚÔl<‘Ö¤: ='«­_©X^¿ÚÉxUë]´§Pº;Ò§—8 @û éîDîÙDzüË7Vøï.rÍ:‘a§mI“n¥êdlÐ8§Ÿ×K¥ÍÑQëJ¶Ç}·¸1ì™§c¿§>˜Ô¿-ýHÚë©W³ÏFÿ(a›ö¤bYö®¢†ÈßHÁq*î­€òuU®™Ç3\2NŒõÒã85ŸœÑð¹}Ð΂¡íö§—t®™'2 šÝ« ¸æ]x0/yWÖጓ1ÿ¶7õJøªŠ ÞE«jÔ“¯^‰üUqcÄ;•-Š¿©ö+/V¬­Î:“ðÌ3qoVn-—VõÍʶÇ}°qú‹oÑJ0í,¤;”o¨Z¼6w÷¢üyƒôo^;ŠUû—^/n }W:3¡ê¦øú@jCHMùº¼‹Ñ?6Ÿ.^[±1leõÚEGr ×Õžy‡s<óµ~þX§B @û †¶Ñ¤z°ñø³€ËZÝYƒkæ¡ì°•¹;’¶/½ZÜùÛú7e¦¬³KÞªZ_³±d[Hͺé’¥¯u4Át„`ø¢ƒ×®h¥!­8¸fî*XºCy¾¼9ô/-Š¿Åm.Ýf¯»¦–Î_øü%LðBÃgC ‚SFÍÁäëU·Bîç^ˆù‘¬vS•½övÚ“ ‚è°ÁЬr0\Ö†­,ئ:{/fcÞ.·ì³F}³’`^ø`xp'¥ó÷œíE.Ç3þÓ]Žà… †fs0œ1ºfÌqN¿¨'‚á_†tØšt›Ô§ mÁp`:f0<Þ°×\QÛ¦ÓØ¦}ÄqNc“rJ77zGt?‚èÁ`¼®vN—n¯ÚøØç,Ì ]³d¢›aæx'å”Gi–cmãÇõ:¥3´ë`hV¹dœ3,*ØVâžs$Ëñ1Ï[xU¶,r’›¡—ùOZ|àY0v0p¼½0ÄÒC<ÙU˜æ_>èQWÚo»¤kÛ»ðx+ ¯Ê–GNõ-î5`¼0`¼í#þ¯,zôÍÄÏBÿ1ó-¼bÓkð$çAƒ&:zÅ~é$s0,}Ú{3´c£æ/î>É=ÃvAâ‘(óX¼ éh¬mÚ9åº É5ó¼Á«`G‘GÎáìǽ ‰`:˜1 ãzXú-r44iÚÆ Í—Ÿ·p4Ó5sw¾“ñªö›ÜB•`:F0¼dÏÇ8oAÝvæ—$/h0<Ýý ÐAƒA:SÁ9ýœ`ðÁÐ`†S逶MϾæ`06« 'c“æá¯ÿe À‹b´õâî“=3í&Ÿˆûª± éX‚mÚ¹Ô'±Ç`:€Á“; ›î=`Ô¼ðW¾tÌ {e„•lÖLqU¸“±EM0/D0¸Ãfø £çG~å2Å}Àì°uæ`ඪ>oˆ¥ç ‚Á€`@0  ‚`‚ ‚Á€`@0  ‚ €`  ‚@ †&µSzƒù÷š€`øl8蛕!5ëj’vdô/ÛYâh¸¦&‚¡-t7•É»ŒÇŠ"~½¾t«sú%Á¼ÐÁÐü¹Ï}KöF®©]»(ÿh¶£á:—$/n04h¼ öå»eIÿ첤¥övªôñÁKï‚^÷L&áç0~a?4­æ1x¢“tÄ`°×ÝJ‹XS½.ïbìSö¤÷È=™ù 3å+¢_qH1rŽ¢ßÈ9â#VòþÃgöé=xR'fè Á Ö/_a<¾ä;q› v»dœ7|þò¤¶a“rJ=Éë)óâö&?꘳+u¦buxß‘³ú3@ ;Í­´ø­ù{2NÅüwøªe«t׿êv«8¤ÍÓZëø1}G[ d6€ ¶ê[©q›‹w¤ŸL¸¶jÅJý5õ7=äí³»- @‡ {ÝÍ4±~M}ò.íqYÝjçtér¤&‚x!‚aŠûÀYaë¤`p2^3ëê]]HÞ•y´ðJø;šCIͺ#I7ÃV._%Ý5‰`¾Åæ'†Ï–›¶A\”8?°òµZÏüÃ9ßI:ÑÙ3ÿHv@Ŧʥ;Çò/GýLº À·À(ëHaÔüަúW¹øä×–/^[°3¸zùr÷ìŽ_pËTi8§_Ð{ì-pÍ”.Kâ’$à[i°¥›0rnhoKß G'í–Œ¥;õ§´‡oE®)ÛäWº§ÈASù%§=+ŸT, @;4tºW¯©~%v ’N¤xäËNÜ®?‘y:ìçÉ»4gs¿oÉæ2{ÝUÙë…²š­^Grì4M*;íÍ´OW!ôm·`}¼hVÙ©/«g…­{ôÑ“Yžƒá³„sÝ&{åΙ¿d_²£±ù“ÿw¿Eé[²½D±<[@ù²åî9Ç2?ÛðܬtN?žáU°¾"leåú”=Çò.Æü°¸1üw™§ï¥ìÉ>\½±Ê9ýŠÎÑpEël<§ªZ]ç’ñÙ†è¯Z‰pÐ5ªçÅî‰c7¡{/€çbØ ¿îÜÓ­æÄìNvÐ7²qYZhVºçœÌ®^Yï_¶¥Ü^פzøÍ¾½î’6¸ªjöpÜeMâ{µ÷䦺7ESÝrSí=™Éx"þMŸ’ùºSFçô£™ÁUåk¥ÈpÐK¿MíS¼«H ‰/ ýuõ‚¤cK'¸êæ2CÀs4[ž6lQº¦$n“áXpuÕŸ¢ÕÕ9» ¤½ ®YgŒåk«}‹w”´í]hVÙk›•²Úå+dµõ+¼ öå‡Ôl©ˆß’÷zÉõÅ¿­{Cü¸öžÂ<Ä2OǽíW¶¿@Š'ãYƒÙª:ŲâÍ>E›Ë’vf-¼û“Üóño¥ìM?æ_º­Ô9㊮í`¸&µmÚù”©¾%î/›Úž£iþÙCÄU§ù•î/pÏ9‘é–½/Ï-{G¡½öNª´àhh4¿áoи˜ßÐK—™‡Ö=çh–kÖÉ G}“9 n§9è/kc6oWH»ª>Ø’º'¹A}pÉàªM•mqCµ(ÿhvÒvÃñŒ“K¾SÑú7i%BÕ·”^|Çp,¹eÉ–ü½b}õê… µKNtè=xŠgêîЭÃf2)@û †áBŸáÓ„>æ~ú½!–žƒ¾<¾Éxx³ôÃÂ]Ð8¤ä)‡Îðj~ ]&yf™Ÿ×t&hožn0ü§ÃßšT6©S¬EÏ [2Å+oÁË#f¾Äl)¤Û¯>4Ì?£zü[²~ÉꃾIc§¾¤›³3zà$›aÌÐQ‚Aߤ²S]PÙ¤žVÚ¤žQÚ¦ÖX'К¿Ö:è¯kÌá þÆñ`þ}[å¹4KŸìÀ–3@Gé|ÚYõ´€ŠÔ .ÚpóÇè¹1Ût3Ë2¦ú—$ÎŽX›8?~ª94Ò*´òð`8=$¤ðXt$n°¥Çè–ã™  Cƒ¡¹uua^ìî´YŠ5Q3Bꢬ"7'̉ږ<Þ)ÍvÄœÀ S|r§L®^8S±:ÐüýÄYá«çDoÔÍ_—:?îõýµ¯¼$Éü7”Óƒª-:wíÊL&Z‡z~üäi•>–Þ¦ú›â?l¬mb/§ìsÂTÿ"é×;šèÔg’»qØ8‡èaã–L57Ôn¦bU¢ƒ®ñ+W&O½ ÚuÀ;&è(Á ]Z4É>í¯\ûA“œ{H?7=°R˜æ_&Œ³_*ô4¡õwMtFÍ ¦U “½´ÂÈ9ŠQ“<2íTSár$µuâá„!–˜ Ýƒ» AæHÐ~¶ù¼v¦¸*|ô‚èqæé4xŠû—>F÷>C[?š#HZ•X¸ô¸Ò_ öÚÍܘ1ýFÏéÇ,íÔàÉ.=§V9.L>©4Gƒ´aY3gñÖ¸qvIÌÁðH‘õ “0t†_ßWeËBg…¾–<=¨:Í^{õ˃AsU3'j[”ù×9h·Á0ÅE0‡ÁË–¾EÞ3«SæFo_:#¨&aì¸ÉúÝû ±˜à¢q³I=“f¯¾¬±M=Óz[Ö/½$Iר™¿Iß‘³1 @ûÖiÐdÇi#fÍà¬9faÌ‚‘Vâ˜Gýån½ cmã_™R,Eƒ9Ô_¹‡Á ó–¼Ûo̼¼ü@{®…®,z Û­×ÐÑ]½+-}«óËçwzÔßïÒ½wëÇ1 £{N^”í0/v÷Û´s©öÚuë‰Î†æ'Dvª‹J)0ú<Æßðœ ê/Œš)têÜM0ÎZ4Ñé‘÷å¯ }GY SýK„á3: ™ºhÀD7ÃÜÙBmRNªíÕ—uÒ Ñó—ìÓ8šœÁ:Å+Ïõ味xñ€EŸaÓ„~£ç´~>l–ÏÀi%v³Ã×ûO®I±ŠÜüÉåH×TóâöFœ6’W x ™î&Œ±‰L&“гÿ˜]u³¥»"-L9¥µŽ?:É#ÝžW xÁIûFÌúšÝe¼“rð¯¼i“=³^9[Þ“W€0`ÜaĬ aVèéK iÕaÌ‚X^Ÿé7z®ÐwÔ,᥾#Zà[©ç€±Â IÎÂÐé¾Â˜…±ÂèÑÂÐiÞ¼0À‹jà{a¼cšºÓ$}ia]»õÜmð÷žƒ&»ö4ÝéÇTaÈ4/aàD^0àÅ;a¢›Qú´óhë¨ASýJ§L®™?#¤ÎñUÙ2—™ŠÕ>¯ÊWøMõ+±=?rpŸaS{KAáœyG˜ê[Ì |«ƒa¼m÷‰núñæ0p½#|A⥭ò¼Þ^sUç kÔ:š4ÒX¸ô¸rnôö«ÈM3Bêí-½ó 5°¿Ð¶ñoFX-2O¡×¨¡B×A]y¡€Žhð·3BêüíTô­q`lQ9šÍãÆç‡±õ{Ý5­MêÍ‚¤£šiA…‹Ç:„ –§ÿÄÉŸ=hg aØL·Î#æxÍê=fdïîC{òBÑKÏA³Ã×:¥ßÔü[$ü§aŽ'sXÌŽ\£Ÿè¦±>Û·g—¾m7lf€Po2™?ú›ì•?lŽý´Á3gwâ•:j0„­ 4À£Ã'ÃAwMe“rJ5i‘ÎyðtÛ³£j„žƒÆw™è¦2-°"ðUE]ê0+Û¡}_jÁ+ ¼`Áð`ÌÝöŠs¬eCºM^”3Ï*rsì‚¥‡µÜ¢ü‡ÍòùÊä*að«ö¼ØÀ‹ öÚ«š îÉãÓ­-uÐ_WÏß•1ÖÖËkzPYÄð¹>ÃÏtd•xƒÁªyq{’çDmÓ:hÕÖ‰¯'y© –¾Ù 6©'”ã]ü†Î°ëþò¸q}ÆâE^¤`hú&µƒîZë°N<¤šº*Õ:á Ê*j­~‚ËbÙ7uèÀ)sÇži+têÆhàÅ †O†Mêí$ÌàñŽiŽ–¾EÉóâöèm•çUæˆPNtÓ:ué6€Z^Ô`p44™£á´Î&å”Î^Û ~èŽJêyq»“†Ïq9d¦/<ðbÃO~kþ·K–&Mkïi5Îi/<ðâî<¨mÒN+'¹+]ú ÒEó“0j^¸0ìUÁ¢sW&x±ƒAº›R“jÁÒãI]u6£¬#ûõ7¿k·^ƒºHÏÃ&õ4“¼ÈÁðÉ¥I*Û´³ª9Q[—Xú¸Mñηï”öJï¡Sº1À‹ …ƒ½öªÚN}Q7'jÛ’~£­2ÁðùË”t×´Ö £û ÁðïÁШµŽ?C0Á @0 Á@0Á€`@0  Á @0 Á@0Á€`@0  Á @0 Á@0Á ‚Á€`@0 €` ‚`‚ €`  ‚Á€` ‚`‚ ´úÿ¨S ÃÁ¹%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/tEXtSoftwarewww.inkscape.org›î<IEND®B`‚calamares-3.2.20/src/modules/locale/images/timezone_9.5.png000066400000000000000000000056241362604102500234320ustar00rootroot00000000000000‰PNG  IHDR T‰=»ÈgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“ pHYs¢¢EÝ1¢ dIDATxÚíÝYp•åÀñµbqW¦›­hWÚ1{BÎ9*"•¥ ‘-²„5[[ìH-B+`Ø$æHEÙd‘@k§3U§N§µ­Õi/dKµÅô;™+µSmë…Éï7ódæ|“ó]{±þØG‹…äÌÚYX5yK^ï ²/½w}Vg›€v掿¦ï”»øpì§5’SÛsæÎÂoNlÌI/_—™?~mæY¶ íÌÐ%©çLÞ’hÈ 'æî)~´¢1§GVåWγ2½ûØU·tgÛ'´+<[4lÎîâ§«Ç~õq‚aqSìç³wO»oSNϦÖéaá¡!aâÆìpÏcm÷õ ÐÌÛ_2µæHü(Þû8ÁÐö­IGoÍß_ºnúŽAɯY½¨`îõ]ÂÅg&O-ÚÂá¡ïK_fÉði5É”Úæ¶`hý/çdôüã –îxàÙâá£W W¹=¿ëÌ…§fÆÓƒºNÙšw¦m@†º–Ä»Ñý6FÓ0ÿÀû3ï¹’Gg<]XfÛЃáïóÞéSw4q"Іõ¶ ‚á_OŽ&Þ‰‚aƒm€` Á‚A0‚ €`>IÑ ùi5Gâ'ë%Zë&NF/îÿ”œúc‚:¼Ù»ŠŠçï/]µð`éà ”.‰^ØÏªÚW2sÑ¡![¢x­¶%ñÎÿ‚>½:%ÿ¼Úº(ìm–¾4,TíÊËèùÀ³E¥UÏ•”/<8äûQL¬¯iŽÿQ0@Ò¯üÊpͰφ®7¦„î©ÝÛ&iâãÙ¡¶9V¿>*Œx¤·‘Ëô˜ñ£Aã£k¿ÿÐ08vë_£¨øY]Kâ/‚:€³oH )}»…‰ÙáÞ YaüÚÌkçï/Ý”üŒÃéQPÝûÍ”­ye‹žý.züÞ‡Ãz€vlÒ¦œ.ãÖdž?ÉÚú£‰?'c þXâdmsâ—³wϘ¼%7³¶9~üßœ0hÏ*s®֊P±1»wõáØO¢8¹à`é¦ûŸ*È»*ý‚¹{?^ÓÔvÂð`ˆââD +m:†Nsv/¯Ú7øñ)[ó®lmm ñº¾çÍÝS|pÖÎÂòšæøÿü¶¤(ÞŽþw©µ@Ыà¢NQ(ô½"íKñÚ¾]†.I=ÿÞõYçnË»gʶ¼ž ”6ÕK¼{Z0|Ïæ ¸,·ghx}tHž,ä̼¶sùú¬^9ée ——­É¸zÖ3E«§ï4oqSì‚:˜üÙ×µMRÉ⛺ÎÜYXÁæ ³‡]’zɸ5™ÝÊ×eöªÚW²6ù£o‚: ›Æ|1̹.Í»¡kÚ}W}ó˜+:÷ŸÐ;|û…ÛÂð¥ý:Wn/¸¹úHü:Ÿa€Ž)oVŸ;³O¸~äÂ%Ù=¹_=·íúõ ÓžÈïµèÐWêœ0§›º-ïÂ(6ÔµÄß ÀTn/è<ý©AWVí¼vÎîâjN™öd~¸iÔFÿ``ʈeηà( ÿâÎp¢õ»–ÀÿÃßjä€3žy I%tEXtdate:create2012-12-02T14:38:45+01:00{e¶%tEXtdate:modify2012-09-21T00:53:03+02:00€âw/tEXtSoftwarewww.inkscape.org›î<IEND®B`‚calamares-3.2.20/src/modules/locale/locale.conf000066400000000000000000000067711362604102500213440ustar00rootroot00000000000000--- # This settings are used to set your default system time zone. # Time zones are usually located under /usr/share/zoneinfo and # provided by the 'tzdata' package of your Distribution. # # Distributions using systemd can list available # time zones by using the timedatectl command. # timedatectl list-timezones # # The starting timezone (e.g. the pin-on-the-map) when entering # the locale page can be set through keys *region* and *zone*. # If either is not set, defaults to America/New_York. # region: "America" zone: "New_York" # System locales are detected in the following order: # # - /usr/share/i18n/SUPPORTED # - localeGenPath (defaults to /etc/locale.gen if not set) # - 'locale -a' output # # Enable only when your Distribution is using an # custom path for locale.gen # #localeGenPath: "PATH_TO/locale.gen" # GeoIP based Language settings: Leave commented out to disable GeoIP. # # GeoIP needs a working Internet connection. # This can be managed from `welcome.conf` by adding # internet to the list of required conditions. # # The configuration # is in three parts: a *style*, which can be "json" or "xml" # depending on the kind of data returned by the service, and # a *url* where the data is retrieved, and an optional *selector* # to pick the right field out of the returned data (e.g. field # name in JSON or element name in XML). # # The default selector (when the setting is blank) is picked to # work with existing JSON providers (which use "time_zone") and # Ubiquity's XML providers (which use "TimeZone"). # # If the service configured via *url* uses # a different attribute name (e.g. "timezone") in JSON or a # different element tag (e.g. "") in XML, set this # string to the name or tag to be used. # # In JSON: # - if the string contains "." characters, this is used as a # multi-level selector, e.g. "a.b" will select the timezone # from data "{a: {b: "Europe/Amsterdam" } }". # - each part of the string split by "." characters is used as # a key into the JSON data. # In XML: # - all elements with the named tag (e.g. all TimeZone) elements # from the document are checked; the first one with non-empty # text value is used. # # # An HTTP(S) request is made to *url*. The request should return # valid data in a suitable format, depending on *style*; # generally this includes a string value with the timezone # in / format. For services that return data which # does not follow the conventions of "suitable data" described # below, *selector* may be used to pick different data. # # Note that this example URL works, but the service is shutting # down in June 2018. # # Suitable JSON data looks like # ``` # {"time_zone":"America/New_York"} # ``` # Suitable XML data looks like # ``` # Europe/Brussels # ``` # # To accommodate providers of GeoIP timezone data with peculiar timezone # naming conventions, the following cleanups are performed automatically: # - backslashes are removed # - spaces are replaced with _ # # Legacy settings "geoipStyle", "geoipUrl" and "geoipSelector" # in the top-level are still supported, but I'd advise against. # # To disable GeoIP checking, either comment-out the entire geoip section, # or set the *style* key to an unsupported format (e.g. `none`). # Also, note the analogous feature in src/modules/welcome/welcome.conf. # geoip: style: "json" url: "https://geoip.kde.org/v1/calamares" selector: "" # leave blank for the default calamares-3.2.20/src/modules/locale/locale.qrc000066400000000000000000000035101362604102500211700ustar00rootroot00000000000000 images/bg.png images/pin.png images/timezone_0.0.png images/timezone_1.0.png images/timezone_2.0.png images/timezone_3.0.png images/timezone_3.5.png images/timezone_4.0.png images/timezone_4.5.png images/timezone_5.0.png images/timezone_5.5.png images/timezone_5.75.png images/timezone_6.0.png images/timezone_6.5.png images/timezone_7.0.png images/timezone_8.0.png images/timezone_9.0.png images/timezone_9.5.png images/timezone_10.0.png images/timezone_10.5.png images/timezone_11.0.png images/timezone_11.5.png images/timezone_12.0.png images/timezone_12.75.png images/timezone_13.0.png images/timezone_-1.0.png images/timezone_-2.0.png images/timezone_-3.0.png images/timezone_-3.5.png images/timezone_-4.0.png images/timezone_-4.5.png images/timezone_-5.0.png images/timezone_-5.5.png images/timezone_-6.0.png images/timezone_-7.0.png images/timezone_-8.0.png images/timezone_-9.0.png images/timezone_-9.5.png images/timezone_-10.0.png images/timezone_-11.0.png calamares-3.2.20/src/modules/locale/timezonewidget/000077500000000000000000000000001362604102500222615ustar00rootroot00000000000000calamares-3.2.20/src/modules/locale/timezonewidget/localeglobal.cpp000066400000000000000000000062171362604102500254130ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2016, Teo Mrnjavac * * Originally from the Manjaro Installation Framework * by Roland Singer * Copyright (C) 2007 Free Software Foundation, Inc. * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "localeglobal.h" #include "locale/TimeZone.h" #include //### //### Private variables //### QHash< QString, QHash< QString, QList< LocaleGlobal::Locale > > > LocaleGlobal::locales; //### //### Public methods //### void LocaleGlobal::init() { // TODO: Error handling initLocales(); } QHash< QString, QHash< QString, QList< LocaleGlobal::Locale > > > LocaleGlobal::getLocales() { return locales; } //### //### Private methods //### void LocaleGlobal::initLocales() { static const char LOCALESDIR[] = "/usr/share/i18n/locales"; locales.clear(); QStringList files = QDir( LOCALESDIR ).entryList( QDir::Files, QDir::Name ); for ( int i = 0; i < files.size(); ++i ) { QString filename = files.at( i ); QFile file( QString( LOCALESDIR ) + "/" + filename ); if ( !file.open( QIODevice::ReadOnly | QIODevice::Text ) ) { continue; } QTextStream in( &file ); QString commentChar = "%"; Locale locale; QString lang, territory; locale.locale = filename; while ( !in.atEnd() ) { QString line = in.readLine().trimmed(); QStringList split = line.split( commentChar, QString::KeepEmptyParts ) .first() .split( QRegExp( " (?=[^\"]*(\"[^\"]*\"[^\"]*)*$)" ), QString::SkipEmptyParts ); if ( split.size() < 2 ) { continue; } QString sub1 = QString( split.at( 0 ) ).remove( "\"" ); QString sub2 = QString( split.at( 1 ) ).remove( "\"" ); if ( sub1 == "comment_char" ) { commentChar = sub2; } else if ( sub1 == "title" ) { locale.description = sub2; } else if ( sub1 == "territory" ) { territory = sub2; } else if ( sub1 == "language" ) { lang = sub2; } } if ( lang.isEmpty() || territory.isEmpty() ) { continue; } locales[ lang ][ territory ].append( locale ); } } calamares-3.2.20/src/modules/locale/timezonewidget/localeglobal.h000066400000000000000000000032471362604102500250600ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2016, Teo Mrnjavac * Copyright 2019, Adriaan de Groot * * Originally from the Manjaro Installation Framework * by Roland Singer * Copyright (C) 2007 Free Software Foundation, Inc. * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef LOCALEGLOBAL_H #define LOCALEGLOBAL_H #include #include #include #include #include #include #include #include #include #include namespace CalamaresUtils { namespace Locale { class TZZone; } } // namespace CalamaresUtils class LocaleGlobal { public: struct Locale { QString description, locale; }; static void init(); static QHash< QString, QHash< QString, QList< LocaleGlobal::Locale > > > getLocales(); private: static QHash< QString, QHash< QString, QList< LocaleGlobal::Locale > > > locales; static void initLocales(); }; #endif // LOCALEGLOBAL_H calamares-3.2.20/src/modules/locale/timezonewidget/timezonewidget.cpp000066400000000000000000000242231362604102500260260ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2017-2019, Adriaan de Groot * * Originally from the Manjaro Installation Framework * by Roland Singer * Copyright (C) 2007 Free Software Foundation, Inc. * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include #include "locale/TimeZone.h" #include "utils/Logger.h" #include "timezonewidget.h" // Pixel value indicating that a spot is outside of a zone #define RGB_TRANSPARENT 0 static constexpr double MAP_Y_OFFSET = 0.125; static constexpr double MAP_X_OFFSET = -0.0370; constexpr static double MATH_PI = 3.14159265; #ifdef DEBUG_TIMEZONES // Adds a label to the timezone with this name constexpr static QLatin1String ZONE_NAME( "zone" ); #endif TimeZoneWidget::TimeZoneWidget( QWidget* parent ) : QWidget( parent ) { setMouseTracking( false ); setCursor( Qt::PointingHandCursor ); // Font font.setPointSize( 12 ); font.setBold( false ); // Images background = QImage( ":/images/bg.png" ); pin = QImage( ":/images/pin.png" ); #ifdef DEBUG_TIMEZONES if ( background.size() != QSize( 780, 340 ) ) { cWarning() << "Timezone background size mitsmatch" << background.size(); } #endif // Set size setMinimumSize( background.size() ); setMaximumSize( background.size() ); // Zone images for ( const auto* zoneName : { "0.0", "1.0", "2.0", "3.0", "3.5", "4.0", "4.5", "5.0", "5.5", "5.75", "6.0", "6.5", "7.0", "8.0", "9.0", "9.5", "10.0", "10.5", "11.0", "11.5", "12.0", "12.75", "13.0", "-1.0", "-2.0", "-3.0", "-3.5", "-4.0", "-4.5", "-5.0", "-5.5", "-6.0", "-7.0", "-8.0", "-9.0", "-9.5", "-10.0", "-11.0" } ) { timeZoneImages.append( QImage( QStringLiteral( ":/images/timezone_" ) + zoneName + ".png" ) ); #ifdef DEBUG_TIMEZONES if ( timeZoneImages.last().size() != background.size() ) { cWarning() << "Timezone image size mismatch" << zoneName << timeZoneImages.last().size(); } timeZoneImages.last().setText( ZONE_NAME, zoneName ); #endif } } void TimeZoneWidget::setCurrentLocation( QString regionName, QString zoneName ) { using namespace CalamaresUtils::Locale; const auto& regions = TZRegion::fromZoneTab(); auto* region = regions.find< TZRegion >( regionName ); if ( !region ) { return; } auto* zone = region->zones().find< TZZone >( zoneName ); if ( zone ) { setCurrentLocation( zone ); } } void TimeZoneWidget::setCurrentLocation( const CalamaresUtils::Locale::TZZone* location ) { m_currentLocation = location; // Set zone QPoint pos = getLocationPosition( location ); #ifdef DEBUG_TIMEZONES cDebug() << "Setting location" << location->region() << location->zone() << '(' << location->country() << '@' << location->latitude() << 'N' << location->longitude() << 'E' << ')'; cDebug() << Logger::SubEntry << "pixel x" << pos.x() << "pixel y" << pos.y(); bool found = false; #endif for ( int i = 0; i < timeZoneImages.size(); ++i ) { QImage zone = timeZoneImages[ i ]; // If not transparent set as current if ( zone.pixel( pos ) != RGB_TRANSPARENT ) { #ifdef DEBUG_TIMEZONES // Log *all* the zones that contain this point, // but only pick the first. if ( !found ) { currentZoneImage = zone; found = true; cDebug() << Logger::SubEntry << "First zone found" << i << zone.text( ZONE_NAME ); } else { cDebug() << Logger::SubEntry << "Also in zone" << i << zone.text( ZONE_NAME ); } #else currentZoneImage = zone; break; #endif } } // Repaint widget repaint(); emit locationChanged( m_currentLocation ); } //### //### Private //### QPoint TimeZoneWidget::getLocationPosition( double longitude, double latitude ) { const int width = this->width(); const int height = this->height(); double x = ( width / 2.0 + ( width / 2.0 ) * longitude / 180.0 ) + MAP_X_OFFSET * width; double y = ( height / 2.0 - ( height / 2.0 ) * latitude / 90.0 ) + MAP_Y_OFFSET * height; // Far north, the MAP_Y_OFFSET no longer holds, cancel the Y offset; it's noticeable // from 62 degrees north, so scale those 28 degrees as if the world is flat south // of there, and we have a funny "rounded" top of the world. In practice the locations // of the different cities / regions looks ok -- at least Thule ends up in the right // country, and Inuvik isn't in the ocean. if ( latitude > 70.0 ) { y -= sin( MATH_PI * ( latitude - 70.0 ) / 56.0 ) * MAP_Y_OFFSET * height * 0.8; } if ( latitude > 74.0 ) { y += 4; } if ( latitude > 69.0 ) { y -= 2; } if ( latitude > 59.0 ) { y -= 4 * int( ( latitude - 54.0 ) / 5.0 ); } if ( latitude > 54.0 ) { y -= 2; } if ( latitude > 49.0 ) { y -= int( ( latitude - 44.0 ) / 5.0 ); } // Far south, some stretching occurs as well, but it is less pronounced. // Move down by 1 pixel per 5 degrees past 10 south if ( latitude < 0 ) { y += int( ( -latitude ) / 5.0 ); } // Antarctica isn't shown on the map, but you could try clicking there if ( latitude < -60 ) { y = height - 1; } if ( x < 0 ) { x = width + x; } if ( x >= width ) { x -= width; } if ( y < 0 ) { y = height + y; } if ( y >= height ) { y -= height; } return QPoint( int( x ), int( y ) ); } void TimeZoneWidget::paintEvent( QPaintEvent* ) { const int width = this->width(); const int height = this->height(); QFontMetrics fontMetrics( font ); QPainter painter( this ); painter.setRenderHint( QPainter::Antialiasing ); painter.setFont( font ); // Draw background painter.drawImage( 0, 0, background ); // Draw zone image painter.drawImage( 0, 0, currentZoneImage ); #ifdef DEBUG_TIMEZONES QPoint point = getLocationPosition( m_currentLocation ); // Draw latitude lines for ( int y_lat = -50; y_lat < 80; y_lat += 5 ) { QPen p( y_lat ? Qt::black : Qt::red ); p.setWidth( 0 ); painter.setPen( p ); QPoint latLine0( getLocationPosition( 0, y_lat ) ); int llx = latLine0.x() + ( ( y_lat & 1 ) ? -10 : 0 ); int lly = latLine0.y(); for ( int c = 0; c < width; ++c ) { painter.drawPoint( c, lly ); } } // Just a dot in the selected location, no label painter.setPen( Qt::red ); painter.drawPoint( point ); #else // Draw pin at current location QPoint point = getLocationPosition( m_currentLocation ); painter.drawImage( point.x() - pin.width() / 2, point.y() - pin.height() / 2, pin ); // Draw text and box // .. the lambda manages deprecations: the old one works in Qt 5.9 and Qt 5.10, // while the new one avoids deprecation messages in Qt 5.13 and later. #if QT_VERSION >= QT_VERSION_CHECK( 5, 11, 0 ) auto textwidth = [&]( const QString& s ) { return fontMetrics.horizontalAdvance( s ); }; #else auto textwidth = [&]( const QString& s ) { return fontMetrics.width( s ); }; #endif const int textWidth = textwidth( m_currentLocation ? m_currentLocation->tr() : QString() ); const int textHeight = fontMetrics.height(); QRect rect = QRect( point.x() - textWidth / 2 - 5, point.y() - textHeight - 8, textWidth + 10, textHeight - 2 ); if ( rect.x() <= 5 ) { rect.moveLeft( 5 ); } if ( rect.right() >= width - 5 ) { rect.moveRight( width - 5 ); } if ( rect.y() <= 5 ) { rect.moveTop( 5 ); } if ( rect.y() >= height - 5 ) { rect.moveBottom( height - 5 ); } painter.setPen( QPen() ); // no pen painter.setBrush( QColor( 40, 40, 40 ) ); painter.drawRoundedRect( rect, 3, 3 ); painter.setPen( Qt::white ); painter.drawText( rect.x() + 5, rect.bottom() - 4, m_currentLocation ? m_currentLocation->tr() : QString() ); #endif painter.end(); } void TimeZoneWidget::mousePressEvent( QMouseEvent* event ) { if ( event->button() != Qt::LeftButton ) { return; } // Set nearest location int nX = 999999, mX = event->pos().x(); int nY = 999999, mY = event->pos().y(); using namespace CalamaresUtils::Locale; const TZZone* closest = nullptr; for ( const auto* region_p : TZRegion::fromZoneTab() ) { const auto* region = dynamic_cast< const TZRegion* >( region_p ); if ( region ) { for ( const auto* zone_p : region->zones() ) { const auto* zone = dynamic_cast< const TZZone* >( zone_p ); if ( zone ) { QPoint locPos = getLocationPosition( zone->longitude(), zone->latitude() ); if ( ( abs( mX - locPos.x() ) + abs( mY - locPos.y() ) < abs( mX - nX ) + abs( mY - nY ) ) ) { closest = zone; nX = locPos.x(); nY = locPos.y(); } } } } } if ( closest ) { // Set zone image and repaint widget setCurrentLocation( closest ); // Emit signal emit locationChanged( m_currentLocation ); } } calamares-3.2.20/src/modules/locale/timezonewidget/timezonewidget.h000066400000000000000000000042431362604102500254730ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac * Copyright 2018, Adriaan de Groot * * Originally from the Manjaro Installation Framework * by Roland Singer * Copyright (C) 2007 Free Software Foundation, Inc. * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef TIMEZONEWIDGET_H #define TIMEZONEWIDGET_H #include "localeglobal.h" #include "locale/TimeZone.h" #include #include #include #include #include #include #include #include #include #include class TimeZoneWidget : public QWidget { Q_OBJECT public: using TZZone = CalamaresUtils::Locale::TZZone; explicit TimeZoneWidget( QWidget* parent = nullptr ); void setCurrentLocation( QString region, QString zone ); void setCurrentLocation( const TZZone* location ); const TZZone* currentLocation() { return m_currentLocation; } signals: void locationChanged( const TZZone* location ); private: QFont font; QImage background, pin, currentZoneImage; QList< QImage > timeZoneImages; const TZZone* m_currentLocation = nullptr; // Not owned by me QPoint getLocationPosition( const TZZone* l ) { return getLocationPosition( l->longitude(), l->latitude() ); } QPoint getLocationPosition( double longitude, double latitude ); void paintEvent( QPaintEvent* event ); void mousePressEvent( QMouseEvent* event ); }; #endif // TIMEZONEWIDGET_H calamares-3.2.20/src/modules/localecfg/000077500000000000000000000000001362604102500177035ustar00rootroot00000000000000calamares-3.2.20/src/modules/localecfg/main.py000066400000000000000000000150511362604102500212030ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # === This file is part of Calamares - === # # Copyright 2014, Anke Boersma # Copyright 2015, Philip Müller # Copyright 2016, Teo Mrnjavac # Copyright 2018, AlmAck # Copyright 2018-2019, Adriaan de Groot # # Calamares 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. # # Calamares 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 Calamares. If not, see . import os import re import shutil import libcalamares import gettext _ = gettext.translation("calamares-python", localedir=libcalamares.utils.gettext_path(), languages=libcalamares.utils.gettext_languages(), fallback=True).gettext def pretty_name(): return _("Configuring locales.") RE_IS_COMMENT = re.compile("^ *#") def is_comment(line): """ Does the @p line look like a comment? Whitespace, followed by a # is a comment-only line. """ return bool(RE_IS_COMMENT.match(line)) RE_TRAILING_COMMENT = re.compile("#.*$") RE_REST_OF_LINE = re.compile("\\s.*$") def extract_locale(line): """ Extracts a locale from the @p line, and returns a pair of (extracted-locale, uncommented line). The locale is the first word of the line after uncommenting (in the human- readable text explanation at the top of most /etc/locale.gen files, the locales may be bogus -- either "" or e.g. "Configuration") """ # Remove leading spaces and comment signs line = RE_IS_COMMENT.sub("", line) uncommented = line.strip() fields = RE_TRAILING_COMMENT.sub("", uncommented).strip().split() if len(fields) != 2: # Not exactly two fields, can't be a proper locale line return "", uncommented else: # Drop all but first field locale = RE_REST_OF_LINE.sub("", uncommented) return locale, uncommented def rewrite_locale_gen(srcfilename, destfilename, locale_conf): """ Copies a locale.gen file from @p srcfilename to @p destfilename (this may be the same name), enabling those locales that can be found in the map @p locale_conf. Also always enables en_US.UTF-8. """ en_us_locale = 'en_US.UTF-8' # Get entire source-file contents text = [] with open(srcfilename, "r") as gen: text = gen.readlines() # we want unique values, so locale_values should have 1 or 2 items locale_values = set(locale_conf.values()) locale_values.add(en_us_locale) # Always enable en_US as well enabled_locales = {} seen_locales = set() # Write source out again, enabling some with open(destfilename, "w") as gen: for line in text: c = is_comment(line) locale, uncommented = extract_locale(line) # Non-comment lines are preserved, and comment lines # may be enabled if they match a desired locale if not c: seen_locales.add(locale) else: for locale_value in locale_values: if locale.startswith(locale_value): enabled_locales[locale] = uncommented gen.write(line) gen.write("\n###\n#\n# Locales enabled by Calamares\n") for locale, line in enabled_locales.items(): if locale not in seen_locales: gen.write(line + "\n") seen_locales.add(locale) for locale in locale_values: if locale not in seen_locales: gen.write("# Missing: %s\n" % locale) def run(): """ Create locale """ import libcalamares locale_conf = libcalamares.globalstorage.value("localeConf") if not locale_conf: locale_conf = { 'LANG': 'en_US.UTF-8', 'LC_NUMERIC': 'en_US.UTF-8', 'LC_TIME': 'en_US.UTF-8', 'LC_MONETARY': 'en_US.UTF-8', 'LC_PAPER': 'en_US.UTF-8', 'LC_NAME': 'en_US.UTF-8', 'LC_ADDRESS': 'en_US.UTF-8', 'LC_TELEPHONE': 'en_US.UTF-8', 'LC_MEASUREMENT': 'en_US.UTF-8', 'LC_IDENTIFICATION': 'en_US.UTF-8' } install_path = libcalamares.globalstorage.value("rootMountPoint") if install_path is None: libcalamares.utils.warning("rootMountPoint is empty, {!s}".format(install_path)) return (_("Configuration Error"), _("No root mount point is given for

{!s}
to use." ).format("localecfg")) target_locale_gen = "{!s}/etc/locale.gen".format(install_path) target_locale_gen_bak = target_locale_gen + ".bak" target_locale_conf_path = "{!s}/etc/locale.conf".format(install_path) target_etc_default_path = "{!s}/etc/default".format(install_path) # restore backup if available if os.path.exists(target_locale_gen_bak): shutil.copy2(target_locale_gen_bak, target_locale_gen) libcalamares.utils.debug("Restored backup {!s} -> {!s}" .format(target_locale_gen_bak, target_locale_gen)) # run locale-gen if detected; this *will* cause an exception # if the live system has locale.gen, but the target does not: # in that case, fix your installation filesystem. if os.path.exists('/etc/locale.gen'): rewrite_locale_gen(target_locale_gen, target_locale_gen, locale_conf) libcalamares.utils.target_env_call(['locale-gen']) libcalamares.utils.debug('{!s} done'.format(target_locale_gen)) # write /etc/locale.conf with open(target_locale_conf_path, "w") as lcf: for k, v in locale_conf.items(): lcf.write("{!s}={!s}\n".format(k, v)) libcalamares.utils.debug('{!s} done'.format(target_locale_conf_path)) # write /etc/default/locale if /etc/default exists and is a dir if os.path.isdir(target_etc_default_path): with open(os.path.join(target_etc_default_path, "locale"), "w") as edl: for k, v in locale_conf.items(): edl.write("{!s}={!s}\n".format(k, v)) libcalamares.utils.debug('{!s} done'.format(target_etc_default_path)) return None calamares-3.2.20/src/modules/localecfg/module.desc000066400000000000000000000003671362604102500220360ustar00rootroot00000000000000# Enable the configured locales (those set by the user on the # user page) in /etc/locale.gen, if they are available in the # target system. --- type: "job" name: "localecfg" interface: "python" script: "main.py" noconfig: true calamares-3.2.20/src/modules/luksbootkeyfile/000077500000000000000000000000001362604102500211775ustar00rootroot00000000000000calamares-3.2.20/src/modules/luksbootkeyfile/CMakeLists.txt000066400000000000000000000003171362604102500237400ustar00rootroot00000000000000calamares_add_plugin( luksbootkeyfile TYPE job EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES LuksBootKeyFileJob.cpp LINK_PRIVATE_LIBRARIES calamares SHARED_LIB NO_CONFIG ) calamares-3.2.20/src/modules/luksbootkeyfile/LuksBootKeyFileJob.cpp000066400000000000000000000151021362604102500253500ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "LuksBootKeyFileJob.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include "utils/UMask.h" #include "utils/Variant.h" #include "GlobalStorage.h" #include "JobQueue.h" LuksBootKeyFileJob::LuksBootKeyFileJob( QObject* parent ) : Calamares::CppJob( parent ) { } LuksBootKeyFileJob::~LuksBootKeyFileJob() {} QString LuksBootKeyFileJob::prettyName() const { return tr( "Configuring LUKS key file." ); } struct LuksDevice { LuksDevice( const QMap< QString, QVariant >& pinfo ) : isValid( false ) , isRoot( false ) { if ( pinfo.contains( "luksMapperName" ) ) { QString fs = pinfo[ "fs" ].toString(); QString mountPoint = pinfo[ "mountPoint" ].toString(); if ( !mountPoint.isEmpty() || fs == QStringLiteral( "linuxswap" ) ) { isValid = true; isRoot = mountPoint == '/'; device = pinfo[ "device" ].toString(); passphrase = pinfo[ "luksPassphrase" ].toString(); } } } bool isValid; bool isRoot; QString device; QString passphrase; }; /** @brief Extract the luks passphrases setup. * * Given a list of partitions (as set up by the partitioning module, * so there's maps with keys inside), returns just the list of * luks passphrases for each device. */ static QList< LuksDevice > getLuksDevices( const QVariantList& list ) { QList< LuksDevice > luksItems; for ( const auto& p : list ) { if ( p.canConvert< QVariantMap >() ) { LuksDevice d( p.toMap() ); if ( d.isValid ) { luksItems.append( d ); } } } return luksItems; } struct LuksDeviceList { LuksDeviceList( const QVariant& partitions ) : valid( false ) { if ( partitions.canConvert< QVariantList >() ) { devices = getLuksDevices( partitions.toList() ); valid = true; } } QList< LuksDevice > devices; bool valid; }; static const char keyfile[] = "/crypto_keyfile.bin"; static bool generateTargetKeyfile() { CalamaresUtils::UMask m( CalamaresUtils::UMask::Safe ); auto r = CalamaresUtils::System::instance()->targetEnvCommand( { "dd", "bs=512", "count=4", "if=/dev/urandom", QString( "of=%1" ).arg( keyfile ) } ); if ( r.getExitCode() != 0 ) { cWarning() << "Could not create LUKS keyfile:" << r.getOutput() << "(exit code" << r.getExitCode() << ')'; return false; } // Give ample time to check that the file was created correctly r = CalamaresUtils::System::instance()->targetEnvCommand( { "ls", "-la", "/" } ); cDebug() << "In target system after creating LUKS file" << r.getOutput(); return true; } static bool setupLuks( const LuksDevice& d ) { auto r = CalamaresUtils::System::instance()->targetEnvCommand( { "cryptsetup", "luksAddKey", d.device, keyfile }, QString(), d.passphrase, std::chrono::seconds( 15 ) ); if ( r.getExitCode() != 0 ) { cWarning() << "Could not configure LUKS keyfile on" << d.device << ':' << r.getOutput() << "(exit code" << r.getExitCode() << ')'; return false; } return true; } Calamares::JobResult LuksBootKeyFileJob::exec() { const auto* gs = Calamares::JobQueue::instance()->globalStorage(); if ( !gs ) { return Calamares::JobResult::internalError( "LuksBootKeyFile", "No GlobalStorage defined.", Calamares::JobResult::InvalidConfiguration ); } if ( !gs->contains( "partitions" ) ) { cError() << "No GS[partitions] key."; return Calamares::JobResult::internalError( "LuksBootKeyFile", tr( "No partitions are defined." ), Calamares::JobResult::InvalidConfiguration ); } LuksDeviceList s( gs->value( "partitions" ) ); if ( !s.valid ) { cError() << "GS[partitions] is invalid"; return Calamares::JobResult::internalError( "LuksBootKeyFile", tr( "No partitions are defined." ), Calamares::JobResult::InvalidConfiguration ); } cDebug() << "There are" << s.devices.count() << "LUKS partitions"; if ( s.devices.count() < 1 ) { cDebug() << Logger::SubEntry << "Nothing to do for LUKS."; return Calamares::JobResult::ok(); } auto it = std::partition( s.devices.begin(), s.devices.end(), []( const LuksDevice& d ) { return d.isRoot; } ); for ( const auto& d : s.devices ) { cDebug() << Logger::SubEntry << ( d.isRoot ? "root" : "dev." ) << d.device << "passphrase?" << !d.passphrase.isEmpty(); } if ( it == s.devices.begin() ) { // Then there was no root partition cDebug() << Logger::SubEntry << "No root partition."; return Calamares::JobResult::ok(); } if ( s.devices.first().passphrase.isEmpty() ) { cDebug() << Logger::SubEntry << "No root passphrase."; return Calamares::JobResult::error( tr( "Encrypted rootfs setup error" ), tr( "Root partition %1 is LUKS but no passphrase has been set." ).arg( s.devices.first().device ) ); } if ( !generateTargetKeyfile() ) { return Calamares::JobResult::error( tr( "Encrypted rootfs setup error" ), tr( "Could not create LUKS key file for root partition %1." ).arg( s.devices.first().device ) ); } for ( const auto& d : s.devices ) { if ( !setupLuks( d ) ) return Calamares::JobResult::error( tr( "Encrypted rootfs setup error" ), tr( "Could not configure LUKS key file on partition %1." ).arg( d.device ) ); } return Calamares::JobResult::ok(); } CALAMARES_PLUGIN_FACTORY_DEFINITION( LuksBootKeyFileJobFactory, registerPlugin< LuksBootKeyFileJob >(); ) calamares-3.2.20/src/modules/luksbootkeyfile/LuksBootKeyFileJob.h000066400000000000000000000030171362604102500250170ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef LUKSBOOTKEYFILEJOB_H #define LUKSBOOTKEYFILEJOB_H #include "CppJob.h" #include "DllMacro.h" #include "utils/PluginFactory.h" #include #include /** @brief Creates the LUKS boot key file and adds it to the cryptsetup. * * This job has no configuration, because it takes everything * from the global storage settings set by others. */ class PLUGINDLLEXPORT LuksBootKeyFileJob : public Calamares::CppJob { Q_OBJECT public: explicit LuksBootKeyFileJob( QObject* parent = nullptr ); virtual ~LuksBootKeyFileJob() override; QString prettyName() const override; Calamares::JobResult exec() override; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( LuksBootKeyFileJobFactory ) #endif // LUKSBOOTKEYFILEJOB_H calamares-3.2.20/src/modules/luksopenswaphookcfg/000077500000000000000000000000001362604102500220605ustar00rootroot00000000000000calamares-3.2.20/src/modules/luksopenswaphookcfg/luksopenswaphookcfg.conf000066400000000000000000000002601362604102500270210ustar00rootroot00000000000000# Writes an openswap configuration with LUKS settings to the given path --- # Path of the configuration file to write (in the target system) configFilePath: /etc/openswap.conf calamares-3.2.20/src/modules/luksopenswaphookcfg/main.py000066400000000000000000000075221362604102500233640ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # === This file is part of Calamares - === # # Copyright 2016, Teo Mrnjavac # Copyright 2017, Alf Gaida # Copyright 2019, Adriaan de Groot # # Calamares 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. # # Calamares 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 Calamares. If not, see . import libcalamares import os.path import gettext _ = gettext.translation("calamares-python", localedir=libcalamares.utils.gettext_path(), languages=libcalamares.utils.gettext_languages(), fallback=True).gettext def pretty_name(): return _("Configuring encrypted swap.") def write_openswap_conf(partitions, root_mount_point, openswap_conf_path): swap_outer_uuid = "" swap_mapper_name = "" mountable_keyfile_device = "" for partition in partitions: if partition["fs"] == "linuxswap" and "luksMapperName" in partition: swap_outer_uuid = partition["luksUuid"] swap_mapper_name = partition["luksMapperName"] elif partition["mountPoint"] == "/" and "luksMapperName" in partition: mountable_keyfile_device = ( "/dev/mapper/{!s}".format(partition["luksMapperName"]) ) if not mountable_keyfile_device or not swap_outer_uuid: return None swap_device_path = "/dev/disk/by-uuid/{!s}".format(swap_outer_uuid) lines = [] with open(os.path.join(root_mount_point, openswap_conf_path), 'r') as openswap_file: lines = [x.strip() for x in openswap_file.readlines()] for i in range(len(lines)): if lines[i].startswith("swap_device"): lines[i] = "swap_device={!s}".format(swap_device_path) elif lines[i].startswith("crypt_swap_name"): lines[i] = "crypt_swap_name={!s}".format(swap_mapper_name) elif lines[i].startswith("keyfile_device"): lines[i] = "keyfile_device={!s}".format(mountable_keyfile_device) elif lines[i].startswith("keyfile_filename"): lines[i] = "keyfile_filename=crypto_keyfile.bin" with open(os.path.join(root_mount_point, openswap_conf_path), 'w') as openswap_file: openswap_file.write("\n".join(lines) + "\n") return None def run(): """ This module sets up the openswap hook for a resumable encrypted swap. :return: """ root_mount_point = libcalamares.globalstorage.value("rootMountPoint") openswap_conf_path = libcalamares.job.configuration["configFilePath"] partitions = libcalamares.globalstorage.value("partitions") if not partitions: libcalamares.utils.warning("partitions is empty, {!s}".format(partitions)) return (_("Configuration Error"), _("No partitions are defined for
{!s}
to use." ).format("luksopenswaphookcfg")) if not root_mount_point: libcalamares.utils.warning("rootMountPoint is empty, {!s}".format(root_mount_point)) return (_("Configuration Error"), _("No root mount point is given for
{!s}
to use." ).format("luksopenswaphookcfg")) openswap_conf_path = openswap_conf_path.lstrip('/') return write_openswap_conf(partitions, root_mount_point, openswap_conf_path) calamares-3.2.20/src/modules/luksopenswaphookcfg/module.desc000066400000000000000000000001431362604102500242030ustar00rootroot00000000000000--- type: "job" name: "luksopenswaphookcfg" interface: "python" script: "main.py" calamares-3.2.20/src/modules/machineid/000077500000000000000000000000001362604102500177055ustar00rootroot00000000000000calamares-3.2.20/src/modules/machineid/CMakeLists.txt000066400000000000000000000004751362604102500224530ustar00rootroot00000000000000calamares_add_plugin( machineid TYPE job EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES MachineIdJob.cpp Workers.cpp LINK_PRIVATE_LIBRARIES calamares SHARED_LIB ) calamares_add_test( machineidtest SOURCES Tests.cpp MachineIdJob.cpp Workers.cpp ) calamares-3.2.20/src/modules/machineid/MachineIdJob.cpp000066400000000000000000000115221362604102500226660ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Kevin Kofler * Copyright 2016, Philip Müller * Copyright 2017, Alf Gaida * Copyright 2019-2020, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "MachineIdJob.h" #include "Workers.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include "utils/Variant.h" #include "GlobalStorage.h" #include "JobQueue.h" #include MachineIdJob::MachineIdJob( QObject* parent ) : Calamares::CppJob( parent ) { } MachineIdJob::~MachineIdJob() {} QString MachineIdJob::prettyName() const { return tr( "Generate machine-id." ); } Calamares::JobResult MachineIdJob::exec() { QString root; Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); if ( gs && gs->contains( "rootMountPoint" ) ) { root = gs->value( "rootMountPoint" ).toString(); } else { cWarning() << "No *rootMountPoint* defined."; return Calamares::JobResult::internalError( tr( "Configuration Error" ), tr( "No root mount point is set for MachineId." ), Calamares::JobResult::InvalidConfiguration ); } QString target_systemd_machineid_file = QStringLiteral( "/etc/machine-id" ); QString target_dbus_machineid_file = QStringLiteral( "/var/lib/dbus/machine-id" ); QString target_entropy_file = QStringLiteral( "/var/lib/urandom/random-seed" ); const CalamaresUtils::System* system = CalamaresUtils::System::instance(); // Clear existing files if ( m_entropy ) { system->removeTargetFile( target_entropy_file ); } if ( m_dbus ) { system->removeTargetFile( target_dbus_machineid_file ); } if ( m_systemd ) { system->removeTargetFile( target_systemd_machineid_file ); } //Create new files if ( m_entropy ) { auto r = MachineId::createEntropy( m_entropy_copy ? MachineId::EntropyGeneration::CopyFromHost : MachineId::EntropyGeneration::New, root, target_entropy_file ); if ( !r ) { return r; } } if ( m_systemd ) { auto r = MachineId::createSystemdMachineId( root, target_systemd_machineid_file ); if ( !r ) { return r; } } if ( m_dbus ) { if ( !system->createTargetParentDirs( target_dbus_machineid_file ) ) { cWarning() << "Could not create DBus data-directory."; } if ( m_dbus_symlink && QFile::exists( root + target_systemd_machineid_file ) ) { auto r = MachineId::createDBusLink( root, target_dbus_machineid_file, target_systemd_machineid_file ); if ( !r ) { return r; } } else { auto r = MachineId::createDBusMachineId( root, target_dbus_machineid_file ); if ( !r ) { return r; } } } return Calamares::JobResult::ok(); } void MachineIdJob::setConfigurationMap( const QVariantMap& map ) { m_systemd = CalamaresUtils::getBool( map, "systemd", false ); m_dbus = CalamaresUtils::getBool( map, "dbus", false ); if ( map.contains( "dbus-symlink" ) ) { m_dbus_symlink = CalamaresUtils::getBool( map, "dbus-symlink", false ); } else if ( map.contains( "symlink" ) ) { m_dbus_symlink = CalamaresUtils::getBool( map, "symlink", false ); cWarning() << "MachineId: configuration setting *symlink* is deprecated, use *dbus-symlink*."; } // else it's still false from the constructor // ignore it, though, if dbus is false m_dbus_symlink = m_dbus && m_dbus_symlink; m_entropy = CalamaresUtils::getBool( map, "entropy", false ); m_entropy_copy = CalamaresUtils::getBool( map, "entropy-copy", false ); } CALAMARES_PLUGIN_FACTORY_DEFINITION( MachineIdJobFactory, registerPlugin< MachineIdJob >(); ) calamares-3.2.20/src/modules/machineid/MachineIdJob.h000066400000000000000000000032441362604102500223350ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef MACHINEIDJOB_H #define MACHINEIDJOB_H #include #include #include #include #include class PLUGINDLLEXPORT MachineIdJob : public Calamares::CppJob { Q_OBJECT public: explicit MachineIdJob( QObject* parent = nullptr ); virtual ~MachineIdJob() override; QString prettyName() const override; Calamares::JobResult exec() override; void setConfigurationMap( const QVariantMap& configurationMap ) override; private: bool m_systemd = false; ///< write systemd's files bool m_dbus = false; ///< write dbus files bool m_dbus_symlink = false; ///< .. or just symlink to systemd bool m_entropy = false; ///< write an entropy file bool m_entropy_copy = false; ///< copy from host system }; CALAMARES_PLUGIN_FACTORY_DECLARATION( MachineIdJobFactory ) #endif // MACHINEIDJOB_H calamares-3.2.20/src/modules/machineid/Tests.cpp000066400000000000000000000124571362604102500215240ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "MachineIdJob.h" #include "Workers.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include #include #include // Internals of Workers.cpp extern int getUrandomPoolSize(); class MachineIdTests : public QObject { Q_OBJECT public: MachineIdTests() {} virtual ~MachineIdTests() {} private Q_SLOTS: void initTestCase(); void testCopyFile(); void testPoolSize(); void testJob(); }; void MachineIdTests::initTestCase() { Logger::setupLogLevel( Logger::LOGDEBUG ); } void MachineIdTests::testCopyFile() { QTemporaryDir tempRoot( QDir::tempPath() + QStringLiteral( "/test-root-XXXXXX" ) ); cDebug() << "Temporary files as" << QDir::tempPath(); cDebug() << "Temp dir file at " << tempRoot.path(); QVERIFY( !tempRoot.path().isEmpty() ); // This will pretend to be the host system QTemporaryDir tempISOdir( QDir::tempPath() + QStringLiteral( "/test-live-XXXXXX" ) ); QVERIFY( QDir( tempRoot.path() ).mkpath( tempRoot.path() + tempISOdir.path() ) ); QFile source( tempRoot.filePath( "example" ) ); QVERIFY( !source.exists() ); source.open( QIODevice::WriteOnly ); source.write( "Derp" ); source.close(); QCOMPARE( source.size(), 4 ); QVERIFY( source.exists() ); // This should fail since "example" isn't standard in our test directory auto r0 = MachineId::copyFile( tempRoot.path(), "example" ); QVERIFY( !r0 ); const QString sampleFile = QStringLiteral( "CMakeCache.txt" ); if ( QFile::exists( sampleFile ) ) { auto r1 = MachineId::copyFile( tempRoot.path(), sampleFile ); // Also fail, because it's not an absolute path QVERIFY( !r1 ); QVERIFY( QFile::copy( sampleFile, tempISOdir.path() + '/' + sampleFile ) ); auto r2 = MachineId::copyFile( tempRoot.path(), tempISOdir.path() + '/' + sampleFile ); QVERIFY( r2 ); } } void MachineIdTests::testPoolSize() { #ifdef Q_OS_FREEBSD // It hardly makes sense, but also the /proc entry is missing QCOMPARE( getUrandomPoolSize(), 512 ); #else // Based on a sample size of 1, Netrunner QCOMPARE( getUrandomPoolSize(), 4096 ); #endif } void MachineIdTests::testJob() { Logger::setupLogLevel( Logger::LOGDEBUG ); QTemporaryDir tempRoot( QDir::tempPath() + QStringLiteral( "/test-job-XXXXXX" ) ); tempRoot.setAutoRemove( false ); cDebug() << "Temporary files as" << QDir::tempPath(); // Ensure we have a system object, expect it to be a "bogus" one CalamaresUtils::System* system = CalamaresUtils::System::instance(); QVERIFY( system ); QVERIFY( system->doChroot() ); // Ensure we have a system-wide GlobalStorage with /tmp as root if ( !Calamares::JobQueue::instance() ) { cDebug() << "Creating new JobQueue"; (void)new Calamares::JobQueue(); } Calamares::GlobalStorage* gs = Calamares::JobQueue::instance() ? Calamares::JobQueue::instance()->globalStorage() : nullptr; QVERIFY( gs ); gs->insert( "rootMountPoint", tempRoot.path() ); // Prepare part of the target filesystem { QVERIFY( system->createTargetDirs("/etc") ); auto r = system->createTargetFile( "/etc/machine-id", "Hello" ); QVERIFY( !r.failed() ); QVERIFY( r ); QVERIFY( !r.path().isEmpty() ); } MachineIdJob job( nullptr ); QVERIFY( !job.prettyName().isEmpty() ); QVariantMap config; config.insert( "dbus", true ); job.setConfigurationMap( config ); { auto r = job.exec(); QVERIFY( !r ); // It's supposed to fail, because no dbus-uuidgen executable exists QVERIFY( QFile::exists( tempRoot.filePath( "var/lib/dbus" ) ) ); // but the target dir exists } config.insert( "dbus-symlink", true ); job.setConfigurationMap( config ); { auto r = job.exec(); QVERIFY( !r ); // It's supposed to fail, because no dbus-uuidgen executable exists QVERIFY( QFile::exists( tempRoot.filePath( "var/lib/dbus" ) ) ); // but the target dir exists // These all (would) fail, because the chroot isn't viable #if 0 QVERIFY( QFile::exists( "/tmp/var/lib/dbus/machine-id" ) ); QFileInfo fi( "/tmp/var/lib/dbus/machine-id" ); QVERIFY( fi.exists() ); QVERIFY( fi.isSymLink() ); QCOMPARE( fi.size(), 5); #endif } tempRoot.setAutoRemove( true ); // All tests succeeded } QTEST_GUILESS_MAIN( MachineIdTests ) #include "utils/moc-warnings.h" #include "Tests.moc" calamares-3.2.20/src/modules/machineid/Workers.cpp000066400000000000000000000132411362604102500220460ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Kevin Kofler * Copyright 2016, Philip Müller * Copyright 2017, Alf Gaida * Copyright 2019-2020, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "Workers.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Entropy.h" #include "utils/Logger.h" #include /// @brief Returns a recommended size for the entropy pool (in bytes) STATICTEST int getUrandomPoolSize() { QFile f( "/proc/sys/kernel/random/poolsize" ); constexpr const int minimumPoolSize = 512; int poolSize = minimumPoolSize; if ( f.exists() && f.open( QIODevice::ReadOnly | QIODevice::Text ) ) { QByteArray v = f.read( 16 ); if ( v.length() > 2 ) { if ( v.endsWith( '\n' ) ) { v.chop( 1 ); } bool ok = false; poolSize = v.toInt( &ok ); if ( !ok ) { poolSize = minimumPoolSize; } } } return ( poolSize >= minimumPoolSize ) ? poolSize : minimumPoolSize; } namespace MachineId { static inline bool isAbsolutePath( const QString& fileName ) { return fileName.startsWith( '/' ); } Calamares::JobResult copyFile( const QString& rootMountPoint, const QString& fileName ) { if ( !isAbsolutePath( fileName ) ) { return Calamares::JobResult::internalError( QObject::tr( "File not found" ), QObject::tr( "Path
%1
must be an absolute path." ).arg( fileName ), 0 ); } QFile f( fileName ); if ( !f.exists() ) { return Calamares::JobResult::error( QObject::tr( "File not found" ), fileName ); } if ( !f.copy( rootMountPoint + fileName ) ) { return Calamares::JobResult::error( QObject::tr( "File not found" ), rootMountPoint + fileName ); } return Calamares::JobResult::ok(); } Calamares::JobResult createNewEntropy( int poolSize, const QString& rootMountPoint, const QString& fileName ) { QFile entropyFile( rootMountPoint + fileName ); if ( entropyFile.exists() ) { cWarning() << "Entropy file" << ( rootMountPoint + fileName ) << "already exists."; return Calamares::JobResult::ok(); // .. anyway } if ( !entropyFile.open( QIODevice::WriteOnly ) ) { return Calamares::JobResult::error( QObject::tr( "File not found" ), QObject::tr( "Could not create new random file
%1
." ).arg( fileName ) ); } QByteArray data; CalamaresUtils::EntropySource source = CalamaresUtils::getEntropy( poolSize, data ); entropyFile.write( data ); entropyFile.close(); if ( entropyFile.size() < data.length() ) { cWarning() << "Entropy file is" << entropyFile.size() << "bytes, random data was" << data.length(); } if ( data.length() < poolSize ) { cWarning() << "Entropy data is" << data.length() << "bytes, rather than poolSize" << poolSize; } if ( source != CalamaresUtils::EntropySource::URandom ) { cWarning() << "Entropy data for pool is low-quality."; } return Calamares::JobResult::ok(); } Calamares::JobResult createEntropy( const EntropyGeneration kind, const QString& rootMountPoint, const QString& fileName ) { if ( kind == EntropyGeneration::CopyFromHost ) { if ( QFile::exists( fileName ) ) { auto r = copyFile( rootMountPoint, fileName ); if ( r ) { return r; } else { cWarning() << "Could not copy" << fileName << "for entropy, generating new."; } } else { cWarning() << "Host system entropy does not exist at" << fileName; } } int poolSize = getUrandomPoolSize(); return createNewEntropy( poolSize, rootMountPoint, fileName ); } static Calamares::JobResult runCmd( const QStringList& cmd ) { auto r = CalamaresUtils::System::instance()->targetEnvCommand( cmd ); if ( r.getExitCode() ) { return r.explainProcess( cmd, std::chrono::seconds( 0 ) ); } return Calamares::JobResult::ok(); } Calamares::JobResult createSystemdMachineId( const QString& rootMountPoint, const QString& fileName ) { Q_UNUSED( rootMountPoint ) Q_UNUSED( fileName ) return runCmd( QStringList { QStringLiteral( "systemd-machine-id-setup" ) } ); } Calamares::JobResult createDBusMachineId( const QString& rootMountPoint, const QString& fileName ) { Q_UNUSED( rootMountPoint ) Q_UNUSED( fileName ) return runCmd( QStringList { QStringLiteral( "dbus-uuidgen" ), QStringLiteral( "--ensure" ) } ); } Calamares::JobResult createDBusLink( const QString& rootMountPoint, const QString& fileName, const QString& systemdFileName ) { Q_UNUSED( rootMountPoint ) return runCmd( QStringList { QStringLiteral( "ln" ), QStringLiteral( "-sf" ), systemdFileName, fileName } ); } } // namespace MachineId calamares-3.2.20/src/modules/machineid/Workers.h000066400000000000000000000051101362604102500215070ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef WORKERS_H #define WORKERS_H #include "Job.h" /// @brief Utility functions for doing the random-data stuff for MachineId namespace MachineId { /** @brief Utility functions * * These probably belong in libcalamares, since they're general utilities * for moving files around in the target system. */ /// @brief Copy @p fileName from host into target system at @p rootMountPoint Calamares::JobResult copyFile( const QString& rootMountPoint, const QString& fileName ); /** @brief Entropy functions * * The target system may want to pre-seed the entropy pool with a suitable * chunk of entropy data. During installation we have lots of disk access * so plenty of entropy -- this is used mostly be Debian. */ /// @brief How to generate entropy (bool-like) enum class EntropyGeneration { New, CopyFromHost }; /// @brief Creates a new entropy file @p fileName in the target system at @p rootMountPoint Calamares::JobResult createNewEntropy( int poolSize, const QString& rootMountPoint, const QString& fileName ); /// @brief Create an entropy file @p fileName in the target system at @p rootMountPoint Calamares::JobResult createEntropy( const EntropyGeneration kind, const QString& rootMountPoint, const QString& fileName ); /** @brief MachineID functions * * Creating UUIDs for DBUS and SystemD. */ /// @brief Create a new DBus UUID file Calamares::JobResult createDBusMachineId( const QString& rootMountPoint, const QString& fileName ); /// @brief Symlink DBus UUID file to the one from systemd (which must exist already) Calamares::JobResult createDBusLink( const QString& rootMountPoint, const QString& fileName, const QString& systemdFileName ); Calamares::JobResult createSystemdMachineId( const QString& rootMountPoint, const QString& fileName ); } // namespace MachineId #endif // WORKERS_H calamares-3.2.20/src/modules/machineid/machineid.conf000066400000000000000000000014371362604102500225020ustar00rootroot00000000000000# Machine-ID and other random data on the target system. # # This module can create a number of "random" things on the target: # - a systemd machine-id file (hence the name of the Calamares module) # with a random UUID. # - a dbus machine-id file (or, optionally, link to the one from systemd) # - an entropy file # --- # Whether to create /etc/machine-id for systemd. systemd: true # Whether to create /var/lib/dbus/machine-id for D-Bus. dbus: true # Whether /var/lib/dbus/machine-id should be a symlink to /etc/machine-id # (ignored if dbus is false, or if there is no /etc/machine-id to point to). dbus-symlink: true # this is a deprecated form of *dbus-symlink* symlink: true # Whether to create an entropy file entropy: false # Whether to copy entropy from the host entropy-copy: false calamares-3.2.20/src/modules/mount/000077500000000000000000000000001362604102500171265ustar00rootroot00000000000000calamares-3.2.20/src/modules/mount/main.py000066400000000000000000000151761362604102500204360ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # === This file is part of Calamares - === # # Copyright 2014, Aurélien Gâteau # Copyright 2017, Alf Gaida # Copyright 2019, Adriaan de Groot # Copyright 2019, Kevin Kofler # # Calamares 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. # # Calamares 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 Calamares. If not, see . import tempfile import subprocess import os import libcalamares import gettext _ = gettext.translation("calamares-python", localedir=libcalamares.utils.gettext_path(), languages=libcalamares.utils.gettext_languages(), fallback=True).gettext def pretty_name(): return _("Mounting partitions.") def mount_partition(root_mount_point, partition, partitions): """ Do a single mount of @p partition inside @p root_mount_point. The @p partitions are used to handle btrfs special-cases: then subvolumes are created for root and home. """ # Create mount point with `+` rather than `os.path.join()` because # `partition["mountPoint"]` starts with a '/'. raw_mount_point = partition["mountPoint"] mount_point = root_mount_point + raw_mount_point # Ensure that the created directory has the correct SELinux context on # SELinux-enabled systems. os.makedirs(mount_point, exist_ok=True) subprocess.call(['chcon', '--reference=' + raw_mount_point, mount_point]) fstype = partition.get("fs", "").lower() if fstype == "fat16" or fstype == "fat32": fstype = "vfat" if "luksMapperName" in partition: libcalamares.utils.debug( "about to mount {!s}".format(partition["luksMapperName"])) libcalamares.utils.mount( "/dev/mapper/{!s}".format(partition["luksMapperName"]), mount_point, fstype, partition.get("options", ""), ) else: libcalamares.utils.mount(partition["device"], mount_point, fstype, partition.get("options", ""), ) # If the root partition is btrfs, we create a subvolume "@" # for the root mount point. # If a separate /home partition isn't defined, we also create # a subvolume "@home". # Finally we remount all of the above on the correct paths. if fstype == "btrfs" and partition["mountPoint"] == '/': has_home_mount_point = False for p in partitions: if "mountPoint" not in p or not p["mountPoint"]: continue if p["mountPoint"] == "/home": has_home_mount_point = True break subprocess.check_call(['btrfs', 'subvolume', 'create', root_mount_point + '/@']) if not has_home_mount_point: subprocess.check_call(['btrfs', 'subvolume', 'create', root_mount_point + '/@home']) subprocess.check_call(["umount", "-v", root_mount_point]) if "luksMapperName" in partition: libcalamares.utils.mount( "/dev/mapper/{!s}".format(partition["luksMapperName"]), mount_point, fstype, ",".join( ["subvol=@", partition.get("options", "")]), ) if not has_home_mount_point: libcalamares.utils.mount( "/dev/mapper/{!s}".format(partition["luksMapperName"]), root_mount_point + "/home", fstype, ",".join( ["subvol=@home", partition.get("options", "")]), ) else: libcalamares.utils.mount( partition["device"], mount_point, fstype, ",".join(["subvol=@", partition.get("options", "")]), ) if not has_home_mount_point: libcalamares.utils.mount( partition["device"], root_mount_point + "/home", fstype, ",".join( ["subvol=@home", partition.get("options", "")]), ) def run(): """ Mount all the partitions from GlobalStorage and from the job configuration. Partitions are mounted in-lexical-order of their mountPoint. """ partitions = libcalamares.globalstorage.value("partitions") if not partitions: libcalamares.utils.warning("partitions is empty, {!s}".format(partitions)) return (_("Configuration Error"), _("No partitions are defined for
{!s}
to use." ).format("mount")) root_mount_point = tempfile.mkdtemp(prefix="calamares-root-") # Guard against missing keys (generally a sign that the config file is bad) extra_mounts = libcalamares.job.configuration.get("extraMounts") or [] extra_mounts_efi = libcalamares.job.configuration.get("extraMountsEfi") or [] if not extra_mounts and not extra_mounts_efi: libcalamares.utils.warning("No extra mounts defined. Does mount.conf exist?") if libcalamares.globalstorage.value("firmwareType") == "efi": extra_mounts.extend(extra_mounts_efi) # Add extra mounts to the partitions list and sort by mount points. # This way, we ensure / is mounted before the rest, and every mount point # is created on the right partition (e.g. if a partition is to be mounted # under /tmp, we make sure /tmp is mounted before the partition) mountable_partitions = [ p for p in partitions + extra_mounts if "mountPoint" in p and p["mountPoint"] ] mountable_partitions.sort(key=lambda x: x["mountPoint"]) for partition in mountable_partitions: mount_partition(root_mount_point, partition, partitions) libcalamares.globalstorage.insert("rootMountPoint", root_mount_point) # Remember the extra mounts for the unpackfs module libcalamares.globalstorage.insert("extraMounts", extra_mounts) calamares-3.2.20/src/modules/mount/module.desc000066400000000000000000000001251362604102500212510ustar00rootroot00000000000000--- type: "job" name: "mount" interface: "python" script: "main.py" calamares-3.2.20/src/modules/mount/mount.conf000066400000000000000000000021601362604102500211360ustar00rootroot00000000000000# Mount filesystems in the target (generally, before treating the # target as a usable chroot / "live" system). Filesystems are # automatically mounted from the partitioning module. Filesystems # listed here are **extra**. The filesystems listed in *extraMounts* # are mounted in all target systems. The filesystems listed in # *extraMountsEfi* are mounted in the target system **only** if # the host machine uses UEFI. --- # Extra filesystems to mount. The key's value is a list of entries; each # entry has four keys: # - device The device node to mount # - fs The filesystem type to use # - mountPoint Where to mount the filesystem # - options (optional) Extra options to pass to mount(8) # extraMounts: - device: proc fs: proc mountPoint: /proc - device: sys fs: sysfs mountPoint: /sys - device: /dev mountPoint: /dev options: bind - device: tmpfs fs: tmpfs mountPoint: /run - device: /run/udev mountPoint: /run/udev options: bind extraMountsEfi: - device: efivarfs fs: efivarfs mountPoint: /sys/firmware/efi/efivars calamares-3.2.20/src/modules/mount/test.yaml000066400000000000000000000003271362604102500207730ustar00rootroot00000000000000partitions: - device: "/dev/sdb1" mountPoint: "/" fs: "ext4" - device: "/dev/sdb2" mountPoint: "/home" fs: "ext4" - device: "/dev/sdb3" mountPoint: "" fs: "linuxswap" calamares-3.2.20/src/modules/netinstall/000077500000000000000000000000001362604102500201415ustar00rootroot00000000000000calamares-3.2.20/src/modules/netinstall/CMakeLists.txt000066400000000000000000000005761362604102500227110ustar00rootroot00000000000000calamares_add_plugin( netinstall TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES NetInstallViewStep.cpp NetInstallPage.cpp PackageTreeItem.cpp PackageModel.cpp UI page_netinst.ui RESOURCES netinstall.qrc LINK_PRIVATE_LIBRARIES calamaresui Qt5::Network yamlcpp SHARED_LIB ) calamares-3.2.20/src/modules/netinstall/NetInstallPage.cpp000066400000000000000000000130621362604102500235210ustar00rootroot00000000000000/* * Copyright 2016, Luca Giambonini * Copyright 2016, Lisa Vitolo * Copyright 2017, Kyle Robbertze * Copyright 2017-2018, 2020, Adriaan de Groot * Copyright 2017, Gabriel Craciunescu * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "NetInstallPage.h" #include "PackageModel.h" #include "ui_page_netinst.h" #include "JobQueue.h" #include "network/Manager.h" #include "utils/Logger.h" #include "utils/Retranslator.h" #include "utils/Yaml.h" #include #include NetInstallPage::NetInstallPage( QWidget* parent ) : QWidget( parent ) , ui( new Ui::Page_NetInst ) , m_reply( nullptr ) , m_groups( nullptr ) { ui->setupUi( this ); setPageTitle( nullptr ); CALAMARES_RETRANSLATE_SLOT( &NetInstallPage::retranslate ); } NetInstallPage::~NetInstallPage() { delete m_groups; delete m_reply; } void NetInstallPage::setPageTitle( CalamaresUtils::Locale::TranslatedString* t ) { m_title.reset( t ); if ( !m_title ) { ui->label->hide(); } else { ui->label->show(); } retranslate(); } void NetInstallPage::retranslate() { if ( ui && m_title ) { ui->label->setText( m_title->get() ); // That's get() on the TranslatedString } } bool NetInstallPage::readGroups( const QByteArray& yamlData ) { try { YAML::Node groups = YAML::Load( yamlData.constData() ); if ( !groups.IsSequence() ) { cWarning() << "netinstall groups data does not form a sequence."; } Q_ASSERT( groups.IsSequence() ); m_groups = new PackageModel( groups ); return true; } catch ( YAML::Exception& e ) { CalamaresUtils::explainYamlException( e, yamlData, "netinstall groups data" ); return false; } } /// @brief Convenience to zero out and deleteLater on the reply, used in dataIsHere struct ReplyDeleter { QNetworkReply*& p; ~ReplyDeleter() { if ( p ) { p->deleteLater(); } p = nullptr; } }; void NetInstallPage::dataIsHere() { if ( !m_reply || !m_reply->isFinished() ) { cWarning() << "NetInstall data called too early."; return; } cDebug() << "NetInstall group data received" << m_reply->url(); ReplyDeleter d { m_reply }; // If m_required is *false* then we still say we're ready // even if the reply is corrupt or missing. if ( m_reply->error() != QNetworkReply::NoError ) { cWarning() << "unable to fetch netinstall package lists."; cDebug() << Logger::SubEntry << "Netinstall reply error: " << m_reply->error(); cDebug() << Logger::SubEntry << "Request for url: " << m_reply->url().toString() << " failed with: " << m_reply->errorString(); ui->netinst_status->setText( tr( "Network Installation. (Disabled: Unable to fetch package lists, check your network connection)" ) ); emit checkReady( !m_required ); return; } if ( !readGroups( m_reply->readAll() ) ) { cWarning() << "netinstall groups data was received, but invalid."; cDebug() << Logger::SubEntry << "Url: " << m_reply->url().toString(); cDebug() << Logger::SubEntry << "Headers: " << m_reply->rawHeaderList(); ui->netinst_status->setText( tr( "Network Installation. (Disabled: Received invalid groups data)" ) ); emit checkReady( !m_required ); return; } retranslate(); // For changed model ui->groupswidget->setModel( m_groups ); ui->groupswidget->header()->setSectionResizeMode( 0, QHeaderView::ResizeToContents ); ui->groupswidget->header()->setSectionResizeMode( 1, QHeaderView::Stretch ); emit checkReady( true ); } PackageModel::PackageItemDataList NetInstallPage::selectedPackages() const { if ( m_groups ) { return m_groups->getPackages(); } else { cWarning() << "no netinstall groups are available."; return PackageModel::PackageItemDataList(); } } void NetInstallPage::loadGroupList( const QString& confUrl ) { using namespace CalamaresUtils::Network; cDebug() << "NetInstall loading groups from" << confUrl; QNetworkReply* reply = Manager::instance().asynchronouseGet( QUrl( confUrl ), RequestOptions( RequestOptions::FakeUserAgent | RequestOptions::FollowRedirect, std::chrono::seconds( 30 ) ) ); if ( !reply ) { cDebug() << Logger::Continuation << "request failed immediately."; ui->netinst_status->setText( tr( "Network Installation. (Disabled: Incorrect configuration)" ) ); } else { m_reply = reply; connect( reply, &QNetworkReply::finished, this, &NetInstallPage::dataIsHere ); } } void NetInstallPage::setRequired( bool b ) { m_required = b; } void NetInstallPage::onActivate() { ui->groupswidget->setFocus(); } calamares-3.2.20/src/modules/netinstall/NetInstallPage.h000066400000000000000000000060321362604102500231650ustar00rootroot00000000000000/* * Copyright 2016, Luca Giambonini * Copyright 2016, Lisa Vitolo * Copyright 2017, Kyle Robbertze * Copyright 2017-2018, 2020, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef NETINSTALLPAGE_H #define NETINSTALLPAGE_H #include "PackageModel.h" #include "PackageTreeItem.h" #include "locale/TranslatableConfiguration.h" #include #include #include class QNetworkReply; namespace Ui { class Page_NetInst; } class NetInstallPage : public QWidget { Q_OBJECT public: NetInstallPage( QWidget* parent = nullptr ); virtual ~NetInstallPage(); /** @brief Sets the page title * * In situations where there is more than one netinstall page, * or you want some explanatory title above the treeview, * set the page title. This page takes ownership of the * TranslatedString object. * * Set to nullptr to remove the title. */ void setPageTitle( CalamaresUtils::Locale::TranslatedString* ); void onActivate(); /** @brief Retrieves the groups, with name, description and packages * * Loads data from the given URL. This should be called before * displaying the page. */ void loadGroupList( const QString& url ); // Sets the "required" state of netinstall data. Influences whether // corrupt or unavailable data causes checkReady() to be emitted // true (not-required) or false. void setRequired( bool ); bool getRequired() const { return m_required; } // Returns the list of packages belonging to groups that are // selected in the view in this given moment. No data is cached here, so // this function does not have constant time. PackageModel::PackageItemDataList selectedPackages() const; public slots: void dataIsHere(); void retranslate(); signals: void checkReady( bool ); private: // Takes the YAML data representing the groups and reads them into the // m_groups and m_groupOrder internal structures. See the README.md // of this module to know the format expected of the YAML files. bool readGroups( const QByteArray& yamlData ); Ui::Page_NetInst* ui; std::unique_ptr< CalamaresUtils::Locale::TranslatedString > m_title; // Above the treeview QNetworkReply* m_reply; PackageModel* m_groups; bool m_required; }; #endif // NETINSTALLPAGE_H calamares-3.2.20/src/modules/netinstall/NetInstallViewStep.cpp000066400000000000000000000146361362604102500244230ustar00rootroot00000000000000/* * Copyright 2016, Luca Giambonini * Copyright 2016, Lisa Vitolo * Copyright 2017, Kyle Robbertze * Copyright 2017-2018, 2020, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "NetInstallViewStep.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/Logger.h" #include "utils/Variant.h" #include "NetInstallPage.h" CALAMARES_PLUGIN_FACTORY_DEFINITION( NetInstallViewStepFactory, registerPlugin< NetInstallViewStep >(); ) NetInstallViewStep::NetInstallViewStep( QObject* parent ) : Calamares::ViewStep( parent ) , m_widget( new NetInstallPage() ) , m_nextEnabled( false ) , m_sidebarLabel( nullptr ) { emit nextStatusChanged( true ); connect( m_widget, &NetInstallPage::checkReady, this, &NetInstallViewStep::nextIsReady ); } NetInstallViewStep::~NetInstallViewStep() { if ( m_widget && m_widget->parent() == nullptr ) { m_widget->deleteLater(); } delete m_sidebarLabel; } QString NetInstallViewStep::prettyName() const { return m_sidebarLabel ? m_sidebarLabel->get() : tr( "Package selection" ); #if defined(TABLE_OF_TRANSLATIONS) NOTREACHED // This is a table of "standard" labels for this module. If you use them // in the label: sidebar: section of the config file, the existing // translations can be used. tr( "Package selection" ); tr( "Office software" ); tr( "Office package" ); tr( "Browser software" ); tr( "Browser package" ); tr( "Web browser" ); tr( "Kernel" ); tr( "Services" ); tr( "Login" ); tr( "Desktop" ); tr( "Applications" ); #endif } QWidget* NetInstallViewStep::widget() { return m_widget; } bool NetInstallViewStep::isNextEnabled() const { return m_nextEnabled; } bool NetInstallViewStep::isBackEnabled() const { return true; } bool NetInstallViewStep::isAtBeginning() const { return true; } bool NetInstallViewStep::isAtEnd() const { return true; } QList< Calamares::job_ptr > NetInstallViewStep::jobs() const { return m_jobs; } void NetInstallViewStep::onActivate() { m_widget->onActivate(); } void NetInstallViewStep::onLeave() { PackageModel::PackageItemDataList packages = m_widget->selectedPackages(); cDebug() << "Netinstall: Processing" << packages.length() << "packages."; static const char PACKAGEOP[] = "packageOperations"; // Check if there's already a PACAKGEOP entry in GS, and if so we'll // extend that one (overwriting the value in GS at the end of this method) Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); QVariantList packageOperations = gs->contains( PACKAGEOP ) ? gs->value( PACKAGEOP ).toList() : QVariantList(); cDebug() << Logger::SubEntry << "Existing package operations length" << packageOperations.length(); // Clear out existing operations for this module, going backwards: // Sometimes we remove an item, and we don't want the index to // fall off the end of the list. for ( int index = packageOperations.length() - 1; 0 <= index; index-- ) { const QVariantMap op = packageOperations.at( index ).toMap(); if ( op.contains( "source" ) && op.value( "source" ).toString() == moduleInstanceKey().toString() ) { cDebug() << Logger::SubEntry << "Removing existing operations for" << moduleInstanceKey(); packageOperations.removeAt( index ); } } // This netinstall module may add two sub-steps to the packageOperations, // one for installing and one for try-installing. QVariantList installPackages; QVariantList tryInstallPackages; for ( const auto& package : packages ) { if ( package.isCritical ) { installPackages.append( package.toOperation() ); } else { tryInstallPackages.append( package.toOperation() ); } } if ( !installPackages.empty() ) { QVariantMap op; op.insert( "install", QVariant( installPackages ) ); op.insert( "source", moduleInstanceKey().toString() ); packageOperations.append( op ); cDebug() << Logger::SubEntry << installPackages.length() << "critical packages."; } if ( !tryInstallPackages.empty() ) { QVariantMap op; op.insert( "try_install", QVariant( tryInstallPackages ) ); op.insert( "source", moduleInstanceKey().toString() ); packageOperations.append( op ); cDebug() << Logger::SubEntry << tryInstallPackages.length() << "non-critical packages."; } if ( !packageOperations.isEmpty() ) { gs->insert( PACKAGEOP, packageOperations ); } } void NetInstallViewStep::nextIsReady( bool b ) { m_nextEnabled = b; emit nextStatusChanged( b ); } void NetInstallViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { m_widget->setRequired( CalamaresUtils::getBool( configurationMap, "required", false ) ); QString groupsUrl = CalamaresUtils::getString( configurationMap, "groupsUrl" ); if ( !groupsUrl.isEmpty() ) { // Keep putting groupsUrl into the global storage, // even though it's no longer used for in-module data-passing. Calamares::JobQueue::instance()->globalStorage()->insert( "groupsUrl", groupsUrl ); m_widget->loadGroupList( groupsUrl ); } bool bogus = false; auto label = CalamaresUtils::getSubMap( configurationMap, "label", bogus ); if ( label.contains( "sidebar" ) ) { m_sidebarLabel = new CalamaresUtils::Locale::TranslatedString( label, "sidebar", metaObject()->className() ); } if ( label.contains( "title" ) ) { m_widget->setPageTitle( new CalamaresUtils::Locale::TranslatedString( label, "title", metaObject()->className() ) ); } } calamares-3.2.20/src/modules/netinstall/NetInstallViewStep.h000066400000000000000000000041251362604102500240600ustar00rootroot00000000000000/* * Copyright 2016, Luca Giambonini * Copyright 2016, Lisa Vitolo * Copyright 2017, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef NETINSTALLVIEWSTEP_H #define NETINSTALLVIEWSTEP_H #include "DllMacro.h" #include "locale/TranslatableConfiguration.h" #include "utils/PluginFactory.h" #include "viewpages/ViewStep.h" #include class NetInstallPage; class PLUGINDLLEXPORT NetInstallViewStep : public Calamares::ViewStep { Q_OBJECT public: explicit NetInstallViewStep( QObject* parent = nullptr ); virtual ~NetInstallViewStep() override; QString prettyName() const override; QWidget* widget() override; bool isNextEnabled() const override; bool isBackEnabled() const override; bool isAtBeginning() const override; bool isAtEnd() const override; QList< Calamares::job_ptr > jobs() const override; void onActivate() override; // Leaving the page; store all selected packages for later installation. void onLeave() override; void setConfigurationMap( const QVariantMap& configurationMap ) override; public slots: void nextIsReady( bool ); private: NetInstallPage* m_widget; bool m_nextEnabled; CalamaresUtils::Locale::TranslatedString* m_sidebarLabel; // As it appears in the sidebar QList< Calamares::job_ptr > m_jobs; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( NetInstallViewStepFactory ) #endif // NETINSTALLVIEWSTEP_H calamares-3.2.20/src/modules/netinstall/PackageModel.cpp000066400000000000000000000205631362604102500231670ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright (c) 2017, Kyle Robbertze * Copyright 2017-2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "PackageModel.h" #include "utils/Yaml.h" // TODO: see headerData(), remove after 3.2.19 #include PackageModel::PackageModel( const YAML::Node& data, QObject* parent ) : QAbstractItemModel( parent ) { m_rootItem = new PackageTreeItem(); setupModelData( data, m_rootItem ); } PackageModel::~PackageModel() { delete m_rootItem; } QModelIndex PackageModel::index( int row, int column, const QModelIndex& parent ) const { if ( !hasIndex( row, column, parent ) ) { return QModelIndex(); } PackageTreeItem* parentItem; if ( !parent.isValid() ) { parentItem = m_rootItem; } else { parentItem = static_cast< PackageTreeItem* >( parent.internalPointer() ); } PackageTreeItem* childItem = parentItem->child( row ); if ( childItem ) { return createIndex( row, column, childItem ); } else { return QModelIndex(); } } QModelIndex PackageModel::parent( const QModelIndex& index ) const { if ( !index.isValid() ) { return QModelIndex(); } PackageTreeItem* child = static_cast< PackageTreeItem* >( index.internalPointer() ); PackageTreeItem* parent = child->parentItem(); if ( parent == m_rootItem ) { return QModelIndex(); } return createIndex( parent->row(), 0, parent ); } int PackageModel::rowCount( const QModelIndex& parent ) const { if ( parent.column() > 0 ) { return 0; } PackageTreeItem* parentItem; if ( !parent.isValid() ) { parentItem = m_rootItem; } else { parentItem = static_cast< PackageTreeItem* >( parent.internalPointer() ); } return parentItem->childCount(); } int PackageModel::columnCount( const QModelIndex& ) const { return 2; } QVariant PackageModel::data( const QModelIndex& index, int role ) const { if ( !index.isValid() ) { return QVariant(); } PackageTreeItem* item = static_cast< PackageTreeItem* >( index.internalPointer() ); if ( index.column() == 0 && role == Qt::CheckStateRole ) { return item->isSelected(); } if ( item->isHidden() && role == Qt::DisplayRole ) // Hidden group { return QVariant(); } if ( role == Qt::DisplayRole ) { return item->data( index.column() ); } return QVariant(); } bool PackageModel::setData( const QModelIndex& index, const QVariant& value, int role ) { if ( role == Qt::CheckStateRole && index.isValid() ) { PackageTreeItem* item = static_cast< PackageTreeItem* >( index.internalPointer() ); item->setSelected( static_cast< Qt::CheckState >( value.toInt() ) ); emit dataChanged( this->index( 0, 0 ), index.sibling( index.column(), index.row() + 1 ), QVector< int >( Qt::CheckStateRole ) ); } return true; } Qt::ItemFlags PackageModel::flags( const QModelIndex& index ) const { if ( !index.isValid() ) { return Qt::ItemFlags(); } if ( index.column() == 0 ) { return Qt::ItemIsUserCheckable | QAbstractItemModel::flags( index ); } return QAbstractItemModel::flags( index ); } QVariant PackageModel::headerData( int section, Qt::Orientation orientation, int role ) const { if ( orientation == Qt::Horizontal && role == Qt::DisplayRole ) { // Unusual translation call uses the existing translation from the NetInstallPage // class (now removed). // // TODO: after 3.2.19, change this to just tr() and push TX return ( section == 0 ) ? QCoreApplication::translate( "NetInstallPage", "Name" ) : QCoreApplication::translate( "NetInstallPage", "Description" ); } return QVariant(); } QList< PackageTreeItem::ItemData > PackageModel::getPackages() const { QList< PackageTreeItem* > items = getItemPackages( m_rootItem ); for ( auto package : m_hiddenItems ) if ( package->hiddenSelected() ) { items.append( getItemPackages( package ) ); } QList< PackageTreeItem::ItemData > packages; for ( auto item : items ) { PackageTreeItem::ItemData itemData; itemData.preScript = item->parentItem()->preScript(); // Only groups have hooks itemData.packageName = item->packageName(); // this seg faults itemData.postScript = item->parentItem()->postScript(); // Only groups have hooks itemData.isCritical = item->parentItem()->isCritical(); // Only groups are critical packages.append( itemData ); } return packages; } QList< PackageTreeItem* > PackageModel::getItemPackages( PackageTreeItem* item ) const { QList< PackageTreeItem* > selectedPackages; for ( int i = 0; i < item->childCount(); i++ ) { if ( item->child( i )->isSelected() == Qt::Unchecked ) { continue; } if ( !item->child( i )->childCount() ) // package { selectedPackages.append( item->child( i ) ); } else { selectedPackages.append( getItemPackages( item->child( i ) ) ); } } return selectedPackages; } void PackageModel::setupModelData( const YAML::Node& data, PackageTreeItem* parent ) { for ( YAML::const_iterator it = data.begin(); it != data.end(); ++it ) { const YAML::Node itemDefinition = *it; QString name( tr( CalamaresUtils::yamlToVariant( itemDefinition[ "name" ] ).toByteArray() ) ); QString description( tr( CalamaresUtils::yamlToVariant( itemDefinition[ "description" ] ).toByteArray() ) ); PackageTreeItem::ItemData itemData; itemData.name = name; itemData.description = description; if ( itemDefinition[ "pre-install" ] ) { itemData.preScript = CalamaresUtils::yamlToVariant( itemDefinition[ "pre-install" ] ).toString(); } if ( itemDefinition[ "post-install" ] ) { itemData.postScript = CalamaresUtils::yamlToVariant( itemDefinition[ "post-install" ] ).toString(); } PackageTreeItem* item = new PackageTreeItem( itemData, parent ); if ( itemDefinition[ "selected" ] ) item->setSelected( CalamaresUtils::yamlToVariant( itemDefinition[ "selected" ] ).toBool() ? Qt::Checked : Qt::Unchecked ); else { item->setSelected( parent->isSelected() ); // Inherit from it's parent } if ( itemDefinition[ "hidden" ] ) { item->setHidden( CalamaresUtils::yamlToVariant( itemDefinition[ "hidden" ] ).toBool() ); } if ( itemDefinition[ "critical" ] ) { item->setCritical( CalamaresUtils::yamlToVariant( itemDefinition[ "critical" ] ).toBool() ); } if ( itemDefinition[ "packages" ] ) for ( YAML::const_iterator packageIt = itemDefinition[ "packages" ].begin(); packageIt != itemDefinition[ "packages" ].end(); ++packageIt ) item->appendChild( new PackageTreeItem( CalamaresUtils::yamlToVariant( *packageIt ).toString(), item ) ); if ( itemDefinition[ "subgroups" ] ) { setupModelData( itemDefinition[ "subgroups" ], item ); } if ( item->isHidden() ) { m_hiddenItems.append( item ); } else { item->setCheckable( true ); parent->appendChild( item ); } } } calamares-3.2.20/src/modules/netinstall/PackageModel.h000066400000000000000000000043611362604102500226320ustar00rootroot00000000000000 /* === This file is part of Calamares - === * * Copyright (c) 2017, Kyle Robbertze * Copyright 2017, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef PACKAGEMODEL_H #define PACKAGEMODEL_H #include "PackageTreeItem.h" #include #include #include namespace YAML { class Node; } class PackageModel : public QAbstractItemModel { Q_OBJECT public: using PackageItemDataList = QList< PackageTreeItem::ItemData >; explicit PackageModel( const YAML::Node& data, QObject* parent = nullptr ); ~PackageModel() override; QVariant data( const QModelIndex& index, int role ) const override; bool setData( const QModelIndex& index, const QVariant& value, int role = Qt::EditRole ) override; Qt::ItemFlags flags( const QModelIndex& index ) const override; QModelIndex index( int row, int column, const QModelIndex& parent = QModelIndex() ) const override; QModelIndex parent( const QModelIndex& index ) const override; QVariant headerData( int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const override; int rowCount( const QModelIndex& parent = QModelIndex() ) const override; int columnCount( const QModelIndex& parent = QModelIndex() ) const override; PackageItemDataList getPackages() const; QList< PackageTreeItem* > getItemPackages( PackageTreeItem* item ) const; private: void setupModelData( const YAML::Node& data, PackageTreeItem* parent ); PackageTreeItem* m_rootItem; QList< PackageTreeItem* > m_hiddenItems; }; #endif // PACKAGEMODEL_H calamares-3.2.20/src/modules/netinstall/PackageTreeItem.cpp000066400000000000000000000144551362604102500236500ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright (c) 2017, Kyle Robbertze * Copyright 2017, 2020, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "PackageTreeItem.h" #include "utils/Logger.h" QVariant PackageTreeItem::ItemData::toOperation() const { // If it's a package with a pre- or post-script, replace // with the more complicated datastructure. if ( !preScript.isEmpty() || !postScript.isEmpty() ) { QMap< QString, QVariant > sdetails; sdetails.insert( "pre-script", preScript ); sdetails.insert( "package", packageName ); sdetails.insert( "post-script", postScript ); return sdetails; } else { return packageName; } } PackageTreeItem::PackageTreeItem( const ItemData& data, PackageTreeItem* parent ) : m_parentItem( parent ) , m_data( data ) { } PackageTreeItem::PackageTreeItem( const QString packageName, PackageTreeItem* parent ) : m_parentItem( parent ) { m_data.packageName = packageName; if ( parent != nullptr ) { m_data.selected = parent->isSelected(); } else { m_data.selected = Qt::Unchecked; } } PackageTreeItem::PackageTreeItem( PackageTreeItem* parent ) : m_parentItem( parent ) { } PackageTreeItem::PackageTreeItem::PackageTreeItem() : PackageTreeItem( QString(), nullptr ) { m_data.selected = Qt::Checked; m_data.name = QLatin1String( "" ); } PackageTreeItem::~PackageTreeItem() { qDeleteAll( m_childItems ); } void PackageTreeItem::appendChild( PackageTreeItem* child ) { m_childItems.append( child ); } PackageTreeItem* PackageTreeItem::child( int row ) { return m_childItems.value( row ); } int PackageTreeItem::childCount() const { return m_childItems.count(); } int PackageTreeItem::row() const { if ( m_parentItem ) { return m_parentItem->m_childItems.indexOf( const_cast< PackageTreeItem* >( this ) ); } return 0; } QVariant PackageTreeItem::data( int column ) const { if ( packageName() != nullptr ) // package { if ( !column ) { return QVariant( packageName() ); } return QVariant(); } switch ( column ) // group { case 0: return QVariant( prettyName() ); case 1: return QVariant( description() ); default: return QVariant(); } } PackageTreeItem* PackageTreeItem::parentItem() { return m_parentItem; } const PackageTreeItem* PackageTreeItem::parentItem() const { return m_parentItem; } QString PackageTreeItem::prettyName() const { return m_data.name; } QString PackageTreeItem::description() const { return m_data.description; } QString PackageTreeItem::preScript() const { return m_data.preScript; } QString PackageTreeItem::packageName() const { return m_data.packageName; } QString PackageTreeItem::postScript() const { return m_data.postScript; } bool PackageTreeItem::isHidden() const { return m_data.isHidden; } void PackageTreeItem::setHidden( bool isHidden ) { m_data.isHidden = isHidden; } bool PackageTreeItem::hiddenSelected() const { Q_ASSERT( m_data.isHidden ); if ( !m_data.selected ) { return false; } const PackageTreeItem* currentItem = parentItem(); while ( currentItem != nullptr ) { if ( !currentItem->isHidden() ) { return currentItem->isSelected() != Qt::Unchecked; } currentItem = currentItem->parentItem(); } /* Has no non-hiddent parents */ return m_data.selected; } bool PackageTreeItem::isCritical() const { return m_data.isCritical; } void PackageTreeItem::setCritical( bool isCritical ) { m_data.isCritical = isCritical; } Qt::CheckState PackageTreeItem::isSelected() const { return m_data.selected; } void PackageTreeItem::setSelected( Qt::CheckState isSelected ) { if ( parentItem() == nullptr ) // This is the root, it is always checked so don't change state { return; } m_data.selected = isSelected; setChildrenSelected( isSelected ); // Look for suitable parent item which may change checked-state // when one of its children changes. PackageTreeItem* currentItem = parentItem(); while ( ( currentItem != nullptr ) && ( currentItem->childCount() == 0 ) ) { currentItem = currentItem->parentItem(); } if ( currentItem == nullptr ) // Reached the root .. don't bother { return; } // Figure out checked-state based on the children int childrenSelected = 0; int childrenPartiallySelected = 0; for ( int i = 0; i < currentItem->childCount(); i++ ) { if ( currentItem->child( i )->isSelected() == Qt::Checked ) { childrenSelected++; } if ( currentItem->child( i )->isSelected() == Qt::PartiallyChecked ) { childrenPartiallySelected++; } } if ( !childrenSelected && !childrenPartiallySelected ) { currentItem->setSelected( Qt::Unchecked ); } else if ( childrenSelected == currentItem->childCount() ) { currentItem->setSelected( Qt::Checked ); } else { currentItem->setSelected( Qt::PartiallyChecked ); } } void PackageTreeItem::setChildrenSelected( Qt::CheckState isSelected ) { if ( isSelected != Qt::PartiallyChecked ) // Children are never root; don't need to use setSelected on them. for ( auto child : m_childItems ) { child->m_data.selected = isSelected; child->setChildrenSelected( isSelected ); } } int PackageTreeItem::type() const { return QStandardItem::UserType; } calamares-3.2.20/src/modules/netinstall/PackageTreeItem.h000066400000000000000000000061021362604102500233030ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright (c) 2017, Kyle Robbertze * Copyright 2017, 2020, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef PACKAGETREEITEM_H #define PACKAGETREEITEM_H #include #include #include class PackageTreeItem : public QStandardItem { public: struct ItemData { QString name; QString description; QString preScript; QString packageName; QString postScript; bool isCritical = false; bool isHidden = false; Qt::CheckState selected = Qt::Unchecked; /** @brief Turns this item into a variant for PackageOperations use * * For "plain" items, this is just the package name; items with * scripts return a map. See the package module for how it's interpreted. */ QVariant toOperation() const; }; explicit PackageTreeItem( const ItemData& data, PackageTreeItem* parent = nullptr ); explicit PackageTreeItem( const QString packageName, PackageTreeItem* parent = nullptr ); explicit PackageTreeItem( PackageTreeItem* parent ); explicit PackageTreeItem(); // The root of the tree; always selected, named ~PackageTreeItem() override; void appendChild( PackageTreeItem* child ); PackageTreeItem* child( int row ); int childCount() const; QVariant data( int column ) const override; int row() const; PackageTreeItem* parentItem(); const PackageTreeItem* parentItem() const; QString prettyName() const; QString description() const; QString preScript() const; QString packageName() const; QString postScript() const; bool isHidden() const; void setHidden( bool isHidden ); /** * @brief Is this hidden item, considered "selected"? * * This asserts when called on a non-hidden item. * A hidden item has its own selected state, but really * falls under the selectedness of the parent item. */ bool hiddenSelected() const; bool isCritical() const; void setCritical( bool isCritical ); Qt::CheckState isSelected() const; void setSelected( Qt::CheckState isSelected ); void setChildrenSelected( Qt::CheckState isSelected ); int type() const override; private: PackageTreeItem* m_parentItem; QList< PackageTreeItem* > m_childItems; ItemData m_data; }; #endif // PACKAGETREEITEM_H calamares-3.2.20/src/modules/netinstall/README.md000066400000000000000000000102121362604102500214140ustar00rootroot00000000000000# Netinstall module The netinstall module allows distribution maintainers to ship minimal ISOs with only a basic set of preinstall packages. At installation time, the user is presented with the choice to install groups of packages from a predefined list. Calamares will then invoke the correct backend to install the packages. ## Module Configuration The `netinstall.conf` file is self-describing, and at the very lease should contain a *groupsUrl* key: ``` ---- groupsUrl: ``` The URL must point to a YAML file, the *groups* file. See below for the format of that groups file. The URL may be a local file. ## Groups Configuration Here is a short example of how the YAML file should look. ``` - name: "Group name" description: "Description of the group" packages: - lsb-release - avahi - grub - name: "Second group name" ... ``` The file is composed of a list of entries, each describing one group. The keys *name*, *description* and *packages* are required for each group. More keys (per group) are supported: - *hidden*: if true, do not show the group on the page. Defaults to false. - *selected*: if true, display the group as selected. Defaults to false. - critical*: if true, make the installation process fail if installing any of the packages in the group fails. Otherwise, just log a warning. Defaults to false. - *subgroups*: if present this follows the same structure as the top level of the YAML file, allowing there to be sub-groups of packages to an arbitary depth - *pre-install*: an optional command to run within the new system before the group's packages are installed. It will run before each package in the group is installed. - *post-install*: an optional command to run within the new system after the group's packages are installed. It will run after each package in the group is installed. If you set both *hidden* and *selected* for a group, you are basically creating a "default" group of packages which will always be installed in the user's system. > The note below applies to Calamares up-to-and-including 3.2.13, but will > change in a later release. The *pre-install* and *post-install* commands are **not** passed to a shell; see the **packages** module configuration (i.e. `packages.conf`) for details. To use a full shell pipeline, call the shell explicitly. ## Overall Configuration Here is the set of instructions to have the module work in your Calamares. First, if the module is used, we need to require a working Internet connection, otherwise the module will be unable to fetch the package groups and to perform the installation. Requirements for the Calamares instance are configured in the `welcome.conf` file (configuration for the **welcome** module). Make sure *internet* is listed under the *required* checks. In the `settings.conf` file, decide where the **netinstall** page should be displayed. I put it just after the **welcome** page, but any position between that and just before **partition** should make no difference. If not present, add the **packages** job in the *exec* list. This is the job that calls the package manager to install packages. Make sure it is configured to use the correct package manager for your distribution; this is configured in `packages.conf`. The *exec* list in `settings.conf` should contain the following items in order (it's ok for other jobs to be listed inbetween them, though): ``` - unpackfs - networkcfg - packages ``` **unpackfs** creates the chroot where the installation is performed, and unpacks the root image with the filesystem structure; **networkcfg** set ups a working network in the chroot; and finally **packages** can install packages in the chroot. ## Common issues If launching the package manager command returns you negative exit statuses and nothing is actually invoked, this is likely an error in the setup of the chroot; check that the parameter **rootMountPoint** is set to the correct value in the Calamares configuration. If the command is run, but exits with error, check that the network is working in the chroot. Make sure `/etc/resolv.conf` exists and that it's not empty. calamares-3.2.20/src/modules/netinstall/netinstall.conf000066400000000000000000000037071362604102500231740ustar00rootroot00000000000000--- # This is the URL that is retrieved to get the netinstall groups-and-packages # data (which should be in the format described in netinstall.yaml), e.g.: # groupsUrl: http://example.org/netinstall.php # or it can be a locally installed file: # groupsUrl: file:///usr/share/calamares/netinstall.yaml # # Note that the contents of the groups file is the **important** # part of the configuration of this module. It specifies what # the user may select and what commands are to be run. # # The format of the groups file is documented in `README.md`. # # groupsUrl: file:///usr/share/calamares/netinstall.yaml # If the installation can proceed without netinstall (e.g. the Live CD # can create a working installed system, but netinstall is preferred # to bring it up-to-date or extend functionality) leave this set to # false (the default). If set to true, the netinstall data is required. # # This only has an effect if the netinstall data cannot be retrieved, # or is corrupt: having "required" set, means the install cannot proceed. required: false # To support multiple instances of this module, # some strings are configurable and translatable here. # - *sidebar* This is the name of the module in the progress-tree / sidebar # in Calamares. # - *title* This is displayed above the list of packages. # If no *sidebar* values are provided, defaults to "Package selection" # and existing translations. If no *title* values are provided, no string # is displayed. # # The following strings are already known to Calamares and can be # listed here in *untranslated* form (e.g. as value of *sidebar*) # without bothering with the translations: they are picked up from # the regular translation framework: # - "Package selection" # - "Office software" # - "Office package" # - "Browser software" # - "Browser package" # - "Web browser" label: sidebar: "Package selection" # sidebar[nl]: "Pakketkeuze" # title: "Office Package" # title[nl]: "Kantoorsoftware" calamares-3.2.20/src/modules/netinstall/netinstall.yaml000066400000000000000000000105561362604102500232110ustar00rootroot00000000000000# Example configuration with groups and packages, taken from Chakra Linux. # # This example is rather limited. See `README.md` for full documentation # on the configuration format. - name: "Default" description: "Default group" hidden: true selected: true critical: false packages: - base - chakra-live-skel - cdemu-client - lsb-release - avahi - grub # disk utils - dosfstools - e2fsprogs - fuse - gptfdisk - jfsutils - ntfs-3g - reiserfsprogs - xfsprogs # power - acpi_call - pmtools # network - dnsutils - iputils - netcfg - xinetd # firmwares - alsa-firmware - linux-firmware # sound - alsa-lib - alsa-utils - gstreamer - gst-plugins-good - gst-plugins-bad - libao - libcanberra-gstreamer - libcanberra-pulse - pulseaudio - pulseaudio-alsa # tools - bash-completion - hwinfo - lsof - man-db - mlocate - nano - openssh - sudo - vim - zsh # :D # archivers - p7zip - unarj - unrar - unzip - zip # xorg base - xorg - xorg-apps - xorg-fonts-alias - xorg-fonts-encodings - xorg-fonts-misc - xorg-res-utils - xorg-server - xorg-server-utils - xorg-xauth - xorg-xinit - xorg-xkb-utils # xorg video drivers - xf86-video-apm - xf86-video-ark - xf86-video-ati - xf86-video-chips - xf86-video-cirrus - xf86-video-glint - xf86-video-i128 - xf86-video-i740 - xf86-video-intel - xf86-video-mach64 - xf86-video-mga - xf86-video-neomagic - xf86-video-nouveau - xf86-video-nv - xf86-video-openchrome - xf86-video-r128 - xf86-video-rendition - xf86-video-s3 - xf86-video-s3virge - xf86-video-savage - xf86-video-siliconmotion - xf86-video-sisusb - xf86-video-tdfx - xf86-video-trident - xf86-video-tseng - xf86-video-v4l - xf86-video-vesa - xf86-video-voodoo - mesa-libgl # xorg input drivers - xf86-input-synaptics - xf86-input-wacom - xf86-input-evdev - xf86-input-keyboard - xf86-input-mouse # fonts - terminus-font - ttf-dejavu - ttf-liberation - wqy-microhei - xorg-fonts-100dpi - xorg-fonts-75dpi - xorg-fonts-cyrillic # additional stuff that needs xorg - hicolor-icon-theme # kde - chakra-common - qt - kde-baseapps - kde-baseapps-dolphin - kde-baseapps-konsole - kde-runtime - kde-workspace - kdelibs - kdepimlibs - kdemultimedia-kmix - oxygen-icons - phonon-backend-gstreamer # chakra theme (including kapudan options) - chakra-wallpapers-dharma - chakra-wallpapers-curie - chakra-wallpapers-descartes - grub2-themes-sirius - kapudan-kde-themes-caledonia - kde-kdm-themes-sirius - kde-ksplash-themes-sirius - kde-plasma-themes-caledonia - python2-imaging - python2-v4l2capture - python2-xlib - caledonia-colors - yakuake-themes-ronak # kde (everything else) - kdeadmin-kcron - kdeadmin-kuser - kdeplasma-addons-applets-icontasks - kdesdk-kate - kdeutils-ark - kdeutils-kgpg - kdeutils-sweeper # kde network - kdeplasma-applets-plasma-nm - networkmanager-dispatcher-ntpd - kcm-ufw # applications - rekonq - yakuake # enable systemd-units - chakra-init-live # overlay pkgs - partitionmanager - octopi-notifier - kapudan - name: "Wireless" description: "Tools for wireless connections" critical: false packages: - crda - ndiswrapper - usb-modeswitch - wireless-regdb - wireless_tools - wpa_supplicant - name: "CCR" description: "Tools for the Chakra Community Repository" packages: - ccr - base-devel - name: "Graphics" description: "Applications to work with graphics" packages: - kdegraphics-gwenview - kdegraphics-kamera - kdegraphics-kcolorchooser - kdegraphics-kgamma - kdegraphics-kolourpaint - kdegraphics-kruler - kdegraphics-ksaneplugin - kdegraphics-ksnapshot - kdegraphics-libkdcraw - kdegraphics-libkexiv2 - kdegraphics-libkipi - kdegraphics-libksane - kdegraphics-mobipocket - kdegraphics-okular - kdegraphics-strigi-analyzer - kdegraphics-svgpart - kdegraphics-thumbnailers - imagemagick calamares-3.2.20/src/modules/netinstall/page_netinst.ui000066400000000000000000000026711362604102500231660ustar00rootroot00000000000000 Page_NetInst 0 0 997 474 Qt::AlignCenter 16777215 16777215 true 0 0 981 407 11 calamares-3.2.20/src/modules/networkcfg/000077500000000000000000000000001362604102500201355ustar00rootroot00000000000000calamares-3.2.20/src/modules/networkcfg/main.py000066400000000000000000000066341362604102500214440ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # === This file is part of Calamares - === # # Copyright 2014, Philip Müller # Copyright 2014, Teo Mrnjavac # Copyright 2017, Alf Gaida # Copyright 2019, Adriaan de Groot # # Calamares 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. # # Calamares 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 Calamares. If not, see . import os import shutil import libcalamares import gettext _ = gettext.translation("calamares-python", localedir=libcalamares.utils.gettext_path(), languages=libcalamares.utils.gettext_languages(), fallback=True).gettext def pretty_name(): return _("Saving network configuration.") def run(): """ Setup network configuration """ root_mount_point = libcalamares.globalstorage.value("rootMountPoint") if root_mount_point is None: libcalamares.utils.warning("rootMountPoint is empty, {!s}".format(root_mount_point)) return (_("Configuration Error"), _("No root mount point is given for
{!s}
to use." ).format("networkcfg")) source_nm = "/etc/NetworkManager/system-connections/" target_nm = os.path.join( root_mount_point, "etc/NetworkManager/system-connections/" ) # Sanity checks. We don't want to do anything if a network # configuration already exists on the target if os.path.exists(source_nm) and os.path.exists(target_nm): for network in os.listdir(source_nm): # Skip LTSP live if network == "LTSP": continue source_network = os.path.join(source_nm, network) target_network = os.path.join(target_nm, network) if os.path.exists(target_network): continue try: shutil.copy(source_network, target_network) except FileNotFoundError: libcalamares.utils.debug( "Can't copy network configuration files in " + "{}".format(source_network) ) except FileExistsError: pass # We need to overwrite the default resolv.conf in the chroot. source_resolv = "/etc/resolv.conf" target_resolv = os.path.join(root_mount_point, "etc/resolv.conf") if source_resolv != target_resolv and os.path.exists(source_resolv): try: os.remove(target_resolv) except Exception as err: libcalamares.utils.debug( "Couldn't remove {}: {}".format(target_resolv, err) ) try: shutil.copy(source_resolv, target_resolv) except Exception as err: libcalamares.utils.debug( "Can't copy resolv.conf from {}: {}".format(source_resolv, err) ) return None calamares-3.2.20/src/modules/networkcfg/module.desc000066400000000000000000000001721362604102500222620ustar00rootroot00000000000000--- type: "job" name: "networkcfg" interface: "python" requires: [] script: "main.py" noconfig: true calamares-3.2.20/src/modules/notesqml/000077500000000000000000000000001362604102500176265ustar00rootroot00000000000000calamares-3.2.20/src/modules/notesqml/CMakeLists.txt000066400000000000000000000003441362604102500223670ustar00rootroot00000000000000calamares_add_plugin( notesqml TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES NotesQmlViewStep.cpp RESOURCES notesqml.qrc LINK_PRIVATE_LIBRARIES calamaresui SHARED_LIB ) calamares-3.2.20/src/modules/notesqml/NotesQmlViewStep.cpp000066400000000000000000000032661362604102500235720ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2020, Adriaan de Groot * Copyright 2020, Anke Boersma * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "NotesQmlViewStep.h" #include NotesQmlViewStep::NotesQmlViewStep( QObject* parent ) : Calamares::QmlViewStep( "notesqml", parent ) { } NotesQmlViewStep::~NotesQmlViewStep() {} QString NotesQmlViewStep::prettyName() const { return m_notesName ? m_notesName->get() : tr( "Notes" ); } void NotesQmlViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { bool qmlLabel_ok = false; auto qmlLabel = CalamaresUtils::getSubMap( configurationMap, "qmlLabel", qmlLabel_ok ); if ( qmlLabel.contains( "notes" ) ) { m_notesName = new CalamaresUtils::Locale::TranslatedString( qmlLabel, "notes" ); } Calamares::QmlViewStep::setConfigurationMap( configurationMap ); // call parent implementation last } CALAMARES_PLUGIN_FACTORY_DEFINITION( NotesQmlViewStepFactory, registerPlugin< NotesQmlViewStep >(); ) calamares-3.2.20/src/modules/notesqml/NotesQmlViewStep.h000066400000000000000000000030731362604102500232330ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2020, Adriaan de Groot * Copyright 2020, Anke Boersma * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef NOTESQMLVIEWSTEP_H #define NOTESQMLVIEWSTEP_H #include "DllMacro.h" #include "locale/TranslatableConfiguration.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Variant.h" #include "utils/PluginFactory.h" #include "viewpages/QmlViewStep.h" class PLUGINDLLEXPORT NotesQmlViewStep : public Calamares::QmlViewStep { Q_OBJECT public: NotesQmlViewStep( QObject* parent = nullptr ); virtual ~NotesQmlViewStep() override; QString prettyName() const override; void setConfigurationMap( const QVariantMap& configurationMap ) override; private: CalamaresUtils::Locale::TranslatedString* m_notesName; // As it appears in the sidebar }; CALAMARES_PLUGIN_FACTORY_DECLARATION( NotesQmlViewStepFactory ) #endif calamares-3.2.20/src/modules/notesqml/examples/000077500000000000000000000000001362604102500214445ustar00rootroot00000000000000calamares-3.2.20/src/modules/notesqml/examples/notesqml.qml.example000066400000000000000000000052451362604102500254610ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2020, Anke Boersma * Copyright 2020, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ /* Some Calamares internals are available to all QML modules. * They live in the calamares.ui namespace (filled programmatically * by Calamares). One of the internals that is exposed is the * Branding object, which can be used to retrieve strings and paths * and colors. */ import calamares.ui 1.0 import QtQuick 2.7 import QtQuick.Controls 2.2 import QtQuick.Window 2.2 import QtQuick.Layouts 1.3 import QtQuick.Controls.Material 2.1 Item { width: 740 height: 420 Flickable { id: flick anchors.fill: parent contentHeight: 800 ScrollBar.vertical: ScrollBar { id: fscrollbar width: 10 policy: ScrollBar.AlwaysOn } TextArea { id: intro x: 1 y: 0 width: parent.width - fscrollbar.width font.pointSize: 14 textFormat: Text.RichText antialiasing: true activeFocusOnPress: false wrapMode: Text.WordWrap text: qsTr("

%1

This an example QML file, showing options in RichText with Flickable content.

QML with RichText can use HTML tags, Flickable content is useful for touchscreens.

This is bold text

This is italic text

This is underlined text

This text will be center-aligned.

This is strikethrough

Code example: ls -l /home

Lists:

  • Intel CPU systems
  • AMD CPU systems

The vertical scrollbar is adjustable, current width set to 10.

").arg(Branding.string(Branding.VersionedName)) } } } calamares-3.2.20/src/modules/notesqml/notesqml.conf000066400000000000000000000030671362604102500223450ustar00rootroot00000000000000# The *notesqml* module can be used to display a QML file # as an installer step. This is most useful for release-notes # and similar somewhat-static content, but if you want to you # can put SameGame in there as well. # # While the module compiles a QML file into a QRC for inclusion # into the shared library, normal use will configure it with # an external file, either from Calamares AppData directory or # from the branding directory. # # --- # # QML modules can search for the QML inside the Qt resources # (QRC) which are compiled into the module, or in the branding # setup for Calamares, (or both of them, with branding taking # precedence). This allows the module to ship a default UI and # branding to optionally introduce a replacement file. # # Generally, leave the search method set to "both" because if # you don't want to brand the UI, just don't ship a branding # QML file for it. # # To support instanced QML modules, searches in the branding # directory look for the full notesqml@instanceid name as well. --- # Search mode. Valid values are "both", "qrc" and "branding" search: both # Name of the QML file. If not set, uses the name of the instance # of the module (e.g. if you list this module in `settings.conf` # in the *instances* section, you get *id*, otherwise it would # normally be "notesqml"). #filename: notesqml # This is the name of the module in the progress-tree / sidebar # in Calamares. To support multiple instances of the QML module, # the name is configurable and translatable here. qmlLabel: notes: "Release Notes" notes[nl]: "Opmerkingen" calamares-3.2.20/src/modules/notesqml/notesqml.qml000066400000000000000000000037501362604102500222100ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2020, Anke Boersma * Copyright 2020, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ /* Some Calamares internals are available to all QML modules. * They live in the calamares.ui namespace (filled programmatically * by Calamares). One of the internals that is exposed is the * Branding object, which can be used to retrieve strings and paths * and colors. */ import calamares.ui 1.0 import QtQuick 2.7 import QtQuick.Controls 2.2 import QtQuick.Window 2.2 import QtQuick.Layouts 1.3 import QtQuick.Controls.Material 2.1 Item { width: 740 height: 420 Flickable { id: flick anchors.fill: parent contentHeight: 800 ScrollBar.vertical: ScrollBar { id: fscrollbar width: 10 policy: ScrollBar.AlwaysOn } TextArea { id: intro x: 1 y: 0 width: parent.width - fscrollbar.width font.pointSize: 14 textFormat: Text.RichText antialiasing: true activeFocusOnPress: false wrapMode: Text.WordWrap text: qsTr("

%1

These are example release notes.

" ).arg(Branding.string(Branding.VersionedName)) } } } calamares-3.2.20/src/modules/notesqml/notesqml.qrc000066400000000000000000000001631362604102500221770ustar00rootroot00000000000000 notesqml.qml calamares-3.2.20/src/modules/oemid/000077500000000000000000000000001362604102500170615ustar00rootroot00000000000000calamares-3.2.20/src/modules/oemid/CMakeLists.txt000066400000000000000000000003721362604102500216230ustar00rootroot00000000000000calamares_add_plugin( oemid TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES IDJob.cpp OEMViewStep.cpp UI OEMPage.ui LINK_PRIVATE_LIBRARIES calamaresui Qt5::Widgets SHARED_LIB ) calamares-3.2.20/src/modules/oemid/IDJob.cpp000066400000000000000000000063411362604102500205200ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "IDJob.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "Settings.h" #include "utils/Logger.h" #include #include IDJob::IDJob(const QString& id, QObject* parent) : Job( parent ) , m_batchIdentifier( id ) { } QString IDJob::prettyName() const { return tr( "OEM Batch Identifier" ); } Calamares::JobResult IDJob::writeId( const QString& dirs, const QString& filename, const QString& contents ) { if ( !QDir().mkpath( dirs ) ) { cError() << "Could not create directories" << dirs; return Calamares::JobResult::error( tr( "OEM Batch Identifier" ), tr( "Could not create directories %1." ).arg( dirs ) ); } QFile output( QDir( dirs ).filePath( filename ) ); if ( output.exists() ) cWarning() << "Existing OEM Batch ID" << output.fileName() << "overwritten."; if ( !output.open( QIODevice::WriteOnly ) ) { cError() << "Could not write to" << output.fileName(); return Calamares::JobResult::error( tr( "OEM Batch Identifier" ), tr( "Could not open file %1." ).arg( output.fileName() ) ); } if ( output.write( contents.toUtf8() ) < 0 ) { cError() << "Write error on" << output.fileName(); return Calamares::JobResult::error( tr( "OEM Batch Identifier" ), tr( "Could not write to file %1." ).arg( output.fileName() ) ); } output.write( "\n" ); // Ignore error on this one return Calamares::JobResult::ok(); } Calamares::JobResult IDJob::exec() { cDebug() << "Setting OEM Batch ID to" << m_batchIdentifier; Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); QString targetDir = QStringLiteral( "/var/log/installer/" ); QString targetFile = QStringLiteral( "oem-id" ); QString rootMount = gs->value( "rootMountPoint" ).toString(); // Don't bother translating internal errors if ( rootMount.isEmpty() && Calamares::Settings::instance()->doChroot() ) return Calamares::JobResult::internalError( "OEM Batch Identifier", "No rootMountPoint is set, but a chroot is required. " "Is there a module before oemid that sets up the partitions?", Calamares::JobResult::InvalidConfiguration ); return writeId( Calamares::Settings::instance()->doChroot() ? rootMount + targetDir : targetDir, targetFile, m_batchIdentifier ); } calamares-3.2.20/src/modules/oemid/IDJob.h000066400000000000000000000023201362604102500201560ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef IDJOB_H #define IDJOB_H #include "Job.h" #include class IDJob : public Calamares::Job { Q_OBJECT public: explicit IDJob( const QString& id, QObject* parent = nullptr ); virtual QString prettyName() const override; virtual Calamares::JobResult exec() override; private: Calamares::JobResult writeId( const QString&, const QString&, const QString& ); QString m_batchIdentifier; } ; #endif calamares-3.2.20/src/modules/oemid/OEMPage.ui000066400000000000000000000055451362604102500206460ustar00rootroot00000000000000 OEMPage 0 0 592 300 1 0 OEMPage Ba&tch: batchIdentifier <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> batch-identifier <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> Qt::RichText Qt::AlignCenter true Qt::Vertical QSizePolicy::Fixed 20 40 Qt::Vertical 20 40 calamares-3.2.20/src/modules/oemid/OEMViewStep.cpp000066400000000000000000000062731362604102500217040ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "OEMViewStep.h" #include "ui_OEMPage.h" #include "IDJob.h" #include "utils/Retranslator.h" #include "utils/Variant.h" #include #include #include class OEMPage : public QWidget { public: OEMPage() : QWidget( nullptr ) , m_ui( new Ui_OEMPage() ) { m_ui->setupUi( this ); CALAMARES_RETRANSLATE( m_ui->retranslateUi( this ); ) } virtual ~OEMPage() override; Ui_OEMPage* m_ui; } ; OEMPage::~OEMPage() { } OEMViewStep::OEMViewStep(QObject* parent) : Calamares::ViewStep( parent ) , m_widget( nullptr ) , m_visited( false ) { } OEMViewStep::~OEMViewStep() { if ( m_widget && m_widget->parent() == nullptr ) m_widget->deleteLater(); } bool OEMViewStep::isBackEnabled() const { return true; } bool OEMViewStep::isNextEnabled() const { return true; } bool OEMViewStep::isAtBeginning() const { return true; } bool OEMViewStep::isAtEnd() const { return true; } static QString substitute( QString s ) { QString t_date = QStringLiteral( "@@DATE@@" ); if ( s.contains( t_date ) ) { auto date = QDate::currentDate(); s = s.replace( t_date, date.toString( Qt::ISODate )); } return s; } void OEMViewStep::onActivate() { if ( !m_widget ) (void) widget(); if ( !m_visited && m_widget ) m_widget->m_ui->batchIdentifier->setText( m_user_batchIdentifier ); m_visited = true; ViewStep::onActivate(); } void OEMViewStep::onLeave() { m_user_batchIdentifier = m_widget->m_ui->batchIdentifier->text(); ViewStep::onLeave(); } QString OEMViewStep::prettyName() const { return tr( "OEM Configuration" ); } QString OEMViewStep::prettyStatus() const { return tr( "Set the OEM Batch Identifier to %1." ).arg( m_user_batchIdentifier ); } QWidget * OEMViewStep::widget() { if (!m_widget) m_widget = new OEMPage; return m_widget; } Calamares::JobList OEMViewStep::jobs() const { return Calamares::JobList() << Calamares::job_ptr( new IDJob( m_user_batchIdentifier ) ); } void OEMViewStep::setConfigurationMap(const QVariantMap& configurationMap) { m_conf_batchIdentifier = CalamaresUtils::getString( configurationMap, "batch-identifier" ); m_user_batchIdentifier = substitute( m_conf_batchIdentifier ); } CALAMARES_PLUGIN_FACTORY_DEFINITION( OEMViewStepFactory, registerPlugin(); ) calamares-3.2.20/src/modules/oemid/OEMViewStep.h000066400000000000000000000034221362604102500213420ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef OEMVIEWSTEP_H #define OEMVIEWSTEP_H #include #include #include #include class OEMPage; class PLUGINDLLEXPORT OEMViewStep : public Calamares::ViewStep { Q_OBJECT public: explicit OEMViewStep( QObject* parent = nullptr ); virtual ~OEMViewStep() override; QString prettyName() const override; QString prettyStatus() const override; QWidget* widget() override; bool isNextEnabled() const override; bool isBackEnabled() const override; bool isAtBeginning() const override; bool isAtEnd() const override; void onActivate() override; void onLeave() override; Calamares::JobList jobs() const override; void setConfigurationMap( const QVariantMap& configurationMap ) override; private: QString m_conf_batchIdentifier; QString m_user_batchIdentifier; OEMPage* m_widget; bool m_visited; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( OEMViewStepFactory ) #endif calamares-3.2.20/src/modules/oemid/oemid.conf000066400000000000000000000010771362604102500210320ustar00rootroot00000000000000# This is an OEM setup (phase-0) configuration file. --- # The batch-identifier is written to /var/log/installer/oem-id. # This value is put into the text box as the **suggested** # OEM ID. If @@DATE@@ is included in the identifier, then # that is replaced by the current date in yyyy-MM-dd (ISO) format. # # it is ok for the identifier to be empty. # # The identifier is written to the file as UTF-8 (this will be no # different from ASCII, for most inputs) and followed by a newline. # If the identifier is empty, only a newline is written. batch-identifier: neon-@@DATE@@ calamares-3.2.20/src/modules/openrcdmcryptcfg/000077500000000000000000000000001362604102500213355ustar00rootroot00000000000000calamares-3.2.20/src/modules/openrcdmcryptcfg/main.py000066400000000000000000000067111362604102500226400ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # === This file is part of Calamares - === # # Copyright 2017, Ghiunhan Mamut # Copyright 2019, Adriaan de Groot # # Calamares 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. # # Calamares 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 Calamares. If not, see . import os.path import libcalamares import gettext _ = gettext.translation("calamares-python", localedir=libcalamares.utils.gettext_path(), languages=libcalamares.utils.gettext_languages(), fallback=True).gettext def pretty_name(): return _("Configuring OpenRC dmcrypt service.") def write_dmcrypt_conf(partitions, root_mount_point, dmcrypt_conf_path): crypto_target = "" crypto_source = "" for partition in partitions: has_luks = "luksMapperName" in partition skip_partitions = partition["mountPoint"] == "/" or partition["fs"] == "linuxswap" if not has_luks and not skip_partitions: libcalamares.utils.debug( "Skip writing OpenRC LUKS configuration for partition {!s}".format(partition["mountPoint"])) if has_luks and not skip_partitions: crypto_target = partition["luksMapperName"] crypto_source = "/dev/disk/by-uuid/{!s}".format(partition["uuid"]) libcalamares.utils.debug( "Writing OpenRC LUKS configuration for partition {!s}".format(partition["mountPoint"])) with open(os.path.join(root_mount_point, dmcrypt_conf_path), 'a+') as dmcrypt_file: dmcrypt_file.write("\ntarget=" + crypto_target) dmcrypt_file.write("\nsource=" + crypto_source) dmcrypt_file.write("\nkey=/crypto_keyfile.bin") dmcrypt_file.write("\n") if has_luks and skip_partitions: pass # root and swap partitions should be handled by initramfs generators return None def run(): """ This module configures OpenRC dmcrypt service for LUKS encrypted partitions. :return: """ root_mount_point = libcalamares.globalstorage.value("rootMountPoint") dmcrypt_conf_path = libcalamares.job.configuration["configFilePath"] partitions = libcalamares.globalstorage.value("partitions") if not partitions: libcalamares.utils.warning("partitions is empty, {!s}".format(partitions)) return (_("Configuration Error"), _("No partitions are defined for
{!s}
to use." ).format("openrcdmcryptcfg")) if not root_mount_point: libcalamares.utils.warning("rootMountPoint is empty, {!s}".format(root_mount_point)) return (_("Configuration Error"), _("No root mount point is given for
{!s}
to use." ).format("openrcdmcryptcfg")) dmcrypt_conf_path = dmcrypt_conf_path.lstrip('/') return write_dmcrypt_conf(partitions, root_mount_point, dmcrypt_conf_path) calamares-3.2.20/src/modules/openrcdmcryptcfg/module.desc000066400000000000000000000001401362604102500234550ustar00rootroot00000000000000--- type: "job" name: "openrcdmcryptcfg" interface: "python" script: "main.py" calamares-3.2.20/src/modules/openrcdmcryptcfg/openrcdmcryptcfg.conf000066400000000000000000000000501362604102500255500ustar00rootroot00000000000000--- configFilePath: /etc/conf.d/dmcrypt calamares-3.2.20/src/modules/packagechooser/000077500000000000000000000000001362604102500207425ustar00rootroot00000000000000calamares-3.2.20/src/modules/packagechooser/CMakeLists.txt000066400000000000000000000032221362604102500235010ustar00rootroot00000000000000find_package( Qt5 COMPONENTS Core Gui Widgets REQUIRED ) set( _extra_libraries "" ) set( _extra_src "" ) ### OPTIONAL AppData XML support in PackageModel # # option( WITH_APPDATA "Support appdata: items in PackageChooser (requires QtXml)" ON ) if ( WITH_APPDATA ) find_package(Qt5 COMPONENTS Xml) if ( Qt5Xml_FOUND ) add_definitions( -DHAVE_XML ) list( APPEND _extra_libraries Qt5::Xml ) list( APPEND _extra_src ItemAppData.cpp ) endif() endif() ### OPTIONAL AppStream support in PackageModel # # option( WITH_APPSTREAM "Support appstream: items in PackageChooser (requires libappstream-qt)" ON ) if ( WITH_APPSTREAM ) find_package(AppStreamQt) set_package_properties( AppStreamQt PROPERTIES DESCRIPTION "Support for AppStream (cache) data" URL "https://github.com/ximion/appstream" PURPOSE "AppStream provides package data" TYPE OPTIONAL ) if ( AppStreamQt_FOUND ) add_definitions( -DHAVE_APPSTREAM ) list( APPEND _extra_libraries AppStreamQt ) list( APPEND _extra_src ItemAppStream.cpp ) endif() endif() calamares_add_plugin( packagechooser TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES PackageChooserPage.cpp PackageChooserViewStep.cpp PackageModel.cpp ${_extra_src} RESOURCES packagechooser.qrc UI page_package.ui LINK_PRIVATE_LIBRARIES calamaresui ${_extra_libraries} SHARED_LIB ) calamares_add_test( packagechoosertest GUI SOURCES Tests.cpp LIBRARIES calamares_viewmodule_packagechooser ${_extra_libraries} ) calamares-3.2.20/src/modules/packagechooser/ItemAppData.cpp000066400000000000000000000151621362604102500236040ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ /** @brief Loading items from AppData XML files. * * Only used if QtXML is found, implements PackageItem::fromAppData(). */ #include "PackageModel.h" #include "utils/Logger.h" #include "utils/Variant.h" #include #include #include /** @brief try to load the given @p fileName XML document * * Returns a QDomDocument, which will be valid iff the file can * be read and contains valid XML data. */ static inline QDomDocument loadAppData( const QString& fileName ) { QFile file( fileName ); if ( !file.open( QIODevice::ReadOnly ) ) { return QDomDocument(); } QDomDocument doc( "AppData" ); if ( !doc.setContent( &file ) ) { file.close(); return QDomDocument(); } file.close(); return doc; } /** @brief gets the text of child element @p tagName */ static inline QString getChildText( const QDomNode& n, const QString& tagName ) { QDomElement e = n.firstChildElement( tagName ); return e.isNull() ? QString() : e.text(); } /** @brief Gets a suitable screenshot path * * The element contains zero or more * elements, which can have a *type* associated with them. * Scan the screenshot elements, return the path * for the one labeled with type=default or, if there is no * default, the first element. */ static inline QString getScreenshotPath( const QDomNode& n ) { QDomElement shotsNode = n.firstChildElement( "screenshots" ); if ( shotsNode.isNull() ) { return QString(); } const QDomNodeList shotList = shotsNode.childNodes(); int firstScreenshot = -1; // Use which screenshot node? for ( int i = 0; i < shotList.count(); ++i ) { if ( !shotList.at( i ).isElement() ) { continue; } QDomElement e = shotList.at( i ).toElement(); if ( e.tagName() != "screenshot" ) { continue; } // If none has the "type=default" attribute, use the first one if ( firstScreenshot < 0 ) { firstScreenshot = i; } // But type=default takes precedence. if ( e.hasAttribute( "type" ) && e.attribute( "type" ) == "default" ) { firstScreenshot = i; break; } } if ( firstScreenshot >= 0 ) { return shotList.at( firstScreenshot ).firstChildElement( "image" ).text(); } return QString(); } /** @brief Returns language of the given element @p e * * Transforms the attribute value for xml:lang to something * suitable for TranslatedString (e.g. [lang]). */ static inline QString getLanguage( const QDomElement& e ) { QString language = e.attribute( "xml:lang" ); if ( !language.isEmpty() ) { language.replace( '-', '_' ); language.prepend( '[' ); language.append( ']' ); } return language; } /** @brief Scan the list of @p children for @p tagname elements and add them to the map * * Uses @p mapname instead of @p tagname for the entries in map @p m * to allow renaming from XML to map keys (in particular for * TranslatedString). Also transforms xml:lang attributes to suitable * key-decorations on @p mapname. */ static inline void fillMap( QVariantMap& m, const QDomNodeList& children, const QString& tagname, const QString& mapname ) { for ( int i = 0; i < children.count(); ++i ) { if ( !children.at( i ).isElement() ) { continue; } QDomElement e = children.at( i ).toElement(); if ( e.tagName() != tagname ) { continue; } m[ mapname + getLanguage( e ) ] = e.text(); } } /** @brief gets the and elements * * Builds up a map of the elements (which may have a *lang* * attribute to indicate translations and paragraphs of the * element (also with lang). Uses the * elements to supplement the description if no description * is available for a given language. * * Returns a map with keys suitable for use by TranslatedString. */ static inline QVariantMap getNameAndSummary( const QDomNode& n ) { QVariantMap m; const QDomNodeList children = n.childNodes(); fillMap( m, children, "name", "name" ); fillMap( m, children, "summary", "description" ); const QDomElement description = n.firstChildElement( "description" ); if ( !description.isNull() ) { fillMap( m, description.childNodes(), "p", "description" ); } return m; } PackageItem fromAppData( const QVariantMap& item_map ) { QString fileName = CalamaresUtils::getString( item_map, "appdata" ); if ( fileName.isEmpty() ) { cWarning() << "Can't load AppData without a suitable key."; return PackageItem(); } cDebug() << "Loading AppData XML from" << fileName; QDomDocument doc = loadAppData( fileName ); if ( doc.isNull() ) { return PackageItem(); } QDomElement componentNode = doc.documentElement(); if ( !componentNode.isNull() && componentNode.tagName() == "component" ) { // An "id" entry in the Calamares config overrides ID in the AppData QString id = CalamaresUtils::getString( item_map, "id" ); if ( id.isEmpty() ) { id = getChildText( componentNode, "id" ); } if ( id.isEmpty() ) { return PackageItem(); } // A "screenshot" entry in the Calamares config overrides AppData QString screenshotPath = CalamaresUtils::getString( item_map, "screenshot" ); if ( screenshotPath.isEmpty() ) { screenshotPath = getScreenshotPath( componentNode ); } QVariantMap map = getNameAndSummary( componentNode ); map.insert( "id", id ); map.insert( "screenshot", screenshotPath ); return PackageItem( map ); } return PackageItem(); } calamares-3.2.20/src/modules/packagechooser/ItemAppData.h000066400000000000000000000026101362604102500232430ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef ITEMAPPDATA_H #define ITEMAPPDATA_H #include "PackageModel.h" /** @brief Loads an AppData XML file and returns a PackageItem * * The @p map must have a key *appdata*. That is used as the * primary source of information, but keys *id* and *screenshotPath* * may be used to override parts of the AppData -- so that the * ID is under the control of Calamares, and the screenshot can be * forced to a local path available on the installation medium. * * Requires XML support in libcalamares, if not present will * return invalid PackageItems. */ PackageItem fromAppData( const QVariantMap& map ); #endif calamares-3.2.20/src/modules/packagechooser/ItemAppStream.cpp000066400000000000000000000113061362604102500241620ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ /** @brief Loading items from AppData XML files. * * Only used if QtXML is found, implements PackageItem::fromAppData(). */ #include "PackageModel.h" #include "locale/LabelModel.h" #include "utils/Logger.h" #include "utils/Variant.h" #include #include #include /// @brief Return number of pixels in a size, for < ordering purposes static inline quint64 sizeOrder( const QSize& size ) { return size.width() * size.height(); } /// @brief Sets a screenshot in @p map from @p screenshot, if a usable one is found static void setScreenshot( QVariantMap& map, const AppStream::Screenshot& screenshot ) { if ( screenshot.images().count() < 1 ) { return; } // Pick the smallest QUrl url; quint64 size = sizeOrder( screenshot.images().first().size() ); for ( const auto& img : screenshot.images() ) { if ( sizeOrder( img.size() ) <= size ) { url = img.url(); } } if ( url.isValid() ) { map.insert( "screenshot", url.toString() ); } } /// @brief Interpret an AppStream Component static PackageItem fromComponent( AppStream::Component& component ) { QVariantMap map; map.insert( "id", component.id() ); map.insert( "package", component.packageNames().join( "," ) ); // Assume that the pool has loaded "ALL" locales, but it might be set // to any of them; get the en_US locale as "untranslated" and then // loop over Calamares locales (since there is no way to query for // available locales in the Component) to see if there's anything else. component.setActiveLocale( QStringLiteral( "en_US" ) ); QString en_name = component.name(); QString en_description = component.description(); map.insert( "name", en_name ); map.insert( "description", en_description ); for ( const QString& locale : CalamaresUtils::Locale::availableTranslations()->localeIds() ) { component.setActiveLocale( locale ); QString name = component.name(); if ( name != en_name ) { map.insert( QStringLiteral( "name[%1]" ).arg( locale ), name ); } QString description = component.description(); if ( description != en_description ) { map.insert( QStringLiteral( "description[%1]" ).arg( locale ), description ); } } auto screenshots = component.screenshots(); if ( screenshots.count() > 0 ) { bool done = false; for ( const auto& s : screenshots ) { if ( s.isDefault() ) { setScreenshot( map, s ); done = true; break; } } if ( !done ) { setScreenshot( map, screenshots.first() ); } } return PackageItem( map ); } PackageItem fromAppStream( AppStream::Pool& pool, const QVariantMap& item_map ) { QString appstreamId = CalamaresUtils::getString( item_map, "appstream" ); if ( appstreamId.isEmpty() ) { cWarning() << "Can't load AppStream without a suitable appstreamId."; return PackageItem(); } cDebug() << "Loading AppStream data for" << appstreamId; auto itemList = pool.componentsById( appstreamId ); if ( itemList.count() < 1 ) { cWarning() << "No AppStream data for" << appstreamId; return PackageItem(); } if ( itemList.count() > 1 ) { cDebug() << "Multiple AppStream data for" << appstreamId << "using first."; } auto r = fromComponent( itemList.first() ); if ( r.isValid() ) { QString id = CalamaresUtils::getString( item_map, "id" ); QString screenshotPath = CalamaresUtils::getString( item_map, "screenshot" ); if ( !id.isEmpty() ) { r.id = id; } if ( !screenshotPath.isEmpty() ) { r.screenshot = screenshotPath; } } return r; } calamares-3.2.20/src/modules/packagechooser/ItemAppStream.h000066400000000000000000000027161362604102500236340ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef ITEMAPPSTREAM_H #define ITEMAPPSTREAM_H #include "PackageModel.h" namespace AppStream { class Pool; } /** @brief Loads an item from AppStream data. * * The @p map must have a key *appstream*. That is used as the * primary source of information from the AppStream cache, but * keys *id* and *screenshotPath* may be used to override parts * of the AppStream data -- so that the ID is under the control * of Calamares, and the screenshot can be forced to a local path * available on the installation medium. * * Requires AppStreamQt, if not present will return invalid * PackageItems. */ PackageItem fromAppStream( AppStream::Pool& pool, const QVariantMap& map ); #endif calamares-3.2.20/src/modules/packagechooser/PackageChooserPage.cpp000066400000000000000000000134451362604102500251300ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "PackageChooserPage.h" #include "ui_page_package.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" #include "utils/Retranslator.h" #include PackageChooserPage::PackageChooserPage( PackageChooserMode mode, QWidget* parent ) : QWidget( parent ) , ui( new Ui::PackageChooserPage ) , m_introduction( QString(), QString(), tr( "Package Selection" ), tr( "Please pick a product from the list. The selected product will be installed." ) ) { m_introduction.screenshot = QPixmap( QStringLiteral( ":/images/no-selection.png" ) ); ui->setupUi( this ); CALAMARES_RETRANSLATE( updateLabels(); ) switch ( mode ) { case PackageChooserMode::Optional: FALLTHRU; case PackageChooserMode::Required: ui->products->setSelectionMode( QAbstractItemView::SingleSelection ); break; case PackageChooserMode::OptionalMultiple: FALLTHRU; case PackageChooserMode::RequiredMultiple: ui->products->setSelectionMode( QAbstractItemView::ExtendedSelection ); } ui->products->setMinimumWidth( 10 * CalamaresUtils::defaultFontHeight() ); } /** @brief size the given @p pixmap to @p size * * This is "smart" in the sense that it tries to keep the image un-scaled * (if it's just a little too big) and otherwise scales as needed. * * Returns a copy if any modifications are done. */ static QPixmap smartClip( const QPixmap& pixmap, QSize size ) { auto pixSize = pixmap.size(); if ( ( pixSize.width() <= size.width() ) && ( pixSize.height() <= size.height() ) ) { return pixmap; } // only slightly bigger? Trim the edges constexpr int margin = 16; if ( ( pixSize.width() <= size.width() + margin ) && ( pixSize.height() <= size.height() + margin ) ) { int x = pixSize.width() <= size.width() ? 0 : ( pixSize.width() - size.width() / 2 ); int new_width = pixSize.width() <= size.width() ? pixSize.width() : size.width(); int y = pixSize.height() <= size.height() ? 0 : ( pixSize.height() - size.height() / 2 ); int new_height = pixSize.height() <= size.height() ? pixSize.height() : size.height(); return pixmap.copy( x, y, new_width, new_height ); } return pixmap.scaled( size, Qt::KeepAspectRatio ); } void PackageChooserPage::currentChanged( const QModelIndex& index ) { if ( !index.isValid() || !ui->products->selectionModel()->hasSelection() ) { ui->productName->setText( m_introduction.name.get() ); ui->productScreenshot->setPixmap( m_introduction.screenshot ); ui->productDescription->setText( m_introduction.description.get() ); } else { const auto* model = ui->products->model(); ui->productName->setText( model->data( index, PackageListModel::NameRole ).toString() ); ui->productDescription->setText( model->data( index, PackageListModel::DescriptionRole ).toString() ); QPixmap currentScreenshot = model->data( index, PackageListModel::ScreenshotRole ).value< QPixmap >(); if ( currentScreenshot.isNull() ) { ui->productScreenshot->setPixmap( m_introduction.screenshot ); } else { ui->productScreenshot->setPixmap( smartClip( currentScreenshot, ui->productScreenshot->size() ) ); } } } void PackageChooserPage::updateLabels() { if ( ui && ui->products && ui->products->selectionModel() ) { currentChanged( ui->products->selectionModel()->currentIndex() ); } else { currentChanged( QModelIndex() ); } emit selectionChanged(); } void PackageChooserPage::setModel( QAbstractItemModel* model ) { ui->products->setModel( model ); currentChanged( QModelIndex() ); connect( ui->products->selectionModel(), &QItemSelectionModel::selectionChanged, this, &PackageChooserPage::updateLabels ); } void PackageChooserPage::setSelection( const QModelIndex& index ) { if ( index.isValid() ) { ui->products->selectionModel()->select( index, QItemSelectionModel::Select ); currentChanged( index ); } } bool PackageChooserPage::hasSelection() const { return ui && ui->products && ui->products->selectionModel() && ui->products->selectionModel()->hasSelection(); } QStringList PackageChooserPage::selectedPackageIds() const { if ( !( ui && ui->products && ui->products->selectionModel() ) ) { return QStringList(); } const auto* model = ui->products->model(); QStringList ids; for ( const auto& index : ui->products->selectionModel()->selectedIndexes() ) { QString pid = model->data( index, PackageListModel::IdRole ).toString(); if ( !pid.isEmpty() ) { ids.append( pid ); } } return ids; } void PackageChooserPage::setIntroduction( const PackageItem& item ) { m_introduction.name = item.name; m_introduction.description = item.description; m_introduction.screenshot = item.screenshot; } calamares-3.2.20/src/modules/packagechooser/PackageChooserPage.h000066400000000000000000000035571362604102500246000ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef PACKAGECHOOSERPAGE_H #define PACKAGECHOOSERPAGE_H #include "PackageModel.h" #include #include namespace Ui { class PackageChooserPage; } class PackageChooserPage : public QWidget { Q_OBJECT public: explicit PackageChooserPage( PackageChooserMode mode, QWidget* parent = nullptr ); /// @brief Sets the data model for the listview void setModel( QAbstractItemModel* model ); /// @brief Sets the introductory (no-package-selected) texts void setIntroduction( const PackageItem& item ); /// @brief Selects a listview item void setSelection( const QModelIndex& index ); /// @brief Is anything selected? bool hasSelection() const; /** @brief Get the list of selected ids * * This list may be empty (if none is selected). */ QStringList selectedPackageIds() const; public slots: void currentChanged( const QModelIndex& index ); void updateLabels(); signals: void selectionChanged(); private: Ui::PackageChooserPage* ui; PackageItem m_introduction; }; #endif // PACKAGECHOOSERPAGE_H calamares-3.2.20/src/modules/packagechooser/PackageChooserViewStep.cpp000066400000000000000000000167611362604102500260260ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "PackageChooserViewStep.h" #ifdef HAVE_XML #include "ItemAppData.h" #endif #ifdef HAVE_APPSTREAM #include "ItemAppStream.h" #include #include #endif #include "PackageChooserPage.h" #include "PackageModel.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "locale/TranslatableConfiguration.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include "utils/Variant.h" #include #include CALAMARES_PLUGIN_FACTORY_DEFINITION( PackageChooserViewStepFactory, registerPlugin< PackageChooserViewStep >(); ) PackageChooserViewStep::PackageChooserViewStep( QObject* parent ) : Calamares::ViewStep( parent ) , m_widget( nullptr ) , m_model( nullptr ) , m_mode( PackageChooserMode::Required ) , m_stepName( nullptr ) { emit nextStatusChanged( false ); } PackageChooserViewStep::~PackageChooserViewStep() { if ( m_widget && m_widget->parent() == nullptr ) { m_widget->deleteLater(); } delete m_model; delete m_stepName; } QString PackageChooserViewStep::prettyName() const { return m_stepName ? m_stepName->get() : tr( "Packages" ); } QWidget* PackageChooserViewStep::widget() { if ( !m_widget ) { m_widget = new PackageChooserPage( m_mode, nullptr ); connect( m_widget, &PackageChooserPage::selectionChanged, [=]() { emit nextStatusChanged( this->isNextEnabled() ); } ); if ( m_model ) { hookupModel(); } else { cWarning() << "PackageChooser Widget created before model."; } } return m_widget; } bool PackageChooserViewStep::isNextEnabled() const { if ( !m_model ) { return false; } if ( !m_widget ) { // No way to have changed anything return true; } switch ( m_mode ) { case PackageChooserMode::Optional: case PackageChooserMode::OptionalMultiple: // zero or one OR zero or more return true; case PackageChooserMode::Required: case PackageChooserMode::RequiredMultiple: // exactly one OR one or more return m_widget->hasSelection(); } NOTREACHED return true; } bool PackageChooserViewStep::isBackEnabled() const { return true; } bool PackageChooserViewStep::isAtBeginning() const { return true; } bool PackageChooserViewStep::isAtEnd() const { return true; } void PackageChooserViewStep::onActivate() { if ( !m_widget->hasSelection() ) { m_widget->setSelection( m_defaultIdx ); } } void PackageChooserViewStep::onLeave() { QString key = QStringLiteral( "packagechooser_%1" ).arg( m_id ); QString value; if ( m_widget->hasSelection() ) { value = m_widget->selectedPackageIds().join( ',' ); } Calamares::JobQueue::instance()->globalStorage()->insert( key, value ); cDebug() << "PackageChooser" << key << "selected" << value; } Calamares::JobList PackageChooserViewStep::jobs() const { Calamares::JobList l; return l; } void PackageChooserViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { QString mode = CalamaresUtils::getString( configurationMap, "mode" ); bool mode_ok = false; if ( !mode.isEmpty() ) { m_mode = roleNames().find( mode, mode_ok ); } if ( !mode_ok ) { m_mode = PackageChooserMode::Required; } m_id = CalamaresUtils::getString( configurationMap, "id" ); if ( m_id.isEmpty() ) { // Not set, so use the instance id m_id = moduleInstanceKey().id(); } bool labels_ok = false; auto labels = CalamaresUtils::getSubMap( configurationMap, "labels", labels_ok ); if ( labels_ok ) { if ( labels.contains( "step" ) ) { m_stepName = new CalamaresUtils::Locale::TranslatedString( labels, "step" ); } } QString default_item_id = CalamaresUtils::getString( configurationMap, "default" ); m_defaultIdx = QModelIndex(); bool first_time = !m_model; if ( configurationMap.contains( "items" ) ) { fillModel( configurationMap.value( "items" ).toList() ); } if ( first_time && m_widget && m_model ) { hookupModel(); } // find default item if ( first_time && m_model && !default_item_id.isEmpty() ) { for ( int item_n = 0; item_n < m_model->packageCount(); ++item_n ) { QModelIndex item_idx = m_model->index( item_n, 0 ); QVariant item_id = m_model->data( item_idx, PackageListModel::IdRole ); if ( item_id.toString() == default_item_id ) { m_defaultIdx = item_idx; break; } } } } void PackageChooserViewStep::fillModel( const QVariantList& items ) { if ( !m_model ) { m_model = new PackageListModel( nullptr ); } if ( items.isEmpty() ) { cWarning() << "No *items* for PackageChooser module."; return; } #ifdef HAVE_APPSTREAM std::unique_ptr< AppStream::Pool > pool; bool poolOk = false; #endif cDebug() << "Loading PackageChooser model items from config"; int item_index = 0; for ( const auto& item_it : items ) { ++item_index; QVariantMap item_map = item_it.toMap(); if ( item_map.isEmpty() ) { cWarning() << "PackageChooser entry" << item_index << "is not valid."; continue; } if ( item_map.contains( "appdata" ) ) { #ifdef HAVE_XML m_model->addPackage( fromAppData( item_map ) ); #else cWarning() << "Loading AppData XML is not supported."; #endif } else if ( item_map.contains( "appstream" ) ) { #ifdef HAVE_APPSTREAM if ( !pool ) { pool = std::make_unique< AppStream::Pool >(); pool->setLocale( QStringLiteral( "ALL" ) ); poolOk = pool->load(); } if ( pool && poolOk ) { m_model->addPackage( fromAppStream( *pool, item_map ) ); } #else cWarning() << "Loading AppStream data is not supported."; #endif } else { m_model->addPackage( PackageItem( item_map ) ); } } } void PackageChooserViewStep::hookupModel() { if ( !m_model || !m_widget ) { cError() << "Can't hook up model until widget and model both exist."; return; } m_widget->setModel( m_model ); for ( int i = 0; i < m_model->packageCount(); ++i ) { const auto& package = m_model->packageData( i ); if ( package.id.isEmpty() ) { m_widget->setIntroduction( package ); break; } } } calamares-3.2.20/src/modules/packagechooser/PackageChooserViewStep.h000066400000000000000000000042241362604102500254620ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef PACKAGECHOOSERVIEWSTEP_H #define PACKAGECHOOSERVIEWSTEP_H #include "DllMacro.h" #include "locale/TranslatableConfiguration.h" #include "utils/PluginFactory.h" #include "viewpages/ViewStep.h" #include "PackageModel.h" #include #include #include class PackageChooserPage; class PLUGINDLLEXPORT PackageChooserViewStep : public Calamares::ViewStep { Q_OBJECT public: explicit PackageChooserViewStep( QObject* parent = nullptr ); virtual ~PackageChooserViewStep() override; QString prettyName() const override; QWidget* widget() override; bool isNextEnabled() const override; bool isBackEnabled() const override; bool isAtBeginning() const override; bool isAtEnd() const override; void onActivate() override; void onLeave() override; Calamares::JobList jobs() const override; void setConfigurationMap( const QVariantMap& configurationMap ) override; private: void fillModel( const QVariantList& items ); void hookupModel(); PackageChooserPage* m_widget; PackageListModel* m_model; // Configuration PackageChooserMode m_mode; QString m_id; CalamaresUtils::Locale::TranslatedString* m_stepName; // As it appears in the sidebar QModelIndex m_defaultIdx; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( PackageChooserViewStepFactory ) #endif // PACKAGECHOOSERVIEWSTEP_H calamares-3.2.20/src/modules/packagechooser/PackageModel.cpp000066400000000000000000000110611362604102500237610ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "PackageModel.h" #include "utils/Logger.h" #include "utils/Variant.h" const NamedEnumTable< PackageChooserMode >& roleNames() { static const NamedEnumTable< PackageChooserMode > names { { "optional", PackageChooserMode::Optional }, { "required", PackageChooserMode::Required }, { "optionalmultiple", PackageChooserMode::OptionalMultiple }, { "requiredmultiple", PackageChooserMode::RequiredMultiple }, // and a bunch of aliases { "zero-or-one", PackageChooserMode::Optional }, { "radio", PackageChooserMode::Required }, { "one", PackageChooserMode::Required }, { "set", PackageChooserMode::OptionalMultiple }, { "zero-or-more", PackageChooserMode::OptionalMultiple }, { "multiple", PackageChooserMode::RequiredMultiple }, { "one-or-more", PackageChooserMode::RequiredMultiple } }; return names; } PackageItem::PackageItem() {} PackageItem::PackageItem( const QString& a_id, const QString& a_package, const QString& a_name, const QString& a_description ) : id( a_id ) , package( a_package ) , name( a_name ) , description( a_description ) { } PackageItem::PackageItem( const QString& a_id, const QString& a_package, const QString& a_name, const QString& a_description, const QString& screenshotPath ) : id( a_id ) , package( a_package ) , name( a_name ) , description( a_description ) , screenshot( screenshotPath ) { } PackageItem::PackageItem::PackageItem( const QVariantMap& item_map ) : id( CalamaresUtils::getString( item_map, "id" ) ) , package( CalamaresUtils::getString( item_map, "package" ) ) , name( CalamaresUtils::Locale::TranslatedString( item_map, "name" ) ) , description( CalamaresUtils::Locale::TranslatedString( item_map, "description" ) ) , screenshot( CalamaresUtils::getString( item_map, "screenshot" ) ) { if ( name.isEmpty() && id.isEmpty() ) { name = QObject::tr( "No product" ); } else if ( name.isEmpty() ) { cWarning() << "PackageChooser item" << id << "has an empty name."; } if ( description.isEmpty() ) { description = QObject::tr( "No description provided." ); } } PackageListModel::PackageListModel( QObject* parent ) : QAbstractListModel( parent ) { } PackageListModel::PackageListModel( PackageList&& items, QObject* parent ) : QAbstractListModel( parent ) , m_packages( std::move( items ) ) { } PackageListModel::~PackageListModel() {} void PackageListModel::addPackage( PackageItem&& p ) { // Only add valid packages if ( p.isValid() ) { int c = m_packages.count(); beginInsertRows( QModelIndex(), c, c ); m_packages.append( p ); endInsertRows(); } } int PackageListModel::rowCount( const QModelIndex& index ) const { // For lists, valid indexes have zero children; only the root index has them return index.isValid() ? 0 : m_packages.count(); } QVariant PackageListModel::data( const QModelIndex& index, int role ) const { if ( !index.isValid() ) { return QVariant(); } int row = index.row(); if ( row >= m_packages.count() || row < 0 ) { return QVariant(); } if ( role == Qt::DisplayRole /* Also PackageNameRole */ ) { return m_packages[ row ].name.get(); } else if ( role == DescriptionRole ) { return m_packages[ row ].description.get(); } else if ( role == ScreenshotRole ) { return m_packages[ row ].screenshot; } else if ( role == IdRole ) { return m_packages[ row ].id; } return QVariant(); } calamares-3.2.20/src/modules/packagechooser/PackageModel.h000066400000000000000000000077061362604102500234410ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef PACKAGEMODEL_H #define PACKAGEMODEL_H #include "locale/TranslatableConfiguration.h" #include "utils/NamedEnum.h" #include #include #include #include enum class PackageChooserMode { Optional, // zero or one Required, // exactly one OptionalMultiple, // zero or more RequiredMultiple // one or more }; const NamedEnumTable< PackageChooserMode >& roleNames(); struct PackageItem { QString id; // FIXME: unused QString package; CalamaresUtils::Locale::TranslatedString name; CalamaresUtils::Locale::TranslatedString description; QPixmap screenshot; /// @brief Create blank PackageItem PackageItem(); /** @brief Creates a PackageItem from given strings * * This constructor sets all the text members, * but leaves the screenshot blank. Set that separately. */ PackageItem( const QString& id, const QString& package, const QString& name, const QString& description ); /** @brief Creates a PackageItem from given strings. * * Set all the text members and load the screenshot from the given * @p screenshotPath, which may be a QRC path (:/path/in/qrc) or * a filesystem path, whatever QPixmap understands. */ PackageItem( const QString& id, const QString& package, const QString& name, const QString& description, const QString& screenshotPath ); /** @brief Creates a PackageItem from a QVariantMap * * This is intended for use when loading PackageItems from a * configuration map. It will look up the various keys in the map * and handle translation strings as well. */ PackageItem( const QVariantMap& map ); /** @brief Is this item valid? * * A valid item has an untranslated name available. */ bool isValid() const { return !name.isEmpty(); } /** @brief Is this a (the) No-Package package? * * There should be at most one No-Package item in a collection * of PackageItems. That one will be used to describe a * "no package" situation. */ bool isNonePackage() const { return id.isEmpty(); } }; using PackageList = QVector< PackageItem >; class PackageListModel : public QAbstractListModel { public: PackageListModel( PackageList&& items, QObject* parent ); PackageListModel( QObject* parent ); virtual ~PackageListModel() override; /** @brief Add a package @p to the model * * Only valid packages are added -- that is, they must have a name. */ void addPackage( PackageItem&& p ); int rowCount( const QModelIndex& index ) const override; QVariant data( const QModelIndex& index, int role ) const override; /// @brief Direct (non-abstract) access to package data const PackageItem& packageData( int r ) const { return m_packages[ r ]; } /// @brief Direct (non-abstract) count of package data int packageCount() const { return m_packages.count(); } enum Roles : int { NameRole = Qt::DisplayRole, DescriptionRole = Qt::UserRole, ScreenshotRole, IdRole }; private: PackageList m_packages; }; #endif calamares-3.2.20/src/modules/packagechooser/Tests.cpp000066400000000000000000000057561362604102500225650ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "Tests.h" #ifdef HAVE_XML #include "ItemAppData.h" #endif #ifdef HAVE_APPSTREAM #include "ItemAppStream.h" #endif #include "PackageModel.h" #include "utils/Logger.h" #include QTEST_MAIN( PackageChooserTests ) PackageChooserTests::PackageChooserTests() {} PackageChooserTests::~PackageChooserTests() {} void PackageChooserTests::initTestCase() { Logger::setupLogLevel( Logger::LOGDEBUG ); } void PackageChooserTests::testBogus() { QVERIFY( true ); } void PackageChooserTests::testAppData() { // Path from the build-dir and from the running-the-test varies, // for in-source build, for build/, and for tests-in-build/, // so look in multiple places. QString appdataName( "io.calamares.calamares.appdata.xml" ); for ( const auto& prefix : QStringList { "", "../", "../../../", "../../../../" } ) { if ( QFile::exists( prefix + appdataName ) ) { appdataName = prefix + appdataName; break; } } QVERIFY( QFile::exists( appdataName ) ); QVariantMap m; m.insert( "appdata", appdataName ); #ifdef HAVE_XML PackageItem p1 = fromAppData( m ); QVERIFY( p1.isValid() ); QCOMPARE( p1.id, QStringLiteral( "io.calamares.calamares.desktop" ) ); QCOMPARE( p1.name.get(), QStringLiteral( "Calamares" ) ); // The entry has precedence QCOMPARE( p1.description.get(), QStringLiteral( "Calamares is an installer program for Linux distributions." ) ); // .. but en_GB doesn't have an entry in description, so uses QCOMPARE( p1.description.get( QLocale( "en_GB" ) ), QStringLiteral( "Calamares Linux Installer" ) ); QCOMPARE( p1.description.get( QLocale( "nl" ) ), QStringLiteral( "Calamares is een installatieprogramma voor Linux distributies." ) ); QVERIFY( p1.screenshot.isNull() ); m.insert( "id", "calamares" ); m.insert( "screenshot", ":/images/calamares.png" ); PackageItem p2 = fromAppData( m ); QVERIFY( p2.isValid() ); QCOMPARE( p2.id, QStringLiteral( "calamares" ) ); QCOMPARE( p2.description.get( QLocale( "nl" ) ), QStringLiteral( "Calamares is een installatieprogramma voor Linux distributies." ) ); QVERIFY( !p2.screenshot.isNull() ); #endif } calamares-3.2.20/src/modules/packagechooser/Tests.h000066400000000000000000000021221362604102500222120ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef PACKAGECHOOSERTESTS_H #define PACKAGECHOOSERTESTS_H #include class PackageChooserTests : public QObject { Q_OBJECT public: PackageChooserTests(); ~PackageChooserTests() override; private Q_SLOTS: void initTestCase(); void testBogus(); void testAppData(); }; #endif calamares-3.2.20/src/modules/packagechooser/images/000077500000000000000000000000001362604102500222075ustar00rootroot00000000000000calamares-3.2.20/src/modules/packagechooser/images/calamares.png000066400000000000000000000201711362604102500246460ustar00rootroot00000000000000‰PNG  IHDR\r¨fsBIT|dˆ pHYsX•X•Ùm7ÓtEXtSoftwarewww.inkscape.org›î<öIDATxœíy°%U}Ç¿§»ï½oófcö•e`†d ¥¢(Á}IÔ²RV“*£–eEC”XFMR©TÊŠ•ABÀ2„RRj©,ƒÂà 0ÌÀ0ÀÀlo7ïݵoŸüÑ}ºÏ½·û¾»ôÞ¿õxsÏí{úÜÓçûíßYÞi†xö#¸qü[ç"ˆ4Àn¿è>|/èó(AŸ€ ˆøB@† € 2 Ad2‚È0d‘aÈ"ÃD†! ˆ C@† € 2 Ad2‚È0d‘aÈ"ÃD†! ˆ C@† € 2 Ad2‚È0d‘aÈ"ÃD†! ˆ C@† € 2 Ad2‚È0d‘aÈ"ÃD†! ˆ C@† € 2 Ad2‚È0ZÔ ‚ghÇu»þ]}fæ‘ zðÑ€JDÄ2€ PX>&Þþ']}fîå§qú¹Ç1ž«T*"P€ðdÁP0¯«Qƒ2Â`A'H3d„7Üüeš5•4BW•èˆ]%H!tE‰Ž`ÉR]MÂ.ý›I©‹ÔHt% WXÃoÙugÈR]EÂGüMé X¬“ ¤º‚DÜÅ/ H>tõˆŽ‘Å/ H6t刎p?`Í $ºjÄ’´¿è$,Ö, $ºb„;–²;¿`L qÐÕ"<éFü""dAWŠèŠvâÌ7u2¤@W‰è˜NÄ/ Ht…ˆŽèFüâ êĺ:Ä’ô"~ñÆba±NÍ,®Ð•!ÚÒø :™@\¡«BxÀ}¿H^ÔÈb]¿Ä/(’ ĺDÇô#~™@¼ +At„âé%a‘fb]bIü¿ X'ˆtˆ¶!~™@ôPíî0K´»™‰>ˆ0ÿÖ d0,ê^GAC@xãy×o|“5¿åõ99¹ …L "ȈÎh#~¯ÃÝÞc¬Qü2h  –¦ñ»¦KÂwëU”êdaC@´'ñ»o½A&.d„;¡‹_Pª+(ÖÉ€ €pÅhsxâuš-êñ„Kÿ„%~ñFÉŠ†5ω>¡ dògmSsQcIŒ&Í-~¦æ0¸f[ËeZ'(d!RX>6ÿíÃØðù‚å Q§cÂÿùŸ¿»¿ù†7ïjɧl02€(lÚ…ÍwüÚ²5¹äfløÜ}‰0°Ä¿âê÷!7¾ ÝùsŒl¿´eGâRL ÈB °i6ågPGWÚiI00Å/ÐF&°ëއ0²íÒ–üËd¾C0nâ$Áš Rümd6™€È‡LÀ_ȤøI20Ä/M ù¼dþAˆ_SüaÃ.ÝJÙÓ„Dï@7âÄÙ¢¿ÀÍäî™@øL/âÄÑ¢¿@6·î™@ïøH?âÄÉâ ~AÛî€A&Ð+d>2rñ»ú¿Ï%7cýgïŠtÅ Ÿâßñù»ú¿@™À²Ýos-™@oøÈôÿ~“÷|Ù—¼F¯ü@ìV özç_yõû}9ÿÑ{¿Ž7ô–òÊd]Cà3S|Ë7ˆUw ‚°_æè½_ÇÑ{¿ÞRžæÓW †2™@Ç@ÚL )â·gÈ:† ÒbI¿H,×É: @’n‰ÓfƒdKC0I5¶âoÞÕ1 å:ÈÚ@I5Oñ7§ÇNüU®›ƒƒD+d!‘4p}PbÄß ™€;d!’4Ú‡ØI¿½³™@ d!“$H“ødD@L *ñËk.B¿âTÈlÈ"" &…øÝŠ`A¸–©;ñ‹äJ¨’ DI¬MÀUüZ$â÷.Sk!Ý"û½¦×e22€¨‰µ H˜âÿAìÅïFCÑDÖ#2€wSübßOñ{¥ËÝ¬Ž Ä„¸š@ØâÂ3ÕŒš@Œˆ› dEü"Ÿšan6š%ÈbF\L€iÙ¿ Æ³eôtà2õÀ·€ÜV}ø«}ç5rÉÍ<ûÊ®?·é¾‚ÜXÿۛɿ ÆÔ‚êñ¡A@L™ºÿk¾E½ìS˜Uñ‹ãuÎP©{|0EÄ?»QTñ ²`d1'©&tñ Ònd i&ñ Òld !)&6ñ tÎP5:80a$ˆ¸›@ZÅ/¨é32€„WH»øE>i‹ÈHÜL +â¤ÉÈJ\L +ñ»ì&œ4ñ j)12€µ t-þ’)~ñ׊:g¨%Üh)p™zà[€UûF¨çíOü½íâÓqzâ/jœàÈ%ôVšÐb2aG$~H_ƒ£f ±‘@JËHüh¿È_O¨ ¤ˆ M€ÄWñ ’h42‚â÷mñ tË’2&bÝàw$°”øHür>uîAÜ!H)~™@'âoHh9¢‘n¶í^2=†âè 12€Ó¯ !~7"—÷\Óc,~AL€ÆRN¯c^âëÒÞvŸñ<>@ñ‹ãë€h1½ÕÆ´X„Ÿt $Müí"/¿ Îcd¡SH¢ø»Ák "(ñ êÜŠb@†Xʲ ~Ï÷Ä?¿@7âg41¼Æ²,~IüAAèP»ýA@iŽ2/þ†?Sî^üÝŽAÄ)  £ˆ‡”ëŒÄ/½«<¢ŽÈ2ÌÔý_C¹ÎÀšZ7‰?œòÄÁ¨ qTŽ!ÕQ‰?ÜòÜü‰ 2y¥ÑHüá”G$×#42€0ƒÄRyš“£22Â&¯ÃªµdÄXy¼ò‰¢;@@4S€µyÝ*‰?hñ‹ô°M€ €hAS€ÑœÆ&Èm’ ~îúÂü>q¿Àà@Í»˜¾B@¸¢2`TãPššaRÄÏäÒ?â.~¯ƒ!}’ž( ‘L€Äß}yÚžwé|¬Q2¢-¼«ø{˧‹òjdÄ’( v1oùt[ë#h• €èašèxGâoŸOâ—gú®W2¢c€!ÉÜÞwM'ñ÷T´NÁ°6ÙôѶ (­é®Ç“ø{*OeújdD×0Cªó@Lû||,ÜðÅȈžT9ò-ˆÄ¿Dzïâ—íÛȈ¾P9òªóÚkÓM€ÄßGyÚ-îËhC¢o Š)K¯cöÒBIü6^â—ÓY›ãÚB@øBAáj¼±)û%4Gé]C]Â7 ª¹¯€À/¡5ä•ñ3¼øŠŸÉ+GÕèNjqÙ¶»“¼B¸ó{á»)P@øNNã·m»—Ê««ô‹ €s¡Ge‰H )y´Ë+©â( DSÌiB/’"þvD’Å£2Óš‘$ñ{¥»½çç:Ð,‘T (Ž ¤AüÝæÓm™Tï·|  BA±L y‹±R(þnËÓÅ_ö  3g<Û7‰ß ÷ÝY}€ €a- ÄïE ›„“¡£0  r(¢m'lÛî°Êƒ€ÅÁ`.Ví6žî¥½Ý–Gñ^ ì+dDd0yP‰¿Ÿ|ú €ˆÇ<Þ'ñ 9¢;ÐïSˆ<ó'ñ{B@Ć‚ ¨bŸA(±"¯ eÇa‰ßȈؑSZÇHüÁ@@Ä’œ‚%ŸB䉿s؉ɩŸE¯æy¥8øyˆÔ¡×uÔªµV­xüQó•ç|»â¾s óø€ÒÑÖEr>î÷X¯üí÷ CEhùjW'ë6;w:”Ñ+º®C×kök/‘{©ÜKlqKÚˆˆ=š¦1½Vó>(fbN‚ø ‚ªªÐr9÷7c&椈  „ªªÈåó‰1s’Ä CQÓÚìœ7‘ÇUü ÕôzÔe ˆîaJÃÀ ô†ûá$~W´™Ù¹¨Ë@=Á9‡®ëàÜúk€ř6ñ€žŒš¦B×u+¥µ-›"ì<Ýû\ÝåÓmþQ¡Å¿ˆÑÆ jêõº ˜ÉæÝ·¹}{¥·?…ûîݦÇ-1%%TEµM€1æªp¯ô¶yw™W/çˆê©@tš#çý^B~´|Æ+½—sÄê©BQ[M Û¼—HšôM¨ @¤ŽNº^¤=äo†©DUUšæë'Ù¾¢ Šª ^ïl¡›Þ»÷ë»IO©¦“H ‹w~©Ga nxÏd¨Ïß Í™€) À9¸aH‰é]àÓ)´€È ŒÁ|æ–aX/Ò·´·[¨ @d 0Å—î@ .‘=Ä ¥1ì—¡.‘IÄ@¾½X(Ca¿ uˆÌÂÀÌ;|Ý´A]‚h2´‡ý2´ˆ à,îIÓ"ŸNˆ~ `q8ü8Ø«OŸzlæ5 Zô 0¸ šÆV›.ß|°q7ˆ¶ÌIdê0pd/ØkOS¯ ³@i¨ë@~X¶|ù`ãÅÀÖ«€uD]âÐ1µß»t]ÇÉ'pìÍ7pâÄq‹ETÊ”JEhš†|¾€ññq,›˜ÀÚuë±aãF úVþ^`Ï<ÿbøÀ9Ø¡_í½8¼0ºØ˜t`üâ÷ƒ_ñq`åÖàʘªE°g{ònàä¡®>ÊWl.ùø ŒTÀt07;‹çö?‹—DµZéøsŒ)ظi3v^x!6nÚIôº°#O€=ô àäÁ>3bÀ®[`¼ëKÀð  —¸öÛûÀ~þ@étYF€ko¿öV@Ë/ý ±¸¸ˆ_ïy ¯~Éu ±V¬\…k¯»k×­÷©tžÔJ`?¹lßýÍw` õw|ìòø›oR™~ʾ}Úß|Wn…þÁoƒ­Û™¹~²/x¿ÞóXWwü¥`ŒaÇù;ñ–k¯CÎë)H>Þ~î@ð0÷&”»o›<Ø)Ê—|¹÷~`j`çˆ;ìÈo Üû—@y>ü¹šÃÜ ŸÃèõ”YàÜÀžGÅ ÏïìËWà]7ß‚ÑÑÑÀÎ!ÜØÔa°ÿøØ™SAžPÛþ{P>ñ¯€’½gž²ý?6ïü†¾ôÁ}ˆaþ-ŸÁÐ;>›90 ?ý¿Ÿàõ×^ ü\ÃÃ#øý÷¼Ë&&=O°Ó€ó'Àîº-ñ@îð#à÷}è³?–4Øk{¡<ðåàÅœcìñï¢øËï®Á9ÇÿüE(â€ÅÅüøÁpæÌ™@Ï£Þþ§vG 9ëUhß¿lò•@²÷B™zºa€m»2ÔóF›zê~ ¨–B=oáè^Ì-ßÂY[B=oTìÛ÷ö?ûL¨ç¬Öª8yâ8Îݱ#°hK‚øQ~þOÀ±)ôRä÷|úëÏò½bõcPþç¯r°w WŒ:ƺ³ÇŽF_ÿLMNbßÞ½‘œûÔÉSØûÄoË?˜.À©CPž¼+¬;¨Cyà˨UÊÑ•!ØS÷€½áóhhÅIäû.æfg#+CÐpnàÑ_ý †¼‘HÈìæLOM’·„±(?ûNw‹{ ?ý Šß½^úÌOµõÿâkõÂø‹bñøK˜›‹¾Nø9tð &'ÃÃòÂ0 <ùäoù~ 8‡Ÿ?ìØóP^~,Ô òbtÿý8uò¤¹3¬Ïß3êåé6Ý×FûïÇÂü<ÎÌŸŽ¼^üüá†ýÏDaɼñú똞šôý;ú>_¦ø½Ð§ò³G0øâC8=s&–M@QÒ3m¥<ñý¨‹`3røxùÜcvn££cŽºH¾033™™™¨‹àœãà¸æºë}Í×ß?æu°ò3ǾYõè?D]„Ô£ÔŠ8õðam Àòy ¹-ö›Ã/¿„«¯½Î×_Ù±`}®='’É6œ²7Ú¬ÖjÐõÖ$dŒr¹Œ™i}PŽîóµpDrX[=ÀyVN¥R%€Çû;àk`ꈟ¹ b¸26hL8GµZhZö–fÅìì,üÔ¬¿]€ÓÇüÌŽHŠ¡c„—lñ‹]7©;à/‹ ¾æ§ûè'ÕEÿò"G:œ‡npŒÕjŒ™Ïé#ú£Z­ÀOÍúÛˆxñ-*¯ÖT+‡õ˜~P­VQ( (´ e?†ß.rÑîoFDKU1§þšÅ/¨T«‘.©M~oâësøÐrÿ2#’c(¡Î›Äoµ/Ó€j¥Š|¡%c{ øÅÀÀ üÔ¬¯»ó[|Ë‹Håü8*ȹÞù9œmppÔªäryêôÀ²eËà§f}0ÖžïcnD’˜ÎŸÌ{SeÌ·2Ãepsv —Ë‘ tÉò•+ã;Pßx™9LdŽ×Õµïüv‚$~ù˜Z­Fc] ( ÎZ³Ö×<ý}6`aÆ–« ùµ™öGiý娞Àé›Ú0³_*·ZkÛ9Rãü£1'ÑÏeâÑÓ'`ÞÇ»—¦+Ôç4žÙ WãlÍ|~À³ÆÌ bVE0Æì*…Åvv`aá Þ8z4êbج[¿ù\Þß1]ïA!&Àóغñ+0òCVÃcö5cD#µÓ˜Ùpá4Z‘ûîå4bóîÆ­|Ä8»œÖøØ)9­Wò´§ïï+¿(¯¹ç½åíÄwdv}Ü®g»ŽÍ#!ªUa ††‡cgÕj÷Ýs·½¢1j¶Ÿ}.üÖ«ï5^¿à&ãþ†)½rfÇÍ©?Ô®údlº[ó»Íg2ô"~óÁœ¥R)vÝ|>sÏÛu1Ã##زm›ïùú¿' Ó _óiß Ú-Fnó~ÐlxÜ„bÜ£†x ƒ0ó8p«[G±†ãìî€Á!§Ú•ã¬1UL‹IyøQÏ|ùÔwÜFU¶¥²zJ믴¾³ëÛõ5hÕ±]?°ÓaýæG¹T†Q7üm}þ\°sWhéhÇÅ—\…)¾?…Ãÿÿj»?cÝΫ¨‘Ù+>…úðJ€½vŠq³KÊÌrŠN8¿aÀnVº}œý9€sÃÊGNçp~Ägå<ü¬çÊ_‚x„'LÁô5(Ö]ªGQÏ"M¾ õØuip•J7h•½ý742ŒK/¿"ÜzmbÕêÕ8ûÜsù~ÁÄLAå–;#[X^³‹;ßÛ>ìa*Šåv藍)¼÷ûÅg‚ û›á#+QyÛ_ùžo§Ì]üqÔVϰ¿©ë‘æRg¬.G¥RE¿ÏÚó“ìĪի#9·¦i¸î†·¸-x@+¶¢òî¯ºÌ ‹>ºS7þ Dï&­â·¿ïî÷£vùÇËߋ҆Ëqú²OÂOñ‹YÎ T«ñ1ÆÞzã;122òyk¯¿ãããC½õ¶ÏÜTæÆªsÀ ÃÐBš0 £8qówP]c6<Þ½ø™s`ìÅ/¨o½Êä!(Ó¯~.¨¬:§nú;p­ €t'þÖÁU˜}©º¸ÁÁ ‰‘Ëå°nÃ9ü²¹Él\yõ58'àAHõÓ·Ý~G'0Ö_cpê+{½Œú蜼ùï¡Olv¿hhðIüöP`äâåÕÏ»¬8õD°c)¯Û“7Ý ^v¿S—ýˆß®;fŽ·¨j>¸†«¯¹;.~Mýt€€ ºz¦7bøø>(,^)Ÿu!N¾û›¨­ÍžøLAmÛuX(×0tr?|ÝçÃé ?ˆé¾ž \üöt«E\Ö bëöí˜?ÐÔÐR.~ Ã0°pè ,ßóÏœ:èKžµñ ˜¾úÏQÚp©ó½¹S`Šßz­(JlL€µM÷ øÝo÷¢Zë¡ö³ÏÁåW\…ÁðÏC3À4S§&Q˜<€Ïý7FÞÜ ±4¤ê…q,œ{Nïúêƒ L².~a˜™žDáÅŸbùÁ10ýROùÔF×áôEÅÂ9ïWµÈÄ/×kœLŠÅ"<¿/:ˆJ¢c`ظi3ví¾+W­  „Kœÿñ½ûBjÕk5LNM¨È•¦0öê#>¶“/B©{;i}hJk.BqýeXÜú{€V°‰¿Î9f¦gP®”00}c¯>†¡SÏc`æ0À½WÜUÇ7¢´îb,n¹•5Z•(‰:BñËÇÆº®ãµWà7Žâä‰ã(‹žÇjª†U«Wc݆ غu;†Cž]a{ž ×Ó¦¦¦Pç†Ùh8  †üÂIäæA­•ÁêUƒc¨ÆQ^‰ÚèYfwMƒDh#~Kø}UëóNëk¿Ó¸“)~ç³33(UÊö¸ˆª‘;sjå4´Ò< ðÜ ôáU¨Žo€‘±DkæÁ3µê%~}-9ãÒ(~»ºR ~7P*Q©”Q.—¡©*´\ccã‹Í÷ˆÄ@×uLMM¨s0Æ­†&™$`«Q‘ø{ƒsŽÙ¹YTJe;Z‚UÏN=A|IÆðuG ®N¬©X¹r%¦§§ÁºÙÐ8`62!hn‰ŸKâÄ’\fŸ¶QH!> "LCj°"7¤™I†“Î%ñKiŒ5+ VÜ` X>19Ì¢T.Yâ‡mº¶³ÚFÊ­Ï1pë3©µ~8¸%~§>Å9…§6Ôwòo¼&.iR½&¡ž“Š¿»w‰ªiX¾|9fffÁ­ÝNÅ„7ÝùE«àÒRºóoS¶¦58}yÑ"í; È°ïü¼)ݼa5¥I¿íÏ'€ñ‰ `Ž¡T*ÛQ•³~_Ü­a7C˜07ë‘ÉÊd€óÎæÔ‘}ý`Ö% Õ“ðr3ÑÉ.iR½&­ž“†¿‚ôR-‡å˜apGØV+3Û›¶‹M'Ò­–gÞ$šÂ~qgñc§Y¯¹8'kÈ5Ë… ¤ð6a­r||;r© É᜜K)ìwjÑü—Âþ†ú¦ÐZOö \ªSæ¨òN@ÌzN±˜SÑr9LL,‡¢©öÝÉnPpéóËé€~6÷ùc㤈@ˆ¿©ÏÉš~'¹/:66ŽçÎÏìÚACŸ’ø³ë¸³…Vh­O ¡N]Ó¤zMz='ßwê5§aÙ²e˜›ç†Ó‰4o±ïȨš†¡!»ŸjwC)ì÷\>0 R©Z*§°?ÄnÀRhš†ˆñ@û./âSšç÷\.B¡Ð0@óüéBó}óÈÐT¬0`†¨£Á%cÝW.…ýr³‹4¢•œ¦œ£V«9Ý-¹Q×\ ûëÕsLIT@FQUä ó¶˜yįyÁŠöh O w´\` µš&­pF÷à’&=fê9¶hsgæ£.C_†z]·^‰9LµÒì0Öi”̉ˆ0ëÚz(“îêv‚0;…ê9æhǦ'£.A‘¸A@‚ üƒ € 2 Ad2‚È0d‘aþä‡êok\IEND®B`‚calamares-3.2.20/src/modules/packagechooser/images/no-selection.png000066400000000000000000000032551362604102500253210ustar00rootroot00000000000000‰PNG  IHDR\r¨f pHYsÄÄ•+_IDATxœíÝ¿k]çÇñï‘|eSCII"pêÁŽ)ÞœÅHS íÖ? ÝÒxqmÇÝ›¡.] U#gh›z)dï`ºÈ)$UI ÅÐĦÍcM ÊŬÓÁRHJ çÊ:º§ù¼^‹|AçÞGÃó~¾÷è"Wÿ¿š]\3wúÌÒËÕ¶gÛ¦ž©ª…½^ÐÙ¤ik£šæúûïÞx»ª¶¦¹xª,///Þo]iæëøTKz×>¨ÛGÍýlmmín×kLñüs;›ÿ{'O¹táü©cÏ=xèСÝLÀÇíÇŸ~veõêÍ?ºuüÞxëJU«Ž“À|×:}féG5W/|îÄ‘Õ_ÿêù§ŸzêÀh4²ùa†F£Qó'Ÿ<ðý³/-¾·¾¾¹ùùæáÅ£ÇlÜùäƒ.×Ïu~¥¶=[Uuùâ…S ÞöÃ,,,Ôå‹NUÕ{µ‹ÎؾáWÇž=zpêÕ½ÛÙ›;{µ‹îÀöÝ~ïùa˜¾´7;èÓø†&L ˜@0€`Á‚ &L ˜@0€`Á‚ &L ˜@0€`Á‚ &L ˜@0€`Á‚ &L ˜@0€`Á‚ &L ˜@0€`Á‚ &L ˜@0€`Á‚ &L ˜@0€`Á‚ &L ˜@0€`Á‚ &L ˜@0€`Á‚ &L ØY/€GûÓßîÎz ­iª~øü⬗Á#À€ýñÏÿìí¹W^y¡ªª._ûKo¯Q%Cç-3 X[moÏýÚµwªªjå•«ªêòöã½×ôô¼ì3 XÛßP¿ùñÓÿµ?ôuòïèñ‡à±™ ˜ `Àúœ.½õðäãÕ¿ò˜,&f´þF€7^]ªªªKoÝèí5>3 XŸ÷.þþáÉ¿zné+Éb€`&€ëó7è«Ûwÿ/8ù£™ ˜ `ÀÚo8ù©€XW·oþí„L0`}Šþ'Û›þÍsK>±Ê=f°>?Põðä߯×b˜L¡ÎÿîÆ×þ›,&€!Û¯cÙñËÁLÖ÷¹ÜþÏWò@°ó¿]›õ˜1o ˜ `ÀÜ›£o&f°>ÿc¨2@4À€¹@ßLL ˜@0÷¬Ï? U&ˆf0}3@0À€è› ‚™Ìoè› ‚™ÌùOßLÌ0dFzf€`&€óè› ‚™ÌÇè› ØîÜœõöÈf½AlýÚOg½¾áÜ€`Á‚ &L ˜@0€`Á‚ &L ˜@0€`Á‚ &L ˜@0€`Á‚ &L ˜@0€`Á‚ &L ˜@0€`Á‚ &L ˜@0€`Á‚ &L ˜@0€`Á‚ &L ˜@0€`Á‚ &L ˜@0€`Á‚ &L ˜@0€`Á‚ &L ˜@°i0©ªÇmOk×öæ¤ë5дµQUõñ§ŸÝŸr]À>ØÙ›;{µ‹î@Ó\¯ªZY½zs2é`L&“ZY½z³ª¾Ø«]ÌwýÆ;ŸüãéÅï.m~¾yø½õõÍçNœøöá'ž˜FÍ.Ö ìñxÜÞþ׿ï¿þó_|ðáG·îµêößÿúÎ/«ªÓ[õ©6ïòòòâ½ñÖ•f¾Žïjµ@Úºõ­ƒs¯¯­­ÝízÉnNï¹Óg–^®¶=Û6õLU-ìâ9€½1iÚÚ¨¦¹þþ»7Þ®ª­Y/Ø/ÿÄÿÑ'ÜIEND®B`‚calamares-3.2.20/src/modules/packagechooser/packagechooser.conf000066400000000000000000000123401362604102500245670ustar00rootroot00000000000000# Configuration for the low-density software chooser --- # The packagechooser writes a GlobalStorage value for the choice that # has been made. The key is *packagechooser_*. If *id* is set here, # it is substituted into the key name. If it is not set, the module's # instance name is used; see the *instances* section of `settings.conf`. # If there is just one packagechooser module, and no *id* is set, # resulting GS key is probably *packagechooser_packagechooser*. # # The GS value is a comma-separated list of the IDs of the selected # packages, or an empty string if none is selected. # # id: "" # Software selection mode, to set whether the software packages # can be chosen singly, or multiply. # # Possible modes are "optional", "required" (for zero or one) # or "optionalmultiple", "requiredmultiple" (for zero-or-more # or one-or-more). mode: required # Human-visible strings in this module. These are all optional. # The following translated keys are used: # - *step*, used in the overall progress view (left-hand pane) # # Each key can have a [locale] added to it, which is used as # the translated string for that locale. For the strings # associated with the "no-selection" item, see *items*, below # with the explicit id "". # labels: step: "Packages" step[nl]: "Pakketten" # (Optional) 'id' of pre-selected list-view item. # Pre-selects one of the items below. # default: kde # Items to display in the chooser. In general, this should be a # pretty short list to avoid overwhelming the UI. This is a list # of objects, and the items are displayed in list order. # # Either provide the data for an item in the list (using the keys # below), or use existing AppData XML files, or use AppStream cache # as a source for the data. # # For data provided by the list: the item has an id, which is used in # setting the value of *packagechooser_*. The following fields # are mandatory: # # - *id* : ID for the product. The ID "" is special, and is used for # "no package selected". Only include this if the mode allows # selecting none. # - *package* : Package name for the product. While mandatory, this is # not actually used anywhere. # - *name* : Human-readable name of the product. To provide translations, # add a *[lang]* decoration as part of the key name, # e.g. `name[nl]` for Dutch. # The list of usable languages can be found in # `CMakeLists.txt` or as part of the debug output of Calamares. # - *description* : Human-readable description. These can be translated # as well. # - *screenshot* : Path to a single screenshot of the product. May be # a filesystem path or a QRC path, # e.g. ":/images/no-selection.png". # # Use the empty string "" as ID / key for the "no selection" item if # you want to customize the display of that item as well. # # For data provided by AppData XML: the item has an *appdata* # key which points to an AppData XML file in the local filesystem. # This file is parsed to provide the id (from AppData id), name # (from AppData name), description (from AppData description paragraphs # or the summary entries), and a screenshot (the default screenshot # from AppData). No package is set (but that is unused anyway). # # AppData may contain IDs that are not useful inside Calamares, # and the screenshot URL may be remote -- a remote URL will not # be loaded and the screenshot will be missing. An item with *appdata* # **may** specify an ID or screenshot path, as above. This will override # the settings from AppData. # # For data provided by AppStream cache: the item has an *appstream* # key which matches the AppStream identifier in the cache (e.g. # *org.kde.kwrite.desktop*). Data is retrieved from the AppStream # cache for that ID. The package name is set from the AppStream data. # # An item for AppStream may also contain an *id* and a *screenshot* # key which will override the data from AppStream. items: - id: "" package: "" name: "No Desktop" name[nl]: "Geen desktop" description: "Please pick a desktop environment from the list. If you don't want to install a desktop, that's fine, your system will start up in text-only mode and you can install a desktop environment later." description[nl]: "Kies eventueel een desktop-omgeving uit deze lijst. Als u geen desktop-omgeving wenst te gebruiken, kies er dan geen. In dat geval start het systeem straks op in tekst-modus en kunt u later alsnog een desktop-omgeving installeren." screenshot: ":/images/no-selection.png" - id: kde package: kde name: Plasma Desktop description: "KDE Plasma Desktop, simple by default, a clean work area for real-world usage which intends to stay out of your way. Plasma is powerful when needed, enabling the user to create the workflow that makes them more effective to complete their tasks." screenshot: ":/images/kde.png" - id: gnome package: gnome name: GNOME description: GNU Networked Object Modeling Environment Desktop screenshot: ":/images/gnome.png" - id: calamares appdata: ../io.calamares.calamares.appdata.xml screenshot: ":/images/calamares.png" - id: kate appstream: org.kde.kwrite.desktop calamares-3.2.20/src/modules/packagechooser/packagechooser.qrc000066400000000000000000000002201362604102500244210ustar00rootroot00000000000000 images/no-selection.png images/calamares.png calamares-3.2.20/src/modules/packagechooser/page_package.ui000066400000000000000000000047171362604102500237010ustar00rootroot00000000000000 PackageChooserPage 0 0 400 500 0 1 Form 0 1 Product Name 1 0 TextLabel Qt::AlignCenter 0 2 Long Product Description true true calamares-3.2.20/src/modules/packages/000077500000000000000000000000001362604102500175425ustar00rootroot00000000000000calamares-3.2.20/src/modules/packages/main.py000066400000000000000000000436661362604102500210570ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # === This file is part of Calamares - === # # Copyright 2014, Pier Luigi Fiorini # Copyright 2015-2017, Teo Mrnjavac # Copyright 2016-2017, Kyle Robbertze # Copyright 2017, Alf Gaida # Copyright 2018, Adriaan de Groot # Copyright 2018, Philip Müller # # Calamares 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. # # Calamares 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 Calamares. If not, see . import abc from string import Template import subprocess import libcalamares from libcalamares.utils import check_target_env_call, target_env_call from libcalamares.utils import gettext_path, gettext_languages import gettext _translation = gettext.translation("calamares-python", localedir=gettext_path(), languages=gettext_languages(), fallback=True) _ = _translation.gettext _n = _translation.ngettext total_packages = 0 # For the entire job completed_packages = 0 # Done so far for this job group_packages = 0 # One group of packages from an -install or -remove entry INSTALL = object() REMOVE = object() mode_packages = None # Changes to INSTALL or REMOVE def _change_mode(mode): global mode_packages mode_packages = mode libcalamares.job.setprogress(completed_packages * 1.0 / total_packages) def pretty_name(): if not group_packages: if (total_packages > 0): # Outside the context of an operation s = _("Processing packages (%(count)d / %(total)d)") else: s = _("Install packages.") elif mode_packages is INSTALL: s = _n("Installing one package.", "Installing %(num)d packages.", group_packages) elif mode_packages is REMOVE: s = _n("Removing one package.", "Removing %(num)d packages.", group_packages) else: # No mode, generic description s = _("Install packages.") return s % {"num": group_packages, "count": completed_packages, "total": total_packages} class PackageManager(metaclass=abc.ABCMeta): """ Package manager base class. A subclass implements package management for a specific backend, and must have a class property `backend` with the string identifier for that backend. Subclasses are collected below to populate the list of possible backends. """ backend = None @abc.abstractmethod def install(self, pkgs, from_local=False): """ Install a list of packages (named) into the system. Although this handles lists, in practice it is called with one package at a time. @param pkgs: list[str] list of package names @param from_local: bool if True, then these are local packages (on disk) and the pkgs names are paths. """ pass @abc.abstractmethod def remove(self, pkgs): """ Removes packages. @param pkgs: list[str] list of package names """ pass @abc.abstractmethod def update_db(self): pass def run(self, script): if script != "": check_target_env_call(script.split(" ")) def install_package(self, packagedata, from_local=False): """ Install a package from a single entry in the install list. This can be either a single package name, or an object with pre- and post-scripts. If @p packagedata is a dict, it is assumed to follow the documented structure. @param packagedata: str|dict @param from_local: bool see install.from_local """ if isinstance(packagedata, str): self.install([packagedata], from_local=from_local) else: self.run(packagedata["pre-script"]) self.install([packagedata["package"]], from_local=from_local) self.run(packagedata["post-script"]) def remove_package(self, packagedata): """ Remove a package from a single entry in the remove list. This can be either a single package name, or an object with pre- and post-scripts. If @p packagedata is a dict, it is assumed to follow the documented structure. @param packagedata: str|dict """ if isinstance(packagedata, str): self.remove([packagedata]) else: self.run(packagedata["pre-script"]) self.remove([packagedata["package"]]) self.run(packagedata["post-script"]) class PMPackageKit(PackageManager): backend = "packagekit" def install(self, pkgs, from_local=False): for pkg in pkgs: check_target_env_call(["pkcon", "-py", "install", pkg]) def remove(self, pkgs): for pkg in pkgs: check_target_env_call(["pkcon", "-py", "remove", pkg]) def update_db(self): check_target_env_call(["pkcon", "refresh"]) def update_system(self): check_target_env_call(["pkcon", "-py", "update"]) class PMZypp(PackageManager): backend = "zypp" def install(self, pkgs, from_local=False): check_target_env_call(["zypper", "--non-interactive", "--quiet-install", "install", "--auto-agree-with-licenses", "install"] + pkgs) def remove(self, pkgs): check_target_env_call(["zypper", "--non-interactive", "remove"] + pkgs) def update_db(self): check_target_env_call(["zypper", "--non-interactive", "update"]) def update_system(self): # Doesn't need to update the system explicitly pass class PMYum(PackageManager): backend = "yum" def install(self, pkgs, from_local=False): check_target_env_call(["yum", "-y", "install"] + pkgs) def remove(self, pkgs): check_target_env_call(["yum", "--disablerepo=*", "-C", "-y", "remove"] + pkgs) def update_db(self): # Doesn't need updates pass def update_system(self): check_target_env_call(["yum", "-y", "upgrade"]) class PMDnf(PackageManager): backend = "dnf" def install(self, pkgs, from_local=False): check_target_env_call(["dnf", "-y", "install"] + pkgs) def remove(self, pkgs): # ignore the error code for now because dnf thinks removing a # nonexistent package is an error target_env_call(["dnf", "--disablerepo=*", "-C", "-y", "remove"] + pkgs) def update_db(self): # Doesn't need updates pass def update_system(self): check_target_env_call(["dnf", "-y", "upgrade"]) class PMUrpmi(PackageManager): backend = "urpmi" def install(self, pkgs, from_local=False): check_target_env_call(["urpmi", "--download-all", "--no-suggests", "--no-verify-rpm", "--fastunsafe", "--ignoresize", "--nolock", "--auto"] + pkgs) def remove(self, pkgs): check_target_env_call(["urpme", "--auto"] + pkgs) def update_db(self): check_target_env_call(["urpmi.update", "-a"]) def update_system(self): # Doesn't need to update the system explicitly pass class PMApt(PackageManager): backend = "apt" def install(self, pkgs, from_local=False): check_target_env_call(["apt-get", "-q", "-y", "install"] + pkgs) def remove(self, pkgs): check_target_env_call(["apt-get", "--purge", "-q", "-y", "remove"] + pkgs) check_target_env_call(["apt-get", "--purge", "-q", "-y", "autoremove"]) def update_db(self): check_target_env_call(["apt-get", "update"]) def update_system(self): # Doesn't need to update the system explicitly pass class PMPacman(PackageManager): backend = "pacman" def install(self, pkgs, from_local=False): if from_local: pacman_flags = "-U" else: pacman_flags = "-S" check_target_env_call(["pacman", pacman_flags, "--noconfirm"] + pkgs) def remove(self, pkgs): check_target_env_call(["pacman", "-Rs", "--noconfirm"] + pkgs) def update_db(self): check_target_env_call(["pacman", "-Sy"]) def update_system(self): check_target_env_call(["pacman", "-Su", "--noconfirm"]) class PMPortage(PackageManager): backend = "portage" def install(self, pkgs, from_local=False): check_target_env_call(["emerge", "-v"] + pkgs) def remove(self, pkgs): check_target_env_call(["emerge", "-C"] + pkgs) check_target_env_call(["emerge", "--depclean", "-q"]) def update_db(self): check_target_env_call(["emerge", "--sync"]) def update_system(self): # Doesn't need to update the system explicitly pass class PMEntropy(PackageManager): backend = "entropy" def install(self, pkgs, from_local=False): check_target_env_call(["equo", "i"] + pkgs) def remove(self, pkgs): check_target_env_call(["equo", "rm"] + pkgs) def update_db(self): check_target_env_call(["equo", "update"]) def update_system(self): # Doesn't need to update the system explicitly pass class PMDummy(PackageManager): backend = "dummy" def install(self, pkgs, from_local=False): libcalamares.utils.debug("Installing " + str(pkgs)) def remove(self, pkgs): libcalamares.utils.debug("Removing " + str(pkgs)) def update_db(self): libcalamares.utils.debug("Updating DB") def update_system(self): libcalamares.utils.debug("Updating System") def run(self, script): libcalamares.utils.debug("Running script '" + str(script) + "'") class PMPisi(PackageManager): backend = "pisi" def install(self, pkgs, from_local=False): check_target_env_call(["pisi", "install" "-y"] + pkgs) def remove(self, pkgs): check_target_env_call(["pisi", "remove", "-y"] + pkgs) def update_db(self): check_target_env_call(["pisi", "update-repo"]) def update_system(self): # Doesn't need to update the system explicitly pass class PMApk(PackageManager): backend = "apk" def install(self, pkgs, from_local=False): for pkg in pkgs: check_target_env_call(["apk", "add", pkg]) def remove(self, pkgs): for pkg in pkgs: check_target_env_call(["apk", "del", pkg]) def update_db(self): check_target_env_call(["apk", "update"]) def update_system(self): check_target_env_call(["apk", "upgrade", "--available"]) # Collect all the subclasses of PackageManager defined above, # and index them based on the backend property of each class. backend_managers = [ (c.backend, c) for c in globals().values() if type(c) is abc.ABCMeta and issubclass(c, PackageManager) and c.backend] def subst_locale(plist): """ Returns a locale-aware list of packages, based on @p plist. Package names that contain LOCALE are localized with the BCP47 name of the chosen system locale; if the system locale is 'en' (e.g. English, US) then these localized packages are dropped from the list. @param plist: list[str|dict] Candidate packages to install. @return: list[str|dict] """ locale = libcalamares.globalstorage.value("locale") if not locale: # It is possible to skip the locale-setting entirely. # Then pretend it is "en", so that {LOCALE}-decorated # package names are removed from the list. locale = "en" ret = [] for packagedata in plist: if isinstance(packagedata, str): packagename = packagedata else: packagename = packagedata["package"] # Update packagename: substitute LOCALE, and drop packages # if locale is en and LOCALE is in the package name. if locale != "en": packagename = Template(packagename).safe_substitute(LOCALE=locale) elif 'LOCALE' in packagename: packagename = None if packagename is not None: # Put it back in packagedata if isinstance(packagedata, str): packagedata = packagename else: packagedata["package"] = packagename ret.append(packagedata) return ret def run_operations(pkgman, entry): """ Call package manager with suitable parameters for the given package actions. :param pkgman: PackageManager This is the manager that does the actual work. :param entry: dict Keys are the actions -- e.g. "install" -- to take, and the values are the (list of) packages to apply the action to. The actions are not iterated in a specific order, so it is recommended to use only one action per dictionary. The list of packages may be package names (strings) or package information dictionaries with pre- and post-scripts. """ global group_packages, completed_packages, mode_packages for key in entry.keys(): package_list = subst_locale(entry[key]) group_packages = len(package_list) if key == "install": _change_mode(INSTALL) if all([isinstance(x, str) for x in package_list]): pkgman.install(package_list) else: for package in package_list: pkgman.install_package(package) elif key == "try_install": _change_mode(INSTALL) # we make a separate package manager call for each package so a # single failing package won't stop all of them for package in package_list: try: pkgman.install_package(package) except subprocess.CalledProcessError: warn_text = "Could not install package " warn_text += str(package) libcalamares.utils.warning(warn_text) elif key == "remove": _change_mode(REMOVE) if all([isinstance(x, str) for x in package_list]): pkgman.remove(package_list) else: for package in package_list: pkgman.remove_package(package) elif key == "try_remove": _change_mode(REMOVE) for package in package_list: try: pkgman.remove_package(package) except subprocess.CalledProcessError: warn_text = "Could not remove package " warn_text += str(package) libcalamares.utils.warning(warn_text) elif key == "localInstall": _change_mode(INSTALL) if all([isinstance(x, str) for x in package_list]): pkgman.install(package_list, from_local=True) else: for package in package_list: pkgman.install_package(package, from_local=True) elif key == "source": libcalamares.utils.debug("Package-list from {!s}".format(entry[key])) else: libcalamares.utils.warning("Unknown package-operation key {!s}".format(key)) completed_packages += len(package_list) libcalamares.job.setprogress(completed_packages * 1.0 / total_packages) libcalamares.utils.debug(pretty_name()) group_packages = 0 _change_mode(None) def run(): """ Calls routine with detected package manager to install locale packages or remove drivers not needed on the installed system. :return: """ global mode_packages, total_packages, completed_packages, group_packages backend = libcalamares.job.configuration.get("backend") for identifier, impl in backend_managers: if identifier == backend: pkgman = impl() break else: return "Bad backend", "backend=\"{}\"".format(backend) skip_this = libcalamares.job.configuration.get("skip_if_no_internet", False) if skip_this and not libcalamares.globalstorage.value("hasInternet"): libcalamares.utils.warning( "Package installation has been skipped: no internet" ) return None update_db = libcalamares.job.configuration.get("update_db", False) if update_db and libcalamares.globalstorage.value("hasInternet"): pkgman.update_db() update_system = libcalamares.job.configuration.get("update_system", False) if update_system and libcalamares.globalstorage.value("hasInternet"): pkgman.update_system() operations = libcalamares.job.configuration.get("operations", []) if libcalamares.globalstorage.contains("packageOperations"): operations += libcalamares.globalstorage.value("packageOperations") mode_packages = None total_packages = 0 completed_packages = 0 for op in operations: for packagelist in op.values(): total_packages += len(subst_locale(packagelist)) if not total_packages: # Avoids potential divide-by-zero in progress reporting return None for entry in operations: group_packages = 0 libcalamares.utils.debug(pretty_name()) run_operations(pkgman, entry) mode_packages = None libcalamares.job.setprogress(1.0) libcalamares.utils.debug(pretty_name()) return None calamares-3.2.20/src/modules/packages/module.desc000066400000000000000000000001301362604102500216610ustar00rootroot00000000000000--- type: "job" name: "packages" interface: "python" script: "main.py" calamares-3.2.20/src/modules/packages/packages.conf000066400000000000000000000155441362604102500222000ustar00rootroot00000000000000--- # # Which package manager to use, options are: # - packagekit - PackageKit CLI tool # - zypp - Zypp RPM frontend # - yum - Yum RPM frontend # - dnf - DNF, the new RPM frontend # - urpmi - Mandriva package manager # - apt - APT frontend for DEB and RPM # - pacman - Pacman # - portage - Gentoo package manager # - entropy - Sabayon package manager # - apk = Alpine Linux package manager # - dummy - Dummy manager, only logs # backend: dummy # # Often package installation needs an internet connection. # Since you may allow system installation without a connection # and want to offer OPTIONAL package installation, it's # possible to have no internet, yet have this packages module # enabled in settings. # # You can skip the whole module when there is no internet # by setting "skip_if_no_internet" to true. # # You can run a package-manager specific update procedure # before installing packages (for instance, to update the # list of packages and dependencies); this is done only if there # is an internet connection. # # Set "update_db" to 'true' for refreshing the database on the # target system. On target installations, which got installed by # unsquashing, a full system update may be needed. Otherwise # post-installing additional packages may result in conflicts. # Therefore set also "update_system" to 'true'. # skip_if_no_internet: false update_db: true update_system: false # # List of maps with package operations such as install or remove. # Distro developers can provide a list of packages to remove # from the installed system (for instance packages meant only # for the live system). # # A job implementing a distro specific logic to determine other # packages that need to be installed or removed can run before # this one. Distro developers may want to install locale packages # or remove drivers not needed on the installed system. # Such a job would populate a list of dictionaries in the global # storage called "packageOperations" and that list is processed # after the static list in the job configuration (i.e. the list # that is in this configuration file). # # Allowed package operations are: # - *install*, *try_install*: will call the package manager to # install one or more packages. The install target will # abort the whole installation if package-installation # fails, while try_install carries on. Packages may be # listed as (localized) names, or as (localized) package-data. # See below for the description of the format. # - *localInstall*: this is used to call the package manager # to install a package from a path-to-a-package. This is # useful if you have a static package archive on the install media. # The *pacman* package manager is the only one to specially support # this operation (all others treat this the same as *install*). # - *remove*, *try_remove*: will call the package manager to # remove one or more packages. The remove target will # abort the whole installation if package-removal fails, # while try_remove carries on. Packages may be listed as # (localized) names. # One additional key is recognized, to help netinstall out: # - *source*: ignored, does get logged # Any other key is ignored, and logged as a warning. # # There are two formats for naming packages: as a name or as package-data, # which is an object notation providing package-name, as well as pre- and # post-install scripts. # # Here are both formats, for installing vi. The first one just names the # package for vi (using the naming of the installed package manager), while # the second contains three data-items; the pre-script is run before invoking # the package manager, and the post-script runs once it is done. # # - install # - vi # - package: vi # pre-script: touch /tmp/installing-vi # post-script: rm -f /tmp/installing-vi # # The pre- and post-scripts are optional, but you cannot leave both out # if you do use the *package* key: using "package: vi" with neither script # option will trick Calamares into trying to install a package named # "package: vi", which is unlikely to work. # # The pre- and post-scripts are **not** executed by a shell unless you # explicitly invoke `/bin/sh` in them. The command-lines are passed # to exec(), which does not understand shell syntax. In other words: # # pre-script: ls | wc -l # # Will fail, because `|` is passed as a command-line argument to ls, # as are `wc`, and `-l`. No shell pipeline is set up, and ls is likely # to complain. Invoke the shell explicitly: # # pre-script: /bin/sh -c \"ls | wc -l\" # # The above note on shell-expansion applies to versions up-to-and-including # Calamares 3.2.12, but will change in future. # # Any package name may be localized; this is used to install localization # packages for software based on the selected system locale. By including # the string `LOCALE` in the package name, the following happens: # # - if the system locale is English (any variety), then the package is not # installed at all, # - otherwise `$LOCALE` or `${LOCALE}` is replaced by the 'lower-cased' BCP47 # name of the 'language' part of the selected system locale (not the # country/region/dialect part), e.g. selecting "nl_BE" will use "nl" # here. # # Take care that just plain `LOCALE` will not be replaced, so `foo-LOCALE` will # be left unchanged, while `foo-$LOCALE` will be changed. However, `foo-LOCALE` # **will** be removed from the list of packages (i.e. not installed), if # English is selected. If a non-English locale is selected, then `foo-LOCALE` # will be installed, unchanged (no language-name-substitution occurs). # # The following installs localizations for vi, if they are relevant; if # there is no localization, installation continues normally. # # - install # - vi-$LOCALE # - package: vi-${LOCALE} # pre-script: touch /tmp/installing-vi # post-script: rm -f /tmp/installing-vi # # When installing packages, Calamares will invoke the package manager # with a list of package names if it can; package-data prevents this because # of the scripts that need to run. In other words, this: # # - install: # - vi # - binutils # - package: wget # pre-script: touch /tmp/installing-wget # # This will invoke the package manager three times, once for each package, # because not all of them are simple package names. You can speed up the # process if you have only a few pre-scripts, by using multiple install targets: # # - install: # - vi # - binutils # - install: # - package: wget # pre-script: touch /tmp/installing-wget # # This will call the package manager once with the package-names "vi" and # "binutils", and then a second time for "wget". When installing large numbers # of packages, this can lead to a considerable time savings. # operations: - install: - vi - vi-${LOCALE} - wget - binutils - remove: - vi - wget - binutils calamares-3.2.20/src/modules/packages/test.yaml000066400000000000000000000003171362604102500214060ustar00rootroot00000000000000backend: dummy rootMountPoint: /tmp/mount operations: - install: - pre-script: touch /tmp/foo package: vi post-script: rm /tmp/foo - wget - binutils - remove: - vi - wget calamares-3.2.20/src/modules/partition/000077500000000000000000000000001362604102500177755ustar00rootroot00000000000000calamares-3.2.20/src/modules/partition/CMakeLists.txt000066400000000000000000000077261362604102500225510ustar00rootroot00000000000000# When debugging the partitioning widget, or experimenting, you may # want to allow unsafe partitioning choices (e.g. doing things to the # current disk). Set DEBUG_PARTITION_UNSAFE to allow that (it turns off # some filtering of devices). option( DEBUG_PARTITION_UNSAFE "Allow unsafe partitioning choices." OFF ) option( DEBUG_PARTITION_LAME "Unsafe partitioning will error out on exec." ON ) include_directories( ${CMAKE_SOURCE_DIR} ) # For 3rdparty set( _partition_defs ) if( DEBUG_PARTITION_UNSAFE ) if( DEBUG_PARTITION_LAME ) list( APPEND _partition_defs DEBUG_PARTITION_LAME ) endif() list( APPEND _partition_defs DEBUG_PARTITION_UNSAFE ) endif() find_package(ECM ${ECM_VERSION} REQUIRED NO_MODULE) find_package( KPMcore 3.3 ) set_package_properties( KPMcore PROPERTIES PURPOSE "For partition module" ) find_package( KF5Config CONFIG ) find_package( KF5I18n CONFIG ) find_package( KF5WidgetsAddons CONFIG ) if ( KPMcore_FOUND AND Qt5DBus_FOUND AND KF5CoreAddons_FOUND AND KF5Config_FOUND ) if ( KPMcore_VERSION VERSION_GREATER "3.3.0") list( APPEND _partition_defs WITH_KPMCORE331API) # kpmcore > 3.3.0 with deprecations endif() if ( KPMcore_VERSION VERSION_GREATER "3.90") list( APPEND _partition_defs WITH_KPMCORE4API) # kpmcore 4 with new API endif() include_directories( ${KPMCORE_INCLUDE_DIR} ) include_directories( ${PROJECT_BINARY_DIR}/src/libcalamaresui ) add_subdirectory( tests ) calamares_add_plugin( partition TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES core/BootLoaderModel.cpp core/ColorUtils.cpp core/DeviceList.cpp core/DeviceModel.cpp core/KPMHelpers.cpp core/PartitionActions.cpp core/PartitionCoreModule.cpp core/PartitionInfo.cpp core/PartitionLayout.cpp core/PartitionModel.cpp core/PartUtils.cpp gui/BootInfoWidget.cpp gui/ChoicePage.cpp gui/CreatePartitionDialog.cpp gui/CreateVolumeGroupDialog.cpp gui/DeviceInfoWidget.cpp gui/EditExistingPartitionDialog.cpp gui/EncryptWidget.cpp gui/ListPhysicalVolumeWidgetItem.cpp gui/PartitionPage.cpp gui/PartitionBarsView.cpp gui/PartitionDialogHelpers.cpp gui/PartitionLabelsView.cpp gui/PartitionSizeController.cpp gui/PartitionSplitterWidget.cpp gui/PartitionViewStep.cpp gui/PrettyRadioButton.cpp gui/ResizeVolumeGroupDialog.cpp gui/ScanningDialog.cpp gui/ReplaceWidget.cpp gui/VolumeGroupBaseDialog.cpp jobs/ClearMountsJob.cpp jobs/ClearTempMountsJob.cpp jobs/CreatePartitionJob.cpp jobs/CreatePartitionTableJob.cpp jobs/CreateVolumeGroupJob.cpp jobs/DeactivateVolumeGroupJob.cpp jobs/DeletePartitionJob.cpp jobs/FillGlobalStorageJob.cpp jobs/FormatPartitionJob.cpp jobs/PartitionJob.cpp jobs/RemoveVolumeGroupJob.cpp jobs/ResizePartitionJob.cpp jobs/ResizeVolumeGroupJob.cpp jobs/SetPartitionFlagsJob.cpp UI gui/ChoicePage.ui gui/CreatePartitionDialog.ui gui/CreatePartitionTableDialog.ui gui/EditExistingPartitionDialog.ui gui/EncryptWidget.ui gui/PartitionPage.ui gui/ReplaceWidget.ui gui/VolumeGroupBaseDialog.ui LINK_PRIVATE_LIBRARIES kpmcore calamaresui KF5::CoreAddons COMPILE_DEFINITIONS ${_partition_defs} SHARED_LIB ) else() if ( NOT KPMcore_FOUND ) calamares_skip_module( "partition (missing suitable KPMcore)" ) else() calamares_skip_module( "partition (missing dependencies for KPMcore)" ) endif() endif() calamares-3.2.20/src/modules/partition/README.md000066400000000000000000000071211362604102500212550ustar00rootroot00000000000000# Architecture ## Overview The heart of the module is the PartitionCoreModule class. It holds Qt models for the various elements and can create Calamares jobs representing the changes to be performed at install time. PartitionPage is the main UI class. It represents the module main page, the one with the device combo box, partition list and action buttons. It reacts to the buttons by creating various dialogs (the (...)Dialog classes) and tell PartitionCoreModule what to do. ## Use of KPMcore This module depends on KPMcore, the same library used by [KDE Partition Manager][kpm]. [kpm]: http://sourceforge.net/projects/partitionman/ ## Partition and PartitionInfo Calamares needs to store some information about partitions which is not available in Partition Manager's Partition class. This includes the install mount point and a boolean to mark whether an existing partition should be formatted. Reusing the existing `Partition::mountPoint` property was not an option because it stores the directory where a partition is currently mounted, which is a different concept from the directory where the user wants the partition to be mounted on the installed system. We can't hijack this to store our install mount point because whether the partition is currently mounted is an important information which should be taken into account later to prevent any modification on an installed partition. The way this extra information is stored is a bit unusual: the functions in the PartitionInfo namespace takes advantage of Qt dynamic properties methods to add Calamares-specific properties to the Partition instances: setting the install mount point is done with `PartitionInfo::setMountPoint(partition, "/")`, retrieving it is done with `mountPoint = PartitionInfo::mountPoint(partition)`. The rational behind this unusual design is simplicity: the alternative would have been to keep a separate PartitionInfo object and a map linking each Partition to its PartitionInfo instance. Such a design makes things more complicated. It complicates memory management: if a Partition goes away, its matching PartitionInfo must be removed. It also leads to uglier APIs: code which needs access to extra partition information must be passed both Partition and PartitionInfo instances or know a way to get a PartitionInfo from a Partition. The other alternative would have been to add Calamares-specific information to the real Partition object. This would have worked and would have made for a less surprising API, but it would mean more Calamares-specific patches on KPMcore. # Tests The module comes with unit tests for the partition jobs. Those tests need to run on storage device which does not contain any data you care about. To build them: cd $top_build_dir make buildtests To run them you need to define the `CALAMARES_TEST_DISK` environment variable. It should contain the device path to the test disk. For example, assuming you plugged a test USB stick identified as `/dev/sdb`, you would run the tests like this: sudo CALAMARES_TEST_DISK=/dev/sdb $top_build_dir/partitionjobtests # TODO - Support resizing extended partitions. ResizePartitionJob should already support this but the UI prevents editing of extended partitions for now. - Use os-prober to find out the installed OS. This information could then be used in PartitionModel and in the partition views. - PartitionBarsView - Show used space - Highlight selected partition - Make the partitions clickable - Match appearance with PartResizerWidget appearance - Expose PartitionInfo::format in PartitionModel and add a column for it in the tree view calamares-3.2.20/src/modules/partition/core/000077500000000000000000000000001362604102500207255ustar00rootroot00000000000000calamares-3.2.20/src/modules/partition/core/BootLoaderModel.cpp000066400000000000000000000124431362604102500244500ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2015, Teo Mrnjavac * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "core/BootLoaderModel.h" #include "core/KPMHelpers.h" #include "core/PartitionInfo.h" #include "utils/Logger.h" // KPMcore #include #include static QStandardItem* createBootLoaderItem( const QString& description, const QString& path, bool isPartition ) { QStandardItem* item = new QStandardItem( description ); item->setData( path, BootLoaderModel::BootLoaderPathRole ); item->setData( isPartition, BootLoaderModel::IsPartitionRole ); return item; } BootLoaderModel::BootLoaderModel( QObject* parent ) : QStandardItemModel( parent ) { } BootLoaderModel::~BootLoaderModel() {} void BootLoaderModel::init( const QList< Device* >& devices ) { cDebug() << "BLM::init with" << devices.count() << "devices" << rowCount() << "rows"; beginResetModel(); blockSignals( true ); m_devices = devices; updateInternal(); blockSignals( false ); endResetModel(); } void BootLoaderModel::createMbrItems() { for ( auto device : m_devices ) { QString text = tr( "Master Boot Record of %1" ).arg( device->name() ); appendRow( createBootLoaderItem( text, device->deviceNode(), false ) ); } } void BootLoaderModel::update() { cDebug() << "BLM::update holds" << m_devices.count() << "devices" << rowCount() << "rows"; beginResetModel(); blockSignals( true ); updateInternal(); blockSignals( false ); endResetModel(); } void BootLoaderModel::updateInternal() { QMutexLocker lock( &m_lock ); clear(); createMbrItems(); // An empty model is possible if you don't havee permissions: don't crash though. if ( rowCount() < 1 ) { return; } QString partitionText; Partition* partition = KPMHelpers::findPartitionByMountPoint( m_devices, "/boot" ); if ( partition ) { partitionText = tr( "Boot Partition" ); } else { partition = KPMHelpers::findPartitionByMountPoint( m_devices, "/" ); if ( partition ) { partitionText = tr( "System Partition" ); } } Q_ASSERT( rowCount() > 0 ); QStandardItem* last = item( rowCount() - 1 ); Q_ASSERT( last ); bool lastIsPartition = last->data( IsPartitionRole ).toBool(); if ( !partition ) { if ( lastIsPartition ) { takeRow( rowCount() - 1 ); } } else { QString mountPoint = PartitionInfo::mountPoint( partition ); if ( lastIsPartition ) { last->setText( partitionText ); last->setData( mountPoint, BootLoaderPathRole ); } else { appendRow( createBootLoaderItem( partitionText, PartitionInfo::mountPoint( partition ), true ) ); } // Create "don't install bootloader" item appendRow( createBootLoaderItem( tr( "Do not install a boot loader" ), QString(), false ) ); } } QVariant BootLoaderModel::data( const QModelIndex& index, int role ) const { QMutexLocker lock( &m_lock ); if ( role == Qt::DisplayRole ) { QString displayRole = QStandardItemModel::data( index, Qt::DisplayRole ).toString(); QString pathRole = QStandardItemModel::data( index, BootLoaderModel::BootLoaderPathRole ).toString(); if ( pathRole.isEmpty() ) { return displayRole; } return tr( "%1 (%2)" ).arg( displayRole, pathRole ); } return QStandardItemModel::data( index, role ); } namespace Calamares { int findBootloader( const QAbstractItemModel* model, const QString& path ) { for ( int i = 0; i < model->rowCount(); ++i ) { const auto index = model->index( i, 0, QModelIndex() ); if ( !index.isValid() ) { continue; } QVariant var = model->data( index, BootLoaderModel::BootLoaderPathRole ); if ( var.isValid() && var.toString() == path ) { return i; } } return -1; } void restoreSelectedBootLoader( QComboBox& combo, const QString& path ) { const auto* model = combo.model(); if ( model->rowCount() < 1 ) { cDebug() << "No items in BootLoaderModel"; return; } int r = -1; if ( path.isEmpty() ) { combo.setCurrentIndex( 0 ); } else if ( ( r = findBootloader( model, path ) ) >= 0 ) { combo.setCurrentIndex( r ); } else { combo.setCurrentIndex( 0 ); } } } // namespace Calamares calamares-3.2.20/src/modules/partition/core/BootLoaderModel.h000066400000000000000000000046131362604102500241150ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2015, Teo Mrnjavac * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef BOOTLOADERMODEL_H #define BOOTLOADERMODEL_H #include #include #include class Device; class QComboBox; /** * This model contains one entry for each device MBR plus one entry for the * /boot or / partition */ class BootLoaderModel : public QStandardItemModel { Q_OBJECT public: enum { BootLoaderPathRole = Qt::UserRole + 1, IsPartitionRole }; BootLoaderModel( QObject* parent = nullptr ); ~BootLoaderModel() override; /** * Init the model with the list of devices. Does *not* take ownership of the * devices. */ void init( const QList< Device* >& devices ); void update(); QVariant data( const QModelIndex& index, int role = Qt::DisplayRole ) const override; using DeviceList = QList< Device* >; private: DeviceList m_devices; mutable QMutex m_lock; void createMbrItems(); void updateInternal(); }; namespace Calamares { /** @brief Returns the row number of boot-loader @p path (e.g. /dev/sda) * * Assuming the @p model is a BootLoaderModel, will return a row number * in the model. Returns -1 otherwise. */ int findBootloader( const QAbstractItemModel* model, const QString& path ); /** @brief Tries to set @p path as selected item in @p combo * * Matches a boot-loader install path (e.g. /dev/sda) with a model * row and sets that as the current row. */ void restoreSelectedBootLoader( QComboBox& combo, const QString& path ); } // namespace Calamares #endif /* BOOTLOADERMODEL_H */ calamares-3.2.20/src/modules/partition/core/ColorUtils.cpp000066400000000000000000000136501362604102500235350ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2015-2016, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "core/ColorUtils.h" #include "core/KPMHelpers.h" #include "partition/PartitionIterator.h" #include "partition/PartitionQuery.h" #include "utils/Logger.h" // KPMcore #include #include // Qt #include #include using CalamaresUtils::Partition::isPartitionFreeSpace; using CalamaresUtils::Partition::isPartitionNew; using CalamaresUtils::Partition::PartitionIterator; static const int NUM_PARTITION_COLORS = 5; static const int NUM_NEW_PARTITION_COLORS = 4; //Let's try to use the Breeze palette static const QColor PARTITION_COLORS[ NUM_PARTITION_COLORS ] = { "#2980b9", //Dark Plasma Blue "#27ae60", //Dark Icon Green "#c9ce3b", //Dirty Yellow "#3daee9", //Plasma Blue "#9b59b6", //Purple }; static const QColor NEW_PARTITION_COLORS[ NUM_NEW_PARTITION_COLORS ] = { "#c0392b", //Dark Icon Red "#f39c1f", //Dark Icon Yellow "#f1b7bc", //Light Salmon "#fed999", //Light Orange }; static QColor FREE_SPACE_COLOR = "#777777"; static QColor EXTENDED_COLOR = "#aaaaaa"; static QColor UNKNOWN_DISKLABEL_COLOR = "#4d4151"; static QMap< QString, QColor > s_partitionColorsCache; namespace ColorUtils { QColor freeSpaceColor() { return FREE_SPACE_COLOR; } QColor unknownDisklabelColor() { return UNKNOWN_DISKLABEL_COLOR; } PartitionNode* _findRootForPartition( PartitionNode* partition ) { if ( partition->isRoot() || !partition->parent() ) { return partition; } return _findRootForPartition( partition->parent() ); } QColor colorForPartition( Partition* partition ) { if ( !partition ) { cWarning() << "NULL partition"; return FREE_SPACE_COLOR; } if ( isPartitionFreeSpace( partition ) ) { return FREE_SPACE_COLOR; } if ( partition->roles().has( PartitionRole::Extended ) ) { return EXTENDED_COLOR; } if ( partition->fileSystem().supportGetUUID() != FileSystem::cmdSupportNone && !partition->fileSystem().uuid().isEmpty() ) { if ( partition->fileSystem().type() == FileSystem::Luks ) { FS::luks& luksFs = dynamic_cast< FS::luks& >( partition->fileSystem() ); if ( !luksFs.outerUuid().isEmpty() && s_partitionColorsCache.contains( luksFs.outerUuid() ) ) { return s_partitionColorsCache[ luksFs.outerUuid() ]; } } if ( s_partitionColorsCache.contains( partition->fileSystem().uuid() ) ) { return s_partitionColorsCache[ partition->fileSystem().uuid() ]; } } // No partition-specific color needed, pick one from our list, but skip // free space: we don't want a partition to change colors if space before // it is inserted or removed PartitionNode* parent = _findRootForPartition( partition ); PartitionTable* table = dynamic_cast< PartitionTable* >( parent ); Q_ASSERT( table ); int colorIdx = 0; int newColorIdx = 0; for ( PartitionIterator it = PartitionIterator::begin( table ); it != PartitionIterator::end( table ); ++it ) { Partition* child = *it; if ( child == partition ) { break; } if ( !isPartitionFreeSpace( child ) && !child->hasChildren() ) { if ( isPartitionNew( child ) ) { ++newColorIdx; } ++colorIdx; } } if ( isPartitionNew( partition ) ) { return NEW_PARTITION_COLORS[ newColorIdx % NUM_NEW_PARTITION_COLORS ]; } if ( partition->fileSystem().supportGetUUID() != FileSystem::cmdSupportNone && !partition->fileSystem().uuid().isEmpty() ) { if ( partition->fileSystem().type() == FileSystem::Luks ) { FS::luks& luksFs = dynamic_cast< FS::luks& >( partition->fileSystem() ); if ( !luksFs.outerUuid().isEmpty() ) { s_partitionColorsCache.insert( luksFs.outerUuid(), PARTITION_COLORS[ colorIdx % NUM_PARTITION_COLORS ] ); } } else s_partitionColorsCache.insert( partition->fileSystem().uuid(), PARTITION_COLORS[ colorIdx % NUM_PARTITION_COLORS ] ); } return PARTITION_COLORS[ colorIdx % NUM_PARTITION_COLORS ]; } QColor colorForPartitionInFreeSpace( Partition* partition ) { PartitionNode* parent = _findRootForPartition( partition ); PartitionTable* table = dynamic_cast< PartitionTable* >( parent ); Q_ASSERT( table ); int newColorIdx = 0; for ( PartitionIterator it = PartitionIterator::begin( table ); it != PartitionIterator::end( table ); ++it ) { Partition* child = *it; if ( child == partition ) { break; } if ( !isPartitionFreeSpace( child ) && !child->hasChildren() && isPartitionNew( child ) ) { ++newColorIdx; } } return NEW_PARTITION_COLORS[ newColorIdx % NUM_NEW_PARTITION_COLORS ]; } void invalidateCache() { s_partitionColorsCache.clear(); } } // namespace ColorUtils calamares-3.2.20/src/modules/partition/core/ColorUtils.h000066400000000000000000000033421362604102500231770ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2016, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef COLORUTILS_H #define COLORUTILS_H class QColor; class Partition; /** * Helper functions to define colors for partitions. It ensures no consecutive * partitions have the same color. */ namespace ColorUtils { QColor freeSpaceColor(); QColor unknownDisklabelColor(); /** * @brief colorForPartition iterates over partitions, caches their colors and returns * a color for the given partition. * @param partition the partition for which to return a color. * @return a color for the partition. */ QColor colorForPartition( Partition* partition ); /** * This is similar to colorForPartition() but returns the color of a partition * which would be created in freeSpacePartition */ QColor colorForPartitionInFreeSpace( Partition* freeSpacePartition ); /** * @brief invalidateCache clears the partition colors cache. */ void invalidateCache(); } // namespace ColorUtils #endif /* COLORUTILS_H */ calamares-3.2.20/src/modules/partition/core/DeviceList.cpp000066400000000000000000000116101362604102500234630ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2015-2016, Teo Mrnjavac * Copyright 2018-2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "DeviceList.h" #include "PartitionCoreModule.h" #include "core/DeviceModel.h" #include "core/KPMHelpers.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "partition/PartitionIterator.h" #include "utils/Logger.h" #include #include #include #include #include #include using CalamaresUtils::Partition::PartitionIterator; namespace PartUtils { /** * Does the given @p device contain the root filesystem? This is true if * the device contains a partition which is currently mounted at / . */ static bool hasRootPartition( Device* device ) { for ( auto it = PartitionIterator::begin( device ); it != PartitionIterator::end( device ); ++it ) if ( ( *it )->mountPoint() == "/" ) { return true; } return false; } static bool blkIdCheckIso9660( const QString& path ) { QProcess blkid; blkid.start( "blkid", { path } ); blkid.waitForFinished(); QString output = QString::fromLocal8Bit( blkid.readAllStandardOutput() ); return output.contains( "iso9660" ); } static bool isIso9660( const Device* device ) { const QString path = device->deviceNode(); if ( path.isEmpty() ) { return false; } if ( blkIdCheckIso9660( path ) ) { return true; } if ( device->partitionTable() && !device->partitionTable()->children().isEmpty() ) { for ( const Partition* partition : device->partitionTable()->children() ) { if ( blkIdCheckIso9660( partition->partitionPath() ) ) { return true; } } } return false; } static inline QDebug& operator<<( QDebug& s, QList< Device* >::iterator& it ) { s << ( ( *it ) ? ( *it )->deviceNode() : QString( "" ) ); return s; } using DeviceList = QList< Device* >; static inline DeviceList::iterator erase( DeviceList& l, DeviceList::iterator& it ) { Device* p = *it; auto r = l.erase( it ); delete p; return r; } QList< Device* > getDevices( DeviceType which, qint64 minimumSize ) { bool writableOnly = ( which == DeviceType::WritableOnly ); CoreBackend* backend = CoreBackendManager::self()->backend(); #if defined( WITH_KPMCORE4API ) DeviceList devices = backend->scanDevices( /* not includeReadOnly, not includeLoopback */ ScanFlag( 0 ) ); #else DeviceList devices = backend->scanDevices( /* excludeReadOnly */ true ); #endif #ifdef DEBUG_PARTITION_UNSAFE cWarning() << "Allowing unsafe partitioning choices." << devices.count() << "candidates."; #ifdef DEBUG_PARTITION_LAME cDebug() << Logger::SubEntry << "it has been lamed, and will fail."; #endif #else cDebug() << "Removing unsuitable devices:" << devices.count() << "candidates."; // Remove the device which contains / from the list for ( DeviceList::iterator it = devices.begin(); it != devices.end(); ) if ( !( *it ) ) { cDebug() << Logger::SubEntry << "Skipping nullptr device"; it = erase( devices, it ); } else if ( ( *it )->deviceNode().startsWith( "/dev/zram" ) ) { cDebug() << Logger::SubEntry << "Removing zram" << it; it = erase( devices, it ); } else if ( writableOnly && hasRootPartition( *it ) ) { cDebug() << Logger::SubEntry << "Removing device with root filesystem (/) on it" << it; it = erase( devices, it ); } else if ( writableOnly && isIso9660( *it ) ) { cDebug() << Logger::SubEntry << "Removing device with iso9660 filesystem (probably a CD) on it" << it; it = erase( devices, it ); } else if ( ( minimumSize >= 0 ) && !( ( *it )->capacity() > minimumSize ) ) { cDebug() << Logger::SubEntry << "Removing too-small" << it; it = erase( devices, it ); } else { ++it; } #endif return devices; } } // namespace PartUtils calamares-3.2.20/src/modules/partition/core/DeviceList.h000066400000000000000000000033151362604102500231330ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2017, Teo Mrnjavac * Copyright 2017, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef DEVICELIST_H #define DEVICELIST_H #include #include class Device; namespace PartUtils { enum class DeviceType { All, WritableOnly }; /** * @brief Gets a list of storage devices. * @param which Can be used to select from all the devices in * the system, filtering out those that do not meet a criterium. * If set to WritableOnly, only devices which can be overwritten * safely are returned (e.g. RO-media are ignored, as are mounted partitions). * @param minimumSize Can be used to filter devices based on their * size (in bytes). If non-negative, only devices with a size * greater than @p minimumSize will be returned. * @return a list of Devices meeting this criterium. */ QList< Device* > getDevices( DeviceType which = DeviceType::All, qint64 minimumSize = -1 ); } // namespace PartUtils #endif // DEVICELIST_H calamares-3.2.20/src/modules/partition/core/DeviceModel.cpp000066400000000000000000000101331362604102500236070ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2014, Teo Mrnjavac * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "core/DeviceModel.h" #include "core/PartitionModel.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" // KPMcore #include // KF5 #include #include #include // STL #include static void sortDevices( DeviceModel::DeviceList& l ) { std::sort( l.begin(), l.end(), []( const Device* dev1, const Device* dev2 ) { return dev1->deviceNode() < dev2->deviceNode(); } ); } DeviceModel::DeviceModel( QObject* parent ) : QAbstractListModel( parent ) { } DeviceModel::~DeviceModel() {} void DeviceModel::init( const DeviceList& devices ) { beginResetModel(); m_devices = devices; sortDevices( m_devices ); endResetModel(); } int DeviceModel::rowCount( const QModelIndex& parent ) const { return parent.isValid() ? 0 : m_devices.count(); } QVariant DeviceModel::data( const QModelIndex& index, int role ) const { int row = index.row(); if ( row < 0 || row >= m_devices.count() ) { return QVariant(); } Device* device = m_devices.at( row ); switch ( role ) { case Qt::DisplayRole: case Qt::ToolTipRole: if ( device->name().isEmpty() ) { return device->deviceNode(); } else { if ( device->logicalSize() >= 0 && device->totalLogical() >= 0 ) { //: device[name] - size[number] (device-node[name]) return tr( "%1 - %2 (%3)" ) .arg( device->name() ) .arg( KFormat().formatByteSize( device->capacity() ) ) .arg( device->deviceNode() ); } else { // Newly LVM VGs don't have capacity property yet (i.e. // always has 1B capacity), so don't show it for a while. // //: device[name] - (device-node[name]) return tr( "%1 - (%2)" ).arg( device->name() ).arg( device->deviceNode() ); } } case Qt::DecorationRole: return CalamaresUtils::defaultPixmap( CalamaresUtils::PartitionDisk, CalamaresUtils::Original, QSize( CalamaresUtils::defaultIconSize().width() * 3, CalamaresUtils::defaultIconSize().height() * 3 ) ); default: return QVariant(); } } Device* DeviceModel::deviceForIndex( const QModelIndex& index ) const { int row = index.row(); if ( row < 0 || row >= m_devices.count() ) { return nullptr; } return m_devices.at( row ); } void DeviceModel::swapDevice( Device* oldDevice, Device* newDevice ) { Q_ASSERT( oldDevice ); Q_ASSERT( newDevice ); int indexOfOldDevice = m_devices.indexOf( oldDevice ); if ( indexOfOldDevice < 0 ) { return; } m_devices[ indexOfOldDevice ] = newDevice; emit dataChanged( index( indexOfOldDevice ), index( indexOfOldDevice ) ); } void DeviceModel::addDevice( Device* device ) { beginResetModel(); m_devices << device; sortDevices( m_devices ); endResetModel(); } void DeviceModel::removeDevice( Device* device ) { beginResetModel(); m_devices.removeAll( device ); sortDevices( m_devices ); endResetModel(); } calamares-3.2.20/src/modules/partition/core/DeviceModel.h000066400000000000000000000034761362604102500232700ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2017, 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef DEVICEMODEL_H #define DEVICEMODEL_H #include #include #include class Device; class PartitionModel; /** * A Qt model which exposes a list of Devices. */ class DeviceModel : public QAbstractListModel { Q_OBJECT public: DeviceModel( QObject* parent = nullptr ); ~DeviceModel() override; using DeviceList = QList< Device* >; /** * Init the model with the list of devices. Does *not* take ownership of the * devices. */ void init( const DeviceList& devices ); int rowCount( const QModelIndex& parent = QModelIndex() ) const override; QVariant data( const QModelIndex& index, int role = Qt::DisplayRole ) const override; Device* deviceForIndex( const QModelIndex& index ) const; void swapDevice( Device* oldDevice, Device* newDevice ); void addDevice( Device* device ); void removeDevice( Device* device ); private: DeviceList m_devices; }; #endif /* DEVICEMODEL_H */ calamares-3.2.20/src/modules/partition/core/KPMHelpers.cpp000066400000000000000000000114711362604102500234070ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2015-2016, Teo Mrnjavac * Copyright 2018-2019 Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "core/KPMHelpers.h" #include "core/PartitionInfo.h" #include "partition/PartitionIterator.h" #include "utils/Logger.h" // KPMcore #include #include #include #include #include using CalamaresUtils::Partition::PartitionIterator; namespace KPMHelpers { Partition* findPartitionByMountPoint( const QList< Device* >& devices, const QString& mountPoint ) { for ( auto device : devices ) for ( auto it = PartitionIterator::begin( device ); it != PartitionIterator::end( device ); ++it ) if ( PartitionInfo::mountPoint( *it ) == mountPoint ) { return *it; } return nullptr; } Partition* createNewPartition( PartitionNode* parent, const Device& device, const PartitionRole& role, FileSystem::Type fsType, qint64 firstSector, qint64 lastSector, PartitionTable::Flags flags ) { FileSystem* fs = FileSystemFactory::create( fsType, firstSector, lastSector, device.logicalSize() ); return new Partition( parent, device, role, fs, fs->firstSector(), fs->lastSector(), QString() /* path */, KPM_PARTITION_FLAG( None ) /* availableFlags */, QString() /* mountPoint */, false /* mounted */, flags /* activeFlags */, KPM_PARTITION_STATE( New ) ); } Partition* createNewEncryptedPartition( PartitionNode* parent, const Device& device, const PartitionRole& role, FileSystem::Type fsType, qint64 firstSector, qint64 lastSector, const QString& passphrase, PartitionTable::Flags flags ) { PartitionRole::Roles newRoles = role.roles(); if ( !role.has( PartitionRole::Luks ) ) { newRoles |= PartitionRole::Luks; } FS::luks* fs = dynamic_cast< FS::luks* >( FileSystemFactory::create( FileSystem::Luks, firstSector, lastSector, device.logicalSize() ) ); if ( !fs ) { cError() << "cannot create LUKS filesystem. Giving up."; return nullptr; } fs->createInnerFileSystem( fsType ); fs->setPassphrase( passphrase ); Partition* p = new Partition( parent, device, PartitionRole( newRoles ), fs, fs->firstSector(), fs->lastSector(), QString() /* path */, KPM_PARTITION_FLAG( None ) /* availableFlags */, QString() /* mountPoint */, false /* mounted */, flags /* activeFlags */, KPM_PARTITION_STATE( New ) ); return p; } Partition* clonePartition( Device* device, Partition* partition ) { FileSystem* fs = FileSystemFactory::create( partition->fileSystem().type(), partition->firstSector(), partition->lastSector(), device->logicalSize() ); return new Partition( partition->parent(), *device, partition->roles(), fs, fs->firstSector(), fs->lastSector(), partition->partitionPath(), partition->activeFlags() ); } } // namespace KPMHelpers calamares-3.2.20/src/modules/partition/core/KPMHelpers.h000066400000000000000000000057431362604102500230610ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2015-2016, Teo Mrnjavac * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef KPMHELPERS_H #define KPMHELPERS_H // KPMcore #include #include // Qt #include #include class Device; class Partition; class PartitionNode; class PartitionRole; #if defined( WITH_KPMCORE4API ) #define KPM_PARTITION_FLAG( x ) PartitionTable::Flag::x #define KPM_PARTITION_STATE( x ) Partition::State::x #define KPM_PARTITION_FLAG_ESP PartitionTable::Flag::Boot #else #define KPM_PARTITION_FLAG( x ) PartitionTable::Flag##x #define KPM_PARTITION_STATE( x ) Partition::State##x #define KPM_PARTITION_FLAG_ESP PartitionTable::FlagEsp #endif /** * Helper functions to manipulate partitions */ namespace KPMHelpers { /** * Iterates on all devices and return the first partition which is associated * with mountPoint. This uses PartitionInfo::mountPoint(), not Partition::mountPoint() */ Partition* findPartitionByMountPoint( const QList< Device* >& devices, const QString& mountPoint ); /** * Helper function to create a new Partition object (does not create anything * on the disk) associated with a FileSystem. */ Partition* createNewPartition( PartitionNode* parent, const Device& device, const PartitionRole& role, FileSystem::Type fsType, qint64 firstSector, qint64 lastSector, PartitionTable::Flags flags ); Partition* createNewEncryptedPartition( PartitionNode* parent, const Device& device, const PartitionRole& role, FileSystem::Type fsType, qint64 firstSector, qint64 lastSector, const QString& passphrase, PartitionTable::Flags flags ); Partition* clonePartition( Device* device, Partition* partition ); } // namespace KPMHelpers #endif /* KPMHELPERS_H */ calamares-3.2.20/src/modules/partition/core/OsproberEntry.h000066400000000000000000000035521362604102500237200ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2016, Teo Mrnjavac * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef OSPROBERENTRY_H #define OSPROBERENTRY_H #include struct FstabEntry { QString partitionNode; QString mountPoint; QString fsType; QString options; int dump; int pass; /// Does this entry make sense and is it complete? bool isValid() const; // implemented in Partutils.cpp /** @brief Create an entry from a live of /etc/fstab * * Splits the given string (which ought to follow the format * of /etc/fstab) and returns a corresponding Fstab entry. * If the string isn't valid (e.g. comment-line, or broken * fstab entry) then the entry that is returned is invalid. */ static FstabEntry fromEtcFstab( const QString& ); // implemented in Partutils.cpp }; typedef QList< FstabEntry > FstabEntryList; struct OsproberEntry { QString prettyName; QString path; QString uuid; bool canBeResized; QStringList line; FstabEntryList fstab; QString homePath; }; typedef QList< OsproberEntry > OsproberEntryList; #endif // OSPROBERENTRY_H calamares-3.2.20/src/modules/partition/core/PartUtils.cpp000066400000000000000000000431201362604102500233600ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2015-2016, Teo Mrnjavac * Copyright 2018-2019 Adriaan de Groot * Copyright 2019, Collabora Ltd * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "PartUtils.h" #include "PartitionCoreModule.h" #include "core/DeviceModel.h" #include "core/KPMHelpers.h" #include "core/PartitionInfo.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "partition/Mount.h" #include "partition/PartitionIterator.h" #include "partition/PartitionQuery.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include #include #include #include #include #include using CalamaresUtils::Partition::isPartitionFreeSpace; using CalamaresUtils::Partition::isPartitionNew; namespace PartUtils { QString convenienceName( const Partition* const candidate ) { if ( !candidate->mountPoint().isEmpty() ) { return candidate->mountPoint(); } if ( !candidate->partitionPath().isEmpty() ) { return candidate->partitionPath(); } if ( !candidate->devicePath().isEmpty() ) { return candidate->devicePath(); } if ( !candidate->deviceNode().isEmpty() ) { return candidate->devicePath(); } QString p; QTextStream s( &p ); s << (void*)candidate; return p; } /** @brief Get the globalStorage setting for required space. */ static double getRequiredStorageGiB( bool& ok ) { return Calamares::JobQueue::instance()->globalStorage()->value( "requiredStorageGiB" ).toDouble( &ok ); } bool canBeReplaced( Partition* candidate ) { if ( !candidate ) { cDebug() << "Partition* is NULL"; return false; } cDebug() << "Checking if" << convenienceName( candidate ) << "can be replaced."; if ( candidate->isMounted() ) { cDebug() << Logger::SubEntry << "NO, it is mounted."; return false; } bool ok = false; double requiredStorageGiB = getRequiredStorageGiB( ok ); if ( !ok ) { cDebug() << Logger::SubEntry << "NO, requiredStorageGiB is not set correctly."; return false; } qint64 availableStorageB = candidate->capacity(); qint64 requiredStorageB = CalamaresUtils::GiBtoBytes( requiredStorageGiB + 0.5 ); if ( availableStorageB > requiredStorageB ) { cDebug() << "Partition" << convenienceName( candidate ) << "authorized for replace install."; return true; } else { Logger::CDebug deb; deb << Logger::SubEntry << "NO, insufficient storage"; deb << Logger::Continuation << "Required storage B:" << requiredStorageB << QString( "(%1GiB)" ).arg( requiredStorageGiB ); deb << Logger::Continuation << "Available storage B:" << availableStorageB << QString( "(%1GiB)" ).arg( CalamaresUtils::BytesToGiB( availableStorageB ) ); return false; } } bool canBeResized( Partition* candidate ) { if ( !candidate ) { cDebug() << "Partition* is NULL"; return false; } cDebug() << "Checking if" << convenienceName( candidate ) << "can be resized."; if ( !candidate->fileSystem().supportGrow() || !candidate->fileSystem().supportShrink() ) { cDebug() << Logger::SubEntry << "NO, filesystem" << candidate->fileSystem().name() << "does not support resize."; return false; } if ( isPartitionFreeSpace( candidate ) ) { cDebug() << Logger::SubEntry << "NO, partition is free space"; return false; } if ( candidate->isMounted() ) { cDebug() << Logger::SubEntry << "NO, partition is mounted"; return false; } if ( candidate->roles().has( PartitionRole::Primary ) ) { PartitionTable* table = dynamic_cast< PartitionTable* >( candidate->parent() ); if ( !table ) { cDebug() << Logger::SubEntry << "NO, no partition table found"; return false; } if ( table->numPrimaries() >= table->maxPrimaries() ) { cDebug() << Logger::SubEntry << "NO, partition table already has" << table->maxPrimaries() << "primary partitions."; return false; } } bool ok = false; double requiredStorageGiB = getRequiredStorageGiB( ok ); if ( !ok ) { cDebug() << Logger::SubEntry << "NO, requiredStorageGiB is not set correctly."; return false; } // We require a little more for partitioning overhead and swap file double advisedStorageGiB = requiredStorageGiB + 0.5 + 2.0; qint64 availableStorageB = candidate->available(); qint64 advisedStorageB = CalamaresUtils::GiBtoBytes( advisedStorageGiB ); if ( availableStorageB > advisedStorageB ) { cDebug() << "Partition" << convenienceName( candidate ) << "authorized for resize + autopartition install."; return true; } else { Logger::CDebug deb; deb << Logger::SubEntry << "NO, insufficient storage"; deb << Logger::Continuation << "Required storage B:" << advisedStorageB << QString( "(%1GiB)" ).arg( advisedStorageGiB ); deb << Logger::Continuation << "Available storage B:" << availableStorageB << QString( "(%1GiB)" ).arg( CalamaresUtils::BytesToGiB( availableStorageB ) ) << "for" << convenienceName( candidate ) << "length:" << candidate->length() << "sectorsUsed:" << candidate->sectorsUsed() << "fsType:" << candidate->fileSystem().name(); return false; } } bool canBeResized( PartitionCoreModule* core, const QString& partitionPath ) { cDebug() << "Checking if" << partitionPath << "can be resized."; QString partitionWithOs = partitionPath; if ( partitionWithOs.startsWith( "/dev/" ) ) { DeviceModel* dm = core->deviceModel(); for ( int i = 0; i < dm->rowCount(); ++i ) { Device* dev = dm->deviceForIndex( dm->index( i ) ); Partition* candidate = CalamaresUtils::Partition::findPartitionByPath( { dev }, partitionWithOs ); if ( candidate ) { return canBeResized( candidate ); } } cDebug() << Logger::SubEntry << "no Partition* found for" << partitionWithOs; } cDebug() << Logger::SubEntry << "Partition" << partitionWithOs << "CANNOT BE RESIZED FOR AUTOINSTALL."; return false; } static FstabEntryList lookForFstabEntries( const QString& partitionPath ) { QStringList mountOptions { "ro" }; auto r = CalamaresUtils::System::runCommand( CalamaresUtils::System::RunLocation::RunInHost, { "blkid", "-s", "TYPE", "-o", "value", partitionPath } ); if ( r.getExitCode() ) { cWarning() << "blkid on" << partitionPath << "failed."; } else { QString fstype = r.getOutput().trimmed(); if ( ( fstype == "ext3" ) || ( fstype == "ext4" ) ) { mountOptions.append( "noload" ); } } cDebug() << "Checking device" << partitionPath << "for fstab (fs=" << r.getOutput() << ')'; FstabEntryList fstabEntries; CalamaresUtils::Partition::TemporaryMount mount( partitionPath, QString(), mountOptions.join( ',' ) ); if ( mount.isValid() ) { QFile fstabFile( mount.path() + "/etc/fstab" ); cDebug() << Logger::SubEntry << "reading" << fstabFile.fileName(); if ( fstabFile.open( QIODevice::ReadOnly | QIODevice::Text ) ) { const QStringList fstabLines = QString::fromLocal8Bit( fstabFile.readAll() ).split( '\n' ); for ( const QString& rawLine : fstabLines ) { fstabEntries.append( FstabEntry::fromEtcFstab( rawLine ) ); } fstabFile.close(); cDebug() << Logger::SubEntry << "got" << fstabEntries.count() << "lines."; std::remove_if( fstabEntries.begin(), fstabEntries.end(), []( const FstabEntry& x ) { return !x.isValid(); } ); cDebug() << Logger::SubEntry << "got" << fstabEntries.count() << "fstab entries."; } else { cWarning() << "Could not read fstab from mounted fs"; } } else { cWarning() << "Could not mount existing fs"; } return fstabEntries; } static QString findPartitionPathForMountPoint( const FstabEntryList& fstab, const QString& mountPoint ) { if ( fstab.isEmpty() ) { return QString(); } for ( const FstabEntry& entry : fstab ) { if ( entry.mountPoint == mountPoint ) { QProcess readlink; QString partPath; if ( entry.partitionNode.startsWith( "/dev" ) ) // plain dev node { partPath = entry.partitionNode; } else if ( entry.partitionNode.startsWith( "LABEL=" ) ) { partPath = entry.partitionNode.mid( 6 ); partPath.remove( "\"" ); partPath.replace( "\\040", "\\ " ); partPath.prepend( "/dev/disk/by-label/" ); } else if ( entry.partitionNode.startsWith( "UUID=" ) ) { partPath = entry.partitionNode.mid( 5 ); partPath.remove( "\"" ); partPath = partPath.toLower(); partPath.prepend( "/dev/disk/by-uuid/" ); } else if ( entry.partitionNode.startsWith( "PARTLABEL=" ) ) { partPath = entry.partitionNode.mid( 10 ); partPath.remove( "\"" ); partPath.replace( "\\040", "\\ " ); partPath.prepend( "/dev/disk/by-partlabel/" ); } else if ( entry.partitionNode.startsWith( "PARTUUID=" ) ) { partPath = entry.partitionNode.mid( 9 ); partPath.remove( "\"" ); partPath = partPath.toLower(); partPath.prepend( "/dev/disk/by-partuuid/" ); } // At this point we either have /dev/sda1, or /dev/disk/by-something/... if ( partPath.startsWith( "/dev/disk/by-" ) ) // we got a fancy node { readlink.start( "readlink", { "-en", partPath } ); if ( !readlink.waitForStarted( 1000 ) ) { return QString(); } if ( !readlink.waitForFinished( 1000 ) ) { return QString(); } if ( readlink.exitCode() != 0 || readlink.exitStatus() != QProcess::NormalExit ) { return QString(); } partPath = QString::fromLocal8Bit( readlink.readAllStandardOutput() ).trimmed(); } return partPath; } } return QString(); } OsproberEntryList runOsprober( PartitionCoreModule* core ) { QString osproberOutput; QProcess osprober; osprober.setProgram( "os-prober" ); osprober.setProcessChannelMode( QProcess::SeparateChannels ); osprober.start(); if ( !osprober.waitForStarted() ) { cError() << "os-prober cannot start."; } else if ( !osprober.waitForFinished( 60000 ) ) { cError() << "os-prober timed out."; } else { osproberOutput.append( QString::fromLocal8Bit( osprober.readAllStandardOutput() ).trimmed() ); } QStringList osproberCleanLines; OsproberEntryList osproberEntries; const auto lines = osproberOutput.split( '\n' ); for ( const QString& line : lines ) { if ( !line.simplified().isEmpty() ) { QStringList lineColumns = line.split( ':' ); QString prettyName; if ( !lineColumns.value( 1 ).simplified().isEmpty() ) { prettyName = lineColumns.value( 1 ).simplified(); } else if ( !lineColumns.value( 2 ).simplified().isEmpty() ) { prettyName = lineColumns.value( 2 ).simplified(); } QString path = lineColumns.value( 0 ).simplified(); if ( !path.startsWith( "/dev/" ) ) //basic sanity check { continue; } FstabEntryList fstabEntries = lookForFstabEntries( path ); QString homePath = findPartitionPathForMountPoint( fstabEntries, "/home" ); osproberEntries.append( { prettyName, path, QString(), canBeResized( core, path ), lineColumns, fstabEntries, homePath } ); osproberCleanLines.append( line ); } } if ( osproberCleanLines.count() > 0 ) { cDebug() << "os-prober lines after cleanup:" << Logger::DebugList( osproberCleanLines ); } else { cDebug() << "os-prober gave no output."; } Calamares::JobQueue::instance()->globalStorage()->insert( "osproberLines", osproberCleanLines ); return osproberEntries; } bool isEfiSystem() { return QDir( "/sys/firmware/efi/efivars" ).exists(); } bool isEfiBootable( const Partition* candidate ) { cDebug() << "Check EFI bootable" << convenienceName( candidate ) << candidate->devicePath(); cDebug() << Logger::SubEntry << "flags" << candidate->activeFlags(); auto flags = PartitionInfo::flags( candidate ); /* If bit 17 is set, old-style Esp flag, it's OK */ if ( flags.testFlag( KPM_PARTITION_FLAG_ESP ) ) { return true; } /* Otherwise, if it's a GPT table, Boot (bit 0) is the same as Esp */ const PartitionNode* root = candidate; while ( root && !root->isRoot() ) { root = root->parent(); cDebug() << Logger::SubEntry << "moved towards root" << (void*)root; } // Strange case: no root found, no partition table node? if ( !root ) { return false; } const PartitionTable* table = dynamic_cast< const PartitionTable* >( root ); cDebug() << Logger::SubEntry << "partition table" << (void*)table << "type" << ( table ? table->type() : PartitionTable::TableType::unknownTableType ); return table && ( table->type() == PartitionTable::TableType::gpt ) && flags.testFlag( KPM_PARTITION_FLAG( Boot ) ); } QString findFS( QString fsName, FileSystem::Type* fsType ) { QStringList fsLanguage { QLatin1String( "C" ) }; // Required language list to turn off localization if ( fsName.isEmpty() ) { fsName = QStringLiteral( "ext4" ); } FileSystem::Type tmpType = FileSystem::typeForName( fsName, fsLanguage ); if ( tmpType != FileSystem::Unknown ) { cDebug() << "Found filesystem" << fsName; if ( fsType ) { *fsType = tmpType; } return fsName; } // Second pass: try case-insensitive const auto fstypes = FileSystem::types(); for ( FileSystem::Type t : fstypes ) { if ( 0 == QString::compare( fsName, FileSystem::nameForType( t, fsLanguage ), Qt::CaseInsensitive ) ) { QString fsRealName = FileSystem::nameForType( t, fsLanguage ); cDebug() << "Filesystem name" << fsName << "translated to" << fsRealName; if ( fsType ) { *fsType = t; } return fsRealName; } } cDebug() << "Filesystem" << fsName << "not found, using ext4"; fsName = QStringLiteral( "ext4" ); // fsType can be used to check whether fsName was a valid filesystem. if ( fsType ) { *fsType = FileSystem::Unknown; } #ifdef DEBUG_FILESYSTEMS // This bit is for distro's debugging their settings, and shows // all the strings that KPMCore is matching against for FS type. { Logger::CDebug d; using TR = Logger::DebugRow< int, QString >; const auto fstypes = FileSystem::types(); d << "Available types (" << fstypes.count() << ')'; for ( FileSystem::Type t : fstypes ) { d << TR( static_cast< int >( t ), FileSystem::nameForType( t, fsLanguage ) ); } } #endif return fsName; } } // namespace PartUtils /* Implementation of methods for FstabEntry, from OsproberEntry.h */ bool FstabEntry::isValid() const { return !partitionNode.isEmpty() && !mountPoint.isEmpty() && !fsType.isEmpty(); } FstabEntry FstabEntry::fromEtcFstab( const QString& rawLine ) { QString line = rawLine.simplified(); if ( line.startsWith( '#' ) ) return FstabEntry { QString(), QString(), QString(), QString(), 0, 0 }; QStringList splitLine = line.split( ' ' ); if ( splitLine.length() != 6 ) return FstabEntry { QString(), QString(), QString(), QString(), 0, 0 }; return FstabEntry { splitLine.at( 0 ), // path, or UUID, or LABEL, etc. splitLine.at( 1 ), // mount point splitLine.at( 2 ), // fs type splitLine.at( 3 ), // options splitLine.at( 4 ).toInt(), //dump splitLine.at( 5 ).toInt() //pass }; } calamares-3.2.20/src/modules/partition/core/PartUtils.h000066400000000000000000000066531362604102500230370ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2015-2016, Teo Mrnjavac * Copyright 2018-2019 Adriaan de Groot * Copyright 2019, Collabora Ltd * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef PARTUTILS_H #define PARTUTILS_H #include "OsproberEntry.h" #include "utils/NamedSuffix.h" #include "utils/Units.h" // KPMcore #include // Qt #include class PartitionCoreModule; class Partition; namespace PartUtils { /** * @brief Provides a nice human-readable name for @p candidate * * The most-specific human-readable name for the partition @p candidate * is returned (e.g. device name, or partition path). In the worst * case, a string representation of (void *)candidate is returned. */ QString convenienceName( const Partition* const candidate ); /** * @brief canBeReplaced checks whether the given Partition satisfies the criteria * for replacing it with the new OS. * @param candidate the candidate partition to replace. * @return true if the criteria are met, otherwise false. */ bool canBeReplaced( Partition* candidate ); /** * @brief canBeReplaced checks whether the given Partition satisfies the criteria * for resizing (shrinking) it to make room for a new OS. * @param candidate the candidate partition to resize. * @return true if the criteria are met, otherwise false. */ bool canBeResized( Partition* candidate ); /** * @brief canBeReplaced checks whether the given Partition satisfies the criteria * for resizing (shrinking) it to make room for a new OS. * @param core the PartitionCoreModule instance. * @param partitionPath the device path of the candidate partition to resize. * @return true if the criteria are met, otherwise false. */ bool canBeResized( PartitionCoreModule* core, const QString& partitionPath ); /** * @brief runOsprober executes os-prober, parses the output and writes relevant * data to GlobalStorage. * @param core the PartitionCoreModule instance. * @return a list of os-prober entries, parsed. */ OsproberEntryList runOsprober( PartitionCoreModule* core ); /** * @brief Is this system EFI-enabled? Decides based on /sys/firmware/efi */ bool isEfiSystem(); /** * @brief Is the given @p partition bootable in EFI? Depending on * the partition table layout, this may mean different flags. */ bool isEfiBootable( const Partition* candidate ); /** @brief translate @p fsName into a recognized name and type * * Makes several attempts to translate the string into a * name that KPMCore will recognize. * The corresponding filesystem type is stored in @p fsType, and * its value is FileSystem::Unknown if @p fsName is not recognized. */ QString findFS( QString fsName, FileSystem::Type* fsType ); } // namespace PartUtils #endif // PARTUTILS_H calamares-3.2.20/src/modules/partition/core/PartitionActions.cpp000066400000000000000000000251461362604102500247330ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2017, Teo Mrnjavac * Copyright 2017-2019, Adriaan de Groot * Copyright 2019, Collabora Ltd * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "PartitionActions.h" #include "core/KPMHelpers.h" #include "core/PartUtils.h" #include "core/PartitionCoreModule.h" #include "core/PartitionInfo.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/NamedEnum.h" #include "utils/Units.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/Logger.h" #include #include #include namespace PartitionActions { using CalamaresUtils::operator""_GiB; using CalamaresUtils::operator""_MiB; qint64 swapSuggestion( const qint64 availableSpaceB, Choices::SwapChoice swap ) { if ( ( swap != Choices::SmallSwap ) && ( swap != Choices::FullSwap ) ) { return 0; } // See partition.conf for explanation qint64 suggestedSwapSizeB = 0; auto memory = CalamaresUtils::System::instance()->getTotalMemoryB(); qint64 availableRamB = memory.first; qreal overestimationFactor = memory.second; bool ensureSuspendToDisk = swap == Choices::FullSwap; // Ramp up quickly to 8GiB, then follow memory size if ( availableRamB <= 4_GiB ) { suggestedSwapSizeB = availableRamB * 2; } else if ( availableRamB <= 8_GiB ) { suggestedSwapSizeB = 8_GiB; } else { suggestedSwapSizeB = availableRamB; } // .. top out at 8GiB if we don't care about suspend if ( !ensureSuspendToDisk ) { suggestedSwapSizeB = qMin( 8_GiB, suggestedSwapSizeB ); } // Allow for a fudge factor suggestedSwapSizeB *= overestimationFactor; // don't use more than 10% of available space if ( !ensureSuspendToDisk ) { suggestedSwapSizeB = qMin( suggestedSwapSizeB, qint64( 0.10 * availableSpaceB ) ); } cDebug() << "Suggested swap size:" << suggestedSwapSizeB / 1024. / 1024. / 1024. << "GiB"; return suggestedSwapSizeB; } void doAutopartition( PartitionCoreModule* core, Device* dev, Choices::AutoPartitionOptions o ) { Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); QString defaultFsType = o.defaultFsType; if ( FileSystem::typeForName( defaultFsType ) == FileSystem::Unknown ) { defaultFsType = "ext4"; } bool isEfi = PartUtils::isEfiSystem(); // Partition sizes are expressed in MiB, should be multiples of // the logical sector size (usually 512B). EFI starts with 2MiB // empty and a EFI boot partition, while BIOS starts at // the 1MiB boundary (usually sector 2048). int empty_space_sizeB = isEfi ? 2_MiB : 1_MiB; int uefisys_part_sizeB = 0_MiB; if ( isEfi ) { if ( gs->contains( "efiSystemPartitionSize" ) ) { CalamaresUtils::Partition::PartitionSize part_size = CalamaresUtils::Partition::PartitionSize( gs->value( "efiSystemPartitionSize" ).toString() ); uefisys_part_sizeB = part_size.toBytes( dev->capacity() ); } else { uefisys_part_sizeB = 300_MiB; } } // Since sectors count from 0, if the space is 2048 sectors in size, // the first free sector has number 2048 (and there are 2048 sectors // before that one, numbered 0..2047). qint64 firstFreeSector = CalamaresUtils::bytesToSectors( empty_space_sizeB, dev->logicalSize() ); if ( isEfi ) { qint64 efiSectorCount = CalamaresUtils::bytesToSectors( uefisys_part_sizeB, dev->logicalSize() ); Q_ASSERT( efiSectorCount > 0 ); // Since sectors count from 0, and this partition is created starting // at firstFreeSector, we need efiSectorCount sectors, numbered // firstFreeSector..firstFreeSector+efiSectorCount-1. qint64 lastSector = firstFreeSector + efiSectorCount - 1; core->createPartitionTable( dev, PartitionTable::gpt ); Partition* efiPartition = KPMHelpers::createNewPartition( dev->partitionTable(), *dev, PartitionRole( PartitionRole::Primary ), FileSystem::Fat32, firstFreeSector, lastSector, KPM_PARTITION_FLAG( None ) ); PartitionInfo::setFormat( efiPartition, true ); PartitionInfo::setMountPoint( efiPartition, o.efiPartitionMountPoint ); core->createPartition( dev, efiPartition, KPM_PARTITION_FLAG_ESP ); firstFreeSector = lastSector + 1; } else { core->createPartitionTable( dev, PartitionTable::msdos ); } const bool mayCreateSwap = ( o.swap == Choices::SmallSwap ) || ( o.swap == Choices::FullSwap ); bool shouldCreateSwap = false; qint64 suggestedSwapSizeB = 0; if ( mayCreateSwap ) { qint64 availableSpaceB = ( dev->totalLogical() - firstFreeSector ) * dev->logicalSize(); suggestedSwapSizeB = swapSuggestion( availableSpaceB, o.swap ); // Space required by this installation is what the distro claims is needed // (via global configuration) plus the swap size plus a fudge factor of // 0.6GiB (this was 2.1GiB up to Calamares 3.2.2). qint64 requiredSpaceB = o.requiredSpaceB + 600_MiB + suggestedSwapSizeB; // If there is enough room for ESP + root + swap, create swap, otherwise don't. shouldCreateSwap = availableSpaceB > requiredSpaceB; } qint64 lastSectorForRoot = dev->totalLogical() - 1; //last sector of the device if ( shouldCreateSwap ) { lastSectorForRoot -= suggestedSwapSizeB / dev->logicalSize() + 1; } core->layoutApply( dev, firstFreeSector, lastSectorForRoot, o.luksPassphrase ); if ( shouldCreateSwap ) { Partition* swapPartition = nullptr; if ( o.luksPassphrase.isEmpty() ) { swapPartition = KPMHelpers::createNewPartition( dev->partitionTable(), *dev, PartitionRole( PartitionRole::Primary ), FileSystem::LinuxSwap, lastSectorForRoot + 1, dev->totalLogical() - 1, KPM_PARTITION_FLAG( None ) ); } else { swapPartition = KPMHelpers::createNewEncryptedPartition( dev->partitionTable(), *dev, PartitionRole( PartitionRole::Primary ), FileSystem::LinuxSwap, lastSectorForRoot + 1, dev->totalLogical() - 1, o.luksPassphrase, KPM_PARTITION_FLAG( None ) ); } PartitionInfo::setFormat( swapPartition, true ); core->createPartition( dev, swapPartition ); } core->dumpQueue(); } void doReplacePartition( PartitionCoreModule* core, Device* dev, Partition* partition, Choices::ReplacePartitionOptions o ) { qint64 firstSector, lastSector; cDebug() << "doReplacePartition for device" << partition->partitionPath(); QString defaultFsType = o.defaultFsType; if ( FileSystem::typeForName( defaultFsType ) == FileSystem::Unknown ) { defaultFsType = "ext4"; } PartitionRole newRoles( partition->roles() ); if ( partition->roles().has( PartitionRole::Extended ) ) { newRoles = PartitionRole( PartitionRole::Primary ); } if ( partition->roles().has( PartitionRole::Unallocated ) ) { newRoles = PartitionRole( PartitionRole::Primary ); cWarning() << "selected partition is free space"; if ( partition->parent() ) { Partition* parent = dynamic_cast< Partition* >( partition->parent() ); if ( parent && parent->roles().has( PartitionRole::Extended ) ) { newRoles = PartitionRole( PartitionRole::Logical ); } } } // Save the first and last sector values as the partition will be deleted firstSector = partition->firstSector(); lastSector = partition->lastSector(); if ( !partition->roles().has( PartitionRole::Unallocated ) ) { core->deletePartition( dev, partition ); } core->layoutApply( dev, firstSector, lastSector, o.luksPassphrase ); core->dumpQueue(); } namespace Choices { static const NamedEnumTable< SwapChoice >& nameTable() { static const NamedEnumTable< SwapChoice > names { { QStringLiteral( "none" ), SwapChoice::NoSwap }, { QStringLiteral( "small" ), SwapChoice::SmallSwap }, { QStringLiteral( "suspend" ), SwapChoice::FullSwap }, { QStringLiteral( "reuse" ), SwapChoice::ReuseSwap }, { QStringLiteral( "file" ), SwapChoice::SwapFile } }; return names; } SwapChoice nameToChoice( QString name, bool& ok ) { return nameTable().find( name, ok ); } QString choiceToName( SwapChoice c ) { bool ok = false; return nameTable().find( c, ok ); } } // namespace Choices } // namespace PartitionActions calamares-3.2.20/src/modules/partition/core/PartitionActions.h000066400000000000000000000066251362604102500244010ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2016, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef PARTITIONACTIONS_H #define PARTITIONACTIONS_H #include class PartitionCoreModule; class Device; class Partition; namespace PartitionActions { /** @brief Namespace for enums * * This namespace houses non-class enums..... */ namespace Choices { /** @brief Ccchoice of swap (size and type) */ enum SwapChoice { NoSwap, // don't create any swap, don't use any ReuseSwap, // don't create, but do use existing SmallSwap, // up to 8GiB of swap FullSwap, // ensureSuspendToDisk -- at least RAM size SwapFile // use a file (if supported) }; SwapChoice nameToChoice( QString name, bool& ok ); QString choiceToName( SwapChoice ); struct ReplacePartitionOptions { QString defaultFsType; // e.g. "ext4" or "btrfs" QString luksPassphrase; // optional ReplacePartitionOptions( const QString& fs, const QString& luks ) : defaultFsType( fs ) , luksPassphrase( luks ) { } }; struct AutoPartitionOptions : ReplacePartitionOptions { QString efiPartitionMountPoint; // optional, e.g. "/boot" quint64 requiredSpaceB; // estimated required space for root partition SwapChoice swap; AutoPartitionOptions( const QString& fs, const QString& luks, const QString& efi, qint64 requiredBytes, SwapChoice s ) : ReplacePartitionOptions( fs, luks ) , efiPartitionMountPoint( efi ) , requiredSpaceB( requiredBytes > 0 ? static_cast< quint64 >( requiredBytes ) : 0 ) , swap( s ) { } }; } // namespace Choices /** * @brief doAutopartition sets up an autopartitioning operation on the given Device. * @param core a pointer to the PartitionCoreModule instance. * @param dev the device to wipe. * @param options settings for autopartitioning. */ void doAutopartition( PartitionCoreModule* core, Device* dev, Choices::AutoPartitionOptions options ); /** * @brief doReplacePartition sets up replace-partitioning with the given partition. * @param core a pointer to the PartitionCoreModule instance. * @param dev a pointer to the Device on which to replace a partition. * @param partition a pointer to the Partition to be replaced. * @param options settings for partitioning (not all fields apply) * * @note this function also takes care of requesting PCM to delete the partition. */ void doReplacePartition( PartitionCoreModule* core, Device* dev, Partition* partition, Choices::ReplacePartitionOptions options ); } // namespace PartitionActions #endif // PARTITIONACTIONS_H calamares-3.2.20/src/modules/partition/core/PartitionCoreModule.cpp000066400000000000000000000753751362604102500254020ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2014-2015, Teo Mrnjavac * Copyright 2017-2019, Adriaan de Groot * Copyright 2018, Caio Carvalho * Copyright 2019, Collabora Ltd * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "core/PartitionCoreModule.h" #include "core/BootLoaderModel.h" #include "core/ColorUtils.h" #include "core/DeviceList.h" #include "core/DeviceModel.h" #include "core/KPMHelpers.h" #include "core/PartUtils.h" #include "core/PartitionInfo.h" #include "core/PartitionModel.h" #include "jobs/ClearMountsJob.h" #include "jobs/ClearTempMountsJob.h" #include "jobs/CreatePartitionJob.h" #include "jobs/CreatePartitionTableJob.h" #include "jobs/CreateVolumeGroupJob.h" #include "jobs/DeactivateVolumeGroupJob.h" #include "jobs/DeletePartitionJob.h" #include "jobs/FillGlobalStorageJob.h" #include "jobs/FormatPartitionJob.h" #include "jobs/RemoveVolumeGroupJob.h" #include "jobs/ResizePartitionJob.h" #include "jobs/ResizeVolumeGroupJob.h" #include "jobs/SetPartitionFlagsJob.h" #ifdef DEBUG_PARTITION_LAME #include "JobExample.h" #endif #include "partition/PartitionIterator.h" #include "partition/PartitionQuery.h" #include "utils/Logger.h" #include "utils/Variant.h" // KPMcore #include #include #include #include #include #include #include #include #include // Qt #include #include #include #include #include using CalamaresUtils::Partition::isPartitionFreeSpace; using CalamaresUtils::Partition::isPartitionNew; using CalamaresUtils::Partition::PartitionIterator; PartitionCoreModule::RefreshHelper::RefreshHelper( PartitionCoreModule* module ) : m_module( module ) { } PartitionCoreModule::RefreshHelper::~RefreshHelper() { m_module->refreshAfterModelChange(); } class OperationHelper { public: OperationHelper( PartitionModel* model, PartitionCoreModule* core ) : m_coreHelper( core ) , m_modelHelper( model ) { } OperationHelper( const OperationHelper& ) = delete; OperationHelper& operator=( const OperationHelper& ) = delete; private: // Keep these in order: first the model needs to finish, // then refresh is called. Remember that destructors are // called in *reverse* order of declaration in this class. PartitionCoreModule::RefreshHelper m_coreHelper; PartitionModel::ResetHelper m_modelHelper; }; //- DeviceInfo --------------------------------------------- PartitionCoreModule::DeviceInfo::DeviceInfo( Device* _device ) : device( _device ) , partitionModel( new PartitionModel ) , immutableDevice( new Device( *_device ) ) , isAvailable( true ) { } PartitionCoreModule::DeviceInfo::~DeviceInfo() {} void PartitionCoreModule::DeviceInfo::forgetChanges() { jobs.clear(); for ( auto it = PartitionIterator::begin( device.data() ); it != PartitionIterator::end( device.data() ); ++it ) { PartitionInfo::reset( *it ); } partitionModel->revert(); } bool PartitionCoreModule::DeviceInfo::isDirty() const { if ( !jobs.isEmpty() ) { return true; } for ( auto it = PartitionIterator::begin( device.data() ); it != PartitionIterator::end( device.data() ); ++it ) if ( PartitionInfo::isDirty( *it ) ) { return true; } return false; } //- PartitionCoreModule ------------------------------------ PartitionCoreModule::PartitionCoreModule( QObject* parent ) : QObject( parent ) , m_deviceModel( new DeviceModel( this ) ) , m_bootLoaderModel( new BootLoaderModel( this ) ) { if ( !m_kpmcore ) { qFatal( "Failed to initialize KPMcore backend" ); } } void PartitionCoreModule::init() { QMutexLocker locker( &m_revertMutex ); doInit(); } void PartitionCoreModule::doInit() { FileSystemFactory::init(); using DeviceList = QList< Device* >; DeviceList devices = PartUtils::getDevices( PartUtils::DeviceType::WritableOnly ); cDebug() << "LIST OF DETECTED DEVICES:"; cDebug() << "node\tcapacity\tname\tprettyName"; for ( auto device : devices ) { // Gives ownership of the Device* to the DeviceInfo object auto deviceInfo = new DeviceInfo( device ); m_deviceInfos << deviceInfo; cDebug() << device->deviceNode() << device->capacity() << device->name() << device->prettyName(); } cDebug() << Logger::SubEntry << devices.count() << "devices detected."; m_deviceModel->init( devices ); // The following PartUtils::runOsprober call in turn calls PartUtils::canBeResized, // which relies on a working DeviceModel. m_osproberLines = PartUtils::runOsprober( this ); // We perform a best effort of filling out filesystem UUIDs in m_osproberLines // because we will need them later on in PartitionModel if partition paths // change. // It is a known fact that /dev/sda1-style device paths aren't persistent // across reboots (and this doesn't affect us), but partition numbers can also // change at runtime against our will just for shits and giggles. // But why would that ever happen? What system could possibly be so poorly // designed that it requires a partition path rearrangement at runtime? // Logical partitions on an MSDOS disklabel of course. // See DeletePartitionJob::updatePreview. for ( auto deviceInfo : m_deviceInfos ) { for ( auto it = PartitionIterator::begin( deviceInfo->device.data() ); it != PartitionIterator::end( deviceInfo->device.data() ); ++it ) { Partition* partition = *it; for ( auto jt = m_osproberLines.begin(); jt != m_osproberLines.end(); ++jt ) { if ( jt->path == partition->partitionPath() && partition->fileSystem().supportGetUUID() != FileSystem::cmdSupportNone && !partition->fileSystem().uuid().isEmpty() ) { jt->uuid = partition->fileSystem().uuid(); } } } } for ( auto deviceInfo : m_deviceInfos ) { deviceInfo->partitionModel->init( deviceInfo->device.data(), m_osproberLines ); } DeviceList bootLoaderDevices; for ( DeviceList::Iterator it = devices.begin(); it != devices.end(); ++it ) if ( ( *it )->type() != Device::Type::Disk_Device ) { cDebug() << "Ignoring device that is not Disk_Device to bootLoaderDevices list."; continue; } else { bootLoaderDevices.append( *it ); } m_bootLoaderModel->init( bootLoaderDevices ); scanForLVMPVs(); //FIXME: this should be removed in favor of // proper KPM support for EFI if ( PartUtils::isEfiSystem() ) { scanForEfiSystemPartitions(); } } PartitionCoreModule::~PartitionCoreModule() { qDeleteAll( m_deviceInfos ); } DeviceModel* PartitionCoreModule::deviceModel() const { return m_deviceModel; } QAbstractItemModel* PartitionCoreModule::bootLoaderModel() const { return m_bootLoaderModel; } PartitionModel* PartitionCoreModule::partitionModelForDevice( const Device* device ) const { DeviceInfo* info = infoForDevice( device ); Q_ASSERT( info ); return info->partitionModel.data(); } Device* PartitionCoreModule::immutableDeviceCopy( const Device* device ) { Q_ASSERT( device ); DeviceInfo* info = infoForDevice( device ); if ( !info ) { return nullptr; } return info->immutableDevice.data(); } void PartitionCoreModule::createPartitionTable( Device* device, PartitionTable::TableType type ) { DeviceInfo* info = infoForDevice( device ); if ( info ) { // Creating a partition table wipes all the disk, so there is no need to // keep previous changes info->forgetChanges(); OperationHelper helper( partitionModelForDevice( device ), this ); CreatePartitionTableJob* job = new CreatePartitionTableJob( device, type ); job->updatePreview(); info->jobs << Calamares::job_ptr( job ); } } void PartitionCoreModule::createPartition( Device* device, Partition* partition, PartitionTable::Flags flags ) { auto deviceInfo = infoForDevice( device ); Q_ASSERT( deviceInfo ); OperationHelper helper( partitionModelForDevice( device ), this ); CreatePartitionJob* job = new CreatePartitionJob( device, partition ); job->updatePreview(); deviceInfo->jobs << Calamares::job_ptr( job ); if ( flags != KPM_PARTITION_FLAG( None ) ) { SetPartFlagsJob* fJob = new SetPartFlagsJob( device, partition, flags ); deviceInfo->jobs << Calamares::job_ptr( fJob ); PartitionInfo::setFlags( partition, flags ); } } void PartitionCoreModule::createVolumeGroup( QString& vgName, QVector< const Partition* > pvList, qint32 peSize ) { // Appending '_' character in case of repeated VG name while ( hasVGwithThisName( vgName ) ) { vgName.append( '_' ); } CreateVolumeGroupJob* job = new CreateVolumeGroupJob( vgName, pvList, peSize ); job->updatePreview(); LvmDevice* device = new LvmDevice( vgName ); for ( const Partition* p : pvList ) { device->physicalVolumes() << p; } DeviceInfo* deviceInfo = new DeviceInfo( device ); deviceInfo->partitionModel->init( device, osproberEntries() ); m_deviceModel->addDevice( device ); m_deviceInfos << deviceInfo; deviceInfo->jobs << Calamares::job_ptr( job ); refreshAfterModelChange(); } void PartitionCoreModule::resizeVolumeGroup( LvmDevice* device, QVector< const Partition* >& pvList ) { DeviceInfo* deviceInfo = infoForDevice( device ); Q_ASSERT( deviceInfo ); ResizeVolumeGroupJob* job = new ResizeVolumeGroupJob( device, pvList ); deviceInfo->jobs << Calamares::job_ptr( job ); refreshAfterModelChange(); } void PartitionCoreModule::deactivateVolumeGroup( LvmDevice* device ) { DeviceInfo* deviceInfo = infoForDevice( device ); Q_ASSERT( deviceInfo ); deviceInfo->isAvailable = false; DeactivateVolumeGroupJob* job = new DeactivateVolumeGroupJob( device ); // DeactivateVolumeGroupJob needs to be immediately called job->exec(); refreshAfterModelChange(); } void PartitionCoreModule::removeVolumeGroup( LvmDevice* device ) { DeviceInfo* deviceInfo = infoForDevice( device ); Q_ASSERT( deviceInfo ); RemoveVolumeGroupJob* job = new RemoveVolumeGroupJob( device ); deviceInfo->jobs << Calamares::job_ptr( job ); refreshAfterModelChange(); } void PartitionCoreModule::deletePartition( Device* device, Partition* partition ) { auto deviceInfo = infoForDevice( device ); Q_ASSERT( deviceInfo ); OperationHelper helper( partitionModelForDevice( device ), this ); if ( partition->roles().has( PartitionRole::Extended ) ) { // Delete all logical partitions first // I am not sure if we can iterate on Partition::children() while // deleting them, so let's play it safe and keep our own list. QList< Partition* > lst; for ( auto childPartition : partition->children() ) if ( !isPartitionFreeSpace( childPartition ) ) { lst << childPartition; } for ( auto childPartition : lst ) { deletePartition( device, childPartition ); } } Calamares::JobList& jobs = deviceInfo->jobs; if ( partition->state() == KPM_PARTITION_STATE( New ) ) { // First remove matching SetPartFlagsJobs for ( auto it = jobs.begin(); it != jobs.end(); ) { SetPartFlagsJob* job = qobject_cast< SetPartFlagsJob* >( it->data() ); if ( job && job->partition() == partition ) { it = jobs.erase( it ); } else { ++it; } } // Find matching CreatePartitionJob auto it = std::find_if( jobs.begin(), jobs.end(), [partition]( Calamares::job_ptr job ) { CreatePartitionJob* createJob = qobject_cast< CreatePartitionJob* >( job.data() ); return createJob && createJob->partition() == partition; } ); if ( it == jobs.end() ) { cDebug() << "Failed to find a CreatePartitionJob matching the partition to remove"; return; } // Remove it if ( !partition->parent()->remove( partition ) ) { cDebug() << "Failed to remove partition from preview"; return; } device->partitionTable()->updateUnallocated( *device ); jobs.erase( it ); // The partition is no longer referenced by either a job or the device // partition list, so we have to delete it delete partition; } else { // Remove any PartitionJob on this partition for ( auto it = jobs.begin(); it != jobs.end(); ) { PartitionJob* job = qobject_cast< PartitionJob* >( it->data() ); if ( job && job->partition() == partition ) { it = jobs.erase( it ); } else { ++it; } } DeletePartitionJob* job = new DeletePartitionJob( device, partition ); job->updatePreview(); jobs << Calamares::job_ptr( job ); } } void PartitionCoreModule::formatPartition( Device* device, Partition* partition ) { auto deviceInfo = infoForDevice( device ); Q_ASSERT( deviceInfo ); OperationHelper helper( partitionModelForDevice( device ), this ); FormatPartitionJob* job = new FormatPartitionJob( device, partition ); deviceInfo->jobs << Calamares::job_ptr( job ); } void PartitionCoreModule::resizePartition( Device* device, Partition* partition, qint64 first, qint64 last ) { auto deviceInfo = infoForDevice( device ); Q_ASSERT( deviceInfo ); OperationHelper helper( partitionModelForDevice( device ), this ); ResizePartitionJob* job = new ResizePartitionJob( device, partition, first, last ); job->updatePreview(); deviceInfo->jobs << Calamares::job_ptr( job ); } void PartitionCoreModule::setPartitionFlags( Device* device, Partition* partition, PartitionTable::Flags flags ) { auto deviceInfo = infoForDevice( device ); Q_ASSERT( deviceInfo ); OperationHelper( partitionModelForDevice( device ), this ); SetPartFlagsJob* job = new SetPartFlagsJob( device, partition, flags ); deviceInfo->jobs << Calamares::job_ptr( job ); PartitionInfo::setFlags( partition, flags ); } Calamares::JobList PartitionCoreModule::jobs() const { Calamares::JobList lst; QList< Device* > devices; #ifdef DEBUG_PARTITION_UNSAFE #ifdef DEBUG_PARTITION_LAME cDebug() << "Unsafe partitioning is enabled."; cDebug() << Logger::SubEntry << "it has been lamed, and will fail."; lst << Calamares::job_ptr( new Calamares::FailJob( QStringLiteral( "Partition" ) ) ); #else cWarning() << "Unsafe partitioning is enabled."; cWarning() << Logger::SubEntry << "the unsafe actions will be executed."; #endif #endif lst << Calamares::job_ptr( new ClearTempMountsJob() ); for ( auto info : m_deviceInfos ) { if ( info->isDirty() ) { lst << Calamares::job_ptr( new ClearMountsJob( info->device.data() ) ); } } for ( auto info : m_deviceInfos ) { lst << info->jobs; devices << info->device.data(); } lst << Calamares::job_ptr( new FillGlobalStorageJob( devices, m_bootLoaderInstallPath ) ); return lst; } bool PartitionCoreModule::hasRootMountPoint() const { return m_hasRootMountPoint; } QList< Partition* > PartitionCoreModule::efiSystemPartitions() const { return m_efiSystemPartitions; } QVector< const Partition* > PartitionCoreModule::lvmPVs() const { return m_lvmPVs; } bool PartitionCoreModule::hasVGwithThisName( const QString& name ) const { auto condition = [name]( DeviceInfo* d ) { return dynamic_cast< LvmDevice* >( d->device.data() ) && d->device.data()->name() == name; }; return std::find_if( m_deviceInfos.begin(), m_deviceInfos.end(), condition ) != m_deviceInfos.end(); } bool PartitionCoreModule::isInVG( const Partition* partition ) const { auto condition = [partition]( DeviceInfo* d ) { LvmDevice* vg = dynamic_cast< LvmDevice* >( d->device.data() ); return vg && vg->physicalVolumes().contains( partition ); }; return std::find_if( m_deviceInfos.begin(), m_deviceInfos.end(), condition ) != m_deviceInfos.end(); } void PartitionCoreModule::dumpQueue() const { cDebug() << "# Queue:"; for ( auto info : m_deviceInfos ) { cDebug() << "## Device:" << info->device->name(); for ( auto job : info->jobs ) { cDebug() << "-" << job->prettyName(); } } } const OsproberEntryList PartitionCoreModule::osproberEntries() const { return m_osproberLines; } void PartitionCoreModule::refreshPartition( Device* device, Partition* ) { // Keep it simple for now: reset the model. This can be improved to cause // the model to emit dataChanged() for the affected row instead, avoiding // the loss of the current selection. auto model = partitionModelForDevice( device ); Q_ASSERT( model ); OperationHelper helper( model, this ); } void PartitionCoreModule::refreshAfterModelChange() { updateHasRootMountPoint(); updateIsDirty(); m_bootLoaderModel->update(); scanForLVMPVs(); //FIXME: this should be removed in favor of // proper KPM support for EFI if ( PartUtils::isEfiSystem() ) { scanForEfiSystemPartitions(); } } void PartitionCoreModule::updateHasRootMountPoint() { bool oldValue = m_hasRootMountPoint; m_hasRootMountPoint = findPartitionByMountPoint( "/" ); if ( oldValue != m_hasRootMountPoint ) { hasRootMountPointChanged( m_hasRootMountPoint ); } } void PartitionCoreModule::updateIsDirty() { bool oldValue = m_isDirty; m_isDirty = false; for ( auto info : m_deviceInfos ) if ( info->isDirty() ) { m_isDirty = true; break; } if ( oldValue != m_isDirty ) { isDirtyChanged( m_isDirty ); } } void PartitionCoreModule::scanForEfiSystemPartitions() { m_efiSystemPartitions.clear(); QList< Device* > devices; for ( int row = 0; row < deviceModel()->rowCount(); ++row ) { Device* device = deviceModel()->deviceForIndex( deviceModel()->index( row ) ); devices.append( device ); } QList< Partition* > efiSystemPartitions = CalamaresUtils::Partition::findPartitions( devices, PartUtils::isEfiBootable ); if ( efiSystemPartitions.isEmpty() ) { cWarning() << "system is EFI but no EFI system partitions found."; } m_efiSystemPartitions = efiSystemPartitions; } void PartitionCoreModule::scanForLVMPVs() { m_lvmPVs.clear(); QList< Device* > physicalDevices; QList< LvmDevice* > vgDevices; for ( DeviceInfo* deviceInfo : m_deviceInfos ) { if ( deviceInfo->device.data()->type() == Device::Type::Disk_Device ) { physicalDevices << deviceInfo->device.data(); } else if ( deviceInfo->device.data()->type() == Device::Type::LVM_Device ) { LvmDevice* device = dynamic_cast< LvmDevice* >( deviceInfo->device.data() ); // Restoring physical volume list device->physicalVolumes().clear(); vgDevices << device; } } #if defined( WITH_KPMCORE4API ) VolumeManagerDevice::scanDevices( physicalDevices ); for ( auto p : LVM::pvList::list() ) #else LvmDevice::scanSystemLVM( physicalDevices ); for ( auto p : LVM::pvList ) #endif { m_lvmPVs << p.partition().data(); for ( LvmDevice* device : vgDevices ) if ( p.vgName() == device->name() ) { // Adding scanned VG to PV list device->physicalVolumes() << p.partition(); break; } } for ( DeviceInfo* d : m_deviceInfos ) { for ( auto job : d->jobs ) { // Including new LVM PVs CreatePartitionJob* partJob = dynamic_cast< CreatePartitionJob* >( job.data() ); if ( partJob ) { Partition* p = partJob->partition(); if ( p->fileSystem().type() == FileSystem::Type::Lvm2_PV ) { m_lvmPVs << p; } else if ( p->fileSystem().type() == FileSystem::Type::Luks ) { // Encrypted LVM PVs FileSystem* innerFS = static_cast< const FS::luks* >( &p->fileSystem() )->innerFS(); if ( innerFS && innerFS->type() == FileSystem::Type::Lvm2_PV ) { m_lvmPVs << p; } } #if defined( WITH_KPMCORE4API ) else if ( p->fileSystem().type() == FileSystem::Type::Luks2 ) { // Encrypted LVM PVs FileSystem* innerFS = static_cast< const FS::luks* >( &p->fileSystem() )->innerFS(); if ( innerFS && innerFS->type() == FileSystem::Type::Lvm2_PV ) { m_lvmPVs << p; } } #endif } } } } PartitionCoreModule::DeviceInfo* PartitionCoreModule::infoForDevice( const Device* device ) const { for ( auto it = m_deviceInfos.constBegin(); it != m_deviceInfos.constEnd(); ++it ) { if ( ( *it )->device.data() == device ) { return *it; } if ( ( *it )->immutableDevice.data() == device ) { return *it; } } return nullptr; } Partition* PartitionCoreModule::findPartitionByMountPoint( const QString& mountPoint ) const { for ( auto deviceInfo : m_deviceInfos ) { Device* device = deviceInfo->device.data(); for ( auto it = PartitionIterator::begin( device ); it != PartitionIterator::end( device ); ++it ) if ( PartitionInfo::mountPoint( *it ) == mountPoint ) { return *it; } } return nullptr; } void PartitionCoreModule::setBootLoaderInstallPath( const QString& path ) { cDebug() << "PCM::setBootLoaderInstallPath" << path; m_bootLoaderInstallPath = path; } void PartitionCoreModule::initLayout() { m_partLayout = new PartitionLayout(); m_partLayout->addEntry( QString( "/" ), QString( "100%" ) ); } void PartitionCoreModule::initLayout( const QVariantList& config ) { QString sizeString; QString minSizeString; QString maxSizeString; m_partLayout = new PartitionLayout(); for ( const auto& r : config ) { QVariantMap pentry = r.toMap(); if ( !pentry.contains( "name" ) || !pentry.contains( "mountPoint" ) || !pentry.contains( "filesystem" ) || !pentry.contains( "size" ) ) { cError() << "Partition layout entry #" << config.indexOf( r ) << "lacks mandatory attributes, switching to default layout."; delete ( m_partLayout ); initLayout(); break; } if ( pentry.contains( "size" ) && CalamaresUtils::getString( pentry, "size" ).isEmpty() ) { sizeString.setNum( CalamaresUtils::getInteger( pentry, "size", 0 ) ); } else { sizeString = CalamaresUtils::getString( pentry, "size" ); } if ( pentry.contains( "minSize" ) && CalamaresUtils::getString( pentry, "minSize" ).isEmpty() ) { minSizeString.setNum( CalamaresUtils::getInteger( pentry, "minSize", 0 ) ); } else { minSizeString = CalamaresUtils::getString( pentry, "minSize" ); } if ( pentry.contains( "maxSize" ) && CalamaresUtils::getString( pentry, "maxSize" ).isEmpty() ) { maxSizeString.setNum( CalamaresUtils::getInteger( pentry, "maxSize", 0 ) ); } else { maxSizeString = CalamaresUtils::getString( pentry, "maxSize" ); } if ( !m_partLayout->addEntry( CalamaresUtils::getString( pentry, "name" ), CalamaresUtils::getString( pentry, "mountPoint" ), CalamaresUtils::getString( pentry, "filesystem" ), sizeString, minSizeString, maxSizeString ) ) { cError() << "Partition layout entry #" << config.indexOf( r ) << "is invalid, switching to default layout."; delete ( m_partLayout ); initLayout(); break; } } } void PartitionCoreModule::layoutApply( Device* dev, qint64 firstSector, qint64 lastSector, QString luksPassphrase, PartitionNode* parent, const PartitionRole& role ) { bool isEfi = PartUtils::isEfiSystem(); QList< Partition* > partList = m_partLayout->execute( dev, firstSector, lastSector, luksPassphrase, parent, role ); foreach ( Partition* part, partList ) { if ( part->mountPoint() == "/" ) { createPartition( dev, part, part->activeFlags() | ( isEfi ? KPM_PARTITION_FLAG( None ) : KPM_PARTITION_FLAG( Boot ) ) ); } else { createPartition( dev, part ); } } } void PartitionCoreModule::layoutApply( Device* dev, qint64 firstSector, qint64 lastSector, QString luksPassphrase ) { layoutApply( dev, firstSector, lastSector, luksPassphrase, dev->partitionTable(), PartitionRole( PartitionRole::Primary ) ); } void PartitionCoreModule::revert() { QMutexLocker locker( &m_revertMutex ); qDeleteAll( m_deviceInfos ); m_deviceInfos.clear(); doInit(); updateIsDirty(); emit reverted(); } void PartitionCoreModule::revertAllDevices() { for ( auto it = m_deviceInfos.begin(); it != m_deviceInfos.end(); ) { // In new VGs device info, there will be always a CreateVolumeGroupJob as the first job in jobs list if ( dynamic_cast< LvmDevice* >( ( *it )->device.data() ) ) { ( *it )->isAvailable = true; if ( !( *it )->jobs.empty() ) { CreateVolumeGroupJob* vgJob = dynamic_cast< CreateVolumeGroupJob* >( ( *it )->jobs[ 0 ].data() ); if ( vgJob ) { vgJob->undoPreview(); ( *it )->forgetChanges(); m_deviceModel->removeDevice( ( *it )->device.data() ); it = m_deviceInfos.erase( it ); continue; } } } revertDevice( ( *it )->device.data(), false ); ++it; } refreshAfterModelChange(); } void PartitionCoreModule::revertDevice( Device* dev, bool individualRevert ) { QMutexLocker locker( &m_revertMutex ); DeviceInfo* devInfo = infoForDevice( dev ); if ( !devInfo ) { return; } devInfo->forgetChanges(); CoreBackend* backend = CoreBackendManager::self()->backend(); Device* newDev = backend->scanDevice( devInfo->device->deviceNode() ); devInfo->device.reset( newDev ); devInfo->partitionModel->init( newDev, m_osproberLines ); m_deviceModel->swapDevice( dev, newDev ); QList< Device* > devices; for ( DeviceInfo* const info : m_deviceInfos ) { if ( info && !info->device.isNull() && info->device->type() == Device::Type::Disk_Device ) { devices.append( info->device.data() ); } } m_bootLoaderModel->init( devices ); if ( individualRevert ) { refreshAfterModelChange(); } emit deviceReverted( newDev ); } void PartitionCoreModule::asyncRevertDevice( Device* dev, std::function< void() > callback ) { QFutureWatcher< void >* watcher = new QFutureWatcher< void >(); connect( watcher, &QFutureWatcher< void >::finished, this, [watcher, callback] { callback(); watcher->deleteLater(); } ); QFuture< void > future = QtConcurrent::run( this, &PartitionCoreModule::revertDevice, dev, true ); watcher->setFuture( future ); } void PartitionCoreModule::clearJobs() { foreach ( DeviceInfo* deviceInfo, m_deviceInfos ) { deviceInfo->forgetChanges(); } updateIsDirty(); } bool PartitionCoreModule::isDirty() { return m_isDirty; } bool PartitionCoreModule::isVGdeactivated( LvmDevice* device ) { for ( DeviceInfo* deviceInfo : m_deviceInfos ) if ( device == deviceInfo->device.data() && !deviceInfo->isAvailable ) { return true; } return false; } QList< PartitionCoreModule::SummaryInfo > PartitionCoreModule::createSummaryInfo() const { QList< SummaryInfo > lst; for ( auto deviceInfo : m_deviceInfos ) { if ( !deviceInfo->isDirty() ) { continue; } SummaryInfo summaryInfo; summaryInfo.deviceName = deviceInfo->device->name(); summaryInfo.deviceNode = deviceInfo->device->deviceNode(); Device* deviceBefore = deviceInfo->immutableDevice.data(); summaryInfo.partitionModelBefore = new PartitionModel; summaryInfo.partitionModelBefore->init( deviceBefore, m_osproberLines ); // Make deviceBefore a child of partitionModelBefore so that it is not // leaked (as long as partitionModelBefore is deleted) deviceBefore->setParent( summaryInfo.partitionModelBefore ); summaryInfo.partitionModelAfter = new PartitionModel; summaryInfo.partitionModelAfter->init( deviceInfo->device.data(), m_osproberLines ); lst << summaryInfo; } return lst; } calamares-3.2.20/src/modules/partition/core/PartitionCoreModule.h000066400000000000000000000225701362604102500250340ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2014-2016, Teo Mrnjavac * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef PARTITIONCOREMODULE_H #define PARTITIONCOREMODULE_H #include "core/KPMHelpers.h" #include "core/PartitionLayout.h" #include "core/PartitionModel.h" #include "Job.h" #include "partition/KPMManager.h" // KPMcore #include #include // Qt #include #include #include #include class BootLoaderModel; class CreatePartitionJob; class Device; class DeviceModel; class FileSystem; class Partition; class QStandardItemModel; /** * The core of the module. * * It has two responsibilities: * - Listing the devices and partitions, creating Qt models for them. * - Creating jobs for any changes requested by the user interface. */ class PartitionCoreModule : public QObject { Q_OBJECT public: /** * This helper class calls refresh() on the module * on destruction (nothing else). It is used as * part of the model-consistency objects, along with * PartitionModel::ResetHelper. */ class RefreshHelper { public: RefreshHelper( PartitionCoreModule* module ); ~RefreshHelper(); RefreshHelper( const RefreshHelper& ) = delete; RefreshHelper& operator=( const RefreshHelper& ) = delete; private: PartitionCoreModule* m_module; }; /** * @brief The SummaryInfo struct is a wrapper for PartitionModel instances for * a given Device. * Each Device gets a mutable "after" model and an immutable "before" model. */ struct SummaryInfo { QString deviceName; QString deviceNode; PartitionModel* partitionModelBefore; PartitionModel* partitionModelAfter; }; PartitionCoreModule( QObject* parent = nullptr ); ~PartitionCoreModule(); /** * @brief init performs a devices scan and initializes all KPMcore data * structures. * This function is thread safe. */ void init(); /** * @brief deviceModel returns a model which exposes a list of available * storage devices. * @return the device model. */ DeviceModel* deviceModel() const; /** * @brief partitionModelForDevice returns the PartitionModel for the given device. * @param device the device for which to get a model. * @return a PartitionModel which represents the partitions of a device. */ PartitionModel* partitionModelForDevice( const Device* device ) const; //HACK: all devices change over time, and together make up the state of the CoreModule. // However this makes it hard to show the *original* state of a device. // For each DeviceInfo we keep a second Device object that contains the // current state of a disk regardless of subsequent changes. // -- Teo 4/2015 //FIXME: make this horrible method private. -- Teo 12/2015 Device* immutableDeviceCopy( const Device* device ); /** * @brief bootLoaderModel returns a model which represents the available boot * loader locations. * The single BootLoaderModel instance belongs to the PCM. * @return the BootLoaderModel. */ QAbstractItemModel* bootLoaderModel() const; void createPartitionTable( Device* device, PartitionTable::TableType type ); /** * @brief Add a job to do the actual partition-creation. * * If @p flags is not FlagNone, then the given flags are * applied to the newly-created partition. */ void createPartition( Device* device, Partition* partition, PartitionTable::Flags flags = KPM_PARTITION_FLAG( None ) ); void createVolumeGroup( QString& vgName, QVector< const Partition* > pvList, qint32 peSize ); void resizeVolumeGroup( LvmDevice* device, QVector< const Partition* >& pvList ); void deactivateVolumeGroup( LvmDevice* device ); void removeVolumeGroup( LvmDevice* device ); void deletePartition( Device* device, Partition* partition ); void formatPartition( Device* device, Partition* partition ); void resizePartition( Device* device, Partition* partition, qint64 first, qint64 last ); void setPartitionFlags( Device* device, Partition* partition, PartitionTable::Flags flags ); /// @brief Retrieve the path where the bootloader will be installed QString bootLoaderInstallPath() const { return m_bootLoaderInstallPath; } /// @brief Set the path where the bootloader will be installed void setBootLoaderInstallPath( const QString& path ); void initLayout(); void initLayout( const QVariantList& config ); void layoutApply( Device* dev, qint64 firstSector, qint64 lastSector, QString luksPassphrase ); void layoutApply( Device* dev, qint64 firstSector, qint64 lastSector, QString luksPassphrase, PartitionNode* parent, const PartitionRole& role ); /** * @brief jobs creates and returns a list of jobs which can then apply the changes * requested by the user. * @return a list of jobs. */ Calamares::JobList jobs() const; bool hasRootMountPoint() const; QList< Partition* > efiSystemPartitions() const; QVector< const Partition* > lvmPVs() const; bool hasVGwithThisName( const QString& name ) const; bool isInVG( const Partition* partition ) const; /** * @brief findPartitionByMountPoint returns a Partition* for a given mount point. * @param mountPoint the mount point to find a partition for. * @return a pointer to a Partition object. * Note that this function looks for partitions in live devices (the "proposed" * state), not the immutable copies. Comparisons with Partition* objects that * refer to immutable Device*s will fail. */ Partition* findPartitionByMountPoint( const QString& mountPoint ) const; void revert(); // full revert, thread safe, calls doInit void revertAllDevices(); // convenience function, calls revertDevice /** @brief rescans a single Device and updates DeviceInfo * * When @p individualRevert is true, calls refreshAfterModelChange(), * used to reduce number of refreshes when calling revertAllDevices(). */ void revertDevice( Device* dev, bool individualRevert = true ); void asyncRevertDevice( Device* dev, std::function< void() > callback ); //like revertDevice, but asynchronous void clearJobs(); // only clear jobs, the Device* states are preserved bool isDirty(); // true if there are pending changes, otherwise false bool isVGdeactivated( LvmDevice* device ); /** * To be called when a partition has been altered, but only for changes * which do not affect its size, because changes which affect the partition size * affect the size of other partitions as well. */ void refreshPartition( Device* device, Partition* partition ); /** * Returns a list of SummaryInfo for devices which have pending changes. * Caller is responsible for deleting the partition models */ QList< SummaryInfo > createSummaryInfo() const; const OsproberEntryList osproberEntries() const; // os-prober data structure, cached void dumpQueue() const; // debug output Q_SIGNALS: void hasRootMountPointChanged( bool value ); void isDirtyChanged( bool value ); void reverted(); void deviceReverted( Device* device ); private: CalamaresUtils::Partition::KPMManager m_kpmcore; void refreshAfterModelChange(); /** * Owns the Device, PartitionModel and the jobs */ struct DeviceInfo { DeviceInfo( Device* ); ~DeviceInfo(); QScopedPointer< Device > device; QScopedPointer< PartitionModel > partitionModel; const QScopedPointer< Device > immutableDevice; Calamares::JobList jobs; // To check if LVM VGs are deactivated bool isAvailable; void forgetChanges(); bool isDirty() const; }; QList< DeviceInfo* > m_deviceInfos; QList< Partition* > m_efiSystemPartitions; QVector< const Partition* > m_lvmPVs; DeviceModel* m_deviceModel; BootLoaderModel* m_bootLoaderModel; bool m_hasRootMountPoint = false; bool m_isDirty = false; QString m_bootLoaderInstallPath; PartitionLayout* m_partLayout; void doInit(); void updateHasRootMountPoint(); void updateIsDirty(); void scanForEfiSystemPartitions(); void scanForLVMPVs(); DeviceInfo* infoForDevice( const Device* ) const; OsproberEntryList m_osproberLines; QMutex m_revertMutex; }; #endif /* PARTITIONCOREMODULE_H */ calamares-3.2.20/src/modules/partition/core/PartitionInfo.cpp000066400000000000000000000050231362604102500242160ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "core/PartitionInfo.h" // KPMcore #include #include // Qt #include namespace PartitionInfo { static const char MOUNT_POINT_PROPERTY[] = "_calamares_mountPoint"; static const char FORMAT_PROPERTY[] = "_calamares_format"; static const char FLAGS_PROPERTY[] = "_calamares_flags"; QString mountPoint( Partition* partition ) { return partition->property( MOUNT_POINT_PROPERTY ).toString(); } void setMountPoint( Partition* partition, const QString& value ) { partition->setProperty( MOUNT_POINT_PROPERTY, value ); } bool format( Partition* partition ) { return partition->property( FORMAT_PROPERTY ).toBool(); } void setFormat( Partition* partition, bool value ) { partition->setProperty( FORMAT_PROPERTY, value ); } PartitionTable::Flags flags( const Partition* partition ) { auto v = partition->property( FLAGS_PROPERTY ); if ( v.type() == QVariant::Int ) { return static_cast< PartitionTable::Flags >( v.toInt() ); } return partition->activeFlags(); } void setFlags( Partition* partition, PartitionTable::Flags f ) { partition->setProperty( FLAGS_PROPERTY, PartitionTable::Flags::Int( f ) ); } void reset( Partition* partition ) { partition->setProperty( MOUNT_POINT_PROPERTY, QVariant() ); partition->setProperty( FORMAT_PROPERTY, QVariant() ); partition->setProperty( FLAGS_PROPERTY, QVariant() ); } bool isDirty( Partition* partition ) { if ( LvmDevice::s_DirtyPVs.contains( partition ) ) { return true; } return !mountPoint( partition ).isEmpty() || format( partition ) || flags( partition ) != partition->activeFlags(); } } // namespace PartitionInfo calamares-3.2.20/src/modules/partition/core/PartitionInfo.h000066400000000000000000000041571362604102500236720ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef PARTITIONINFO_H #define PARTITIONINFO_H #include #include #include class Partition; /** * Functions to store Calamares-specific information in the Qt properties of a * Partition object. * * See README.md for the rational behind this design. * * Properties: * - mountPoint: which directory will a partition be mounted on the installed * system. This is different from Partition::mountPoint, which is the * directory on which a partition is *currently* mounted while the installer * is running. * - format: whether this partition should be formatted at install time. */ namespace PartitionInfo { QString mountPoint( Partition* partition ); void setMountPoint( Partition* partition, const QString& value ); bool format( Partition* partition ); void setFormat( Partition* partition, bool value ); PartitionTable::Flags flags( const Partition* partition ); void setFlags( Partition* partition, PartitionTable::Flags f ); void reset( Partition* partition ); /** * Returns true if one of the property has been set. This information is used * by the UI to decide whether the "Revert" button should be enabled or * disabled. */ bool isDirty( Partition* partition ); }; // namespace PartitionInfo #endif /* PARTITIONINFO_H */ calamares-3.2.20/src/modules/partition/core/PartitionLayout.cpp000066400000000000000000000166471362604102500246160ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2017, Teo Mrnjavac * Copyright 2017-2018, Adriaan de Groot * Copyright 2018-2019, Collabora Ltd * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/Logger.h" #include "core/PartitionLayout.h" #include "core/KPMHelpers.h" #include "core/PartUtils.h" #include "core/PartitionActions.h" #include "core/PartitionInfo.h" #include #include #include static FileSystem::Type getDefaultFileSystemType() { Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); FileSystem::Type defaultFS = FileSystem::Ext4; if ( gs->contains( "defaultFileSystemType" ) ) { PartUtils::findFS( gs->value( "defaultFileSystemType" ).toString(), &defaultFS ); if ( defaultFS == FileSystem::Unknown ) { defaultFS = FileSystem::Ext4; } } return defaultFS; } PartitionLayout::PartitionLayout() { m_defaultFsType = getDefaultFileSystemType(); } PartitionLayout::PartitionLayout( PartitionLayout::PartitionEntry entry ) { m_defaultFsType = getDefaultFileSystemType(); m_partLayout.append( entry ); } PartitionLayout::PartitionLayout( const PartitionLayout& layout ) : m_defaultFsType( layout.m_defaultFsType ) , m_partLayout( layout.m_partLayout ) { } PartitionLayout::~PartitionLayout() {} bool PartitionLayout::addEntry( PartitionLayout::PartitionEntry entry ) { if ( !entry.isValid() ) { cError() << "Partition size is invalid or has min size > max size"; return false; } m_partLayout.append( entry ); return true; } PartitionLayout::PartitionEntry::PartitionEntry( const QString& size, const QString& min, const QString& max ) : partSize( size ) , partMinSize( min ) , partMaxSize( max ) { } bool PartitionLayout::addEntry( const QString& mountPoint, const QString& size, const QString& min, const QString& max ) { PartitionLayout::PartitionEntry entry( size, min, max ); if ( !entry.isValid() ) { cError() << "Partition size" << size << "is invalid or" << min << ">" << max; return false; } if ( mountPoint.isEmpty() || !mountPoint.startsWith( QString( "/" ) ) ) { cError() << "Partition mount point" << mountPoint << "is invalid"; return false; } entry.partMountPoint = mountPoint; entry.partFileSystem = m_defaultFsType; m_partLayout.append( entry ); return true; } bool PartitionLayout::addEntry( const QString& label, const QString& mountPoint, const QString& fs, const QString& size, const QString& min, const QString& max ) { PartitionLayout::PartitionEntry entry( size, min, max ); if ( !entry.isValid() ) { cError() << "Partition size" << size << "is invalid or" << min << ">" << max; return false; } if ( mountPoint.isEmpty() || !mountPoint.startsWith( QString( "/" ) ) ) { cError() << "Partition mount point" << mountPoint << "is invalid"; return false; } entry.partLabel = label; entry.partMountPoint = mountPoint; PartUtils::findFS( fs, &entry.partFileSystem ); if ( entry.partFileSystem == FileSystem::Unknown ) { entry.partFileSystem = m_defaultFsType; } m_partLayout.append( entry ); return true; } QList< Partition* > PartitionLayout::execute( Device* dev, qint64 firstSector, qint64 lastSector, QString luksPassphrase, PartitionNode* parent, const PartitionRole& role ) { QList< Partition* > partList; qint64 minSize, maxSize, end; qint64 totalSize = lastSector - firstSector + 1; qint64 availableSize = totalSize; // TODO: Refine partition sizes to make sure there is room for every partition // Use a default (200-500M ?) minimum size for partition without minSize foreach ( const PartitionLayout::PartitionEntry& part, m_partLayout ) { Partition* currentPartition = nullptr; qint64 size = -1; // Calculate partition size if ( part.partSize.isValid() ) { size = part.partSize.toSectors( totalSize, dev->logicalSize() ); } else { cWarning() << "Partition" << part.partMountPoint << "size (" << size << "sectors) is invalid, skipping..."; continue; } if ( part.partMinSize.isValid() ) { minSize = part.partMinSize.toSectors( totalSize, dev->logicalSize() ); } else { minSize = 0; } if ( part.partMaxSize.isValid() ) { maxSize = part.partMaxSize.toSectors( totalSize, dev->logicalSize() ); } else { maxSize = availableSize; } // Make sure we never go under minSize once converted to sectors if ( maxSize < minSize ) { cWarning() << "Partition" << part.partMountPoint << "max size (" << maxSize << "sectors) is < min size (" << minSize << "sectors), using min size"; maxSize = minSize; } // Adjust partition size based on user-defined boundaries and available space if ( size < minSize ) { size = minSize; } if ( size > maxSize ) { size = maxSize; } if ( size > availableSize ) { size = availableSize; } end = firstSector + size - 1; if ( luksPassphrase.isEmpty() ) { currentPartition = KPMHelpers::createNewPartition( parent, *dev, role, part.partFileSystem, firstSector, end, KPM_PARTITION_FLAG( None ) ); } else { currentPartition = KPMHelpers::createNewEncryptedPartition( parent, *dev, role, part.partFileSystem, firstSector, end, luksPassphrase, KPM_PARTITION_FLAG( None ) ); } PartitionInfo::setFormat( currentPartition, true ); PartitionInfo::setMountPoint( currentPartition, part.partMountPoint ); if ( !part.partLabel.isEmpty() ) { currentPartition->fileSystem().setLabel( part.partLabel ); } // Some buggy (legacy) BIOSes test if the bootflag of at least one partition is set. // Otherwise they ignore the device in boot-order, so add it here. partList.append( currentPartition ); firstSector = end + 1; availableSize -= size; } return partList; } calamares-3.2.20/src/modules/partition/core/PartitionLayout.h000066400000000000000000000063131362604102500242500ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018-2019, Collabora Ltd * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef PARTITIONLAYOUT_H #define PARTITIONLAYOUT_H #include "partition/PartitionSize.h" #include "core/PartUtils.h" // KPMcore #include #include // Qt #include #include class Partition; class PartitionLayout { public: struct PartitionEntry { QString partLabel; QString partMountPoint; FileSystem::Type partFileSystem = FileSystem::Unknown; CalamaresUtils::Partition::PartitionSize partSize; CalamaresUtils::Partition::PartitionSize partMinSize; CalamaresUtils::Partition::PartitionSize partMaxSize; /// @brief All-zeroes PartitionEntry PartitionEntry() {} /// @brief Parse @p size, @p min and @p max to their respective member variables PartitionEntry( const QString& size, const QString& min, const QString& max ); bool isValid() const { if ( !partSize.isValid() || ( partMinSize.isValid() && partMaxSize.isValid() && partMinSize > partMaxSize ) ) { return false; } return true; } }; PartitionLayout(); PartitionLayout( PartitionEntry entry ); PartitionLayout( const PartitionLayout& layout ); ~PartitionLayout(); bool addEntry( PartitionEntry entry ); bool addEntry( const QString& mountPoint, const QString& size, const QString& min = QString(), const QString& max = QString() ); bool addEntry( const QString& label, const QString& mountPoint, const QString& fs, const QString& size, const QString& min = QString(), const QString& max = QString() ); /** * @brief Apply the current partition layout to the selected drive space. * @return A list of Partition objects. */ QList< Partition* > execute( Device* dev, qint64 firstSector, qint64 lastSector, QString luksPassphrase, PartitionNode* parent, const PartitionRole& role ); private: FileSystem::Type m_defaultFsType; QList< PartitionEntry > m_partLayout; }; #endif /* PARTITIONLAYOUT_H */ calamares-3.2.20/src/modules/partition/core/PartitionModel.cpp000066400000000000000000000237031362604102500243700ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2018-2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "core/PartitionModel.h" #include "core/ColorUtils.h" #include "core/KPMHelpers.h" #include "core/PartitionInfo.h" #include "partition/FileSystem.h" #include "partition/PartitionQuery.h" #include "utils/Logger.h" // CalaPM #include #include #include #include // KF5 #include // Qt #include using CalamaresUtils::Partition::isPartitionFreeSpace; using CalamaresUtils::Partition::isPartitionNew; //- ResetHelper -------------------------------------------- PartitionModel::ResetHelper::ResetHelper( PartitionModel* model ) : m_model( model ) { m_model->m_lock.lock(); m_model->beginResetModel(); } PartitionModel::ResetHelper::~ResetHelper() { // We need to unlock the mutex before emitting the reset signal, // because the reset will cause clients to start looking at the // (new) data. m_model->m_lock.unlock(); m_model->endResetModel(); } //- PartitionModel ----------------------------------------- PartitionModel::PartitionModel( QObject* parent ) : QAbstractItemModel( parent ) , m_device( nullptr ) { } void PartitionModel::init( Device* device, const OsproberEntryList& osproberEntries ) { QMutexLocker lock( &m_lock ); beginResetModel(); m_device = device; m_osproberEntries = osproberEntries; endResetModel(); } int PartitionModel::columnCount( const QModelIndex& ) const { return ColumnCount; } int PartitionModel::rowCount( const QModelIndex& parent ) const { Partition* parentPartition = partitionForIndex( parent ); if ( parentPartition ) { return parentPartition->children().count(); } PartitionTable* table = m_device->partitionTable(); return table ? table->children().count() : 0; } QModelIndex PartitionModel::index( int row, int column, const QModelIndex& parent ) const { PartitionNode* parentPartition = parent.isValid() ? static_cast< PartitionNode* >( partitionForIndex( parent ) ) : static_cast< PartitionNode* >( m_device->partitionTable() ); if ( !parentPartition ) { return QModelIndex(); } auto lst = parentPartition->children(); if ( row < 0 || row >= lst.count() ) { return QModelIndex(); } if ( column < 0 || column >= ColumnCount ) { return QModelIndex(); } Partition* partition = parentPartition->children().at( row ); return createIndex( row, column, partition ); } QModelIndex PartitionModel::parent( const QModelIndex& child ) const { if ( !child.isValid() ) { return QModelIndex(); } Partition* partition = partitionForIndex( child ); if ( !partition ) { return QModelIndex(); } PartitionNode* parentNode = partition->parent(); if ( parentNode == m_device->partitionTable() ) { return QModelIndex(); } int row = 0; for ( auto p : m_device->partitionTable()->children() ) { if ( parentNode == p ) { return createIndex( row, 0, parentNode ); } ++row; } cWarning() << "No parent found!"; return QModelIndex(); } QVariant PartitionModel::data( const QModelIndex& index, int role ) const { Partition* partition = partitionForIndex( index ); if ( !partition ) { return QVariant(); } switch ( role ) { case Qt::DisplayRole: { int col = index.column(); if ( col == NameColumn ) { if ( isPartitionFreeSpace( partition ) ) { return tr( "Free Space" ); } else { return isPartitionNew( partition ) ? tr( "New partition" ) : partition->partitionPath(); } } if ( col == FileSystemColumn ) { return CalamaresUtils::Partition::prettyNameForFileSystemType( partition->fileSystem().type() ); } if ( col == MountPointColumn ) { return PartitionInfo::mountPoint( partition ); } if ( col == SizeColumn ) { qint64 size = ( partition->lastSector() - partition->firstSector() + 1 ) * m_device->logicalSize(); return KFormat().formatByteSize( size ); } cDebug() << "Unknown column" << col; return QVariant(); } case Qt::DecorationRole: if ( index.column() == NameColumn ) { return ColorUtils::colorForPartition( partition ); } else { return QVariant(); } case Qt::ToolTipRole: { int col = index.column(); QString name; if ( col == NameColumn ) { if ( isPartitionFreeSpace( partition ) ) { name = tr( "Free Space" ); } else { name = isPartitionNew( partition ) ? tr( "New partition" ) : partition->partitionPath(); } } QString prettyFileSystem = CalamaresUtils::Partition::prettyNameForFileSystemType( partition->fileSystem().type() ); qint64 size = ( partition->lastSector() - partition->firstSector() + 1 ) * m_device->logicalSize(); QString prettySize = KFormat().formatByteSize( size ); return QVariant( name + " " + prettyFileSystem + " " + prettySize ); } case SizeRole: return ( partition->lastSector() - partition->firstSector() + 1 ) * m_device->logicalSize(); case IsFreeSpaceRole: return isPartitionFreeSpace( partition ); case IsPartitionNewRole: return isPartitionNew( partition ); case FileSystemLabelRole: if ( partition->fileSystem().supportGetLabel() != FileSystem::cmdSupportNone && !partition->fileSystem().label().isEmpty() ) { return partition->fileSystem().label(); } return QVariant(); case FileSystemTypeRole: return partition->fileSystem().type(); case PartitionPathRole: return partition->partitionPath(); case PartitionPtrRole: return qVariantFromValue( (void*)partition ); // Osprober roles: case OsproberNameRole: foreach ( const OsproberEntry& osproberEntry, m_osproberEntries ) if ( partition->fileSystem().supportGetUUID() != FileSystem::cmdSupportNone && !partition->fileSystem().uuid().isEmpty() && osproberEntry.uuid == partition->fileSystem().uuid() ) { return osproberEntry.prettyName; } return QVariant(); case OsproberPathRole: foreach ( const OsproberEntry& osproberEntry, m_osproberEntries ) if ( partition->fileSystem().supportGetUUID() != FileSystem::cmdSupportNone && !partition->fileSystem().uuid().isEmpty() && osproberEntry.uuid == partition->fileSystem().uuid() ) { return osproberEntry.path; } return QVariant(); case OsproberCanBeResizedRole: foreach ( const OsproberEntry& osproberEntry, m_osproberEntries ) if ( partition->fileSystem().supportGetUUID() != FileSystem::cmdSupportNone && !partition->fileSystem().uuid().isEmpty() && osproberEntry.uuid == partition->fileSystem().uuid() ) { return osproberEntry.canBeResized; } return QVariant(); case OsproberRawLineRole: foreach ( const OsproberEntry& osproberEntry, m_osproberEntries ) if ( partition->fileSystem().supportGetUUID() != FileSystem::cmdSupportNone && !partition->fileSystem().uuid().isEmpty() && osproberEntry.uuid == partition->fileSystem().uuid() ) { return osproberEntry.line; } return QVariant(); case OsproberHomePartitionPathRole: foreach ( const OsproberEntry& osproberEntry, m_osproberEntries ) if ( partition->fileSystem().supportGetUUID() != FileSystem::cmdSupportNone && !partition->fileSystem().uuid().isEmpty() && osproberEntry.uuid == partition->fileSystem().uuid() ) { return osproberEntry.homePath; } return QVariant(); // end Osprober roles. default: return QVariant(); } } QVariant PartitionModel::headerData( int section, Qt::Orientation, int role ) const { if ( role != Qt::DisplayRole ) { return QVariant(); } switch ( section ) { case NameColumn: return tr( "Name" ); case FileSystemColumn: return tr( "File System" ); case MountPointColumn: return tr( "Mount Point" ); case SizeColumn: return tr( "Size" ); default: cDebug() << "Unknown column" << section; return QVariant(); } } Partition* PartitionModel::partitionForIndex( const QModelIndex& index ) const { QMutexLocker lock( &m_lock ); if ( !index.isValid() ) { return nullptr; } return reinterpret_cast< Partition* >( index.internalPointer() ); } void PartitionModel::update() { emit dataChanged( index( 0, 0 ), index( rowCount() - 1, columnCount() - 1 ) ); } calamares-3.2.20/src/modules/partition/core/PartitionModel.h000066400000000000000000000075611362604102500240410ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2017, 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef PARTITIONMODEL_H #define PARTITIONMODEL_H #include "OsproberEntry.h" // Qt #include #include class Device; class Partition; class PartitionNode; /** * A Qt tree model which exposes the partitions of a device. * * Its depth is only more than 1 if the device has extended partitions. * * Note on updating: * * The Device class does not notify the outside world of changes on the * Partition objects it owns. Since a Qt model must notify its views *before* * and *after* making changes, it is important to make use of * the PartitionModel::ResetHelper class to wrap changes. * * This is what PartitionCoreModule does when it create jobs. */ class PartitionModel : public QAbstractItemModel { Q_OBJECT public: /** * This helper class must be instantiated on the stack *before* making * changes to the device represented by this model. It will cause the model * to emit modelAboutToBeReset() when instantiated and modelReset() when * destructed. */ class ResetHelper { public: ResetHelper( PartitionModel* model ); ~ResetHelper(); ResetHelper( const ResetHelper& ) = delete; ResetHelper& operator=( const ResetHelper& ) = delete; private: PartitionModel* m_model; }; enum { // The raw size, as a qlonglong. This is different from the DisplayRole of // SizeColumn, which is a human-readable string. SizeRole = Qt::UserRole + 1, IsFreeSpaceRole, IsPartitionNewRole, FileSystemLabelRole, FileSystemTypeRole, PartitionPathRole, PartitionPtrRole, // passed as void*, use sparingly OsproberNameRole, OsproberPathRole, OsproberCanBeResizedRole, OsproberRawLineRole, OsproberHomePartitionPathRole }; enum Column { NameColumn, FileSystemColumn, MountPointColumn, SizeColumn, ColumnCount // Must remain last }; PartitionModel( QObject* parent = nullptr ); /** * device must remain alive for the life of PartitionModel */ void init( Device* device, const OsproberEntryList& osproberEntries ); // QAbstractItemModel API QModelIndex index( int row, int column, const QModelIndex& parent = QModelIndex() ) const override; QModelIndex parent( const QModelIndex& child ) const override; int columnCount( const QModelIndex& parent = QModelIndex() ) const override; int rowCount( const QModelIndex& parent = QModelIndex() ) const override; QVariant data( const QModelIndex& index, int role = Qt::DisplayRole ) const override; QVariant headerData( int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const override; Partition* partitionForIndex( const QModelIndex& index ) const; Device* device() const { return m_device; } void update(); private: friend class ResetHelper; Device* m_device; OsproberEntryList m_osproberEntries; mutable QMutex m_lock; }; #endif /* PARTITIONMODEL_H */ calamares-3.2.20/src/modules/partition/gui/000077500000000000000000000000001362604102500205615ustar00rootroot00000000000000calamares-3.2.20/src/modules/partition/gui/BootInfoWidget.cpp000066400000000000000000000104361362604102500241540ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2015-2016, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "BootInfoWidget.h" #include "core/PartUtils.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Retranslator.h" #include #include #include BootInfoWidget::BootInfoWidget( QWidget* parent ) : QWidget( parent ) , m_bootIcon( new QLabel ) , m_bootLabel( new QLabel ) { m_bootIcon->setObjectName("bootInfoIcon"); m_bootLabel->setObjectName("bootInfoLabel"); QHBoxLayout* mainLayout = new QHBoxLayout; setLayout( mainLayout ); CalamaresUtils::unmarginLayout( mainLayout ); mainLayout->addWidget( m_bootIcon ); mainLayout->addWidget( m_bootLabel ); QSize iconSize = CalamaresUtils::defaultIconSize(); m_bootIcon->setMargin( 0 ); m_bootIcon->setFixedSize( iconSize ); m_bootIcon->setPixmap( CalamaresUtils::defaultPixmap( CalamaresUtils::BootEnvironment, CalamaresUtils::Original, iconSize ) ); QFontMetrics fm = QFontMetrics( QFont() ); m_bootLabel->setMinimumWidth( fm.boundingRect( "BIOS" ).width() + CalamaresUtils::defaultFontHeight() / 2 ); m_bootLabel->setAlignment( Qt::AlignCenter ); QPalette palette; palette.setBrush( QPalette::Foreground, QColor( "#4D4D4D" ) ); //dark grey m_bootIcon->setAutoFillBackground( true ); m_bootLabel->setAutoFillBackground( true ); m_bootIcon->setPalette( palette ); m_bootLabel->setPalette( palette ); CALAMARES_RETRANSLATE( retranslateUi(); ) } void BootInfoWidget::retranslateUi() { m_bootIcon->setToolTip( tr( "The boot environment of this system.

" "Older x86 systems only support BIOS.
" "Modern systems usually use EFI, but " "may also show up as BIOS if started in compatibility " "mode." ) ); QString bootToolTip; if ( PartUtils::isEfiSystem() ) { m_bootLabel->setText( "EFI " ); bootToolTip = tr( "This system was started with an EFI " "boot environment.

" "To configure startup from an EFI environment, this installer " "must deploy a boot loader application, like GRUB" " or systemd-boot on an " "EFI System Partition. This is automatic, unless " "you choose manual partitioning, in which case you must " "choose it or create it on your own." ); } else { m_bootLabel->setText( "BIOS" ); bootToolTip = tr( "This system was started with a BIOS " "boot environment.

" "To configure startup from a BIOS environment, this installer " "must install a boot loader, like GRUB" ", either at the beginning of a partition or " "on the Master Boot Record near the " "beginning of the partition table (preferred). " "This is automatic, unless " "you choose manual partitioning, in which case you must " "set it up on your own." ); } m_bootLabel->setToolTip( bootToolTip ); } calamares-3.2.20/src/modules/partition/gui/BootInfoWidget.h000066400000000000000000000021531362604102500236160ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2015-2016, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef BOOTINFOWIDGET_H #define BOOTINFOWIDGET_H #include class QLabel; class BootInfoWidget : public QWidget { Q_OBJECT public: explicit BootInfoWidget( QWidget* parent = nullptr ); public slots: void retranslateUi(); private: QLabel* m_bootIcon; QLabel* m_bootLabel; }; #endif // BOOTINFOWIDGET_H calamares-3.2.20/src/modules/partition/gui/ChoicePage.cpp000066400000000000000000001555651362604102500232750ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2017, Teo Mrnjavac * Copyright 2017-2019, Adriaan de Groot * Copyright 2019, Collabora Ltd * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "ChoicePage.h" #include "core/BootLoaderModel.h" #include "core/DeviceModel.h" #include "core/KPMHelpers.h" #include "core/OsproberEntry.h" #include "core/PartUtils.h" #include "core/PartitionActions.h" #include "core/PartitionCoreModule.h" #include "core/PartitionInfo.h" #include "core/PartitionModel.h" #include "BootInfoWidget.h" #include "DeviceInfoWidget.h" #include "PartitionBarsView.h" #include "PartitionLabelsView.h" #include "PartitionSplitterWidget.h" #include "PrettyRadioButton.h" #include "ReplaceWidget.h" #include "ScanningDialog.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "partition/PartitionIterator.h" #include "partition/PartitionQuery.h" #include "utils/Logger.h" #include "utils/Retranslator.h" #include "utils/Units.h" #include "Branding.h" #include "utils/CalamaresUtilsGui.h" #include #include #ifdef WITH_KPMCORE4API #include #endif #include #include #include #include #include #include #include #include using PartitionActions::Choices::SwapChoice; using CalamaresUtils::Partition::PartitionIterator; using CalamaresUtils::Partition::isPartitionFreeSpace; using CalamaresUtils::Partition::findPartitionByPath; /** @brief Given a set of swap choices, return a sensible value from it. * * "Sensible" here means: if there is one value, use it; otherwise, use * NoSwap if there are no choices, or if NoSwap is one of the choices, in the set. * If that's not possible, any value from the set. */ SwapChoice pickOne( const SwapChoiceSet& s ) { if ( s.count() == 0 ) return SwapChoice::NoSwap; if ( s.count() == 1 ) return *( s.begin() ); if ( s.contains( SwapChoice::NoSwap ) ) return SwapChoice::NoSwap; // Here, count > 1 but NoSwap is not a member. return *( s.begin() ); } /** * @brief ChoicePage::ChoicePage is the default constructor. Called on startup as part of * the module loading code path. * @param parent the QWidget parent. */ ChoicePage::ChoicePage( const SwapChoiceSet& swapChoices, QWidget* parent ) : QWidget( parent ) , m_nextEnabled( false ) , m_core( nullptr ) , m_choice( NoChoice ) , m_isEfi( false ) , m_grp( nullptr ) , m_alongsideButton( nullptr ) , m_eraseButton( nullptr ) , m_replaceButton( nullptr ) , m_somethingElseButton( nullptr ) , m_eraseSwapChoiceComboBox( nullptr ) , m_deviceInfoWidget( nullptr ) , m_beforePartitionBarsView( nullptr ) , m_beforePartitionLabelsView( nullptr ) , m_bootloaderComboBox( nullptr ) , m_lastSelectedDeviceIndex( -1 ) , m_enableEncryptionWidget( true ) , m_availableSwapChoices( swapChoices ) , m_eraseSwapChoice( pickOne( swapChoices ) ) , m_allowManualPartitioning( true ) { setupUi( this ); auto gs = Calamares::JobQueue::instance()->globalStorage(); m_defaultFsType = gs->value( "defaultFileSystemType" ).toString(); m_enableEncryptionWidget = gs->value( "enableLuksAutomatedPartitioning" ).toBool(); m_allowManualPartitioning = gs->value( "allowManualPartitioning" ).toBool(); if ( FileSystem::typeForName( m_defaultFsType ) == FileSystem::Unknown ) m_defaultFsType = "ext4"; // Set up drives combo m_mainLayout->setDirection( QBoxLayout::TopToBottom ); m_drivesLayout->setDirection( QBoxLayout::LeftToRight ); BootInfoWidget* bootInfoWidget = new BootInfoWidget( this ); m_drivesLayout->insertWidget( 0, bootInfoWidget ); m_drivesLayout->insertSpacing( 1, CalamaresUtils::defaultFontHeight() / 2 ); m_drivesCombo = new QComboBox( this ); m_mainLayout->setStretchFactor( m_drivesLayout, 0 ); m_mainLayout->setStretchFactor( m_rightLayout, 1 ); m_drivesLabel->setBuddy( m_drivesCombo ); m_drivesLayout->addWidget( m_drivesCombo ); m_deviceInfoWidget = new DeviceInfoWidget; m_drivesLayout->addWidget( m_deviceInfoWidget ); m_drivesLayout->addStretch(); m_messageLabel->setWordWrap( true ); m_messageLabel->hide(); CalamaresUtils::unmarginLayout( m_itemsLayout ); // Drive selector + preview CALAMARES_RETRANSLATE( retranslateUi( this ); m_drivesLabel->setText( tr( "Select storage de&vice:" ) ); m_previewBeforeLabel->setText( tr( "Current:" ) ); m_previewAfterLabel->setText( tr( "After:" ) ); ) m_previewBeforeFrame->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Expanding ); m_previewAfterFrame->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Expanding ); m_previewAfterLabel->hide(); m_previewAfterFrame->hide(); m_encryptWidget->hide(); m_reuseHomeCheckBox->hide(); gs->insert( "reuseHome", false ); } ChoicePage::~ChoicePage() {} void ChoicePage::init( PartitionCoreModule* core ) { m_core = core; m_isEfi = PartUtils::isEfiSystem(); setupChoices(); // We need to do this because a PCM revert invalidates the deviceModel. connect( core, &PartitionCoreModule::reverted, this, [=] { m_drivesCombo->setModel( core->deviceModel() ); m_drivesCombo->setCurrentIndex( m_lastSelectedDeviceIndex ); } ); m_drivesCombo->setModel( core->deviceModel() ); connect( m_drivesCombo, static_cast< void ( QComboBox::* )( int ) >( &QComboBox::currentIndexChanged ), this, &ChoicePage::applyDeviceChoice ); connect( m_encryptWidget, &EncryptWidget::stateChanged, this, &ChoicePage::onEncryptWidgetStateChanged ); connect( m_reuseHomeCheckBox, &QCheckBox::stateChanged, this, &ChoicePage::onHomeCheckBoxStateChanged ); ChoicePage::applyDeviceChoice(); } /** @brief Creates a combobox with the given choices in it. * * Pre-selects the choice given by @p dflt. * No texts are set -- that happens later by the translator functions. */ static inline QComboBox* createCombo( const QSet< SwapChoice >& s, SwapChoice dflt ) { QComboBox* box = new QComboBox; for ( SwapChoice c : { SwapChoice::NoSwap, SwapChoice::SmallSwap, SwapChoice::FullSwap, SwapChoice::ReuseSwap, SwapChoice::SwapFile } ) if ( s.contains( c ) ) box->addItem( QString(), c ); int dfltIndex = box->findData( dflt ); if ( dfltIndex >= 0 ) box->setCurrentIndex( dfltIndex ); return box; } /** * @brief ChoicePage::setupChoices creates PrettyRadioButton objects for the action * choices. * @warning This must only run ONCE because it creates signal-slot connections for the * actions. When an action is triggered, it runs action-specific code that may * change the internal state of the PCM, and it updates the bottom preview (or * split) widget. * Synchronous loading ends here. */ void ChoicePage::setupChoices() { // sample os-prober output: // /dev/sda2:Windows 7 (loader):Windows:chain // /dev/sda6::Arch:linux // // There are three possibilities we have to consider: // - There are no operating systems present // - There is one operating system present // - There are multiple operating systems present // // There are three outcomes we have to provide: // 1) Wipe+autopartition // 2) Resize+autopartition // 3) Manual // TBD: upgrade option? QSize iconSize( CalamaresUtils::defaultIconSize().width() * 2, CalamaresUtils::defaultIconSize().height() * 2 ); m_grp = new QButtonGroup( this ); m_alongsideButton = new PrettyRadioButton; m_alongsideButton->setIconSize( iconSize ); m_alongsideButton->setIcon( CalamaresUtils::defaultPixmap( CalamaresUtils::PartitionAlongside, CalamaresUtils::Original, iconSize ) ); m_grp->addButton( m_alongsideButton->buttonWidget(), Alongside ); m_eraseButton = new PrettyRadioButton; m_eraseButton->setIconSize( iconSize ); m_eraseButton->setIcon( CalamaresUtils::defaultPixmap( CalamaresUtils::PartitionEraseAuto, CalamaresUtils::Original, iconSize ) ); m_grp->addButton( m_eraseButton->buttonWidget(), Erase ); m_replaceButton = new PrettyRadioButton; m_replaceButton->setIconSize( iconSize ); m_replaceButton->setIcon( CalamaresUtils::defaultPixmap( CalamaresUtils::PartitionReplaceOs, CalamaresUtils::Original, iconSize ) ); m_grp->addButton( m_replaceButton->buttonWidget(), Replace ); // Fill up swap options // .. TODO: only if enabled in the config if ( m_availableSwapChoices.count() > 1 ) { m_eraseSwapChoiceComboBox = createCombo( m_availableSwapChoices, m_eraseSwapChoice ); m_eraseButton->addOptionsComboBox( m_eraseSwapChoiceComboBox ); } m_itemsLayout->addWidget( m_alongsideButton ); m_itemsLayout->addWidget( m_replaceButton ); m_itemsLayout->addWidget( m_eraseButton ); m_somethingElseButton = new PrettyRadioButton; m_somethingElseButton->setIconSize( iconSize ); m_somethingElseButton->setIcon( CalamaresUtils::defaultPixmap( CalamaresUtils::PartitionManual, CalamaresUtils::Original, iconSize ) ); m_itemsLayout->addWidget( m_somethingElseButton ); m_grp->addButton( m_somethingElseButton->buttonWidget(), Manual ); m_itemsLayout->addStretch(); connect( m_grp, QOverload::of( &QButtonGroup::buttonToggled ), this, [ this ]( int id, bool checked ) { if ( checked ) // An action was picked. { m_choice = static_cast< InstallChoice >( id ); updateNextEnabled(); emit actionChosen(); } else // An action was unpicked, either on its own or because of another selection. { if ( m_grp->checkedButton() == nullptr ) // If no other action is chosen, we must { // set m_choice to NoChoice and reset previews. m_choice = NoChoice; updateNextEnabled(); emit actionChosen(); } } } ); m_rightLayout->setStretchFactor( m_itemsLayout, 1 ); m_rightLayout->setStretchFactor( m_previewBeforeFrame, 0 ); m_rightLayout->setStretchFactor( m_previewAfterFrame, 0 ); connect( this, &ChoicePage::actionChosen, this, &ChoicePage::onActionChanged ); if ( m_eraseSwapChoiceComboBox ) connect( m_eraseSwapChoiceComboBox, QOverload::of(&QComboBox::currentIndexChanged), this, &ChoicePage::onEraseSwapChoiceChanged ); CALAMARES_RETRANSLATE( m_somethingElseButton->setText( tr( "Manual partitioning
" "You can create or resize partitions yourself." ) ); updateSwapChoicesTr( m_eraseSwapChoiceComboBox ); ) } /** * @brief ChoicePage::selectedDevice queries the device picker (which may be a combo or * a list view) to get a pointer to the currently selected Device. * @return a Device pointer, valid in the current state of the PCM, or nullptr if * something goes wrong. */ Device* ChoicePage::selectedDevice() { Device* currentDevice = nullptr; currentDevice = m_core->deviceModel()->deviceForIndex( m_core->deviceModel()->index( m_drivesCombo->currentIndex() ) ); return currentDevice; } void ChoicePage::hideButtons() { m_eraseButton->hide(); m_replaceButton->hide(); m_alongsideButton->hide(); m_somethingElseButton->hide(); } /** * @brief ChoicePage::applyDeviceChoice handler for the selected event of the device * picker. Calls ChoicePage::selectedDevice() to get the current Device*, then * updates the preview widget for the on-disk state (calls ChoicePage:: * updateDeviceStatePreview()) and finally sets up the available actions and their * text by calling ChoicePage::setupActions(). */ void ChoicePage::applyDeviceChoice() { if ( !selectedDevice() ) { hideButtons(); return; } if ( m_core->isDirty() ) { ScanningDialog::run( QtConcurrent::run( [ = ] { QMutexLocker locker( &m_coreMutex ); m_core->revertAllDevices(); } ), [ this ] { continueApplyDeviceChoice(); }, this ); } else { continueApplyDeviceChoice(); } } void ChoicePage::continueApplyDeviceChoice() { Device* currd = selectedDevice(); // The device should only be nullptr immediately after a PCM reset. // applyDeviceChoice() will be called again momentarily as soon as we handle the // PartitionCoreModule::reverted signal. if ( !currd ) { hideButtons(); return; } updateDeviceStatePreview(); // Preview setup done. Now we show/hide choices as needed. setupActions(); m_lastSelectedDeviceIndex = m_drivesCombo->currentIndex(); emit actionChosen(); emit deviceChosen(); } void ChoicePage::onActionChanged() { Device* currd = selectedDevice(); if ( currd ) { applyActionChoice( currentChoice() ); } } void ChoicePage::onEraseSwapChoiceChanged() { if ( m_eraseSwapChoiceComboBox ) { m_eraseSwapChoice = static_cast( m_eraseSwapChoiceComboBox->currentData().toInt() ); onActionChanged(); } } void ChoicePage::applyActionChoice( ChoicePage::InstallChoice choice ) { m_beforePartitionBarsView->selectionModel()-> disconnect( SIGNAL( currentRowChanged( QModelIndex, QModelIndex ) ) ); m_beforePartitionBarsView->selectionModel()->clearSelection(); m_beforePartitionBarsView->selectionModel()->clearCurrentIndex(); switch ( choice ) { case Erase: { auto gs = Calamares::JobQueue::instance()->globalStorage(); PartitionActions::Choices::AutoPartitionOptions options { gs->value( "defaultFileSystemType" ).toString(), m_encryptWidget->passphrase(), gs->value( "efiSystemPartition" ).toString(), CalamaresUtils::GiBtoBytes( gs->value( "requiredStorageGiB" ).toDouble() ), m_eraseSwapChoice }; if ( m_core->isDirty() ) { ScanningDialog::run( QtConcurrent::run( [ = ] { QMutexLocker locker( &m_coreMutex ); m_core->revertDevice( selectedDevice() ); } ), [ = ] { PartitionActions::doAutopartition( m_core, selectedDevice(), options ); emit deviceChosen(); }, this ); } else { PartitionActions::doAutopartition( m_core, selectedDevice(), options ); emit deviceChosen(); } } break; case Replace: if ( m_core->isDirty() ) { ScanningDialog::run( QtConcurrent::run( [ = ] { QMutexLocker locker( &m_coreMutex ); m_core->revertDevice( selectedDevice() ); } ), []{}, this ); } updateNextEnabled(); connect( m_beforePartitionBarsView->selectionModel(), SIGNAL( currentRowChanged( QModelIndex, QModelIndex ) ), this, SLOT( onPartitionToReplaceSelected( QModelIndex, QModelIndex ) ), Qt::UniqueConnection ); break; case Alongside: if ( m_core->isDirty() ) { ScanningDialog::run( QtConcurrent::run( [ = ] { QMutexLocker locker( &m_coreMutex ); m_core->revertDevice( selectedDevice() ); } ), [this] { // We need to reupdate after reverting because the splitter widget is // not a true view. updateActionChoicePreview( currentChoice() ); updateNextEnabled(); }, this ); } updateNextEnabled(); connect( m_beforePartitionBarsView->selectionModel(), SIGNAL( currentRowChanged( QModelIndex, QModelIndex ) ), this, SLOT( doAlongsideSetupSplitter( QModelIndex, QModelIndex ) ), Qt::UniqueConnection ); break; case NoChoice: case Manual: break; } updateActionChoicePreview( choice ); } void ChoicePage::doAlongsideSetupSplitter( const QModelIndex& current, const QModelIndex& previous ) { Q_UNUSED( previous ) if ( !current.isValid() ) return; if ( !m_afterPartitionSplitterWidget ) return; const PartitionModel* modl = qobject_cast< const PartitionModel* >( current.model() ); if ( !modl ) return; Partition* part = modl->partitionForIndex( current ); if ( !part ) { cDebug() << Q_FUNC_INFO << "Partition not found for index" << current; return; } double requiredStorageGB = Calamares::JobQueue::instance() ->globalStorage() ->value( "requiredStorageGiB" ) .toDouble(); qint64 requiredStorageB = CalamaresUtils::GiBtoBytes( requiredStorageGB + 0.1 + 2.0 ); m_afterPartitionSplitterWidget->setSplitPartition( part->partitionPath(), qRound64( part->used() * 1.1 ), part->capacity() - requiredStorageB, part->capacity() / 2 ); if ( m_isEfi ) setupEfiSystemPartitionSelector(); cDebug() << "Partition selected for Alongside."; updateNextEnabled(); } void ChoicePage::onEncryptWidgetStateChanged() { EncryptWidget::State state = m_encryptWidget->state(); if ( m_choice == Erase ) { if ( state == EncryptWidget::EncryptionConfirmed || state == EncryptWidget::EncryptionDisabled ) applyActionChoice( m_choice ); } else if ( m_choice == Replace ) { if ( m_beforePartitionBarsView && m_beforePartitionBarsView->selectionModel()->currentIndex().isValid() && ( state == EncryptWidget::EncryptionConfirmed || state == EncryptWidget::EncryptionDisabled ) ) { doReplaceSelectedPartition( m_beforePartitionBarsView-> selectionModel()-> currentIndex() ); } } updateNextEnabled(); } void ChoicePage::onHomeCheckBoxStateChanged() { if ( currentChoice() == Replace && m_beforePartitionBarsView->selectionModel()->currentIndex().isValid() ) { doReplaceSelectedPartition( m_beforePartitionBarsView-> selectionModel()-> currentIndex() ); } } void ChoicePage::onLeave() { if ( m_choice == Alongside ) doAlongsideApply(); if ( m_isEfi && ( m_choice == Alongside || m_choice == Replace ) ) { QList< Partition* > efiSystemPartitions = m_core->efiSystemPartitions(); if ( efiSystemPartitions.count() == 1 ) { PartitionInfo::setMountPoint( efiSystemPartitions.first(), Calamares::JobQueue::instance()-> globalStorage()-> value( "efiSystemPartition" ).toString() ); } else if ( efiSystemPartitions.count() > 1 && m_efiComboBox ) { PartitionInfo::setMountPoint( efiSystemPartitions.at( m_efiComboBox->currentIndex() ), Calamares::JobQueue::instance()-> globalStorage()-> value( "efiSystemPartition" ).toString() ); } else { cError() << "cannot set up EFI system partition.\nESP count:" << efiSystemPartitions.count() << "\nm_efiComboBox:" << m_efiComboBox; } } else // installPath is then passed to the bootloader module for MBR setup { if ( !m_isEfi ) { if ( m_bootloaderComboBox.isNull() ) { auto d_p = selectedDevice(); if ( d_p ) m_core->setBootLoaderInstallPath( d_p->deviceNode() ); else cWarning() << "No device selected for bootloader."; } else { QVariant var = m_bootloaderComboBox->currentData( BootLoaderModel::BootLoaderPathRole ); if ( !var.isValid() ) return; m_core->setBootLoaderInstallPath( var.toString() ); } } } } void ChoicePage::doAlongsideApply() { Q_ASSERT( m_afterPartitionSplitterWidget->splitPartitionSize() >= 0 ); Q_ASSERT( m_afterPartitionSplitterWidget->newPartitionSize() >= 0 ); QMutexLocker locker( &m_coreMutex ); QString path = m_beforePartitionBarsView-> selectionModel()-> currentIndex().data( PartitionModel::PartitionPathRole ).toString(); DeviceModel* dm = m_core->deviceModel(); for ( int i = 0; i < dm->rowCount(); ++i ) { Device* dev = dm->deviceForIndex( dm->index( i ) ); Partition* candidate = findPartitionByPath( { dev }, path ); if ( candidate ) { qint64 firstSector = candidate->firstSector(); qint64 oldLastSector = candidate->lastSector(); qint64 newLastSector = firstSector + m_afterPartitionSplitterWidget->splitPartitionSize() / dev->logicalSize(); m_core->resizePartition( dev, candidate, firstSector, newLastSector ); m_core->layoutApply( dev, newLastSector + 2, oldLastSector, m_encryptWidget->passphrase(), candidate->parent(), candidate->roles() ); m_core->dumpQueue(); break; } } } void ChoicePage::onPartitionToReplaceSelected( const QModelIndex& current, const QModelIndex& previous ) { Q_UNUSED( previous ) if ( !current.isValid() ) return; // Reset state on selection regardless of whether this will be used. m_reuseHomeCheckBox->setChecked( false ); doReplaceSelectedPartition( current ); } void ChoicePage::doReplaceSelectedPartition( const QModelIndex& current ) { if ( !current.isValid() ) return; QString* homePartitionPath = new QString(); bool doReuseHomePartition = m_reuseHomeCheckBox->isChecked(); // NOTE: using by-ref captures because we need to write homePartitionPath and // doReuseHomePartition *after* the device revert, for later use. ScanningDialog::run( QtConcurrent::run( [ this, current ]( QString* homePartitionPath, bool doReuseHomePartition ) { QMutexLocker locker( &m_coreMutex ); if ( m_core->isDirty() ) { m_core->revertDevice( selectedDevice() ); } // if the partition is unallocated(free space), we don't replace it but create new one // with the same first and last sector Partition* selectedPartition = static_cast< Partition* >( current.data( PartitionModel::PartitionPtrRole ) .value< void* >() ); if ( isPartitionFreeSpace( selectedPartition ) ) { //NOTE: if the selected partition is free space, we don't deal with // a separate /home partition at all because there's no existing // rootfs to read it from. PartitionRole newRoles = PartitionRole( PartitionRole::Primary ); PartitionNode* newParent = selectedDevice()->partitionTable(); if ( selectedPartition->parent() ) { Partition* parent = dynamic_cast< Partition* >( selectedPartition->parent() ); if ( parent && parent->roles().has( PartitionRole::Extended ) ) { newRoles = PartitionRole( PartitionRole::Logical ); newParent = findPartitionByPath( { selectedDevice() }, parent->partitionPath() ); } } m_core->layoutApply( selectedDevice(), selectedPartition->firstSector(), selectedPartition->lastSector(), m_encryptWidget->passphrase(), newParent, newRoles ); } else { // We can't use the PartitionPtrRole because we need to make changes to the // main DeviceModel, not the immutable copy. QString partPath = current.data( PartitionModel::PartitionPathRole ).toString(); selectedPartition = findPartitionByPath( { selectedDevice() }, partPath ); if ( selectedPartition ) { // Find out is the selected partition has a rootfs. If yes, then make the // m_reuseHomeCheckBox visible and set its text to something meaningful. homePartitionPath->clear(); for ( const OsproberEntry& osproberEntry : m_core->osproberEntries() ) if ( osproberEntry.path == partPath ) *homePartitionPath = osproberEntry.homePath; if ( homePartitionPath->isEmpty() ) doReuseHomePartition = false; Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); PartitionActions::doReplacePartition( m_core, selectedDevice(), selectedPartition, { gs->value( "defaultFileSystemType" ).toString(), m_encryptWidget->passphrase() } ); Partition* homePartition = findPartitionByPath( { selectedDevice() }, *homePartitionPath ); if ( homePartition && doReuseHomePartition ) { PartitionInfo::setMountPoint( homePartition, "/home" ); gs->insert( "reuseHome", true ); } else { gs->insert( "reuseHome", false ); } } } }, homePartitionPath, doReuseHomePartition ), [ = ] { m_reuseHomeCheckBox->setVisible( !homePartitionPath->isEmpty() ); if ( !homePartitionPath->isEmpty() ) m_reuseHomeCheckBox->setText( tr( "Reuse %1 as home partition for %2." ) .arg( *homePartitionPath ) .arg( *Calamares::Branding::ShortProductName ) ); delete homePartitionPath; if ( m_isEfi ) setupEfiSystemPartitionSelector(); updateNextEnabled(); if ( !m_bootloaderComboBox.isNull() && m_bootloaderComboBox->currentIndex() < 0 ) m_bootloaderComboBox->setCurrentIndex( m_lastSelectedDeviceIndex ); }, this ); } /** * @brief ChoicePage::updateDeviceStatePreview clears and rebuilds the contents of the * preview widget for the current on-disk state. This also triggers a rescan in the * PCM to get a Device* copy that's unaffected by subsequent PCM changes. * @param currentDevice a pointer to the selected Device. */ void ChoicePage::updateDeviceStatePreview() { //FIXME: this needs to be made async because the rescan can block the UI thread for // a while. --Teo 10/2015 Device* currentDevice = selectedDevice(); Q_ASSERT( currentDevice ); QMutexLocker locker( &m_previewsMutex ); cDebug() << "Updating partitioning state widgets."; qDeleteAll( m_previewBeforeFrame->children() ); auto layout = m_previewBeforeFrame->layout(); if ( layout ) layout->deleteLater(); // Doesn't like nullptr layout = new QVBoxLayout; m_previewBeforeFrame->setLayout( layout ); CalamaresUtils::unmarginLayout( layout ); layout->setSpacing( 6 ); PartitionBarsView::NestedPartitionsMode mode = Calamares::JobQueue::instance()->globalStorage()-> value( "drawNestedPartitions" ).toBool() ? PartitionBarsView::DrawNestedPartitions : PartitionBarsView::NoNestedPartitions; m_beforePartitionBarsView = new PartitionBarsView( m_previewBeforeFrame ); m_beforePartitionBarsView->setNestedPartitionsMode( mode ); m_beforePartitionLabelsView = new PartitionLabelsView( m_previewBeforeFrame ); m_beforePartitionLabelsView->setExtendedPartitionHidden( mode == PartitionBarsView::NoNestedPartitions ); Device* deviceBefore = m_core->immutableDeviceCopy( currentDevice ); PartitionModel* model = new PartitionModel( m_beforePartitionBarsView ); model->init( deviceBefore, m_core->osproberEntries() ); m_beforePartitionBarsView->setModel( model ); m_beforePartitionLabelsView->setModel( model ); // Make the bars and labels view use the same selectionModel. auto sm = m_beforePartitionLabelsView->selectionModel(); m_beforePartitionLabelsView->setSelectionModel( m_beforePartitionBarsView->selectionModel() ); if ( sm ) sm->deleteLater(); switch ( m_choice ) { case Replace: case Alongside: m_beforePartitionBarsView->setSelectionMode( QAbstractItemView::SingleSelection ); m_beforePartitionLabelsView->setSelectionMode( QAbstractItemView::SingleSelection ); break; default: m_beforePartitionBarsView->setSelectionMode( QAbstractItemView::NoSelection ); m_beforePartitionLabelsView->setSelectionMode( QAbstractItemView::NoSelection ); } layout->addWidget( m_beforePartitionBarsView ); layout->addWidget( m_beforePartitionLabelsView ); } /** * @brief ChoicePage::updateActionChoicePreview clears and rebuilds the contents of the * preview widget for the current PCM-proposed state. No rescans here, this should * be immediate. * @param currentDevice a pointer to the selected Device. * @param choice the chosen partitioning action. */ void ChoicePage::updateActionChoicePreview( ChoicePage::InstallChoice choice ) { Device* currentDevice = selectedDevice(); Q_ASSERT( currentDevice ); QMutexLocker locker( &m_previewsMutex ); cDebug() << "Updating partitioning preview widgets."; qDeleteAll( m_previewAfterFrame->children() ); auto oldlayout = m_previewAfterFrame->layout(); if ( oldlayout ) oldlayout->deleteLater(); QVBoxLayout* layout = new QVBoxLayout; m_previewAfterFrame->setLayout( layout ); CalamaresUtils::unmarginLayout( layout ); layout->setSpacing( 6 ); PartitionBarsView::NestedPartitionsMode mode = Calamares::JobQueue::instance()->globalStorage()-> value( "drawNestedPartitions" ).toBool() ? PartitionBarsView::DrawNestedPartitions : PartitionBarsView::NoNestedPartitions; m_reuseHomeCheckBox->hide(); Calamares::JobQueue::instance()->globalStorage()->insert( "reuseHome", false ); switch ( choice ) { case Alongside: { if ( m_enableEncryptionWidget ) m_encryptWidget->show(); m_previewBeforeLabel->setText( tr( "Current:" ) ); m_selectLabel->setText( tr( "Select a partition to shrink, " "then drag the bottom bar to resize" ) ); m_selectLabel->show(); m_afterPartitionSplitterWidget = new PartitionSplitterWidget( m_previewAfterFrame ); m_afterPartitionSplitterWidget->init( selectedDevice(), mode == PartitionBarsView::DrawNestedPartitions ); layout->addWidget( m_afterPartitionSplitterWidget ); QLabel* sizeLabel = new QLabel( m_previewAfterFrame ); layout->addWidget( sizeLabel ); sizeLabel->setWordWrap( true ); connect( m_afterPartitionSplitterWidget, &PartitionSplitterWidget::partitionResized, this, [ this, sizeLabel ]( const QString& path, qint64 size, qint64 sizeNext ) { Q_UNUSED( path ) sizeLabel->setText( tr( "%1 will be shrunk to %2MiB and a new " "%3MiB partition will be created for %4." ) .arg( m_beforePartitionBarsView->selectionModel()->currentIndex().data().toString() ) .arg( CalamaresUtils::BytesToMiB( size ) ) .arg( CalamaresUtils::BytesToMiB( sizeNext ) ) .arg( *Calamares::Branding::ShortProductName ) ); } ); m_previewAfterFrame->show(); m_previewAfterLabel->show(); SelectionFilter filter = [ this ]( const QModelIndex& index ) { return PartUtils::canBeResized( static_cast< Partition* >( index.data( PartitionModel::PartitionPtrRole ) .value< void* >() ) ); }; m_beforePartitionBarsView->setSelectionFilter( filter ); m_beforePartitionLabelsView->setSelectionFilter( filter ); break; } case Erase: case Replace: { if ( m_enableEncryptionWidget ) m_encryptWidget->show(); m_previewBeforeLabel->setText( tr( "Current:" ) ); m_afterPartitionBarsView = new PartitionBarsView( m_previewAfterFrame ); m_afterPartitionBarsView->setNestedPartitionsMode( mode ); m_afterPartitionLabelsView = new PartitionLabelsView( m_previewAfterFrame ); m_afterPartitionLabelsView->setExtendedPartitionHidden( mode == PartitionBarsView::NoNestedPartitions ); m_afterPartitionLabelsView->setCustomNewRootLabel( *Calamares::Branding::BootloaderEntryName ); PartitionModel* model = m_core->partitionModelForDevice( selectedDevice() ); // The QObject parents tree is meaningful for memory management here, // see qDeleteAll above. m_afterPartitionBarsView->setModel( model ); m_afterPartitionLabelsView->setModel( model ); m_afterPartitionBarsView->setSelectionMode( QAbstractItemView::NoSelection ); m_afterPartitionLabelsView->setSelectionMode( QAbstractItemView::NoSelection ); layout->addWidget( m_afterPartitionBarsView ); layout->addWidget( m_afterPartitionLabelsView ); if ( !m_isEfi ) { QWidget* eraseWidget = new QWidget; QHBoxLayout* eraseLayout = new QHBoxLayout; eraseWidget->setLayout( eraseLayout ); eraseLayout->setContentsMargins( 0, 0, 0, 0 ); QLabel* eraseBootloaderLabel = new QLabel( eraseWidget ); eraseLayout->addWidget( eraseBootloaderLabel ); eraseBootloaderLabel->setText( tr( "Boot loader location:" ) ); m_bootloaderComboBox = createBootloaderComboBox( eraseWidget ); connect( m_core->bootLoaderModel(), &QAbstractItemModel::modelReset, [ this ]() { if ( !m_bootloaderComboBox.isNull() ) Calamares::restoreSelectedBootLoader( *m_bootloaderComboBox, m_core->bootLoaderInstallPath() ); } ); connect( m_core, &PartitionCoreModule::deviceReverted, this, [ this ]( Device* dev ) { Q_UNUSED( dev ) if ( !m_bootloaderComboBox.isNull() ) { if ( m_bootloaderComboBox->model() != m_core->bootLoaderModel() ) m_bootloaderComboBox->setModel( m_core->bootLoaderModel() ); m_bootloaderComboBox->setCurrentIndex( m_lastSelectedDeviceIndex ); } }, Qt::QueuedConnection ); // ^ Must be Queued so it's sure to run when the widget is already visible. eraseLayout->addWidget( m_bootloaderComboBox ); eraseBootloaderLabel->setBuddy( m_bootloaderComboBox ); eraseLayout->addStretch(); layout->addWidget( eraseWidget ); } m_previewAfterFrame->show(); m_previewAfterLabel->show(); if ( m_choice == Erase ) m_selectLabel->hide(); else { SelectionFilter filter = [ this ]( const QModelIndex& index ) { return PartUtils::canBeReplaced( static_cast< Partition* >( index.data( PartitionModel::PartitionPtrRole ) .value< void* >() ) ); }; m_beforePartitionBarsView->setSelectionFilter( filter ); m_beforePartitionLabelsView->setSelectionFilter( filter ); m_selectLabel->show(); m_selectLabel->setText( tr( "Select a partition to install on" ) ); } break; } case NoChoice: case Manual: m_selectLabel->hide(); m_previewAfterFrame->hide(); m_previewBeforeLabel->setText( tr( "Current:" ) ); m_previewAfterLabel->hide(); m_encryptWidget->hide(); break; } if ( m_isEfi && ( m_choice == Alongside || m_choice == Replace ) ) { QHBoxLayout* efiLayout = new QHBoxLayout; layout->addLayout( efiLayout ); m_efiLabel = new QLabel( m_previewAfterFrame ); efiLayout->addWidget( m_efiLabel ); m_efiComboBox = new QComboBox( m_previewAfterFrame ); efiLayout->addWidget( m_efiComboBox ); m_efiLabel->setBuddy( m_efiComboBox ); m_efiComboBox->hide(); efiLayout->addStretch(); } // Also handle selection behavior on beforeFrame. QAbstractItemView::SelectionMode previewSelectionMode; switch ( m_choice ) { case Replace: case Alongside: previewSelectionMode = QAbstractItemView::SingleSelection; break; default: previewSelectionMode = QAbstractItemView::NoSelection; } m_beforePartitionBarsView->setSelectionMode( previewSelectionMode ); m_beforePartitionLabelsView->setSelectionMode( previewSelectionMode ); } void ChoicePage::setupEfiSystemPartitionSelector() { Q_ASSERT( m_isEfi ); // Only the already existing ones: QList< Partition* > efiSystemPartitions = m_core->efiSystemPartitions(); if ( efiSystemPartitions.count() == 0 ) //should never happen { m_efiLabel->setText( tr( "An EFI system partition cannot be found anywhere " "on this system. Please go back and use manual " "partitioning to set up %1." ) .arg( *Calamares::Branding::ShortProductName ) ); updateNextEnabled(); } else if ( efiSystemPartitions.count() == 1 ) //probably most usual situation { m_efiLabel->setText( tr( "The EFI system partition at %1 will be used for " "starting %2." ) .arg( efiSystemPartitions.first()->partitionPath() ) .arg( *Calamares::Branding::ShortProductName ) ); } else { m_efiComboBox->show(); m_efiLabel->setText( tr( "EFI system partition:" ) ); for ( int i = 0; i < efiSystemPartitions.count(); ++i ) { Partition* efiPartition = efiSystemPartitions.at( i ); m_efiComboBox->addItem( efiPartition->partitionPath(), i ); // We pick an ESP on the currently selected device, if possible if ( efiPartition->devicePath() == selectedDevice()->deviceNode() && efiPartition->number() == 1 ) m_efiComboBox->setCurrentIndex( i ); } } } QComboBox* ChoicePage::createBootloaderComboBox( QWidget* parent ) { QComboBox* bcb = new QComboBox( parent ); bcb->setModel( m_core->bootLoaderModel() ); // When the chosen bootloader device changes, we update the choice in the PCM connect( bcb, QOverload::of( &QComboBox::currentIndexChanged ), this, [this]( int newIndex ) { QComboBox* bcb = qobject_cast< QComboBox* >( sender() ); if ( bcb ) { QVariant var = bcb->itemData( newIndex, BootLoaderModel::BootLoaderPathRole ); if ( !var.isValid() ) return; m_core->setBootLoaderInstallPath( var.toString() ); } } ); return bcb; } static inline void force_uncheck(QButtonGroup* grp, PrettyRadioButton* button) { button->hide(); grp->setExclusive( false ); button->buttonWidget()->setChecked( false ); grp->setExclusive( true ); } static inline QDebug& operator <<( QDebug& s, PartitionIterator& it ) { s << ( ( *it ) ? ( *it )->deviceNode() : QString( "" ) ); return s; } /** * @brief ChoicePage::setupActions happens every time a new Device* is selected in the * device picker. Sets up the text and visibility of the partitioning actions based * on the currently selected Device*, bootloader and os-prober output. * @param currentDevice */ void ChoicePage::setupActions() { Device* currentDevice = selectedDevice(); OsproberEntryList osproberEntriesForCurrentDevice = getOsproberEntriesForDevice( currentDevice ); cDebug() << "Setting up actions for" << currentDevice->deviceNode() << "with" << osproberEntriesForCurrentDevice.count() << "entries."; if ( currentDevice->partitionTable() ) m_deviceInfoWidget->setPartitionTableType( currentDevice->partitionTable()->type() ); else m_deviceInfoWidget->setPartitionTableType( PartitionTable::unknownTableType ); if ( m_allowManualPartitioning ) m_somethingElseButton->show(); else force_uncheck( m_grp, m_somethingElseButton ); bool atLeastOneCanBeResized = false; bool atLeastOneCanBeReplaced = false; bool atLeastOneIsMounted = false; // Suppress 'erase' if so bool isInactiveRAID = false; #ifdef WITH_KPMCORE4API if ( currentDevice->type() == Device::Type::SoftwareRAID_Device && static_cast< SoftwareRAID* >(currentDevice)->status() == SoftwareRAID::Status::Inactive ) { cDebug() << Logger::SubEntry << "part of an inactive RAID device"; isInactiveRAID = true; } #endif for ( auto it = PartitionIterator::begin( currentDevice ); it != PartitionIterator::end( currentDevice ); ++it ) { if ( PartUtils::canBeResized( *it ) ) { cDebug() << Logger::SubEntry << "contains resizable" << it; atLeastOneCanBeResized = true; } if ( PartUtils::canBeReplaced( *it ) ) { cDebug() << Logger::SubEntry << "contains replaceable" << it; atLeastOneCanBeReplaced = true; } if ( (*it)->isMounted() ) { atLeastOneIsMounted = true; } } if ( osproberEntriesForCurrentDevice.count() == 0 ) { CALAMARES_RETRANSLATE( cDebug() << "Setting texts for 0 osprober entries"; m_messageLabel->setText( tr( "This storage device does not seem to have an operating system on it. " "What would you like to do?
" "You will be able to review and confirm your choices " "before any change is made to the storage device." ) ); m_eraseButton->setText( tr( "Erase disk
" "This will delete all data " "currently present on the selected storage device." ) ); m_alongsideButton->setText( tr( "Install alongside
" "The installer will shrink a partition to make room for %1." ) .arg( *Calamares::Branding::ShortVersionedName ) ); m_replaceButton->setText( tr( "Replace a partition
" "Replaces a partition with %1." ) .arg( *Calamares::Branding::ShortVersionedName ) ); ) m_replaceButton->hide(); m_alongsideButton->hide(); m_grp->setExclusive( false ); m_replaceButton->buttonWidget()->setChecked( false ); m_alongsideButton->buttonWidget()->setChecked( false ); m_grp->setExclusive( true ); } else if ( osproberEntriesForCurrentDevice.count() == 1 ) { QString osName = osproberEntriesForCurrentDevice.first().prettyName; if ( !osName.isEmpty() ) { CALAMARES_RETRANSLATE( cDebug() << "Setting texts for 1 non-empty osprober entry"; m_messageLabel->setText( tr( "This storage device has %1 on it. " "What would you like to do?
" "You will be able to review and confirm your choices " "before any change is made to the storage device." ) .arg( osName ) ); m_alongsideButton->setText( tr( "Install alongside
" "The installer will shrink a partition to make room for %1." ) .arg( *Calamares::Branding::ShortVersionedName ) ); m_eraseButton->setText( tr( "Erase disk
" "This will delete all data " "currently present on the selected storage device." ) ); m_replaceButton->setText( tr( "Replace a partition
" "Replaces a partition with %1." ) .arg( *Calamares::Branding::ShortVersionedName ) ); ) } else { CALAMARES_RETRANSLATE( cDebug() << "Setting texts for 1 empty osprober entry"; m_messageLabel->setText( tr( "This storage device already has an operating system on it. " "What would you like to do?
" "You will be able to review and confirm your choices " "before any change is made to the storage device." ) ); m_alongsideButton->setText( tr( "Install alongside
" "The installer will shrink a partition to make room for %1." ) .arg( *Calamares::Branding::ShortVersionedName ) ); m_eraseButton->setText( tr( "Erase disk
" "This will delete all data " "currently present on the selected storage device." ) ); m_replaceButton->setText( tr( "Replace a partition
" "Replaces a partition with %1." ) .arg( *Calamares::Branding::ShortVersionedName ) ); ) } } else { // osproberEntriesForCurrentDevice has at least 2 items. CALAMARES_RETRANSLATE( cDebug() << "Setting texts for >= 2 osprober entries"; m_messageLabel->setText( tr( "This storage device has multiple operating systems on it. " "What would you like to do?
" "You will be able to review and confirm your choices " "before any change is made to the storage device." ) ); m_alongsideButton->setText( tr( "Install alongside
" "The installer will shrink a partition to make room for %1." ) .arg( *Calamares::Branding::ShortVersionedName ) ); m_eraseButton->setText( tr( "Erase disk
" "This will delete all data " "currently present on the selected storage device." ) ); m_replaceButton->setText( tr( "Replace a partition
" "Replaces a partition with %1." ) .arg( *Calamares::Branding::ShortVersionedName ) ); ) } #ifdef DEBUG_PARTITION_UNSAFE #ifdef DEBUG_PARTITION_LAME // If things can't be broken, allow all the buttons atLeastOneCanBeReplaced = true; atLeastOneCanBeResized = true; atLeastOneIsMounted = false; isInactiveRAID = false; #endif #endif if ( atLeastOneCanBeReplaced ) m_replaceButton->show(); else { cDebug() << "Replace button suppressed because none can be replaced."; force_uncheck( m_grp, m_replaceButton ); } if ( atLeastOneCanBeResized ) m_alongsideButton->show(); else { cDebug() << "Alongside button suppressed because none can be resized."; force_uncheck( m_grp, m_alongsideButton ); } if ( !atLeastOneIsMounted && !isInactiveRAID ) m_eraseButton->show(); // None mounted else { cDebug() << "Erase button suppressed" << "mount?" << atLeastOneIsMounted << "raid?" << isInactiveRAID; force_uncheck( m_grp, m_eraseButton ); } bool isEfi = PartUtils::isEfiSystem(); bool efiSystemPartitionFound = !m_core->efiSystemPartitions().isEmpty(); if ( isEfi && !efiSystemPartitionFound ) { cWarning() << "System is EFI but there's no EFI system partition, " "DISABLING alongside and replace features."; m_alongsideButton->hide(); m_replaceButton->hide(); } } OsproberEntryList ChoicePage::getOsproberEntriesForDevice( Device* device ) const { OsproberEntryList eList; for ( const OsproberEntry& entry : m_core->osproberEntries() ) { if ( entry.path.startsWith( device->deviceNode() ) ) eList.append( entry ); } return eList; } bool ChoicePage::isNextEnabled() const { return m_nextEnabled; } ChoicePage::InstallChoice ChoicePage::currentChoice() const { return m_choice; } void ChoicePage::updateNextEnabled() { bool enabled = false; auto sm_p = m_beforePartitionBarsView ? m_beforePartitionBarsView->selectionModel() : nullptr; switch ( m_choice ) { case NoChoice: enabled = false; break; case Replace: case Alongside: enabled = sm_p && sm_p->currentIndex().isValid(); break; case Erase: case Manual: enabled = true; } if ( m_isEfi && ( m_choice == Alongside || m_choice == Replace ) ) { if ( m_core->efiSystemPartitions().count() == 0 ) enabled = false; } if ( m_choice != Manual && m_encryptWidget->isVisible() && m_encryptWidget->state() == EncryptWidget::EncryptionUnconfirmed ) enabled = false; if ( enabled == m_nextEnabled ) return; m_nextEnabled = enabled; emit nextStatusChanged( enabled ); } void ChoicePage::updateSwapChoicesTr(QComboBox* box) { if ( !box ) return; static_assert(SwapChoice::NoSwap == 0, "Enum values out-of-sync"); for ( int index = 0; index < box->count(); ++index ) { bool ok = false; int value = 0; switch ( value = box->itemData( index ).toInt( &ok ) ) { // case 0: case SwapChoice::NoSwap: // toInt() returns 0 on failure, so check for ok if ( ok ) // It was explicitly set to 0 box->setItemText( index, tr( "No Swap" ) ); else cWarning() << "Box item" << index << box->itemText( index ) << "has non-integer role."; break; case SwapChoice::ReuseSwap: box->setItemText( index, tr( "Reuse Swap" ) ); break; case SwapChoice::SmallSwap: box->setItemText( index, tr( "Swap (no Hibernate)" ) ); break; case SwapChoice::FullSwap: box->setItemText( index, tr( "Swap (with Hibernate)" ) ); break; case SwapChoice::SwapFile: box->setItemText( index, tr( "Swap to file" ) ); break; default: cWarning() << "Box item" << index << box->itemText( index ) << "has role" << value; } } } int ChoicePage::lastSelectedDeviceIndex() { return m_lastSelectedDeviceIndex; } void ChoicePage::setLastSelectedDeviceIndex( int index ) { m_lastSelectedDeviceIndex = index; m_drivesCombo->setCurrentIndex( m_lastSelectedDeviceIndex ); } calamares-3.2.20/src/modules/partition/gui/ChoicePage.h000066400000000000000000000132241362604102500227230ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2016, Teo Mrnjavac * Copyright 2018-2019, Adriaan de Groot * Copyright 2019, Collabora Ltd * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef CHOICEPAGE_H #define CHOICEPAGE_H #include "ui_ChoicePage.h" #include #include "core/OsproberEntry.h" #include "core/PartitionActions.h" #include #include #include class QBoxLayout; class QComboBox; class QLabel; class QListView; class PartitionBarsView; class PartitionSplitterWidget; class PartitionLabelsView; class PartitionCoreModule; class PrettyRadioButton; class DeviceInfoWidget; class Device; using SwapChoiceSet = QSet< PartitionActions::Choices::SwapChoice >; /** * @brief The ChoicePage class is the first page of the partitioning interface. * It offers a choice between partitioning operations and initiates all automated * partitioning modes. For manual partitioning, see PartitionPage. */ class ChoicePage : public QWidget, private Ui::ChoicePage { Q_OBJECT public: enum InstallChoice { NoChoice, Alongside, Erase, Replace, Manual }; explicit ChoicePage( const SwapChoiceSet& swapChoices, QWidget* parent = nullptr ); virtual ~ChoicePage(); /** * @brief init runs when the PartitionViewStep and the PartitionCoreModule are * ready. Sets up the rest of the UI based on os-prober output. * @param core the PartitionCoreModule pointer. */ void init( PartitionCoreModule* core ); /** * @brief isNextEnabled answers whether the current state of the page is such * that progressing to the next page should be allowed. * @return true if next is allowed, otherwise false. */ bool isNextEnabled() const; /** * @brief currentChoice returns the enum Choice value corresponding to the * currently selected partitioning mode (with a PrettyRadioButton). * @return the enum Choice value. */ InstallChoice currentChoice() const; /** * @brief onLeave runs when control passes from this page to another one. */ void onLeave(); /** * @brief applyActionChoice reacts to a choice of partitioning mode. * @param choice the partitioning action choice. */ void applyActionChoice( ChoicePage::InstallChoice choice ); int lastSelectedDeviceIndex(); void setLastSelectedDeviceIndex( int index ); signals: void nextStatusChanged( bool ); void actionChosen(); void deviceChosen(); private slots: void onPartitionToReplaceSelected( const QModelIndex& current, const QModelIndex& previous ); void doReplaceSelectedPartition( const QModelIndex& current ); void doAlongsideSetupSplitter( const QModelIndex& current, const QModelIndex& previous ); void onEncryptWidgetStateChanged(); void onHomeCheckBoxStateChanged(); /// @brief Calls applyActionChoice() as needed. void onActionChanged(); /// @brief Calls onActionChanged() as needed. void onEraseSwapChoiceChanged(); private: void updateNextEnabled(); void setupChoices(); QComboBox* createBootloaderComboBox( QWidget* parentButton ); Device* selectedDevice(); /* Change the UI depending on the device selected. */ void hideButtons(); // Hide everything when no device void applyDeviceChoice(); // Start scanning new device void continueApplyDeviceChoice(); // .. called after scan void updateDeviceStatePreview(); void updateActionChoicePreview( ChoicePage::InstallChoice choice ); void setupActions(); OsproberEntryList getOsproberEntriesForDevice( Device* device ) const; void doAlongsideApply(); void setupEfiSystemPartitionSelector(); // Translations support void updateSwapChoicesTr( QComboBox* box ); bool m_nextEnabled; PartitionCoreModule* m_core; QMutex m_previewsMutex; InstallChoice m_choice; bool m_isEfi; QComboBox* m_drivesCombo; QButtonGroup* m_grp; PrettyRadioButton* m_alongsideButton; PrettyRadioButton* m_eraseButton; PrettyRadioButton* m_replaceButton; PrettyRadioButton* m_somethingElseButton; QComboBox* m_eraseSwapChoiceComboBox; // UI, see also m_eraseSwapChoice DeviceInfoWidget* m_deviceInfoWidget; QPointer< PartitionBarsView > m_beforePartitionBarsView; QPointer< PartitionLabelsView > m_beforePartitionLabelsView; QPointer< PartitionBarsView > m_afterPartitionBarsView; QPointer< PartitionLabelsView > m_afterPartitionLabelsView; QPointer< PartitionSplitterWidget > m_afterPartitionSplitterWidget; QPointer< QComboBox > m_bootloaderComboBox; QPointer< QLabel > m_efiLabel; QPointer< QComboBox > m_efiComboBox; int m_lastSelectedDeviceIndex; QString m_defaultFsType; bool m_enableEncryptionWidget; SwapChoiceSet m_availableSwapChoices; // What is available PartitionActions::Choices::SwapChoice m_eraseSwapChoice; // what is selected bool m_allowManualPartitioning; QMutex m_coreMutex; }; #endif // CHOICEPAGE_H calamares-3.2.20/src/modules/partition/gui/ChoicePage.ui000066400000000000000000000144001362604102500231060ustar00rootroot00000000000000 ChoicePage 0 0 743 512 Form 0 <m_drivesLabel> <m_messageLabel> QFrame::NoFrame QFrame::Plain 0 true 0 0 729 233 0 0 0 0 QFrame::HLine QFrame::Raised <m_reuseHomeCheckBox> 0 0 Qt::Vertical QSizePolicy::Fixed 20 8 After: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop 0 Qt::Vertical QSizePolicy::Fixed 20 8 Before: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop 0 0 0 0 EncryptWidget QWidget
gui/EncryptWidget.h
1
calamares-3.2.20/src/modules/partition/gui/CreatePartitionDialog.cpp000066400000000000000000000252701362604102500255100ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2016, Teo Mrnjavac * Copyright 2018, 2020, Adriaan de Groot * Copyright 2018, Andrius Štikonas * Copyright 2018, Caio Carvalho * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "CreatePartitionDialog.h" #include "ui_CreatePartitionDialog.h" #include "core/ColorUtils.h" #include "core/PartitionInfo.h" #include "core/PartUtils.h" #include "core/KPMHelpers.h" #include "gui/PartitionDialogHelpers.h" #include "gui/PartitionSizeController.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "partition/PartitionQuery.h" #include "partition/FileSystem.h" #include "utils/Logger.h" #include #include #include #include #include #include #include #include #include #include #include #include using CalamaresUtils::Partition::untranslatedFS; using CalamaresUtils::Partition::userVisibleFS; static QSet< FileSystem::Type > s_unmountableFS( { FileSystem::Unformatted, FileSystem::LinuxSwap, FileSystem::Extended, FileSystem::Unknown, FileSystem::Lvm2_PV } ); CreatePartitionDialog::CreatePartitionDialog( Device* device, PartitionNode* parentPartition, Partition* partition, const QStringList& usedMountPoints, QWidget* parentWidget ) : QDialog( parentWidget ) , m_ui( new Ui_CreatePartitionDialog ) , m_partitionSizeController( new PartitionSizeController( this ) ) , m_device( device ) , m_parent( parentPartition ) , m_usedMountPoints( usedMountPoints ) { m_ui->setupUi( this ); m_ui->encryptWidget->setText( tr( "En&crypt" ) ); m_ui->encryptWidget->hide(); if (m_device->type() != Device::Type::LVM_Device) { m_ui->lvNameLabel->hide(); m_ui->lvNameLineEdit->hide(); } if (m_device->type() == Device::Type::LVM_Device) { /* LVM logical volume name can consist of: letters numbers _ . - + * It cannot start with underscore _ and must not be equal to . or .. or any entry in /dev/ * QLineEdit accepts QValidator::Intermediate, so we just disable . at the beginning */ QRegularExpression re(QStringLiteral(R"(^(?!_|\.)[\w\-.+]+)")); QRegularExpressionValidator *validator = new QRegularExpressionValidator(re, this); m_ui->lvNameLineEdit->setValidator(validator); } standardMountPoints( *(m_ui->mountPointComboBox), partition ? PartitionInfo::mountPoint( partition ) : QString() ); if ( device->partitionTable()->type() == PartitionTable::msdos || device->partitionTable()->type() == PartitionTable::msdos_sectorbased ) initMbrPartitionTypeUi(); else initGptPartitionTypeUi(); // File system; the config value is translated (best-effort) to a type FileSystem::Type defaultFSType; QString untranslatedFSName = PartUtils::findFS( Calamares::JobQueue::instance()-> globalStorage()-> value( "defaultFileSystemType" ).toString(), &defaultFSType ); if ( defaultFSType == FileSystem::Type::Unknown ) { defaultFSType = FileSystem::Type::Ext4; } int defaultFsIndex = -1; int fsCounter = 0; QStringList fsNames; for ( auto fs : FileSystemFactory::map() ) { if ( fs->supportCreate() != FileSystem::cmdSupportNone && fs->type() != FileSystem::Extended ) { fsNames << userVisibleFS( fs ); // This is put into the combobox if ( fs->type() == defaultFSType ) defaultFsIndex = fsCounter; fsCounter++; } } m_ui->fsComboBox->addItems( fsNames ); // Connections connect( m_ui->fsComboBox, SIGNAL( activated( int ) ), SLOT( updateMountPointUi() ) ); connect( m_ui->extendedRadioButton, SIGNAL( toggled( bool ) ), SLOT( updateMountPointUi() ) ); connect( m_ui->mountPointComboBox, &QComboBox::currentTextChanged, this, &CreatePartitionDialog::checkMountPointSelection ); // Select a default m_ui->fsComboBox->setCurrentIndex( defaultFsIndex ); updateMountPointUi(); setFlagList( *(m_ui->m_listFlags), static_cast< PartitionTable::Flags >( ~PartitionTable::Flags::Int(0) ), partition ? PartitionInfo::flags( partition ) : PartitionTable::Flags() ); // Checks the initial selection. checkMountPointSelection(); } CreatePartitionDialog::~CreatePartitionDialog() {} PartitionTable::Flags CreatePartitionDialog::newFlags() const { return flagsFromList( *(m_ui->m_listFlags) ); } void CreatePartitionDialog::initMbrPartitionTypeUi() { QString fixedPartitionString; bool parentIsPartitionTable = m_parent->isRoot(); if ( !parentIsPartitionTable ) { m_role = PartitionRole( PartitionRole::Logical ); fixedPartitionString = tr( "Logical" ); } else if ( m_device->partitionTable()->hasExtended() ) { m_role = PartitionRole( PartitionRole::Primary ); fixedPartitionString = tr( "Primary" ); } if ( fixedPartitionString.isEmpty() ) m_ui->fixedPartitionLabel->hide(); else { m_ui->fixedPartitionLabel->setText( fixedPartitionString ); m_ui->primaryRadioButton->hide(); m_ui->extendedRadioButton->hide(); } } void CreatePartitionDialog::initGptPartitionTypeUi() { m_role = PartitionRole( PartitionRole::Primary ); m_ui->fixedPartitionLabel->setText( tr( "GPT" ) ); m_ui->primaryRadioButton->hide(); m_ui->extendedRadioButton->hide(); } Partition* CreatePartitionDialog::createPartition() { if ( m_role.roles() == PartitionRole::None ) { m_role = PartitionRole( m_ui->extendedRadioButton->isChecked() ? PartitionRole::Extended : PartitionRole::Primary ); } qint64 first = m_partitionSizeController->firstSector(); qint64 last = m_partitionSizeController->lastSector(); FileSystem::Type fsType = m_role.has( PartitionRole::Extended ) ? FileSystem::Extended : FileSystem::typeForName( m_ui->fsComboBox->currentText() ); Partition* partition = nullptr; QString luksPassphrase = m_ui->encryptWidget->passphrase(); if ( m_ui->encryptWidget->state() == EncryptWidget::EncryptionConfirmed && !luksPassphrase.isEmpty() ) { partition = KPMHelpers::createNewEncryptedPartition( m_parent, *m_device, m_role, fsType, first, last, luksPassphrase, newFlags() ); } else { partition = KPMHelpers::createNewPartition( m_parent, *m_device, m_role, fsType, first, last, newFlags() ); } if (m_device->type() == Device::Type::LVM_Device) { partition->setPartitionPath(m_device->deviceNode() + QStringLiteral("/") + m_ui->lvNameLineEdit->text().trimmed()); } PartitionInfo::setMountPoint( partition, selectedMountPoint( m_ui->mountPointComboBox ) ); PartitionInfo::setFormat( partition, true ); return partition; } void CreatePartitionDialog::updateMountPointUi() { bool enabled = m_ui->primaryRadioButton->isChecked(); if ( enabled ) { // This maps translated (user-visible) FS names to a type FileSystem::Type type = FileSystem::typeForName( m_ui->fsComboBox->currentText() ); enabled = !s_unmountableFS.contains( type ); if ( FileSystemFactory::map()[FileSystem::Type::Luks]->supportCreate() && FS::luks::canEncryptType( type ) && !m_role.has( PartitionRole::Extended ) ) { m_ui->encryptWidget->show(); m_ui->encryptWidget->reset(); } else { m_ui->encryptWidget->reset(); m_ui->encryptWidget->hide(); } } m_ui->mountPointLabel->setEnabled( enabled ); m_ui->mountPointComboBox->setEnabled( enabled ); if ( !enabled ) m_ui->mountPointComboBox->setCurrentText( QString() ); } void CreatePartitionDialog::checkMountPointSelection() { if ( m_usedMountPoints.contains( selectedMountPoint( m_ui->mountPointComboBox ) ) ) { m_ui->labelMountPoint->setText( tr( "Mountpoint already in use. Please select another one." ) ); m_ui->buttonBox->button( QDialogButtonBox::Ok )->setEnabled( false ); } else { m_ui->labelMountPoint->setText( QString() ); m_ui->buttonBox->button( QDialogButtonBox::Ok )->setEnabled( true ); } } void CreatePartitionDialog::initPartResizerWidget( Partition* partition ) { QColor color = CalamaresUtils::Partition::isPartitionFreeSpace( partition ) ? ColorUtils::colorForPartitionInFreeSpace( partition ) : ColorUtils::colorForPartition( partition ); m_partitionSizeController->init( m_device, partition, color ); m_partitionSizeController->setPartResizerWidget( m_ui->partResizerWidget ); m_partitionSizeController->setSpinBox( m_ui->sizeSpinBox ); } void CreatePartitionDialog::initFromFreeSpace( Partition* freeSpacePartition ) { initPartResizerWidget( freeSpacePartition ); } void CreatePartitionDialog::initFromPartitionToCreate( Partition* partition ) { Q_ASSERT( partition ); bool isExtended = partition->roles().has( PartitionRole::Extended ); Q_ASSERT( !isExtended ); if ( isExtended ) { cDebug() << "Editing extended partitions is not supported for now"; return; } initPartResizerWidget( partition ); // File System FileSystem::Type fsType = partition->fileSystem().type(); m_ui->fsComboBox->setCurrentText( FileSystem::nameForType( fsType ) ); // Mount point setSelectedMountPoint( m_ui->mountPointComboBox, PartitionInfo::mountPoint( partition ) ); updateMountPointUi(); } calamares-3.2.20/src/modules/partition/gui/CreatePartitionDialog.h000066400000000000000000000052451362604102500251550ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2016, Teo Mrnjavac * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef CREATEPARTITIONDIALOG_H #define CREATEPARTITIONDIALOG_H // KPMcore #include #include #include #include class Device; class Partition; class PartitionNode; class PartitionSizeController; class Ui_CreatePartitionDialog; /** * The dialog which is shown to create a new partition or to edit a * to-be-created partition. */ class CreatePartitionDialog : public QDialog { Q_OBJECT public: /** * @brief Dialog for editing a new partition. * * For the (unlikely) case that a newly created partition is being re-edited, * pass a pointer to that @p partition, otherwise pass nullptr. */ CreatePartitionDialog( Device* device, PartitionNode* parentPartition, Partition* partition, const QStringList& usedMountPoints, QWidget* parentWidget = nullptr ); ~CreatePartitionDialog(); /** * Must be called when user wants to create a partition in * freeSpacePartition. */ void initFromFreeSpace( Partition* freeSpacePartition ); /** * Must be called when user wants to edit a to-be-created partition. */ void initFromPartitionToCreate( Partition* partition ); Partition* createPartition(); PartitionTable::Flags newFlags() const; private Q_SLOTS: void updateMountPointUi(); void checkMountPointSelection(); private: QScopedPointer< Ui_CreatePartitionDialog > m_ui; PartitionSizeController* m_partitionSizeController; Device* m_device; PartitionNode* m_parent; PartitionRole m_role = PartitionRole( PartitionRole::None ); QStringList m_usedMountPoints; void initGptPartitionTypeUi(); void initMbrPartitionTypeUi(); void initPartResizerWidget( Partition* ); }; #endif /* CREATEPARTITIONDIALOG_H */ calamares-3.2.20/src/modules/partition/gui/CreatePartitionDialog.ui000066400000000000000000000203241362604102500253360ustar00rootroot00000000000000 CreatePartitionDialog 0 0 763 689 Create a Partition 0 0 0 59 Si&ze: sizeSpinBox MiB Partition &Type: primaryRadioButton &Primary true E&xtended [fixed-partition-label] Qt::Horizontal 40 20 Qt::Vertical 20 13 Fi&le System: fsComboBox Qt::Vertical QSizePolicy::Fixed 20 13 LVM LV name &Mount Point: mountPointComboBox true -1 Flags: true QAbstractItemView::NoSelection true Qt::Vertical 17 13 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok PartResizerWidget QWidget
kpmcore/gui/partresizerwidget.h
1
EncryptWidget QWidget
gui/EncryptWidget.h
1
primaryRadioButton fsComboBox buttonBox accepted() CreatePartitionDialog accept() 185 203 157 178 buttonBox rejected() CreatePartitionDialog reject() 185 203 243 178 extendedRadioButton toggled(bool) fsComboBox setDisabled(bool) 131 36 134 66 extendedRadioButton toggled(bool) label_2 setDisabled(bool) 109 43 79 64
calamares-3.2.20/src/modules/partition/gui/CreatePartitionTableDialog.ui000066400000000000000000000065461362604102500263200ustar00rootroot00000000000000 CreatePartitionTableDialog 0 0 297 182 0 0 Create Partition Table 75 true [are-you-sure-message] Creating a new partition table will delete all existing data on the disk. true Qt::Vertical QSizePolicy::Fixed 20 24 What kind of partition table do you want to create? Master Boot Record (MBR) true GUID Partition Table (GPT) Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok mbrRadioButton gptRadioButton buttonBox buttonBox accepted() CreatePartitionTableDialog accept() 222 141 157 155 buttonBox rejected() CreatePartitionTableDialog reject() 290 147 286 155 calamares-3.2.20/src/modules/partition/gui/CreateVolumeGroupDialog.cpp000066400000000000000000000034371362604102500260240ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018, Caio Jordão Carvalho * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "CreateVolumeGroupDialog.h" #include #include #include #include #include CreateVolumeGroupDialog::CreateVolumeGroupDialog( QString& vgName, QVector< const Partition* >& selectedPVs, QVector< const Partition* > pvList, qint64& pSize, QWidget* parent ) : VolumeGroupBaseDialog( vgName, pvList, parent ) , m_selectedPVs( selectedPVs ) , m_peSize( pSize ) { setWindowTitle( tr( "Create Volume Group" ) ); peSize()->setValue( pSize ); vgType()->setEnabled( false ); } void CreateVolumeGroupDialog::accept() { QString& name = vgNameValue(); name = vgName()->text(); m_selectedPVs << checkedItems(); qint64& pe = m_peSize; pe = peSize()->value(); QDialog::accept(); } calamares-3.2.20/src/modules/partition/gui/CreateVolumeGroupDialog.h000066400000000000000000000026061362604102500254660ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018, Caio Jordão Carvalho * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef CREATEVOLUMEGROUPDIALOG_H #define CREATEVOLUMEGROUPDIALOG_H #include "gui/VolumeGroupBaseDialog.h" class CreateVolumeGroupDialog : public VolumeGroupBaseDialog { public: CreateVolumeGroupDialog( QString& vgName, QVector< const Partition* >& selectedPVs, QVector< const Partition* > pvList, qint64& pSize, QWidget* parent ); void accept() override; private: QVector< const Partition* >& m_selectedPVs; qint64& m_peSize; }; #endif // CREATEVOLUMEGROUPDIALOG_H calamares-3.2.20/src/modules/partition/gui/DeviceInfoWidget.cpp000066400000000000000000000141751362604102500244540ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2015-2016, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "DeviceInfoWidget.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" #include "utils/Retranslator.h" #include "JobQueue.h" #include "GlobalStorage.h" #include #include #include DeviceInfoWidget::DeviceInfoWidget( QWidget* parent ) : QWidget( parent ) , m_ptIcon( new QLabel ) , m_ptLabel( new QLabel ) , m_tableType( PartitionTable::unknownTableType ) { QHBoxLayout* mainLayout = new QHBoxLayout; setLayout( mainLayout ); CalamaresUtils::unmarginLayout( mainLayout ); m_ptLabel->setObjectName("deviceInfoLabel"); m_ptIcon->setObjectName("deviceInfoIcon"); mainLayout->addWidget( m_ptIcon ); mainLayout->addWidget( m_ptLabel ); QSize iconSize = CalamaresUtils::defaultIconSize(); m_ptIcon->setMargin( 0 ); m_ptIcon->setFixedSize( iconSize ); m_ptIcon->setPixmap( CalamaresUtils::defaultPixmap( CalamaresUtils::PartitionTable, CalamaresUtils::Original, iconSize ) ); QFontMetrics fm = QFontMetrics( QFont() ); m_ptLabel->setMinimumWidth( fm.boundingRect( "Amiga" ).width() + CalamaresUtils::defaultFontHeight() / 2 ); m_ptLabel->setAlignment( Qt::AlignCenter ); QPalette palette; palette.setBrush( QPalette::Foreground, QColor( "#4D4D4D" ) ); //dark grey m_ptIcon->setAutoFillBackground( true ); m_ptLabel->setAutoFillBackground( true ); m_ptIcon->setPalette( palette ); m_ptLabel->setPalette( palette ); CALAMARES_RETRANSLATE_SLOT( &DeviceInfoWidget::retranslateUi ) } void DeviceInfoWidget::setPartitionTableType( PartitionTable::TableType type ) { m_tableType = type; retranslateUi(); } void DeviceInfoWidget::retranslateUi() { QString typeString = PartitionTable::tableTypeToName( m_tableType ).toUpper(); // fix up if the name shouldn't be uppercase: switch ( m_tableType ) { case PartitionTable::msdos: case PartitionTable::msdos_sectorbased: typeString = "MBR"; break; case PartitionTable::loop: typeString = "loop"; break; case PartitionTable::mac: typeString = "Mac"; break; case PartitionTable::amiga: typeString = "Amiga"; break; case PartitionTable::sun: typeString = "Sun"; break; case PartitionTable::unknownTableType: typeString = " ? "; } QString toolTipString = tr( "This device has a %1 partition " "table." ) .arg( typeString ); switch ( m_tableType ) { case PartitionTable::loop: toolTipString = tr( "This is a loop " "device.

" "It is a pseudo-device with no partition table " "that makes a file accessible as a block device. " "This kind of setup usually only contains a single filesystem." ); break; case PartitionTable::unknownTableType: toolTipString = tr( "This installer cannot detect a partition table on the " "selected storage device.

" "The device either has no partition " "table, or the partition table is corrupted or of an unknown " "type.
" "This installer can create a new partition table for you, " "either automatically, or through the manual partitioning " "page." ); break; case PartitionTable::gpt: toolTipString += tr( "

This is the recommended partition table type for modern " "systems which start from an EFI boot " "environment." ); break; case PartitionTable::msdos: case PartitionTable::msdos_sectorbased: toolTipString += tr( "

This partition table type is only advisable on older " "systems which start from a BIOS boot " "environment. GPT is recommended in most other cases.

" "Warning: the MBR partition table " "is an obsolete MS-DOS era standard.
" "Only 4 primary partitions may be created, and of " "those 4, one can be an extended partition, which " "may in turn contain many logical partitions." ); } m_ptLabel->setText( typeString ); m_ptLabel->setToolTip( toolTipString ); m_ptIcon->setToolTip( tr( "The type of partition table on the " "selected storage device.

" "The only way to change the partition table type is to " "erase and recreate the partition table from scratch, " "which destroys all data on the storage device.
" "This installer will keep the current partition table " "unless you explicitly choose otherwise.
" "If unsure, on modern systems GPT is preferred." ) ); } calamares-3.2.20/src/modules/partition/gui/DeviceInfoWidget.h000066400000000000000000000024111362604102500241070ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2015-2016, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef DEVICEINFOWIDGET_H #define DEVICEINFOWIDGET_H #include #include class QLabel; class DeviceInfoWidget : public QWidget { Q_OBJECT public: explicit DeviceInfoWidget( QWidget* parent = nullptr ); void setPartitionTableType( PartitionTable::TableType type ); public slots: void retranslateUi(); private: QLabel* m_ptIcon; QLabel* m_ptLabel; PartitionTable::TableType m_tableType; }; #endif // DEVICEINFOWIDGET_H calamares-3.2.20/src/modules/partition/gui/EditExistingPartitionDialog.cpp000066400000000000000000000251321362604102500267020ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2016, Teo Mrnjavac * Copyright 2018, 2020, Adriaan de Groot * * Flags handling originally from KDE Partition Manager, * Copyright 2008-2009, Volker Lanz * Copyright 2016, Andrius Štikonas * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "EditExistingPartitionDialog.h" #include "ui_EditExistingPartitionDialog.h" #include "core/ColorUtils.h" #include "core/PartitionCoreModule.h" #include "core/PartitionInfo.h" #include "core/PartUtils.h" #include "gui/PartitionDialogHelpers.h" #include "gui/PartitionSizeController.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "partition/FileSystem.h" #include "utils/Logger.h" #include #include #include #include #include #include using CalamaresUtils::Partition::untranslatedFS; using CalamaresUtils::Partition::userVisibleFS; EditExistingPartitionDialog::EditExistingPartitionDialog( Device* device, Partition* partition, const QStringList& usedMountPoints, QWidget* parentWidget ) : QDialog( parentWidget ) , m_ui( new Ui_EditExistingPartitionDialog ) , m_device( device ) , m_partition( partition ) , m_partitionSizeController( new PartitionSizeController( this ) ) , m_usedMountPoints( usedMountPoints ) { m_ui->setupUi( this ); standardMountPoints( *(m_ui->mountPointComboBox), PartitionInfo::mountPoint( partition ) ); QColor color = ColorUtils::colorForPartition( m_partition ); m_partitionSizeController->init( m_device, m_partition, color ); m_partitionSizeController->setSpinBox( m_ui->sizeSpinBox ); connect( m_ui->mountPointComboBox, &QComboBox::currentTextChanged, this, &EditExistingPartitionDialog::checkMountPointSelection ); replacePartResizerWidget(); connect( m_ui->formatRadioButton, &QAbstractButton::toggled, [ this ]( bool doFormat ) { replacePartResizerWidget(); m_ui->fileSystemLabel->setEnabled( doFormat ); m_ui->fileSystemComboBox->setEnabled( doFormat ); if ( !doFormat ) m_ui->fileSystemComboBox->setCurrentText( userVisibleFS( m_partition->fileSystem() ) ); updateMountPointPicker(); } ); connect( m_ui->fileSystemComboBox, &QComboBox::currentTextChanged, [ this ]( QString ) { updateMountPointPicker(); } ); // File system QStringList fsNames; for ( auto fs : FileSystemFactory::map() ) { if ( fs->supportCreate() != FileSystem::cmdSupportNone && fs->type() != FileSystem::Extended ) fsNames << userVisibleFS( fs ); // For the combo box } m_ui->fileSystemComboBox->addItems( fsNames ); FileSystem::Type defaultFSType; QString untranslatedFSName = PartUtils::findFS( Calamares::JobQueue::instance()-> globalStorage()-> value( "defaultFileSystemType" ).toString(), &defaultFSType ); if ( defaultFSType == FileSystem::Type::Unknown ) { defaultFSType = FileSystem::Type::Ext4; } QString thisFSNameForUser = userVisibleFS( m_partition->fileSystem() ); if ( fsNames.contains( thisFSNameForUser ) ) m_ui->fileSystemComboBox->setCurrentText( thisFSNameForUser ); else m_ui->fileSystemComboBox->setCurrentText( FileSystem::nameForType( defaultFSType ) ); m_ui->fileSystemLabel->setEnabled( m_ui->formatRadioButton->isChecked() ); m_ui->fileSystemComboBox->setEnabled( m_ui->formatRadioButton->isChecked() ); setFlagList( *(m_ui->m_listFlags), m_partition->availableFlags(), PartitionInfo::flags( m_partition ) ); } EditExistingPartitionDialog::~EditExistingPartitionDialog() {} PartitionTable::Flags EditExistingPartitionDialog::newFlags() const { return flagsFromList( *(m_ui->m_listFlags) ); } void EditExistingPartitionDialog::applyChanges( PartitionCoreModule* core ) { PartitionInfo::setMountPoint( m_partition, selectedMountPoint(m_ui->mountPointComboBox) ); qint64 newFirstSector = m_partitionSizeController->firstSector(); qint64 newLastSector = m_partitionSizeController->lastSector(); bool partResizedMoved = newFirstSector != m_partition->firstSector() || newLastSector != m_partition->lastSector(); cDebug() << "old boundaries:" << m_partition->firstSector() << m_partition->lastSector() << m_partition->length(); cDebug() << "new boundaries:" << newFirstSector << newLastSector; cDebug() << "dirty status:" << m_partitionSizeController->isDirty(); FileSystem::Type fsType = FileSystem::Unknown; if ( m_ui->formatRadioButton->isChecked() ) { fsType = m_partition->roles().has( PartitionRole::Extended ) ? FileSystem::Extended : FileSystem::typeForName( m_ui->fileSystemComboBox->currentText() ); } if ( partResizedMoved ) { if ( m_ui->formatRadioButton->isChecked() ) { Partition* newPartition = KPMHelpers::createNewPartition( m_partition->parent(), *m_device, m_partition->roles(), fsType, newFirstSector, newLastSector, newFlags() ); PartitionInfo::setMountPoint( newPartition, PartitionInfo::mountPoint( m_partition ) ); PartitionInfo::setFormat( newPartition, true ); core->deletePartition( m_device, m_partition ); core->createPartition( m_device, newPartition ); core->setPartitionFlags( m_device, newPartition, newFlags() ); } else { core->resizePartition( m_device, m_partition, newFirstSector, newLastSector ); if ( m_partition->activeFlags() != newFlags() ) core->setPartitionFlags( m_device, m_partition, newFlags() ); } } else { // No size changes if ( m_ui->formatRadioButton->isChecked() ) { // if the FS type is unchanged, we just format if ( m_partition->fileSystem().type() == fsType ) { core->formatPartition( m_device, m_partition ); if ( m_partition->activeFlags() != newFlags() ) core->setPartitionFlags( m_device, m_partition, newFlags() ); } else // otherwise, we delete and recreate the partition with new fs type { Partition* newPartition = KPMHelpers::createNewPartition( m_partition->parent(), *m_device, m_partition->roles(), fsType, m_partition->firstSector(), m_partition->lastSector(), newFlags() ); PartitionInfo::setMountPoint( newPartition, PartitionInfo::mountPoint( m_partition ) ); PartitionInfo::setFormat( newPartition, true ); core->deletePartition( m_device, m_partition ); core->createPartition( m_device, newPartition ); core->setPartitionFlags( m_device, newPartition, newFlags() ); } } else { core->refreshPartition( m_device, m_partition ); if ( m_partition->activeFlags() != newFlags() ) core->setPartitionFlags( m_device, m_partition, newFlags() ); } } } void EditExistingPartitionDialog::replacePartResizerWidget() { /* * There is no way to reliably update the partition used by * PartResizerWidget, which is necessary when we switch between "format" and * "keep". This is a hack which replaces the existing PartResizerWidget * with a new one. */ PartResizerWidget* widget = new PartResizerWidget( this ); layout()->replaceWidget( m_ui->partResizerWidget, widget ); delete m_ui->partResizerWidget; m_ui->partResizerWidget = widget; m_partitionSizeController->setPartResizerWidget( widget, m_ui->formatRadioButton->isChecked() ); } void EditExistingPartitionDialog::updateMountPointPicker() { bool doFormat = m_ui->formatRadioButton->isChecked(); FileSystem::Type fsType = FileSystem::Unknown; if ( doFormat ) { fsType = FileSystem::typeForName( m_ui->fileSystemComboBox->currentText() ); } else { fsType = m_partition->fileSystem().type(); } bool canMount = true; if ( fsType == FileSystem::Extended || fsType == FileSystem::LinuxSwap || fsType == FileSystem::Unformatted || fsType == FileSystem::Unknown || fsType == FileSystem::Lvm2_PV ) { canMount = false; } m_ui->mountPointLabel->setEnabled( canMount ); m_ui->mountPointComboBox->setEnabled( canMount ); if ( !canMount ) setSelectedMountPoint( m_ui->mountPointComboBox, QString() ); } void EditExistingPartitionDialog::checkMountPointSelection() { if ( m_usedMountPoints.contains( selectedMountPoint( m_ui->mountPointComboBox ) ) ) { m_ui->labelMountPoint->setText( tr( "Mountpoint already in use. Please select another one." ) ); m_ui->buttonBox->button( QDialogButtonBox::Ok )->setEnabled( false ); } else { m_ui->labelMountPoint->setText( QString() ); m_ui->buttonBox->button( QDialogButtonBox::Ok )->setEnabled( true ); } } calamares-3.2.20/src/modules/partition/gui/EditExistingPartitionDialog.h000066400000000000000000000041041362604102500263430ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef EDITEXISTINGPARTITIONDIALOG_H #define EDITEXISTINGPARTITIONDIALOG_H #include #include #include class PartitionCoreModule; class Device; class Partition; class PartitionSizeController; class Ui_EditExistingPartitionDialog; /** * The dialog which is shown to edit a partition which already existed when the installer started. * * It lets you decide how to reuse the partition: whether to keep its content * or reformat it, whether to resize or move it. */ class EditExistingPartitionDialog : public QDialog { Q_OBJECT public: EditExistingPartitionDialog( Device* device, Partition* partition, const QStringList& usedMountPoints, QWidget* parentWidget = nullptr ); ~EditExistingPartitionDialog(); void applyChanges( PartitionCoreModule* module ); private slots: void checkMountPointSelection(); private: QScopedPointer< Ui_EditExistingPartitionDialog > m_ui; Device* m_device; Partition* m_partition; PartitionSizeController* m_partitionSizeController; QStringList m_usedMountPoints; PartitionTable::Flags newFlags() const; void replacePartResizerWidget(); void updateMountPointPicker(); }; #endif /* EDITEXISTINGPARTITIONDIALOG_H */ calamares-3.2.20/src/modules/partition/gui/EditExistingPartitionDialog.ui000066400000000000000000000145641362604102500265440ustar00rootroot00000000000000 EditExistingPartitionDialog 0 0 450 579 0 0 Edit Existing Partition QLayout::SetMinimumSize 0 0 0 59 QFormLayout::ExpandingFieldsGrow Content: keepRadioButton &Keep true Format 0 0 300 0 Warning: Formatting the partition will erase all existing data. true &Mount Point: mountPointComboBox true -1 Si&ze: sizeSpinBox MiB Fi&le System: fileSystemComboBox Flags: true QAbstractItemView::NoSelection true Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok PartResizerWidget QWidget
kpmcore/gui/partresizerwidget.h
1
sizeSpinBox keepRadioButton formatRadioButton mountPointComboBox buttonBox buttonBox accepted() EditExistingPartitionDialog accept() 248 254 157 274 buttonBox rejected() EditExistingPartitionDialog reject() 316 260 286 274
calamares-3.2.20/src/modules/partition/gui/EncryptWidget.cpp000066400000000000000000000103061362604102500240550ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2016, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "EncryptWidget.h" #include EncryptWidget::EncryptWidget( QWidget* parent ) : QWidget( parent ) , m_state( EncryptionDisabled ) { setupUi( this ); m_iconLabel->setFixedWidth( m_iconLabel->height() ); m_passphraseLineEdit->hide(); m_confirmLineEdit->hide(); m_iconLabel->hide(); connect( m_encryptCheckBox, &QCheckBox::stateChanged, this, &EncryptWidget::onCheckBoxStateChanged ); connect( m_passphraseLineEdit, &QLineEdit::textEdited, this, &EncryptWidget::onPassphraseEdited ); connect( m_confirmLineEdit, &QLineEdit::textEdited, this, &EncryptWidget::onPassphraseEdited ); setFixedHeight( m_passphraseLineEdit->height() ); // Avoid jumping up and down updateState(); } void EncryptWidget::reset() { m_passphraseLineEdit->clear(); m_confirmLineEdit->clear(); m_encryptCheckBox->setChecked( false ); } EncryptWidget::State EncryptWidget::state() const { return m_state; } void EncryptWidget::setText( const QString& text ) { m_encryptCheckBox->setText( text ); } QString EncryptWidget::passphrase() const { if ( m_state == EncryptionConfirmed ) return m_passphraseLineEdit->text(); return QString(); } void EncryptWidget::changeEvent( QEvent* e ) { QWidget::changeEvent( e ); switch ( e->type() ) { case QEvent::LanguageChange: retranslateUi( this ); break; default: break; } } void EncryptWidget::updateState() { State newState; if ( m_encryptCheckBox->isChecked() ) { if ( !m_passphraseLineEdit->text().isEmpty() && m_passphraseLineEdit->text() == m_confirmLineEdit->text() ) { newState = EncryptionConfirmed; } else { newState = EncryptionUnconfirmed; } } else { newState = EncryptionDisabled; } if ( newState != m_state ) { m_state = newState; emit stateChanged( m_state ); } } void EncryptWidget::onPassphraseEdited() { if ( !m_iconLabel->isVisible() ) m_iconLabel->show(); QString p1 = m_passphraseLineEdit->text(); QString p2 = m_confirmLineEdit->text(); m_iconLabel->setToolTip( QString() ); if ( p1.isEmpty() && p2.isEmpty() ) { m_iconLabel->clear(); } else if ( p1 == p2 ) { m_iconLabel->setFixedWidth( m_iconLabel->height() ); m_iconLabel->setPixmap( CalamaresUtils::defaultPixmap( CalamaresUtils::Yes, CalamaresUtils::Original, m_iconLabel->size() ) ); } else { m_iconLabel->setFixedWidth( m_iconLabel->height() ); m_iconLabel->setPixmap( CalamaresUtils::defaultPixmap( CalamaresUtils::No, CalamaresUtils::Original, m_iconLabel->size() ) ); m_iconLabel->setToolTip( tr( "Please enter the same passphrase in both boxes." ) ); } updateState(); } void EncryptWidget::onCheckBoxStateChanged( int state ) { m_passphraseLineEdit->setVisible( state ); m_confirmLineEdit->setVisible( state ); m_iconLabel->setVisible( state ); m_passphraseLineEdit->clear(); m_confirmLineEdit->clear(); m_iconLabel->clear(); updateState(); } calamares-3.2.20/src/modules/partition/gui/EncryptWidget.h000066400000000000000000000027611362604102500235300ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2016, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef ENCRYPTWIDGET_H #define ENCRYPTWIDGET_H #include "ui_EncryptWidget.h" class EncryptWidget : public QWidget, private Ui::EncryptWidget { Q_OBJECT public: enum State : unsigned short { EncryptionDisabled = 0, EncryptionUnconfirmed, EncryptionConfirmed }; explicit EncryptWidget( QWidget* parent = nullptr ); void reset(); State state() const; void setText( const QString& text ); QString passphrase() const; signals: void stateChanged( State ); protected: void changeEvent( QEvent* e ); private: void updateState(); void onPassphraseEdited(); void onCheckBoxStateChanged( int state ); State m_state; }; #endif // ENCRYPTWIDGET_H calamares-3.2.20/src/modules/partition/gui/EncryptWidget.ui000066400000000000000000000032351362604102500237130ustar00rootroot00000000000000 EncryptWidget 0 0 822 59 Form 0 0 0 0 En&crypt system QLineEdit::Password Passphrase QLineEdit::Password Confirm passphrase Qt::AlignCenter calamares-3.2.20/src/modules/partition/gui/ListPhysicalVolumeWidgetItem.cpp000066400000000000000000000025421362604102500270530ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018, Caio Jordão Carvalho * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "ListPhysicalVolumeWidgetItem.h" #include ListPhysicalVolumeWidgetItem::ListPhysicalVolumeWidgetItem( const Partition* partition, bool checked ) : QListWidgetItem(QString("%1 | %2").arg( partition->deviceNode(), Capacity::formatByteSize( partition->capacity() ))) , m_partition(partition) { setToolTip( partition->deviceNode() ); setSizeHint( QSize(0, 32) ); setCheckState( checked ? Qt::Checked : Qt::Unchecked ); } const Partition* ListPhysicalVolumeWidgetItem::partition() const { return m_partition; } calamares-3.2.20/src/modules/partition/gui/ListPhysicalVolumeWidgetItem.h000066400000000000000000000023201362604102500265120ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018, Caio Jordão Carvalho * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef LISTPHYSICALVOLUMEWIDGETITEM_H #define LISTPHYSICALVOLUMEWIDGETITEM_H #include #include class ListPhysicalVolumeWidgetItem : public QListWidgetItem { public: ListPhysicalVolumeWidgetItem( const Partition* partition, bool checked ); const Partition* partition() const; private: const Partition* m_partition; }; #endif // LISTPHYSICALVOLUMEWIDGETITEM_H calamares-3.2.20/src/modules/partition/gui/PartitionBarsView.cpp000066400000000000000000000413561362604102500247120ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2015-2016, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "gui/PartitionBarsView.h" #include #include #include #include #include // Qt #include #include #include #include static const int VIEW_HEIGHT = qMax( CalamaresUtils::defaultFontHeight() + 8, // wins out with big fonts int( CalamaresUtils::defaultFontHeight() * 0.6 ) + 22 ); // wins out with small fonts static constexpr int CORNER_RADIUS = 3; static const int EXTENDED_PARTITION_MARGIN = qMax( 4, VIEW_HEIGHT / 6 ); // The SELECTION_MARGIN is applied within a hardcoded 2px padding anyway, so // we start from EXTENDED_PARTITION_MARGIN - 2 in all cases. // Then we try to ensure the selection rectangle fits exactly between the extended // rectangle and the outer frame (the "/ 2" part), unless that's not possible, and in // that case we at least make sure we have a 1px gap between the selection rectangle // and the extended partition box (the "- 2" part). // At worst, on low DPI systems, this will mean in order: // 1px outer rect, 1 px gap, 1px selection rect, 1px gap, 1px extended partition rect. static const int SELECTION_MARGIN = qMin( ( EXTENDED_PARTITION_MARGIN - 2 ) / 2, ( EXTENDED_PARTITION_MARGIN - 2 ) - 2 ); PartitionBarsView::PartitionBarsView( QWidget* parent ) : QAbstractItemView( parent ) , m_nestedPartitionsMode( NoNestedPartitions ) , canBeSelected( []( const QModelIndex& ) { return true; } ) , m_hoveredIndex( QModelIndex() ) { this->setObjectName("partitionBarView"); setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ); setFrameStyle( QFrame::NoFrame ); setSelectionBehavior( QAbstractItemView::SelectRows ); setSelectionMode( QAbstractItemView::SingleSelection ); // Debug connect( this, &PartitionBarsView::clicked, this, [=]( const QModelIndex& index ) { cDebug() << "Clicked row" << index.row(); } ); setMouseTracking( true ); } PartitionBarsView::~PartitionBarsView() { } void PartitionBarsView::setNestedPartitionsMode( PartitionBarsView::NestedPartitionsMode mode ) { m_nestedPartitionsMode = mode; viewport()->repaint(); } QSize PartitionBarsView::minimumSizeHint() const { return sizeHint(); } QSize PartitionBarsView::sizeHint() const { return QSize( -1, VIEW_HEIGHT ); } void PartitionBarsView::paintEvent( QPaintEvent* event ) { QPainter painter( viewport() ); painter.fillRect( rect(), palette().window() ); painter.setRenderHint( QPainter::Antialiasing ); QRect partitionsRect = rect(); partitionsRect.setHeight( VIEW_HEIGHT ); painter.save(); drawPartitions( &painter, partitionsRect, QModelIndex() ); painter.restore(); } void PartitionBarsView::drawSection( QPainter* painter, const QRect& rect_, int x, int width, const QModelIndex& index ) { QColor color = index.isValid() ? index.data( Qt::DecorationRole ).value< QColor >() : ColorUtils::unknownDisklabelColor(); bool isFreeSpace = index.isValid() ? index.data( PartitionModel::IsFreeSpaceRole ).toBool() : true; QRect rect = rect_; const int y = rect.y(); const int height = rect.height(); const int radius = qMax( 1, CORNER_RADIUS - ( VIEW_HEIGHT - height ) / 2 ); painter->setClipRect( x, y, width, height ); painter->translate( 0.5, 0.5 ); rect.adjust( 0, 0, -1, -1 ); if ( selectionMode() != QAbstractItemView::NoSelection && // no hover without selection m_hoveredIndex.isValid() && index == m_hoveredIndex ) { if ( canBeSelected( index ) ) painter->setBrush( color.lighter( 115 ) ); else painter->setBrush( color ); } else { painter->setBrush( color ); } QColor borderColor = color.darker(); painter->setPen( borderColor ); painter->drawRoundedRect( rect, radius, radius ); // Draw shade if ( !isFreeSpace ) rect.adjust( 2, 2, -2, -2 ); QLinearGradient gradient( 0, 0, 0, height / 2 ); qreal c = isFreeSpace ? 0 : 1; gradient.setColorAt( 0, QColor::fromRgbF( c, c, c, 0.3 ) ); gradient.setColorAt( 1, QColor::fromRgbF( c, c, c, 0 ) ); painter->setPen( Qt::NoPen ); painter->setBrush( gradient ); painter->drawRoundedRect( rect, radius, radius ); if ( selectionMode() != QAbstractItemView::NoSelection && index.isValid() && selectionModel() && !selectionModel()->selectedIndexes().isEmpty() && selectionModel()->selectedIndexes().first() == index ) { painter->setPen( QPen( borderColor, 1 ) ); QColor highlightColor = QPalette().highlight().color(); highlightColor = highlightColor.lighter( 500 ); highlightColor.setAlpha( 120 ); painter->setBrush( highlightColor ); QRect selectionRect = rect; selectionRect.setX( x + 1 ); selectionRect.setWidth( width - 3 ); //account for the previous rect.adjust if ( rect.x() > selectionRect.x() ) //hack for first item selectionRect.adjust( rect.x() - selectionRect.x(), 0, 0, 0 ); if ( rect.right() < selectionRect.right() ) //hack for last item selectionRect.adjust( 0, 0, - ( selectionRect.right() - rect.right() ), 0 ); selectionRect.adjust( SELECTION_MARGIN, SELECTION_MARGIN, -SELECTION_MARGIN, -SELECTION_MARGIN ); painter->drawRoundedRect( selectionRect, radius - 1, radius - 1 ); } painter->translate( -0.5, -0.5 ); } void PartitionBarsView::drawPartitions( QPainter* painter, const QRect& rect, const QModelIndex& parent ) { PartitionModel* modl = qobject_cast< PartitionModel* >( model() ); if ( !modl ) return; const int totalWidth = rect.width(); auto pair = computeItemsVector( parent ); QVector< PartitionBarsView::Item >& items = pair.first; qreal& total = pair.second; int x = rect.x(); for ( int row = 0; row < items.count(); ++row ) { const auto& item = items[ row ]; int width; if ( row < items.count() - 1 ) width = totalWidth * ( item.size / total ); else // Make sure we fill the last pixel column width = rect.right() - x + 1; drawSection( painter, rect, x, width, item.index ); if ( m_nestedPartitionsMode == DrawNestedPartitions && modl->hasChildren( item.index ) ) { QRect subRect( x + EXTENDED_PARTITION_MARGIN, rect.y() + EXTENDED_PARTITION_MARGIN, width - 2 * EXTENDED_PARTITION_MARGIN, rect.height() - 2 * EXTENDED_PARTITION_MARGIN ); drawPartitions( painter, subRect, item.index ); } x += width; } if ( !items.count() && !modl->device()->partitionTable() ) // No disklabel or unknown { int width = rect.right() - rect.x() + 1; drawSection( painter, rect, rect.x(), width, QModelIndex() ); } } QModelIndex PartitionBarsView::indexAt( const QPoint& point ) const { return indexAt( point, rect(), QModelIndex() ); } QModelIndex PartitionBarsView::indexAt( const QPoint &point, const QRect &rect, const QModelIndex& parent ) const { PartitionModel* modl = qobject_cast< PartitionModel* >( model() ); if ( !modl ) return QModelIndex(); const int totalWidth = rect.width(); auto pair = computeItemsVector( parent ); QVector< PartitionBarsView::Item >& items = pair.first; qreal& total = pair.second; int x = rect.x(); for ( int row = 0; row < items.count(); ++row ) { const auto& item = items[ row ]; int width; if ( row < items.count() - 1 ) width = totalWidth * ( item.size / total ); else // Make sure we fill the last pixel column width = rect.right() - x + 1; QRect thisItemRect( x, rect.y(), width, rect.height() ); if ( thisItemRect.contains( point ) ) { if ( m_nestedPartitionsMode == DrawNestedPartitions && modl->hasChildren( item.index ) ) { QRect subRect( x + EXTENDED_PARTITION_MARGIN, rect.y() + EXTENDED_PARTITION_MARGIN, width - 2 * EXTENDED_PARTITION_MARGIN, rect.height() - 2 * EXTENDED_PARTITION_MARGIN ); if ( subRect.contains( point ) ) { return indexAt( point, subRect, item.index ); } return item.index; } else // contains but no children, we win { return item.index; } } x += width; } return QModelIndex(); } QRect PartitionBarsView::visualRect( const QModelIndex& index ) const { return visualRect( index, rect(), QModelIndex() ); } QRect PartitionBarsView::visualRect( const QModelIndex& index, const QRect& rect, const QModelIndex& parent ) const { PartitionModel* modl = qobject_cast< PartitionModel* >( model() ); if ( !modl ) return QRect(); const int totalWidth = rect.width(); auto pair = computeItemsVector( parent ); QVector< PartitionBarsView::Item >& items = pair.first; qreal& total = pair.second; int x = rect.x(); for ( int row = 0; row < items.count(); ++row ) { const auto& item = items[ row ]; int width; if ( row < items.count() - 1 ) width = totalWidth * ( item.size / total ); else // Make sure we fill the last pixel column width = rect.right() - x + 1; QRect thisItemRect( x, rect.y(), width, rect.height() ); if ( item.index == index ) return thisItemRect; if ( m_nestedPartitionsMode == DrawNestedPartitions && modl->hasChildren( item.index ) && index.parent() == item.index ) { QRect subRect( x + EXTENDED_PARTITION_MARGIN, rect.y() + EXTENDED_PARTITION_MARGIN, width - 2 * EXTENDED_PARTITION_MARGIN, rect.height() - 2 * EXTENDED_PARTITION_MARGIN ); QRect candidateVisualRect = visualRect( index, subRect, item.index ); if ( !candidateVisualRect.isNull() ) return candidateVisualRect; } x += width; } return QRect(); } QRegion PartitionBarsView::visualRegionForSelection( const QItemSelection& selection ) const { return QRegion(); } int PartitionBarsView::horizontalOffset() const { return 0; } int PartitionBarsView::verticalOffset() const { return 0; } void PartitionBarsView::scrollTo( const QModelIndex& index, ScrollHint hint ) { Q_UNUSED( index ) Q_UNUSED( hint ) } void PartitionBarsView::setSelectionModel( QItemSelectionModel* selectionModel ) { QAbstractItemView::setSelectionModel( selectionModel ); connect( selectionModel, &QItemSelectionModel::selectionChanged, this, [=] { viewport()->repaint(); } ); } void PartitionBarsView::setSelectionFilter( std::function< bool ( const QModelIndex& ) > canBeSelected ) { this->canBeSelected = canBeSelected; } QModelIndex PartitionBarsView::moveCursor( CursorAction, Qt::KeyboardModifiers ) { return QModelIndex(); } bool PartitionBarsView::isIndexHidden( const QModelIndex& ) const { return false; } void PartitionBarsView::setSelection( const QRect& rect, QItemSelectionModel::SelectionFlags flags ) { //HACK: this is an utterly awful workaround, which is unfortunately necessary. // QAbstractItemView::mousePressedEvent calls setSelection, but before that, // for some mental reason, it works under the assumption that every item is a // rectangle. This rectangle is provided by visualRect, and the idea mostly // works, except when the item is an extended partition item, which is of course // a rectangle with a rectangular hole in the middle. // QAbstractItemView::mousePressEvent builds a QRect with x1, y1 in the center // of said visualRect, and x2, y2 in the real QMouseEvent position. // This may very well yield a QRect with negative size, which is meaningless. // Therefore the QRect we get here is totally bogus, and its topLeft is outside // the actual area of the item we need. // What we need are the real coordinates of the QMouseEvent, and the only way to // get them is by fetching the private x2, y2 from the rect. // TL;DR: this sucks, look away. -- Teo 12/2015 int x1, y1, x2, y2; rect.getCoords( &x1, &y1, &x2, &y2 ); QModelIndex eventIndex = indexAt( QPoint( x2, y2 ) ); if ( canBeSelected( eventIndex ) ) selectionModel()->select( eventIndex, flags ); viewport()->repaint(); } void PartitionBarsView::mouseMoveEvent( QMouseEvent* event ) { QModelIndex candidateIndex = indexAt( event->pos() ); QPersistentModelIndex oldHoveredIndex = m_hoveredIndex; if ( candidateIndex.isValid() ) { m_hoveredIndex = candidateIndex; } else { m_hoveredIndex = QModelIndex(); QGuiApplication::restoreOverrideCursor(); } if ( oldHoveredIndex != m_hoveredIndex ) { if ( m_hoveredIndex.isValid() && !canBeSelected( m_hoveredIndex ) ) QGuiApplication::setOverrideCursor( Qt::ForbiddenCursor ); else QGuiApplication::restoreOverrideCursor(); viewport()->repaint(); } } void PartitionBarsView::leaveEvent( QEvent* ) { QGuiApplication::restoreOverrideCursor(); if ( m_hoveredIndex.isValid() ) { m_hoveredIndex = QModelIndex(); viewport()->repaint(); } } void PartitionBarsView::mousePressEvent( QMouseEvent* event ) { QModelIndex candidateIndex = indexAt( event->pos() ); if ( canBeSelected( candidateIndex ) ) QAbstractItemView::mousePressEvent( event ); else event->accept(); } void PartitionBarsView::updateGeometries() { updateGeometry(); //get a new rect() for redrawing all the labels } QPair< QVector< PartitionBarsView::Item >, qreal > PartitionBarsView::computeItemsVector( const QModelIndex& parent ) const { int count = model()->rowCount( parent ); QVector< PartitionBarsView::Item > items; qreal total = 0; for ( int row = 0; row < count; ++row ) { QModelIndex index = model()->index( row, 0, parent ); if ( m_nestedPartitionsMode == NoNestedPartitions && model()->hasChildren( index ) ) { QPair< QVector< PartitionBarsView::Item >, qreal > childVect = computeItemsVector( index ); items += childVect.first; total += childVect.second; } else { qreal size = index.data( PartitionModel::SizeRole ).toLongLong(); total += size; items.append( { size, index } ); } } count = items.count(); // The sizes we have are perfect, but now we have to hardcode a minimum size for small // partitions and compensate for it in the total. qreal adjustedTotal = total; for ( int row = 0; row < count; ++row ) { if ( items[ row ].size < 0.01 * total ) // If this item is smaller than 1% of everything, { // force its width to 1%. adjustedTotal -= items[ row ].size; items[ row ].size = 0.01 * total; adjustedTotal += items[ row ].size; } } return qMakePair( items, adjustedTotal ); } calamares-3.2.20/src/modules/partition/gui/PartitionBarsView.h000066400000000000000000000071241362604102500243520ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2015-2016, Teo Mrnjavac * Copyright 2017, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef PARTITIONPREVIEW_H #define PARTITIONPREVIEW_H #include "PartitionViewSelectionFilter.h" #include /** * A Qt model view which displays the partitions inside a device as a colored bar. * * It has been created to be used with a PartitionModel instance, but does not * call any PartitionModel-specific methods: it should be usable with other * models as long as they provide the same roles PartitionModel provides. */ class PartitionBarsView : public QAbstractItemView { Q_OBJECT public: enum NestedPartitionsMode { NoNestedPartitions = 0, DrawNestedPartitions }; explicit PartitionBarsView( QWidget* parent = nullptr ); virtual ~PartitionBarsView() override; void setNestedPartitionsMode( NestedPartitionsMode mode ); QSize minimumSizeHint() const override; QSize sizeHint() const override; void paintEvent( QPaintEvent* event ) override; // QAbstractItemView API QModelIndex indexAt( const QPoint& point ) const override; QRect visualRect( const QModelIndex& index ) const override; void scrollTo( const QModelIndex& index, ScrollHint hint = EnsureVisible ) override; void setSelectionModel( QItemSelectionModel* selectionModel ) override; void setSelectionFilter( SelectionFilter canBeSelected ); protected: // QAbstractItemView API QRegion visualRegionForSelection( const QItemSelection& selection ) const override; int horizontalOffset() const override; int verticalOffset() const override; bool isIndexHidden( const QModelIndex& index ) const override; QModelIndex moveCursor( CursorAction cursorAction, Qt::KeyboardModifiers modifiers ) override; void setSelection( const QRect& rect, QItemSelectionModel::SelectionFlags flags ) override; void mouseMoveEvent( QMouseEvent* event ) override; void leaveEvent( QEvent* event ) override; void mousePressEvent( QMouseEvent* event ) override; protected slots: void updateGeometries() override; private: void drawPartitions( QPainter* painter, const QRect& rect, const QModelIndex& parent ); void drawSection( QPainter* painter, const QRect& rect_, int x, int width, const QModelIndex& index ); QModelIndex indexAt( const QPoint& point, const QRect& rect, const QModelIndex& parent ) const; QRect visualRect( const QModelIndex& index, const QRect& rect, const QModelIndex& parent ) const; NestedPartitionsMode m_nestedPartitionsMode; SelectionFilter canBeSelected; struct Item { qreal size; QModelIndex index; }; inline QPair< QVector< Item >, qreal > computeItemsVector( const QModelIndex& parent ) const; QPersistentModelIndex m_hoveredIndex; }; #endif /* PARTITIONPREVIEW_H */ calamares-3.2.20/src/modules/partition/gui/PartitionDialogHelpers.cpp000066400000000000000000000065461362604102500257140ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2016, Teo Mrnjavac * Copyright 2018-2019 Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "PartitionDialogHelpers.h" #include "core/PartUtils.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/Logger.h" #include #include QStringList standardMountPoints() { QStringList mountPoints{ "/", "/boot", "/home", "/opt", "/srv", "/usr", "/var" }; if ( PartUtils::isEfiSystem() ) mountPoints << Calamares::JobQueue::instance()->globalStorage()->value( "efiSystemPartition" ).toString(); mountPoints.removeDuplicates(); mountPoints.sort(); return mountPoints; } void standardMountPoints(QComboBox& combo) { combo.clear(); combo.addItem( QObject::tr( "(no mount point)" ) ); combo.addItems( standardMountPoints() ); } void standardMountPoints(QComboBox& combo, const QString& selected) { standardMountPoints( combo ); setSelectedMountPoint( combo, selected ); } QString selectedMountPoint(QComboBox& combo) { if ( combo.currentIndex() == 0 ) return QString(); return combo.currentText(); } void setSelectedMountPoint(QComboBox& combo, const QString& selected) { if ( selected.isEmpty() ) combo.setCurrentIndex( 0 ); // (no mount point) else { for ( int i = 0; i < combo.count(); ++i ) if ( selected == combo.itemText( i ) ) { combo.setCurrentIndex( i ); return; } combo.addItem( selected ); combo.setCurrentIndex( combo.count() - 1); } } PartitionTable::Flags flagsFromList( const QListWidget& list ) { PartitionTable::Flags flags; for ( int i = 0; i < list.count(); i++ ) if ( list.item( i )->checkState() == Qt::Checked ) flags |= static_cast< PartitionTable::Flag >( list.item( i )->data( Qt::UserRole ).toInt() ); return flags; } void setFlagList( QListWidget& list, PartitionTable::Flags available, PartitionTable::Flags checked ) { int f = 1; QString s; while ( !( s = PartitionTable::flagName( static_cast< PartitionTable::Flag >( f ) ) ).isEmpty() ) { if ( available & f ) { QListWidgetItem* item = new QListWidgetItem( s ); list.addItem( item ); item->setFlags( Qt::ItemIsUserCheckable | Qt::ItemIsEnabled ); item->setData( Qt::UserRole, f ); item->setCheckState( ( checked & f ) ? Qt::Checked : Qt::Unchecked ); } f <<= 1; } } calamares-3.2.20/src/modules/partition/gui/PartitionDialogHelpers.h000066400000000000000000000047131362604102500253530ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2016, Teo Mrnjavac * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef PARTITION_GUI_PARTITIONDIALOGHELPERS #define PARTITION_GUI_PARTITIONDIALOGHELPERS #include #include class QComboBox; class QListWidget; /** * Returns a list of standard mount points (e.g. /, /usr, ...). * This also includes the EFI mount point if that is necessary * on the target system. */ QStringList standardMountPoints(); /** * Clears the combobox and fills it with "(no mount point)" * and the elements of standardMountPoints(), above. */ void standardMountPoints( QComboBox& ); /** * As above, but also sets the displayed mount point to @p selected, * unless it is empty, in which case "(no mount point)" is chosen. */ void standardMountPoints( QComboBox&, const QString& selected ); /** * Get the mount point selected in the combo box (which should * have been set up with standardMountPoints(), above); this * will map the topmost item (i.e. "(no mount point)") back * to blank, to allow easy detection of no-mount-selected. */ QString selectedMountPoint( QComboBox& combo ); static inline QString selectedMountPoint(QComboBox* combo) { return selectedMountPoint(*combo); } void setSelectedMountPoint( QComboBox& combo, const QString& selected ); static inline void setSelectedMountPoint(QComboBox* combo, const QString& selected) { setSelectedMountPoint( *combo, selected); } /** * Get the flags that have been checked in the list widget. */ PartitionTable::Flags flagsFromList( const QListWidget& list ); void setFlagList( QListWidget& list, PartitionTable::Flags available, PartitionTable::Flags checked ); #endif calamares-3.2.20/src/modules/partition/gui/PartitionLabelsView.cpp000066400000000000000000000427721362604102500252300ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2015-2016, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "PartitionLabelsView.h" #include "core/PartitionModel.h" #include "core/ColorUtils.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" #include "utils/Units.h" #include #include #include // Qt #include #include #include using CalamaresUtils::operator""_MiB; static const int LAYOUT_MARGIN = 4; static const int LABEL_PARTITION_SQUARE_MARGIN = qMax( QFontMetrics( CalamaresUtils::defaultFont() ).ascent() - 2, 18 ); static const int LABELS_MARGIN = LABEL_PARTITION_SQUARE_MARGIN; static const int CORNER_RADIUS = 2; static QStringList buildUnknownDisklabelTexts( Device* dev ) { QStringList texts = { QObject::tr( "Unpartitioned space or unknown partition table" ), KFormat().formatByteSize( dev->totalLogical() * dev->logicalSize() ) }; return texts; } PartitionLabelsView::PartitionLabelsView( QWidget* parent ) : QAbstractItemView( parent ) , m_canBeSelected( []( const QModelIndex& ) { return true; } ) , m_extendedPartitionHidden( false ) { setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ); setFrameStyle( QFrame::NoFrame ); setSelectionBehavior( QAbstractItemView::SelectRows ); setSelectionMode( QAbstractItemView::SingleSelection ); this->setObjectName("partitionLabel"); setMouseTracking( true ); } PartitionLabelsView::~PartitionLabelsView() { } QSize PartitionLabelsView::minimumSizeHint() const { return sizeHint(); } QSize PartitionLabelsView::sizeHint() const { QAbstractItemModel* modl = model(); if ( modl ) { return QSize( -1, LAYOUT_MARGIN + sizeForAllLabels( rect().width() ).height() ); } return QSize(); } void PartitionLabelsView::paintEvent( QPaintEvent* event ) { Q_UNUSED( event ) QPainter painter( viewport() ); painter.fillRect( rect(), palette().window() ); painter.setRenderHint( QPainter::Antialiasing ); QRect lRect = labelsRect(); drawLabels( &painter, lRect, QModelIndex() ); } QRect PartitionLabelsView::labelsRect() const { return rect().adjusted( 0, LAYOUT_MARGIN, 0, 0 ); } static void drawPartitionSquare( QPainter* painter, const QRect& rect, const QBrush& brush ) { painter->fillRect( rect.adjusted( 1, 1, -1, -1 ), brush ); painter->setRenderHint( QPainter::Antialiasing, true ); painter->setPen( QPalette().shadow().color() ); painter->translate( .5, .5 ); painter->drawRoundedRect( rect.adjusted( 0, 0, -1, -1 ), CORNER_RADIUS, CORNER_RADIUS ); painter->translate( -.5, -.5 ); } static void drawSelectionSquare( QPainter* painter, const QRect& rect, const QBrush& brush ) { painter->save(); painter->setPen( QPen( brush.color().darker(), 1 ) ); QColor highlightColor = QPalette().highlight().color(); highlightColor = highlightColor.lighter( 500 ); highlightColor.setAlpha( 120 ); painter->setBrush( highlightColor ); painter->translate( .5, .5 ); painter->drawRoundedRect( rect.adjusted( 0, 0, -1, -1 ), CORNER_RADIUS, CORNER_RADIUS ); painter->translate( -.5, -.5 ); painter->restore(); } QModelIndexList PartitionLabelsView::getIndexesToDraw( const QModelIndex& parent ) const { QModelIndexList list; QAbstractItemModel* modl = model(); if ( !modl ) return list; for ( int row = 0; row < modl->rowCount( parent ); ++row ) { QModelIndex index = modl->index( row, 0, parent ); //HACK: horrible special casing follows. // To save vertical space, we choose to hide short instances of free space. // Arbitrary limit: 10MiB. const qint64 maxHiddenB = 10_MiB; if ( index.data( PartitionModel::IsFreeSpaceRole ).toBool() && index.data( PartitionModel::SizeRole ).toLongLong() < maxHiddenB ) continue; if ( !modl->hasChildren( index ) || !m_extendedPartitionHidden ) list.append( index ); if ( modl->hasChildren( index ) ) list.append( getIndexesToDraw( index ) ); } return list; } QStringList PartitionLabelsView::buildTexts( const QModelIndex& index ) const { QString firstLine, secondLine; if ( index.data( PartitionModel::IsPartitionNewRole ).toBool() ) { QString label = index.data( PartitionModel::FileSystemLabelRole ).toString(); if ( !label.isEmpty() ) { firstLine = label; } else { QString mountPoint = index.sibling( index.row(), PartitionModel::MountPointColumn ) .data().toString(); if ( mountPoint == "/" ) firstLine = m_customNewRootLabel.isEmpty() ? tr( "Root" ) : m_customNewRootLabel; else if ( mountPoint == "/home" ) firstLine = tr( "Home" ); else if ( mountPoint == "/boot" ) firstLine = tr( "Boot" ); else if ( mountPoint.contains( "/efi" ) && index.data( PartitionModel::FileSystemTypeRole ).toInt() == FileSystem::Fat32 ) firstLine = tr( "EFI system" ); else if ( index.data( PartitionModel::FileSystemTypeRole ).toInt() == FileSystem::LinuxSwap ) firstLine = tr( "Swap" ); else if ( !mountPoint.isEmpty() ) firstLine = tr( "New partition for %1" ).arg( mountPoint ); else firstLine = tr( "New partition" ); } } else if ( index.data( PartitionModel::OsproberNameRole ).toString().isEmpty() ) { firstLine = index.data().toString(); if ( firstLine.startsWith( "/dev/" ) ) firstLine.remove( 0, 5 ); // "/dev/" } else firstLine = index.data( PartitionModel::OsproberNameRole ).toString(); if ( index.data( PartitionModel::IsFreeSpaceRole ).toBool() || index.data( PartitionModel::FileSystemTypeRole ).toInt() == FileSystem::Extended ) secondLine = index.sibling( index.row(), PartitionModel::SizeColumn ) .data().toString(); else //: size[number] filesystem[name] secondLine = tr( "%1 %2" ) .arg( index.sibling( index.row(), PartitionModel::SizeColumn ) .data().toString() ) .arg( index.sibling( index.row(), PartitionModel::FileSystemColumn ) .data().toString() ); return { firstLine, secondLine }; } void PartitionLabelsView::drawLabels( QPainter* painter, const QRect& rect, const QModelIndex& parent ) { PartitionModel* modl = qobject_cast< PartitionModel* >( model() ); if ( !modl ) return; const QModelIndexList indexesToDraw = getIndexesToDraw( parent ); int label_x = rect.x(); int label_y = rect.y(); for ( const QModelIndex& index : indexesToDraw ) { QStringList texts = buildTexts( index ); QSize labelSize = sizeForLabel( texts ); QColor labelColor = index.data( Qt::DecorationRole ).value< QColor >(); if ( label_x + labelSize.width() > rect.width() ) //wrap to new line if overflow { label_x = rect.x(); label_y += labelSize.height() + labelSize.height() / 4; } // Draw hover if ( selectionMode() != QAbstractItemView::NoSelection && // no hover without selection m_hoveredIndex.isValid() && index == m_hoveredIndex ) { painter->save(); QRect labelRect( QPoint( label_x, label_y ), labelSize ); labelRect.adjust( 0, -LAYOUT_MARGIN, 0, -2*LAYOUT_MARGIN ); painter->translate( 0.5, 0.5 ); QRect hoverRect = labelRect.adjusted( 0, 0, -1, -1 ); painter->setBrush( QPalette().window().color().lighter( 102 ) ); painter->setPen( Qt::NoPen ); painter->drawRoundedRect( hoverRect, CORNER_RADIUS, CORNER_RADIUS ); painter->translate( -0.5, -0.5 ); painter->restore(); } // Is this element the selected one? bool sel = selectionMode() != QAbstractItemView::NoSelection && index.isValid() && selectionModel() && !selectionModel()->selectedIndexes().isEmpty() && selectionModel()->selectedIndexes().first() == index; drawLabel( painter, texts, labelColor, QPoint( label_x, label_y ), sel ); label_x += labelSize.width() + LABELS_MARGIN; } if ( !modl->rowCount() && !modl->device()->partitionTable() ) // No disklabel or unknown { QStringList texts = buildUnknownDisklabelTexts( modl->device() ); QColor labelColor = ColorUtils::unknownDisklabelColor(); drawLabel( painter, texts, labelColor, QPoint( rect.x(), rect.y() ), false /*can't be selected*/ ); } } QSize PartitionLabelsView::sizeForAllLabels( int maxLineWidth ) const { PartitionModel* modl = qobject_cast< PartitionModel* >( model() ); if ( !modl ) return QSize(); const QModelIndexList indexesToDraw = getIndexesToDraw( QModelIndex() ); int lineLength = 0; int numLines = 1; int singleLabelHeight = 0; for ( const QModelIndex& index : indexesToDraw ) { QStringList texts = buildTexts( index ); QSize labelSize = sizeForLabel( texts ); if ( lineLength + labelSize.width() > maxLineWidth ) { numLines++; lineLength = labelSize.width(); } else { lineLength += LABELS_MARGIN + labelSize.width(); } singleLabelHeight = qMax( singleLabelHeight, labelSize.height() ); } if ( !modl->rowCount() && !modl->device()->partitionTable() ) // Unknown or no disklabel { singleLabelHeight = sizeForLabel( buildUnknownDisklabelTexts( modl->device() ) ) .height(); } int totalHeight = numLines * singleLabelHeight + ( numLines - 1 ) * singleLabelHeight / 4; //spacings return QSize( maxLineWidth, totalHeight ); } QSize PartitionLabelsView::sizeForLabel( const QStringList& text ) const { int vertOffset = 0; int width = 0; for ( const QString& textLine : text ) { QSize textSize = fontMetrics().size( Qt::TextSingleLine, textLine ); vertOffset += textSize.height(); width = qMax( width, textSize.width() ); } width += LABEL_PARTITION_SQUARE_MARGIN; //for the color square return QSize( width, vertOffset ); } void PartitionLabelsView::drawLabel( QPainter* painter, const QStringList& text, const QColor& color, const QPoint& pos, bool selected ) { painter->setPen( Qt::black ); int vertOffset = 0; int width = 0; for ( const QString& textLine : text ) { QSize textSize = painter->fontMetrics().size( Qt::TextSingleLine, textLine ); painter->drawText( pos.x()+LABEL_PARTITION_SQUARE_MARGIN, pos.y() + vertOffset + textSize.height() / 2, textLine ); vertOffset += textSize.height(); painter->setPen( Qt::gray ); width = qMax( width, textSize.width() ); } QRect partitionSquareRect( pos.x(), pos.y() - 3, LABEL_PARTITION_SQUARE_MARGIN - 5, LABEL_PARTITION_SQUARE_MARGIN - 5 ); drawPartitionSquare( painter, partitionSquareRect, color ); if ( selected ) drawSelectionSquare( painter, partitionSquareRect.adjusted( 2, 2, -2, -2 ), color ); painter->setPen( Qt::black ); } QModelIndex PartitionLabelsView::indexAt( const QPoint& point ) const { PartitionModel* modl = qobject_cast< PartitionModel* >( model() ); if ( !modl ) return QModelIndex(); const QModelIndexList indexesToDraw = getIndexesToDraw( QModelIndex() ); QRect rect = this->rect(); int label_x = rect.x(); int label_y = rect.y(); for ( const QModelIndex& index : indexesToDraw ) { QStringList texts = buildTexts( index ); QSize labelSize = sizeForLabel( texts ); if ( label_x + labelSize.width() > rect.width() ) //wrap to new line if overflow { label_x = rect.x(); label_y += labelSize.height() + labelSize.height() / 4; } QRect labelRect( QPoint( label_x, label_y ), labelSize ); if ( labelRect.contains( point ) ) return index; label_x += labelSize.width() + LABELS_MARGIN; } return QModelIndex(); } QRect PartitionLabelsView::visualRect( const QModelIndex& idx ) const { PartitionModel* modl = qobject_cast< PartitionModel* >( model() ); if ( !modl ) return QRect(); const QModelIndexList indexesToDraw = getIndexesToDraw( QModelIndex() ); QRect rect = this->rect(); int label_x = rect.x(); int label_y = rect.y(); for ( const QModelIndex& index : indexesToDraw ) { QStringList texts = buildTexts( index ); QSize labelSize = sizeForLabel( texts ); if ( label_x + labelSize.width() > rect.width() ) //wrap to new line if overflow { label_x = rect.x(); label_y += labelSize.height() + labelSize.height() / 4; } if ( idx.isValid() && idx == index ) return QRect( QPoint( label_x, label_y ), labelSize ); label_x += labelSize.width() + LABELS_MARGIN; } return QRect(); } QRegion PartitionLabelsView::visualRegionForSelection( const QItemSelection& selection ) const { Q_UNUSED( selection ) return QRegion(); } int PartitionLabelsView::horizontalOffset() const { return 0; } int PartitionLabelsView::verticalOffset() const { return 0; } void PartitionLabelsView::scrollTo( const QModelIndex& index, ScrollHint hint ) { Q_UNUSED( index ) Q_UNUSED( hint ) } void PartitionLabelsView::setCustomNewRootLabel( const QString& text ) { m_customNewRootLabel = text; viewport()->repaint(); } void PartitionLabelsView::setSelectionModel( QItemSelectionModel* selectionModel ) { QAbstractItemView::setSelectionModel( selectionModel ); connect( selectionModel, &QItemSelectionModel::selectionChanged, this, [=] { viewport()->repaint(); } ); } void PartitionLabelsView::setSelectionFilter( SelectionFilter canBeSelected ) { m_canBeSelected = canBeSelected; } void PartitionLabelsView::setExtendedPartitionHidden( bool hidden ) { m_extendedPartitionHidden = hidden; } QModelIndex PartitionLabelsView::moveCursor( CursorAction cursorAction, Qt::KeyboardModifiers modifiers ) { Q_UNUSED( cursorAction ) Q_UNUSED( modifiers ) return QModelIndex(); } bool PartitionLabelsView::isIndexHidden( const QModelIndex& index ) const { Q_UNUSED( index ) return false; } void PartitionLabelsView::setSelection( const QRect& rect, QItemSelectionModel::SelectionFlags flags ) { QModelIndex eventIndex = indexAt( rect.topLeft() ); if ( m_canBeSelected( eventIndex ) ) selectionModel()->select( eventIndex, flags ); } void PartitionLabelsView::mouseMoveEvent( QMouseEvent* event ) { QModelIndex candidateIndex = indexAt( event->pos() ); QPersistentModelIndex oldHoveredIndex = m_hoveredIndex; if ( candidateIndex.isValid() ) { m_hoveredIndex = candidateIndex; } else { m_hoveredIndex = QModelIndex(); QGuiApplication::restoreOverrideCursor(); } if ( oldHoveredIndex != m_hoveredIndex ) { if ( m_hoveredIndex.isValid() && !m_canBeSelected( m_hoveredIndex ) ) QGuiApplication::setOverrideCursor( Qt::ForbiddenCursor ); else QGuiApplication::restoreOverrideCursor(); viewport()->repaint(); } } void PartitionLabelsView::leaveEvent( QEvent* event ) { Q_UNUSED( event ) QGuiApplication::restoreOverrideCursor(); if ( m_hoveredIndex.isValid() ) { m_hoveredIndex = QModelIndex(); viewport()->repaint(); } } void PartitionLabelsView::mousePressEvent( QMouseEvent* event ) { QModelIndex candidateIndex = indexAt( event->pos() ); if ( m_canBeSelected( candidateIndex ) ) QAbstractItemView::mousePressEvent( event ); else event->accept(); } void PartitionLabelsView::updateGeometries() { updateGeometry(); //get a new rect() for redrawing all the labels } calamares-3.2.20/src/modules/partition/gui/PartitionLabelsView.h000066400000000000000000000067411362604102500246710ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2015-2016, Teo Mrnjavac * Copyright 2017, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef PARTITIONLABELSVIEW_H #define PARTITIONLABELSVIEW_H #include "PartitionViewSelectionFilter.h" #include /** * A Qt model view which displays colored labels for partitions. * * It has been created to be used with a PartitionModel instance, but does not * call any PartitionModel-specific methods: it should be usable with other * models as long as they provide the same roles PartitionModel provides. */ class PartitionLabelsView : public QAbstractItemView { Q_OBJECT public: explicit PartitionLabelsView( QWidget* parent = nullptr ); virtual ~PartitionLabelsView() override; QSize minimumSizeHint() const override; QSize sizeHint() const override; void paintEvent( QPaintEvent* event ) override; // QAbstractItemView API QModelIndex indexAt( const QPoint& point ) const override; QRect visualRect( const QModelIndex& idx ) const override; void scrollTo( const QModelIndex& index, ScrollHint hint = EnsureVisible ) override; void setCustomNewRootLabel( const QString& text ); void setSelectionModel( QItemSelectionModel* selectionModel ) override; void setSelectionFilter( SelectionFilter canBeSelected ); void setExtendedPartitionHidden( bool hidden ); protected: // QAbstractItemView API QRegion visualRegionForSelection( const QItemSelection& selection ) const override; int horizontalOffset() const override; int verticalOffset() const override; bool isIndexHidden( const QModelIndex& index ) const override; QModelIndex moveCursor( CursorAction cursorAction, Qt::KeyboardModifiers modifiers ) override; void setSelection( const QRect& rect, QItemSelectionModel::SelectionFlags flags ) override; void mouseMoveEvent( QMouseEvent* event ) override; void leaveEvent( QEvent* event ) override; void mousePressEvent( QMouseEvent* event ) override; protected slots: void updateGeometries() override; private: QRect labelsRect() const; void drawLabels( QPainter* painter, const QRect& rect, const QModelIndex& parent ); QSize sizeForAllLabels( int maxLineWidth ) const; QSize sizeForLabel( const QStringList& text ) const; void drawLabel( QPainter* painter, const QStringList& text, const QColor& color, const QPoint& pos , bool selected ); QModelIndexList getIndexesToDraw( const QModelIndex& parent ) const; QStringList buildTexts( const QModelIndex& index ) const; SelectionFilter m_canBeSelected; bool m_extendedPartitionHidden; QString m_customNewRootLabel; QPersistentModelIndex m_hoveredIndex; }; #endif // PARTITIONLABELSVIEW_H calamares-3.2.20/src/modules/partition/gui/PartitionPage.cpp000066400000000000000000000565001362604102500240410ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2015-2016, Teo Mrnjavac * Copyright 2018-2019, Adriaan de Groot * Copyright 2018, Andrius Štikonas * Copyright 2018, Caio Jordão Carvalho * Copyright 2019, Collabora Ltd * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "PartitionPage.h" // Local #include "core/BootLoaderModel.h" #include "core/DeviceModel.h" #include "core/PartitionCoreModule.h" #include "core/PartitionInfo.h" #include "core/PartitionModel.h" #include "core/PartUtils.h" #include "core/KPMHelpers.h" #include "gui/CreatePartitionDialog.h" #include "gui/CreateVolumeGroupDialog.h" #include "gui/EditExistingPartitionDialog.h" #include "gui/ResizeVolumeGroupDialog.h" #include "gui/ScanningDialog.h" #include "ui_PartitionPage.h" #include "ui_CreatePartitionTableDialog.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "partition/PartitionQuery.h" #include "utils/Logger.h" #include "utils/Retranslator.h" #include "Branding.h" // KPMcore #include #include #ifdef WITH_KPMCORE4API #include #endif #include #include // Qt #include #include #include #include #include #include #include PartitionPage::PartitionPage( PartitionCoreModule* core, QWidget* parent ) : QWidget( parent ) , m_ui( new Ui_PartitionPage ) , m_core( core ) , m_lastSelectedBootLoaderIndex(-1) , m_isEfi( false ) { m_isEfi = PartUtils::isEfiSystem(); m_ui->setupUi( this ); m_ui->partitionLabelsView->setVisible( Calamares::JobQueue::instance()->globalStorage()-> value( "alwaysShowPartitionLabels" ).toBool() ); m_ui->deviceComboBox->setModel( m_core->deviceModel() ); m_ui->bootLoaderComboBox->setModel( m_core->bootLoaderModel() ); connect( m_core->bootLoaderModel(), &QAbstractItemModel::modelReset, this, &PartitionPage::restoreSelectedBootLoader ); PartitionBarsView::NestedPartitionsMode mode = Calamares::JobQueue::instance()->globalStorage()-> value( "drawNestedPartitions" ).toBool() ? PartitionBarsView::DrawNestedPartitions : PartitionBarsView::NoNestedPartitions; m_ui->partitionBarsView->setNestedPartitionsMode( mode ); updateButtons(); updateBootLoaderInstallPath(); updateFromCurrentDevice(); connect( m_ui->deviceComboBox, &QComboBox::currentTextChanged, this, &PartitionPage::updateFromCurrentDevice ); connect( m_ui->bootLoaderComboBox, QOverload::of(&QComboBox::activated), this, &PartitionPage::updateSelectedBootLoaderIndex ); connect( m_ui->bootLoaderComboBox, &QComboBox::currentTextChanged, this, &PartitionPage::updateBootLoaderInstallPath ); connect( m_core, &PartitionCoreModule::isDirtyChanged, m_ui->revertButton, &QWidget::setEnabled ); connect( m_ui->partitionTreeView, &QAbstractItemView::doubleClicked, this, &PartitionPage::onPartitionViewActivated ); connect( m_ui->revertButton, &QAbstractButton::clicked, this, &PartitionPage::onRevertClicked ); connect( m_ui->newVolumeGroupButton, &QAbstractButton::clicked, this, &PartitionPage::onNewVolumeGroupClicked ); connect( m_ui->resizeVolumeGroupButton, &QAbstractButton::clicked, this, &PartitionPage::onResizeVolumeGroupClicked ); connect( m_ui->deactivateVolumeGroupButton, &QAbstractButton::clicked, this, &PartitionPage::onDeactivateVolumeGroupClicked ); connect( m_ui->removeVolumeGroupButton, &QAbstractButton::clicked, this, &PartitionPage::onRemoveVolumeGroupClicked ); connect( m_ui->newPartitionTableButton, &QAbstractButton::clicked, this, &PartitionPage::onNewPartitionTableClicked ); connect( m_ui->createButton, &QAbstractButton::clicked, this, &PartitionPage::onCreateClicked ); connect( m_ui->editButton, &QAbstractButton::clicked, this, &PartitionPage::onEditClicked ); connect( m_ui->deleteButton, &QAbstractButton::clicked, this, &PartitionPage::onDeleteClicked ); if ( m_isEfi ) { m_ui->bootLoaderComboBox->hide(); m_ui->label_3->hide(); } CALAMARES_RETRANSLATE( m_ui->retranslateUi( this ); ) } PartitionPage::~PartitionPage() { } void PartitionPage::updateButtons() { bool create = false, createTable = false, edit = false, del = false, currentDeviceIsVG = false, isDeactivable = false; bool isRemovable = false, isVGdeactivated = false; QModelIndex index = m_ui->partitionTreeView->currentIndex(); if ( index.isValid() ) { const PartitionModel* model = static_cast< const PartitionModel* >( index.model() ); Q_ASSERT( model ); Partition* partition = model->partitionForIndex( index ); Q_ASSERT( partition ); bool isFree = CalamaresUtils::Partition::isPartitionFreeSpace( partition ); bool isExtended = partition->roles().has( PartitionRole::Extended ); bool isInVG = m_core->isInVG( partition ); create = isFree; // Keep it simple for now: do not support editing extended partitions as // it does not work with our current edit implementation which is // actually remove + add. This would not work with extended partitions // because they need to be created *before* creating logical partitions // inside them, so an edit must be applied without altering the job // order. // TODO: See if LVM PVs can be edited in Calamares edit = !isFree && !isExtended; del = !isFree && !isInVG; } if ( m_ui->deviceComboBox->currentIndex() >= 0 ) { Device* device = nullptr; QModelIndex deviceIndex = m_core->deviceModel()->index( m_ui->deviceComboBox->currentIndex(), 0 ); if ( deviceIndex.isValid() ) device = m_core->deviceModel()->deviceForIndex( deviceIndex ); if ( !device ) cWarning() << "Device for updateButtons is nullptr"; else if ( device->type() != Device::Type::LVM_Device ) { createTable = true; #ifdef WITH_KPMCORE4API if ( device->type() == Device::Type::SoftwareRAID_Device && static_cast< SoftwareRAID* >(device)->status() == SoftwareRAID::Status::Inactive ) { createTable = false; create = false; } #endif } else { currentDeviceIsVG = true; LvmDevice* lvmDevice = dynamic_cast(m_core->deviceModel()->deviceForIndex( deviceIndex )); isDeactivable = DeactivateVolumeGroupOperation::isDeactivatable( lvmDevice ); isRemovable = RemoveVolumeGroupOperation::isRemovable( lvmDevice ); isVGdeactivated = m_core->isVGdeactivated( lvmDevice ); if ( isVGdeactivated ) m_ui->revertButton->setEnabled( true ); } } m_ui->createButton->setEnabled( create ); m_ui->editButton->setEnabled( edit ); m_ui->deleteButton->setEnabled( del ); m_ui->newPartitionTableButton->setEnabled( createTable ); m_ui->resizeVolumeGroupButton->setEnabled( currentDeviceIsVG && !isVGdeactivated ); m_ui->deactivateVolumeGroupButton->setEnabled( currentDeviceIsVG && isDeactivable && !isVGdeactivated ); m_ui->removeVolumeGroupButton->setEnabled( currentDeviceIsVG && isRemovable ); } void PartitionPage::onNewPartitionTableClicked() { QModelIndex index = m_core->deviceModel()->index( m_ui->deviceComboBox->currentIndex(), 0 ); Q_ASSERT( index.isValid() ); Device* device = m_core->deviceModel()->deviceForIndex( index ); QPointer dlg = new QDialog( this ); Ui_CreatePartitionTableDialog ui; ui.setupUi( dlg.data() ); QString areYouSure = tr( "Are you sure you want to create a new partition table on %1?" ).arg( device->name() ); if ( PartUtils::isEfiSystem() ) ui.gptRadioButton->setChecked( true ); else ui.mbrRadioButton->setChecked( true ); ui.areYouSureLabel->setText( areYouSure ); if ( dlg->exec() == QDialog::Accepted ) { PartitionTable::TableType type = ui.mbrRadioButton->isChecked() ? PartitionTable::msdos : PartitionTable::gpt; m_core->createPartitionTable( device, type ); } delete dlg; // PartionModelReset isn't emitted after createPartitionTable, so we have to manually update // the bootLoader index after the reset. updateBootLoaderIndex(); } bool PartitionPage::checkCanCreate( Device* device ) { auto table = device->partitionTable(); if ( table->type() == PartitionTable::msdos ||table->type() == PartitionTable::msdos_sectorbased ) { cDebug() << "Checking MSDOS partition" << table->numPrimaries() << "primaries, max" << table->maxPrimaries(); if ( ( table->numPrimaries() >= table->maxPrimaries() ) && !table->hasExtended() ) { QMessageBox::warning( this, tr( "Can not create new partition" ), tr( "The partition table on %1 already has %2 primary partitions, and no more can be added. " "Please remove one primary partition and add an extended partition, instead." ).arg( device->name() ).arg( table->numPrimaries() ) ); return false; } return true; } else return true; // GPT is fine } void PartitionPage::onNewVolumeGroupClicked() { QString vgName; QVector< const Partition* > selectedPVs; qint64 peSize = 4; QVector< const Partition* > availablePVs; for ( const Partition* p : m_core->lvmPVs() ) if ( !m_core->isInVG( p ) ) availablePVs << p; QPointer< CreateVolumeGroupDialog > dlg = new CreateVolumeGroupDialog( vgName, selectedPVs, availablePVs, peSize, this ); if ( dlg->exec() == QDialog::Accepted ) { QModelIndex partitionIndex = m_ui->partitionTreeView->currentIndex(); if ( partitionIndex.isValid() ) { const PartitionModel* model = static_cast< const PartitionModel* >( partitionIndex.model() ); Q_ASSERT( model ); Partition* partition = model->partitionForIndex( partitionIndex ); Q_ASSERT( partition ); // Disable delete button if current partition was selected to be in VG // TODO: Should Calamares edit LVM PVs which are in VGs? if ( selectedPVs.contains( partition ) ) m_ui->deleteButton->setEnabled( false ); } QModelIndex deviceIndex = m_core->deviceModel()->index( m_ui->deviceComboBox->currentIndex(), 0 ); Q_ASSERT( deviceIndex.isValid() ); QVariant previousIndexDeviceData = m_core->deviceModel()->data( deviceIndex, Qt::ToolTipRole ); // Creating new VG m_core->createVolumeGroup( vgName, selectedPVs, peSize ); // As createVolumeGroup method call resets deviceModel, // is needed to set the current index in deviceComboBox as the previous one int previousIndex = m_ui->deviceComboBox->findData( previousIndexDeviceData, Qt::ToolTipRole ); m_ui->deviceComboBox->setCurrentIndex( ( previousIndex < 0 ) ? 0 : previousIndex ); updateFromCurrentDevice(); } delete dlg; } void PartitionPage::onResizeVolumeGroupClicked() { QModelIndex deviceIndex = m_core->deviceModel()->index( m_ui->deviceComboBox->currentIndex(), 0 ); LvmDevice* device = dynamic_cast< LvmDevice* >( m_core->deviceModel()->deviceForIndex( deviceIndex ) ); Q_ASSERT( device && device->type() == Device::Type::LVM_Device ); QVector< const Partition* > availablePVs; QVector< const Partition* > selectedPVs; for ( const Partition* p : m_core->lvmPVs() ) if ( !m_core->isInVG( p ) ) availablePVs << p; QPointer< ResizeVolumeGroupDialog > dlg = new ResizeVolumeGroupDialog( device, availablePVs, selectedPVs, this ); if ( dlg->exec() == QDialog::Accepted ) m_core->resizeVolumeGroup( device, selectedPVs ); delete dlg; } void PartitionPage::onDeactivateVolumeGroupClicked() { QModelIndex deviceIndex = m_core->deviceModel()->index( m_ui->deviceComboBox->currentIndex(), 0 ); LvmDevice* device = dynamic_cast< LvmDevice* >( m_core->deviceModel()->deviceForIndex( deviceIndex ) ); Q_ASSERT( device && device->type() == Device::Type::LVM_Device ); m_core->deactivateVolumeGroup( device ); updateFromCurrentDevice(); PartitionModel* model = m_core->partitionModelForDevice( device ); model->update(); } void PartitionPage::onRemoveVolumeGroupClicked() { QModelIndex deviceIndex = m_core->deviceModel()->index( m_ui->deviceComboBox->currentIndex(), 0 ); LvmDevice* device = dynamic_cast< LvmDevice* >( m_core->deviceModel()->deviceForIndex( deviceIndex ) ); Q_ASSERT( device && device->type() == Device::Type::LVM_Device ); m_core->removeVolumeGroup( device ); } void PartitionPage::onCreateClicked() { QModelIndex index = m_ui->partitionTreeView->currentIndex(); Q_ASSERT( index.isValid() ); const PartitionModel* model = static_cast< const PartitionModel* >( index.model() ); Partition* partition = model->partitionForIndex( index ); Q_ASSERT( partition ); if ( !checkCanCreate( model->device() ) ) return; CreatePartitionDialog dlg( model->device(), partition->parent(), nullptr, getCurrentUsedMountpoints(), this ); dlg.initFromFreeSpace( partition ); if ( dlg.exec() == QDialog::Accepted ) { Partition* newPart = dlg.createPartition(); m_core->createPartition( model->device(), newPart, dlg.newFlags() ); } } void PartitionPage::onEditClicked() { QModelIndex index = m_ui->partitionTreeView->currentIndex(); Q_ASSERT( index.isValid() ); const PartitionModel* model = static_cast< const PartitionModel* >( index.model() ); Partition* partition = model->partitionForIndex( index ); Q_ASSERT( partition ); if ( CalamaresUtils::Partition::isPartitionNew( partition ) ) updatePartitionToCreate( model->device(), partition ); else editExistingPartition( model->device(), partition ); } void PartitionPage::onDeleteClicked() { QModelIndex index = m_ui->partitionTreeView->currentIndex(); Q_ASSERT( index.isValid() ); const PartitionModel* model = static_cast< const PartitionModel* >( index.model() ); Partition* partition = model->partitionForIndex( index ); Q_ASSERT( partition ); m_core->deletePartition( model->device(), partition ); } void PartitionPage::onRevertClicked() { ScanningDialog::run( QtConcurrent::run( [ this ] { QMutexLocker locker( &m_revertMutex ); int oldIndex = m_ui->deviceComboBox->currentIndex(); m_core->revertAllDevices(); m_ui->deviceComboBox->setCurrentIndex( ( oldIndex < 0 ) ? 0 : oldIndex ); updateFromCurrentDevice(); } ), [ this ]{ m_lastSelectedBootLoaderIndex = -1; if( m_ui->bootLoaderComboBox->currentIndex() < 0 ) { m_ui->bootLoaderComboBox->setCurrentIndex( 0 ); } }, this ); } void PartitionPage::onPartitionViewActivated() { QModelIndex index = m_ui->partitionTreeView->currentIndex(); if ( !index.isValid() ) return; const PartitionModel* model = static_cast< const PartitionModel* >( index.model() ); Q_ASSERT( model ); Partition* partition = model->partitionForIndex( index ); Q_ASSERT( partition ); // Use the buttons to trigger the actions so that they do nothing if they // are disabled. Alternatively, the code could use QAction to centralize, // but I don't expect there will be other occurences of triggering the same // action from multiple UI elements in this page, so it does not feel worth // the price. if ( CalamaresUtils::Partition::isPartitionFreeSpace( partition ) ) m_ui->createButton->click(); else m_ui->editButton->click(); } void PartitionPage::updatePartitionToCreate( Device* device, Partition* partition ) { QStringList mountPoints = getCurrentUsedMountpoints(); mountPoints.removeOne( PartitionInfo::mountPoint( partition ) ); QPointer< CreatePartitionDialog > dlg = new CreatePartitionDialog( device, partition->parent(), partition, mountPoints, this ); dlg->initFromPartitionToCreate( partition ); if ( dlg->exec() == QDialog::Accepted ) { Partition* newPartition = dlg->createPartition(); m_core->deletePartition( device, partition ); m_core->createPartition( device, newPartition, dlg->newFlags() ); } delete dlg; } void PartitionPage::editExistingPartition( Device* device, Partition* partition ) { QStringList mountPoints = getCurrentUsedMountpoints(); mountPoints.removeOne( PartitionInfo::mountPoint( partition ) ); QPointer dlg = new EditExistingPartitionDialog( device, partition, mountPoints, this ); if ( dlg->exec() == QDialog::Accepted ) dlg->applyChanges( m_core ); delete dlg; } void PartitionPage::updateBootLoaderInstallPath() { if ( m_isEfi || !m_ui->bootLoaderComboBox->isVisible() ) return; QVariant var = m_ui->bootLoaderComboBox->currentData( BootLoaderModel::BootLoaderPathRole ); if ( !var.isValid() ) return; cDebug() << "PartitionPage::updateBootLoaderInstallPath" << var.toString(); m_core->setBootLoaderInstallPath( var.toString() ); } void PartitionPage::updateSelectedBootLoaderIndex() { m_lastSelectedBootLoaderIndex = m_ui->bootLoaderComboBox->currentIndex(); cDebug() << "Selected bootloader index" << m_lastSelectedBootLoaderIndex; } void PartitionPage::restoreSelectedBootLoader() { Calamares::restoreSelectedBootLoader( *(m_ui->bootLoaderComboBox), m_core->bootLoaderInstallPath() ); } void PartitionPage::updateFromCurrentDevice() { QModelIndex index = m_core->deviceModel()->index( m_ui->deviceComboBox->currentIndex(), 0 ); if ( !index.isValid() ) return; Device* device = m_core->deviceModel()->deviceForIndex( index ); QAbstractItemModel* oldModel = m_ui->partitionTreeView->model(); if ( oldModel ) disconnect( oldModel, nullptr, this, nullptr ); PartitionModel* model = m_core->partitionModelForDevice( device ); m_ui->partitionBarsView->setModel( model ); m_ui->partitionLabelsView->setModel( model ); m_ui->partitionTreeView->setModel( model ); m_ui->partitionTreeView->expandAll(); // Make all views use the same selection model. if ( m_ui->partitionBarsView->selectionModel() != m_ui->partitionTreeView->selectionModel() || m_ui->partitionBarsView->selectionModel() != m_ui->partitionLabelsView->selectionModel() ) { // Tree view QItemSelectionModel* selectionModel = m_ui->partitionTreeView->selectionModel(); m_ui->partitionTreeView->setSelectionModel( m_ui->partitionBarsView->selectionModel() ); selectionModel->deleteLater(); // Labels view selectionModel = m_ui->partitionLabelsView->selectionModel(); m_ui->partitionLabelsView->setSelectionModel( m_ui->partitionBarsView->selectionModel() ); selectionModel->deleteLater(); } // This is necessary because even with the same selection model it might happen that // a !=0 column is selected in the tree view, which for some reason doesn't trigger a // timely repaint in the bars view. connect( m_ui->partitionBarsView->selectionModel(), &QItemSelectionModel::currentChanged, this, [=] { QModelIndex selectedIndex = m_ui->partitionBarsView->selectionModel()->currentIndex(); selectedIndex = selectedIndex.sibling( selectedIndex.row(), 0 ); m_ui->partitionBarsView->setCurrentIndex( selectedIndex ); m_ui->partitionLabelsView->setCurrentIndex( selectedIndex ); }, Qt::UniqueConnection ); // Must be done here because we need to have a model set to define // individual column resize mode QHeaderView* header = m_ui->partitionTreeView->header(); header->setSectionResizeMode( QHeaderView::ResizeToContents ); header->setSectionResizeMode( 0, QHeaderView::Stretch ); updateButtons(); // Establish connection here because selection model is destroyed when // model changes connect( m_ui->partitionTreeView->selectionModel(), &QItemSelectionModel::currentChanged, [ this ]( const QModelIndex&, const QModelIndex& ) { updateButtons(); } ); connect( model, &QAbstractItemModel::modelReset, this, &PartitionPage::onPartitionModelReset ); } void PartitionPage::onPartitionModelReset() { m_ui->partitionTreeView->expandAll(); updateButtons(); updateBootLoaderIndex(); } void PartitionPage::updateBootLoaderIndex() { // set bootloader back to user selected index if ( m_lastSelectedBootLoaderIndex >= 0 && m_ui->bootLoaderComboBox->count() ) { m_ui->bootLoaderComboBox->setCurrentIndex( m_lastSelectedBootLoaderIndex ); } } QStringList PartitionPage::getCurrentUsedMountpoints() { QModelIndex index = m_core->deviceModel()->index( m_ui->deviceComboBox->currentIndex(), 0 ); if ( !index.isValid() ) return QStringList(); Device* device = m_core->deviceModel()->deviceForIndex( index ); QStringList mountPoints; for ( Partition* partition : device->partitionTable()->children() ) { const QString& mountPoint = PartitionInfo::mountPoint( partition ); if ( !mountPoint.isEmpty() ) mountPoints << mountPoint; } return mountPoints; } int PartitionPage::selectedDeviceIndex() { return m_ui->deviceComboBox->currentIndex(); } void PartitionPage::selectDeviceByIndex ( int index ) { m_ui->deviceComboBox->setCurrentIndex( index ); } calamares-3.2.20/src/modules/partition/gui/PartitionPage.h000066400000000000000000000057321362604102500235070ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2018-2019, Adriaan de Groot * Copyright 2019, Collabora Ltd * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef PARTITIONPAGE_H #define PARTITIONPAGE_H #include #include #include class PartitionCoreModule; class Ui_PartitionPage; class Device; class DeviceModel; class Partition; /** * The user interface for the module. * * Shows the information exposed by PartitionCoreModule and asks it to schedule * jobs according to user actions. */ class PartitionPage : public QWidget { Q_OBJECT public: explicit PartitionPage( PartitionCoreModule* core, QWidget* parent = nullptr ); ~PartitionPage(); void onRevertClicked(); int selectedDeviceIndex(); void selectDeviceByIndex( int index ); private slots: /// @brief Update everything when the base device changes void updateFromCurrentDevice(); /// @brief Update when the selected device for boot loader changes void updateBootLoaderInstallPath(); /// @brief Explicitly selected boot loader path void updateSelectedBootLoaderIndex(); /// @brief After boot loader model changes, try to preserve previously set value void restoreSelectedBootLoader(); private: QScopedPointer< Ui_PartitionPage > m_ui; PartitionCoreModule* m_core; void updateButtons(); void onNewPartitionTableClicked(); void onNewVolumeGroupClicked(); void onResizeVolumeGroupClicked(); void onDeactivateVolumeGroupClicked(); void onRemoveVolumeGroupClicked(); void onCreateClicked(); void onEditClicked(); void onDeleteClicked(); void onPartitionViewActivated(); void onPartitionModelReset(); void updatePartitionToCreate( Device*, Partition* ); void editExistingPartition( Device*, Partition* ); void updateBootLoaderIndex(); /** * @brief Check if a new partition can be created (as primary) on the device. * * Returns true if a new partition can be created on the device. Provides * a warning popup and returns false if it cannot. */ bool checkCanCreate( Device* ); QStringList getCurrentUsedMountpoints(); QMutex m_revertMutex; int m_lastSelectedBootLoaderIndex; bool m_isEfi; }; #endif // PARTITIONPAGE_H calamares-3.2.20/src/modules/partition/gui/PartitionPage.ui000066400000000000000000000142461362604102500236750ustar00rootroot00000000000000 PartitionPage 0 0 684 304 Form Storage de&vice: deviceComboBox Qt::Horizontal 40 20 false &Revert All Changes QAbstractItemView::NoEditTriggers false true false false New Partition &Table Qt::Horizontal 40 20 Cre&ate &Edit &Delete New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group Qt::Vertical QSizePolicy::Fixed 20 24 I&nstall boot loader on: bootLoaderComboBox QComboBox::AdjustToContents Qt::Horizontal 40 1 PartitionBarsView QFrame
gui/PartitionBarsView.h
1
PartitionLabelsView QFrame
gui/PartitionLabelsView.h
1
deviceComboBox revertButton partitionTreeView newPartitionTableButton createButton editButton deleteButton bootLoaderComboBox
calamares-3.2.20/src/modules/partition/gui/PartitionSizeController.cpp000066400000000000000000000151721362604102500261430ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2016, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "gui/PartitionSizeController.h" #include "core/ColorUtils.h" #include "core/KPMHelpers.h" #include "utils/Units.h" // Qt #include // KPMcore #include #include // stdc++ #include PartitionSizeController::PartitionSizeController( QObject* parent ) : QObject( parent ) {} void PartitionSizeController::init( Device* device, Partition* partition, const QColor& color ) { m_device = device; m_originalPartition = partition; // PartResizerWidget stores its changes directly in the partition it is // initialized with. We don't want the changes to be committed that way, // because it means we would have to revert them if the user cancel the // dialog the widget is in. Therefore we init PartResizerWidget with a clone // of the original partition. m_partition.reset( KPMHelpers::clonePartition( m_device, partition ) ); m_partitionColor = color; } void PartitionSizeController::setPartResizerWidget( PartResizerWidget* widget, bool format ) { Q_ASSERT( m_device ); if ( m_partResizerWidget ) disconnect( m_partResizerWidget, nullptr, this, nullptr ); m_dirty = false; m_currentSpinBoxValue = -1; // Update partition filesystem. This must be done *before* the call to // PartResizerWidget::init() otherwise it will be ignored by the widget. // This is why this method accept a `format` boolean. qint64 used = format ? 0 : m_originalPartition->fileSystem().sectorsUsed(); m_partition->fileSystem().setSectorsUsed( used ); // Init PartResizerWidget m_partResizerWidget = widget; PartitionTable* table = m_device->partitionTable(); qint64 minFirstSector = m_originalPartition->firstSector() - table->freeSectorsBefore( *m_originalPartition ); qint64 maxLastSector = m_originalPartition->lastSector() + table->freeSectorsAfter( *m_originalPartition ); m_partResizerWidget->init( *m_device, *m_partition.data(), minFirstSector, maxLastSector ); // FIXME: Should be set by PartResizerWidget itself m_partResizerWidget->setFixedHeight( PartResizerWidget::handleHeight() ); QPalette pal = widget->palette(); pal.setColor( QPalette::Base, ColorUtils::freeSpaceColor() ); pal.setColor( QPalette::Button, m_partitionColor ); m_partResizerWidget->setPalette( pal ); connectWidgets(); if ( !format ) { // If we are not formatting, update the widget to make sure the space // between the first and last sectors is big enough to fit the existing // content. m_updating = true; qint64 firstSector = m_partition->firstSector(); qint64 lastSector = m_partition->lastSector(); // This first time we call doAAUPRW with real first/last sector, // all further calls will come from updatePartResizerWidget, and // will therefore use values calculated from the SpinBox. doAlignAndUpdatePartResizerWidget( firstSector, lastSector ); m_updating = false; } } void PartitionSizeController::setSpinBox( QSpinBox* spinBox ) { if ( m_spinBox ) disconnect( m_spinBox, nullptr, this, nullptr ); m_spinBox = spinBox; m_spinBox->setMaximum( std::numeric_limits< int >::max() ); connectWidgets(); } void PartitionSizeController::connectWidgets() { if ( !m_spinBox || !m_partResizerWidget ) return; connect( m_spinBox, SIGNAL( editingFinished() ), SLOT( updatePartResizerWidget() ) ); connect( m_partResizerWidget, SIGNAL( firstSectorChanged( qint64 ) ), SLOT( updateSpinBox() ) ); connect( m_partResizerWidget, SIGNAL( lastSectorChanged( qint64 ) ), SLOT( updateSpinBox() ) ); // Init m_spinBox from m_partResizerWidget updateSpinBox(); } void PartitionSizeController::updatePartResizerWidget() { if ( m_updating ) return; if ( m_spinBox->value() == m_currentSpinBoxValue ) return; m_updating = true; qint64 sectorSize = qint64( m_spinBox->value() ) * 1024 * 1024 / m_device->logicalSize(); qint64 firstSector = m_partition->firstSector(); qint64 lastSector = firstSector + sectorSize - 1; doAlignAndUpdatePartResizerWidget( firstSector, lastSector ); m_updating = false; } void PartitionSizeController::doAlignAndUpdatePartResizerWidget( qint64 firstSector, qint64 lastSector ) { if ( lastSector > m_partResizerWidget->maximumLastSector() ) { qint64 delta = lastSector - m_partResizerWidget->maximumLastSector(); firstSector -= delta; lastSector -= delta; } if ( lastSector != m_partition->lastSector() ) { m_partResizerWidget->updateLastSector( lastSector ); m_dirty = true; } if ( firstSector != m_partition->firstSector() ) { m_partResizerWidget->updateFirstSector( firstSector ); m_dirty = true; } // Update spinbox value in case it was an impossible value doUpdateSpinBox(); } void PartitionSizeController::updateSpinBox() { if ( m_updating ) return; m_updating = true; doUpdateSpinBox(); m_updating = false; } void PartitionSizeController::doUpdateSpinBox() { if ( !m_spinBox ) return; int mbSize = CalamaresUtils::BytesToMiB( m_partition->length() * m_device->logicalSize() ); m_spinBox->setValue( mbSize ); if ( m_currentSpinBoxValue != -1 && //if it's not the first time we're setting it m_currentSpinBoxValue != mbSize ) //and the operation changes the SB value m_dirty = true; m_currentSpinBoxValue = mbSize; } qint64 PartitionSizeController::firstSector() const { return m_partition->firstSector(); } qint64 PartitionSizeController::lastSector() const { return m_partition->lastSector(); } bool PartitionSizeController::isDirty() const { return m_dirty; } calamares-3.2.20/src/modules/partition/gui/PartitionSizeController.h000066400000000000000000000045661362604102500256150ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2016, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef PARTITIONSIZECONTROLLER_H #define PARTITIONSIZECONTROLLER_H // KPMcore #include // Qt #include #include #include #include class QSpinBox; class Device; class Partition; class PartResizerWidget; /** * Synchronizes a PartResizerWidget and a QSpinBox, making sure any change made * to one is reflected in the other. * * It does not touch the partition it works on: changes are exposed through the * firstSector() and lastSector() getters. */ class PartitionSizeController : public QObject { Q_OBJECT public: explicit PartitionSizeController( QObject* parent = nullptr ); void init( Device* device, Partition* partition, const QColor& color ); void setPartResizerWidget( PartResizerWidget* widget, bool format = true ); void setSpinBox( QSpinBox* spinBox ); qint64 firstSector() const; qint64 lastSector() const; bool isDirty() const; private: QPointer< PartResizerWidget > m_partResizerWidget; QPointer< QSpinBox > m_spinBox; Device* m_device = nullptr; const Partition* m_originalPartition = nullptr; QScopedPointer< Partition > m_partition; QColor m_partitionColor; bool m_updating = false; void connectWidgets(); void doUpdateSpinBox(); void doAlignAndUpdatePartResizerWidget( qint64 fistSector, qint64 lastSector ); bool m_dirty = false; qint64 m_currentSpinBoxValue = -1; private Q_SLOTS: void updatePartResizerWidget(); void updateSpinBox(); }; #endif /* PARTITIONSIZECONTROLLER_H */ calamares-3.2.20/src/modules/partition/gui/PartitionSplitterWidget.cpp000066400000000000000000000475301362604102500261420ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2016, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "PartitionSplitterWidget.h" #include "core/ColorUtils.h" #include "core/KPMHelpers.h" #include "partition/PartitionIterator.h" #include "partition/PartitionQuery.h" #include "utils/Logger.h" #include "utils/CalamaresUtilsGui.h" #include #include #include #include #include #include using CalamaresUtils::Partition::PartitionIterator; static const int VIEW_HEIGHT = qMax( CalamaresUtils::defaultFontHeight() + 8, // wins out with big fonts int( CalamaresUtils::defaultFontHeight() * 0.6 ) + 22 ); // wins out with small fonts static const int CORNER_RADIUS = 3; static const int EXTENDED_PARTITION_MARGIN = qMax( 4, VIEW_HEIGHT / 6 ); PartitionSplitterWidget::PartitionSplitterWidget( QWidget* parent ) : QWidget( parent ) , m_itemToResize( PartitionSplitterItem::null() ) , m_itemToResizeNext( PartitionSplitterItem::null() ) , m_itemMinSize( 0 ) , m_itemMaxSize( 0 ) , m_itemPrefSize( 0 ) , m_resizing( false ) , m_resizeHandleX( 0 ) , HANDLE_SNAP( QApplication::startDragDistance() ) , m_drawNestedPartitions( false ) { setMouseTracking( true ); } void PartitionSplitterWidget::init( Device* dev, bool drawNestedPartitions ) { m_drawNestedPartitions = drawNestedPartitions; QVector< PartitionSplitterItem > allPartitionItems; PartitionSplitterItem* extendedPartitionItem = nullptr; for ( auto it = PartitionIterator::begin( dev ); it != PartitionIterator::end( dev ); ++it ) { PartitionSplitterItem newItem = { ( *it )->partitionPath(), ColorUtils::colorForPartition( *it ), CalamaresUtils::Partition::isPartitionFreeSpace( *it ), ( *it )->capacity(), PartitionSplitterItem::Normal, {} }; // If we don't draw child partitions of a partitions as child partitions, we // need to flatten the items tree into an items list if ( drawNestedPartitions ) { if ( ( *it )->roles().has( PartitionRole::Logical ) && extendedPartitionItem ) extendedPartitionItem->children.append( newItem ); else { allPartitionItems.append( newItem ); if ( ( *it )->roles().has( PartitionRole::Extended ) ) extendedPartitionItem = &allPartitionItems.last(); } } else { if ( !( *it )->roles().has( PartitionRole::Extended ) ) allPartitionItems.append( newItem ); } } setupItems( allPartitionItems ); } void PartitionSplitterWidget::setupItems( const QVector& items ) { m_itemToResize = PartitionSplitterItem::null(); m_itemToResizeNext = PartitionSplitterItem::null(); m_itemToResizePath.clear(); m_items.clear(); m_items = items; repaint(); for ( const PartitionSplitterItem& item : items ) cDebug() << "PSI added item" << item.itemPath << "size" << item.size; } void PartitionSplitterWidget::setSplitPartition( const QString& path, qint64 minSize, qint64 maxSize, qint64 preferredSize ) { cDebug() << Q_FUNC_INFO << "path:" << path << "\nminSize:" << minSize << "\nmaxSize:" << maxSize << "\nprfSize:" << preferredSize; if ( m_itemToResize && m_itemToResizeNext ) { cDebug() << "NOTICE: trying to split partition but partition to split is already set."; // We need to remove the itemToResizeNext from wherever it is for ( int i = 0; i < m_items.count(); ++i ) { if ( m_items[ i ].itemPath == m_itemToResize.itemPath && m_items[ i ].status == PartitionSplitterItem::Resizing && i + 1 < m_items.count() ) { m_items[ i ].size = m_items[ i ].size + m_itemToResizeNext.size; m_items[ i ].status = PartitionSplitterItem::Normal; m_items.removeAt( i + 1 ); m_itemToResizeNext = PartitionSplitterItem::null(); break; } else if ( !m_items[ i ].children.isEmpty() ) { for ( int j = 0; j < m_items[ i ].children.count(); ++j ) { if ( m_items[ i ].children[ j ].itemPath == m_itemToResize.itemPath && j + 1 < m_items[ i ].children.count() ) { m_items[ i ].children[ j ].size = m_items[ i ].children[ j ].size + m_itemToResizeNext.size; m_items[ i ].children[ j ].status = PartitionSplitterItem::Normal; m_items[ i ].children.removeAt( j + 1 ); m_itemToResizeNext = PartitionSplitterItem::null(); break; } } if ( m_itemToResizeNext.isNull() ) break; } } m_itemToResize = PartitionSplitterItem::null(); m_itemToResizePath.clear(); } PartitionSplitterItem itemToResize = _findItem( m_items, [ path ]( PartitionSplitterItem& item ) -> bool { if ( path == item.itemPath ) { item.status = PartitionSplitterItem::Resizing; return true; } return false; } ); if ( itemToResize.isNull() ) return; cDebug() << "itemToResize:" << itemToResize.itemPath; m_itemToResize = itemToResize; m_itemToResizePath = path; if ( preferredSize > maxSize ) preferredSize = maxSize; qint64 newSize = m_itemToResize.size - preferredSize; m_itemToResize.size = preferredSize; int opCount = _eachItem( m_items, [ preferredSize ]( PartitionSplitterItem& item ) -> bool { if ( item.status == PartitionSplitterItem::Resizing ) { item.size = preferredSize; return true; } return false; } ); cDebug() << "each splitter item opcount:" << opCount; m_itemMinSize = minSize; m_itemMaxSize = maxSize; m_itemPrefSize = preferredSize; for ( int i = 0; i < m_items.count(); ++i ) { if ( m_items[ i ].itemPath == itemToResize.itemPath ) { m_items.insert( i+1, { "", QColor( "#c0392b" ), false, newSize, PartitionSplitterItem::ResizingNext, {} } ); m_itemToResizeNext = m_items[ i+1 ]; break; } else if ( !m_items[ i ].children.isEmpty() ) { for ( int j = 0; j < m_items[ i ].children.count(); ++j ) { if ( m_items[ i ].children[ j ].itemPath == itemToResize.itemPath ) { m_items[ i ].children.insert( j+1, { "", QColor( "#c0392b" ), false, newSize, PartitionSplitterItem::ResizingNext, {} } ); m_itemToResizeNext = m_items[ i ].children[ j+1 ]; break; } } if ( !m_itemToResizeNext.isNull() ) break; } } emit partitionResized( m_itemToResize.itemPath, m_itemToResize.size, m_itemToResizeNext.size ); cDebug() << "Items updated. Status:"; foreach ( const PartitionSplitterItem& item, m_items ) cDebug() << "item" << item.itemPath << "size" << item.size << "status:" << item.status; cDebug() << "m_itemToResize: " << !m_itemToResize.isNull() << m_itemToResize.itemPath; cDebug() << "m_itemToResizeNext:" << !m_itemToResizeNext.isNull() << m_itemToResizeNext.itemPath; repaint(); } qint64 PartitionSplitterWidget::splitPartitionSize() const { if ( !m_itemToResize ) return -1; return m_itemToResize.size; } qint64 PartitionSplitterWidget::newPartitionSize() const { if ( !m_itemToResizeNext ) return -1; return m_itemToResizeNext.size; } QSize PartitionSplitterWidget::sizeHint() const { return QSize( -1, VIEW_HEIGHT ); } QSize PartitionSplitterWidget::minimumSizeHint() const { return sizeHint(); } void PartitionSplitterWidget::paintEvent( QPaintEvent* event ) { Q_UNUSED( event ) QPainter painter( this ); painter.fillRect( rect(), palette().window() ); painter.setRenderHint( QPainter::Antialiasing ); drawPartitions( &painter, rect(), m_items ); } void PartitionSplitterWidget::mousePressEvent( QMouseEvent* event ) { if ( m_itemToResize && m_itemToResizeNext && event->button() == Qt::LeftButton ) { if ( qAbs( event->x() - m_resizeHandleX ) < HANDLE_SNAP ) m_resizing = true; } } void PartitionSplitterWidget::mouseMoveEvent( QMouseEvent* event ) { if ( m_resizing ) { qint64 start = 0; QString itemPath = m_itemToResize.itemPath; for ( auto it = m_items.constBegin(); it != m_items.constEnd(); ++it ) { if ( it->itemPath == itemPath ) break; else if ( !it->children.isEmpty() ) { bool done = false; for ( auto jt = it->children.constBegin(); jt != it->children.constEnd(); ++jt ) { if ( jt->itemPath == itemPath ) { done = true; break; } start += jt->size; } if ( done ) break; } else start += it->size; } qint64 total = 0; for ( auto it = m_items.constBegin(); it != m_items.constEnd(); ++it ) { total += it->size; } int ew = rect().width(); //effective width qreal bpp = total / static_cast< qreal >( ew ); //bytes per pixel qreal mx = event->x() * bpp - start; // make sure we are within resize range mx = qBound( static_cast< qreal >( m_itemMinSize ), mx, static_cast< qreal >( m_itemMaxSize ) ); qint64 span = m_itemPrefSize; qreal percent = mx / span; qint64 oldsize = m_itemToResize.size; m_itemToResize.size = qRound64( span * percent ); m_itemToResizeNext.size -= m_itemToResize.size - oldsize; _eachItem( m_items, [ this ]( PartitionSplitterItem& item ) -> bool { if ( item.status == PartitionSplitterItem::Resizing ) { item.size = m_itemToResize.size; return true; } else if ( item.status == PartitionSplitterItem::ResizingNext ) { item.size = m_itemToResizeNext.size; return true; } return false; } ); repaint(); emit partitionResized( itemPath, m_itemToResize.size, m_itemToResizeNext.size ); } else { if ( m_itemToResize && m_itemToResizeNext ) { if ( qAbs( event->x() - m_resizeHandleX ) < HANDLE_SNAP ) setCursor( Qt::SplitHCursor ); else if ( cursor().shape() != Qt::ArrowCursor ) setCursor( Qt::ArrowCursor ); } } } void PartitionSplitterWidget::mouseReleaseEvent( QMouseEvent* event ) { Q_UNUSED( event ) m_resizing = false; } void PartitionSplitterWidget::drawSection( QPainter* painter, const QRect& rect_, int x, int width, const PartitionSplitterItem& item ) { QColor color = item.color; bool isFreeSpace = item.isFreeSpace; QRect rect = rect_; const int y = rect.y(); const int rectHeight = rect.height(); const int radius = qMax( 1, CORNER_RADIUS - ( height() - rectHeight ) / 2 ); painter->setClipRect( x, y, width, rectHeight ); painter->translate( 0.5, 0.5 ); rect.adjust( 0, 0, -1, -1 ); const QColor borderColor = color.darker(); painter->setPen( borderColor ); painter->setBrush( color ); painter->drawRoundedRect( rect, radius, radius ); // Draw shade if ( !isFreeSpace ) rect.adjust( 2, 2, -2, -2 ); QLinearGradient gradient( 0, 0, 0, rectHeight / 2 ); qreal c = isFreeSpace ? 0 : 1; gradient.setColorAt( 0, QColor::fromRgbF( c, c, c, 0.3 ) ); gradient.setColorAt( 1, QColor::fromRgbF( c, c, c, 0 ) ); painter->setPen( Qt::NoPen ); painter->setBrush( gradient ); painter->drawRoundedRect( rect, radius, radius ); painter->translate( -0.5, -0.5 ); } void PartitionSplitterWidget::drawResizeHandle( QPainter* painter, const QRect& rect_, int x ) { if ( !m_itemToResize ) return; painter->setPen( Qt::NoPen ); painter->setBrush( Qt::black ); painter->setClipRect( rect_ ); painter->setRenderHint( QPainter::Antialiasing, true ); qreal h = VIEW_HEIGHT; // Put the arrow in the center regardless of inner box height int scaleFactor = qRound( height() / static_cast< qreal >( VIEW_HEIGHT ) ); QList< QPair< qreal, qreal > > arrow_offsets = { qMakePair( 0, h / 2 - 1 ), qMakePair( 4, h / 2 - 1 ), qMakePair( 4, h / 2 - 3 ), qMakePair( 8, h / 2 ), qMakePair( 4, h / 2 + 3 ), qMakePair( 4, h / 2 + 1 ), qMakePair( 0, h / 2 + 1 ) }; for ( int i = 0; i < arrow_offsets.count(); ++i ) { arrow_offsets[ i ] = qMakePair( arrow_offsets[ i ].first * scaleFactor, ( arrow_offsets[ i ].second - h/2 ) * scaleFactor + h/2 ); } auto p1 = arrow_offsets[ 0 ]; if ( m_itemToResize.size > m_itemMinSize ) { auto arrow = QPainterPath( QPointF( x + -1 * p1.first, p1.second ) ); for ( auto p : arrow_offsets ) arrow.lineTo( x + -1 * p.first + 1, p.second ); painter->drawPath( arrow ); } if ( m_itemToResize.size < m_itemMaxSize ) { auto arrow = QPainterPath( QPointF( x + p1.first, p1.second ) ); for ( auto p : arrow_offsets ) arrow.lineTo( x + p.first, p.second ); painter->drawPath( arrow ); } painter->setRenderHint( QPainter::Antialiasing, false ); painter->setPen( Qt::black ); painter->drawLine( x, 0, x, int(h) - 1 ); } void PartitionSplitterWidget::drawPartitions( QPainter* painter, const QRect& rect, const QVector< PartitionSplitterItem >& itemList ) { const int count = itemList.count(); const int totalWidth = rect.width(); auto pair = computeItemsVector( itemList ); QVector< PartitionSplitterItem >& items = pair.first; qreal total = pair.second; int x = rect.x(); for ( int row = 0; row < count; ++row ) { const PartitionSplitterItem& item = items[ row ]; qreal width; if ( row < count - 1 ) width = totalWidth * ( item.size / total ); else // Make sure we fill the last pixel column width = rect.right() - x + 1; drawSection( painter, rect, x, int(width), item ); if ( !item.children.isEmpty() ) { QRect subRect( x + EXTENDED_PARTITION_MARGIN, rect.y() + EXTENDED_PARTITION_MARGIN, int(width) - 2 * EXTENDED_PARTITION_MARGIN, rect.height() - 2 * EXTENDED_PARTITION_MARGIN ); drawPartitions( painter, subRect, item.children ); } // If an item to resize and the following new item both exist, // and this is not the very first partition, // and the partition preceding this one is the item to resize... if ( m_itemToResize && m_itemToResizeNext && row > 0 && !items[ row - 1 ].isFreeSpace && !items[ row - 1 ].itemPath.isEmpty() && items[ row - 1 ].itemPath == m_itemToResize.itemPath ) { m_resizeHandleX = x; drawResizeHandle( painter, rect, m_resizeHandleX ); } x += width; } } PartitionSplitterItem PartitionSplitterWidget::_findItem( QVector< PartitionSplitterItem >& items, std::function< bool ( PartitionSplitterItem& ) > condition ) const { for ( auto it = items.begin(); it != items.end(); ++it) { if ( condition( *it ) ) return *it; PartitionSplitterItem candidate = _findItem( it->children, condition ); if ( !candidate.isNull() ) return candidate; } return PartitionSplitterItem::null(); } int PartitionSplitterWidget::_eachItem( QVector< PartitionSplitterItem >& items, std::function< bool ( PartitionSplitterItem& ) > operation ) const { int opCount = 0; for ( auto it = items.begin(); it != items.end(); ++it) { if ( operation( *it ) ) opCount++; opCount += _eachItem( it->children, operation ); } return opCount; } QPair< QVector< PartitionSplitterItem >, qreal > PartitionSplitterWidget::computeItemsVector( const QVector< PartitionSplitterItem >& originalItems ) const { QVector< PartitionSplitterItem > items; qreal total = 0; for ( int row = 0; row < originalItems.count(); ++row ) { if ( originalItems[ row ].children.isEmpty() ) { items += originalItems[ row ]; total += originalItems[ row ].size; } else { PartitionSplitterItem thisItem = originalItems[ row ]; QPair< QVector< PartitionSplitterItem >, qreal > pair = computeItemsVector( thisItem.children ); thisItem.children = pair.first; thisItem.size = qint64(pair.second); items += thisItem; total += thisItem.size; } } // The sizes we have are perfect, but now we have to hardcode a minimum size for small // partitions and compensate for it in the total. qreal adjustedTotal = total; for ( int row = 0; row < items.count(); ++row ) { if ( items[ row ].size < 0.01 * total ) // If this item is smaller than 1% of everything, { // force its width to 1%. adjustedTotal -= items[ row ].size; items[ row ].size = qint64(0.01 * total); adjustedTotal += items[ row ].size; } } return qMakePair( items, adjustedTotal ); } calamares-3.2.20/src/modules/partition/gui/PartitionSplitterWidget.h000066400000000000000000000071731362604102500256060ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2016, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef PARTITIONSPLITTERWIDGET_H #define PARTITIONSPLITTERWIDGET_H #include #include class Device; struct PartitionSplitterItem { enum Status { Normal = 0, Resizing, ResizingNext }; QString itemPath; QColor color; bool isFreeSpace; qint64 size; Status status; using ChildVector = QVector< PartitionSplitterItem >; ChildVector children; static PartitionSplitterItem null() { return { QString(), QColor(), false, 0, Normal, ChildVector() }; } bool isNull() const { return itemPath.isEmpty() && size == 0 && status == Normal; } operator bool() const { return !isNull(); } }; class PartitionSplitterWidget : public QWidget { Q_OBJECT public: explicit PartitionSplitterWidget( QWidget* parent = nullptr ); void init( Device* dev, bool drawNestedPartitions ); void setSplitPartition( const QString& path, qint64 minSize, qint64 maxSize, qint64 preferredSize ); qint64 splitPartitionSize() const; qint64 newPartitionSize() const; QSize sizeHint() const override; QSize minimumSizeHint() const override; signals: void partitionResized( const QString&, qint64, qint64 ); protected: void paintEvent( QPaintEvent* event ) override; void mousePressEvent( QMouseEvent* event ) override; void mouseMoveEvent( QMouseEvent* event ) override; void mouseReleaseEvent( QMouseEvent* event ) override; private: void setupItems( const QVector< PartitionSplitterItem >& items ); void drawPartitions( QPainter* painter, const QRect& rect, const QVector< PartitionSplitterItem >& itemList ); void drawSection( QPainter* painter, const QRect& rect_, int x, int width, const PartitionSplitterItem& item ); void drawResizeHandle( QPainter* painter, const QRect& rect_, int x ); PartitionSplitterItem _findItem( QVector< PartitionSplitterItem >& items, std::function< bool ( PartitionSplitterItem& ) > condition ) const; int _eachItem( QVector< PartitionSplitterItem >& items, std::function< bool ( PartitionSplitterItem& ) > operation ) const; QPair< QVector< PartitionSplitterItem >, qreal > computeItemsVector( const QVector< PartitionSplitterItem >& originalItems ) const; QVector< PartitionSplitterItem > m_items; QString m_itemToResizePath; PartitionSplitterItem m_itemToResize; PartitionSplitterItem m_itemToResizeNext; qint64 m_itemMinSize; qint64 m_itemMaxSize; qint64 m_itemPrefSize; bool m_resizing; int m_resizeHandleX; const int HANDLE_SNAP; bool m_drawNestedPartitions; }; #endif // PARTITIONSPLITTERWIDGET_H calamares-3.2.20/src/modules/partition/gui/PartitionViewSelectionFilter.h000066400000000000000000000020021362604102500265440ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2016, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef PARTITIONVIEWSELECTIONFILTER_H #define PARTITIONVIEWSELECTIONFILTER_H #include #include typedef std::function< bool( const QModelIndex& ) > SelectionFilter; #endif // PARTITIONVIEWSELECTIONFILTER_H calamares-3.2.20/src/modules/partition/gui/PartitionViewStep.cpp000066400000000000000000000614041362604102500247320ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2014-2017, Teo Mrnjavac * Copyright 2018-2019, Adriaan de Groot * Copyright 2019, Collabora Ltd * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "gui/PartitionViewStep.h" #include "core/DeviceModel.h" #include "core/PartitionActions.h" #include "core/PartitionCoreModule.h" #include "core/PartitionModel.h" #include "core/KPMHelpers.h" #include "core/OsproberEntry.h" #include "core/PartUtils.h" #include "gui/ChoicePage.h" #include "gui/PartitionPage.h" #include "gui/PartitionBarsView.h" #include "gui/PartitionLabelsView.h" #include "Branding.h" #include "CalamaresVersion.h" #include "GlobalStorage.h" #include "Job.h" #include "JobQueue.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" #include "utils/NamedEnum.h" #include "utils/Retranslator.h" #include "utils/Variant.h" #include "widgets/WaitingWidget.h" #include #include #include // Qt #include #include #include #include #include #include #include #include #include #include PartitionViewStep::PartitionViewStep( QObject* parent ) : Calamares::ViewStep( parent ) , m_core( nullptr ) , m_widget( new QStackedWidget() ) , m_choicePage( nullptr ) , m_manualPartitionPage( nullptr ) , m_requiredStorageGiB( 0.0 ) { m_widget->setContentsMargins( 0, 0, 0, 0 ); m_waitingWidget = new WaitingWidget( QString() ); m_widget->addWidget( m_waitingWidget ); CALAMARES_RETRANSLATE( m_waitingWidget->setText( tr( "Gathering system information..." ) ); ) m_core = new PartitionCoreModule( this ); // Unusable before init is complete! // We're not done loading, but we need the configuration map first. } void PartitionViewStep::initPartitionCoreModule() { Q_ASSERT( m_core ); m_core->init(); } void PartitionViewStep::continueLoading() { Q_ASSERT( !m_choicePage ); m_choicePage = new ChoicePage( m_swapChoices ); m_choicePage->init( m_core ); m_widget->addWidget( m_choicePage ); // Instantiate the manual partitioning page as needed. // Q_ASSERT( !m_manualPartitionPage ); // m_manualPartitionPage = new PartitionPage( m_core ); // m_widget->addWidget( m_manualPartitionPage ); m_widget->removeWidget( m_waitingWidget ); m_waitingWidget->deleteLater(); m_waitingWidget = nullptr; connect( m_core, &PartitionCoreModule::hasRootMountPointChanged, this, &PartitionViewStep::nextStatusChanged ); connect( m_choicePage, &ChoicePage::nextStatusChanged, this, &PartitionViewStep::nextStatusChanged ); } PartitionViewStep::~PartitionViewStep() { if ( m_choicePage && m_choicePage->parent() == nullptr ) m_choicePage->deleteLater(); if ( m_manualPartitionPage && m_manualPartitionPage->parent() == nullptr ) m_manualPartitionPage->deleteLater(); } QString PartitionViewStep::prettyName() const { return tr( "Partitions" ); } QWidget* PartitionViewStep::widget() { return m_widget; } QWidget* PartitionViewStep::createSummaryWidget() const { QWidget* widget = new QWidget; QVBoxLayout* mainLayout = new QVBoxLayout; widget->setLayout( mainLayout ); mainLayout->setMargin( 0 ); ChoicePage::InstallChoice choice = m_choicePage->currentChoice(); QFormLayout* formLayout = new QFormLayout( widget ); const int MARGIN = CalamaresUtils::defaultFontHeight() / 2; formLayout->setContentsMargins( MARGIN, 0, MARGIN, MARGIN ); mainLayout->addLayout( formLayout ); QList< PartitionCoreModule::SummaryInfo > list = m_core->createSummaryInfo(); if ( list.length() > 1 ) // There are changes on more than one disk { //NOTE: all of this should only happen when Manual partitioning is active. // Any other choice should result in a list.length() == 1. QLabel* modeLabel = new QLabel; formLayout->addRow( modeLabel ); QString modeText; switch ( choice ) { case ChoicePage::Alongside: modeText = tr( "Install %1 alongside another operating system." ) .arg( *Calamares::Branding::ShortVersionedName ); break; case ChoicePage::Erase: modeText = tr( "Erase disk and install %1." ) .arg( *Calamares::Branding::ShortVersionedName ); break; case ChoicePage::Replace: modeText = tr( "Replace a partition with %1." ) .arg( *Calamares::Branding::ShortVersionedName ); break; case ChoicePage::NoChoice: case ChoicePage::Manual: modeText = tr( "Manual partitioning." ); } modeLabel->setText( modeText ); } for ( const auto& info : list ) { QLabel* diskInfoLabel = new QLabel; if ( list.length() == 1 ) // this is the only disk preview { QString modeText; switch ( choice ) { case ChoicePage::Alongside: modeText = tr( "Install %1 alongside another operating system on disk %2 (%3)." ) .arg( *Calamares::Branding::ShortVersionedName ) .arg( info.deviceNode ) .arg( info.deviceName ); break; case ChoicePage::Erase: modeText = tr( "Erase disk %2 (%3) and install %1." ) .arg( *Calamares::Branding::ShortVersionedName ) .arg( info.deviceNode ) .arg( info.deviceName ); break; case ChoicePage::Replace: modeText = tr( "Replace a partition on disk %2 (%3) with %1." ) .arg( *Calamares::Branding::ShortVersionedName ) .arg( info.deviceNode ) .arg( info.deviceName ); break; case ChoicePage::NoChoice: case ChoicePage::Manual: modeText = tr( "Manual partitioning on disk %1 (%2)." ) .arg( info.deviceNode ) .arg( info.deviceName ); } diskInfoLabel->setText( modeText ); } else // multiple disk previews! { diskInfoLabel->setText( tr( "Disk %1 (%2)" ) .arg( info.deviceNode ) .arg( info.deviceName ) ); } formLayout->addRow( diskInfoLabel ); PartitionBarsView* preview; PartitionLabelsView* previewLabels; QVBoxLayout* field; PartitionBarsView::NestedPartitionsMode mode = Calamares::JobQueue::instance()->globalStorage()-> value( "drawNestedPartitions" ).toBool() ? PartitionBarsView::DrawNestedPartitions : PartitionBarsView::NoNestedPartitions; preview = new PartitionBarsView; preview->setNestedPartitionsMode( mode ); previewLabels = new PartitionLabelsView; previewLabels->setExtendedPartitionHidden( mode == PartitionBarsView::NoNestedPartitions ); preview->setModel( info.partitionModelBefore ); previewLabels->setModel( info.partitionModelBefore ); preview->setSelectionMode( QAbstractItemView::NoSelection ); previewLabels->setSelectionMode( QAbstractItemView::NoSelection ); info.partitionModelBefore->setParent( widget ); field = new QVBoxLayout; CalamaresUtils::unmarginLayout( field ); field->setSpacing( 6 ); field->addWidget( preview ); field->addWidget( previewLabels ); formLayout->addRow( tr( "Current:" ), field ); preview = new PartitionBarsView; preview->setNestedPartitionsMode( mode ); previewLabels = new PartitionLabelsView; previewLabels->setExtendedPartitionHidden( mode == PartitionBarsView::NoNestedPartitions ); preview->setModel( info.partitionModelAfter ); previewLabels->setModel( info.partitionModelAfter ); preview->setSelectionMode( QAbstractItemView::NoSelection ); previewLabels->setSelectionMode( QAbstractItemView::NoSelection ); previewLabels->setCustomNewRootLabel( *Calamares::Branding::BootloaderEntryName ); info.partitionModelAfter->setParent( widget ); field = new QVBoxLayout; CalamaresUtils::unmarginLayout( field ); field->setSpacing( 6 ); field->addWidget( preview ); field->addWidget( previewLabels ); formLayout->addRow( tr( "After:" ), field ); } QStringList jobsLines; foreach ( const Calamares::job_ptr& job, jobs() ) { if ( !job->prettyDescription().isEmpty() ) jobsLines.append( job->prettyDescription() ); } if ( !jobsLines.isEmpty() ) { QLabel* jobsLabel = new QLabel( widget ); mainLayout->addWidget( jobsLabel ); jobsLabel->setText( jobsLines.join( "
" ) ); jobsLabel->setMargin( CalamaresUtils::defaultFontHeight() / 2 ); QPalette pal; pal.setColor( QPalette::Background, pal.window().color().lighter( 108 ) ); jobsLabel->setAutoFillBackground( true ); jobsLabel->setPalette( pal ); } return widget; } void PartitionViewStep::next() { if ( m_choicePage == m_widget->currentWidget() ) { if ( m_choicePage->currentChoice() == ChoicePage::Manual ) { if ( !m_manualPartitionPage ) { m_manualPartitionPage = new PartitionPage( m_core ); m_widget->addWidget( m_manualPartitionPage ); } m_widget->setCurrentWidget( m_manualPartitionPage ); m_manualPartitionPage->selectDeviceByIndex( m_choicePage->lastSelectedDeviceIndex() ); if ( m_core->isDirty() ) m_manualPartitionPage->onRevertClicked(); } cDebug() << "Choice applied: " << m_choicePage->currentChoice(); } } void PartitionViewStep::back() { if ( m_widget->currentWidget() != m_choicePage ) { m_widget->setCurrentWidget( m_choicePage ); m_choicePage->setLastSelectedDeviceIndex( m_manualPartitionPage->selectedDeviceIndex() ); if ( m_manualPartitionPage ) { m_manualPartitionPage->deleteLater(); m_manualPartitionPage = nullptr; } } } bool PartitionViewStep::isNextEnabled() const { if ( m_choicePage && m_widget->currentWidget() == m_choicePage ) return m_choicePage->isNextEnabled(); if ( m_manualPartitionPage && m_widget->currentWidget() == m_manualPartitionPage ) return m_core->hasRootMountPoint(); return false; } bool PartitionViewStep::isBackEnabled() const { return true; } bool PartitionViewStep::isAtBeginning() const { if ( m_widget->currentWidget() != m_choicePage ) return false; return true; } bool PartitionViewStep::isAtEnd() const { if ( m_widget->currentWidget() == m_choicePage ) { if ( m_choicePage->currentChoice() == ChoicePage::Erase || m_choicePage->currentChoice() == ChoicePage::Replace || m_choicePage->currentChoice() == ChoicePage::Alongside ) return true; return false; } return true; } void PartitionViewStep::onActivate() { // If there's no setting (e.g. from the welcome page) for required storage // then use ours, if it was set. auto* gs = Calamares::JobQueue::instance() ? Calamares::JobQueue::instance()->globalStorage() : nullptr; if ( m_requiredStorageGiB >= 0.0 && gs && !gs->contains( "requiredStorageGiB" ) ) { gs->insert( "requiredStorageGiB", m_requiredStorageGiB ); } // if we're coming back to PVS from the next VS if ( m_widget->currentWidget() == m_choicePage && m_choicePage->currentChoice() == ChoicePage::Alongside ) { m_choicePage->applyActionChoice( ChoicePage::Alongside ); // m_choicePage->reset(); //FIXME: ReplaceWidget should be reset maybe? } } void PartitionViewStep::onLeave() { if ( m_widget->currentWidget() == m_choicePage ) { m_choicePage->onLeave(); return; } if ( m_widget->currentWidget() == m_manualPartitionPage ) { if ( PartUtils::isEfiSystem() ) { QString espMountPoint = Calamares::JobQueue::instance()->globalStorage()-> value( "efiSystemPartition" ).toString(); Partition* esp = m_core->findPartitionByMountPoint( espMountPoint ); QString message; QString description; if ( !esp ) { message = tr( "No EFI system partition configured" ); description = tr( "An EFI system partition is necessary to start %1." "

" "To configure an EFI system partition, go back and " "select or create a FAT32 filesystem with the " "esp flag enabled and mount point " "%2.

" "You can continue without setting up an EFI system " "partition but your system may fail to start." ) .arg( *Calamares::Branding::ShortProductName ) .arg( espMountPoint ); } else if ( esp && !PartUtils::isEfiBootable( esp ) ) { message = tr( "EFI system partition flag not set" ); description = tr( "An EFI system partition is necessary to start %1." "

" "A partition was configured with mount point " "%2 but its esp " "flag is not set.
" "To set the flag, go back and edit the partition." "

" "You can continue without setting the flag but your " "system may fail to start." ) .arg( *Calamares::Branding::ShortProductName ) .arg( espMountPoint ); } if ( !message.isEmpty() ) { cWarning() << message; QMessageBox::warning( m_manualPartitionPage, message, description ); } } Partition* root_p = m_core->findPartitionByMountPoint( "/" ); Partition* boot_p = m_core->findPartitionByMountPoint( "/boot" ); if ( root_p and boot_p ) { QString message; QString description; // If the root partition is encrypted, and there's a separate boot // partition which is not encrypted if ( root_p->fileSystem().type() == FileSystem::Luks && boot_p->fileSystem().type() != FileSystem::Luks ) { message = tr( "Boot partition not encrypted" ); description = tr( "A separate boot partition was set up together with " "an encrypted root partition, but the boot partition " "is not encrypted." "

" "There are security concerns with this kind of " "setup, because important system files are kept " "on an unencrypted partition.
" "You may continue if you wish, but filesystem " "unlocking will happen later during system startup." "
To encrypt the boot partition, go back and " "recreate it, selecting Encrypt " "in the partition creation window." ); QMessageBox::warning( m_manualPartitionPage, message, description ); } } } } void PartitionViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { // Copy the efiSystemPartition setting to the global storage. It is needed not only in // the EraseDiskPage, but also in the bootloader configuration modules (grub, bootloader). Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); QString efiSP = CalamaresUtils::getString( configurationMap, "efiSystemPartition" ); if ( efiSP.isEmpty() ) efiSP = QStringLiteral( "/boot/efi" ); gs->insert( "efiSystemPartition", efiSP ); // Set up firmwareType global storage entry. This is used, e.g. by the bootloader module. QString firmwareType( PartUtils::isEfiSystem() ? QStringLiteral( "efi" ) : QStringLiteral( "bios" ) ); cDebug() << "Setting firmwareType to" << firmwareType; gs->insert( "firmwareType", firmwareType ); // Read and parse key efiSystemPartitionSize if ( configurationMap.contains( "efiSystemPartitionSize" ) ) { gs->insert( "efiSystemPartitionSize", CalamaresUtils::getString( configurationMap, "efiSystemPartitionSize" ) ); } // SWAP SETTINGS // // This is a bit convoluted because there's legacy settings to handle as well // as the new-style list of choices, with mapping back-and-forth. if ( configurationMap.contains( "userSwapChoices" ) && ( configurationMap.contains( "ensureSuspendToDisk" ) || configurationMap.contains( "neverCreateSwap" ) ) ) cError() << "Partition-module configuration mixes old- and new-style swap settings."; if ( configurationMap.contains( "ensureSuspendToDisk" ) ) cWarning() << "Partition-module setting *ensureSuspendToDisk* is deprecated."; bool ensureSuspendToDisk = CalamaresUtils::getBool( configurationMap, "ensureSuspendToDisk", true ); if ( configurationMap.contains( "neverCreateSwap" ) ) cWarning() << "Partition-module setting *neverCreateSwap* is deprecated."; bool neverCreateSwap = CalamaresUtils::getBool( configurationMap, "neverCreateSwap", false ); QSet< PartitionActions::Choices::SwapChoice > choices; // Available swap choices if ( configurationMap.contains( "userSwapChoices" ) ) { // We've already warned about overlapping settings with the // legacy *ensureSuspendToDisk* and *neverCreateSwap*. QStringList l = configurationMap[ "userSwapChoices" ].toStringList(); for ( const auto& item : l ) { bool ok = false; auto v = PartitionActions::Choices::nameToChoice( item, ok ); if ( ok ) choices.insert( v ); } if ( choices.isEmpty() ) { cWarning() << "Partition-module configuration for *userSwapChoices* is empty:" << l; choices.insert( PartitionActions::Choices::SwapChoice::FullSwap ); } // suspend if it's one of the possible choices; suppress swap only if it's // the **only** choice available. ensureSuspendToDisk = choices.contains( PartitionActions::Choices::SwapChoice::FullSwap ); neverCreateSwap = ( choices.count() == 1 ) && choices.contains( PartitionActions::Choices::SwapChoice::NoSwap ); } else { // Convert the legacy settings into a single setting for now. if ( neverCreateSwap ) choices.insert( PartitionActions::Choices::SwapChoice::NoSwap ); else if ( ensureSuspendToDisk ) choices.insert( PartitionActions::Choices::SwapChoice::FullSwap ); else choices.insert( PartitionActions::Choices::SwapChoice::SmallSwap ); } // Not all are supported right now // FIXME static const char unsupportedSetting[] = "Partition-module does not support *userSwapChoices* setting"; #define COMPLAIN_UNSUPPORTED(x) \ if ( choices.contains( x ) ) \ { cWarning() << unsupportedSetting << PartitionActions::Choices::choiceToName( x ); choices.remove( x ); } COMPLAIN_UNSUPPORTED( PartitionActions::Choices::SwapChoice::SwapFile ) COMPLAIN_UNSUPPORTED( PartitionActions::Choices::SwapChoice::ReuseSwap ) #undef COMPLAIN_UNSUPPORTED m_swapChoices = choices; // Settings that overlap with the Welcome module m_requiredStorageGiB = CalamaresUtils::getDouble( configurationMap, "requiredStorage", -1.0 ); // These gs settings seem to be unused (in upstream Calamares) outside of // the partition module itself. gs->insert( "ensureSuspendToDisk", ensureSuspendToDisk ); gs->insert( "neverCreateSwap", neverCreateSwap ); // OTHER SETTINGS // gs->insert( "drawNestedPartitions", CalamaresUtils::getBool( configurationMap, "drawNestedPartitions", false ) ); gs->insert( "alwaysShowPartitionLabels", CalamaresUtils::getBool( configurationMap, "alwaysShowPartitionLabels", true ) ); gs->insert( "enableLuksAutomatedPartitioning", CalamaresUtils::getBool( configurationMap, "enableLuksAutomatedPartitioning", true ) ); gs->insert( "allowManualPartitioning", CalamaresUtils::getBool( configurationMap, "allowManualPartitioning", true ) ); // The defaultFileSystemType setting needs a bit more processing, // as we want to cover various cases (such as different cases) QString fsName = CalamaresUtils::getString( configurationMap, "defaultFileSystemType" ); FileSystem::Type fsType; if ( fsName.isEmpty() ) cWarning() << "Partition-module setting *defaultFileSystemType* is missing, will use ext4"; QString fsRealName = PartUtils::findFS( fsName, &fsType ); if ( fsRealName == fsName ) cDebug() << "Partition-module setting *defaultFileSystemType*" << fsRealName; else if ( fsType != FileSystem::Unknown ) cWarning() << "Partition-module setting *defaultFileSystemType* changed" << fsRealName; else cWarning() << "Partition-module setting *defaultFileSystemType* is bad (" << fsName << ") using" << fsRealName << "instead."; gs->insert( "defaultFileSystemType", fsRealName ); // Now that we have the config, we load the PartitionCoreModule in the background // because it could take a while. Then when it's done, we can set up the widgets // and remove the spinner. m_future = new QFutureWatcher< void >(); connect( m_future, &QFutureWatcher< void >::finished, this, [ this ] { continueLoading(); this->m_future->deleteLater(); this->m_future = nullptr; } ); QFuture< void > future = QtConcurrent::run( this, &PartitionViewStep::initPartitionCoreModule ); m_future->setFuture( future ); if ( configurationMap.contains( "partitionLayout" ) ) { m_core->initLayout( configurationMap.values( "partitionLayout" ).at(0).toList() ); } else { m_core->initLayout(); } } Calamares::JobList PartitionViewStep::jobs() const { return m_core->jobs(); } Calamares::RequirementsList PartitionViewStep::checkRequirements() { if ( m_future ) m_future->waitForFinished(); Calamares::RequirementsList l; l.append( { QLatin1String( "partitions" ), []{ return tr( "has at least one disk device available." ); }, []{ return tr( "There are no partitions to install on." ); }, m_core->deviceModel()->rowCount() > 0, // satisfied #ifdef DEBUG_PARTITION_UNSAFE false // optional #else true // required #endif } ); return l; } CALAMARES_PLUGIN_FACTORY_DEFINITION( PartitionViewStepFactory, registerPlugin(); ) calamares-3.2.20/src/modules/partition/gui/PartitionViewStep.h000066400000000000000000000052611362604102500243760ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2014-2016, Teo Mrnjavac * Copyright 2017, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef PARTITIONVIEWSTEP_H #define PARTITIONVIEWSTEP_H #include #include #include #include "core/PartitionActions.h" #include #include class ChoicePage; class PartitionPage; class PartitionCoreModule; class QStackedWidget; class WaitingWidget; template class QFutureWatcher; /** * The starting point of the module. Instantiates PartitionCoreModule, * ChoicePage and PartitionPage, then connects them. */ class PLUGINDLLEXPORT PartitionViewStep : public Calamares::ViewStep { Q_OBJECT public: explicit PartitionViewStep( QObject* parent = nullptr ); virtual ~PartitionViewStep() override; QString prettyName() const override; QWidget* createSummaryWidget() const override; QWidget* widget() override; void next() override; void back() override; bool isNextEnabled() const override; bool isBackEnabled() const override; bool isAtBeginning() const override; bool isAtEnd() const override; void onActivate() override; void onLeave() override; void setConfigurationMap( const QVariantMap& configurationMap ) override; Calamares::JobList jobs() const override; Calamares::RequirementsList checkRequirements() override; private: void initPartitionCoreModule(); void continueLoading(); PartitionCoreModule* m_core; QStackedWidget* m_widget; ChoicePage* m_choicePage; PartitionPage* m_manualPartitionPage; WaitingWidget* m_waitingWidget; QFutureWatcher* m_future; QSet< PartitionActions::Choices::SwapChoice > m_swapChoices; qreal m_requiredStorageGiB; // May duplicate setting in the welcome module }; CALAMARES_PLUGIN_FACTORY_DECLARATION( PartitionViewStepFactory ) #endif // PARTITIONVIEWSTEP_H calamares-3.2.20/src/modules/partition/gui/PrettyRadioButton.cpp000066400000000000000000000054371362604102500247400ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "PrettyRadioButton.h" #include "utils/CalamaresUtilsGui.h" #include "widgets/ClickableLabel.h" #include #include #include #include PrettyRadioButton::PrettyRadioButton( QWidget* parent ) : QWidget( parent ) , m_label( new ClickableLabel ) , m_radio( new QRadioButton ) , m_mainLayout( new QGridLayout ) , m_optionsLayout( nullptr ) { setLayout( m_mainLayout ); m_label->setBuddy( m_radio ); m_label->setWordWrap( true ); m_label->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ); m_mainLayout->addWidget( m_radio, 0, 0 ); m_mainLayout->addWidget( m_label, 0, 1 ); m_mainLayout->setContentsMargins( 0, 0, 0, 0 ); connect( m_label, &ClickableLabel::clicked, m_radio, &QRadioButton::click ); connect( m_radio, &QRadioButton::toggled, this, &PrettyRadioButton::toggleOptions ); } void PrettyRadioButton::setText( const QString& text ) { m_label->setText( text ); } void PrettyRadioButton::setIconSize( const QSize& size ) { m_radio->setIconSize( size ); } void PrettyRadioButton::setIcon( const QIcon& icon ) { m_radio->setIcon( icon ); } QSize PrettyRadioButton::iconSize() const { return m_radio->iconSize(); } QRadioButton* PrettyRadioButton::buttonWidget() const { return m_radio; } void PrettyRadioButton::addOptionsComboBox( QComboBox* box ) { if ( !box ) return; if ( !m_optionsLayout ) { QWidget* w = new QWidget; m_optionsLayout = new QHBoxLayout; m_optionsLayout->setAlignment( Qt::AlignmentFlag::AlignLeft ); m_optionsLayout->addStretch( 1 ); w->setLayout( m_optionsLayout ); m_mainLayout->addWidget( w, 1, 1 ); toggleOptions( m_radio->isChecked() ); } m_optionsLayout->insertWidget( m_optionsLayout->count()-1, box ); } void PrettyRadioButton::toggleOptions( bool toggle ) { if ( m_optionsLayout ) m_optionsLayout->parentWidget()->setVisible( toggle ); } calamares-3.2.20/src/modules/partition/gui/PrettyRadioButton.h000066400000000000000000000037561362604102500244070ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef PRETTYRADIOBUTTON_H #define PRETTYRADIOBUTTON_H #include class ClickableLabel; class QComboBox; class QGridLayout; class QHBoxLayout; /** @brief A radio button with fancy label next to it. * * The radio button itself can be retrieved with buttonWidget(), * and the whole behaves a lot like a label. Extra options can be * added to the display (options are hidden when the button is * not selected) with addOptionsComboBox(). */ class PrettyRadioButton : public QWidget { Q_OBJECT public: explicit PrettyRadioButton( QWidget* parent = nullptr ); virtual ~PrettyRadioButton() {} virtual void setText( const QString& text ); virtual void setIconSize( const QSize& size ); virtual void setIcon( const QIcon& icon ); virtual QSize iconSize() const; virtual QRadioButton* buttonWidget() const; /** @brief Add an options drop-down to this button. */ void addOptionsComboBox( QComboBox* ); protected slots: /// Options are hidden when the radio button is off void toggleOptions( bool checked ); protected: ClickableLabel* m_label; QRadioButton* m_radio; QGridLayout* m_mainLayout; QHBoxLayout* m_optionsLayout; }; #endif // PRETTYRADIOBUTTON_H calamares-3.2.20/src/modules/partition/gui/ReplaceWidget.cpp000066400000000000000000000346131362604102500240130ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2014, Aurélien Gâteau * Copyright 2019-2020, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "ReplaceWidget.h" #include "ui_ReplaceWidget.h" #include "core/DeviceModel.h" #include "core/PartitionCoreModule.h" #include "core/PartitionActions.h" #include "core/PartitionInfo.h" #include "Branding.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "partition/FileSystem.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Retranslator.h" #include #include #include using CalamaresUtils::Partition::untranslatedFS; using CalamaresUtils::Partition::userVisibleFS; ReplaceWidget::ReplaceWidget( PartitionCoreModule* core, QComboBox* devicesComboBox, QWidget* parent ) : QWidget( parent ) , m_ui( new Ui_ReplaceWidget ) , m_core( core ) , m_isEfi( false ) { m_ui->setupUi( this ); m_ui->bootComboBox->hide(); m_ui->bootComboBox->clear(); m_ui->bootStatusLabel->hide(); m_ui->bootStatusLabel->clear(); updateFromCurrentDevice( devicesComboBox ); connect( devicesComboBox, &QComboBox::currentTextChanged, this, [=]( const QString& /* text */ ) { updateFromCurrentDevice( devicesComboBox ); } ); CALAMARES_RETRANSLATE( onPartitionSelected(); ) } ReplaceWidget::~ReplaceWidget() {} bool ReplaceWidget::isNextEnabled() const { return m_nextEnabled; } void ReplaceWidget::reset() { //moo; } void ReplaceWidget::applyChanges() { auto gs = Calamares::JobQueue::instance()->globalStorage(); PartitionModel* model = qobject_cast< PartitionModel* >( m_ui->partitionTreeView->model() ); if ( model ) { Partition* partition = model->partitionForIndex( m_ui->partitionTreeView->currentIndex() ); if ( partition ) { Device* dev = model->device(); PartitionActions::doReplacePartition( m_core, dev, partition, { gs->value( "defaultFileSystemType" ).toString(), QString() } ); if ( m_isEfi ) { QList< Partition* > efiSystemPartitions = m_core->efiSystemPartitions(); if ( efiSystemPartitions.count() == 1 ) { PartitionInfo::setMountPoint( efiSystemPartitions.first(), gs->value( "efiSystemPartition" ).toString() ); } else if ( efiSystemPartitions.count() > 1 ) { PartitionInfo::setMountPoint( efiSystemPartitions.at( m_ui->bootComboBox->currentIndex() ), gs->value( "efiSystemPartition" ).toString() ); } } m_core->dumpQueue(); } } } void ReplaceWidget::onPartitionSelected() { if ( Calamares::JobQueue::instance()->globalStorage()->value( "firmwareType" ) == "efi" ) m_isEfi = true; if ( m_ui->partitionTreeView->currentIndex() == QModelIndex() ) { updateStatus( CalamaresUtils::PartitionPartition, tr( "Select where to install %1.
" "Warning: this will delete all files " "on the selected partition." ) .arg( *Calamares::Branding::VersionedName ) ); setNextEnabled( false ); return; } bool ok = false; double requiredSpaceB = Calamares::JobQueue::instance() ->globalStorage() ->value( "requiredStorageGiB" ) .toDouble( &ok ) * 1024 * 1024 * 1024; PartitionModel* model = qobject_cast< PartitionModel* >( m_ui->partitionTreeView->model() ); if ( model && ok ) { const QStringList osproberLines = Calamares::JobQueue::instance() ->globalStorage() ->value( "osproberLines" ).toStringList(); Partition* partition = model->partitionForIndex( m_ui->partitionTreeView->currentIndex() ); if ( !partition || partition->state() != KPM_PARTITION_STATE(None) ) { updateStatus( CalamaresUtils::Fail, tr( "The selected item does not appear to be a valid partition." ) ); setNextEnabled( false ); return; } if ( partition->roles().has( PartitionRole::Unallocated ) ) { updateStatus( CalamaresUtils::Fail, tr( "%1 cannot be installed on empty space. Please select an " "existing partition." ) .arg( *Calamares::Branding::VersionedName ) ); setNextEnabled( false ); return; } if ( partition->roles().has( PartitionRole::Extended ) ) { updateStatus( CalamaresUtils::Fail, tr( "%1 cannot be installed on an extended partition. Please select an " "existing primary or logical partition." ) .arg( *Calamares::Branding::VersionedName ) ); setNextEnabled( false ); return; } if ( partition->partitionPath().isEmpty() ) { updateStatus( CalamaresUtils::Fail, tr( "%1 cannot be installed on this partition." ) .arg( *Calamares::Branding::VersionedName ) ); setNextEnabled( false ); return; } QString fsNameForUser = userVisibleFS( partition->fileSystem() ); QString prettyName = tr( "Data partition (%1)" ).arg( fsNameForUser ); for ( const QString& line : osproberLines ) { QStringList lineColumns = line.split( ':' ); QString path = lineColumns.value( 0 ).simplified(); if ( path == partition->partitionPath() ) { QString osName; if ( !lineColumns.value( 1 ).simplified().isEmpty() ) osName = lineColumns.value( 1 ).simplified(); else if ( !lineColumns.value( 2 ).simplified().isEmpty() ) osName = lineColumns.value( 2 ).simplified(); if ( osName.isEmpty() ) { prettyName = tr( "Unknown system partition (%1)" ) .arg( fsNameForUser ); } else { prettyName = tr ( "%1 system partition (%2)" ) .arg( osName.replace( 0, 1, osName.at( 0 ).toUpper() ) ) .arg( fsNameForUser ); } break; } } if ( partition->capacity() < requiredSpaceB ) { updateStatus( CalamaresUtils::Fail, tr( "%4

" "The partition %1 is too small for %2. Please select a partition " "with capacity at least %3 GiB." ) .arg( partition->partitionPath() ) .arg( *Calamares::Branding::VersionedName ) .arg( requiredSpaceB / ( 1024. * 1024. * 1024. ), 0, 'f', 1 ) .arg( prettyName ) ); setNextEnabled( false ); return; } m_ui->bootComboBox->hide(); m_ui->bootComboBox->clear(); m_ui->bootStatusLabel->hide(); m_ui->bootStatusLabel->clear(); if ( m_isEfi ) { QList< Partition* > efiSystemPartitions = m_core->efiSystemPartitions(); if ( efiSystemPartitions.count() == 0 ) { updateStatus( CalamaresUtils::Fail, tr( "%2

" "An EFI system partition cannot be found anywhere " "on this system. Please go back and use manual " "partitioning to set up %1." ) .arg( *Calamares::Branding::ShortProductName ) .arg( prettyName ) ); setNextEnabled( false ); } else if ( efiSystemPartitions.count() == 1 ) { updateStatus( CalamaresUtils::PartitionPartition, tr( "%3

" "%1 will be installed on %2.
" "Warning: all data on partition " "%2 will be lost.") .arg( *Calamares::Branding::VersionedName ) .arg( partition->partitionPath() ) .arg( prettyName ) ); m_ui->bootStatusLabel->show(); m_ui->bootStatusLabel->setText( tr( "The EFI system partition at %1 will be used for starting %2." ) .arg( efiSystemPartitions.first()->partitionPath() ) .arg( *Calamares::Branding::ShortProductName ) ); setNextEnabled( true ); } else { updateStatus( CalamaresUtils::PartitionPartition, tr( "%3

" "%1 will be installed on %2.
" "Warning: all data on partition " "%2 will be lost.") .arg( *Calamares::Branding::VersionedName ) .arg( partition->partitionPath() ) .arg( prettyName ) ); m_ui->bootStatusLabel->show(); m_ui->bootStatusLabel->setText( tr( "EFI system partition:" ) ); m_ui->bootComboBox->show(); for ( int i = 0; i < efiSystemPartitions.count(); ++i ) { Partition* efiPartition = efiSystemPartitions.at( i ); m_ui->bootComboBox->addItem( efiPartition->partitionPath(), i ); if ( efiPartition->devicePath() == partition->devicePath() && efiPartition->number() == 1 ) m_ui->bootComboBox->setCurrentIndex( i ); } setNextEnabled( true ); } } else { updateStatus( CalamaresUtils::PartitionPartition, tr( "%3

" "%1 will be installed on %2.
" "Warning: all data on partition " "%2 will be lost.") .arg( *Calamares::Branding::VersionedName ) .arg( partition->partitionPath() ) .arg( prettyName ) ); setNextEnabled( true ); } } } void ReplaceWidget::setNextEnabled( bool enabled ) { if ( enabled == m_nextEnabled ) return; m_nextEnabled = enabled; emit nextStatusChanged( enabled ); } void ReplaceWidget::updateStatus( CalamaresUtils::ImageType imageType, const QString& text ) { int iconSize = CalamaresUtils::defaultFontHeight() * 6; m_ui->selectedIconLabel->setPixmap( CalamaresUtils::defaultPixmap( imageType, CalamaresUtils::Original, QSize( iconSize, iconSize ) ) ); m_ui->selectedIconLabel->setFixedHeight( iconSize ); m_ui->selectedStatusLabel->setText( text ); } void ReplaceWidget::updateFromCurrentDevice( QComboBox* devicesComboBox ) { QModelIndex index = m_core->deviceModel()->index( devicesComboBox->currentIndex(), 0 ); if ( !index.isValid() ) return; Device* device = m_core->deviceModel()->deviceForIndex( index ); QAbstractItemModel* oldModel = m_ui->partitionTreeView->model(); if ( oldModel ) disconnect( oldModel, nullptr, this, nullptr ); PartitionModel* model = m_core->partitionModelForDevice( device ); m_ui->partitionTreeView->setModel( model ); m_ui->partitionTreeView->expandAll(); // Must be done here because we need to have a model set to define // individual column resize mode QHeaderView* header = m_ui->partitionTreeView->header(); header->setSectionResizeMode( QHeaderView::ResizeToContents ); header->setSectionResizeMode( 0, QHeaderView::Stretch ); //updateButtons(); // Establish connection here because selection model is destroyed when // model changes connect( m_ui->partitionTreeView->selectionModel(), &QItemSelectionModel::currentRowChanged, this, &ReplaceWidget::onPartitionViewActivated ); connect( model, &QAbstractItemModel::modelReset, this, &ReplaceWidget::onPartitionModelReset ); } void ReplaceWidget::onPartitionViewActivated() { QModelIndex index = m_ui->partitionTreeView->currentIndex(); if ( !index.isValid() ) return; const PartitionModel* model = static_cast< const PartitionModel* >( index.model() ); Q_ASSERT( model ); Partition* partition = model->partitionForIndex( index ); Q_ASSERT( partition ); onPartitionSelected(); } void ReplaceWidget::onPartitionModelReset() { m_ui->partitionTreeView->expandAll(); onPartitionSelected(); } calamares-3.2.20/src/modules/partition/gui/ReplaceWidget.h000066400000000000000000000036721362604102500234610ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2014, Aurélien Gâteau * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef REPLACEWIDGET_H #define REPLACEWIDGET_H #include "utils/CalamaresUtilsGui.h" #include #include class Ui_ReplaceWidget; class QComboBox; class PartitionCoreModule; class Partition; class ReplaceWidget : public QWidget { Q_OBJECT public: explicit ReplaceWidget( PartitionCoreModule* core, QComboBox* devicesComboBox, QWidget* parent = nullptr ); virtual ~ReplaceWidget(); bool isNextEnabled() const; void reset(); void applyChanges(); signals: void nextStatusChanged( bool ); private slots: void onPartitionSelected(); private: QScopedPointer< Ui_ReplaceWidget > m_ui; void setNextEnabled( bool enabled ); void updateStatus( CalamaresUtils::ImageType imageType, const QString& text ); PartitionCoreModule* m_core; bool m_nextEnabled; bool m_isEfi; void updateFromCurrentDevice( QComboBox* devicesComboBox ); void onPartitionViewActivated(); void onPartitionModelReset(); }; #endif // REPLACEWIDGET_H calamares-3.2.20/src/modules/partition/gui/ReplaceWidget.ui000066400000000000000000000070071362604102500236430ustar00rootroot00000000000000 ReplaceWidget 0 0 643 187 Form 0 0 0 0 0 QAbstractItemView::NoEditTriggers false true false false Qt::AlignCenter true 0 0 Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop true Qt::Vertical 20 40 calamares-3.2.20/src/modules/partition/gui/ResizeVolumeGroupDialog.cpp000066400000000000000000000043641362604102500260620ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018, Caio Jordão Carvalho * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "ResizeVolumeGroupDialog.h" #include "gui/ListPhysicalVolumeWidgetItem.h" #include #include #include #include #include #include ResizeVolumeGroupDialog::ResizeVolumeGroupDialog( LvmDevice *device, const PartitionVector& availablePVs, PartitionVector& selectedPVs, QWidget* parent ) : VolumeGroupBaseDialog( device->name(), device->physicalVolumes(), parent ) , m_selectedPVs( selectedPVs ) { setWindowTitle( tr( "Resize Volume Group" ) ); for ( int i = 0; i < pvList()->count(); i++ ) pvList()->item(i)->setCheckState( Qt::Checked ); for ( const Partition* p : availablePVs ) pvList()->addItem( new ListPhysicalVolumeWidgetItem( p, false ) ); peSize()->setValue( static_cast( device->peSize() / Capacity::unitFactor(Capacity::Unit::Byte, Capacity::Unit::MiB) ) ); vgName()->setEnabled( false ); peSize()->setEnabled( false ); vgType()->setEnabled( false ); setUsedSizeValue( device->allocatedPE() * device->peSize() ); setLVQuantity( device->partitionTable()->children().count() ); } void ResizeVolumeGroupDialog::accept() { m_selectedPVs << checkedItems(); QDialog::accept(); } calamares-3.2.20/src/modules/partition/gui/ResizeVolumeGroupDialog.h000066400000000000000000000026601362604102500255240ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018, Caio Jordão Carvalho * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef RESIZEVOLUMEGROUPDIALOG_H #define RESIZEVOLUMEGROUPDIALOG_H #include "gui/VolumeGroupBaseDialog.h" class LvmDevice; class ResizeVolumeGroupDialog : public VolumeGroupBaseDialog { public: using PartitionVector = QVector< const Partition* >; ResizeVolumeGroupDialog( LvmDevice *device, const PartitionVector& availablePVs, PartitionVector& selectedPVs, QWidget* parent ); void accept() override; private: PartitionVector& m_selectedPVs; }; #endif // RESIZEVOLUMEGROUPDIALOG_H calamares-3.2.20/src/modules/partition/gui/ScanningDialog.cpp000066400000000000000000000055221362604102500241510ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2015, Teo Mrnjavac * Copyright 2017, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "ScanningDialog.h" #include "3rdparty/waitingspinnerwidget.h" #include #include #include #include ScanningDialog::ScanningDialog( const QString& text, const QString& windowTitle, QWidget* parent ) : QDialog( parent ) { setModal( true ); setWindowTitle( windowTitle ); QHBoxLayout* dialogLayout = new QHBoxLayout; setLayout( dialogLayout ); WaitingSpinnerWidget* spinner = new WaitingSpinnerWidget(); dialogLayout->addWidget( spinner ); spinner->start(); QLabel* rescanningLabel = new QLabel( text, this ); dialogLayout->addWidget( rescanningLabel ); } void ScanningDialog::run( const QFuture< void >& future, const QString& text, const QString& windowTitle, const std::function< void() >& callback, QWidget* parent ) { ScanningDialog* theDialog = new ScanningDialog( text, windowTitle, parent ); theDialog->show(); QFutureWatcher< void >* watcher = new QFutureWatcher< void >(); connect( watcher, &QFutureWatcher< void >::finished, theDialog, [ watcher, theDialog, callback ] { watcher->deleteLater(); theDialog->hide(); theDialog->deleteLater(); callback(); } ); watcher->setFuture( future ); } void ScanningDialog::run( const QFuture< void >& future, const std::function< void() >& callback, QWidget* parent ) { ScanningDialog::run( future, tr( "Scanning storage devices..." ), tr( "Partitioning" ), callback, parent ); } void ScanningDialog::setVisible(bool visible) { QDialog::setVisible( visible ); emit visibilityChanged(); } calamares-3.2.20/src/modules/partition/gui/ScanningDialog.h000066400000000000000000000032371362604102500236170ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2015, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef SCANNINGDIALOG_H #define SCANNINGDIALOG_H #include #include #include class ScanningDialog : public QDialog { Q_OBJECT public: explicit ScanningDialog( const QString& text, const QString& windowTitle, QWidget* parent = nullptr ); static void run( const QFuture< void >& future, const QString& text, const QString& windowTitle, const std::function< void() >& callback = []{}, QWidget* parent = nullptr ); static void run( const QFuture< void >& future, const std::function< void() >& callback = []{}, QWidget* parent = nullptr ); public slots: void setVisible( bool visible ) override; signals: void visibilityChanged(); }; #endif // SCANNINGDIALOG_H calamares-3.2.20/src/modules/partition/gui/VolumeGroupBaseDialog.cpp000066400000000000000000000112751362604102500254720ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018, Caio Jordão Carvalho * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "VolumeGroupBaseDialog.h" #include "ui_VolumeGroupBaseDialog.h" #include "gui/ListPhysicalVolumeWidgetItem.h" #include #include #include #include #include #include #include VolumeGroupBaseDialog::VolumeGroupBaseDialog( QString& vgName, QVector< const Partition* > pvList, QWidget *parent ) : QDialog(parent) , ui(new Ui::VolumeGroupBaseDialog) , m_vgNameValue(vgName) , m_totalSizeValue(0) , m_usedSizeValue(0) { ui->setupUi(this); for ( const Partition* p : pvList ) ui->pvList->addItem( new ListPhysicalVolumeWidgetItem( p, false ) ); ui->vgType->addItems( QStringList() << "LVM" << "RAID" ); ui->vgType->setCurrentIndex(0); QRegularExpression re(R"(^(?!_|\.)[\w\-.+]+)"); ui->vgName->setValidator( new QRegularExpressionValidator( re, this ) ); ui->vgName->setText( m_vgNameValue ); updateOkButton(); updateTotalSize(); connect( ui->pvList, &QListWidget::itemChanged, this, [&](QListWidgetItem*) { updateTotalSize(); updateOkButton(); } ); connect( ui->peSize, qOverload(&QSpinBox::valueChanged), this, [&](int) { updateTotalSectors(); updateOkButton(); }); connect( ui->vgName, &QLineEdit::textChanged, this, [&](const QString&) { updateOkButton(); }); } VolumeGroupBaseDialog::~VolumeGroupBaseDialog() { delete ui; } QVector< const Partition* > VolumeGroupBaseDialog::checkedItems() const { QVector< const Partition* > items; for ( int i = 0; i < ui->pvList->count(); i++) { ListPhysicalVolumeWidgetItem* item = dynamic_cast< ListPhysicalVolumeWidgetItem* >( ui->pvList->item(i) ); if ( item && item->checkState() == Qt::Checked ) items << item->partition(); } return items; } bool VolumeGroupBaseDialog::isSizeValid() const { return m_totalSizeValue >= m_usedSizeValue; } void VolumeGroupBaseDialog::updateOkButton() { okButton()->setEnabled(isSizeValid() && !checkedItems().empty() && !ui->vgName->text().isEmpty() && ui->peSize->value() > 0); } void VolumeGroupBaseDialog::setUsedSizeValue( qint64 usedSize ) { m_usedSizeValue = usedSize; ui->usedSize->setText( Capacity::formatByteSize(m_usedSizeValue) ); } void VolumeGroupBaseDialog::setLVQuantity( qint32 lvQuantity ) { ui->lvQuantity->setText( QString::number( lvQuantity ) ); } void VolumeGroupBaseDialog::updateTotalSize() { m_totalSizeValue = 0; for ( const Partition *p : checkedItems()) m_totalSizeValue += p->capacity() - p->capacity() % (ui->peSize->value() * Capacity::unitFactor(Capacity::Unit::Byte, Capacity::Unit::MiB)); ui->totalSize->setText(Capacity::formatByteSize(m_totalSizeValue)); updateTotalSectors(); } void VolumeGroupBaseDialog::updateTotalSectors() { qint64 totalSectors = 0; qint64 extentSize = ui->peSize->value() * Capacity::unitFactor(Capacity::Unit::Byte, Capacity::Unit::MiB); if ( extentSize > 0 ) totalSectors = m_totalSizeValue / extentSize; ui->totalSectors->setText( QString::number( totalSectors ) ); } QString& VolumeGroupBaseDialog::vgNameValue() const { return m_vgNameValue; } QLineEdit* VolumeGroupBaseDialog::vgName() const { return ui->vgName; } QComboBox* VolumeGroupBaseDialog::vgType() const { return ui->vgType; } QSpinBox* VolumeGroupBaseDialog::peSize() const { return ui->peSize; } QListWidget* VolumeGroupBaseDialog::pvList() const { return ui->pvList; } QPushButton* VolumeGroupBaseDialog::okButton() const { return ui->buttonBox->button( QDialogButtonBox::StandardButton::Ok ); } calamares-3.2.20/src/modules/partition/gui/VolumeGroupBaseDialog.h000066400000000000000000000037131362604102500251350ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018, Caio Jordão Carvalho * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef VOLUMEGROUPBASEDIALOG_H #define VOLUMEGROUPBASEDIALOG_H #include #include namespace Ui { class VolumeGroupBaseDialog; } class QComboBox; class QLineEdit; class QListWidget; class QSpinBox; class VolumeGroupBaseDialog : public QDialog { Q_OBJECT public: explicit VolumeGroupBaseDialog( QString& vgName, QVector< const Partition* > pvList, QWidget* parent = nullptr ); ~VolumeGroupBaseDialog(); protected: virtual void updateOkButton(); void setUsedSizeValue( qint64 usedSize ); void setLVQuantity( qint32 lvQuantity ); void updateTotalSize(); void updateTotalSectors(); QVector< const Partition* > checkedItems() const; bool isSizeValid() const; QString& vgNameValue() const; QLineEdit* vgName() const; QComboBox* vgType() const; QSpinBox* peSize() const; QListWidget* pvList() const; QPushButton* okButton() const; private: Ui::VolumeGroupBaseDialog* ui; QString& m_vgNameValue; qint64 m_totalSizeValue; qint64 m_usedSizeValue; }; #endif // VOLUMEGROUPBASEDIALOG_H calamares-3.2.20/src/modules/partition/gui/VolumeGroupBaseDialog.ui000066400000000000000000000126671362604102500253330ustar00rootroot00000000000000 VolumeGroupBaseDialog 0 0 611 367 Create Volume Group List of Physical Volumes Volume Group Name: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Volume Group Type: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Physical Extent Size: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter MiB 1 999 4 Total Size: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter --- Qt::AlignCenter Used Size: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter --- Qt::AlignCenter Total Sectors: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter --- Qt::AlignCenter Quantity of LVs: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter --- Qt::AlignCenter Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok buttonBox accepted() VolumeGroupBaseDialog accept() 248 254 157 274 buttonBox rejected() VolumeGroupBaseDialog reject() 316 260 286 274 calamares-3.2.20/src/modules/partition/jobs/000077500000000000000000000000001362604102500207325ustar00rootroot00000000000000calamares-3.2.20/src/modules/partition/jobs/ClearMountsJob.cpp000066400000000000000000000224011362604102500243240ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2018, Adriaan de Groot * Copyright 2019, Kevin Kofler * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "ClearMountsJob.h" #include "core/PartitionInfo.h" #include "partition/Sync.h" #include "partition/PartitionIterator.h" #include "utils/Logger.h" // KPMcore #include #include #include #include #include #include using CalamaresUtils::Partition::PartitionIterator; ClearMountsJob::ClearMountsJob( Device* device ) : Calamares::Job() , m_device( device ) { } QString ClearMountsJob::prettyName() const { return tr( "Clear mounts for partitioning operations on %1" ) .arg( m_device->deviceNode() ); } QString ClearMountsJob::prettyStatusMessage() const { return tr( "Clearing mounts for partitioning operations on %1." ) .arg( m_device->deviceNode() ); } QStringList getPartitionsForDevice( const QString& deviceName ) { QStringList partitions; QFile dev_partitions( "/proc/partitions" ); if ( dev_partitions.open( QFile::ReadOnly ) ) { cDebug() << "Reading from" << dev_partitions.fileName(); QTextStream in( &dev_partitions ); (void) in.readLine(); // That's the header line, skip it while ( !in.atEnd() ) { // The fourth column (index from 0, so index 3) is the name of the device; // keep it if it is followed by something. QStringList columns = in.readLine().split( ' ', QString::SkipEmptyParts ); if ( ( columns.count() >= 4 ) && ( columns[3].startsWith( deviceName ) ) && ( columns[3] != deviceName ) ) { partitions.append( columns[3] ); } } } else { cDebug() << "Could not open" << dev_partitions.fileName(); } return partitions; } Calamares::JobResult ClearMountsJob::exec() { CalamaresUtils::Partition::Syncer s; QString deviceName = m_device->deviceNode().split( '/' ).last(); QStringList goodNews; QProcess process; QStringList partitionsList = getPartitionsForDevice( deviceName ); // Build a list of partitions of type 82 (Linux swap / Solaris). // We then need to clear them just in case they contain something resumable from a // previous suspend-to-disk. QStringList swapPartitions; process.start( "sfdisk", { "-d", m_device->deviceNode() } ); process.waitForFinished(); // Sample output: // % sudo sfdisk -d /dev/sda // label: dos // label-id: 0x000ced89 // device: /dev/sda // unit: sectors // /dev/sda1 : start= 63, size= 29329345, type=83, bootable // /dev/sda2 : start= 29331456, size= 2125824, type=82 swapPartitions = QString::fromLocal8Bit( process.readAllStandardOutput() ) .split( '\n' ); swapPartitions = swapPartitions.filter( "type=82" ); for ( QStringList::iterator it = swapPartitions.begin(); it != swapPartitions.end(); ++it ) { *it = (*it).simplified().split( ' ' ).first(); } const QStringList cryptoDevices = getCryptoDevices(); for ( const QString &mapperPath : cryptoDevices ) { tryUmount( mapperPath ); QString news = tryCryptoClose( mapperPath ); if ( !news.isEmpty() ) goodNews.append( news ); } // First we umount all LVM logical volumes we can find process.start( "lvscan", { "-a" } ); process.waitForFinished(); if ( process.exitCode() == 0 ) //means LVM2 tools are installed { const QStringList lvscanLines = QString::fromLocal8Bit( process.readAllStandardOutput() ).split( '\n' ); for ( const QString& lvscanLine : lvscanLines ) { QString lvPath = lvscanLine.simplified().split( ' ' ).value( 1 ); //second column lvPath = lvPath.replace( '\'', "" ); QString news = tryUmount( lvPath ); if ( !news.isEmpty() ) goodNews.append( news ); } } else cWarning() << "this system does not seem to have LVM2 tools."; // Then we go looking for volume groups that use this device for physical volumes process.start( "pvdisplay", { "-C", "--noheadings" } ); process.waitForFinished(); if ( process.exitCode() == 0 ) //means LVM2 tools are installed { QString pvdisplayOutput = process.readAllStandardOutput(); if ( !pvdisplayOutput.simplified().isEmpty() ) //means there is at least one LVM PV { QSet< QString > vgSet; const QStringList pvdisplayLines = pvdisplayOutput.split( '\n' ); for ( const QString& pvdisplayLine : pvdisplayLines ) { QString pvPath = pvdisplayLine.simplified().split( ' ' ).value( 0 ); QString vgName = pvdisplayLine.simplified().split( ' ' ).value( 1 ); if ( !pvPath.contains( deviceName ) ) continue; vgSet.insert( vgName ); } foreach ( const QString& vgName, vgSet ) { process.start( "vgchange", { "-an", vgName } ); process.waitForFinished(); if ( process.exitCode() == 0 ) goodNews.append( QString( "Successfully disabled volume group %1." ).arg( vgName ) ); } } } else cWarning() << "this system does not seem to have LVM2 tools."; const QStringList cryptoDevices2 = getCryptoDevices(); for ( const QString &mapperPath : cryptoDevices2 ) { tryUmount( mapperPath ); QString news = tryCryptoClose( mapperPath ); if ( !news.isEmpty() ) goodNews.append( news ); } for ( const QString &p : partitionsList ) { QString partPath = QString( "/dev/%1" ).arg( p ); QString news = tryUmount( partPath ); if ( !news.isEmpty() ) goodNews.append( news ); } foreach ( QString p, swapPartitions ) { QString news = tryClearSwap( p ); if ( !news.isEmpty() ) goodNews.append( news ); } Calamares::JobResult ok = Calamares::JobResult::ok(); ok.setMessage( tr( "Cleared all mounts for %1" ) .arg( m_device->deviceNode() ) ); ok.setDetails( goodNews.join( "\n" ) ); cDebug() << "ClearMountsJob finished. Here's what was done:\n" << goodNews.join( "\n" ); return ok; } QString ClearMountsJob::tryUmount( const QString& partPath ) { QProcess process; process.start( "umount", { partPath } ); process.waitForFinished(); if ( process.exitCode() == 0 ) return QString( "Successfully unmounted %1." ).arg( partPath ); process.start( "swapoff", { partPath } ); process.waitForFinished(); if ( process.exitCode() == 0 ) return QString( "Successfully disabled swap %1." ).arg( partPath ); return QString(); } QString ClearMountsJob::tryClearSwap( const QString& partPath ) { QProcess process; process.start( "blkid", { "-s", "UUID", "-o", "value", partPath } ); process.waitForFinished(); QString swapPartUuid = QString::fromLocal8Bit( process.readAllStandardOutput() ).simplified(); if ( process.exitCode() != 0 || swapPartUuid.isEmpty() ) return QString(); process.start( "mkswap", { "-U", swapPartUuid, partPath } ); process.waitForFinished(); if ( process.exitCode() != 0 ) return QString(); return QString( "Successfully cleared swap %1." ).arg( partPath ); } QString ClearMountsJob::tryCryptoClose( const QString& mapperPath ) { QProcess process; process.start( "cryptsetup", { "close", mapperPath } ); process.waitForFinished(); if ( process.exitCode() == 0 ) return QString( "Successfully closed mapper device %1." ).arg( mapperPath ); return QString(); } QStringList ClearMountsJob::getCryptoDevices() const { QDir mapperDir( "/dev/mapper" ); const QFileInfoList fiList = mapperDir.entryInfoList( QDir::Files ); QStringList list; QProcess process; for ( const QFileInfo &fi : fiList ) { QString baseName = fi.baseName(); // Fedora live images use /dev/mapper/live-* internally. We must not // unmount those devices, because they are used by the live image and // because we need /dev/mapper/live-base in the unpackfs module. if ( baseName == "control" || baseName.startsWith( "live-" ) ) continue; list.append( fi.absoluteFilePath() ); } return list; } calamares-3.2.20/src/modules/partition/jobs/ClearMountsJob.h000066400000000000000000000027341362604102500240000ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef CLEARMOUNTSJOB_H #define CLEARMOUNTSJOB_H #include "Job.h" class Device; /** * This job tries to free all mounts for the given device, so partitioning * operations can proceed. */ class ClearMountsJob : public Calamares::Job { Q_OBJECT public: explicit ClearMountsJob( Device* device ); QString prettyName() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; private: QString tryUmount( const QString& partPath ); QString tryClearSwap( const QString& partPath ); QString tryCryptoClose( const QString& mapperPath ); QStringList getCryptoDevices() const; Device* m_device; }; #endif // CLEARMOUNTSJOB_H calamares-3.2.20/src/modules/partition/jobs/ClearTempMountsJob.cpp000066400000000000000000000060501362604102500251540ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "ClearTempMountsJob.h" #include "utils/Logger.h" #include // KPMcore #include #include #include #include ClearTempMountsJob::ClearTempMountsJob() : Calamares::Job() { } QString ClearTempMountsJob::prettyName() const { return tr( "Clear all temporary mounts." ); } QString ClearTempMountsJob::prettyStatusMessage() const { return tr( "Clearing all temporary mounts." ); } Calamares::JobResult ClearTempMountsJob::exec() { // Fetch a list of current mounts to Calamares temporary directories. QList< QPair < QString, QString > > lst; QFile mtab( "/etc/mtab" ); if ( !mtab.open( QFile::ReadOnly | QFile::Text ) ) return Calamares::JobResult::error( tr( "Cannot get list of temporary mounts." ) ); cDebug() << "Opened mtab. Lines:"; QTextStream in(&mtab); QString lineIn = in.readLine(); while ( !lineIn.isNull() ) { QStringList line = lineIn.split( ' ', QString::SkipEmptyParts ); cDebug() << line.join( ' ' ); QString device = line.at( 0 ); QString mountPoint = line.at( 1 ); if ( mountPoint.startsWith( "/tmp/calamares-" ) ) { cDebug() << "INSERTING pair (device, mountPoint)" << device << mountPoint; lst.append( qMakePair( device, mountPoint ) ); } lineIn = in.readLine(); } std::sort ( lst.begin(), lst.end(), []( const QPair< QString, QString >& a, const QPair< QString, QString >& b ) -> bool { return a.first > b.first; } ); QStringList goodNews; QProcess process; foreach ( auto line, lst ) { QString partPath = line.second; cDebug() << "Will try to umount path" << partPath; process.start( "umount", { "-lv", partPath } ); process.waitForFinished(); if ( process.exitCode() == 0 ) goodNews.append( QString( "Successfully unmounted %1." ).arg( partPath ) ); } Calamares::JobResult ok = Calamares::JobResult::ok(); ok.setMessage( tr( "Cleared all temporary mounts." ) ); ok.setDetails( goodNews.join( "\n" ) ); cDebug() << "ClearTempMountsJob finished. Here's what was done:\n" << goodNews.join( "\n" ); return ok; } calamares-3.2.20/src/modules/partition/jobs/ClearTempMountsJob.h000066400000000000000000000023761362604102500246300ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef CLEARTEMPMOUNTSJOB_H #define CLEARTEMPMOUNTSJOB_H #include "Job.h" class Device; /** * This job tries to free all temporary mounts used by Calamares, so partitioning * operations can proceed. */ class ClearTempMountsJob : public Calamares::Job { Q_OBJECT public: explicit ClearTempMountsJob(); QString prettyName() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; }; #endif // CLEARTEMPMOUNTSJOB_H calamares-3.2.20/src/modules/partition/jobs/CreatePartitionJob.cpp000066400000000000000000000061101362604102500251640ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2015, Teo Mrnjavac * Copyright 2017, 2020, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "CreatePartitionJob.h" #include "partition/FileSystem.h" #include "utils/Logger.h" #include "utils/Units.h" #include #include #include #include #include #include #include using CalamaresUtils::Partition::untranslatedFS; using CalamaresUtils::Partition::userVisibleFS; CreatePartitionJob::CreatePartitionJob( Device* device, Partition* partition ) : PartitionJob( partition ) , m_device( device ) { } QString CreatePartitionJob::prettyName() const { return tr( "Create new %2MiB partition on %4 (%3) with file system %1." ) .arg( userVisibleFS( m_partition->fileSystem() ) ) .arg( CalamaresUtils::BytesToMiB( m_partition->capacity() ) ) .arg( m_device->name() ) .arg( m_device->deviceNode() ); } QString CreatePartitionJob::prettyDescription() const { return tr( "Create new %2MiB partition on %4 " "(%3) with file system %1." ) .arg( userVisibleFS( m_partition->fileSystem() ) ) .arg( CalamaresUtils::BytesToMiB( m_partition->capacity() ) ) .arg( m_device->name() ) .arg( m_device->deviceNode() ); } QString CreatePartitionJob::prettyStatusMessage() const { return tr( "Creating new %1 partition on %2." ) .arg( userVisibleFS( m_partition->fileSystem() ) ) .arg( m_device->deviceNode() ); } Calamares::JobResult CreatePartitionJob::exec() { Report report( nullptr ); NewOperation op(*m_device, m_partition); op.setStatus(Operation::StatusRunning); QString message = tr( "The installer failed to create partition on disk '%1'." ).arg( m_device->name() ); if (op.execute(report)) return Calamares::JobResult::ok(); return Calamares::JobResult::error(message, report.toText()); } void CreatePartitionJob::updatePreview() { m_device->partitionTable()->removeUnallocated(); m_partition->parent()->insert( m_partition ); m_device->partitionTable()->updateUnallocated( *m_device ); } calamares-3.2.20/src/modules/partition/jobs/CreatePartitionJob.h000066400000000000000000000031061362604102500246330ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2015, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef CREATEPARTITIONJOB_H #define CREATEPARTITIONJOB_H #include "PartitionJob.h" class Device; class Partition; class FileSystem; /** * Creates a partition on a device. * * This job does two things: * 1. Create the partition * 2. Create the filesystem on the partition */ class CreatePartitionJob : public PartitionJob { Q_OBJECT public: CreatePartitionJob( Device* device, Partition* partition ); QString prettyName() const override; QString prettyDescription() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; void updatePreview(); Device* device() const { return m_device; } private: Device* m_device; }; #endif /* CREATEPARTITIONJOB_H */ calamares-3.2.20/src/modules/partition/jobs/CreatePartitionTableJob.cpp000066400000000000000000000107251362604102500261430ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2015, Teo Mrnjavac * Copyright 2017, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "jobs/CreatePartitionTableJob.h" #include "partition/PartitionIterator.h" #include "utils/Logger.h" // KPMcore #include #include #include #include #include #include // Qt #include using CalamaresUtils::Partition::PartitionIterator; CreatePartitionTableJob::CreatePartitionTableJob( Device* device, PartitionTable::TableType type ) : m_device( device ) , m_type( type ) { } QString CreatePartitionTableJob::prettyName() const { return tr( "Create new %1 partition table on %2." ) .arg( PartitionTable::tableTypeToName( m_type ) ) .arg( m_device->deviceNode() ); } QString CreatePartitionTableJob::prettyDescription() const { return tr( "Create new %1 partition table on %2 (%3)." ) .arg( PartitionTable::tableTypeToName( m_type ).toUpper() ) .arg( m_device->deviceNode() ) .arg( m_device->name() ); } QString CreatePartitionTableJob::prettyStatusMessage() const { return tr( "Creating new %1 partition table on %2." ) .arg( PartitionTable::tableTypeToName( m_type ).toUpper() ) .arg( m_device->deviceNode() ); } static inline QDebug& operator <<( QDebug& s, PartitionIterator& it ) { s << ( ( *it ) ? ( *it )->deviceNode() : QString( "" ) ); return s; } Calamares::JobResult CreatePartitionTableJob::exec() { Report report( nullptr ); QString message = tr( "The installer failed to create a partition table on %1." ).arg( m_device->name() ); PartitionTable* table = m_device->partitionTable(); cDebug() << "Creating new partition table of type" << table->typeName() << ", uncommitted yet:"; if ( Logger::logLevelEnabled( Logger::LOGDEBUG ) ) { for ( auto it = PartitionIterator::begin( table ); it != PartitionIterator::end( table ); ++it ) cDebug() << it; QProcess lsblk; lsblk.setProgram( "lsblk" ); lsblk.setProcessChannelMode( QProcess::MergedChannels ); lsblk.start(); lsblk.waitForFinished(); cDebug() << "lsblk:\n" << lsblk.readAllStandardOutput(); QProcess mount; mount.setProgram( "mount" ); // Debug output only, not mounting something mount.setProcessChannelMode( QProcess::MergedChannels ); mount.start(); mount.waitForFinished(); cDebug() << "mount:\n" << mount.readAllStandardOutput(); } CreatePartitionTableOperation op(*m_device, table); op.setStatus(Operation::StatusRunning); if (op.execute(report)) return Calamares::JobResult::ok(); return Calamares::JobResult::error(message, report.toText()); } void CreatePartitionTableJob::updatePreview() { // Device takes ownership of its table, but does not destroy the current // one when setPartitionTable() is called, so do it ourself delete m_device->partitionTable(); m_device->setPartitionTable( createTable() ); m_device->partitionTable()->updateUnallocated( *m_device ); } PartitionTable* CreatePartitionTableJob::createTable() { cDebug() << "CreatePartitionTableJob::createTable trying to make table for device" << m_device->deviceNode(); return new PartitionTable( m_type, PartitionTable::defaultFirstUsable( *m_device, m_type ), PartitionTable::defaultLastUsable( *m_device, m_type ) ); } calamares-3.2.20/src/modules/partition/jobs/CreatePartitionTableJob.h000066400000000000000000000034161362604102500256070ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2015, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef CREATEPARTITIONTABLEJOB_H #define CREATEPARTITIONTABLEJOB_H #include "Job.h" #include "partition/KPMManager.h" // KPMcore #include class Device; /** * Creates a partition table on a device. It supports MBR and GPT partition * tables. * * This wipes all the data from the device. */ class CreatePartitionTableJob : public Calamares::Job { Q_OBJECT public: CreatePartitionTableJob( Device* device, PartitionTable::TableType type ); QString prettyName() const override; QString prettyDescription() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; void updatePreview(); Device* device() const { return m_device; } private: CalamaresUtils::Partition::KPMManager m_kpmcore; Device* m_device; PartitionTable::TableType m_type; PartitionTable* createTable(); }; #endif /* CREATEPARTITIONTABLEJOB_H */ calamares-3.2.20/src/modules/partition/jobs/CreateVolumeGroupJob.cpp000066400000000000000000000045011362604102500255010ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018, Caio Jordão Carvalho * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "CreateVolumeGroupJob.h" // KPMcore #include #include #include #include CreateVolumeGroupJob::CreateVolumeGroupJob( QString& vgName, QVector< const Partition* > pvList, const qint32 peSize ) : m_vgName(vgName) , m_pvList(pvList) , m_peSize(peSize) { } QString CreateVolumeGroupJob::prettyName() const { return tr( "Create new volume group named %1." ) .arg( m_vgName ); } QString CreateVolumeGroupJob::prettyDescription() const { return tr( "Create new volume group named %1." ) .arg( m_vgName ); } QString CreateVolumeGroupJob::prettyStatusMessage() const { return tr( "Creating new volume group named %1." ) .arg( m_vgName ); } Calamares::JobResult CreateVolumeGroupJob::exec() { Report report( nullptr ); CreateVolumeGroupOperation op( m_vgName, m_pvList, m_peSize ); op.setStatus( Operation::StatusRunning ); QString message = tr( "The installer failed to create a volume group named '%1'.").arg( m_vgName ); if (op.execute(report)) return Calamares::JobResult::ok(); return Calamares::JobResult::error(message, report.toText()); } void CreateVolumeGroupJob::updatePreview() { LvmDevice::s_DirtyPVs << m_pvList; } void CreateVolumeGroupJob::undoPreview() { for ( const auto& pv : m_pvList ) if ( LvmDevice::s_DirtyPVs.contains( pv )) LvmDevice::s_DirtyPVs.removeAll( pv ); } calamares-3.2.20/src/modules/partition/jobs/CreateVolumeGroupJob.h000066400000000000000000000030251362604102500251460ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018, Caio Jordão Carvalho * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef CREATEVOLUMEGROUPJOB_H #define CREATEVOLUMEGROUPJOB_H #include "Job.h" #include "partition/KPMManager.h" #include class Partition; class CreateVolumeGroupJob : public Calamares::Job { Q_OBJECT public: CreateVolumeGroupJob( QString& vgName, QVector< const Partition* > pvList, const qint32 peSize ); QString prettyName() const override; QString prettyDescription() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; void updatePreview(); void undoPreview(); private: CalamaresUtils::Partition::KPMManager m_kpmcore; QString m_vgName; QVector< const Partition* > m_pvList; qint32 m_peSize; }; #endif // CREATEVOLUMEGROUPJOB_H calamares-3.2.20/src/modules/partition/jobs/DeactivateVolumeGroupJob.cpp000066400000000000000000000040071362604102500263500ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018, Caio Jordão Carvalho * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "DeactivateVolumeGroupJob.h" #include #include #include DeactivateVolumeGroupJob::DeactivateVolumeGroupJob( LvmDevice* device ) : m_device( device ) { } QString DeactivateVolumeGroupJob::prettyName() const { return tr( "Deactivate volume group named %1." ) .arg( m_device->name() ); } QString DeactivateVolumeGroupJob::prettyDescription() const { return tr( "Deactivate volume group named %1." ) .arg( m_device->name() ); } QString DeactivateVolumeGroupJob::prettyStatusMessage() const { return tr( "Deactivate volume group named %1." ) .arg( m_device->name() ); } Calamares::JobResult DeactivateVolumeGroupJob::exec() { Report report( nullptr ); DeactivateVolumeGroupOperation op( *m_device ); op.setStatus( Operation::OperationStatus::StatusRunning ); QString message = tr( "The installer failed to deactivate a volume group named %1." ).arg( m_device->name() ); if ( op.execute( report ) ) { op.preview(); return Calamares::JobResult::ok(); } return Calamares::JobResult::error(message, report.toText()); } calamares-3.2.20/src/modules/partition/jobs/DeactivateVolumeGroupJob.h000066400000000000000000000025571362604102500260250ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018, Caio Jordão Carvalho * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef DEACTIVATEVOLUMEGROUPJOB_H #define DEACTIVATEVOLUMEGROUPJOB_H #include "Job.h" #include "partition/KPMManager.h" class LvmDevice; class DeactivateVolumeGroupJob : public Calamares::Job { Q_OBJECT public: DeactivateVolumeGroupJob( LvmDevice* device ); QString prettyName() const override; QString prettyDescription() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; private: CalamaresUtils::Partition::KPMManager m_kpmcore; LvmDevice* m_device; }; #endif // DEACTIVATEVOLUMEGROUPJOB_H calamares-3.2.20/src/modules/partition/jobs/DeletePartitionJob.cpp000066400000000000000000000057221362604102500251730ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2015, Teo Mrnjavac * Copyright 2017, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "jobs/DeletePartitionJob.h" // KPMcore #include #include #include #include #include #include DeletePartitionJob::DeletePartitionJob( Device* device, Partition* partition ) : PartitionJob( partition ) , m_device( device ) { } QString DeletePartitionJob::prettyName() const { return tr( "Delete partition %1." ) .arg( m_partition->partitionPath() ); } QString DeletePartitionJob::prettyDescription() const { return tr( "Delete partition %1." ) .arg( m_partition->partitionPath() ); } QString DeletePartitionJob::prettyStatusMessage() const { return tr( "Deleting partition %1." ) .arg( m_partition->partitionPath() ); } Calamares::JobResult DeletePartitionJob::exec() { Report report( nullptr ); DeleteOperation op(*m_device, m_partition); op.setStatus(Operation::StatusRunning); QString message = tr( "The installer failed to delete partition %1." ).arg( m_partition->devicePath() ); if (op.execute(report)) return Calamares::JobResult::ok(); return Calamares::JobResult::error(message, report.toText()); } void DeletePartitionJob::updatePreview() { m_partition->parent()->remove( m_partition ); m_device->partitionTable()->updateUnallocated( *m_device ); // Copied from PM DeleteOperation::checkAdjustLogicalNumbers(): // // If the deleted partition is a logical one, we need to adjust the numbers // of the other logical partitions in the extended one, if there are any, // because the OS will do that, too: Logicals must be numbered without gaps, // i.e., a numbering like sda5, sda6, sda8 (after sda7 is deleted) will // become sda5, sda6, sda7 Partition* parentPartition = dynamic_cast< Partition* >( m_partition->parent() ); if ( parentPartition && parentPartition->roles().has( PartitionRole::Extended ) ) parentPartition->adjustLogicalNumbers( m_partition->number(), -1 ); } calamares-3.2.20/src/modules/partition/jobs/DeletePartitionJob.h000066400000000000000000000032201362604102500246270ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2015, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef DELETEPARTITIONJOB_H #define DELETEPARTITIONJOB_H #include "PartitionJob.h" class Device; class Partition; class FileSystem; /** * Deletes an existing partition. * * This is only used for partitions which already existed before the installer * was started: partitions created within the installer and then removed are * simply forgotten. */ class DeletePartitionJob : public PartitionJob { Q_OBJECT public: DeletePartitionJob( Device* device, Partition* partition ); QString prettyName() const override; QString prettyDescription() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; void updatePreview(); Device* device() const { return m_device; } private: Device* m_device; }; #endif /* DELETEPARTITIONJOB_H */ calamares-3.2.20/src/modules/partition/jobs/FillGlobalStorageJob.cpp000066400000000000000000000237011362604102500254300ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2015-2016, Teo Mrnjavac * Copyright 2017, 2019-2020, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "FillGlobalStorageJob.h" #include "core/KPMHelpers.h" #include "core/PartitionInfo.h" #include "Branding.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "partition/FileSystem.h" #include "partition/PartitionIterator.h" #include "utils/Logger.h" #include #include #include #include #include #include #include #include using CalamaresUtils::Partition::PartitionIterator; using CalamaresUtils::Partition::untranslatedFS; using CalamaresUtils::Partition::userVisibleFS; typedef QHash< QString, QString > UuidForPartitionHash; static UuidForPartitionHash findPartitionUuids( QList< Device* > devices ) { UuidForPartitionHash hash; foreach ( Device* device, devices ) { for ( auto it = PartitionIterator::begin( device ); it != PartitionIterator::end( device ); ++it ) { Partition* p = *it; QString path = p->partitionPath(); QString uuid = p->fileSystem().readUUID( p->partitionPath() ); hash.insert( path, uuid ); } } if ( hash.isEmpty() ) { cDebug() << "No UUIDs found for existing partitions."; } return hash; } static QString getLuksUuid( const QString& path ) { QProcess process; process.setProgram( "cryptsetup" ); process.setArguments( { "luksUUID", path } ); process.start(); process.waitForFinished(); if ( process.exitStatus() != QProcess::NormalExit || process.exitCode() ) { return QString(); } QString uuid = QString::fromLocal8Bit( process.readAllStandardOutput() ).trimmed(); return uuid; } static QVariant mapForPartition( Partition* partition, const QString& uuid ) { QVariantMap map; map[ "device" ] = partition->partitionPath(); map[ "mountPoint" ] = PartitionInfo::mountPoint( partition ); map[ "fsName" ] = userVisibleFS( partition->fileSystem() ); map[ "fs" ] = untranslatedFS( partition->fileSystem() ); if ( partition->fileSystem().type() == FileSystem::Luks && dynamic_cast< FS::luks& >( partition->fileSystem() ).innerFS() ) { map[ "fs" ] = untranslatedFS( dynamic_cast< FS::luks& >( partition->fileSystem() ).innerFS() ); } map[ "uuid" ] = uuid; map[ "claimed" ] = PartitionInfo::format( partition ); // If we formatted it, it's ours // Debugging for inside the loop in createPartitionList(), // so indent a bit Logger::CDebug deb; using TR = Logger::DebugRow< const char* const, const QString& >; deb << Logger::SubEntry << "mapping for" << partition->partitionPath() << partition->deviceNode() << TR( "mtpoint:", PartitionInfo::mountPoint( partition ) ) << TR( "fs:", map[ "fs" ].toString() ) << TR( "fsName", map[ "fsName" ].toString() ) << TR( "uuid", uuid ) << TR( "claimed", map[ "claimed" ].toString() ); if ( partition->roles().has( PartitionRole::Luks ) ) { const FileSystem& fsRef = partition->fileSystem(); const FS::luks* luksFs = dynamic_cast< const FS::luks* >( &fsRef ); if ( luksFs ) { map[ "luksMapperName" ] = luksFs->mapperName().split( "/" ).last(); map[ "luksUuid" ] = getLuksUuid( partition->partitionPath() ); map[ "luksPassphrase" ] = luksFs->passphrase(); deb << TR( "luksMapperName:", map[ "luksMapperName" ].toString() ); } } return map; } FillGlobalStorageJob::FillGlobalStorageJob( QList< Device* > devices, const QString& bootLoaderPath ) : m_devices( devices ) , m_bootLoaderPath( bootLoaderPath ) { } QString FillGlobalStorageJob::prettyName() const { return tr( "Set partition information" ); } QString FillGlobalStorageJob::prettyDescription() const { QStringList lines; const auto partitionList = createPartitionList(); for ( const QVariant& partitionItem : partitionList ) { if ( partitionItem.type() == QVariant::Map ) { QVariantMap partitionMap = partitionItem.toMap(); QString path = partitionMap.value( "device" ).toString(); QString mountPoint = partitionMap.value( "mountPoint" ).toString(); QString fsType = partitionMap.value( "fs" ).toString(); if ( mountPoint.isEmpty() || fsType.isEmpty() ) { continue; } if ( path.isEmpty() ) { if ( mountPoint == "/" ) { lines.append( tr( "Install %1 on new %2 system partition." ) .arg( *Calamares::Branding::ShortProductName ) .arg( fsType ) ); } else { lines.append( tr( "Set up new %2 partition with mount point " "%1." ) .arg( mountPoint ) .arg( fsType ) ); } } else { if ( mountPoint == "/" ) { lines.append( tr( "Install %2 on %3 system partition %1." ) .arg( path ) .arg( *Calamares::Branding::ShortProductName ) .arg( fsType ) ); } else { lines.append( tr( "Set up %3 partition %1 with mount point " "%2." ) .arg( path ) .arg( mountPoint ) .arg( fsType ) ); } } } } QVariant bootloaderMap = createBootLoaderMap(); if ( !m_bootLoaderPath.isEmpty() ) { lines.append( tr( "Install boot loader on %1." ).arg( m_bootLoaderPath ) ); } return lines.join( "
" ); } QString FillGlobalStorageJob::prettyStatusMessage() const { return tr( "Setting up mount points." ); } /** @brief note which FS'ses are in use in GS * * .. mark as "1" if it's on the system, somewhere * .. mark as "2" if it's one of the claimed / in-use FSses * * Stores a GS key called "filesystems_use" with this mapping. */ static void storeFSUse( Calamares::GlobalStorage* storage, const QVariantList& partitions ) { QMap< QString, int > fsUses; for ( const auto& p : partitions ) { const auto pmap = p.toMap(); QString fs = pmap.value( "fs" ).toString(); int thisUse = pmap.value( "claimed" ).toBool() ? 2 : 1; if ( fs.isEmpty() ) { continue; } int newUse = qMax( fsUses.value( fs ), thisUse ); // value() is 0 if not present fsUses.insert( fs, newUse ); } QVariantMap fsUsesVariant; for ( auto it = fsUses.cbegin(); it != fsUses.cend(); ++it ) { fsUsesVariant.insert( it.key(), it.value() ); } storage->insert( "filesystems_use", fsUsesVariant ); } Calamares::JobResult FillGlobalStorageJob::exec() { Calamares::GlobalStorage* storage = Calamares::JobQueue::instance()->globalStorage(); const auto partitions = createPartitionList(); cDebug() << "Saving partition information map to GlobalStorage[\"partitions\"]"; storage->insert( "partitions", partitions ); storeFSUse( storage, partitions ); if ( !m_bootLoaderPath.isEmpty() ) { QVariant var = createBootLoaderMap(); if ( !var.isValid() ) { cDebug() << "Failed to find path for boot loader"; } cDebug() << "FillGlobalStorageJob writing bootLoader path:" << var; storage->insert( "bootLoader", var ); } else { cDebug() << "FillGlobalStorageJob writing empty bootLoader value"; storage->insert( "bootLoader", QVariant() ); } return Calamares::JobResult::ok(); } QVariantList FillGlobalStorageJob::createPartitionList() const { UuidForPartitionHash hash = findPartitionUuids( m_devices ); QVariantList lst; cDebug() << "Building partition information map"; for ( auto device : m_devices ) { cDebug() << Logger::SubEntry << "partitions on" << device->deviceNode(); for ( auto it = PartitionIterator::begin( device ); it != PartitionIterator::end( device ); ++it ) { // Debug-logging is done when creating the map lst << mapForPartition( *it, hash.value( ( *it )->partitionPath() ) ); } } return lst; } QVariant FillGlobalStorageJob::createBootLoaderMap() const { QVariantMap map; QString path = m_bootLoaderPath; if ( !path.startsWith( "/dev/" ) ) { Partition* partition = KPMHelpers::findPartitionByMountPoint( m_devices, path ); if ( !partition ) { return QVariant(); } path = partition->partitionPath(); } map[ "installPath" ] = path; return map; } calamares-3.2.20/src/modules/partition/jobs/FillGlobalStorageJob.h000066400000000000000000000034111362604102500250710ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2015, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef FILLGLOBALSTORAGEJOB_H #define FILLGLOBALSTORAGEJOB_H #include "Job.h" #include #include class Device; class Partition; /** * This job does not touch devices. It inserts in GlobalStorage the * partition-related keys (see hacking/GlobalStorage.md) * * Inserting the keys after partitioning makes it possible to access * information such as the partition path or the UUID. */ class FillGlobalStorageJob : public Calamares::Job { Q_OBJECT public: FillGlobalStorageJob( QList< Device* > devices, const QString& bootLoaderPath ); QString prettyName() const override; QString prettyDescription() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; private: QList< Device* > m_devices; QString m_bootLoaderPath; QVariantList createPartitionList() const; QVariant createBootLoaderMap() const; }; #endif /* FILLGLOBALSTORAGEJOB_H */ calamares-3.2.20/src/modules/partition/jobs/FormatPartitionJob.cpp000066400000000000000000000056241362604102500252220ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2015-2016, Teo Mrnjavac * Copyright 2020, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "FormatPartitionJob.h" #include "partition/FileSystem.h" #include "utils/Logger.h" #include #include #include #include #include #include using CalamaresUtils::Partition::untranslatedFS; using CalamaresUtils::Partition::userVisibleFS; FormatPartitionJob::FormatPartitionJob( Device* device, Partition* partition ) : PartitionJob( partition ) , m_device( device ) { } QString FormatPartitionJob::prettyName() const { return tr( "Format partition %1 (file system: %2, size: %3 MiB) on %4." ) .arg( m_partition->partitionPath() ) .arg( userVisibleFS( m_partition->fileSystem() ) ) .arg( m_partition->capacity() / 1024 / 1024 ) .arg( m_device->name() ); } QString FormatPartitionJob::prettyDescription() const { return tr( "Format %3MiB partition %1 with " "file system %2." ) .arg( m_partition->partitionPath() ) .arg( userVisibleFS( m_partition->fileSystem() ) ) .arg( m_partition->capacity() / 1024 / 1024 ); } QString FormatPartitionJob::prettyStatusMessage() const { return tr( "Formatting partition %1 with " "file system %2." ) .arg( m_partition->partitionPath() ) .arg( userVisibleFS( m_partition->fileSystem() ) ); } Calamares::JobResult FormatPartitionJob::exec() { Report report( nullptr ); // Root of the report tree, no parent CreateFileSystemOperation op(*m_device, *m_partition, m_partition->fileSystem().type()); op.setStatus(Operation::StatusRunning); QString message = tr( "The installer failed to format partition %1 on disk '%2'." ).arg( m_partition->partitionPath(), m_device->name() ); if (op.execute(report)) return Calamares::JobResult::ok(); return Calamares::JobResult::error(message, report.toText()); } calamares-3.2.20/src/modules/partition/jobs/FormatPartitionJob.h000066400000000000000000000030771362604102500246670ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2015, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef FORMATPARTITIONJOB_H #define FORMATPARTITIONJOB_H #include "PartitionJob.h" class Device; class Partition; class FileSystem; /** * This job formats an existing partition. * * It is only used for existing partitions: newly created partitions are * formatted by the CreatePartitionJob. */ class FormatPartitionJob : public PartitionJob { Q_OBJECT public: FormatPartitionJob( Device* device, Partition* partition ); QString prettyName() const override; QString prettyDescription() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; Device* device() const { return m_device; } private: Device* m_device; }; #endif /* FORMATPARTITIONJOB_H */ calamares-3.2.20/src/modules/partition/jobs/PartitionJob.cpp000066400000000000000000000021101362604102500240340ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "PartitionJob.h" PartitionJob::PartitionJob( Partition* partition ) : m_partition( partition ) {} void PartitionJob::iprogress(int percent) { if ( percent < 0 ) percent = 0; if ( percent > 100 ) percent = 100; emit progress( qreal( percent / 100.0 ) ); } calamares-3.2.20/src/modules/partition/jobs/PartitionJob.h000066400000000000000000000031041362604102500235050ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef PARTITIONJOB_H #define PARTITIONJOB_H #include "Job.h" #include "partition/KPMManager.h" class Partition; /** * Base class for jobs which affect a partition and which use KPMCore. */ class PartitionJob : public Calamares::Job { Q_OBJECT public: PartitionJob( Partition* partition ); Partition* partition() const { return m_partition; } public slots: /** @brief Translate from KPMCore to Calamares progress. * * KPMCore presents progress as an integer percent from 0 .. 100, * while Calamares uses a qreal from 0 .. 1.00 . */ void iprogress( int percent ); protected: CalamaresUtils::Partition::KPMManager m_kpmcore; Partition* m_partition; }; #endif /* PARTITIONJOB_H */ calamares-3.2.20/src/modules/partition/jobs/RemoveVolumeGroupJob.cpp000066400000000000000000000036621362604102500255420ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018, Caio Jordão Carvalho * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "RemoveVolumeGroupJob.h" #include #include #include RemoveVolumeGroupJob::RemoveVolumeGroupJob( LvmDevice* device ) : m_device( device ) { } QString RemoveVolumeGroupJob::prettyName() const { return tr( "Remove Volume Group named %1." ) .arg( m_device->name() ); } QString RemoveVolumeGroupJob::prettyDescription() const { return tr( "Remove Volume Group named %1.") .arg( m_device->name() ); } QString RemoveVolumeGroupJob::prettyStatusMessage() const { return tr( "Remove Volume Group named %1." ) .arg( m_device->name() ); } Calamares::JobResult RemoveVolumeGroupJob::exec() { Report report( nullptr ); RemoveVolumeGroupOperation op( *m_device ); op.setStatus( Operation::OperationStatus::StatusRunning ); QString message = tr( "The installer failed to remove a volume group named '%1'." ).arg( m_device->name() ); if ( op.execute( report ) ) return Calamares::JobResult::ok(); return Calamares::JobResult::error(message, report.toText()); } calamares-3.2.20/src/modules/partition/jobs/RemoveVolumeGroupJob.h000066400000000000000000000025331362604102500252030ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018, Caio Jordão Carvalho * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef REMOVEVOLUMEGROUPJOB_H #define REMOVEVOLUMEGROUPJOB_H #include "Job.h" #include "partition/KPMManager.h" class LvmDevice; class RemoveVolumeGroupJob : public Calamares::Job { Q_OBJECT public: RemoveVolumeGroupJob( LvmDevice* device ); QString prettyName() const override; QString prettyDescription() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; private: CalamaresUtils::Partition::KPMManager m_kpmcore; LvmDevice* m_device; }; #endif // REMOVEVOLUMEGROUPJOB_H calamares-3.2.20/src/modules/partition/jobs/ResizePartitionJob.cpp000066400000000000000000000075551362604102500252400ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2015, Teo Mrnjavac * Copyright 2017, Andrius Å tikonas * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "jobs/ResizePartitionJob.h" #include "utils/Units.h" // KPMcore #include #include #include using CalamaresUtils::BytesToMiB; //- ResizePartitionJob --------------------------------------------------------- ResizePartitionJob::ResizePartitionJob( Device* device, Partition* partition, qint64 firstSector, qint64 lastSector ) : PartitionJob( partition ) , m_device( device ) , m_oldFirstSector( partition->firstSector() ) // Keep a copy of old sectors because they will be overwritten in updatePreview() , m_oldLastSector( partition->lastSector() ) , m_newFirstSector( firstSector ) , m_newLastSector( lastSector ) { } QString ResizePartitionJob::prettyName() const { // FIXME: Copy PM ResizeOperation code which generates a description of the // operation return tr( "Resize partition %1." ).arg( partition()->partitionPath() ); } QString ResizePartitionJob::prettyDescription() const { return tr( "Resize %2MiB partition %1 to " "%3MiB." ) .arg( partition()->partitionPath() ) .arg( ( BytesToMiB( m_oldLastSector - m_oldFirstSector + 1 ) * partition()->sectorSize() ) ) .arg( ( BytesToMiB( m_newLastSector - m_newFirstSector + 1 ) * partition()->sectorSize() ) ); } QString ResizePartitionJob::prettyStatusMessage() const { return tr( "Resizing %2MiB partition %1 to " "%3MiB." ) .arg( partition()->partitionPath() ) .arg( ( BytesToMiB( m_oldLastSector - m_oldFirstSector + 1 ) * partition()->sectorSize() ) ) .arg( ( BytesToMiB( m_newLastSector - m_newFirstSector + 1 ) * partition()->sectorSize() ) ); } Calamares::JobResult ResizePartitionJob::exec() { Report report (nullptr); // Restore partition sectors that were modified for preview m_partition->setFirstSector( m_oldFirstSector ); m_partition->setLastSector( m_oldLastSector ); ResizeOperation op(*m_device, *m_partition, m_newFirstSector, m_newLastSector); op.setStatus(Operation::StatusRunning); connect(&op, &Operation::progress, this, &ResizePartitionJob::iprogress ); QString errorMessage = tr( "The installer failed to resize partition %1 on disk '%2'." ) .arg( m_partition->partitionPath() ) .arg( m_device->name() ); if (op.execute(report)) return Calamares::JobResult::ok(); return Calamares::JobResult::error(errorMessage, report.toText()); } void ResizePartitionJob::updatePreview() { m_device->partitionTable()->removeUnallocated(); m_partition->parent()->remove( m_partition ); m_partition->setFirstSector( m_newFirstSector ); m_partition->setLastSector( m_newLastSector ); m_partition->parent()->insert( m_partition ); m_device->partitionTable()->updateUnallocated( *m_device ); } Device* ResizePartitionJob::device() const { return m_device; } calamares-3.2.20/src/modules/partition/jobs/ResizePartitionJob.h000066400000000000000000000032531362604102500246740ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2015, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef RESIZEPARTITIONJOB_H #define RESIZEPARTITIONJOB_H #include "PartitionJob.h" class Device; class Partition; class FileSystem; /** * This job resizes an existing partition. * * It can grow, shrink and/or move a partition while preserving its content. */ class ResizePartitionJob : public PartitionJob { Q_OBJECT public: ResizePartitionJob( Device* device, Partition* partition, qint64 firstSector, qint64 lastSector ); QString prettyName() const override; QString prettyDescription() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; void updatePreview(); Device* device() const; private: Device* m_device; qint64 m_oldFirstSector; qint64 m_oldLastSector; qint64 m_newFirstSector; qint64 m_newLastSector; }; #endif /* RESIZEPARTITIONJOB_H */ calamares-3.2.20/src/modules/partition/jobs/ResizeVolumeGroupJob.cpp000066400000000000000000000054701362604102500255450ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018, Caio Jordão Carvalho * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "ResizeVolumeGroupJob.h" // KPMcore #include #include #include #include ResizeVolumeGroupJob::ResizeVolumeGroupJob( LvmDevice* device, QVector< const Partition* >& partitionList ) : m_device( device ) , m_partitionList( partitionList ) { } QString ResizeVolumeGroupJob::prettyName() const { return tr( "Resize volume group named %1 from %2 to %3." ) .arg( m_device->name() ) .arg( currentPartitions() ) .arg( targetPartitions() ); } QString ResizeVolumeGroupJob::prettyDescription() const { return tr( "Resize volume group named %1 from %2 to %3." ) .arg( m_device->name() ) .arg( currentPartitions() ) .arg( targetPartitions() ); } QString ResizeVolumeGroupJob::prettyStatusMessage() const { return tr( "Resize volume group named %1 from %2 to %3." ) .arg( m_device->name() ) .arg( currentPartitions() ) .arg( targetPartitions() ); } Calamares::JobResult ResizeVolumeGroupJob::exec() { Report report( nullptr ); ResizeVolumeGroupOperation op( *m_device, m_partitionList ); op.setStatus( Operation::OperationStatus::StatusRunning ); QString message = tr( "The installer failed to resize a volume group named '%1'." ).arg( m_device->name() ); if ( op.execute( report ) ) return Calamares::JobResult::ok(); return Calamares::JobResult::error( message, report.toText() ); } QString ResizeVolumeGroupJob::currentPartitions() const { QString result; for ( const Partition *p : m_device->physicalVolumes() ) result += p->deviceNode() + ", "; result.chop(2); return result; } QString ResizeVolumeGroupJob::targetPartitions() const { QString result; for ( const Partition *p : m_partitionList ) result += p->deviceNode() + ", "; result.chop(2); return result; } calamares-3.2.20/src/modules/partition/jobs/ResizeVolumeGroupJob.h000066400000000000000000000030641362604102500252070ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018, Caio Jordão Carvalho * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef RESIZEVOLUMEGROUPJOB_H #define RESIZEVOLUMEGROUPJOB_H #include "Job.h" #include "partition/KPMManager.h" #include class LvmDevice; class Partition; class ResizeVolumeGroupJob : public Calamares::Job { Q_OBJECT public: ResizeVolumeGroupJob( LvmDevice* device, QVector< const Partition* >& partitionList ); QString prettyName() const override; QString prettyDescription() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; private: QString currentPartitions() const; QString targetPartitions() const; private: CalamaresUtils::Partition::KPMManager m_kpmcore; LvmDevice* m_device; QVector< const Partition* > m_partitionList; }; #endif // RESIZEVOLUMEGROUPJOB_H calamares-3.2.20/src/modules/partition/jobs/SetPartitionFlagsJob.cpp000066400000000000000000000132311362604102500254730ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2016, Teo Mrnjavac * Copyright 2020, Adriaan de Groot * * Based on the SetPartFlagsJob class from KDE Partition Manager, * Copyright 2008, 2010, Volker Lanz * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "SetPartitionFlagsJob.h" #include "partition/FileSystem.h" #include "utils/Logger.h" #include "utils/Units.h" #include #include #include #include #include using CalamaresUtils::BytesToMiB; using CalamaresUtils::Partition::untranslatedFS; using CalamaresUtils::Partition::userVisibleFS; SetPartFlagsJob::SetPartFlagsJob( Device* device, Partition* partition, PartitionTable::Flags flags ) : PartitionJob( partition ) , m_device( device ) , m_flags( flags ) {} QString SetPartFlagsJob::prettyName() const { if ( !partition()->partitionPath().isEmpty() ) return tr( "Set flags on partition %1." ).arg( partition()->partitionPath() ); QString fsNameForUser = userVisibleFS( partition()->fileSystem() ); if ( !fsNameForUser.isEmpty() ) return tr( "Set flags on %1MiB %2 partition." ) .arg( BytesToMiB( partition()->capacity() ) ) .arg( fsNameForUser ); return tr( "Set flags on new partition." ); } QString SetPartFlagsJob::prettyDescription() const { QStringList flagsList = PartitionTable::flagNames( m_flags ); if ( flagsList.count() == 0 ) { if ( !partition()->partitionPath().isEmpty() ) return tr( "Clear flags on partition %1." ) .arg( partition()->partitionPath() ); QString fsNameForUser = userVisibleFS( partition()->fileSystem() ); if ( !fsNameForUser.isEmpty() ) return tr( "Clear flags on %1MiB %2 partition." ) .arg( BytesToMiB( partition()->capacity() ) ) .arg( fsNameForUser ); return tr( "Clear flags on new partition." ); } if ( !partition()->partitionPath().isEmpty() ) return tr( "Flag partition %1 as " "%2." ) .arg( partition()->partitionPath() ) .arg( flagsList.join( ", " ) ); QString fsNameForUser = userVisibleFS( partition()->fileSystem() ); if ( !fsNameForUser.isEmpty() ) return tr( "Flag %1MiB %2 partition as " "%3." ) .arg( BytesToMiB( partition()->capacity() ) ) .arg( fsNameForUser ) .arg( flagsList.join( ", " ) ); return tr( "Flag new partition as %1." ) .arg( flagsList.join( ", " ) ); } QString SetPartFlagsJob::prettyStatusMessage() const { QStringList flagsList = PartitionTable::flagNames( m_flags ); if ( flagsList.count() == 0 ) { if ( !partition()->partitionPath().isEmpty() ) return tr( "Clearing flags on partition %1." ) .arg( partition()->partitionPath() ); QString fsNameForUser = userVisibleFS( partition()->fileSystem() ); if ( !fsNameForUser.isEmpty() ) return tr( "Clearing flags on %1MiB %2 partition." ) .arg( BytesToMiB( partition()->capacity() ) ) .arg( fsNameForUser ); return tr( "Clearing flags on new partition." ); } if ( !partition()->partitionPath().isEmpty() ) return tr( "Setting flags %2 on partition " "%1." ) .arg( partition()->partitionPath() ) .arg( flagsList.join( ", " ) ); QString fsNameForUser = userVisibleFS( partition()->fileSystem() ); if ( !fsNameForUser.isEmpty() ) return tr( "Setting flags %3 on " "%1MiB %2 partition." ) .arg( BytesToMiB( partition()->capacity() ) ) .arg( fsNameForUser ) .arg( flagsList.join( ", " ) ); return tr( "Setting flags %1 on new partition." ) .arg( flagsList.join( ", " ) ); } Calamares::JobResult SetPartFlagsJob::exec() { cDebug() << "Setting flags on" << m_device->deviceNode() << "partition" << partition()->deviceNode() << "to" << m_flags; Report report ( nullptr ); SetPartFlagsOperation op( *m_device, *partition(), m_flags ); op.setStatus( Operation::StatusRunning ); connect( &op, &Operation::progress, this, &SetPartFlagsJob::iprogress ); QString errorMessage = tr( "The installer failed to set flags on partition %1." ) .arg( m_partition->partitionPath() ); if ( op.execute( report ) ) return Calamares::JobResult::ok(); return Calamares::JobResult::error( errorMessage, report.toText() ); } calamares-3.2.20/src/modules/partition/jobs/SetPartitionFlagsJob.h000066400000000000000000000031141362604102500251370ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2016, Teo Mrnjavac * * Based on the SetPartFlagsJob class from KDE Partition Manager, * Copyright 2008, 2010, Volker Lanz * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef SETPARTITIONFLAGSJOB_H #define SETPARTITIONFLAGSJOB_H #include "PartitionJob.h" #include class Device; class Partition; /** * This job changes the flags on an existing partition. */ class SetPartFlagsJob : public PartitionJob { Q_OBJECT public: SetPartFlagsJob( Device* device, Partition* partition, PartitionTable::Flags flags ); QString prettyName() const override; QString prettyDescription() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; Device* device() const; private: Device* m_device; PartitionTable::Flags m_flags; }; #endif // SETPARTITIONFLAGSJOB_H calamares-3.2.20/src/modules/partition/partition.conf000066400000000000000000000132441362604102500226610ustar00rootroot00000000000000# This setting specifies the mount point of the EFI system partition. Some # distributions (Fedora, Debian, Manjaro, etc.) use /boot/efi, others (KaOS, # etc.) use just /boot. efiSystemPartition: "/boot/efi" # This optional setting specifies the size of the EFI system partition. # If nothing is specified, the default size of 300MiB will be used. # efiSystemPartitionSize: 300M # In autogenerated partitioning, allow the user to select a swap size? # If there is exactly one choice, no UI is presented, and the user # cannot make a choice -- this setting is used. If there is more than # one choice, a UI is presented. # # Legacy settings *neverCreateSwap* and *ensureSuspendToDisk* correspond # to values of *userSwapChoices* as follows: # - *neverCreateSwap* is true, means [none] # - *neverCreateSwap* is false, *ensureSuspendToDisk* is false, [small] # - *neverCreateSwap* is false, *ensureSuspendToDisk* is true, [suspend] # # Autogenerated swap sizes are as follows: # - *suspend*: Swap is always at least total memory size, # and up to 4GiB RAM follows the rule-of-thumb 2 * memory; # from 4GiB to 8 GiB it stays steady at 8GiB, and over 8 GiB memory # swap is the size of main memory. # - *small*: Follows the rules above, but Swap is at # most 8GiB, and no more than 10% of available disk. # In both cases, a fudge factor (usually 10% extra) is applied so that there # is some space for administrative overhead (e.g. 8 GiB swap will allocate # 8.8GiB on disk in the end). userSwapChoices: - none # Create no swap, use no swap - reuse # Re-use existing swap, but don't create any (unsupported right now) - small # Up to 4GB - suspend # At least main memory size - file # To swap file instead of partition (unsupported right now) # LEGACY SETTINGS (these will generate a warning) # ensureSuspendToDisk: true # neverCreateSwap: false # Correctly draw nested (e.g. logical) partitions as such. drawNestedPartitions: false # Show/hide partition labels on manual partitioning page. alwaysShowPartitionLabels: true # Default filesystem type, used when a "new" partition is made. # # When replacing a partition, the existing filesystem inside the # partition is retained. In other cases, e.g. Erase and Alongside, # as well as when using manual partitioning and creating a new # partition, this filesystem type is pre-selected. Note that # editing a partition in manual-creation mode will not automatically # change the filesystem type to this default value -- it is not # creating a new partition. # # Suggested values: ext2, ext3, ext4, reiser, xfs, jfs, btrfs # If nothing is specified, Calamares defaults to "ext4". # # Names are case-sensitive and defined by KPMCore. defaultFileSystemType: "ext4" # Show/hide LUKS related functionality in automated partitioning modes. # Disable this if you choose not to deploy early unlocking support in GRUB2 # and/or your distribution's initramfs solution. # # BIG FAT WARNING: # # This option is unsupported, as it cuts out a crucial security feature. # Disabling LUKS and shipping Calamares without a correctly configured GRUB2 # and initramfs is considered suboptimal use of the Calamares software. The # Calamares team will not provide user support for any potential issue that # may arise as a consequence of setting this option to false. # It is strongly recommended that system integrators put in the work to support # LUKS unlocking support in GRUB2 and initramfs/dracut/mkinitcpio/etc. # Support is offered to system integrators that wish to do so, through the # Calamares bug tracker, as well as in #calamares on Freenode. # For more information on setting up GRUB2 for Calamares with LUKS, see # https://github.com/calamares/calamares/wiki/Deploy-LUKS # # If nothing is specified, LUKS is enabled in automated modes. #enableLuksAutomatedPartitioning: true # Allow manual partitioning. # # When set to false, this option hides the "Manual partitioning" button, # limiting the user's choice to "Erase", "Replace" or "Alongside". # This can be useful when using a custom partition layout we don't want # the user to modify. # # If nothing is specified, manual partitioning is enabled. #allowManualPartitioning: true # To apply a custom partition layout, it has to be defined this way : # # partitionLayout: # - name: "rootfs" # filesystem: "ext4" # mountPoint: "/" # size: 20% # minSize: 500M # maxSize: 10G # - name: "home" # filesystem: "ext4" # mountPoint: "/home" # size: 3G # minSize: 1.5G # - name: "data" # filesystem: "fat32" # mountPoint: "/data" # size: 100% # # There can be any number of partitions, each entry having the following attributes: # - name: partition label # - filesystem: filesystem type # - mountPoint: partition mount point # - size: partition size in bytes (append 'K', 'M' or 'G' for KiB, MiB or GiB) # or # % of the available drive space if a '%' is appended to the value # - minSize: minimum partition size (optional parameter) # - maxSize: maximum partition size (optional parameter) # Checking for available storage # # This overlaps with the setting of the same name in the welcome module's # requirements section. If nothing is set by the welcome module, this # value is used instead. It is still a problem if there is no required # size set at all, and the replace and resize options will not be offered # if no required size is set. # # The value is in Gibibytes (GiB). # # BIG FAT WARNING: except for OEM-phase-0 use, you should be using # the welcome module, **and** configure this value in # `welcome.conf`, not here. # requiredStorage: 3.5 calamares-3.2.20/src/modules/partition/tests/000077500000000000000000000000001362604102500211375ustar00rootroot00000000000000calamares-3.2.20/src/modules/partition/tests/CMakeLists.txt000066400000000000000000000020321362604102500236740ustar00rootroot00000000000000find_package( Qt5 COMPONENTS Gui REQUIRED ) set( PartitionModule_SOURCE_DIR .. ) include_directories( ${Qt5Gui_INCLUDE_DIRS} ${PartitionModule_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ) calamares_add_test( partitionjobtests SOURCES PartitionJobTests.cpp ${PartitionModule_SOURCE_DIR}/core/KPMHelpers.cpp ${PartitionModule_SOURCE_DIR}/core/PartitionInfo.cpp ${PartitionModule_SOURCE_DIR}/jobs/CreatePartitionJob.cpp ${PartitionModule_SOURCE_DIR}/jobs/CreatePartitionTableJob.cpp ${PartitionModule_SOURCE_DIR}/jobs/DeletePartitionJob.cpp ${PartitionModule_SOURCE_DIR}/jobs/PartitionJob.cpp ${PartitionModule_SOURCE_DIR}/jobs/ResizePartitionJob.cpp LIBRARIES kpmcore DEFINITIONS ${_partition_defs} ) calamares_add_test( clearmountsjobtests SOURCES ${PartitionModule_SOURCE_DIR}/jobs/ClearMountsJob.cpp ClearMountsJobTests.cpp LIBRARIES kpmcore DEFINITIONS ${_partition_defs} ) calamares-3.2.20/src/modules/partition/tests/ClearMountsJobTests.cpp000066400000000000000000000041061362604102500255560ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "ClearMountsJobTests.h" #include "utils/Logger.h" #include QTEST_GUILESS_MAIN( ClearMountsJobTests ) /* Not exactly public API */ QStringList getPartitionsForDevice( const QString& deviceName ); QStringList getPartitionsForDevice_other(const QString& deviceName) { QProcess process; process.setProgram( "sh" ); process.setArguments( { "-c", QString( "echo $(awk '{print $4}' /proc/partitions | sed -e '/name/d' -e '/^$/d' -e '/[1-9]/!d' | grep %1)" ) .arg( deviceName ) } ); process.start(); process.waitForFinished(); const QString partitions = process.readAllStandardOutput(); const QStringList partitionsList = partitions.simplified().split( ' ' ); return partitionsList; } ClearMountsJobTests::ClearMountsJobTests() { Logger::setupLogLevel(6); } void ClearMountsJobTests::testFindPartitions() { QStringList partitions = getPartitionsForDevice( "sda" ); QStringList other_part = getPartitionsForDevice_other( "sda" ); cDebug() << "Initial implementation:" << Logger::DebugList( partitions ); cDebug() << "Other implementation:" << Logger::DebugList( other_part ); QCOMPARE( partitions, other_part ); } calamares-3.2.20/src/modules/partition/tests/ClearMountsJobTests.h000066400000000000000000000020051362604102500252170ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef CLEARMOUNTSJOBTESTS_H #define CLEARMOUNTSJOBTESTS_H #include class ClearMountsJobTests : public QObject { Q_OBJECT public: ClearMountsJobTests(); private Q_SLOTS: void testFindPartitions(); }; #endif calamares-3.2.20/src/modules/partition/tests/PartitionJobTests.cpp000066400000000000000000000355571362604102500253110ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * Copyright 2017, 2019 Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include #include "partition/KPMManager.h" #include "partition/PartitionQuery.h" #include "utils/Logger.h" #include "utils/Units.h" #include #include #include #include // CalaPM #include #include // Qt #include #include #include QTEST_GUILESS_MAIN( PartitionJobTests ) using namespace Calamares; using CalamaresUtils::operator""_MiB; using CalamaresUtils::Partition::isPartitionFreeSpace; class PartitionMounter { public: PartitionMounter( const QString& devicePath ) : m_mountPointDir( "calamares-partitiontests-mountpoint" ) { QStringList args = QStringList() << devicePath << m_mountPointDir.path(); int ret = QProcess::execute( "mount", args ); m_mounted = ret == 0; QCOMPARE( ret, 0 ); } ~PartitionMounter() { if ( !m_mounted ) { return; } int ret = QProcess::execute( "umount", QStringList() << m_mountPointDir.path() ); QCOMPARE( ret, 0 ); } QString mountPoint() const { return m_mounted ? m_mountPointDir.path() : QString(); } private: QString m_devicePath; QTemporaryDir m_mountPointDir; bool m_mounted; }; /// @brief Generate random data of given @p size as a QByteArray static QByteArray generateTestData( qint64 size ) { QByteArray ba; ba.resize( static_cast< int >( size ) ); // Fill the array explicitly to keep Valgrind happy for ( auto it = ba.data(); it < ba.data() + size; ++it ) { *it = char( rand() & 0xff ); } return ba; } static void writeFile( const QString& path, const QByteArray data ) { QFile file( path ); QVERIFY( file.open( QIODevice::WriteOnly ) ); const char* ptr = data.constData(); const char* end = data.constData() + data.size(); const qint64 chunkSize = 16384; while ( ptr < end ) { qint64 count = file.write( ptr, chunkSize ); if ( count < 0 ) { QString msg = QString( "Writing file failed. Only %1 bytes written out of %2. Error: '%3'." ) .arg( ptr - data.constData() ) .arg( data.size() ) .arg( file.errorString() ); QFAIL( qPrintable( msg ) ); } ptr += count; } } static Partition* firstFreePartition( PartitionNode* parent ) { for ( auto child : parent->children() ) if ( isPartitionFreeSpace( child ) ) { return child; } return nullptr; } //- QueueRunner --------------------------------------------------------------- QueueRunner::QueueRunner( JobQueue* queue ) : m_queue( queue ) , m_finished( false ) // Same initalizations as in ::run() , m_success( true ) { connect( m_queue, &JobQueue::finished, this, &QueueRunner::onFinished ); connect( m_queue, &JobQueue::failed, this, &QueueRunner::onFailed ); } QueueRunner::~QueueRunner() { // Nothing to do. We don't own the queue, and disconnect happens automatically } bool QueueRunner::run() { m_finished = false; m_success = true; m_queue->start(); QEventLoop loop; while ( !m_finished ) { loop.processEvents(); } return m_success; } void QueueRunner::onFinished() { m_finished = true; } void QueueRunner::onFailed( const QString& message, const QString& details ) { m_success = false; QString msg = message + "\ndetails: " + details; QFAIL( qPrintable( msg ) ); } CalamaresUtils::Partition::KPMManager* kpmcore = nullptr; //- PartitionJobTests ------------------------------------------------------------------ PartitionJobTests::PartitionJobTests() : m_runner( &m_queue ) { } void PartitionJobTests::initTestCase() { QString devicePath = qgetenv( "CALAMARES_TEST_DISK" ); if ( devicePath.isEmpty() ) { // The 0 is to keep the macro parameters happy QSKIP( "Skipping test, CALAMARES_TEST_DISK is not set. It should point to a disk which can be safely formatted", 0 ); } kpmcore = new CalamaresUtils::Partition::KPMManager(); FileSystemFactory::init(); refreshDevice(); } void PartitionJobTests::cleanupTestCase() { delete kpmcore; } void PartitionJobTests::refreshDevice() { QString devicePath = qgetenv( "CALAMARES_TEST_DISK" ); m_device.reset( kpmcore->backend()->scanDevice( devicePath ) ); QVERIFY( !m_device.isNull() ); } void PartitionJobTests::testPartitionTable() { queuePartitionTableCreation( PartitionTable::msdos ); QVERIFY( m_runner.run() ); QVERIFY( m_device->partitionTable() ); QVERIFY( firstFreePartition( m_device->partitionTable() ) ); queuePartitionTableCreation( PartitionTable::gpt ); QVERIFY( m_runner.run() ); QVERIFY( m_device->partitionTable() ); QVERIFY( firstFreePartition( m_device->partitionTable() ) ); } void PartitionJobTests::queuePartitionTableCreation( PartitionTable::TableType type ) { auto job = new CreatePartitionTableJob( m_device.data(), type ); job->updatePreview(); m_queue.enqueue( job_ptr( job ) ); } CreatePartitionJob* PartitionJobTests::newCreatePartitionJob( Partition* freeSpacePartition, PartitionRole role, FileSystem::Type type, qint64 size ) { Q_ASSERT( freeSpacePartition ); qint64 firstSector = freeSpacePartition->firstSector(); qint64 lastSector; if ( size > 0 ) { lastSector = firstSector + size / m_device->logicalSize(); } else { lastSector = freeSpacePartition->lastSector(); } FileSystem* fs = FileSystemFactory::create( type, firstSector, lastSector, m_device->logicalSize() ); Partition* partition = new Partition( freeSpacePartition->parent(), *m_device, role, fs, firstSector, lastSector, QString() /* path */, KPM_PARTITION_FLAG( None ) /* availableFlags */, QString() /* mountPoint */, false /* mounted */, KPM_PARTITION_FLAG( None ) /* activeFlags */, KPM_PARTITION_STATE( New ) ); return new CreatePartitionJob( m_device.data(), partition ); } void PartitionJobTests::testCreatePartition() { queuePartitionTableCreation( PartitionTable::gpt ); CreatePartitionJob* job; Partition* freePartition; freePartition = firstFreePartition( m_device->partitionTable() ); QVERIFY( freePartition ); job = newCreatePartitionJob( freePartition, PartitionRole( PartitionRole::Primary ), FileSystem::Ext4, 1_MiB ); Partition* partition1 = job->partition(); QVERIFY( partition1 ); job->updatePreview(); m_queue.enqueue( job_ptr( job ) ); freePartition = firstFreePartition( m_device->partitionTable() ); QVERIFY( freePartition ); job = newCreatePartitionJob( freePartition, PartitionRole( PartitionRole::Primary ), FileSystem::LinuxSwap, 1_MiB ); Partition* partition2 = job->partition(); QVERIFY( partition2 ); job->updatePreview(); m_queue.enqueue( job_ptr( job ) ); freePartition = firstFreePartition( m_device->partitionTable() ); QVERIFY( freePartition ); job = newCreatePartitionJob( freePartition, PartitionRole( PartitionRole::Primary ), FileSystem::Fat32, 1_MiB ); Partition* partition3 = job->partition(); QVERIFY( partition3 ); job->updatePreview(); m_queue.enqueue( job_ptr( job ) ); QVERIFY( m_runner.run() ); // Check partitionPath has been set. It is not known until the job has // executed. QString devicePath = m_device->deviceNode(); QCOMPARE( partition1->partitionPath(), devicePath + "1" ); QCOMPARE( partition2->partitionPath(), devicePath + "2" ); QCOMPARE( partition3->partitionPath(), devicePath + "3" ); } void PartitionJobTests::testCreatePartitionExtended() { queuePartitionTableCreation( PartitionTable::msdos ); CreatePartitionJob* job; Partition* freePartition; freePartition = firstFreePartition( m_device->partitionTable() ); QVERIFY( freePartition ); job = newCreatePartitionJob( freePartition, PartitionRole( PartitionRole::Primary ), FileSystem::Ext4, 10_MiB ); Partition* partition1 = job->partition(); QVERIFY( partition1 ); job->updatePreview(); m_queue.enqueue( job_ptr( job ) ); freePartition = firstFreePartition( m_device->partitionTable() ); QVERIFY( freePartition ); job = newCreatePartitionJob( freePartition, PartitionRole( PartitionRole::Extended ), FileSystem::Extended, 10_MiB ); job->updatePreview(); m_queue.enqueue( job_ptr( job ) ); Partition* extendedPartition = job->partition(); freePartition = firstFreePartition( extendedPartition ); QVERIFY( freePartition ); job = newCreatePartitionJob( freePartition, PartitionRole( PartitionRole::Logical ), FileSystem::Ext4, 0 ); Partition* partition2 = job->partition(); QVERIFY( partition2 ); job->updatePreview(); m_queue.enqueue( job_ptr( job ) ); QVERIFY( m_runner.run() ); // Check partitionPath has been set. It is not known until the job has // executed. QString devicePath = m_device->deviceNode(); QCOMPARE( partition1->partitionPath(), devicePath + "1" ); QCOMPARE( extendedPartition->partitionPath(), devicePath + "2" ); QCOMPARE( partition2->partitionPath(), devicePath + "5" ); } void PartitionJobTests::testResizePartition_data() { QTest::addColumn< unsigned int >( "oldStartMiB" ); QTest::addColumn< unsigned int >( "oldSizeMiB" ); QTest::addColumn< unsigned int >( "newStartMiB" ); QTest::addColumn< unsigned int >( "newSizeMiB" ); QTest::newRow( "grow" ) << 10 << 50 << 10 << 70; QTest::newRow( "shrink" ) << 10 << 70 << 10 << 50; QTest::newRow( "moveLeft" ) << 10 << 50 << 8 << 50; QTest::newRow( "moveRight" ) << 10 << 50 << 12 << 50; } void PartitionJobTests::testResizePartition() { QFETCH( unsigned int, oldStartMiB ); QFETCH( unsigned int, oldSizeMiB ); QFETCH( unsigned int, newStartMiB ); QFETCH( unsigned int, newSizeMiB ); const qint64 sectorsPerMiB = 1_MiB / m_device->logicalSize(); qint64 oldFirst = sectorsPerMiB * oldStartMiB; qint64 oldLast = oldFirst + sectorsPerMiB * oldSizeMiB - 1; qint64 newFirst = sectorsPerMiB * newStartMiB; qint64 newLast = newFirst + sectorsPerMiB * newSizeMiB - 1; // Make the test data file smaller than the full size of the partition to // accomodate for the file system overhead const unsigned long long minSizeMiB = qMin( oldSizeMiB, newSizeMiB ); const QByteArray testData = generateTestData( CalamaresUtils::MiBtoBytes( minSizeMiB ) * 3 / 4 ); const QString testName = "test.data"; // Setup: create the test partition { queuePartitionTableCreation( PartitionTable::msdos ); Partition* freePartition = firstFreePartition( m_device->partitionTable() ); QVERIFY( freePartition ); Partition* partition = KPMHelpers::createNewPartition( freePartition->parent(), *m_device, PartitionRole( PartitionRole::Primary ), FileSystem::Ext4, oldFirst, oldLast, KPM_PARTITION_FLAG( None ) ); CreatePartitionJob* job = new CreatePartitionJob( m_device.data(), partition ); job->updatePreview(); m_queue.enqueue( job_ptr( job ) ); QVERIFY( m_runner.run() ); } { // Write a test file in the partition refreshDevice(); QVERIFY( m_device->partitionTable() ); Partition* partition = m_device->partitionTable()->findPartitionBySector( oldFirst, PartitionRole( PartitionRole::Primary ) ); QVERIFY( partition ); QCOMPARE( partition->firstSector(), oldFirst ); QCOMPARE( partition->lastSector(), oldLast ); { PartitionMounter mounter( partition->partitionPath() ); QString mountPoint = mounter.mountPoint(); QVERIFY( !mountPoint.isEmpty() ); writeFile( mountPoint + '/' + testName, testData ); } // Resize ResizePartitionJob* job = new ResizePartitionJob( m_device.data(), partition, newFirst, newLast ); job->updatePreview(); m_queue.enqueue( job_ptr( job ) ); QVERIFY( m_runner.run() ); QCOMPARE( partition->firstSector(), newFirst ); QCOMPARE( partition->lastSector(), newLast ); } // Test { refreshDevice(); QVERIFY( m_device->partitionTable() ); Partition* partition = m_device->partitionTable()->findPartitionBySector( newFirst, PartitionRole( PartitionRole::Primary ) ); QVERIFY( partition ); QCOMPARE( partition->firstSector(), newFirst ); QCOMPARE( partition->lastSector(), newLast ); QCOMPARE( partition->fileSystem().firstSector(), newFirst ); QCOMPARE( partition->fileSystem().lastSector(), newLast ); PartitionMounter mounter( partition->partitionPath() ); QString mountPoint = mounter.mountPoint(); QVERIFY( !mountPoint.isEmpty() ); { QFile file( mountPoint + '/' + testName ); QVERIFY( file.open( QIODevice::ReadOnly ) ); QByteArray outData = file.readAll(); QCOMPARE( outData.size(), testData.size() ); QCOMPARE( outData, testData ); } } } calamares-3.2.20/src/modules/partition/tests/PartitionJobTests.h000066400000000000000000000042311362604102500247370ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Aurélien Gâteau * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef PARTITIONJOBTESTS_H #define PARTITIONJOBTESTS_H #include // CalaPM #include #include #include #include #include // Qt #include #include class QueueRunner : public QObject { public: QueueRunner( Calamares::JobQueue* queue ); virtual ~QueueRunner() override; /** * Synchronously runs the queue. Returns true on success */ bool run(); private: void onFailed( const QString& message, const QString& details ); void onFinished(); Calamares::JobQueue* m_queue; bool m_finished; bool m_success; }; class PartitionJobTests : public QObject { Q_OBJECT public: PartitionJobTests(); private Q_SLOTS: void initTestCase(); void cleanupTestCase(); void testPartitionTable(); void testCreatePartition(); void testCreatePartitionExtended(); void testResizePartition_data(); void testResizePartition(); private: QScopedPointer< Device > m_device; Calamares::JobQueue m_queue; QueueRunner m_runner; void queuePartitionTableCreation( PartitionTable::TableType type ); CreatePartitionJob* newCreatePartitionJob( Partition* freeSpacePartition, PartitionRole, FileSystem::Type type, qint64 size ); void refreshDevice(); }; #endif /* PARTITIONJOBTESTS_H */ calamares-3.2.20/src/modules/plasmalnf/000077500000000000000000000000001362604102500177415ustar00rootroot00000000000000calamares-3.2.20/src/modules/plasmalnf/CMakeLists.txt000066400000000000000000000025431362604102500225050ustar00rootroot00000000000000find_package(ECM ${ECM_VERSION} REQUIRED NO_MODULE) # Requires a sufficiently recent Plasma framework, but also # needs a runtime support component (which we don't test for). set( lnf_ver 5.41 ) find_package( KF5Config ${lnf_ver} ) find_package( KF5Plasma ${lnf_ver} ) find_package( KF5Package ${lnf_ver} ) set_package_properties( KF5Config PROPERTIES PURPOSE "For finding default Plasma Look-and-Feel" ) set_package_properties( KF5Plasma PROPERTIES PURPOSE "For Plasma Look-and-Feel selection" ) set_package_properties( KF5Package PROPERTIES PURPOSE "For Plasma Look-and-Feel selection" ) if ( KF5Plasma_FOUND AND KF5Package_FOUND ) calamares_add_plugin( plasmalnf TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO COMPILE_DEFINITIONS ${option_defs} SOURCES PlasmaLnfViewStep.cpp PlasmaLnfPage.cpp PlasmaLnfJob.cpp ThemeWidget.cpp RESOURCES page_plasmalnf.qrc UI page_plasmalnf.ui LINK_PRIVATE_LIBRARIES calamaresui KF5::Package KF5::Plasma SHARED_LIB ) if ( KF5Config_FOUND ) target_compile_definitions(calamares_viewmodule_plasmalnf PRIVATE WITH_KCONFIG) endif() else() calamares_skip_module( "plasmalnf (missing requirements)" ) endif() calamares-3.2.20/src/modules/plasmalnf/PlasmaLnfJob.cpp000066400000000000000000000040221362604102500227530ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2017, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "PlasmaLnfJob.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" PlasmaLnfJob::PlasmaLnfJob( const QString& lnfPath, const QString& id ) : m_lnfPath( lnfPath ) , m_id( id ) { } PlasmaLnfJob::~PlasmaLnfJob() { } QString PlasmaLnfJob::prettyName() const { return tr( "Plasma Look-and-Feel Job" ); } QString PlasmaLnfJob::prettyDescription() const { return prettyName(); } QString PlasmaLnfJob::prettyStatusMessage() const { return prettyName(); } Calamares::JobResult PlasmaLnfJob::exec() { cDebug() << "Plasma Look-and-Feel Job"; auto system = CalamaresUtils::System::instance(); Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); QStringList command( { "sudo", "-E", "-H", "-u", gs->value( "username" ).toString(), m_lnfPath, "-platform", "minimal", "--resetLayout", "--apply", m_id } ); int r = system->targetEnvCall( command ); if ( r ) return Calamares::JobResult::error( tr( "Could not select KDE Plasma Look-and-Feel package" ), tr( "Could not select KDE Plasma Look-and-Feel package" ) ); return Calamares::JobResult::ok(); } calamares-3.2.20/src/modules/plasmalnf/PlasmaLnfJob.h000066400000000000000000000024771362604102500224340ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2017, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef PLASMALNFJOB_H #define PLASMALNFJOB_H #include #include #include class PlasmaLnfJob : public Calamares::Job { Q_OBJECT public: explicit PlasmaLnfJob( const QString& lnfPath, const QString& id ); virtual ~PlasmaLnfJob() override; QString prettyName() const override; QString prettyDescription() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; private: QString m_lnfPath; QString m_id; }; #endif // PLASMALNFJOB_H calamares-3.2.20/src/modules/plasmalnf/PlasmaLnfPage.cpp000066400000000000000000000127771362604102500231350ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2017-2018, Adriaan de Groot * Copyright 2019, Collabora Ltd * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "PlasmaLnfPage.h" #include "ui_page_plasmalnf.h" #include "utils/Logger.h" #include "utils/Retranslator.h" #include "Settings.h" #include #include #include ThemeInfo::ThemeInfo( const KPluginMetaData& data ) : id( data.pluginId() ) , name( data.name() ) , description( data.description() ) , widget( nullptr ) { } static ThemeInfoList plasma_themes() { ThemeInfoList packages; QList pkgs = KPackage::PackageLoader::self()->listPackages( "Plasma/LookAndFeel" ); for ( const KPluginMetaData& data : pkgs ) { if ( data.isValid() && !data.isHidden() && !data.name().isEmpty() ) { packages << ThemeInfo{ data }; } } return packages; } PlasmaLnfPage::PlasmaLnfPage( QWidget* parent ) : QWidget( parent ) , ui( new Ui::PlasmaLnfPage ) , m_showAll( false ) , m_buttonGroup( nullptr ) { ui->setupUi( this ); CALAMARES_RETRANSLATE( { ui->retranslateUi( this ); if ( Calamares::Settings::instance()->isSetupMode() ) ui->generalExplanation->setText( tr( "Please choose a look-and-feel for the KDE Plasma Desktop. " "You can also skip this step and configure the look-and-feel " "once the system is set up. Clicking on a look-and-feel " "selection will give you a live preview of that look-and-feel.") ); else ui->generalExplanation->setText( tr( "Please choose a look-and-feel for the KDE Plasma Desktop. " "You can also skip this step and configure the look-and-feel " "once the system is installed. Clicking on a look-and-feel " "selection will give you a live preview of that look-and-feel.") ); updateThemeNames(); fillUi(); } ) } void PlasmaLnfPage::setLnfPath( const QString& path ) { m_lnfPath = path; } void PlasmaLnfPage::setEnabledThemes(const ThemeInfoList& themes, bool showAll ) { m_enabledThemes = themes; if ( showAll ) { auto plasmaThemes = plasma_themes(); for ( auto& installed_theme : plasmaThemes ) if ( !m_enabledThemes.findById( installed_theme.id ) ) m_enabledThemes.append( installed_theme ); } updateThemeNames(); winnowThemes(); fillUi(); } void PlasmaLnfPage::setEnabledThemesAll() { // Don't need to set showAll=true, because we're already passing in // the complete list of installed themes. setEnabledThemes( plasma_themes(), false ); } void PlasmaLnfPage::setPreselect( const QString& id ) { m_preselect = id; if ( !m_enabledThemes.isEmpty() ) fillUi(); } void PlasmaLnfPage::updateThemeNames() { auto plasmaThemes = plasma_themes(); for ( auto& enabled_theme : m_enabledThemes ) { ThemeInfo* t = plasmaThemes.findById( enabled_theme.id ); if ( t != nullptr ) { enabled_theme.name = t->name; enabled_theme.description = t->description; } } } void PlasmaLnfPage::winnowThemes() { auto plasmaThemes = plasma_themes(); bool winnowed = true; int winnow_index = 0; while ( winnowed ) { winnowed = false; winnow_index = 0; for ( auto& enabled_theme : m_enabledThemes ) { ThemeInfo* t = plasmaThemes.findById( enabled_theme.id ); if ( t == nullptr ) { cDebug() << "Removing" << enabled_theme.id; winnowed = true; break; } ++winnow_index; } if ( winnowed ) { m_enabledThemes.removeAt( winnow_index ); } } } void PlasmaLnfPage::fillUi() { if ( m_enabledThemes.isEmpty() ) { return; } if ( !m_buttonGroup ) { m_buttonGroup = new QButtonGroup( this ); m_buttonGroup->setExclusive( true ); } int c = 1; // After the general explanation for ( auto& theme : m_enabledThemes ) { if ( !theme.widget ) { ThemeWidget* w = new ThemeWidget( theme ); m_buttonGroup->addButton( w->button() ); ui->verticalLayout->insertWidget( c, w ); connect( w, &ThemeWidget::themeSelected, this, &PlasmaLnfPage::plasmaThemeSelected); theme.widget = w; } else { theme.widget->updateThemeName( theme ); } if ( theme.id == m_preselect ) { const QSignalBlocker b( theme.widget->button() ); theme.widget->button()->setChecked( true ); } ++c; } } calamares-3.2.20/src/modules/plasmalnf/PlasmaLnfPage.h000066400000000000000000000050341362604102500225660ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2017-2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef PLASMALNFPAGE_H #define PLASMALNFPAGE_H #include #include #include #include #include #include "ThemeInfo.h" #include "ThemeWidget.h" namespace Ui { class PlasmaLnfPage; } /** @brief Page for selecting a Plasma Look-and-Feel theme. * * You must call setEnabledThemes -- either overload -- once * to get the selection widgets. Note that calling that with * an empty list will result in zero (0) selectable themes. */ class PlasmaLnfPage : public QWidget { Q_OBJECT public: explicit PlasmaLnfPage( QWidget* parent = nullptr ); void setLnfPath( const QString& path ); /** @brief enable only the listed themes. * * Shows the listed @p themes with full information (e.g. screenshot). * If @p showAll is true, then also show all installed themes * not explicitly listed (without a screenshot). */ void setEnabledThemes( const ThemeInfoList& themes, bool showAll ); /** @brief enable all installed plasma themes. */ void setEnabledThemesAll(); /** @brief set which theme is to be preselected. */ void setPreselect( const QString& id ); signals: void plasmaThemeSelected( const QString& id ); private: /** @brief Intersect the list of enabled themes with the installed ones. */ void winnowThemes(); /** @brief Get the translated names for all enabled themes. */ void updateThemeNames(); /** @brief show enabled themes in the UI. */ void fillUi(); Ui::PlasmaLnfPage* ui; QString m_lnfPath; QString m_preselect; bool m_showAll; // If true, don't winnow according to enabledThemes ThemeInfoList m_enabledThemes; QButtonGroup *m_buttonGroup; QList< ThemeWidget* > m_widgets; }; #endif //PLASMALNFPAGE_H calamares-3.2.20/src/modules/plasmalnf/PlasmaLnfViewStep.cpp000066400000000000000000000125431362604102500240160ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2017-2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "PlasmaLnfViewStep.h" #include "PlasmaLnfJob.h" #include "PlasmaLnfPage.h" #include "ThemeInfo.h" #include "utils/Logger.h" #include "utils/Variant.h" #include #include #ifdef WITH_KCONFIG #include #include #endif CALAMARES_PLUGIN_FACTORY_DEFINITION( PlasmaLnfViewStepFactory, registerPlugin(); ) static QString currentPlasmaTheme() { #ifdef WITH_KCONFIG KConfigGroup cg( KSharedConfig::openConfig( QStringLiteral( "kdeglobals" ) ), "KDE" ); return cg.readEntry( "LookAndFeelPackage", QString() ); #else cWarning() << "No KConfig support, cannot determine Plasma theme."; return QString(); #endif } PlasmaLnfViewStep::PlasmaLnfViewStep( QObject* parent ) : Calamares::ViewStep( parent ) , m_widget( new PlasmaLnfPage ) { connect( m_widget, &PlasmaLnfPage::plasmaThemeSelected, this, &PlasmaLnfViewStep::themeSelected ); emit nextStatusChanged( false ); } PlasmaLnfViewStep::~PlasmaLnfViewStep() { if ( m_widget && m_widget->parent() == nullptr ) m_widget->deleteLater(); } QString PlasmaLnfViewStep::prettyName() const { return tr( "Look-and-Feel" ); } QWidget* PlasmaLnfViewStep::widget() { return m_widget; } bool PlasmaLnfViewStep::isNextEnabled() const { return true; } bool PlasmaLnfViewStep::isBackEnabled() const { return true; } bool PlasmaLnfViewStep::isAtBeginning() const { return true; } bool PlasmaLnfViewStep::isAtEnd() const { return true; } void PlasmaLnfViewStep::onLeave() { } Calamares::JobList PlasmaLnfViewStep::jobs() const { Calamares::JobList l; cDebug() << "Creating Plasma LNF jobs .."; if ( !m_themeId.isEmpty() ) { if ( !m_lnfPath.isEmpty() ) l.append( Calamares::job_ptr( new PlasmaLnfJob( m_lnfPath, m_themeId ) ) ); else cWarning() << "no lnftool given for plasmalnf module."; } return l; } void PlasmaLnfViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { m_lnfPath = CalamaresUtils::getString( configurationMap, "lnftool" ); m_widget->setLnfPath( m_lnfPath ); if ( m_lnfPath.isEmpty() ) cWarning() << "no lnftool given for plasmalnf module."; m_liveUser = CalamaresUtils::getString( configurationMap, "liveuser" ); QString preselect = CalamaresUtils::getString( configurationMap, "preselect" ); if ( preselect == QStringLiteral( "*" ) ) preselect = currentPlasmaTheme(); if ( !preselect.isEmpty() ) m_widget->setPreselect( preselect ); bool showAll = CalamaresUtils::getBool( configurationMap, "showAll", false ); if ( configurationMap.contains( "themes" ) && configurationMap.value( "themes" ).type() == QVariant::List ) { ThemeInfoList listedThemes; auto themeList = configurationMap.value( "themes" ).toList(); // Create the ThemInfo objects for the listed themes; information // about the themes from Plasma (e.g. human-readable name and description) // are filled in by update_names() in PlasmaLnfPage. for ( const auto& i : themeList ) if ( i.type() == QVariant::Map ) { auto iv = i.toMap(); listedThemes.append( ThemeInfo( iv.value( "theme" ).toString(), iv.value( "image" ).toString() ) ); } else if ( i.type() == QVariant::String ) listedThemes.append( ThemeInfo( i.toString() ) ); if ( listedThemes.length() == 1 ) cWarning() << "only one theme enabled in plasmalnf"; m_widget->setEnabledThemes( listedThemes, showAll ); } else m_widget->setEnabledThemesAll(); // All of them } void PlasmaLnfViewStep::themeSelected( const QString& id ) { m_themeId = id; if ( m_lnfPath.isEmpty() ) { cWarning() << "no lnftool given for plasmalnf module."; return; } QProcess lnftool; if ( !m_liveUser.isEmpty() ) lnftool.start( "sudo", {"-E", "-H", "-u", m_liveUser, m_lnfPath, "--resetLayout", "--apply", id} ); else lnftool.start( m_lnfPath, {"--resetLayout", "--apply", id} ); if ( !lnftool.waitForStarted( 1000 ) ) { cWarning() << "could not start look-and-feel" << m_lnfPath; return; } if ( !lnftool.waitForFinished() ) { cWarning() << m_lnfPath << "timed out."; return; } if ( ( lnftool.exitCode() == 0 ) && ( lnftool.exitStatus() == QProcess::NormalExit ) ) cDebug() << "Plasma look-and-feel applied" << id; else cWarning() << "could not apply look-and-feel" << id; } calamares-3.2.20/src/modules/plasmalnf/PlasmaLnfViewStep.h000066400000000000000000000036651362604102500234700ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2017-2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef PLASMALNFVIEWSTEP_H #define PLASMALNFVIEWSTEP_H #include #include #include #include #include #include class PlasmaLnfPage; class PLUGINDLLEXPORT PlasmaLnfViewStep : public Calamares::ViewStep { Q_OBJECT public: explicit PlasmaLnfViewStep( QObject* parent = nullptr ); virtual ~PlasmaLnfViewStep() override; QString prettyName() const override; QWidget* widget() override; bool isNextEnabled() const override; bool isBackEnabled() const override; bool isAtBeginning() const override; bool isAtEnd() const override; void onLeave() override; Calamares::JobList jobs() const override; void setConfigurationMap( const QVariantMap& configurationMap ) override; public slots: void themeSelected( const QString& id ); private: PlasmaLnfPage* m_widget; QString m_lnfPath; // Path to the lnf tool QString m_themeId; // Id of selected theme QString m_liveUser; // Name of the live user (for OEM mode) }; CALAMARES_PLUGIN_FACTORY_DECLARATION( PlasmaLnfViewStepFactory ) #endif // PLASMALNFVIEWSTEP_H calamares-3.2.20/src/modules/plasmalnf/ThemeInfo.h000066400000000000000000000051341362604102500217730ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2017, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef PLASMALNF_THEMEINFO_H #define PLASMALNF_THEMEINFO_H #include #include class KPluginMetaData; class ThemeWidget; /** @brief describes a single plasma LnF theme. * * A theme description has an id, which is really the name of the desktop * file (e.g. org.kde.breeze.desktop), a name which is human-readable and * translated, and an optional image Page, which points to a local screenshot * of that theme. */ struct ThemeInfo { QString id; QString name; QString description; QString imagePath; ThemeWidget* widget; ThemeInfo() : widget( nullptr ) {} explicit ThemeInfo( const QString& _id ) : id( _id ) , widget( nullptr ) { } explicit ThemeInfo( const QString& _id, const QString& image ) : id( _id ) , imagePath( image ) , widget( nullptr ) {} // Defined in PlasmaLnfPage.cpp explicit ThemeInfo( const KPluginMetaData& ); bool isValid() const { return !id.isEmpty(); } } ; class ThemeInfoList : public QList< ThemeInfo > { public: /** @brief Looks for a given @p id in the list of themes, returns nullptr if not found. */ ThemeInfo* findById( const QString& id ) { for ( ThemeInfo& i : *this ) { if ( i.id == id ) return &i; } return nullptr; } /** @brief Looks for a given @p id in the list of themes, returns nullptr if not found. */ const ThemeInfo* findById( const QString& id ) const { for ( const ThemeInfo& i : *this ) { if ( i.id == id ) return &i; } return nullptr; } /** @brief Checks if a given @p id is in the list of themes. */ bool contains( const QString& id ) const { return findById( id ) != nullptr; } } ; #endif calamares-3.2.20/src/modules/plasmalnf/ThemeWidget.cpp000066400000000000000000000067401362604102500226620ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2017-2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "ThemeWidget.h" #include "ThemeInfo.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" #include "Branding.h" #include #include #include #include #include #include /** * Massage the given @p path to the most-likely * path that actually contains a screenshot. For * empty image paths, returns the QRC path for an * empty screenshot. Returns blank if the path * doesn't exist anywhere in the search paths. */ static QString _munge_imagepath( const QString& path ) { if ( path.isEmpty() ) return ":/view-preview.png"; if ( path.startsWith( '/' ) ) return path; if ( QFileInfo::exists( path ) ) return path; QFileInfo fi( QDir( Calamares::Branding::instance()->componentDirectory() ), path ); if ( fi.exists() ) return fi.absoluteFilePath(); return QString(); } ThemeWidget::ThemeWidget(const ThemeInfo& info, QWidget* parent) : QWidget( parent ) , m_id( info.id ) , m_check( new QRadioButton( info.name.isEmpty() ? info.id : info.name, parent ) ) , m_description( new QLabel( info.description, parent ) ) { const QSize image_size{ qMax(12 * CalamaresUtils::defaultFontHeight(), 120), qMax(8 * CalamaresUtils::defaultFontHeight(), 80) }; QHBoxLayout* layout = new QHBoxLayout( this ); this->setLayout( layout ); layout->addWidget( m_check, 1 ); QPixmap image( _munge_imagepath( info.imagePath ) ); if ( image.isNull() ) { // Not found or not specified, so convert the name into some (horrible, likely) // color instead. image = QPixmap( image_size ); auto hash_color = qHash( info.imagePath.isEmpty() ? info.id : info.imagePath ); cDebug() << "Theme image" << info.imagePath << "not found, hash" << hash_color; image.fill( QColor( QRgb( hash_color ) ) ); } image = image.scaled( image_size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation ); QLabel* image_label = new QLabel( this ); image_label->setPixmap( image ); image_label->setMinimumSize( image_size ); image_label->setMaximumSize( image_size ); image_label->setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ); layout->addWidget( image_label, 1 ); layout->addWidget( m_description, 3 ); connect( m_check, &QRadioButton::toggled, this, &ThemeWidget::clicked ); } void ThemeWidget::clicked( bool checked ) { if ( checked ) emit themeSelected( m_id ); } QAbstractButton* ThemeWidget::button() const { return m_check; } void ThemeWidget::updateThemeName(const ThemeInfo& info) { m_check->setText( info.name ); m_description->setText( info.description ); } calamares-3.2.20/src/modules/plasmalnf/ThemeWidget.h000066400000000000000000000025361362604102500223260ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2017, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef PLASMALNF_THEMEWIDGET_H #define PLASMALNF_THEMEWIDGET_H #include class QAbstractButton; class QLabel; class QRadioButton; struct ThemeInfo; class ThemeWidget : public QWidget { Q_OBJECT public: explicit ThemeWidget( const ThemeInfo& info, QWidget* parent = nullptr ); QAbstractButton* button() const; void updateThemeName( const ThemeInfo& info ); signals: void themeSelected( const QString& id ); public slots: void clicked( bool ); private: QString m_id; QRadioButton* m_check; QLabel* m_description; } ; #endif calamares-3.2.20/src/modules/plasmalnf/page_plasmalnf.qrc000066400000000000000000000001061362604102500234160ustar00rootroot00000000000000 view-preview.png calamares-3.2.20/src/modules/plasmalnf/page_plasmalnf.ui000066400000000000000000000020611362604102500232500ustar00rootroot00000000000000 PlasmaLnfPage 0 0 799 400 Form Placeholder true Qt::Vertical 20 40 calamares-3.2.20/src/modules/plasmalnf/plasmalnf.conf000066400000000000000000000066411362604102500225740ustar00rootroot00000000000000# The Plasma Look-and-Feel module allows selecting a Plasma # Look-and-Feel in the live- or host-system and switches the # host Plasma session immediately to the chosen LnF; it # can also write a LnF configuration to the target user / on # the target system. # # This module should be used once in a view section (to get # the UI) and once in the exec section (to apply the selection # to the target user). It should come **after** the user module # in exec, so that the target user has been created alrady. --- # Full path to the Plasma look-and-feel tool (CLI program # for querying and applying Plasma themes). If this is not # set, no LNF setting will happen. lnftool: "/usr/bin/lookandfeeltool" # For systems where the user Calamares runs as (usually root, # via either sudo or pkexec) has a clean environment, set this # to the originating username; the lnftool will be run through # "sudo -H -u " instead of directly. # # liveuser: "live" # You can limit the list of Plasma look-and-feel themes by listing ids # here. If this key is not present, all of the installed themes are listed. # If the key is present, only installed themes that are **also** included # in the list are shown (could be none!). See the *showAll* key, below, # to change that. # # Themes may be listed by id, (e.g. fluffy-bunny, below) or as a theme # and an image (e.g. breeze) which will be used to show a screenshot. # Themes with no image set at all get a "missing screenshot" image; if the # image file is not found, they get a color swatch based on the image name. # # The image may be an absolute path. If it is a relative path, though, # it is searched in the current directory and in the branding directory # (i.e. relative to the directory where your branding.desc lives). # # Valid forms of entries in the *themes* key: # - A single string (unquoted), which is the theme id # - A pair of *theme* and *image* keys, e.g. # ``` # - theme: fluffy-bunny.desktop # image: "fluffy-screenshot.png" # ``` # # The image screenshot is resized to 12x8 the current font size, with # a minimum of 120x80 pixels. This allows the screenshot to scale up # on HiDPI displays where the fonts are larger (in pixels). themes: - org.kde.fuzzy-pig.desktop - theme: org.kde.breeze.desktop image: "breeze.png" - theme: org.kde.breezedark.desktop image: "breeze-dark.png" - org.kde.fluffy-bunny.desktop # If *showAll* is true, then all installed themes are shown in the # UI for selection, even if they are not listed in *themes*. This # allows selection of all themes even while not all of them are # listed in *themes* -- which is useful to show screenshots for those # you do have a screenshot for. showAll: false # You can pre-select one of the themes; it is not applied # immediately, but its radio-button is switched on to indicate # that that is the theme (that is most likely) currently in use. # Do this only on Live images where you are reasonably sure # that the user is not going to change the theme out from under # themselves before running the installer. # # If this key is present, its value should be the id of the theme # which should be pre-selected. If absent, empty, or the pre-selected # theme is not found on the live system, no theme will be pre-selected. # # As a special setting, use "*", to try to find the currently- # selected theme by reading the Plasma configuration. This requires # KF5::Config at build- and run-time. preselect: "*" calamares-3.2.20/src/modules/plasmalnf/view-preview.png000066400000000000000000000010601362604102500230750ustar00rootroot00000000000000‰PNG  IHDRxPÒ›±‰ pHYsÄÄ•+âIDATxœíÚMª£@…áÓMCÆ‚;pê"’Áq&®Á[ˆÁÔ&dœìA—á’‘=·¹éütnsµ’ÊûL„ŠŸUJÀ ~Ø.à;DQÔ9ÿf³yÙçôËvße½^2ï|>dÞ±ü´]†åLÖuŒ1jÛV’†¡Ò4•ïû–+ŸsÜu²,SªªJUU)eY¦®ël—7:ç6Æ(Žc%I"Ïóäyž’$QÇ2ÆØ.otÎܶ­f³ÙÅøt:ýóÊ~'ÎŒsΆ¡v»ÝÅø~¿W†*²Ë¹]tš¦Ê²LÒéµ,­ëZeYZ¬Ìçö}_eYÊ£º®%ºº,Ë›ŸIÇãQ“ÉdÌ2ñQõÿ«iš~±XôMÓ\½?ô1èМ[ƒ¿¢m[E¡$ITÅ[î²_Â#|8îvî­N~õv¿~4ÌkãüîüÚjµ:»ÞZs›¦é—Ë%?“[?Ú¹÷ð¸ð­0ÿ^‹]ØÉ]ôÇî8Ïó‹Ó«wûÞu.à{á¾#çÞn·„û‰sG•yžÛ.á©8×Á8çL¿úߌæ7BK`# sIIEND®B`‚calamares-3.2.20/src/modules/plasmalnf/view-preview.svg000066400000000000000000000010721362604102500231130ustar00rootroot00000000000000 calamares-3.2.20/src/modules/plymouthcfg/000077500000000000000000000000001362604102500203255ustar00rootroot00000000000000calamares-3.2.20/src/modules/plymouthcfg/main.py000066400000000000000000000044431362604102500216300ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # === This file is part of Calamares - === # # Copyright 2016, Artoo # Copyright 2017, Alf Gaida # Copyright 2018, Gabriel Craciunescu # Copyright 2019, Adriaan de Groot # # Calamares 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. # # Calamares 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 Calamares. If not, see . import libcalamares from libcalamares.utils import debug, target_env_call import gettext _ = gettext.translation("calamares-python", localedir=libcalamares.utils.gettext_path(), languages=libcalamares.utils.gettext_languages(), fallback=True).gettext def pretty_name(): return _("Configure Plymouth theme") class PlymouthController: def __init__(self): self.__root = libcalamares.globalstorage.value('rootMountPoint') @property def root(self): return self.__root def setTheme(self): plymouth_theme = libcalamares.job.configuration["plymouth_theme"] target_env_call(["sed", "-e", 's|^.*Theme=.*|Theme=' + plymouth_theme + '|', "-i", "/etc/plymouth/plymouthd.conf"]) def detect(self): isPlymouth = target_env_call(["sh", "-c", "which plymouth"]) debug("which plymouth exit code: {!s}".format(isPlymouth)) return isPlymouth def run(self): if self.detect() == 0: if (("plymouth_theme" in libcalamares.job.configuration) and (libcalamares.job.configuration["plymouth_theme"] is not None)): self.setTheme() return None def run(): pc = PlymouthController() return pc.run() calamares-3.2.20/src/modules/plymouthcfg/module.desc000066400000000000000000000001331362604102500224470ustar00rootroot00000000000000--- type: "job" name: "plymouthcfg" interface: "python" script: "main.py" calamares-3.2.20/src/modules/plymouthcfg/plymouthcfg.conf000066400000000000000000000016331362604102500235400ustar00rootroot00000000000000# Plymouth Configuration Module # # This module can be used to setup the default plymouth theme to # be used with your distribution # # You should only use this module if the plymouth package is installed # on the build configurations of your distribution & the plymouth # theme you want to configure is installed as well. If the unpacked # filesystem configures a plymouth theme already, there is no need # to change it here. --- # Leave this commented if you want to use the default theme # shipped with your distribution configurations. Make sure that # the theme exists in the themes directory of plymouth path. # Debian / Ubuntu comes with themes "joy", "script", "softwaves", # possibly others. Look in /usr/share/plymouth/themes for more. # # Specifying a non-existent theme will leave the plymouth # configuration set to that theme. It is up to plymouth to # deal with that. plymouth_theme: spinfinity calamares-3.2.20/src/modules/preservefiles/000077500000000000000000000000001362604102500206425ustar00rootroot00000000000000calamares-3.2.20/src/modules/preservefiles/CMakeLists.txt000066400000000000000000000005231362604102500234020ustar00rootroot00000000000000include_directories( ${PROJECT_BINARY_DIR}/src/libcalamaresui ) calamares_add_plugin( preservefiles TYPE job EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES permissions.cpp PreserveFiles.cpp LINK_PRIVATE_LIBRARIES calamares # REQUIRES mount # To set the rootMountPoint SHARED_LIB EMERGENCY ) calamares-3.2.20/src/modules/preservefiles/PreserveFiles.cpp000066400000000000000000000160131362604102500241250ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "PreserveFiles.h" #include "permissions.h" #include "CalamaresVersion.h" #include "JobQueue.h" #include "GlobalStorage.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/CommandList.h" #include "utils/Logger.h" #include "utils/Units.h" #include using CalamaresUtils::operator""_MiB; QString targetPrefix() { if ( CalamaresUtils::System::instance()->doChroot() ) { Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); if ( gs && gs->contains( "rootMountPoint" ) ) { QString r = gs->value( "rootMountPoint" ).toString(); if ( !r.isEmpty() ) return r; else cDebug() << "RootMountPoint is empty"; } else { cDebug() << "No rootMountPoint defined, preserving files to '/'"; } } return QLatin1String( "/" ); } QString atReplacements( QString s ) { Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); QString root( "/" ); QString user; if ( gs && gs->contains( "rootMountPoint" ) ) root = gs->value( "rootMountPoint" ).toString(); if ( gs && gs->contains( "username" ) ) user = gs->value( "username" ).toString(); return s.replace( "@@ROOT@@", root ).replace( "@@USER@@", user ); } PreserveFiles::PreserveFiles( QObject* parent ) : Calamares::CppJob( parent ) { } PreserveFiles::~PreserveFiles() { } QString PreserveFiles::prettyName() const { return tr( "Saving files for later ..." ); } static bool copy_file( const QString& source, const QString& dest ) { QFile sourcef( source ); if ( !sourcef.open( QFile::ReadOnly ) ) { cWarning() << "Could not read" << source; return false; } QFile destf( dest ); if ( !destf.open( QFile::WriteOnly ) ) { sourcef.close(); cWarning() << "Could not open" << destf.fileName() << "for writing; could not copy" << source; return false; } QByteArray b; do { b = sourcef.read( 1_MiB ); destf.write( b ); } while ( b.count() > 0 ); sourcef.close(); destf.close(); return true; } Calamares::JobResult PreserveFiles::exec() { if ( m_items.isEmpty() ) return Calamares::JobResult::error( tr( "No files configured to save for later." ) ); QString prefix = targetPrefix(); if ( !prefix.endsWith( '/' ) ) prefix.append( '/' ); int count = 0; for ( const auto& it : m_items ) { QString source = it.source; QString bare_dest = atReplacements( it.dest ); QString dest = prefix + bare_dest; if ( it.type == ItemType::Log ) source = Logger::logFile(); if ( it.type == ItemType::Config ) { if ( Calamares::JobQueue::instance()->globalStorage()->save( dest ) ) cWarning() << "Could not write config for" << dest; else ++count; } else if ( source.isEmpty() ) cWarning() << "Skipping unnamed source file for" << dest; else { if ( copy_file( source, dest ) ) { if ( it.perm.isValid() ) { auto s_p = CalamaresUtils::System::instance(); int r; r = s_p->targetEnvCall( QStringList{ "chown", it.perm.username(), bare_dest } ); if ( r ) cWarning() << "Could not chown target" << bare_dest; r = s_p->targetEnvCall( QStringList{ "chgrp", it.perm.group(), bare_dest } ); if ( r ) cWarning() << "Could not chgrp target" << bare_dest; r = s_p->targetEnvCall( QStringList{ "chmod", it.perm.octal(), bare_dest } ); if ( r ) cWarning() << "Could not chmod target" << bare_dest; } ++count; } } } return count == m_items.count() ? Calamares::JobResult::ok() : Calamares::JobResult::error( tr( "Not all of the configured files could be preserved." ) ); } void PreserveFiles::setConfigurationMap(const QVariantMap& configurationMap) { auto files = configurationMap[ "files" ]; if ( !files.isValid() ) { cDebug() << "No 'files' key for preservefiles."; return; } if ( files.type() != QVariant::List ) { cDebug() << "Configuration key 'files' is not a list for preservefiles."; return; } QString defaultPermissions = configurationMap[ "perm" ].toString(); if ( defaultPermissions.isEmpty() ) defaultPermissions = QStringLiteral( "root:root:0400" ); QVariantList l = files.toList(); unsigned int c = 0; for ( const auto& li : l ) { if ( li.type() == QVariant::String ) { QString filename = li.toString(); if ( !filename.isEmpty() ) m_items.append( Item{ filename, filename, Permissions( defaultPermissions ), ItemType::Path } ); else cDebug() << "Empty filename for preservefiles, item" << c; } else if ( li.type() == QVariant::Map ) { const auto map = li.toMap(); QString dest = map[ "dest" ].toString(); QString from = map[ "from" ].toString(); ItemType t = ( from == "log" ) ? ItemType::Log : ( from == "config" ) ? ItemType::Config : ItemType::None; QString perm = map[ "perm" ].toString(); if ( perm.isEmpty() ) perm = defaultPermissions; if ( dest.isEmpty() ) { cDebug() << "Empty dest for preservefiles, item" << c; } else if ( t == ItemType::None ) { cDebug() << "Invalid type for preservefiles, item" << c; } else { m_items.append( Item{ QString(), dest, Permissions( perm ), t } ); } } else cDebug() << "Invalid type for preservefiles, item" << c; ++c; } } CALAMARES_PLUGIN_FACTORY_DEFINITION( PreserveFilesFactory, registerPlugin(); ) calamares-3.2.20/src/modules/preservefiles/PreserveFiles.h000066400000000000000000000033101362604102500235660ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef PRESERVEFILES_H #define PRESERVEFILES_H #include #include #include #include "CppJob.h" #include "DllMacro.h" #include "utils/PluginFactory.h" #include "permissions.h" class PLUGINDLLEXPORT PreserveFiles : public Calamares::CppJob { Q_OBJECT enum class ItemType { None, Path, Log, Config } ; struct Item { QString source; QString dest; Permissions perm; ItemType type; } ; using ItemList = QList< Item >; public: explicit PreserveFiles( QObject* parent = nullptr ); virtual ~PreserveFiles() override; QString prettyName() const override; Calamares::JobResult exec() override; void setConfigurationMap( const QVariantMap& configurationMap ) override; private: ItemList m_items; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( PreserveFilesFactory ) #endif // PRESERVEFILES_H calamares-3.2.20/src/modules/preservefiles/permissions.cpp000066400000000000000000000033151362604102500237230ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright (C) 2018 Scott Harvey * * 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 . * */ #include #include #include "permissions.h" Permissions::Permissions() : m_username(), m_group(), m_valid(false), m_value(0) { } Permissions::Permissions(QString p) : Permissions() { parsePermissions(p); } void Permissions::parsePermissions(const QString& p) { QStringList segments = p.split(":"); if (segments.length() != 3) { m_valid = false; return; } if (segments[0].isEmpty() || segments[1].isEmpty()) { m_valid = false; return; } bool ok; int octal = segments[2].toInt(&ok, 8); if (!ok || octal == 0) { m_valid = false; return; } else { m_value = octal; } // We have exactly three segments and the third is valid octal, // so we can declare the string valid and set the user and group names m_valid = true; m_username = segments[0]; m_group = segments[1]; return; } calamares-3.2.20/src/modules/preservefiles/permissions.h000066400000000000000000000034541362604102500233740ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright (C) 2018 Scott Harvey * * 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 . * */ #ifndef PERMISSIONS_H #define PERMISSIONS_H #include /** * @brief The Permissions class takes a QString @p in the form of * ::, checks it for validity, and makes the three * components available indivdually. */ class Permissions { public: /** @brief Constructor * * Splits the string @p at the colon (":") into separate elements for * , , and (permissions), where is returned as * an **octal** integer. */ Permissions(QString p); /** @brief Default constructor of an invalid Permissions. */ Permissions(); bool isValid() const { return m_valid; } QString username() const { return m_username; } QString group() const { return m_group; } int value() const { return m_value; } QString octal() const { return QString::number( m_value, 8 ); } private: void parsePermissions(QString const &p); QString m_username; QString m_group; bool m_valid; int m_value; }; #endif // PERMISSIONS_H calamares-3.2.20/src/modules/preservefiles/preservefiles.conf000066400000000000000000000042651362604102500243760ustar00rootroot00000000000000# Configuration for the preserve-files job # # The *files* key contains a list of files to preserve. Each element of # the list should have one of these forms: # # - an absolute path (probably within the host system). This will be preserved # as the same path within the target system (chroot). If, globally, dontChroot # is true, then these items are ignored (since the destination is the same # as the source). # - a map with a *dest* key. The *dest* value is a path interpreted in the # target system (if dontChroot is true, in the host system). Relative paths # are not recommended. There are three possible other keys in the map: # - *from*, which must have one of the values, below; it is used to # preserve files whose pathname is known to Calamares internally. # - *src*, to refer to a path interpreted in the host system. Relative # paths are not recommended, and are interpreted relative to where # Calamares is being run. # - *perm*, is a colon-separated tuple of :: # where is in octal (e.g. 4777 for wide-open, 0400 for read-only # by owner). If set, the file's ownership and permissions are set to # those values within the target system; if not set, no permissions # are changed. # Only one of the two source keys (either *from* or *src*) may be set. # # The target filename is modified as follows: # - `@@ROOT@@` is replaced by the path to the target root (may be /) # - `@@USER@@` is replaced by the username entered by on the user # page (may be empty, for instance if no user page is enabled) # # Special values for the key *from* are: # - *log*, for the complete log file (up to the moment the preservefiles # module is run), # - *config*, for the Calamares configuration file # - *globals*, for a JSON dump of the contents of global storage --- files: - /etc/oem-information - from: log dest: /root/install.log perm: root:wheel:644 - from: config dest: /root/install.cfg perm: root:wheel:400 # The *perm* key contains a default value to apply to all files listed # above that do not have a *perm* key of their own. If not set, # root:root:0400 (highly restrictive) is used. # # perm: "root:root:0400" calamares-3.2.20/src/modules/rawfs/000077500000000000000000000000001362604102500171065ustar00rootroot00000000000000calamares-3.2.20/src/modules/rawfs/main.py000066400000000000000000000152401362604102500204060ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # === This file is part of Calamares - === # # Copyright 2019, Collabora Ltd # # Calamares 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. # # Calamares 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 Calamares. If not, see . import libcalamares import os import stat import subprocess from time import gmtime, strftime, sleep from math import gcd import gettext _ = gettext.translation("calamares-python", localedir=libcalamares.utils.gettext_path(), languages=libcalamares.utils.gettext_languages(), fallback=True).gettext def pretty_name(): return _("Installing data.") def lcm(a, b): """ Computes the Least Common Multiple of 2 numbers """ return a * b / gcd(a, b) def get_device_size(device): """ Returns a filesystem's total size and block size in bytes. For block devices, block size is the device's block size. For other files (fs images), block size is 1 byte. @param device: str Absolute path to the device or filesystem image. @return: tuple(int, int) The filesystem's size and its block size. """ mode = os.stat(device).st_mode if stat.S_ISBLK(mode): basedevice = "" partition = os.path.basename(device) tmp = partition while len(tmp) > 0: tmp = tmp[:-1] if os.path.exists("/sys/block/" + tmp): basedevice = tmp break # Get device block size file = open("/sys/block/" + basedevice + "/queue/hw_sector_size") blocksize = int(file.readline()) file.close() # Get partition size file = open("/sys/block/" + basedevice + "/" + partition + "/size") size = int(file.readline()) * blocksize file.close() else: size = os.path.getsize(device) blocksize = 1 return size, blocksize class RawFSLowSpaceError(Exception): pass class RawFSItem: __slots__ = ['source', 'destination', 'filesystem', 'resize'] def copy(self, current=0, total=1): """ Copies a raw filesystem on a disk partition, and grow it to the full destination partition's size if required. @param current: int The index of the current item in the filesystems list (used for progress reporting) @param total: int The number of items in the filesystems list (used for progress reporting) """ count = 0 libcalamares.utils.debug("Copying {} to {}".format(self.source, self.destination)) srcsize, srcblksize = get_device_size(self.source) destsize, destblksize = get_device_size(self.destination) if destsize < srcsize: raise RawFSLowSpaceError return # Compute transfer block size (100x the LCM of the block sizes seems a good fit) blksize = int(100 * lcm(srcblksize, destblksize)) # Execute copy src = open(self.source, "rb") dest = open(self.destination, "wb") buffer = src.read(blksize) while len(buffer) > 0: dest.write(buffer) count += len(buffer) # Compute job progress progress = ((count / srcsize) + (current)) / total libcalamares.job.setprogress(progress) # Read next data block buffer = src.read(blksize) src.close() dest.close() if self.resize: if "ext" in self.filesystem: libcalamares.utils.debug("Resizing filesystem on {}".format(self.destination)) subprocess.run(["e2fsck", "-f", "-y", self.destination]) subprocess.run(["resize2fs", self.destination]) def __init__(self, config, device, fs): libcalamares.utils.debug("Adding an entry for raw copy of {} to {}".format( config["source"], device)) self.source = os.path.realpath(config["source"]) # If source is a mount point, look for the actual device mounted on it if os.path.ismount(self.source): procmounts = open("/proc/mounts", "r") for line in procmounts: if self.source in line.split(): self.source = line.split()[0] break self.destination = device self.filesystem = fs try: self.resize = bool(config["resize"]) except KeyError: self.resize = False def update_global_storage(item, gs): for partition in gs: if partition["device"] == item.destination: ret = subprocess.run(["blkid", "-s", "UUID", "-o", "value", item.destination], capture_output=True, text=True) if ret.returncode == 0: libcalamares.utils.debug("Setting {} UUID to {}".format(item.destination, ret.stdout.rstrip())) gs[gs.index(partition)]["uuid"] = ret.stdout.rstrip() gs[gs.index(partition)]["source"] = item.source libcalamares.globalstorage.remove("partitions") libcalamares.globalstorage.insert("partitions", gs) def run(): """Raw filesystem copy module""" filesystems = list() partitions = libcalamares.globalstorage.value("partitions") if not partitions: libcalamares.utils.warning("partitions is empty, {!s}".format(partitions)) return (_("Configuration Error"), _("No partitions are defined for
{!s}
to use." ).format("rawfs")) for partition in partitions: if partition["mountPoint"]: for src in libcalamares.job.configuration["targets"]: if src["mountPoint"] == partition["mountPoint"]: filesystems.append(RawFSItem(src, partition["device"], partition["fs"])) for item in filesystems: try: item.copy(filesystems.index(item), len(filesystems)) except RawFSLowSpaceError: return ("Not enough free space", "{} partition is too small to copy {} on it".format(item.destination, item.source)) update_global_storage(item, partitions) return None calamares-3.2.20/src/modules/rawfs/module.desc000066400000000000000000000002321362604102500212300ustar00rootroot00000000000000# Module metadata file for block-copy jobmodule # Syntax is YAML 1.2 --- type: "job" name: "rawfs" interface: "python" script: "main.py" calamares-3.2.20/src/modules/rawfs/rawfs.conf000066400000000000000000000017171362604102500211050ustar00rootroot00000000000000# Configuration for the rawfs module: raw filesystem copy to a block device --- # To apply a custom partition layout, it has to be defined as a list of targets. # # For each target, the following attributes must be defined: # * mountPoint: The mount point of the destination device on the installed system # The corresponding block device will automatically be identified and used as the # destination for the operation # * source: The source filesystem; it can be the mount point of a locally (on the # live system) mounted filesystem, a path to a disk image, or a block device # * resize (optional): Expand the destination filesystem to fill the whole # partition at the end of the operation; this works only with ext filesystems # for now targets: - mountPoint: / source: / - mountPoint: /home source: /images/home.img resize: true - mountPoint: /data source: /dev/mmcblk0p3 calamares-3.2.20/src/modules/removeuser/000077500000000000000000000000001362604102500201605ustar00rootroot00000000000000calamares-3.2.20/src/modules/removeuser/main.py000066400000000000000000000034201362604102500214550ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # === This file is part of Calamares - === # # Copyright 2015, Teo Mrnjavac # Copyright 2017. Alf Gaida # Copyright 2019, Adriaan de Groot # # Calamares 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. # # Calamares 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 Calamares. If not, see . import subprocess import libcalamares import gettext _ = gettext.translation("calamares-python", localedir=libcalamares.utils.gettext_path(), languages=libcalamares.utils.gettext_languages(), fallback=True).gettext def pretty_name(): return _("Remove live user from target system") def run(): """ Remove live user from target system """ username = libcalamares.job.configuration["username"] try: libcalamares.utils.check_target_env_call(["userdel", "-f", "-r", username]) except subprocess.CalledProcessError as e: libcalamares.utils.debug("Cannot remove user. " "'userdel' terminated with exit code " "{}.".format(e.returncode)) return None calamares-3.2.20/src/modules/removeuser/module.desc000066400000000000000000000001511362604102500223020ustar00rootroot00000000000000--- type: "job" name: "removeuser" interface: "python" requires: [] script: "main.py" calamares-3.2.20/src/modules/removeuser/removeuser.conf000066400000000000000000000003261362604102500232240ustar00rootroot00000000000000# Removes a single user (with userdel) from the system. # This is typically used in OEM setups or if the live user # spills into the target system. --- # Username in the target system to be removed. username: live calamares-3.2.20/src/modules/services-openrc/000077500000000000000000000000001362604102500210735ustar00rootroot00000000000000calamares-3.2.20/src/modules/services-openrc/main.py000066400000000000000000000130221362604102500223670ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # === This file is part of Calamares - === # # Copyright 2016, Artoo # Copyright 2017, Philip Müller # Copyright 2018, Artoo # Copyright 2018-2019, Adriaan de Groot # # Calamares 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. # # Calamares 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 Calamares. If not, see . import libcalamares from libcalamares.utils import target_env_call, warning from os.path import exists, join import gettext _ = gettext.translation("calamares-python", localedir=libcalamares.utils.gettext_path(), languages=libcalamares.utils.gettext_languages(), fallback=True).gettext def pretty_name(): return _("Configure OpenRC services") class OpenrcController: """ This is the openrc service controller. All of its state comes from global storage and the job configuration at initialization time. """ def __init__(self): self.root = libcalamares.globalstorage.value('rootMountPoint') # Translate the entries in the config to the actions passed to rc-config self.services = dict() self.services["add"] = libcalamares.job.configuration.get('services', []) self.services["del"] = libcalamares.job.configuration.get('disable', []) self.initdDir = libcalamares.job.configuration['initdDir'] self.runlevelsDir = libcalamares.job.configuration['runlevelsDir'] def make_failure_description(self, state, name, runlevel): """ Returns a generic "could not " failure message, specialized for the action @p state and the specific service @p name in @p runlevel. """ if state == "add": description = _("Cannot add service {name!s} to run-level {level!s}.") elif state == "del": description = _("Cannot remove service {name!s} from run-level {level!s}.") else: description = _("Unknown service-action {arg!s} for service {name!s} in run-level {level!s}.") return description.format(arg=state, name=name, level=runlevel) def update(self, state): """ Call rc-update for each service listed in services for the given @p state. rc-update is called with @p state as the command as well. """ for svc in self.services.get(state, []): if isinstance(svc, str): name = svc runlevel = "default" mandatory = False else: name = svc["name"] runlevel = svc.get("runlevel", "default") mandatory = svc.get("mandatory", False) service_path = self.root + self.initdDir + "/" + name runlevel_path = self.root + self.runlevelsDir + "/" + runlevel if exists(service_path): if exists(runlevel_path): ec = target_env_call(["rc-update", state, name, runlevel]) if ec != 0: warning("Cannot {} service {} to {}".format(state, name, runlevel)) warning("rc-update returned error code {!s}".format(ec)) if mandatory: title = _("Cannot modify service") diagnostic = _("rc-update {arg!s} call in chroot returned error code {num!s}.").format(arg=state, num=ec) return (title, self.make_failure_description(state, name, runlevel) + " " + diagnostic ) else: warning("Target runlevel {} does not exist for {}.".format(runlevel, name)) if mandatory: title = _("Target runlevel does not exist") diagnostic = _("The path for runlevel {level!s} is {path!s}, which does not exist.").format(level=runlevel, path=runlevel_path) return (title, self.make_failure_description(state, name, runlevel) + " " + diagnostic ) else: warning("Target service {} does not exist in {}.".format(name, self.initdDir)) if mandatory: title = _("Target service does not exist") diagnostic = _("The path for service {name!s} is {path!s}, which does not exist.").format(name=name, path=service_path) return (title, self.make_failure_description(state, name, runlevel) + " " + diagnostic ) def run(self): """Run the controller """ for state in ("add", "del"): r = self.update(state) if r is not None: return r def run(): """ Setup services """ return OpenrcController().run() calamares-3.2.20/src/modules/services-openrc/module.desc000066400000000000000000000001371362604102500232210ustar00rootroot00000000000000--- type: "job" name: "services-openrc" interface: "python" script: "main.py" calamares-3.2.20/src/modules/services-openrc/services-openrc.conf000066400000000000000000000030131362604102500250460ustar00rootroot00000000000000# openrc services module to modify service runlevels via rc-update in the chroot # # Services can be added (to any runlevel, or multiple runlevels) or deleted. # Handle del with care and only use it if absolutely necessary. # # if a service is listed in the conf but is not present/detected on the target system, # or a runlevel does not exist, it will be ignored and skipped; a warning is logged. # --- # initdDir: holds the openrc service directory location initdDir: /etc/init.d # runlevelsDir: holds the runlevels directory location runlevelsDir: /etc/runlevels # services: a list of entries to **enable** # disable: a list of entries to **disable** # # Each entry has three fields: # - name: the service name # - (optional) runlevel: can hold any runlevel present on the target # system; if no runlevel is provided, "default" is assumed. # - (optional) mandatory: if set to true, a failure to modify # the service will result in installation failure, rather than just # a warning. The default is false. # # an entry may also be a single string, which is interpreted # as the name field (runlevel "default" is assumed then, and not-mandatory). # # # Example services and disable settings: # # - add foo1 to default, but it must succeed # # - add foo2 to nonetwork # # - remove foo3 from default # # - remove foo4 from default # services: # - name: foo1 # mandatory: true # - name: foo2 # runlevel: nonetwork # disable: # - name: foo3 # runlevel: default # - foo4 services: [] disable: [] calamares-3.2.20/src/modules/services-systemd/000077500000000000000000000000001362604102500212755ustar00rootroot00000000000000calamares-3.2.20/src/modules/services-systemd/main.py000066400000000000000000000107011362604102500225720ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # === This file is part of Calamares - === # # Copyright 2014, Philip Müller # Copyright 2014, Teo Mrnjavac # Copyright 2017, Alf Gaida # Copyright 2018-2019, Adriaan de Groot # # Calamares 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. # # Calamares 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 Calamares. If not, see . import libcalamares import gettext _ = gettext.translation("calamares-python", localedir=libcalamares.utils.gettext_path(), languages=libcalamares.utils.gettext_languages(), fallback=True).gettext def pretty_name(): return _("Configure systemd services") def systemctl(targets, command, suffix): """ For each entry in @p targets, run "systemctl ", where is the entry's name plus the given @p suffix. (No dot is added between name and suffix; suffix may be empty) Returns a failure message, or None if this was successful. Services that are not mandatory have their failures suppressed silently. """ for svc in targets: if isinstance(svc, str): name = svc mandatory = False else: name = svc["name"] mandatory = svc.get("mandatory", False) ec = libcalamares.utils.target_env_call( ['systemctl', command, "{}{}".format(name, suffix)] ) if ec != 0: libcalamares.utils.warning( "Cannot {} systemd {} {}".format(command, suffix, name) ) libcalamares.utils.warning( "systemctl {} call in chroot returned error code {}".format(command, ec) ) if mandatory: title = _("Cannot modify service") diagnostic = _("systemctl {arg!s} call in chroot returned error code {num!s}.").format(arg=command, num=ec) if command == "enable" and suffix == ".service": description = _("Cannot enable systemd service {name!s}.") elif command == "enable" and suffix == ".target": description = _("Cannot enable systemd target {name!s}.") elif command == "disable" and suffix == ".service": description = _("Cannot enable systemd service {name!s}.") elif command == "disable" and suffix == ".target": description = _("Cannot disable systemd target {name!s}.") elif command == "mask": description = _("Cannot mask systemd unit {name!s}.") else: description = _("Unknown systemd commands {command!s} and {suffix!s} for unit {name!s}.") return (title, description.format(name=name, command=command, suffix=suffix) + " " + diagnostic ) return None def run(): """ Setup systemd services """ cfg = libcalamares.job.configuration # note that the "systemctl enable" and "systemctl disable" commands used # here will work in a chroot; in fact, they are the only systemctl commands # that support that, see: # http://0pointer.de/blog/projects/changing-roots.html r = systemctl(cfg.get("services", []), "enable", ".service") if r is not None: return r r = systemctl(cfg.get("targets", []), "enable", ".target") if r is not None: return r r = systemctl(cfg.get("disable", []), "disable", ".service") if r is not None: return r r = systemctl(cfg.get("disable-targets", []), "disable", ".target") if r is not None: return r r = systemctl(cfg.get("mask", []), "mask", "") if r is not None: return r return None calamares-3.2.20/src/modules/services-systemd/module.desc000066400000000000000000000001571362604102500234250ustar00rootroot00000000000000--- type: "job" name: "services-systemd" interface: "python" requires: [] script: "main.py" calamares-3.2.20/src/modules/services-systemd/services-systemd.conf000066400000000000000000000043641362604102500254640ustar00rootroot00000000000000# Systemd services manipulation. # # This module can enable services and targets for systemd # (if packaging doesn't already do that). It can calso # disable services (but not targets). # # First, services are enabled; then targets; then services # are disabled -- this order of operations is fixed. --- # There are three configuration keys for this module: # *services*, *targets* and *disable*. The value of each # key is a list of entries. Each entry has two keys: # - *name* is the (string) name of the service or target that is being # changed. Use quotes. Don't include ".target" or ".service" # in the name. # - *mandatory* is a boolean option, which states whether the change # must be done successfully. If systemd reports an error while changing # a mandatory entry, the installation will fail. When mandatory is false, # errors for that entry (service or target) are ignored. If mandatory # is not specified, the default is false. # # An entry may also be given as a single string, which is then # interpreted as the name of the service. In this case, mandatory # is also set to the default of false. # # Use [] to express an empty list. # # This example enables NetworkManager (and fails if it can't), # # disables cups (and ignores failure). Then it enables the # # graphical target (e.g. so that SDDM runs for login), and # # finally disables pacman-init (an ArchLinux-only service). # # # # Enables .service # services: # - name: "NetworkManager" # mandatory: true # - name: "cups" # mandatory: false # # # Enables .target # targets: # - name: "graphical" # mandatory: true # # # Disables .service # disable: # - name: "pacman-init" # mandatory: false # # # Disables .target # # .. this shows how to use just the name # disable-targets: # - graphical # # # Masks (stronger version of disable). This section # # is unusual because you **must** include the suffix # # (e.g. ".service") as part of the name, so, e.g. to mask # # NetworkManager (rather than just disable it) you must # # specify "NetworkManager.service" as name. # mask: # - name: "NetworkManager.service" # - mandatory: true # By default, no changes are made. services: [] targets: [] disable: [] disable-targets: [] mask: [] calamares-3.2.20/src/modules/shellprocess/000077500000000000000000000000001362604102500204725ustar00rootroot00000000000000calamares-3.2.20/src/modules/shellprocess/CMakeLists.txt000066400000000000000000000004431362604102500232330ustar00rootroot00000000000000calamares_add_plugin( shellprocess TYPE job EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES ShellProcessJob.cpp LINK_PRIVATE_LIBRARIES calamares SHARED_LIB ) calamares_add_test( shellprocesstest SOURCES Tests.cpp LIBRARIES yamlcpp ) calamares-3.2.20/src/modules/shellprocess/ShellProcessJob.cpp000066400000000000000000000046431362604102500242460ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "ShellProcessJob.h" #include "CalamaresVersion.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/CommandList.h" #include "utils/Logger.h" #include "utils/Variant.h" #include #include #include ShellProcessJob::ShellProcessJob( QObject* parent ) : Calamares::CppJob( parent ) , m_commands( nullptr ) { } ShellProcessJob::~ShellProcessJob() {} QString ShellProcessJob::prettyName() const { return tr( "Shell Processes Job" ); } Calamares::JobResult ShellProcessJob::exec() { if ( !m_commands || m_commands->isEmpty() ) { cWarning() << "No commands to execute" << moduleInstanceKey(); return Calamares::JobResult::ok(); } return m_commands->run(); } void ShellProcessJob::setConfigurationMap( const QVariantMap& configurationMap ) { bool dontChroot = CalamaresUtils::getBool( configurationMap, "dontChroot", false ); qint64 timeout = CalamaresUtils::getInteger( configurationMap, "timeout", 10 ); if ( timeout < 1 ) { timeout = 10; } if ( configurationMap.contains( "script" ) ) { m_commands = std::make_unique< CalamaresUtils::CommandList >( configurationMap.value( "script" ), !dontChroot, std::chrono::seconds( timeout ) ); if ( m_commands->isEmpty() ) { cDebug() << "ShellProcessJob: \"script\" contains no commands for" << moduleInstanceKey(); } } else { cWarning() << "No script given for ShellProcessJob" << moduleInstanceKey(); } } CALAMARES_PLUGIN_FACTORY_DEFINITION( ShellProcessJobFactory, registerPlugin< ShellProcessJob >(); ) calamares-3.2.20/src/modules/shellprocess/ShellProcessJob.h000066400000000000000000000030051362604102500237020ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef SHELLPROCESSJOB_H #define SHELLPROCESSJOB_H #include "CppJob.h" #include "DllMacro.h" #include "utils/CommandList.h" #include "utils/PluginFactory.h" #include #include #include class PLUGINDLLEXPORT ShellProcessJob : public Calamares::CppJob { Q_OBJECT public: explicit ShellProcessJob( QObject* parent = nullptr ); virtual ~ShellProcessJob() override; QString prettyName() const override; Calamares::JobResult exec() override; void setConfigurationMap( const QVariantMap& configurationMap ) override; private: std::unique_ptr< CalamaresUtils::CommandList > m_commands; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( ShellProcessJobFactory ) #endif // SHELLPROCESSJOB_H calamares-3.2.20/src/modules/shellprocess/Tests.cpp000066400000000000000000000143541362604102500223070ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2017-2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "Tests.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "Settings.h" #include "utils/CommandList.h" #include "utils/Logger.h" #include "utils/Yaml.h" #include #include #include QTEST_GUILESS_MAIN( ShellProcessTests ) using CommandList = CalamaresUtils::CommandList; using std::operator""s; ShellProcessTests::ShellProcessTests() {} ShellProcessTests::~ShellProcessTests() {} void ShellProcessTests::initTestCase() { } void ShellProcessTests::testProcessListSampleConfig() { YAML::Node doc; QStringList dirs { "src/modules/shellprocess", "." }; for ( const auto& dir : dirs ) { QString filename = dir + "/shellprocess.conf"; if ( QFileInfo::exists( filename ) ) { doc = YAML::LoadFile( filename.toStdString() ); break; } } CommandList cl( CalamaresUtils::yamlMapToVariant( doc ).toMap().value( "script" ) ); QVERIFY( !cl.isEmpty() ); QCOMPARE( cl.count(), 3 ); QCOMPARE( cl.at( 0 ).timeout(), CalamaresUtils::CommandLine::TimeoutNotSet() ); QCOMPARE( cl.at( 2 ).timeout(), 3600s ); // slowloris } void ShellProcessTests::testProcessListFromList() { YAML::Node doc = YAML::Load( R"(--- script: - "ls /tmp" - "ls /nonexistent" - "/bin/false" )" ); CommandList cl( CalamaresUtils::yamlMapToVariant( doc ).toMap().value( "script" ) ); QVERIFY( !cl.isEmpty() ); QCOMPARE( cl.count(), 3 ); // Contains 1 bad element doc = YAML::Load( R"(--- script: - "ls /tmp" - false - "ls /nonexistent" )" ); CommandList cl1( CalamaresUtils::yamlMapToVariant( doc ).toMap().value( "script" ) ); QVERIFY( !cl1.isEmpty() ); QCOMPARE( cl1.count(), 2 ); // One element ignored } void ShellProcessTests::testProcessListFromString() { YAML::Node doc = YAML::Load( R"(--- script: "ls /tmp" )" ); CommandList cl( CalamaresUtils::yamlMapToVariant( doc ).toMap().value( "script" ) ); QVERIFY( !cl.isEmpty() ); QCOMPARE( cl.count(), 1 ); QCOMPARE( cl.at( 0 ).timeout(), 10s ); QCOMPARE( cl.at( 0 ).command(), QStringLiteral( "ls /tmp" ) ); // Not a string doc = YAML::Load( R"(--- script: false )" ); CommandList cl1( CalamaresUtils::yamlMapToVariant( doc ).toMap().value( "script" ) ); QVERIFY( cl1.isEmpty() ); QCOMPARE( cl1.count(), 0 ); } void ShellProcessTests::testProcessFromObject() { YAML::Node doc = YAML::Load( R"(--- script: command: "ls /tmp" timeout: 20 )" ); CommandList cl( CalamaresUtils::yamlMapToVariant( doc ).toMap().value( "script" ) ); QVERIFY( !cl.isEmpty() ); QCOMPARE( cl.count(), 1 ); QCOMPARE( cl.at( 0 ).timeout(), 20s ); QCOMPARE( cl.at( 0 ).command(), QStringLiteral( "ls /tmp" ) ); } void ShellProcessTests::testProcessListFromObject() { YAML::Node doc = YAML::Load( R"(--- script: - command: "ls /tmp" timeout: 12 - "-/bin/false" )" ); CommandList cl( CalamaresUtils::yamlMapToVariant( doc ).toMap().value( "script" ) ); QVERIFY( !cl.isEmpty() ); QCOMPARE( cl.count(), 2 ); QCOMPARE( cl.at( 0 ).timeout(), 12s ); QCOMPARE( cl.at( 0 ).command(), QStringLiteral( "ls /tmp" ) ); QCOMPARE( cl.at( 1 ).timeout(), CalamaresUtils::CommandLine::TimeoutNotSet() ); // not set } void ShellProcessTests::testRootSubstitution() { YAML::Node doc = YAML::Load( R"(--- script: - "ls /tmp" )" ); QVariant plainScript = CalamaresUtils::yamlMapToVariant( doc ).toMap().value( "script" ); QVariant rootScript = CalamaresUtils::yamlMapToVariant( YAML::Load( R"(--- script: - "ls @@ROOT@@" )" ) ) .toMap() .value( "script" ); QVariant userScript = CalamaresUtils::yamlMapToVariant( YAML::Load( R"(--- script: - mktemp -d @@ROOT@@/calatestXXXXXXXX - "chown @@USER@@ @@ROOT@@/calatest*" - rm -rf @@ROOT@@/calatest* )" ) ) .toMap() .value( "script" ); if ( !Calamares::JobQueue::instance() ) (void)new Calamares::JobQueue( nullptr ); if ( !Calamares::Settings::instance() ) (void)Calamares::Settings::init( QString() ); Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); QVERIFY( gs != nullptr ); qDebug() << "Expect WARNING, ERROR, WARNING"; // Doesn't use @@ROOT@@, so no failures QVERIFY( bool( CommandList( plainScript, false, 10s ).run() ) ); // Doesn't use @@ROOT@@, but does chroot, so fails QVERIFY( !bool( CommandList( plainScript, true, 10s ).run() ) ); // Does use @@ROOT@@, which is not set, so fails QVERIFY( !bool( CommandList( rootScript, false, 10s ).run() ) ); // .. fails for two reasons QVERIFY( !bool( CommandList( rootScript, true, 10s ).run() ) ); gs->insert( "rootMountPoint", "/tmp" ); // Now that the root is set, two variants work .. still can't // chroot, unless the rootMountPoint contains a full system, // *and* we're allowed to chroot (ie. running tests as root). qDebug() << "Expect no output."; QVERIFY( bool( CommandList( plainScript, false, 10s ).run() ) ); QVERIFY( bool( CommandList( rootScript, false, 10s ).run() ) ); qDebug() << "Expect ERROR"; // But no user set yet QVERIFY( !bool( CommandList( userScript, false, 10s ).run() ) ); // Now play dangerous games with shell expansion gs->insert( "username", "`id -u`" ); QVERIFY( bool( CommandList( userScript, false, 10s ).run() ) ); } calamares-3.2.20/src/modules/shellprocess/Tests.h000066400000000000000000000027221362604102500217500ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef TESTS_H #define TESTS_H #include class ShellProcessTests : public QObject { Q_OBJECT public: ShellProcessTests(); ~ShellProcessTests() override; private Q_SLOTS: void initTestCase(); // Check the sample config file is processed correctly void testProcessListSampleConfig(); // Create from a YAML list void testProcessListFromList(); // Create from a simple YAML string void testProcessListFromString(); // Create from a single complex YAML void testProcessFromObject(); // Create from a complex YAML list void testProcessListFromObject(); // Check @@ROOT@@ substitution void testRootSubstitution(); }; #endif calamares-3.2.20/src/modules/shellprocess/shellprocess.conf000066400000000000000000000027471362604102500240610ustar00rootroot00000000000000# Configuration for the shell process job. # # Executes a list of commands found under the key *script*. # If the top-level key *dontChroot* is true, then the commands # are executed in the context of the live system, otherwise # in the context of the target system. In all of the commands, # the following substitutions will take place: # - `@@ROOT@@` is replaced by the root mount point of the **target** # system from the point of view of the command (for chrooted # commands, that will be */*). # - `@@USER@@` is replaced by the username, set on the user page. # # The (global) timeout for the command list can be set with # the *timeout* key. The value is a time in seconds, default # is 10 seconds if not set. # # If a command starts with "-" (a single minus sign), then the # return value of the command following the - is ignored; otherwise, # a failing command will abort the installation. This is much like # make's use of - in a command. # # The value of *script* may be: # - a single string; this is one command that is executed. # - a list of strings; these are executed one at a time, by # separate shells (/bin/sh -c is invoked for each command). # - an object, specifying a key *command* and (optionally) # a key *timeout* to set the timeout for this specific # command differently from the global setting. --- dontChroot: false timeout: 10 script: - "-touch @@ROOT@@/tmp/thingy" - "/usr/bin/false" - command: "/usr/local/bin/slowloris" timeout: 3600 calamares-3.2.20/src/modules/summary/000077500000000000000000000000001362604102500174615ustar00rootroot00000000000000calamares-3.2.20/src/modules/summary/CMakeLists.txt000066400000000000000000000004541362604102500222240ustar00rootroot00000000000000include_directories( ${PROJECT_BINARY_DIR}/src/libcalamaresui ) calamares_add_plugin( summary TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES SummaryViewStep.cpp SummaryPage.cpp UI LINK_PRIVATE_LIBRARIES calamaresui SHARED_LIB NO_CONFIG ) calamares-3.2.20/src/modules/summary/SummaryPage.cpp000066400000000000000000000146701362604102500224270ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2017, 2019, Adriaan de Groot * Copyright 2019, Collabora Ltd * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "SummaryPage.h" #include "SummaryViewStep.h" #include "Branding.h" #include "Settings.h" #include "ViewManager.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" #include "utils/Retranslator.h" #include "viewpages/ExecutionViewStep.h" #include #include #include static const int SECTION_SPACING = 12; SummaryPage::SummaryPage( const SummaryViewStep* thisViewStep, QWidget* parent ) : QWidget() , m_thisViewStep( thisViewStep ) , m_contentWidget( nullptr ) , m_scrollArea( new QScrollArea( this ) ) { Q_UNUSED( parent ) this->setObjectName("summaryStep"); Q_ASSERT( m_thisViewStep ); QVBoxLayout* layout = new QVBoxLayout( this ); layout->setContentsMargins( 0, 0, 0, 0 ); QLabel* headerLabel = new QLabel( this ); CALAMARES_RETRANSLATE( if ( Calamares::Settings::instance()->isSetupMode() ) headerLabel->setText( tr( "This is an overview of what will happen once you start " "the setup procedure." ) ); else headerLabel->setText( tr( "This is an overview of what will happen once you start " "the install procedure." ) ); ) layout->addWidget( headerLabel ); layout->addWidget( m_scrollArea ); m_scrollArea->setWidgetResizable( true ); m_scrollArea->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); // If Calamares will grow, then only show scrollbar when it's needed // (e.g. when the screen is full). m_scrollArea->setVerticalScrollBarPolicy( Calamares::Branding::instance()->windowExpands() ? Qt::ScrollBarAsNeeded : Qt::ScrollBarAlwaysOn ); m_scrollArea->setFrameStyle( QFrame::NoFrame ); m_scrollArea->setContentsMargins( 0, 0, 0, 0 ); } // Adds a widget for those ViewSteps that want a summary; // see SummaryPage documentation and also ViewStep docs. void SummaryPage::onActivate() { createContentWidget(); bool first = true; const Calamares::ViewStepList steps = stepsForSummary( Calamares::ViewManager::instance()->viewSteps() ); for ( Calamares::ViewStep* step : steps ) { QString text = step->prettyStatus(); QWidget* widget = step->createSummaryWidget(); if ( text.isEmpty() && !widget ) continue; if ( first ) first = false; else m_layout->addSpacing( SECTION_SPACING ); m_layout->addWidget( createTitleLabel( step->prettyName() ) ); QHBoxLayout* itemBodyLayout = new QHBoxLayout; m_layout->addSpacing( CalamaresUtils::defaultFontHeight() / 2 ); m_layout->addLayout( itemBodyLayout ); itemBodyLayout->addSpacing( CalamaresUtils::defaultFontHeight() * 2 ); QVBoxLayout* itemBodyCoreLayout = new QVBoxLayout; itemBodyLayout->addLayout( itemBodyCoreLayout ); CalamaresUtils::unmarginLayout( itemBodyLayout ); if ( !text.isEmpty() ) itemBodyCoreLayout->addWidget( createBodyLabel( text ) ); if ( widget ) itemBodyCoreLayout->addWidget( widget ); itemBodyLayout->addSpacing( CalamaresUtils::defaultFontHeight() * 2 ); } m_layout->addStretch(); m_scrollArea->setWidget( m_contentWidget ); auto summarySize = m_contentWidget->sizeHint(); if ( summarySize.height() > m_scrollArea->size().height() ) { auto enlarge = 2 + summarySize.height() - m_scrollArea->size().height(); auto widgetSize = this->size(); widgetSize.setHeight( widgetSize.height() + enlarge ); cDebug() << "Summary widget is larger than viewport, enlarge by" << enlarge << "to" << widgetSize; emit m_thisViewStep->enlarge( QSize( 0, enlarge ) ); // Only expand height } } Calamares::ViewStepList SummaryPage::stepsForSummary( const Calamares::ViewStepList& allSteps ) const { Calamares::ViewStepList steps; for ( Calamares::ViewStep* step : allSteps ) { // We start from the beginning of the complete steps list. If we encounter any // ExecutionViewStep, it means there was an execution phase in the past, and any // jobs from before that phase were already executed, so we can safely clear the // list of steps to summarize and start collecting from scratch. if ( qobject_cast< Calamares::ExecutionViewStep* >( step ) ) { steps.clear(); continue; } // If we reach the parent step of this page, we're done collecting the list of // steps to summarize. if ( m_thisViewStep == step ) break; steps.append( step ); } return steps; } void SummaryPage::createContentWidget() { delete m_contentWidget; m_contentWidget = new QWidget; m_layout = new QVBoxLayout( m_contentWidget ); CalamaresUtils::unmarginLayout( m_layout ); } QLabel* SummaryPage::createTitleLabel( const QString& text ) const { QLabel* label = new QLabel( text ); QFont fnt = font(); fnt.setWeight( QFont::Light ); fnt.setPointSize( CalamaresUtils::defaultFontSize() * 2 ); label->setFont( fnt ); label->setContentsMargins( 0, 0, 0, 0 ); return label; } QLabel* SummaryPage::createBodyLabel( const QString& text ) const { QLabel* label = new QLabel; label->setMargin( CalamaresUtils::defaultFontHeight() / 2 ); QPalette pal( palette() ); pal.setColor( QPalette::Background, palette().window().color().lighter( 108 ) ); label->setAutoFillBackground( true ); label->setPalette( pal ); label->setText( text ); return label; } calamares-3.2.20/src/modules/summary/SummaryPage.h000066400000000000000000000046041362604102500220700ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef SUMMARYPAGE_H #define SUMMARYPAGE_H #include "viewpages/ViewStep.h" #include class QLabel; class QScrollArea; class QVBoxLayout; class SummaryViewStep; /** @brief Provide a summary view with to-be-done action descriptions. * * Those steps that occur since the previous execution step (e.g. that * are queued for execution now; in the normal case where there is * only one execution step, this means everything that the installer * is going to do) are added to the summary view. Each view step * can provide one of the following things to display in the summary * view: * * - A string from ViewStep::prettyStatus(), which is formatted * and added as a QLabel to the view. Return an empty string * from prettyStatus() to avoid this. * - A QWidget from ViewStep::createSummaryWidget(). This is for * complicated displays not suitable for simple text representation. * Return a nullptr to avoid this. * * If neither a (non-empty) string nor a widget is returned, the * step is not named in the summary. */ class SummaryPage : public QWidget { Q_OBJECT public: explicit SummaryPage( const SummaryViewStep* thisViewStep, QWidget* parent = nullptr ); void onActivate(); void createContentWidget(); private: Calamares::ViewStepList stepsForSummary( const Calamares::ViewStepList& allSteps ) const; const SummaryViewStep* m_thisViewStep; QVBoxLayout* m_layout = nullptr; QWidget* m_contentWidget = nullptr; QLabel* createTitleLabel( const QString& text ) const; QLabel* createBodyLabel( const QString& text ) const; QScrollArea* m_scrollArea; }; #endif // SUMMARYPAGE_H calamares-3.2.20/src/modules/summary/SummaryViewStep.cpp000066400000000000000000000035541362604102500233200ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "SummaryViewStep.h" #include "SummaryPage.h" CALAMARES_PLUGIN_FACTORY_DEFINITION( SummaryViewStepFactory, registerPlugin(); ) SummaryViewStep::SummaryViewStep( QObject* parent ) : Calamares::ViewStep( parent ) , m_widget( new SummaryPage( this ) ) { emit nextStatusChanged( true ); } SummaryViewStep::~SummaryViewStep() { if ( m_widget && m_widget->parent() == nullptr ) m_widget->deleteLater(); } QString SummaryViewStep::prettyName() const { return tr( "Summary" ); } QWidget* SummaryViewStep::widget() { return m_widget; } bool SummaryViewStep::isNextEnabled() const { return true; } bool SummaryViewStep::isBackEnabled() const { return true; } bool SummaryViewStep::isAtBeginning() const { return true; } bool SummaryViewStep::isAtEnd() const { return true; } QList< Calamares::job_ptr > SummaryViewStep::jobs() const { return QList< Calamares::job_ptr >(); } void SummaryViewStep::onActivate() { m_widget->onActivate(); } void SummaryViewStep::onLeave() { m_widget->createContentWidget(); } calamares-3.2.20/src/modules/summary/SummaryViewStep.h000066400000000000000000000031731362604102500227620ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef SUMMARYPAGEPLUGIN_H #define SUMMARYPAGEPLUGIN_H #include #include #include #include class SummaryPage; class PLUGINDLLEXPORT SummaryViewStep : public Calamares::ViewStep { Q_OBJECT public: explicit SummaryViewStep( QObject* parent = nullptr ); virtual ~SummaryViewStep() override; QString prettyName() const override; QWidget* widget() override; bool isNextEnabled() const override; bool isBackEnabled() const override; bool isAtBeginning() const override; bool isAtEnd() const override; QList< Calamares::job_ptr > jobs() const override; void onActivate() override; void onLeave() override; private: SummaryPage* m_widget; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( SummaryViewStepFactory ) #endif // SUMMARYPAGEPLUGIN_H calamares-3.2.20/src/modules/test_conf.cpp000066400000000000000000000055171362604102500204640ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2017-2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ /** * This is a test-application that just checks the YAML config-file * shipped with each module for correctness -- well, for parseability. */ #include "utils/Yaml.h" #include #include #include #include #include using std::cerr; static const char usage[] = "Usage: test_conf [-v] [-b] ...\n"; int main(int argc, char** argv) { bool verbose = false; bool bytes = false; int opt; while ((opt = getopt(argc, argv, "vb")) != -1) { switch (opt) { case 'v': verbose = true; break; case 'b': bytes = true; break; default: /* '?' */ cerr << usage; return 1; } } if ( optind >= argc ) { cerr << usage; return 1; } const char* filename = argv[optind]; try { YAML::Node doc; if ( bytes ) { QFile f( filename ); if ( f.open( QFile::ReadOnly | QFile::Text ) ) doc = YAML::Load( f.readAll().constData() ); } else doc = YAML::LoadFile( filename ); if ( doc.IsNull() ) { // Special case: empty config files are valid, // but aren't a map. For the example configs, // this is still an error. cerr << "WARNING:" << filename << '\n'; cerr << "WARNING: empty YAML\n"; return 1; } if ( !doc.IsMap() ) { cerr << "WARNING:" << filename << '\n'; cerr << "WARNING: not-a-YAML-map (type=" << doc.Type() << ")\n"; return 1; } if ( verbose ) { cerr << "Keys:\n"; for ( auto i = doc.begin(); i != doc.end(); ++i ) cerr << i->first.as() << '\n'; } } catch ( YAML::Exception& e ) { cerr << "WARNING:" << filename << '\n'; cerr << "WARNING: YAML parser error " << e.what() << '\n'; return 1; } return 0; } calamares-3.2.20/src/modules/testpythonrun.sh000066400000000000000000000027311362604102500212710ustar00rootroot00000000000000#! /bin/sh ### Command-line validation # # SRCDIR=$( dirname "$0" ) test -d "$SRCDIR" || { echo "! Can't find source directory." ; exit 1 ; } MODULE="$1" test -n "$MODULE" || { echo "! Usage: $0 " ; exit 1 ; } ### Run-time validation # # .. switch SRCDIR to the module that has been found BINDIR="$SRCDIR" # Keep original SRCDIR SRCDIR="$SRCDIR/$MODULE" XSRCDIR="src/modules/$MODULE" # In builddir TESTDIR="$SRCDIR/tests" test -x "$BINDIR/testmodule.py" || { echo "! No support script $BINDIR/testmodule.py" ; exit 1 ; } test -d "$SRCDIR" || { echo "! Source $SRCDIR is not a directory." ; exit 1 ; } test -f "$TESTDIR/1.global" || { echo "! Source $SRCDIR has no tests." ; exit 1 ; } test -f "libcalamares.so" || { echo "! Run the tests from the build-directory." ; exit 1 ; } test -d "$XSRCDIR" || { echo "! No module directory $XSRCDIR in build-dir." ; exit 1 ; } ### Python setup # # export PYTHONPATH=".:$PYTHONPATH" PYTHON=$( which python3 2> /dev/null ) if test -z "$PYTHON" ; then PYTHON=$( which python 2> /dev/null ) fi test -x "$PYTHON" || { echo "! No suitable Python executable found." ; exit 1 ; } ### Test-execution # # C=0 while true ; do # Might use shell arithmetic, but need other shebang then C=$( expr "$C" + 1 ) G_CFG="$TESTDIR/$C.global" J_CFG="$TESTDIR/$C.job" test -f "$G_CFG" || break if test -f "$J_CFG" ; then $PYTHON "$BINDIR/testmodule.py" "$XSRCDIR" "$G_CFG" "$J_CFG" else $PYTHON "$BINDIR/testmodule.py" "$XSRCDIR" "$G_CFG" fi done calamares-3.2.20/src/modules/tracking/000077500000000000000000000000001362604102500175665ustar00rootroot00000000000000calamares-3.2.20/src/modules/tracking/CMakeLists.txt000066400000000000000000000005041362604102500223250ustar00rootroot00000000000000calamares_add_plugin( tracking TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES TrackingJobs.cpp TrackingPage.cpp TrackingViewStep.cpp UI page_trackingstep.ui RESOURCES page_trackingstep.qrc LINK_PRIVATE_LIBRARIES calamaresui SHARED_LIB ) calamares-3.2.20/src/modules/tracking/TrackingJobs.cpp000066400000000000000000000072231362604102500226560ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2017-2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "TrackingJobs.h" #include "network/Manager.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include #include #include TrackingInstallJob::TrackingInstallJob( const QString& url ) : m_url( url ) { } TrackingInstallJob::~TrackingInstallJob() { } QString TrackingInstallJob::prettyName() const { return tr( "Installation feedback" ); } QString TrackingInstallJob::prettyDescription() const { return prettyName(); } QString TrackingInstallJob::prettyStatusMessage() const { return tr( "Sending installation feedback." ); } Calamares::JobResult TrackingInstallJob::exec() { using CalamaresUtils::Network::Manager; using CalamaresUtils::Network::RequestOptions; using CalamaresUtils::Network::RequestStatus; auto result = Manager::instance().synchronousPing( QUrl( m_url ), RequestOptions( RequestOptions::FollowRedirect | RequestOptions::FakeUserAgent, RequestOptions::milliseconds( 5000 ) ) ); if ( result.status == RequestStatus::Timeout ) { cWarning() << "install-tracking request timed out."; return Calamares::JobResult::error( tr( "Internal error in install-tracking." ), tr( "HTTP request timed out." ) ); } return Calamares::JobResult::ok(); } QString TrackingMachineNeonJob::prettyName() const { return tr( "Machine feedback" ); } QString TrackingMachineNeonJob::prettyDescription() const { return prettyName(); } QString TrackingMachineNeonJob::prettyStatusMessage() const { return tr( "Configuring machine feedback." ); } Calamares::JobResult TrackingMachineNeonJob::exec() { static const auto script = QStringLiteral( R"x( MACHINE_ID=`cat /etc/machine-id` sed -i "s,URI =.*,URI = http://releases.neon.kde.org/meta-release/${MACHINE_ID}," /etc/update-manager/meta-release sed -i "s,URI_LTS =.*,URI_LTS = http://releases.neon.kde.org/meta-release-lts/${MACHINE_ID}," /etc/update-manager/meta-release true )x" ); int r = CalamaresUtils::System::instance()->targetEnvCall( "/bin/sh", QString(), // Working dir script, std::chrono::seconds( 1 ) ); if ( r == 0 ) { return Calamares::JobResult::ok(); } else if ( r > 0 ) { return Calamares::JobResult::error( tr( "Error in machine feedback configuration." ), tr( "Could not configure machine feedback correctly, script error %1." ).arg( r ) ); } else { return Calamares::JobResult::error( tr( "Error in machine feedback configuration." ), tr( "Could not configure machine feedback correctly, Calamares error %1." ).arg( r ) ); } } calamares-3.2.20/src/modules/tracking/TrackingJobs.h000066400000000000000000000027471362604102500223310ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2017-2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef TRACKINGJOBS #define TRACKINGJOBS #include "Job.h" class QSemaphore; class TrackingInstallJob : public Calamares::Job { public: TrackingInstallJob( const QString& url ); ~TrackingInstallJob() override; QString prettyName() const override; QString prettyDescription() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; private: const QString m_url; }; class TrackingMachineNeonJob : public Calamares::Job { Q_OBJECT public: QString prettyName() const override; QString prettyDescription() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; }; #endif calamares-3.2.20/src/modules/tracking/TrackingPage.cpp000066400000000000000000000136621362604102500226410ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2017-2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "TrackingPage.h" #include "ui_page_trackingstep.h" #include "Branding.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "ViewManager.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" #include "utils/Retranslator.h" #include #include #include TrackingPage::TrackingPage( QWidget* parent ) : QWidget( parent ) , ui( new Ui::TrackingPage ) { using StringEntry = Calamares::Branding::StringEntry; ui->setupUi( this ); CALAMARES_RETRANSLATE( ui->retranslateUi( this ); ui->generalExplanation->setText( tr( "Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with " "the last two options below), get continuous information about preferred applications. To see what " "will be sent, please click the help icon next to each area." ) .arg( *StringEntry::ShortProductName ) ); ui->installExplanation->setText( tr( "By selecting this you will send information about your installation and hardware. This information " "will only be sent once after the installation finishes." ) ); ui->machineExplanation->setText( tr( "By selecting this you will periodically send information about " "your installation, hardware and applications, to %1." ) .arg( *StringEntry::ShortProductName ) ); ui->userExplanation->setText( tr( "By selecting this you will regularly send information about your " "installation, hardware, applications and usage patterns, to %1." ) .arg( *StringEntry::ShortProductName ) ); ) QButtonGroup* group = new QButtonGroup( this ); group->setExclusive( true ); group->addButton( ui->noneRadio ); group->addButton( ui->installRadio ); group->addButton( ui->machineRadio ); group->addButton( ui->userRadio ); ui->noneRadio->setChecked( true ); } void TrackingPage::enableTrackingOption( TrackingType t, bool enabled ) { QWidget* group = nullptr; switch ( t ) { case TrackingType::InstallTracking: group = ui->installGroup; break; case TrackingType::MachineTracking: group = ui->machineGroup; break; case TrackingType::UserTracking: group = ui->userGroup; break; } if ( group != nullptr ) { if ( enabled ) { group->show(); } else { group->hide(); } } else { cWarning() << "unknown tracking option" << int( t ); } } bool TrackingPage::getTrackingOption( TrackingType t ) { bool enabled = false; // A tracking type is enabled if it is checked, or // any higher level is checked. #define ch( x ) ui->x->isChecked() switch ( t ) { case TrackingType::InstallTracking: enabled = ch( installRadio ) || ch( machineRadio ) || ch( userRadio ); break; case TrackingType::MachineTracking: enabled = ch( machineRadio ) || ch( userRadio ); break; case TrackingType::UserTracking: enabled = ch( userRadio ); break; } #undef ch return enabled; } void TrackingPage::setTrackingPolicy( TrackingType t, QString url ) { QToolButton* button = nullptr; switch ( t ) { case TrackingType::InstallTracking: button = ui->installPolicyButton; break; case TrackingType::MachineTracking: button = ui->machinePolicyButton; break; case TrackingType::UserTracking: button = ui->userPolicyButton; break; } if ( button != nullptr ) if ( url.isEmpty() ) { button->hide(); } else { connect( button, &QToolButton::clicked, [url] { QDesktopServices::openUrl( url ); } ); cDebug() << "Tracking policy" << int( t ) << "set to" << url; } else { cWarning() << "unknown tracking option" << int( t ); } } void TrackingPage::setGeneralPolicy( QString url ) { if ( url.isEmpty() ) { ui->generalPolicyLabel->hide(); } else { ui->generalPolicyLabel->show(); ui->generalPolicyLabel->setTextInteractionFlags( Qt::TextBrowserInteraction ); ui->generalPolicyLabel->show(); connect( ui->generalPolicyLabel, &QLabel::linkActivated, [url] { QDesktopServices::openUrl( url ); } ); } } void TrackingPage::setTrackingLevel( const QString& l ) { QString level = l.toLower(); QRadioButton* button = nullptr; if ( level.isEmpty() || level == "none" ) { button = ui->noneRadio; } else if ( level == "install" ) { button = ui->installRadio; } else if ( level == "machine" ) { button = ui->machineRadio; } else if ( level == "user" ) { button = ui->userRadio; } if ( button != nullptr ) { button->setChecked( true ); } else { cWarning() << "unknown default tracking level" << l; } } calamares-3.2.20/src/modules/tracking/TrackingPage.h000066400000000000000000000036101362604102500222760ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2017, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef TRACKINGPAGE_H #define TRACKINGPAGE_H #include "TrackingType.h" #include #include namespace Ui { class TrackingPage; } class TrackingPage : public QWidget { Q_OBJECT public: explicit TrackingPage( QWidget* parent = nullptr ); /** * Enables or disables the tracking-option block for the given * tracking option @p t, and sets the initial state of the * checkbox to the @p user default. * * Call this in ascending order of tracking type. */ void enableTrackingOption( TrackingType t, bool enabled ); /** * Returns whether tracking type @p is selected by the user * (i.e. is the radio button for that level, or for a higher * tracking level, enabled). */ bool getTrackingOption( TrackingType t ); /* URL for given level @p t */ void setTrackingPolicy( TrackingType t, QString url ); /* URL for the global link */ void setGeneralPolicy( QString url ); /* Select one of the four levels by name */ void setTrackingLevel( const QString& level ); private: Ui::TrackingPage* ui; }; #endif //TRACKINGPAGE_H calamares-3.2.20/src/modules/tracking/TrackingType.h000066400000000000000000000016741362604102500223530ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2017, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef TRACKINGTYPE_H #define TRACKINGTYPE_H enum class TrackingType { InstallTracking, MachineTracking, UserTracking }; #endif //TRACKINGTYPE_H calamares-3.2.20/src/modules/tracking/TrackingViewStep.cpp000066400000000000000000000120071362604102500235230ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2017, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "TrackingViewStep.h" #include "TrackingJobs.h" #include "TrackingPage.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include "utils/Variant.h" #include #include CALAMARES_PLUGIN_FACTORY_DEFINITION( TrackingViewStepFactory, registerPlugin< TrackingViewStep >(); ) /** @brief Is @p s a valid machine-tracking style. */ static bool isValidStyle( const QString& s ) { static QStringList knownStyles { "neon" }; return knownStyles.contains( s ); } TrackingViewStep::TrackingViewStep( QObject* parent ) : Calamares::ViewStep( parent ) , m_widget( new TrackingPage ) { emit nextStatusChanged( false ); } TrackingViewStep::~TrackingViewStep() { if ( m_widget && m_widget->parent() == nullptr ) { m_widget->deleteLater(); } } QString TrackingViewStep::prettyName() const { return tr( "Feedback" ); } QWidget* TrackingViewStep::widget() { return m_widget; } bool TrackingViewStep::isNextEnabled() const { return true; } bool TrackingViewStep::isBackEnabled() const { return true; } bool TrackingViewStep::isAtBeginning() const { return true; } bool TrackingViewStep::isAtEnd() const { return true; } void TrackingViewStep::onLeave() { m_installTracking.userEnabled = m_widget->getTrackingOption( TrackingType::InstallTracking ); m_machineTracking.userEnabled = m_widget->getTrackingOption( TrackingType::MachineTracking ); m_userTracking.userEnabled = m_widget->getTrackingOption( TrackingType::UserTracking ); cDebug() << "Install tracking:" << m_installTracking.enabled(); cDebug() << "Machine tracking:" << m_machineTracking.enabled(); cDebug() << " User tracking:" << m_userTracking.enabled(); } Calamares::JobList TrackingViewStep::jobs() const { Calamares::JobList l; cDebug() << "Creating tracking jobs .."; if ( m_installTracking.enabled() && !m_installTrackingUrl.isEmpty() ) { QString installUrl = m_installTrackingUrl; const auto s = CalamaresUtils::System::instance(); QString memory, disk; memory.setNum( s->getTotalMemoryB().first ); disk.setNum( s->getTotalDiskB() ); installUrl.replace( "$CPU", s->getCpuDescription() ).replace( "$MEMORY", memory ).replace( "$DISK", disk ); cDebug() << Logger::SubEntry << "install-tracking URL" << installUrl; l.append( Calamares::job_ptr( new TrackingInstallJob( installUrl ) ) ); } if ( m_machineTracking.enabled() && !m_machineTrackingStyle.isEmpty() ) { Q_ASSERT( isValidStyle( m_machineTrackingStyle ) ); if ( m_machineTrackingStyle == "neon" ) { l.append( Calamares::job_ptr( new TrackingMachineNeonJob() ) ); } } return l; } QVariantMap TrackingViewStep::setTrackingOption( const QVariantMap& configurationMap, const QString& key, TrackingType t ) { bool settingEnabled = false; bool success = false; auto config = CalamaresUtils::getSubMap( configurationMap, key, success ); if ( success ) { settingEnabled = CalamaresUtils::getBool( config, "enabled", false ); } TrackingEnabled& trackingConfiguration = tracking( t ); trackingConfiguration.settingEnabled = settingEnabled; trackingConfiguration.userEnabled = false; m_widget->enableTrackingOption( t, settingEnabled ); m_widget->setTrackingPolicy( t, CalamaresUtils::getString( config, "policy" ) ); return config; } void TrackingViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { QVariantMap config; config = setTrackingOption( configurationMap, "install", TrackingType::InstallTracking ); m_installTrackingUrl = CalamaresUtils::getString( config, "url" ); config = setTrackingOption( configurationMap, "machine", TrackingType::MachineTracking ); auto s = CalamaresUtils::getString( config, "style" ); if ( isValidStyle( s ) ) { m_machineTrackingStyle = s; } setTrackingOption( configurationMap, "user", TrackingType::UserTracking ); m_widget->setGeneralPolicy( CalamaresUtils::getString( configurationMap, "policy" ) ); m_widget->setTrackingLevel( CalamaresUtils::getString( configurationMap, "default" ) ); } calamares-3.2.20/src/modules/tracking/TrackingViewStep.h000066400000000000000000000052321362604102500231720ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2017, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef TRACKINGVIEWSTEP_H #define TRACKINGVIEWSTEP_H #include "TrackingType.h" #include #include #include #include #include #include class TrackingPage; class PLUGINDLLEXPORT TrackingViewStep : public Calamares::ViewStep { Q_OBJECT public: explicit TrackingViewStep( QObject* parent = nullptr ); virtual ~TrackingViewStep() override; QString prettyName() const override; QWidget* widget() override; bool isNextEnabled() const override; bool isBackEnabled() const override; bool isAtBeginning() const override; bool isAtEnd() const override; void onLeave() override; Calamares::JobList jobs() const override; void setConfigurationMap( const QVariantMap& configurationMap ) override; private: QVariantMap setTrackingOption( const QVariantMap& configurationMap, const QString& key, TrackingType t ); TrackingPage* m_widget; QString m_installTrackingUrl; QString m_machineTrackingStyle; struct TrackingEnabled { bool settingEnabled; // Enabled in config file bool userEnabled; // User checked "yes" TrackingEnabled() : settingEnabled( false ) , userEnabled( false ) { } bool enabled() const { return settingEnabled && userEnabled; } }; TrackingEnabled m_installTracking, m_machineTracking, m_userTracking; inline TrackingEnabled& tracking( TrackingType t ) { if ( t == TrackingType::UserTracking ) { return m_userTracking; } else if ( t == TrackingType::MachineTracking ) { return m_machineTracking; } else { return m_installTracking; } } }; CALAMARES_PLUGIN_FACTORY_DECLARATION( TrackingViewStepFactory ) #endif // TRACKINGVIEWSTEP_H calamares-3.2.20/src/modules/tracking/level-install.svg000066400000000000000000000162151362604102500230670ustar00rootroot00000000000000 image/svg+xml ! calamares-3.2.20/src/modules/tracking/level-machine.svg000066400000000000000000000277161362604102500230350ustar00rootroot00000000000000 image/svg+xml calamares-3.2.20/src/modules/tracking/level-none.svg000066400000000000000000000166741362604102500223710ustar00rootroot00000000000000 image/svg+xml calamares-3.2.20/src/modules/tracking/level-user.svg000066400000000000000000000213111362604102500223700ustar00rootroot00000000000000 image/svg+xml calamares-3.2.20/src/modules/tracking/page_trackingstep.qrc000066400000000000000000000003711362604102500237700ustar00rootroot00000000000000 level-none.svg level-install.svg level-machine.svg level-user.svg ../../../data/images/information.svgz calamares-3.2.20/src/modules/tracking/page_trackingstep.ui000066400000000000000000000216221362604102500236220ustar00rootroot00000000000000 TrackingPage 0 0 799 400 Form margin-bottom: 1ex; margin-left: 2em; Placeholder true 64 64 64 64 :/tracking/level-none.svg 0 0 <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> true 64 64 64 64 :/tracking/level-install.svg 0 0 TextLabel true ... :/tracking/data/images/information.svgz:/tracking/data/images/information.svgz 64 64 64 64 :/tracking/level-machine.svg 0 0 TextLabel true ... :/tracking/data/images/information.svgz:/tracking/data/images/information.svgz 64 64 64 64 :/tracking/level-user.svg 0 0 TextLabel true ... :/tracking/data/images/information.svgz:/tracking/data/images/information.svgz <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> Qt::RichText Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false Qt::Vertical 20 40 calamares-3.2.20/src/modules/tracking/tracking.conf000066400000000000000000000077061362604102500222510ustar00rootroot00000000000000# Settings for various kinds of tracking that Distributions can # enable. Distributions looking at tracking should be aware of # the privacy (and hence communications) impact of that tracking, # and are advised to consult the Mozilla and KDE policies on # privacy and user tracking. # # There are three areas of tracking (-configuration) supported # by Calamares It is up to individual Distributions to create # suitable backends / configuration scripts for each. The # different areas are: # # install: This is "phone home" functionality at the end of the # install process. When enabled, it contacts the given # URL. The URL can contain the special token $MACHINE, # which is replaced by the machine-id of the installed # system (if available, blank otherwise). # # machine: This enables machine-level tracking on a (semi-) # continuous basis. It is meant to keep track of installed # systems and their continued use / updating. # # user: This area enables user-level tracking, along the lines # of the KDE User Telemetry Policy. It enables specific # collection of data at a user- and application-level, # possibly including actions done in an application. # For the KDE environment, this enables user tracking # with the appropriate framework, and the KDE User Telemetry # policy applies. # # Each area has a key *enabled*. If the area is enabled, it is shown to # the user. This defaults to off, which means no tracking would be # configured or enabled by Calamares. # # Each area has a key *policy*, which is a Url to be opened when # the user clicks on the corresponding Help button for an explanation # of the details of that particular kind of tracking. If no policy # is set, the help button is hidden. The example policy links # go to Calamares' generic user manual. # # Each area may have other configuration keys, depending on the # area and how it needs to be configured. # # Globally, there are two other keys: # # policy: (optional) url about tracking settings for this distro. # default: (optional) level to enable by default # --- # This is the global policy; it is displayed as a link on the page. # If blank or commented out, no link is displayed on the tracking # page. It is recommended to either provide policy URLs for each # area, *or* one general link, and not to mix them. policy: "https://github.com/calamares/calamares/wiki/Use-Guide#installation-tracking" # This is the default level to enable for tracking. If commented out, # empty, or otherwise invalid, "none" is used, so no tracking by default. default: user # The install area has one specific configuration key: # url: this URL (remember to include the protocol, and prefer https) # is fetched (with a GET request, and the data discarded) at # the end of the installation process. The following tokens # are replaced in the url (possibly by blank strings, or by 0). # - $CPU (cpu make and model) # - $MEMORY (amount of main memory available) # - $DISK (total amount of disk attached) # Typically these are used as GET parameters, as in the example. # # Note that phone-home only works if the system has an internet # connection; it is a good idea to require internet in the welcome # module then. install: enabled: false policy: "https://github.com/calamares/calamares/wiki/Use-Guide#installation-tracking" # url: "https://example.com/install.php?c=$CPU&m=$MEMORY" # The machine area has one specific configuration key: # style: This string specifies what kind of tracking configuration # needs to be done. There is currently only one valid # style, "neon", which edits two files in the installed # system to enable system-tracking. machine: enabled: false style: neon # The user area is not yet implemented, and has no specific configuration. user: enabled: false calamares-3.2.20/src/modules/umount/000077500000000000000000000000001362604102500173135ustar00rootroot00000000000000calamares-3.2.20/src/modules/umount/main.py000066400000000000000000000070121362604102500206110ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # === This file is part of Calamares - === # # Copyright 2014, Aurélien Gâteau # Copyright 2016, Anke Boersma # Copyright 2018, Adriaan de Groot # # Calamares 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. # # Calamares 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 Calamares. If not, see . import os import subprocess import shutil import libcalamares from libcalamares.utils import gettext_path, gettext_languages import gettext _translation = gettext.translation("calamares-python", localedir=gettext_path(), languages=gettext_languages(), fallback=True) _ = _translation.gettext _n = _translation.ngettext def pretty_name(): return _( "Unmount file systems." ) def list_mounts(root_mount_point): """ List mount points. :param root_mount_point: :return: """ lst = [] for line in open("/etc/mtab").readlines(): device, mount_point, _ = line.split(" ", 2) if mount_point.startswith(root_mount_point): lst.append((device, mount_point)) return lst def run(): """ Unmounts given mountpoints in decreasing order. :return: """ root_mount_point = libcalamares.globalstorage.value("rootMountPoint") if(libcalamares.job.configuration and "srcLog" in libcalamares.job.configuration and "destLog" in libcalamares.job.configuration): log_source = libcalamares.job.configuration["srcLog"] log_destination = libcalamares.job.configuration["destLog"] # Relocate log_destination into target system log_destination = '{!s}/{!s}'.format(root_mount_point, log_destination) # Make sure source is a string log_source = '{!s}'.format(log_source) # copy installation log before umount if os.path.exists(log_source): try: shutil.copy2(log_source, log_destination) except Exception as e: libcalamares.utils.warning("Could not preserve file {!s}, " "error {!s}".format(log_source, e)) if not root_mount_point: return ("No mount point for root partition in globalstorage", "globalstorage does not contain a \"rootMountPoint\" key, " "doing nothing") if not os.path.exists(root_mount_point): return ("Bad mount point for root partition in globalstorage", "globalstorage[\"rootMountPoint\"] is \"{}\", which does not " "exist, doing nothing".format(root_mount_point)) lst = list_mounts(root_mount_point) # Sort the list by mount point in decreasing order. This way we can be sure # we unmount deeper dirs first. lst.sort(key=lambda x: x[1], reverse=True) for device, mount_point in lst: subprocess.check_call(["umount", "-lv", mount_point]) os.rmdir(root_mount_point) return None calamares-3.2.20/src/modules/umount/module.desc000066400000000000000000000001261362604102500214370ustar00rootroot00000000000000--- type: "job" name: "umount" interface: "python" script: "main.py" calamares-3.2.20/src/modules/umount/umount.conf000066400000000000000000000025221362604102500215120ustar00rootroot00000000000000### Umount Module # # This module represents the last part of the installation, the unmounting # of partitions used for the install. It is also the last place where it # is possible to copy files to the target system, thus the best place to # copy an installation log. # # This module has two configuration keys: # srcLog location in the live system where the log is # destLog location in the target system to copy the log # # You can either use the default source path (which is # `/root/.cache/calamares/session.log` ) to copy the regular log, # or if you want to use the full output of `sudo calamares -d` you will need # to redirect standard output, for instance in a launcher script or # in the desktop file. # # Example launcher script: # # ``` # #!/bin/sh # sudo /usr/bin/calamares -d > installation.log # ``` # # Example desktop line: # # ``` # Exec=sudo /usr/bin/calamares -d > installation.log # ``` # # If no source and destination are set, no copy is attempted. If the # copy fails for some reason, a warning is printed but the installation # does not fail. --- # example when using the normal Calamares log: srcLog: "/root/.cache/calamares/session.log" destLog: "/var/log/Calamares.log" # example when using a log created by `sudo calamares -d`: #srcLog: "/home/live/installation.log" #destLog: "/var/log/installation.log" calamares-3.2.20/src/modules/unpackfs/000077500000000000000000000000001362604102500175765ustar00rootroot00000000000000calamares-3.2.20/src/modules/unpackfs/main.py000066400000000000000000000354201362604102500211000ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # === This file is part of Calamares - === # # Copyright 2014, Teo Mrnjavac # Copyright 2014, Daniel Hillenbrand # Copyright 2014, Philip Müller # Copyright 2017, Alf Gaida # Copyright 2019, Kevin Kofler # Copyright 2020, Adriaan de Groot # Copyright 2020, Gabriel Craciunescu # # Calamares 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. # # Calamares 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 Calamares. If not, see . import os import re import shutil import subprocess import sys import tempfile from libcalamares import * from libcalamares.utils import mount import gettext _ = gettext.translation("calamares-python", localedir=utils.gettext_path(), languages=utils.gettext_languages(), fallback=True).gettext def pretty_name(): return _("Filling up filesystems.") class UnpackEntry: """ Extraction routine using rsync. :param source: :param sourcefs: :param destination: """ __slots__ = ['source', 'sourcefs', 'destination', 'copied', 'total', 'exclude', 'excludeFile'] def __init__(self, source, sourcefs, destination): """ @p source is the source file name (might be an image file, or a directory, too) @p sourcefs is a type indication; "file" is special, as is "squashfs". @p destination is where the files from the source go. This is **already** prefixed by rootMountPoint, so should be a valid absolute path within the host system. The members copied and total are filled in by the copying process. """ self.source = source self.sourcefs = sourcefs self.destination = destination self.exclude = None self.excludeFile = None self.copied = 0 self.total = 0 def is_file(self): return self.sourcefs == "file" ON_POSIX = 'posix' in sys.builtin_module_names def global_excludes(): """ List excludes for rsync. """ lst = [] extra_mounts = globalstorage.value("extraMounts") if extra_mounts is None: extra_mounts = [] for extra_mount in extra_mounts: mount_point = extra_mount["mountPoint"] if mount_point: lst.extend(['--exclude', mount_point + '/']) return lst def file_copy(source, entry, progress_cb): """ Extract given image using rsync. :param source: Source file. This may be the place the entry's image is mounted, or if it's a single file, the entry's source value. :param entry: The UnpackEntry being copied. :param progress_cb: A callback function for progress reporting. Takes a number and a total-number. """ dest = entry.destination # Environment used for executing rsync properly # Setting locale to C (fix issue with tr_TR locale) at_env = os.environ at_env["LC_ALL"] = "C" # `source` *must* end with '/' otherwise a directory named after the source # will be created in `dest`: ie if `source` is "/foo/bar" and `dest` is # "/dest", then files will be copied in "/dest/bar". if not source.endswith("/") and not os.path.isfile(source): source += "/" num_files_total_local = 0 num_files_copied = 0 # Gets updated through rsync output args = ['rsync', '-aHAXr'] args.extend(global_excludes()) if entry.excludeFile: args.extend(["--exclude-from=" + entry.excludeFile]) if entry.exclude: for f in entry.exclude: args.extend(["--exclude", f]) args.extend(['--progress', source, dest]) process = subprocess.Popen( args, env=at_env, stdout=subprocess.PIPE, close_fds=ON_POSIX ) # last_num_files_copied trails num_files_copied, and whenever at least 100 more # files have been copied, progress is reported and last_num_files_copied is updated. last_num_files_copied = 0 for line in iter(process.stdout.readline, b''): # rsync outputs progress in parentheses. Each line will have an # xfer and a chk item (either ir-chk or to-chk) as follows: # # - xfer#x => Interpret it as 'file copy try no. x' # - ir-chk=x/y, where: # - x = number of files yet to be checked # - y = currently calculated total number of files. # - to-chk=x/y, which is similar and happens once the ir-chk # phase (collecting total files) is over. # # If you're copying directory with some links in it, the xfer# # might not be a reliable counter (for one increase of xfer, many # files may be created). m = re.findall(r'xfr#(\d+), ..-chk=(\d+)/(\d+)', line.decode()) if m: # we've got a percentage update num_files_remaining = int(m[0][1]) num_files_total_local = int(m[0][2]) # adjusting the offset so that progressbar can be continuesly drawn num_files_copied = num_files_total_local - num_files_remaining # I guess we're updating every 100 files... if num_files_copied - last_num_files_copied >= 100: last_num_files_copied = num_files_copied progress_cb(num_files_copied, num_files_total_local) process.wait() progress_cb(num_files_copied, num_files_total_local) # Push towards 100% # 23 is the return code rsync returns if it cannot write extended # attributes (with -X) because the target file system does not support it, # e.g., the FAT EFI system partition. We need -X because distributions # using file system capabilities and/or SELinux require the extended # attributes. But distributions using SELinux may also have SELinux labels # set on files under /boot/efi, and rsync complains about those. The only # clean way would be to split the rsync into one with -X and # --exclude /boot/efi and a separate one without -X for /boot/efi, but only # if /boot/efi is actually an EFI system partition. For now, this hack will # have to do. See also: # https://bugzilla.redhat.com/show_bug.cgi?id=868755#c50 # for the same issue in Anaconda, which uses a similar workaround. if process.returncode != 0 and process.returncode != 23: utils.warning("rsync failed with error code {}.".format(process.returncode)) return _("rsync failed with error code {}.").format(process.returncode) return None class UnpackOperation: """ Extraction routine using unsquashfs. :param entries: """ def __init__(self, entries): self.entries = entries self.entry_for_source = dict((x.source, x) for x in self.entries) def report_progress(self): """ Pass progress to user interface """ progress = float(0) done = 0 total = 0 complete = 0 for entry in self.entries: if entry.total == 0: continue total += entry.total done += entry.copied if entry.total == entry.copied: complete += 1 if done > 0 and total > 0: progress = 0.05 + (0.90 * done / total) + (0.05 * complete / len(self.entries)) job.setprogress(progress) def run(self): """ Extract given image using unsquashfs. :return: """ source_mount_path = tempfile.mkdtemp() try: for entry in self.entries: imgbasename = os.path.splitext( os.path.basename(entry.source))[0] imgmountdir = os.path.join(source_mount_path, imgbasename) os.makedirs(imgmountdir, exist_ok=True) self.mount_image(entry, imgmountdir) fslist = "" if entry.sourcefs == "squashfs": if shutil.which("unsquashfs") is None: utils.warning("Failed to find unsquashfs") return (_("Failed to unpack image \"{}\"").format(entry.source), _("Failed to find unsquashfs, make sure you have the squashfs-tools package installed")) fslist = subprocess.check_output( ["unsquashfs", "-l", entry.source] ) elif entry.sourcefs == "ext4": fslist = subprocess.check_output( ["find", imgmountdir, "-type", "f"] ) elif entry.is_file(): # Hasn't been mounted, copy directly; find handles both # files and directories. fslist = subprocess.check_output(["find", entry.source, "-type", "f"]) entry.total = len(fslist.splitlines()) self.report_progress() error_msg = self.unpack_image(entry, imgmountdir) if error_msg: return (_("Failed to unpack image \"{}\"").format(entry.source), error_msg) return None finally: shutil.rmtree(source_mount_path, ignore_errors=True, onerror=None) def mount_image(self, entry, imgmountdir): """ Mount given @p entry as loop device on @p imgmountdir. A *file* entry (e.g. one with *sourcefs* set to *file*) is not mounted and just ignored. :param entry: the entry to mount (source is the important property) :param imgmountdir: where to mount it :returns: None, but throws if the mount failed """ if entry.is_file(): return if os.path.isdir(entry.source): r = mount(entry.source, imgmountdir, "", "--bind") elif os.path.isfile(entry.source): r = mount(entry.source, imgmountdir, entry.sourcefs, "loop") else: # entry.source is a device r = mount(entry.source, imgmountdir, entry.sourcefs, "") if r != 0: raise subprocess.CalledProcessError(r, "mount") def unpack_image(self, entry, imgmountdir): """ Unpacks image. :param entry: :param imgmountdir: :return: """ def progress_cb(copied, total): """ Copies file to given destination target. :param copied: """ entry.copied = copied if total > entry.total: entry.total = total self.report_progress() try: if entry.is_file(): source = entry.source else: source = imgmountdir return file_copy(source, entry, progress_cb) finally: if not entry.is_file(): subprocess.check_call(["umount", "-l", imgmountdir]) def get_supported_filesystems_kernel(): """ Reads /proc/filesystems (the list of supported filesystems for the current kernel) and returns a list of (names of) those filesystems. """ PATH_PROCFS = '/proc/filesystems' if os.path.isfile(PATH_PROCFS) and os.access(PATH_PROCFS, os.R_OK): with open(PATH_PROCFS, 'r') as procfile: filesystems = procfile.read() filesystems = filesystems.replace( "nodev", "").replace("\t", "").splitlines() return filesystems return [] def get_supported_filesystems(): """ Returns a list of all the supported filesystems (valid values for the *sourcefs* key in an item. """ return ["file"] + get_supported_filesystems_kernel() def run(): """ Unsquash filesystem. """ root_mount_point = globalstorage.value("rootMountPoint") if not root_mount_point: utils.warning("No mount point for root partition") return (_("No mount point for root partition"), _("globalstorage does not contain a \"rootMountPoint\" key, " "doing nothing")) if not os.path.exists(root_mount_point): utils.warning("Bad root mount point \"{}\"".format(root_mount_point)) return (_("Bad mount point for root partition"), _("rootMountPoint is \"{}\", which does not " "exist, doing nothing").format(root_mount_point)) supported_filesystems = get_supported_filesystems() # Bail out before we start when there are obvious problems for entry in job.configuration["unpack"]: source = os.path.abspath(entry["source"]) sourcefs = entry["sourcefs"] if sourcefs not in supported_filesystems: utils.warning("The filesystem for \"{}\" ({}) is not supported by your current kernel".format(source, sourcefs)) utils.warning(" ... modprobe {} may solve the problem".format(sourcefs)) return (_("Bad unsquash configuration"), _("The filesystem for \"{}\" ({}) is not supported by your current kernel").format(source, sourcefs)) if not os.path.exists(source): utils.warning("The source filesystem \"{}\" does not exist".format(source)) return (_("Bad unsquash configuration"), _("The source filesystem \"{}\" does not exist").format(source)) unpack = list() is_first = True for entry in job.configuration["unpack"]: source = os.path.abspath(entry["source"]) sourcefs = entry["sourcefs"] destination = os.path.abspath(root_mount_point + entry["destination"]) if not os.path.isdir(destination) and sourcefs != "file": utils.warning(("The destination \"{}\" in the target system is not a directory").format(destination)) if is_first: return (_("Bad unsquash configuration"), _("The destination \"{}\" in the target system is not a directory").format(destination)) else: utils.debug(".. assuming that the previous targets will create that directory.") unpack.append(UnpackEntry(source, sourcefs, destination)) # Optional settings if entry.get("exclude", None): unpack[-1].exclude = entry["exclude"] if entry.get("excludeFile", None): unpack[-1].excludeFile = entry["excludeFile"] is_first = False unpackop = UnpackOperation(unpack) return unpackop.run() calamares-3.2.20/src/modules/unpackfs/module.desc000066400000000000000000000002071362604102500217220ustar00rootroot00000000000000# Syntax is YAML 1.2 --- type: "job" name: "unpackfs" interface: "python" script: "main.py" requiredModules: - mount calamares-3.2.20/src/modules/unpackfs/runtests.sh000066400000000000000000000012661362604102500220260ustar00rootroot00000000000000#! /bin/sh SRCDIR=$( dirname "$0" ) # For test 3 mkdir /tmp/unpackfs-test-run-rootdir3 # For test 7 mkdir /tmp/unpackfs-test-run-rootdir3/realdest # For test 9 mkdir /tmp/unpackfs-test-run-rootdir3/smalldest if test 0 = $( id -u ) ; then mount -t tmpfs -o size=32M tmpfs /tmp/unpackfs-test-run-rootdir3/smalldest dd if=/dev/zero of=/tmp/unpackfs-test-run-rootdir3/smalldest/bogus.zero bs=1M count=1 fi # Run tests sh "$SRCDIR/../testpythonrun.sh" unpackfs # Cleanup test 9 if test 0 = $( id -u ) ; then umount /tmp/unpackfs-test-run-rootdir3/smalldest fi # Cleanup test 7 rm -rf /tmp/unpackfs-test-run-rootdir3/realdest # Cleanup test 3 rmdir /tmp/unpackfs-test-run-rootdir3 calamares-3.2.20/src/modules/unpackfs/tests/000077500000000000000000000000001362604102500207405ustar00rootroot00000000000000calamares-3.2.20/src/modules/unpackfs/tests/1.global000066400000000000000000000000201362604102500222520ustar00rootroot00000000000000--- bogus: true calamares-3.2.20/src/modules/unpackfs/tests/2.global000066400000000000000000000000641362604102500222630ustar00rootroot00000000000000--- rootMountPoint: /tmp/unpackfs-test-run-rootdir/ calamares-3.2.20/src/modules/unpackfs/tests/3.global000066400000000000000000000000651362604102500222650ustar00rootroot00000000000000--- rootMountPoint: /tmp/unpackfs-test-run-rootdir3/ calamares-3.2.20/src/modules/unpackfs/tests/3.job000066400000000000000000000000171362604102500215740ustar00rootroot00000000000000--- unpack: [] calamares-3.2.20/src/modules/unpackfs/tests/4.global000066400000000000000000000000651362604102500222660ustar00rootroot00000000000000--- rootMountPoint: /tmp/unpackfs-test-run-rootdir3/ calamares-3.2.20/src/modules/unpackfs/tests/4.job000066400000000000000000000000601362604102500215730ustar00rootroot00000000000000--- unpack: - source: . sourcefs: bogus calamares-3.2.20/src/modules/unpackfs/tests/5.global000066400000000000000000000000651362604102500222670ustar00rootroot00000000000000--- rootMountPoint: /tmp/unpackfs-test-run-rootdir3/ calamares-3.2.20/src/modules/unpackfs/tests/5.job000066400000000000000000000001251362604102500215760ustar00rootroot00000000000000--- unpack: - source: ./fakesource sourcefs: ext4 destination: fakedest calamares-3.2.20/src/modules/unpackfs/tests/6.global000066400000000000000000000000651362604102500222700ustar00rootroot00000000000000--- rootMountPoint: /tmp/unpackfs-test-run-rootdir3/ calamares-3.2.20/src/modules/unpackfs/tests/6.job000066400000000000000000000001121362604102500215730ustar00rootroot00000000000000--- unpack: - source: . sourcefs: ext4 destination: fakedest calamares-3.2.20/src/modules/unpackfs/tests/7.global000066400000000000000000000000651362604102500222710ustar00rootroot00000000000000--- rootMountPoint: /tmp/unpackfs-test-run-rootdir3/ calamares-3.2.20/src/modules/unpackfs/tests/7.job000066400000000000000000000001121362604102500215740ustar00rootroot00000000000000--- unpack: - source: . sourcefs: ext4 destination: realdest calamares-3.2.20/src/modules/unpackfs/tests/8.global000066400000000000000000000001161362604102500222670ustar00rootroot00000000000000--- rootMountPoint: /tmp/unpackfs-test-run-rootdir/ localeConf: - LANG: nl calamares-3.2.20/src/modules/unpackfs/tests/8.job000066400000000000000000000001121362604102500215750ustar00rootroot00000000000000--- unpack: - source: . sourcefs: ext4 destination: realdest calamares-3.2.20/src/modules/unpackfs/tests/9.global000066400000000000000000000001611362604102500222700ustar00rootroot00000000000000# This test uses a small destination FS, to make rsync fail --- rootMountPoint: /tmp/unpackfs-test-run-rootdir3/ calamares-3.2.20/src/modules/unpackfs/tests/9.job000066400000000000000000000002071362604102500216030ustar00rootroot00000000000000# This test uses a small destination FS, to make rsync fail --- unpack: - source: . sourcefs: ext4 destination: smalldest calamares-3.2.20/src/modules/unpackfs/unpackfs.conf000066400000000000000000000067131362604102500222660ustar00rootroot00000000000000# Unsquash / unpack a filesystem. Multiple sources are supported, and # they may be squashed or plain filesystems. # # Configuration: # # from globalstorage: rootMountPoint # from job.configuration: the path to where to mount the source image(s) # for copying an ordered list of unpack mappings for image file <-> # target dir relative to rootMountPoint. --- # Each list item is unpacked, in order, to the target system. # # Each list item has the following **mandatory** attributes: # - *source* path relative to the live / intstalling system to the image # - *sourcefs* the type of the source files; valid entries are # - `ext4` (copies the filesystem contents) # - `squashfs` (unsquashes) # - `file` (copies a file or directory) # - (may be others if mount supports it) # - *destination* path relative to rootMountPoint (so in the target # system) where this filesystem is unpacked. It may be an # empty string, which effectively is / (the root) of the target # system. # # Each list item **optionally** can include the following attributes: # - *exclude* is a list of values that is expanded into --exclude # arguments for rsync (each entry in exclude gets its own --exclude). # - *excludeFile* is a single file that is passed to rsync as an # --exclude-file argument. This should be a full pathname # inside the **host** filesystem. # # EXAMPLES # # Usually you list a filesystem image to unpack; you can use # squashfs or an ext4 image. An empty destination is equivalent to "/", # the root of the target system. The destination directory must exist # in the target system. # # - source: "/path/to/filesystem.sqfs" # sourcefs: "squashfs" # destination: "" # # Multiple entries are unpacked in-order; if there is more than one # item then only the first must exist beforehand -- it's ok to # create directories with one unsquash and then to use those # directories as a target from a second unsquash. # # - source: "/path/to/another/filesystem.img" # sourcefs: "ext4" # destination: "" # - source: "/path/to/another/filesystem2.img" # sourcefs: "ext4" # destination: "/usr/lib/extra" # # You can list filesystem source paths relative to the Calamares run # directory, if you use -d (this is only useful for testing, though). # # - source: ./example.sqfs # sourcefs: squashfs # destination: "" # # You can list individual files (copied one-by-one), or directories # (the files inside this directory are copied directly to the destination, # so no "dummycpp/" subdirectory is created in this example). # Do note that the target directory must exist already (e.g. from # extracting some other filesystem). # # - source: ../CHANGES # sourcefs: file # destination: "/tmp/derp" # - source: ../src/modules/dummycpp # sourcefs: file # destination: "/tmp/derp" # # The *destination* and *source* are handed off to rsync, so the semantics # of trailing slashes apply. In order to *rename* a file as it is # copied, specify one single file (e.g. CHANGES) and a full pathname # for its destination name, as in the example below. unpack: - source: ../CHANGES sourcefs: file destination: "/tmp/changes.txt" - source: src/qml/calamares/slideshow sourcefs: file destination: "/tmp/slideshow/" exclude: [ "*.qmlc", "qmldir" ] # excludeFile: /etc/calamares/modules/unpackfs/exclude-list.txt calamares-3.2.20/src/modules/users/000077500000000000000000000000001362604102500171255ustar00rootroot00000000000000calamares-3.2.20/src/modules/users/CMakeLists.txt000066400000000000000000000024111362604102500216630ustar00rootroot00000000000000find_package( Qt5 ${QT_VERSION} CONFIG REQUIRED Core DBus Network ) find_package( Crypt REQUIRED ) # Add optional libraries here set( USER_EXTRA_LIB ) find_package( LibPWQuality ) set_package_properties( LibPWQuality PROPERTIES PURPOSE "Extra checks of password quality" ) if( LibPWQuality_FOUND ) list( APPEND USER_EXTRA_LIB ${LibPWQuality_LIBRARIES} ) include_directories( ${LibPWQuality_INCLUDE_DIRS} ) add_definitions( -DCHECK_PWQUALITY -DHAVE_LIBPWQUALITY ) endif() include_directories( ${PROJECT_BINARY_DIR}/src/libcalamaresui ) calamares_add_plugin( users TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES CreateUserJob.cpp SetPasswordJob.cpp UsersViewStep.cpp UsersPage.cpp SetHostNameJob.cpp CheckPWQuality.cpp UI page_usersetup.ui RESOURCES users.qrc LINK_PRIVATE_LIBRARIES calamaresui ${CRYPT_LIBRARIES} ${USER_EXTRA_LIB} Qt5::DBus SHARED_LIB ) calamares_add_test( userspasswordtest SOURCES PasswordTests.cpp SetPasswordJob.cpp LIBRARIES ${CRYPT_LIBRARIES} ) calamares_add_test( userstest SOURCES Tests.cpp SetHostNameJob.cpp LIBRARIES Qt5::DBus ) calamares-3.2.20/src/modules/users/CheckPWQuality.cpp000066400000000000000000000350171362604102500224740ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "CheckPWQuality.h" #include "utils/Logger.h" #include #include #include #ifdef HAVE_LIBPWQUALITY #include #endif #include PasswordCheck::PasswordCheck() : m_weight( 0 ) , m_message() , m_accept( []( const QString& ) { return true; } ) { } PasswordCheck::PasswordCheck( MessageFunc m, AcceptFunc a, Weight weight ) : m_weight( weight ) , m_message( m ) , m_accept( a ) { } DEFINE_CHECK_FUNC( minLength ) { int minLength = -1; if ( value.canConvert( QVariant::Int ) ) { minLength = value.toInt(); } if ( minLength > 0 ) { cDebug() << Logger::SubEntry << "minLength set to" << minLength; checks.push_back( PasswordCheck( []() { return QCoreApplication::translate( "PWQ", "Password is too short" ); }, [minLength]( const QString& s ) { return s.length() >= minLength; }, PasswordCheck::Weight( 10 ) ) ); } } DEFINE_CHECK_FUNC( maxLength ) { int maxLength = -1; if ( value.canConvert( QVariant::Int ) ) { maxLength = value.toInt(); } if ( maxLength > 0 ) { cDebug() << Logger::SubEntry << "maxLength set to" << maxLength; checks.push_back( PasswordCheck( []() { return QCoreApplication::translate( "PWQ", "Password is too long" ); }, [maxLength]( const QString& s ) { return s.length() <= maxLength; }, PasswordCheck::Weight( 10 ) ) ); } } #ifdef HAVE_LIBPWQUALITY /* NOTE: * * The munge*() functions are here because libpwquality uses void* to * represent user-data in callbacks and as a general "pass some parameter" * type. These need to be munged to the right C++ type. */ /// @brief Handle libpwquality using void* to represent a long static inline long mungeLong( void* p ) { return static_cast< long >( reinterpret_cast< intptr_t >( p ) ); } /// @brief Handle libpwquality using void* to represent a char* static inline const char* mungeString( void* p ) { return reinterpret_cast< const char* >( p ); } /** * Class that acts as a RAII placeholder for pwquality_settings_t pointers. * Gets a new pointer and ensures it is deleted only once; provides * convenience functions for setting options and checking passwords. */ class PWSettingsHolder { public: static constexpr int arbitrary_minimum_strength = 40; PWSettingsHolder() : m_settings( pwquality_default_settings() ) , m_auxerror( nullptr ) { } ~PWSettingsHolder() { pwquality_free_settings( m_settings ); } /// Sets an option via the configuration string @p v, = style. int set( const QString& v ) { return pwquality_set_option( m_settings, v.toUtf8().constData() ); } /// Checks the given password @p pwd against the current configuration int check( const QString& pwd ) { void* auxerror = nullptr; int r = pwquality_check( m_settings, pwd.toUtf8().constData(), nullptr, nullptr, &auxerror ); m_rv = r; return r; } bool hasExplanation() const { return m_rv < 0; } /* This is roughly the same as the function pwquality_strerror, * only with QStrings instead, and using the Qt translation scheme. * It is used under the terms of the GNU GPL v3 or later, as * allowed by the libpwquality license (LICENSES/GPLv2+-libpwquality) */ QString explanation() { void* auxerror = m_auxerror; m_auxerror = nullptr; if ( m_rv >= arbitrary_minimum_strength ) { return QString(); } if ( m_rv >= 0 ) { return QCoreApplication::translate( "PWQ", "Password is too weak" ); } switch ( m_rv ) { case PWQ_ERROR_MEM_ALLOC: if ( auxerror ) { QString s = QCoreApplication::translate( "PWQ", "Memory allocation error when setting '%1'" ) .arg( mungeString( auxerror ) ); free( auxerror ); return s; } return QCoreApplication::translate( "PWQ", "Memory allocation error" ); case PWQ_ERROR_SAME_PASSWORD: return QCoreApplication::translate( "PWQ", "The password is the same as the old one" ); case PWQ_ERROR_PALINDROME: return QCoreApplication::translate( "PWQ", "The password is a palindrome" ); case PWQ_ERROR_CASE_CHANGES_ONLY: return QCoreApplication::translate( "PWQ", "The password differs with case changes only" ); case PWQ_ERROR_TOO_SIMILAR: return QCoreApplication::translate( "PWQ", "The password is too similar to the old one" ); case PWQ_ERROR_USER_CHECK: return QCoreApplication::translate( "PWQ", "The password contains the user name in some form" ); case PWQ_ERROR_GECOS_CHECK: return QCoreApplication::translate( "PWQ", "The password contains words from the real name of the user in some form" ); case PWQ_ERROR_BAD_WORDS: return QCoreApplication::translate( "PWQ", "The password contains forbidden words in some form" ); case PWQ_ERROR_MIN_DIGITS: if ( auxerror ) { return QCoreApplication::translate( "PWQ", "The password contains less than %1 digits" ) .arg( mungeLong( auxerror ) ); } return QCoreApplication::translate( "PWQ", "The password contains too few digits" ); case PWQ_ERROR_MIN_UPPERS: if ( auxerror ) { return QCoreApplication::translate( "PWQ", "The password contains less than %1 uppercase letters" ) .arg( mungeLong( auxerror ) ); } return QCoreApplication::translate( "PWQ", "The password contains too few uppercase letters" ); case PWQ_ERROR_MIN_LOWERS: if ( auxerror ) { return QCoreApplication::translate( "PWQ", "The password contains less than %1 lowercase letters" ) .arg( mungeLong( auxerror ) ); } return QCoreApplication::translate( "PWQ", "The password contains too few lowercase letters" ); case PWQ_ERROR_MIN_OTHERS: if ( auxerror ) { return QCoreApplication::translate( "PWQ", "The password contains less than %1 non-alphanumeric characters" ) .arg( mungeLong( auxerror ) ); } return QCoreApplication::translate( "PWQ", "The password contains too few non-alphanumeric characters" ); case PWQ_ERROR_MIN_LENGTH: if ( auxerror ) { return QCoreApplication::translate( "PWQ", "The password is shorter than %1 characters" ) .arg( mungeLong( auxerror ) ); } return QCoreApplication::translate( "PWQ", "The password is too short" ); case PWQ_ERROR_ROTATED: return QCoreApplication::translate( "PWQ", "The password is just rotated old one" ); case PWQ_ERROR_MIN_CLASSES: if ( auxerror ) { return QCoreApplication::translate( "PWQ", "The password contains less than %1 character classes" ) .arg( mungeLong( auxerror ) ); } return QCoreApplication::translate( "PWQ", "The password does not contain enough character classes" ); case PWQ_ERROR_MAX_CONSECUTIVE: if ( auxerror ) { return QCoreApplication::translate( "PWQ", "The password contains more than %1 same characters consecutively" ) .arg( mungeLong( auxerror ) ); } return QCoreApplication::translate( "PWQ", "The password contains too many same characters consecutively" ); case PWQ_ERROR_MAX_CLASS_REPEAT: if ( auxerror ) { return QCoreApplication::translate( "PWQ", "The password contains more than %1 characters of the same class consecutively" ) .arg( mungeLong( auxerror ) ); } return QCoreApplication::translate( "PWQ", "The password contains too many characters of the same class consecutively" ); case PWQ_ERROR_MAX_SEQUENCE: if ( auxerror ) { return QCoreApplication::translate( "PWQ", "The password contains monotonic sequence longer than %1 characters" ) .arg( mungeLong( auxerror ) ); } return QCoreApplication::translate( "PWQ", "The password contains too long of a monotonic character sequence" ); case PWQ_ERROR_EMPTY_PASSWORD: return QCoreApplication::translate( "PWQ", "No password supplied" ); case PWQ_ERROR_RNG: return QCoreApplication::translate( "PWQ", "Cannot obtain random numbers from the RNG device" ); case PWQ_ERROR_GENERATION_FAILED: return QCoreApplication::translate( "PWQ", "Password generation failed - required entropy too low for settings" ); case PWQ_ERROR_CRACKLIB_CHECK: if ( auxerror ) { /* Here the string comes from cracklib, don't free? */ return QCoreApplication::translate( "PWQ", "The password fails the dictionary check - %1" ) .arg( mungeString( auxerror ) ); } return QCoreApplication::translate( "PWQ", "The password fails the dictionary check" ); case PWQ_ERROR_UNKNOWN_SETTING: if ( auxerror ) { QString s = QCoreApplication::translate( "PWQ", "Unknown setting - %1" ).arg( mungeString( auxerror ) ); free( auxerror ); return s; } return QCoreApplication::translate( "PWQ", "Unknown setting" ); case PWQ_ERROR_INTEGER: if ( auxerror ) { QString s = QCoreApplication::translate( "PWQ", "Bad integer value of setting - %1" ) .arg( mungeString( auxerror ) ); free( auxerror ); return s; } return QCoreApplication::translate( "PWQ", "Bad integer value" ); case PWQ_ERROR_NON_INT_SETTING: if ( auxerror ) { QString s = QCoreApplication::translate( "PWQ", "Setting %1 is not of integer type" ) .arg( mungeString( auxerror ) ); free( auxerror ); return s; } return QCoreApplication::translate( "PWQ", "Setting is not of integer type" ); case PWQ_ERROR_NON_STR_SETTING: if ( auxerror ) { QString s = QCoreApplication::translate( "PWQ", "Setting %1 is not of string type" ) .arg( mungeString( auxerror ) ); free( auxerror ); return s; } return QCoreApplication::translate( "PWQ", "Setting is not of string type" ); case PWQ_ERROR_CFGFILE_OPEN: return QCoreApplication::translate( "PWQ", "Opening the configuration file failed" ); case PWQ_ERROR_CFGFILE_MALFORMED: return QCoreApplication::translate( "PWQ", "The configuration file is malformed" ); case PWQ_ERROR_FATAL_FAILURE: return QCoreApplication::translate( "PWQ", "Fatal failure" ); default: return QCoreApplication::translate( "PWQ", "Unknown error" ); } } private: pwquality_settings_t* m_settings; int m_rv; void* m_auxerror; }; DEFINE_CHECK_FUNC( libpwquality ) { if ( !value.canConvert( QVariant::List ) ) { cWarning() << "libpwquality settings is not a list"; return; } QVariantList l = value.toList(); unsigned int requirement_count = 0; auto settings = std::make_shared< PWSettingsHolder >(); for ( const auto& v : l ) { if ( v.type() == QVariant::String ) { QString option = v.toString(); int r = settings->set( option ); if ( r ) { cWarning() << "unrecognized libpwquality setting" << option; } else { cDebug() << Logger::SubEntry << "libpwquality setting" << option; ++requirement_count; } } else { cWarning() << "unrecognized libpwquality setting" << v; } } /* Something actually added? */ if ( requirement_count ) { checks.push_back( PasswordCheck( [settings]() { return settings->explanation(); }, [settings]( const QString& s ) { int r = settings->check( s ); if ( r < 0 ) { cWarning() << "libpwquality error" << r; } else if ( r < settings->arbitrary_minimum_strength ) { cDebug() << "Password strength" << r << "too low"; } return r >= settings->arbitrary_minimum_strength; }, PasswordCheck::Weight( 100 ) ) ); } } #endif calamares-3.2.20/src/modules/users/CheckPWQuality.h000066400000000000000000000060721362604102500221400ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef CHECKPWQUALITY_H #define CHECKPWQUALITY_H #include #include #include #include /** * Support for (dynamic) checks on the password's validity. * This can be used to implement password requirements like * "at least 6 characters". Function addPasswordCheck() * instantiates these and adds them to the list of checks. */ class PasswordCheck { public: /** Return true if the string is acceptable. */ using AcceptFunc = std::function< bool( const QString& ) >; using MessageFunc = std::function< QString() >; using Weight = size_t; /** @brief Generate a @p message if @p filter returns true * * When @p filter returns true on the proposed password, the * password is accepted (by this check). If false, then the * @p message will be shown to the user. * * @p weight is used to order the checks (low-weight goes first). */ PasswordCheck( MessageFunc message, AcceptFunc filter, Weight weight = 1000 ); /** @brief Null check, always accepts, no message */ PasswordCheck(); /** Applies this check to the given password string @p s * and returns an empty string if the password is ok * according to this filter. Returns a message describing * what is wrong if not. */ QString filter( const QString& s ) const { return m_accept( s ) ? QString() : m_message(); } Weight weight() const { return m_weight; } bool operator<( const PasswordCheck& other ) const { return weight() < other.weight(); } private: Weight m_weight; MessageFunc m_message; AcceptFunc m_accept; }; using PasswordCheckList = QVector< PasswordCheck >; /* Each of these functions adds a check (if possible) to the list * of checks; they use the configuration value(s) from the * variant. If the value doesn't make sense, each function * may skip adding a check, and do nothing (it should log * an error, though). */ #define _xDEFINE_CHECK_FUNC( x ) add_check_##x( PasswordCheckList& checks, const QVariant& value ) #define DEFINE_CHECK_FUNC( x ) void _xDEFINE_CHECK_FUNC( x ) #define DECLARE_CHECK_FUNC( x ) void _xDEFINE_CHECK_FUNC( x ); DECLARE_CHECK_FUNC( minLength ) DECLARE_CHECK_FUNC( maxLength ) #ifdef HAVE_LIBPWQUALITY DECLARE_CHECK_FUNC( libpwquality ) #endif #endif calamares-3.2.20/src/modules/users/CreateUserJob.cpp000066400000000000000000000146441362604102500223370ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2016, Teo Mrnjavac * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include #include #include #include #include #include CreateUserJob::CreateUserJob( const QString& userName, const QString& fullName, bool autologin, const QStringList& defaultGroups ) : Calamares::Job() , m_userName( userName ) , m_fullName( fullName ) , m_autologin( autologin ) , m_defaultGroups( defaultGroups ) { } QString CreateUserJob::prettyName() const { return tr( "Create user %1" ).arg( m_userName ); } QString CreateUserJob::prettyDescription() const { return tr( "Create user %1." ).arg( m_userName ); } QString CreateUserJob::prettyStatusMessage() const { return tr( "Creating user %1." ).arg( m_userName ); } Calamares::JobResult CreateUserJob::exec() { Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); QDir destDir( gs->value( "rootMountPoint" ).toString() ); if ( gs->contains( "sudoersGroup" ) && !gs->value( "sudoersGroup" ).toString().isEmpty() ) { cDebug() << "[CREATEUSER]: preparing sudoers"; QFileInfo sudoersFi( destDir.absoluteFilePath( "etc/sudoers.d/10-installer" ) ); if ( !sudoersFi.absoluteDir().exists() ) { return Calamares::JobResult::error( tr( "Sudoers dir is not writable." ) ); } QFile sudoersFile( sudoersFi.absoluteFilePath() ); if ( !sudoersFile.open( QIODevice::WriteOnly | QIODevice::Text ) ) { return Calamares::JobResult::error( tr( "Cannot create sudoers file for writing." ) ); } QString sudoersGroup = gs->value( "sudoersGroup" ).toString(); QTextStream sudoersOut( &sudoersFile ); sudoersOut << QString( "%%1 ALL=(ALL) ALL\n" ).arg( sudoersGroup ); if ( QProcess::execute( "chmod", { "440", sudoersFi.absoluteFilePath() } ) ) return Calamares::JobResult::error( tr( "Cannot chmod sudoers file." ) ); } cDebug() << "[CREATEUSER]: preparing groups"; QFileInfo groupsFi( destDir.absoluteFilePath( "etc/group" ) ); QFile groupsFile( groupsFi.absoluteFilePath() ); if ( !groupsFile.open( QIODevice::ReadOnly | QIODevice::Text ) ) { return Calamares::JobResult::error( tr( "Cannot open groups file for reading." ) ); } QString groupsData = QString::fromLocal8Bit( groupsFile.readAll() ); QStringList groupsLines = groupsData.split( '\n' ); for ( QStringList::iterator it = groupsLines.begin(); it != groupsLines.end(); ++it ) { int indexOfFirstToDrop = it->indexOf( ':' ); it->truncate( indexOfFirstToDrop ); } foreach ( const QString& group, m_defaultGroups ) if ( !groupsLines.contains( group ) ) CalamaresUtils::System::instance()->targetEnvCall( { "groupadd", group } ); QString defaultGroups = m_defaultGroups.join( ',' ); if ( m_autologin ) { QString autologinGroup; if ( gs->contains( "autologinGroup" ) && !gs->value( "autologinGroup" ).toString().isEmpty() ) { autologinGroup = gs->value( "autologinGroup" ).toString(); CalamaresUtils::System::instance()->targetEnvCall( { "groupadd", autologinGroup } ); defaultGroups.append( QString( ",%1" ).arg( autologinGroup ) ); } } // If we're looking to reuse the contents of an existing /home if ( gs->value( "reuseHome" ).toBool() ) { QString shellFriendlyHome = "/home/" + m_userName; QDir existingHome( destDir.absolutePath() + shellFriendlyHome ); if ( existingHome.exists() ) { QString backupDirName = "dotfiles_backup_" + QDateTime::currentDateTime().toString( "yyyy-MM-dd_HH-mm-ss" ); existingHome.mkdir( backupDirName ); CalamaresUtils::System::instance()->targetEnvCall( { "sh", "-c", "mv -f " + shellFriendlyHome + "/.* " + shellFriendlyHome + "/" + backupDirName } ); } } cDebug() << "[CREATEUSER]: creating user"; QStringList useradd { "useradd", "-m", "-U" }; QString shell = gs->value( "userShell" ).toString(); if ( !shell.isEmpty() ) { useradd << "-s" << shell; } useradd << "-c" << m_fullName; useradd << m_userName; auto commandResult = CalamaresUtils::System::instance()->targetEnvCommand( useradd ); if ( commandResult.getExitCode() ) { cError() << "useradd failed" << commandResult.getExitCode(); return commandResult.explainProcess( useradd, std::chrono::seconds( 10 ) /* bogus timeout */ ); } commandResult = CalamaresUtils::System::instance()->targetEnvCommand( { "usermod", "-aG", defaultGroups, m_userName } ); if ( commandResult.getExitCode() ) { cError() << "usermod failed" << commandResult.getExitCode(); return commandResult.explainProcess( "usermod", std::chrono::seconds( 10 ) /* bogus timeout */ ); } QString userGroup = QString( "%1:%2" ).arg( m_userName ).arg( m_userName ); QString homeDir = QString( "/home/%1" ).arg( m_userName ); commandResult = CalamaresUtils::System::instance()->targetEnvCommand( { "chown", "-R", userGroup, homeDir } ); if ( commandResult.getExitCode() ) { cError() << "chown failed" << commandResult.getExitCode(); return commandResult.explainProcess( "chown", std::chrono::seconds( 10 ) /* bogus timeout */ ); } return Calamares::JobResult::ok(); } calamares-3.2.20/src/modules/users/CreateUserJob.h000066400000000000000000000025701362604102500217770ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef CREATEUSERJOB_H #define CREATEUSERJOB_H #include #include class CreateUserJob : public Calamares::Job { Q_OBJECT public: CreateUserJob( const QString& userName, const QString& fullName, bool autologin, const QStringList& defaultGroups ); QString prettyName() const override; QString prettyDescription() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; private: QString m_userName; QString m_fullName; bool m_autologin; QStringList m_defaultGroups; }; #endif /* CREATEUSERJOB_H */ calamares-3.2.20/src/modules/users/PasswordTests.cpp000066400000000000000000000027161362604102500224640ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2017, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "SetPasswordJob.h" #include "PasswordTests.h" #include QTEST_GUILESS_MAIN( PasswordTests ) PasswordTests::PasswordTests() {} PasswordTests::~PasswordTests() {} void PasswordTests::initTestCase() { } void PasswordTests::testSalt() { QString s = SetPasswordJob::make_salt( 8 ); QCOMPARE( s.length(), 4 + 8 ); // 8 salt chars, plus $6$, plus trailing $ QVERIFY( s.startsWith( "$6$" ) ); QVERIFY( s.endsWith( '$' ) ); qDebug() << "Obtained salt" << s; s = SetPasswordJob::make_salt( 11 ); QCOMPARE( s.length(), 4 + 11 ); QVERIFY( s.startsWith( "$6$" ) ); QVERIFY( s.endsWith( '$' ) ); qDebug() << "Obtained salt" << s; } calamares-3.2.20/src/modules/users/PasswordTests.h000066400000000000000000000020331362604102500221210ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2017, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef PASSWORDTESTS_H #define PASSWORDTESTS_H #include class PasswordTests : public QObject { Q_OBJECT public: PasswordTests(); ~PasswordTests() override; private Q_SLOTS: void initTestCase(); void testSalt(); }; #endif calamares-3.2.20/src/modules/users/SetHostNameJob.cpp000066400000000000000000000114331362604102500224600ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Rohan Garg * Copyright 2015, Teo Mrnjavac * Copyright 2018, 2020, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "SetHostNameJob.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include #include #include #include #include using WriteMode = CalamaresUtils::System::WriteMode; SetHostNameJob::SetHostNameJob( const QString& hostname, Actions a ) : Calamares::Job() , m_hostname( hostname ) , m_actions( a ) { } QString SetHostNameJob::prettyName() const { return tr( "Set hostname %1" ).arg( m_hostname ); } QString SetHostNameJob::prettyDescription() const { return tr( "Set hostname %1." ).arg( m_hostname ); } QString SetHostNameJob::prettyStatusMessage() const { return tr( "Setting hostname %1." ).arg( m_hostname ); } STATICTEST bool setFileHostname( const QString& hostname ) { return CalamaresUtils::System::instance()->createTargetFile( QStringLiteral( "/etc/hostname" ), ( hostname + '\n' ).toUtf8(), WriteMode::Overwrite ); } STATICTEST bool writeFileEtcHosts( const QString& hostname ) { // The actual hostname gets substituted in at %1 static const char etc_hosts[] = R"(# Host addresses 127.0.0.1 localhost 127.0.1.1 %1 ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters )"; return CalamaresUtils::System::instance()->createTargetFile( QStringLiteral( "/etc/hosts" ), QString( etc_hosts ).arg( hostname ).toUtf8(), WriteMode::Overwrite ); } STATICTEST bool setSystemdHostname( const QString& hostname ) { QDBusInterface hostnamed( "org.freedesktop.hostname1", "/org/freedesktop/hostname1", "org.freedesktop.hostname1", QDBusConnection::systemBus() ); if ( !hostnamed.isValid() ) { cWarning() << "Interface" << hostnamed.interface() << "is not valid."; return false; } bool success = true; // Static, writes /etc/hostname { QDBusReply< void > r = hostnamed.call( "SetStaticHostname", hostname, false ); if ( !r.isValid() ) { cWarning() << "Could not set hostname through org.freedesktop.hostname1.SetStaticHostname." << r.error(); success = false; } } // Dynamic, updates kernel { QDBusReply< void > r = hostnamed.call( "SetHostname", hostname, false ); if ( !r.isValid() ) { cWarning() << "Could not set hostname through org.freedesktop.hostname1.SetHostname." << r.error(); success = false; } } return success; } Calamares::JobResult SetHostNameJob::exec() { Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); if ( !gs || !gs->contains( "rootMountPoint" ) ) { cError() << "No rootMountPoint in global storage"; return Calamares::JobResult::error( tr( "Internal Error" ) ); } QString destDir = gs->value( "rootMountPoint" ).toString(); if ( !QDir( destDir ).exists() ) { cError() << "rootMountPoint points to a dir which does not exist"; return Calamares::JobResult::error( tr( "Internal Error" ) ); } if ( m_actions & Action::EtcHostname ) { if ( !setFileHostname( m_hostname ) ) { cError() << "Can't write to hostname file"; return Calamares::JobResult::error( tr( "Cannot write hostname to target system" ) ); } } if ( m_actions & Action::WriteEtcHosts ) { if ( !writeFileEtcHosts( m_hostname ) ) { cError() << "Can't write to hosts file"; return Calamares::JobResult::error( tr( "Cannot write hostname to target system" ) ); } } if ( m_actions & Action::SystemdHostname ) { // Does its own logging setSystemdHostname( m_hostname ); } return Calamares::JobResult::ok(); } calamares-3.2.20/src/modules/users/SetHostNameJob.h000066400000000000000000000032711362604102500221260ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Rohan Garg * Copyright 2015, Teo Mrnjavac * Copyright 2020, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef SETHOSTNAMEJOB_CPP_H #define SETHOSTNAMEJOB_CPP_H #include class SetHostNameJob : public Calamares::Job { Q_OBJECT public: enum Action { None = 0x0, EtcHostname = 0x1, // Write to /etc/hostname directly SystemdHostname = 0x2, // Set via hostnamed(1) WriteEtcHosts = 0x4 // Write /etc/hosts (127.0.1.1 is this host) }; Q_DECLARE_FLAGS( Actions, Action ) SetHostNameJob( const QString& hostname, Actions a ); QString prettyName() const override; QString prettyDescription() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; private: const QString m_hostname; const Actions m_actions; }; Q_DECLARE_OPERATORS_FOR_FLAGS( SetHostNameJob::Actions ) #endif // SETHOSTNAMEJOB_CPP_H calamares-3.2.20/src/modules/users/SetPasswordJob.cpp000066400000000000000000000071341362604102500225470ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2017, Teo Mrnjavac * Copyright 2017, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Entropy.h" #include "utils/Logger.h" #include #include #ifndef NO_CRYPT_H #include #endif #include SetPasswordJob::SetPasswordJob( const QString& userName, const QString& newPassword ) : Calamares::Job() , m_userName( userName ) , m_newPassword( newPassword ) { } QString SetPasswordJob::prettyName() const { return tr( "Set password for user %1" ).arg( m_userName ); } QString SetPasswordJob::prettyStatusMessage() const { return tr( "Setting password for user %1." ).arg( m_userName ); } /// Returns a modular hashing salt for method 6 (SHA512) with a 16 character random salt. QString SetPasswordJob::make_salt( int length ) { Q_ASSERT( length >= 8 ); Q_ASSERT( length <= 128 ); QString salt_string; CalamaresUtils::EntropySource source = CalamaresUtils::getPrintableEntropy( length, salt_string ); if ( salt_string.length() != length ) { cWarning() << "getPrintableEntropy returned string of length" << salt_string.length() << "expected" << length; salt_string.truncate( length ); } if ( source != CalamaresUtils::EntropySource::URandom ) { cWarning() << "Entropy data for salt is low-quality."; } salt_string.insert( 0, "$6$" ); salt_string.append( '$' ); return salt_string; } Calamares::JobResult SetPasswordJob::exec() { Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); QDir destDir( gs->value( "rootMountPoint" ).toString() ); if ( !destDir.exists() ) return Calamares::JobResult::error( tr( "Bad destination system path." ), tr( "rootMountPoint is %1" ).arg( destDir.absolutePath() ) ); if ( m_userName == "root" && m_newPassword.isEmpty() ) //special case for disabling root account { int ec = CalamaresUtils::System::instance()->targetEnvCall( { "passwd", "-dl", m_userName } ); if ( ec ) return Calamares::JobResult::error( tr( "Cannot disable root account." ), tr( "passwd terminated with error code %1." ).arg( ec ) ); return Calamares::JobResult::ok(); } QString encrypted = QString::fromLatin1( crypt( m_newPassword.toUtf8(), make_salt( 16 ).toUtf8() ) ); int ec = CalamaresUtils::System::instance()->targetEnvCall( { "usermod", "-p", encrypted, m_userName } ); if ( ec ) return Calamares::JobResult::error( tr( "Cannot set password for user %1." ).arg( m_userName ), tr( "usermod terminated with error code %1." ).arg( ec ) ); return Calamares::JobResult::ok(); } calamares-3.2.20/src/modules/users/SetPasswordJob.h000066400000000000000000000024661362604102500222170ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2017, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef SETPASSWORDJOB_H #define SETPASSWORDJOB_H #include class SetPasswordJob : public Calamares::Job { Q_OBJECT public: SetPasswordJob( const QString& userName, const QString& newPassword ); QString prettyName() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; static QString make_salt( int length ); private: QString m_userName; QString m_newPassword; }; #endif /* SETPASSWORDJOB_H */ calamares-3.2.20/src/modules/users/Tests.cpp000066400000000000000000000102361362604102500207350ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2020, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "SetHostNameJob.h" // Implementation details extern bool setFileHostname( const QString& ); extern bool writeFileEtcHosts( const QString& ); extern bool setSystemdHostname( const QString& ); #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include "utils/Yaml.h" #include #include class UsersTests : public QObject { Q_OBJECT public: UsersTests(); virtual ~UsersTests() {} private Q_SLOTS: void initTestCase(); void testEtcHostname(); void testEtcHosts(); void testHostnamed(); void cleanup(); private: QTemporaryDir m_dir; }; UsersTests::UsersTests() : m_dir( QStringLiteral( "/tmp/calamares-usertest" ) ) { } void UsersTests::initTestCase() { Logger::setupLogLevel( Logger::LOGDEBUG ); cDebug() << "Users test started."; cDebug() << "Test dir" << m_dir.path(); // Ensure we have a system object, expect it to be a "bogus" one CalamaresUtils::System* system = CalamaresUtils::System::instance(); QVERIFY( system ); QVERIFY( system->doChroot() ); // Ensure we have a system-wide GlobalStorage with /tmp as root if ( !Calamares::JobQueue::instance() ) { cDebug() << "Creating new JobQueue"; (void)new Calamares::JobQueue(); } Calamares::GlobalStorage* gs = Calamares::JobQueue::instance() ? Calamares::JobQueue::instance()->globalStorage() : nullptr; QVERIFY( gs ); gs->insert( "rootMountPoint", m_dir.path() ); } void UsersTests::testEtcHostname() { cDebug() << "Test dir" << m_dir.path(); QVERIFY( QFile::exists( m_dir.path() ) ); QVERIFY( !QFile::exists( m_dir.filePath( "etc" ) ) ); // Doesn't create intermediate directories QVERIFY( !setFileHostname( QStringLiteral( "tubophone.calamares.io" ) ) ); QVERIFY( CalamaresUtils::System::instance()->createTargetDirs( "/etc" ) ); QVERIFY( QFile::exists( m_dir.filePath( "etc" ) ) ); // Does write the file QVERIFY( setFileHostname( QStringLiteral( "tubophone.calamares.io" ) ) ); QVERIFY( QFile::exists( m_dir.filePath( "etc/hostname" ) ) ); // 22 for the test string, above, and 1 for the newline QCOMPARE( QFileInfo( m_dir.filePath( "etc/hostname" ) ).size(), 22 + 1 ); } void UsersTests::testEtcHosts() { // Assume previous tests did their work QVERIFY( QFile::exists( m_dir.path() ) ); QVERIFY( QFile::exists( m_dir.filePath( "etc" ) ) ); QVERIFY( writeFileEtcHosts( QStringLiteral( "tubophone.calamares.io" ) ) ); QVERIFY( QFile::exists( m_dir.filePath( "etc/hosts" ) ) ); // The skeleton contains %1 which has the hostname substituted in, so we lose two, // and the rest of the blabla is 150 (according to Python) QCOMPARE( QFileInfo( m_dir.filePath( "etc/hosts" ) ).size(), 150 + 22 - 2 ); } void UsersTests::testHostnamed() { // Since the service might not be running (e.g. non-systemd systems, // FreeBSD, docker, ..) we're not going to fail a test here. // There's also the permissions problem to think of. QEXPECT_FAIL( "", "Hostname changes are access-controlled", Continue ); QVERIFY( setSystemdHostname( "tubophone.calamares.io" ) ); } void UsersTests::cleanup() { if ( QTest::currentTestFailed() ) { m_dir.setAutoRemove( false ); } } QTEST_GUILESS_MAIN( UsersTests ) #include "utils/moc-warnings.h" #include "Tests.moc" calamares-3.2.20/src/modules/users/UsersPage.cpp000066400000000000000000000435341362604102500215400ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2017, Teo Mrnjavac * Copyright 2017-2018, Adriaan de Groot * Copyright 2019, Collabora Ltd * Copyright 2020, Gabriel Craciunescu * * Portions from the Manjaro Installation Framework * by Roland Singer * Copyright (C) 2007 Free Software Foundation, Inc. * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "UsersPage.h" #include "ui_page_usersetup.h" #include "CreateUserJob.h" #include "SetHostNameJob.h" #include "SetPasswordJob.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "Settings.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" #include "utils/Retranslator.h" #include "utils/String.h" #include #include #include #include #include #include static const QRegExp USERNAME_RX( "^[a-z_][a-z0-9_-]*[$]?$" ); static const QRegExp HOSTNAME_RX( "^[a-zA-Z0-9][-a-zA-Z0-9_]*$" ); static constexpr const int USERNAME_MAX_LENGTH = 31; static constexpr const int HOSTNAME_MIN_LENGTH = 2; static constexpr const int HOSTNAME_MAX_LENGTH = 63; /** @brief How bad is the error for labelError() ? */ enum class Badness { Fatal, Warning }; /** Add an error message and pixmap to a label. */ static inline void labelError( QLabel* pix, QLabel* label, const QString& message, Badness bad = Badness::Fatal ) { label->setText( message ); pix->setPixmap( CalamaresUtils::defaultPixmap( ( bad == Badness::Fatal ) ? CalamaresUtils::StatusError : CalamaresUtils::StatusWarning, CalamaresUtils::Original, label->size() ) ); } /** Clear error, indicate OK on a label. */ static inline void labelOk( QLabel* pix, QLabel* label ) { label->clear(); pix->setPixmap( CalamaresUtils::defaultPixmap( CalamaresUtils::Yes, CalamaresUtils::Original, label->size() ) ); } UsersPage::UsersPage( QWidget* parent ) : QWidget( parent ) , ui( new Ui::Page_UserSetup ) , m_readyFullName( false ) , m_readyUsername( false ) , m_readyHostname( false ) , m_readyPassword( false ) , m_readyRootPassword( false ) , m_writeRootPassword( true ) { ui->setupUi( this ); // Connect signals and slots connect( ui->textBoxFullName, &QLineEdit::textEdited, this, &UsersPage::onFullNameTextEdited ); connect( ui->textBoxUsername, &QLineEdit::textEdited, this, &UsersPage::onUsernameTextEdited ); connect( ui->textBoxHostname, &QLineEdit::textEdited, this, &UsersPage::onHostnameTextEdited ); connect( ui->textBoxUserPassword, &QLineEdit::textChanged, this, &UsersPage::onPasswordTextChanged ); connect( ui->textBoxUserVerifiedPassword, &QLineEdit::textChanged, this, &UsersPage::onPasswordTextChanged ); connect( ui->textBoxRootPassword, &QLineEdit::textChanged, this, &UsersPage::onRootPasswordTextChanged ); connect( ui->textBoxVerifiedRootPassword, &QLineEdit::textChanged, this, &UsersPage::onRootPasswordTextChanged ); connect( ui->checkBoxValidatePassword, &QCheckBox::stateChanged, this, [this]( int ) { onPasswordTextChanged( ui->textBoxUserPassword->text() ); onRootPasswordTextChanged( ui->textBoxRootPassword->text() ); checkReady( isReady() ); } ); connect( ui->checkBoxReusePassword, &QCheckBox::stateChanged, this, [this]( int checked ) { /* When "reuse" is checked, hide the fields for explicitly * entering the root password. However, if we're going to * disable the root password anyway, hide them all regardless of * the checkbox -- so when writeRoot is false, checked needs * to be true, to hide them all. */ if ( !m_writeRootPassword ) { checked = true; } ui->labelChooseRootPassword->setVisible( !checked ); ui->labelRootPassword->setVisible( !checked ); ui->labelRootPasswordError->setVisible( !checked ); ui->textBoxRootPassword->setVisible( !checked ); ui->textBoxVerifiedRootPassword->setVisible( !checked ); checkReady( isReady() ); } ); m_customUsername = false; m_customHostname = false; setWriteRootPassword( true ); ui->checkBoxReusePassword->setChecked( true ); ui->checkBoxValidatePassword->setChecked( true ); setPasswordCheckboxVisible( false ); CALAMARES_RETRANSLATE_SLOT( &UsersPage::retranslate ); } UsersPage::~UsersPage() { delete ui; } void UsersPage::retranslate() { ui->retranslateUi( this ); if ( Calamares::Settings::instance()->isSetupMode() ) { ui->textBoxUsername->setToolTip( tr( "If more than one person will " "use this computer, you can create multiple " "accounts after setup." ) ); } else { ui->textBoxUsername->setToolTip( tr( "If more than one person will " "use this computer, you can create multiple " "accounts after installation." ) ); } // Re-do password checks (with output messages) as well. // .. the password-checking methods get their values from the text boxes, // not from their parameters. onPasswordTextChanged( QString() ); onRootPasswordTextChanged( QString() ); } bool UsersPage::isReady() { bool readyFields = m_readyFullName && m_readyHostname && m_readyPassword && m_readyUsername; if ( !m_writeRootPassword || ui->checkBoxReusePassword->isChecked() ) { return readyFields; } return readyFields && m_readyRootPassword; } QString UsersPage::getHostname() const { return ui->textBoxHostname->text(); } QString UsersPage::getRootPassword() const { if ( m_writeRootPassword ) { if ( ui->checkBoxReusePassword->isChecked() ) { return ui->textBoxUserPassword->text(); } else { return ui->textBoxRootPassword->text(); } } else { return QString(); } } QPair< QString, QString > UsersPage::getUserPassword() const { return QPair< QString, QString >( ui->textBoxUsername->text(), ui->textBoxUserPassword->text() ); } QList< Calamares::job_ptr > UsersPage::createJobs( const QStringList& defaultGroupsList ) { QList< Calamares::job_ptr > list; if ( !isReady() ) { return list; } Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); Calamares::Job* j; j = new CreateUserJob( ui->textBoxUsername->text(), ui->textBoxFullName->text().isEmpty() ? ui->textBoxUsername->text() : ui->textBoxFullName->text(), ui->checkBoxAutoLogin->isChecked(), defaultGroupsList ); list.append( Calamares::job_ptr( j ) ); if ( m_writeRootPassword ) { gs->insert( "reuseRootPassword", ui->checkBoxReusePassword->isChecked() ); } gs->insert( "hostname", ui->textBoxHostname->text() ); if ( ui->checkBoxAutoLogin->isChecked() ) { gs->insert( "autologinUser", ui->textBoxUsername->text() ); } gs->insert( "username", ui->textBoxUsername->text() ); gs->insert( "password", CalamaresUtils::obscure( ui->textBoxUserPassword->text() ) ); return list; } void UsersPage::onActivate() { ui->textBoxFullName->setFocus(); onPasswordTextChanged( QString() ); onRootPasswordTextChanged( QString() ); } void UsersPage::setWriteRootPassword( bool write ) { m_writeRootPassword = write; ui->checkBoxReusePassword->setVisible( write ); } void UsersPage::onFullNameTextEdited( const QString& textRef ) { if ( textRef.isEmpty() ) { ui->labelFullNameError->clear(); ui->labelFullName->clear(); if ( !m_customUsername ) { ui->textBoxUsername->clear(); } if ( !m_customHostname ) { ui->textBoxHostname->clear(); } m_readyFullName = false; } else { ui->labelFullName->setPixmap( CalamaresUtils::defaultPixmap( CalamaresUtils::Yes, CalamaresUtils::Original, ui->labelFullName->size() ) ); m_readyFullName = true; fillSuggestions(); } checkReady( isReady() ); } /** @brief Guess the machine's name * * If there is DMI data, use that; otherwise, just call the machine "-pc". * Reads the DMI data just once. */ static QString guessProductName() { static bool tried = false; static QString dmiProduct; if ( !tried ) { // yes validateHostnameText() but these files can be a mess QRegExp dmirx( "[^a-zA-Z0-9]", Qt::CaseInsensitive ); QFile dmiFile( QStringLiteral( "/sys/devices/virtual/dmi/id/product_name" ) ); if ( dmiFile.exists() && dmiFile.open( QIODevice::ReadOnly ) ) { dmiProduct = QString::fromLocal8Bit( dmiFile.readAll().simplified().data() ) .toLower() .replace( dmirx, " " ) .remove( ' ' ); } if ( dmiProduct.isEmpty() ) { dmiProduct = QStringLiteral( "-pc" ); } tried = true; } return dmiProduct; } void UsersPage::fillSuggestions() { QString fullName = ui->textBoxFullName->text(); QRegExp rx( "[^a-zA-Z0-9 ]", Qt::CaseInsensitive ); QString cleanName = CalamaresUtils::removeDiacritics( fullName ).toLower().replace( rx, " " ).simplified(); QStringList cleanParts = cleanName.split( ' ' ); if ( !m_customUsername ) { if ( !cleanParts.isEmpty() && !cleanParts.first().isEmpty() ) { QString usernameSuggestion = cleanParts.first(); for ( int i = 1; i < cleanParts.length(); ++i ) { if ( !cleanParts.value( i ).isEmpty() ) { usernameSuggestion.append( cleanParts.value( i ).at( 0 ) ); } } if ( USERNAME_RX.indexIn( usernameSuggestion ) != -1 ) { ui->textBoxUsername->setText( usernameSuggestion ); validateUsernameText( usernameSuggestion ); m_customUsername = false; } } } if ( !m_customHostname ) { if ( !cleanParts.isEmpty() && !cleanParts.first().isEmpty() ) { QString hostnameSuggestion; QString productName = guessProductName(); hostnameSuggestion = QString( "%1-%2" ).arg( cleanParts.first() ).arg( productName ); if ( HOSTNAME_RX.indexIn( hostnameSuggestion ) != -1 ) { ui->textBoxHostname->setText( hostnameSuggestion ); validateHostnameText( hostnameSuggestion ); m_customHostname = false; } } } } void UsersPage::onUsernameTextEdited( const QString& textRef ) { m_customUsername = true; validateUsernameText( textRef ); } void UsersPage::validateUsernameText( const QString& textRef ) { QString text( textRef ); QRegExpValidator val_whole( USERNAME_RX ); QRegExpValidator val_start( QRegExp( "[a-z_].*" ) ); // anchors are implicit in QRegExpValidator int pos = -1; if ( text.isEmpty() ) { ui->labelUsernameError->clear(); ui->labelUsername->clear(); m_readyUsername = false; } else if ( text.length() > USERNAME_MAX_LENGTH ) { labelError( ui->labelUsername, ui->labelUsernameError, tr( "Your username is too long." ) ); m_readyUsername = false; } else if ( val_start.validate( text, pos ) == QValidator::Invalid ) { labelError( ui->labelUsername, ui->labelUsernameError, tr( "Your username must start with a lowercase letter or underscore." ) ); m_readyUsername = false; } else if ( val_whole.validate( text, pos ) == QValidator::Invalid ) { labelError( ui->labelUsername, ui->labelUsernameError, tr( "Only lowercase letters, numbers, underscore and hyphen are allowed." ) ); m_readyUsername = false; } else { labelOk( ui->labelUsername, ui->labelUsernameError ); m_readyUsername = true; } emit checkReady( isReady() ); } void UsersPage::onHostnameTextEdited( const QString& textRef ) { m_customHostname = true; validateHostnameText( textRef ); } void UsersPage::validateHostnameText( const QString& textRef ) { QString text = textRef; QRegExpValidator val( HOSTNAME_RX ); int pos = -1; if ( text.isEmpty() ) { ui->labelHostnameError->clear(); ui->labelHostname->clear(); m_readyHostname = false; } else if ( text.length() < HOSTNAME_MIN_LENGTH ) { labelError( ui->labelHostname, ui->labelHostnameError, tr( "Your hostname is too short." ) ); m_readyHostname = false; } else if ( text.length() > HOSTNAME_MAX_LENGTH ) { labelError( ui->labelHostname, ui->labelHostnameError, tr( "Your hostname is too long." ) ); m_readyHostname = false; } else if ( val.validate( text, pos ) == QValidator::Invalid ) { labelError( ui->labelHostname, ui->labelHostnameError, tr( "Only letters, numbers, underscore and hyphen are allowed." ) ); m_readyHostname = false; } else { labelOk( ui->labelHostname, ui->labelHostnameError ); m_readyHostname = true; } emit checkReady( isReady() ); } bool UsersPage::checkPasswordAcceptance( const QString& pw1, const QString& pw2, QLabel* badge, QLabel* message ) { if ( pw1 != pw2 ) { labelError( badge, message, tr( "Your passwords do not match!" ) ); return false; } else { bool failureIsFatal = ui->checkBoxValidatePassword->isChecked(); bool failureFound = false; if ( m_passwordChecksChanged ) { std::sort( m_passwordChecks.begin(), m_passwordChecks.end() ); m_passwordChecksChanged = false; } for ( auto pc : m_passwordChecks ) { QString s = pc.filter( pw1 ); if ( !s.isEmpty() ) { labelError( badge, message, s, failureIsFatal ? Badness::Fatal : Badness::Warning ); failureFound = true; if ( failureIsFatal ) { return false; } } } if ( !failureFound ) { labelOk( badge, message ); } // Here, if failureFound is true then we've found **warnings**, // which is ok to continue but the user should know. return true; } } void UsersPage::onPasswordTextChanged( const QString& ) { m_readyPassword = checkPasswordAcceptance( ui->textBoxUserPassword->text(), ui->textBoxUserVerifiedPassword->text(), ui->labelUserPassword, ui->labelUserPasswordError ); emit checkReady( isReady() ); } void UsersPage::onRootPasswordTextChanged( const QString& ) { m_readyRootPassword = checkPasswordAcceptance( ui->textBoxRootPassword->text(), ui->textBoxVerifiedRootPassword->text(), ui->labelRootPassword, ui->labelRootPasswordError ); emit checkReady( isReady() ); } void UsersPage::setPasswordCheckboxVisible( bool visible ) { ui->checkBoxValidatePassword->setVisible( visible ); } void UsersPage::setValidatePasswordDefault( bool checked ) { ui->checkBoxValidatePassword->setChecked( checked ); emit checkReady( isReady() ); } void UsersPage::setAutologinDefault( bool checked ) { ui->checkBoxAutoLogin->setChecked( checked ); emit checkReady( isReady() ); } void UsersPage::setReusePasswordDefault( bool checked ) { ui->checkBoxReusePassword->setChecked( checked ); emit checkReady( isReady() ); } void UsersPage::addPasswordCheck( const QString& key, const QVariant& value ) { m_passwordChecksChanged = true; if ( key == "minLength" ) { add_check_minLength( m_passwordChecks, value ); } else if ( key == "maxLength" ) { add_check_maxLength( m_passwordChecks, value ); } else if ( key == "nonempty" ) { if ( value.toBool() ) { m_passwordChecks.push_back( PasswordCheck( []() { return QCoreApplication::translate( "PWQ", "Password is empty" ); }, []( const QString& s ) { return !s.isEmpty(); }, PasswordCheck::Weight( 1 ) ) ); } } #ifdef CHECK_PWQUALITY else if ( key == "libpwquality" ) { add_check_libpwquality( m_passwordChecks, value ); } #endif // CHECK_PWQUALITY else { cWarning() << "Unknown password-check key" << key; } } calamares-3.2.20/src/modules/users/UsersPage.h000066400000000000000000000066271362604102500212070ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2017-2018, Adriaan de Groot * * Portions from the Manjaro Installation Framework * by Roland Singer * Copyright (C) 2007 Free Software Foundation, Inc. * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef USERSPAGE_H #define USERSPAGE_H #include "CheckPWQuality.h" #include "Job.h" #include class QLabel; namespace Ui { class Page_UserSetup; } class UsersPage : public QWidget { Q_OBJECT public: explicit UsersPage( QWidget* parent = nullptr ); virtual ~UsersPage(); bool isReady(); Calamares::JobList createJobs( const QStringList& defaultGroupsList ); void onActivate(); void setWriteRootPassword( bool show ); void setPasswordCheckboxVisible( bool visible ); void setValidatePasswordDefault( bool checked ); void setAutologinDefault( bool checked ); void setReusePasswordDefault( bool checked ); /** @brief Process entries in the passwordRequirements config entry * * Called once for each item in the config entry, which should * be a key-value pair. What makes sense as a value depends on * the key. Supported keys are documented in users.conf. */ void addPasswordCheck( const QString& key, const QVariant& value ); ///@brief Hostname as entered / auto-filled QString getHostname() const; ///@brief Root password, depends on settings, may be empty QString getRootPassword() const; ///@brief User name and password QPair< QString, QString > getUserPassword() const; protected slots: void onFullNameTextEdited( const QString& ); void fillSuggestions(); void onUsernameTextEdited( const QString& ); void validateUsernameText( const QString& ); void onHostnameTextEdited( const QString& ); void validateHostnameText( const QString& ); void onPasswordTextChanged( const QString& ); void onRootPasswordTextChanged( const QString& ); signals: void checkReady( bool ); private: /** @brief Is the password acceptable? * * Checks the two copies of the password and places error messages in the * given QLabels. Returns true (and clears the error messages) if the * password is acceptable. */ bool checkPasswordAcceptance( const QString& pw1, const QString& pw2, QLabel* badge, QLabel* message ); void retranslate(); Ui::Page_UserSetup* ui; PasswordCheckList m_passwordChecks; bool m_passwordChecksChanged = false; bool m_readyFullName; bool m_readyUsername; bool m_customUsername; bool m_readyHostname; bool m_customHostname; bool m_readyPassword; bool m_readyRootPassword; bool m_writeRootPassword; }; #endif // USERSPAGE_H calamares-3.2.20/src/modules/users/UsersViewStep.cpp000066400000000000000000000145231362604102500224260ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2017-2018, Adriaan de Groot * Copyright 2017, Gabriel Craciunescu * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "UsersViewStep.h" #include "SetHostNameJob.h" #include "SetPasswordJob.h" #include "UsersPage.h" #include "utils/Logger.h" #include "utils/NamedEnum.h" #include "utils/Variant.h" #include "GlobalStorage.h" #include "JobQueue.h" CALAMARES_PLUGIN_FACTORY_DEFINITION( UsersViewStepFactory, registerPlugin< UsersViewStep >(); ) static const NamedEnumTable< SetHostNameJob::Action >& hostnameActions() { using Action = SetHostNameJob::Action; // *INDENT-OFF* // clang-format off static const NamedEnumTable< Action > names { { QStringLiteral( "none" ), Action::None }, { QStringLiteral( "etcfile" ), Action::EtcHostname }, { QStringLiteral( "hostnamed" ), Action::SystemdHostname } }; // clang-format on // *INDENT-ON* return names; } UsersViewStep::UsersViewStep( QObject* parent ) : Calamares::ViewStep( parent ) , m_widget( new UsersPage() ) , m_actions( SetHostNameJob::Action::None ) { emit nextStatusChanged( true ); connect( m_widget, &UsersPage::checkReady, this, &UsersViewStep::nextStatusChanged ); } UsersViewStep::~UsersViewStep() { if ( m_widget && m_widget->parent() == nullptr ) { m_widget->deleteLater(); } } QString UsersViewStep::prettyName() const { return tr( "Users" ); } QWidget* UsersViewStep::widget() { return m_widget; } bool UsersViewStep::isNextEnabled() const { return m_widget->isReady(); } bool UsersViewStep::isBackEnabled() const { return true; } bool UsersViewStep::isAtBeginning() const { return true; } bool UsersViewStep::isAtEnd() const { return true; } QList< Calamares::job_ptr > UsersViewStep::jobs() const { return m_jobs; } void UsersViewStep::onActivate() { m_widget->onActivate(); } void UsersViewStep::onLeave() { m_jobs.clear(); m_jobs.append( m_widget->createJobs( m_defaultGroups ) ); Calamares::Job* j; auto userPW = m_widget->getUserPassword(); j = new SetPasswordJob( userPW.first, userPW.second ); m_jobs.append( Calamares::job_ptr( j ) ); j = new SetPasswordJob( "root", m_widget->getRootPassword() ); m_jobs.append( Calamares::job_ptr( j ) ); j = new SetHostNameJob( m_widget->getHostname(), m_actions ); m_jobs.append( Calamares::job_ptr( j ) ); } void UsersViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { using CalamaresUtils::getBool; if ( configurationMap.contains( "defaultGroups" ) && configurationMap.value( "defaultGroups" ).type() == QVariant::List ) { m_defaultGroups = configurationMap.value( "defaultGroups" ).toStringList(); } else { cWarning() << "Using fallback groups. Please check defaultGroups in users.conf"; m_defaultGroups = QStringList { "lp", "video", "network", "storage", "wheel", "audio" }; } if ( configurationMap.contains( "autologinGroup" ) && configurationMap.value( "autologinGroup" ).type() == QVariant::String ) { Calamares::JobQueue::instance()->globalStorage()->insert( "autologinGroup", configurationMap.value( "autologinGroup" ).toString() ); } if ( configurationMap.contains( "sudoersGroup" ) && configurationMap.value( "sudoersGroup" ).type() == QVariant::String ) { Calamares::JobQueue::instance()->globalStorage()->insert( "sudoersGroup", configurationMap.value( "sudoersGroup" ).toString() ); } bool setRootPassword = getBool( configurationMap, "setRootPassword", true ); Calamares::JobQueue::instance()->globalStorage()->insert( "setRootPassword", setRootPassword ); m_widget->setWriteRootPassword( setRootPassword ); m_widget->setAutologinDefault( getBool( configurationMap, "doAutologin", false ) ); m_widget->setReusePasswordDefault( getBool( configurationMap, "doReusePassword", false ) ); if ( configurationMap.contains( "passwordRequirements" ) && configurationMap.value( "passwordRequirements" ).type() == QVariant::Map ) { auto pr_checks( configurationMap.value( "passwordRequirements" ).toMap() ); for ( decltype( pr_checks )::const_iterator i = pr_checks.constBegin(); i != pr_checks.constEnd(); ++i ) { m_widget->addPasswordCheck( i.key(), i.value() ); } } m_widget->setPasswordCheckboxVisible( getBool( configurationMap, "allowWeakPasswords", false ) ); m_widget->setValidatePasswordDefault( !getBool( configurationMap, "allowWeakPasswordsDefault", false ) ); QString shell( QLatin1String( "/bin/bash" ) ); // as if it's not set at all if ( configurationMap.contains( "userShell" ) ) { shell = CalamaresUtils::getString( configurationMap, "userShell" ); } // Now it might be explicitly set to empty, which is ok Calamares::JobQueue::instance()->globalStorage()->insert( "userShell", shell ); using Action = SetHostNameJob::Action; QString hostnameActionString = CalamaresUtils::getString( configurationMap, "setHostname" ); if ( hostnameActionString.isEmpty() ) { hostnameActionString = QStringLiteral( "EtcFile" ); } bool ok = false; auto hostnameAction = hostnameActions().find( hostnameActionString, ok ); if ( !ok ) { hostnameAction = Action::EtcHostname; } Action hostsfileAction = getBool( configurationMap, "writeHostsFile", true ) ? Action::WriteEtcHosts : Action::None; m_actions = hostsfileAction | hostnameAction; } calamares-3.2.20/src/modules/users/UsersViewStep.h000066400000000000000000000036201362604102500220670ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2017, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef USERSPAGEPLUGIN_H #define USERSPAGEPLUGIN_H #include "SetHostNameJob.h" #include "DllMacro.h" #include "utils/PluginFactory.h" #include "viewpages/ViewStep.h" #include #include class UsersPage; class PLUGINDLLEXPORT UsersViewStep : public Calamares::ViewStep { Q_OBJECT public: explicit UsersViewStep( QObject* parent = nullptr ); virtual ~UsersViewStep() override; QString prettyName() const override; QWidget* widget() override; bool isNextEnabled() const override; bool isBackEnabled() const override; bool isAtBeginning() const override; bool isAtEnd() const override; QList< Calamares::job_ptr > jobs() const override; void onActivate() override; void onLeave() override; void setConfigurationMap( const QVariantMap& configurationMap ) override; private: UsersPage* m_widget; QList< Calamares::job_ptr > m_jobs; QStringList m_defaultGroups; SetHostNameJob::Actions m_actions; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( UsersViewStepFactory ) #endif // USERSPAGEPLUGIN_H calamares-3.2.20/src/modules/users/images/000077500000000000000000000000001362604102500203725ustar00rootroot00000000000000calamares-3.2.20/src/modules/users/images/invalid.png000066400000000000000000000172161362604102500225350ustar00rootroot00000000000000‰PNG  IHDRifÈÔ¿ïbKGDÿÿÿ ½§“ pHYs  šœtIMEÝ !,ÝöØiTXtCommentCreated with GIMPd.eòIDATxÚíyp\Ç}ç¿ÝýΙÁ}’ ’ ÁC$%¢%+òîÊ:x(Ζ“H›òfïÊŽ7ÒF–@ʛıUN–¶+Ž\+Ù+‘Z™IÉ’Ê*§tX”(/Ëñ®’ÍF”xƒ ž Ìàšã]}ì3B0Ž`ˆ¢ºªk€©7ýºûó~¿þõ¯Ýø4}š>MŸ¦k"‘OJCml,ö4M7•2ẩAx×Óë| i6!´´D„ë.1t­N§t¡Fh €fJÈìê † 8d2 94™LAù~Z*†kŸgõ•Jÿ†Ò44Ë1-PÆ@”‚rRH âr,Šã½Qu)™<èòà‰H¼þÀÙsÞ5é¿-[VCÿz±aþѲòòš–ºù(ol«®‚Àûú!ûbi0B„¤+J X]¥ ²Àˆe‚Z¨¦ƒðþP—z{q¤»]ñø¯]üð‘3¯>ûÆÆ¬Bz”@3—,¹'¢é±¢¼lùò†”-Z ZU î¸à—/Aö@>@èu5ÓIèwMµ­40¥ ¡;Å{]]ò|"ñs|ó¿¶µÿDBúNóâU6Óv4D"›×Õדy--ÐêæC¤øÎC R\3—I)€1PÛ³mP)á âô¥.º|¹¿ßu#®ûß9aðiGKË}å†þ½u55eÍK– ´t)„ðÏœèëƒR „²é«”¡ $dƒYh`0Å‘‹q¢¯ÿ`BŠû¿yªýØU é Vr]û~c¤è?ܼ°‰V¯¼¤²þù ð/^„(ýøÏ&•4,c "‘DG×Eüß®K=ƒÿÐ7Nµï›ÉÛÏØãû½æÅ« Ó|ᆪʻoZ¾‚”¯_Éœ#GÁ£½é‹®@YƒE H×…R„QŽ`že…‡ç ‹‹J~«¾þ×/wW ¤Kš§X7~úÙuËW­YƒÐu+áu÷Àm;™6 ®8c U@ú`[EÐQÁùMýƒƒkï*.ÙÿÖÀ@êciÇ’æ_a˜Ï~®±¡¬yí:èHµµ!8î“ãÍ•Êó (ƒ cžeASXrÉón¼½¢bÿÛ±Xâc é{Kšÿ°2Úù¯šZõëÖƒT”#ñþ}}éþ'))åûiõWAeÃPªéR2yóÍo, ¨‚AúÞÒ%_ª°íÿºi¡U·~=H$Œä¡÷!SÉ«Z½MÊŠPRF¨²mèBÔG“Éõw½^(ÕWHß]Òüù2Ëzös áºuëÓDâÐ!HÏýD9NsÛF•e‚ð ©ËóVßYSóó·z{ƒ9‡´£¥eE±n¼rËüù•k×¶øïCúþ5èŠDq(%ACaT›xà7÷$µ¿W_ÿ‹W/wË9ƒ´£yq…ÅØO7ÖÔ¬h¾þÐ’ÄézŸ¼1({‚s@)°PU†¤çßp1>”<Ð×÷¿ç Ò••]W^þ;«V®€Y·ñ£G   ¸æò0(z(ŒrÆÐë8·|¦¤ôÈ;±XÛ¬CúnKËÕ…ìoo\¼˜–,mAòôiøýé‰ßµHhD–t–e¡Ð.Æãn*.þÙÁþþø¬AúëE‹ZJ ã¥ÏÖÕ…k¯[§§ÎÅ®ôB[f¥ôZÏÒ÷AL]áAy¯ëÔßÒ×÷ÊÁ)ÄUä éÑ–#¤iϬ­(_³xÅ (MC¼³3=xr­ Ñ•¬¤`vÅ”¡/•ZîŸ8ë;6ã6UVÞS }ㆅM×7`¨ý„çÍýòÂÇÒâP”À°,„•"]‰äšÏ„ì—%g ÒŽæÅ–®?scMuuí²åpz{áÆ¢×¤%—«WBrbšk|߯è28þ2Ÿb´¼.fÚŸ. ‡WÖΛ¥—.¥ë"ÅôÛ“u8Ïu¿º\ H$aDÂXXR‚³ÉäWÿzÑ¢çþ²³³­à’ôýÆÆ!Ãxêúêª¢Š¦&$º."H&¦­æ¥p=ÄR®‹@*JÁfY}úR"ázH¤RHù>¸T Œ¢:Br¢ë05 Ò÷C=A D£¿(8¤;jklŽDînnj1t ]¼LÓPp¤D2 V7%7n„ÝÒ?0ÔÝ Â´Y2D’B` ™„ÞÔ„’ÏÜ«i!\ÏÅP4 ¦i`Ó¬G:.PA³-˜R¢;‘\rkQÑß¿Ýß+˜º{´¥¥ÜdìË JK`–•bèÒ%H)Ó&÷“'%S)TüÖ­Xôõ¯Ã¬©IKV,†Ýoí‡ …blÆÂs€”J¥PsÇXøÀÐ+*ÒõëîFçc!ö¿BI(sšã® |0a!l‡ÐP)?ÊùøFÁ$iSEùØ¡?nYPfˆ_¾<½ p”n܈–¿ú+åW* ¡ìÆDcˆ?ÂôR}I!0ä8˜·y š[[¡•”\yz#”m܈Äé 9K×§=NI© Û縔J5Þ:¯vï;Ý=©iCzôÖ[5+å<¶¢´¤©¶¾Éþ~xÉä”U]Vÿ» XúÈ7jlúÍ'\×Q¶a¼žÄŽ¡ Z]M).O¥P»i3š[[AC¡ß¨5M˜ÕÕ¸¼?4B¦­ö$ç †ƒP 9Nñ€ë¾ ;:mu§ww_Wdè+ŠKBà f¬Ë©+!!$c0kkǽ†Ú6š[[A\zãu(ˆ­fùËá 7-A‹[[Am{ÜkÍÚZ(ÆÒuÎ@šzÃ%׃a¨ Ùä‚ã|À “ýlRE«+¹¹Ö´ìHqRñ8χ •šrVHÇnóøÄ®, ¡yÛ6ÔlÞ‚A×A’‹iÝW*…$tÔlÞ‚æmÛÀÆ XÐñxz3À4Û,•‚¤çBQ‚bÛF„±õ6/^:-Hhe›+mše#58”®¬TÓÊ €ò=t½òÊGc»Ç‘¨%­­˜¿y ®ƒP2m-åz¿ìõ©ŒÍß¼K&‘ Ì ‚®W^ò=°´[Êôä–sÓ0QeY¥6¥ÿfZcÒ盚ZÊlëÏ—•Yv8‚¡htÚ–Öpü5¥ˆ?Å”­[7á|‹ê:Êo¼^o/b'ŽƒP–×<*kî'<ó¶lEK)ѹó)œ{ñEغ}ºªnØ ¡  `&|ÏÅeÏ÷ߊF_š2¤;jj¶Î7­{*+¡nôts¶Ñ½‡B líÄ ˆ®£|ÃøÑhÉi®HúæoÙŠ¥­­9úp÷nØš›²ÂÎͤ‚ašA€nÇ mŒDöœ bBHwUVÞß­­©ªB2ž€ï¹ gei™¸ïž÷Þ8Gy®ÕÓ‹èñ tr‹Ë• ÏÇü-[Ѳ}{N€:žzÏ> [Ó`PflÓ- €BÔI…%ßx'Öw.oH;¯_£ )¿Ó‰T—–” >4‘Ù†RÈ”5R¢H. ¢QÄÚN‚²ñ]Hž’Hê¶lŲTœÊHPç³ÏÂÊš‰$¥Õ4h”"éz¬Ÿó÷ߎFÿ)o¼Çõ*(­± ‚sž—¶rHáçÿ&E):þç3PRbñŸ|mBÏ: …°lûv(¥pñµ× LÆ(P¾RHz>ê¶nŲíÛÁ&1TV‚žù ,]ƒ™éÌ™qŽ+p߇n‡b X?¥y•¢ÉÔµ ]ÓÀ.Ä••×H!º†ÓÏ> E)š¿òÕ‰AÙ6–oß‚ ¯½†¡ÃÈò,¸ûn,ß¶-7@;ŸÂéÝ»aéZº.jf÷Š\À`2JÈÊ—)ØïIˆ¼ÔÝ]•U·U›ÖjKJ ¤DÊq¦íPl€×2›Æzß{é1j2ÕW±qcÚ3qò$(¥RÇ‚-[°â‘GrƒN?õ$:vï†É¬ÌýfŒBS*ã˜eH2ݯ$ã]g@E^^¦`“é#`梙ÁUS ŠœÞ· ÀŠ˜zŒ¹”8ñã¥Q-óðÍEÊú@%Ùãv"yAúU}£¶ *3WP™åß¹:-‰AAgûÒ[S—O"QãA'ûöA§LÌ á1IJ°Ì„Y)eåIwR”Ø6É”uµÏe¢\€1Šö½{¡,ÿÚ×@ #7ò}œxêIœÞ»:% \Ì) aHYU«¨R4¯¥ŠDo/W„È[T(Lchß³]ïȹCºÞ9€ögŸÓ˜›ö‘óNB¼¼ íTàPŠ !‡Õ‘Ôç*s ‰†»ïFõÍ7ç ©úæ›Ñp÷ÝàB‚klÎÛ‘Í„H•ŽùPJ¥òµî”$d0ȬH邿2pQ2.ê7oÆêmÛ MæIér*)ÅêmÛ ”Âù7Þ€b Tˆ¹UwIÊfúò÷Ý)™™1I{æ(Þ[é8€†Í[°úá‡ó4ÜÐPk¶m¡çÞxÕ@>§˜Æ¸¾Jä I)Õ( Î(¥sfÙ)]' wmÂêÖÖ)nl8ŒÕ­­PJáÜ›¿€¦Ï!¨ŒËÍ—¾”Qª?H„œáJ F)”’f70_:!hØ´k¦ h´DœûÅ`ºâÏþ¹ƒ”RÀ Ôôž¼! ¥Ú])á CÓg2›/ )qôÉÿ‘öÝM²¥…BXÓÚ ¤Aú¬‚J¯JPBàèë‰E/å ‰ç\!žS72{*O:$¥hØ´×ç0)¥p|×N´g&»„1¬øÊW'\æÐB!\ßÚ:,QtA)%Á´ôÏ èœèxìq!±TòC)êö¹ˆ í¶€³04t(JÑpצœAJÛµí{ö€dêwê¹ç \wßW&t!i¡®øa 3FCf”`&<Îá§§8ïMìq'òº-DIKÄ4H@ðÞÓ€d Y ‡s’ S{ö€pž>ï‡sJ;z’sTå°pX½~=œh ”@ñ™m§T U%ÅHy>.'Sp€¼ÝÛÛ–7$¸½ººÞ"äv;³ýà ‚3ÉiKÐ ­­“ÊHЩ={€  ‘žî+ T­];1(Ã@õ† pzz0ÐÑÂXúì×JÓPYA,™@¯ëõùRî8‹õM Ry9QÀ—ÂLc–®Ã ‚™¤ih¼knÈE‚¤Äñ§w¡mï>@|ÐHP` }GåJ×Q“•¨;A(PJ)„L%¡º0Äù{Mím½<ÿzâÖúC„‹{BŒ•‡3:´ÐŽVjYPš††;ïÂÚUÜÑ];Ó€x™‰½óÚ Eìè1 :‰ªÙ°©ž^ ~Ø™–(^Øy”PUT ¡$º“I$„Üs_oô)Ipàr·wGUÕ*ƒ`]H×Bà°ÒÔ¶ÆÐp×&¬}è¡IA©´ŠÛ÷¼l3ÕøoK7PdZèM$â"A•|)§a!—‹°7.ä@Ò Q mºA씂ê¬Ìfæ‰yzÚö=øÓôP¶}ÏãÈÓ»&eUWƒèTÆÉØÙ~¼`”àS>àJ˜W\ŒTà£Ïq(õZ2ñ¿ríúœCnÞŠFÏÝVQ±R#ä:2ºgŠæ¸’ ñ à  zõj°LP ÷¼´ŠËŽA©‚³}e €ô?\µTK»3ƒD‡~ücœyóMp×M?LSð¶(¥`ëWV¢=CŸç ¡ÔŸ=ØÑq"gE>÷#Œ}?%ä&Ý÷JÊB!˜š—ù/«î¹£èxõU tt dÑ"PÆ0xö ¢‡€Ï0 lÊJiÛK/#vò$J› …À`g'bǧϲ;L‚æªJÄœú]¾RoG,s^Ý•ïM°lÙ‹û³bÀmèèwœió3ÃÕµ4JÂsguýŠ™ˆ®}$JWŸú»­¤R¨)*Bsyþùâô{~Âîh=qâݼ|}ùÞXøþ÷“¦ùÛŒ Mƒ­éHþ”ƒT¸ç>ùyÑlÇSp×¼ÂÕCÐCsy>ìïC2à”zªõäÉwó-+ïõðí]BÊ?w„TC¾ËÐa0–Kšª!‘Ëw3 \!Zªª |\ŒÇ‘’ò¨ÏƒS’ò©üè³}±ãZUÕBJ°F) lð8¿:^Ú: IH…¦²2Ì+*Æ¡K]ˆÜ•À}ÛO:<%çT~ô-I„øz*àÿÏá.PlZñé]íGN ©P aiEŽöt§Õœ”?|èĉ7¦<^Nõ‡ûc1gSUÕQ¡ð»RIËbéÝÔç×,%!†Žõó磣¿çáH¹_Áy»¿ßŸuHðf4zá¶ŠŠ^¥ÔV¡$ ë:¥ðç8:t.RÚ7§aã‚zô$“8‹ÁQê$€ßomoï–å9Ýʽº½²Ò „Ü(‰°aP¤¼æÝ¼ ƒž‹#½½ð¤êR‚ñ¡¶SmÓ-¿ §IÜ\QñkÔ`] "†™Þk{ H”T vPÜ÷ð^w7ÜÖöbA½!…,ìÍžwkÈ~ç¬ 7úBÀÐ4„uÞâquÊx!–”—aUUNõÅÐÞ×_©~®Ô}­„™ÔB-[ö0%äotJM[cé’Ôn7)„z³5†ë««aë:>èéÅ€ëB(u8ü+­§ÚÿiFüŠ3Õ ýÑè»·WUUJ}V*”øJ"¢°4 ¾’W•ú“™]y Š‹pCM ’~€÷º»‘ð}pàï}]ûƒmÇOœœ©ûÏøxþÝæÅM¦nüØ t6 ˜ŒÁå~0ç;'„“Qo¥¦å••°CûÀºIxRºþ".åßjkóg²¤€¿¯,ù·+V„©RBÖ )a” Ø0A A"ðáüceffB†Ž¦âÌ ‡Ð•H¢spAzñ?r)¿ýp[Ûþ Ük*Çï ‰Œ¸žŒ‘Ç*Œx(ý¿\´h]©a|['d£”šCXÓB |8\ Ÿ2gj @Äб ¨Õ!CžÎÁ$ü\©>_ðÇÛ<ÿG?9{6 À§óÕHÞc¸øT>ÀH×Ì3V ÔXeû•€ùŸ.ü·%–õ NÈJ ÀÐ"º À<ë”üˆ*$3(1 €I)J- u‘†Ž×Ã…D ?€PÊs¥|³3ß±³«ëÒ‡‰Ñ ÀŒ!ÇÉ*Wé"yHPˆ–18´Ìÿl¨±`©Q{ÂáÊÏWUm-³¬/„¬ÖÆ(Bš“1H¥à GB¦÷F02 qü!¦ÆP¤é¨°-”fúà^'…¨ãÀá\Ê”«Ô;g‰çžºxñ]¤cJô1Ú3žôÈÌo$žù›UPHl=ó©€6$rUó+ýâ¼ÚÛ„#÷”®Ò1)!0…–^D“ð‡ŸÙRÏ…>3n²¤Q Qh”ÂfBº†"Ý€ÁÒg: øú]©€ƒK‰@Êh"~y,éåžÞÃ#àITFÈBÉæ`,1è(úˆ¬8ZÒ1ưÑ÷UJHè·KK–­(-û|©a|N§´AÏìÒÓ…N)L¦Á¤”Ña©È$¤žl2FÓï– é÷QÊÒŸ„€KG$ýàò´Û*2éHqüR*µÿÐÀà?þŸD"{º°>ÉXƒPFª31R0"óÒ¤fRÝi£ V£Õ ÇØ £êÀ¨ÆÊn-+[ÙßPjèk ¦Õ„”ÑÌr6%Í@ $}ì¡é—ce €¬ë&= •„@ 3'‘ð¤”\©Kާ{Rο´Åãürh¨€;â¡oð©ÎF«µÑª¨ Fƒb£TßhH£Çª‰€OeCèëlkþ’pdѼpxicõ–Æê(¡% (a„˜¥cÚƒ<­…R©!_Š˜ËÅ…Àï<ŸL¶ÿóPüÌe!úqåÀm9öð1T‘s4UœŒêüñ2às4°É$-Û°ìuú"]/m´¬ÊbÃÙŒ†)¡4ÌX1%D÷…Hø€ãs8‚;Ý®;xÒõbq¥â#:¸-•‹¤¨1€Œõ9^-=5ÁÇ3ÇGwòèÌÆ¢Ñ“1Ìx2µHF£LÆ0kG—9ÞœEQæh#`¤©q@ejË1î9+n¡‰&¶t’ÏñàŒþ“LšÉmQ9ÌaFwÜXOûXßËI>Ç+N}wd‚ÏÑL'€;ò2ާ9šÆ™ù«jpÂwÐO…3ÓV2Áÿd’ï²êˆäXr”¤É ìt2¨˹º¼à9Þ‡Àm…¤)ßkTÊžvúÿæ®Sãu °IEND®B`‚calamares-3.2.20/src/modules/users/images/valid.png000066400000000000000000000161641362604102500222070ustar00rootroot00000000000000‰PNG  IHDRii9‚ :bKGDÿÿÿ ½§“ pHYs  šœtIMEÝ "#f‚¸ŠiTXtCommentCreated with GIMPd.eØIDATxÚíy´]U™à{ŸéÎoÊ<'@fPÀ* íXe×,MœèEµ]‚8UëêjKБ¥lÅ®ªÆ`( X®.™TÚBÁ @€ džó¦ûît†=ô÷%<^½áÞ——á…쬽îË]÷ìsÎþíoØßÞç;pºœ.§Ëérºœ.§ËéÒ`§Ê\s{ºP”‰WHA¹¨ªeE÷}šÚiHDZüõÿÊçLÀYÈd¦ïËùR¸‹¤gZa§K)dàË´8®ãx‰R‘ѨX™ÈZªX»K»Ñ*½)1ì6‰ÚqçUñVÀž†tT’A  ÙåŽÃù®ã¼1¸äóþ´LÊϵRä³™ EÚ\×CŽ”h£ÑÆb´BYM-Ž(Õj”J }¥Ð†QÜYì‹¶*cÇúqkÕ3ßùH´ý4¤ʪûp:JÙs=O®L§Ý·µ‚…“:r™Éí9&åÚȧ2N OxH\\L¿0X,ž,ýwg1h«1B‘舚Š)Õ*tKè,ÑÓ[=ØWŽžŽ"µÖ“æ±[¯wž†4¨\ýOÙÖ±ï ÿímÁy3§·ffO™DG¶•¬›'i°mŠe‰‰P6ÁX=ýLôßXýS‰+<¤pq„D B`­&¶!•¸Fg©{;9p°o¹¦ŒC{ŠK?»ó*’W5¤OÝÌS®{e6íxöÌ–¹ógMaZ~2m~> MdBj¦BlB´MŽHÎËߨ-F(Ä®ðpE€#$KBH±VbO/[·wÙC=åÇ’(¹ÞêÿýÖÕD¯*H×þCaªIÙOç²îGçÍiŸº`æ4fægRpZ±ʺŠî#6ý ÉßR—:Ù/iž p„ƒšjRaoO'›¶äPwåñ¨jn¹ýC}ëÇßÙ8®®¿·óÌì噌÷· æ¶/9sÖ ff‘­Ä&¦WuQ5et¿ '` I$¾ ðd€–ª®°¯§“¶ì7V£ä‹ßýhíùSÒÕw¥ÎvïkÓ§æ.Yvæ,± c.­n±‰èŠRÕåÃãú$°’ƒ/}|'a)Çe¶îÛÏÆ-{J¥puXÕ·ÝyUX¶îèy,ã«ïøpmĆôÙµî¤D§oš:5û‘s—Ε ÛÏ +ZèLÑtb¬>)á …K —”LáJIÍ„lÝ·Ÿç_Üw°\‰>ó­V~0!!]}WËÙA–;Ï\ÐqáòyóY]€6š]ÑNBSCžj­ùâ Ÿ@¦ÐB±¿¯“g6ìÖ]ݵ[Û î¿ôöîê„tõ]…Ks÷ÛË—NŸ¾|æ™L÷gÒwq Þ‡±f‚HÏð*ÐÁ!í¤ú¢>6lÝÍÖ—z~êJ÷Ãß|_wçIé“w>Thñî|Íò™©åSÑ&ÛÙí¢;éEŠS&ž‹@Ⱦt)ë ›vìeã¦ÎǢмÿÛ)íÏs9ãê ü óáÖ¶ôç=;uÎÔ%dž-Õ—èS}ˆSPÝÿ³$6ÁZH;)ZZÒ8¾×Û[]qî;ü{ê¸|ÒIÒµÿœ¹¢PÈ~ï¼sf§^;e ›Ë[ˆLŒ’SµX ôI9>¡ Ù¼k/¼xð1i÷Ž—êIºfMæ­…–Ô]¯={vöÜ©Kññy¡´™È&Úþ4Z”ÕhkI;)òùFêy‡ºËç¼áÒÔ¿^%'Ò5ÿ'½4SÖ-_6kÒyÓð|i3±Uõ f¿±=•+€Bc¬!-Sä >ÊÆgv÷FÓÎy[ôÓ§‚9a>±fRGk/™ºô¼Y ÉËJ[HÌ«Ð+@±šŒ“&W¨Åá¹Õ•õëâ_0H+Þ뮞» õÒsçžÉô`2/”¶긮â^M„RV#€´›&•s(öU_ö%Þ³ë×E;¤Oý0ÿÑöŽôu¯]4O.ÌÏeky7½I !ä«’ÏËœ‰Õ8H2~/#ܮξ?9ïb÷Gëœ”Ž¤k]”Jy÷.[6+ûÚIgp ÖÃÞ°!œW5 ÃÕ‰QøÂ'•ò0Ò´÷öF³/>'Z÷ØcÍ/u¸Ípý} ýuà›sæ··/ê˜I¢»«úÝQÍéR/¨¨*9/ÃÌimtuVVuYó#(ÝÛl[MO`ºã=«Ú;Ro_0}*ínŽÍ¥½$Ö`ú/ìt­W„&¡¦"r^š¹óÛ¥8_ùøw)ÇTÝ}â·Ãéur+3R-ì¨"6 )ÄÄØaxT‹Åh°Ö"¥@H1 &>z MD` ™ Sfä;vTõ'€OŽ;$‰weÇôÜôÙ-mD:áPXÆ"0§2!@ņj%"I4‰E“ |2yŸFC’(Ç-AšŽö‡2¥^ûƒì·~°²qÜ }ú½vÇ•WNjÏ39ȳ½Ü2GÈ£‹wœ´ÒS/qh(•j´g°|Î*Ò^ûKÏòâ¡(öTÉ·HG`íèíEVkM>•¢cz¶½²U øÂ¸9\ž[Ù69ý±E³¦“’.ÛË=ýÆñTýQhè+–™Y¸€·/ºù-oarf ó[ßÌäܶuýŠjX ܆zÂÆZ²®O" ½]Õ¹ç_’º{ýaõ¨!]ÿÿp“jjõŒ¹­óµOá`­D1®Ò]jJ¥2³ò+xûY·Pðg¼¢OZSóhËÌcÓ¡GÇ“Åö¬!å¸HWR ÃB¥ZûÃúuÉsGíÝõlÏ/÷Ó…CQ XéWm]Åõ«u@‹n!çO²_´¾…éùó £ckߨ& iéÓÚž®t¯›d}.)t¤Ó“Ó9zâµ$Æ9E=º$²”ûê€.9ërÞÔìŒCÚm'Ñ c·ÌµD‘õ|2ééŒûºOÜ›]xÇe•Mc†týõ¸EG^’ϧÈ{Ûûú°Öž’ÎB×ÍnYÁ;ÞJÎ90 mL1Ü”c²š„X%d|—\»ßZÛ•ü0vH=gdÎJ§Üå…t c,}qýð”r³#(—«Ì.\Ä;Þ2* €?ìÿ!{J¿'óë4Ø%¨¨„¼ï“ÎàTþ3ð£°IÎé‚×Ò¤¨$ ¡6˜~ÝzJT q¥R•Ùù¼sÑ·ÈûÓFt`-?ßv#®'žhú¼¡R |\Ï9ÿ³kÛ'Y’„'_ŸJûä=CÕj=Ô!N- ª”kÌ)¬à‹o%߈XËÃ[¾„t5~ÆkiV±ÄÚ %íyioF¥V[ü{Óþê{xRˆ R‡ ã¨îÅœ".ƒN R ™Ûº‚w-¾•¼?uÔc~à‡<¼ùz„§ñ3²)5÷ •g-a¢ðI:çx¥^yî˜ AaŽëË©ß#6†Hi¬µœ ŒtÕJÄœÂE\ºø–Æí_ËC›¯C¸ ?%ª/,PS ­A ×sq¥xݘl’pÅ<Çs:RŽK¢ ±6GV'rU T*³ +x÷ÒÛ²A¿ß¿–·\®ÆOK¬8ú눵A p} ËVÝ7|`aXI’–ùAÆ‘¾#©$ÚhäßähA­1§eï^Ò˜Šûݾµ<¸åï@jü ¾su<æ ±µcð‰ã‰)óœ fS„d¾t<)(ÅŠ‰®éšÛ²‚•Kok Ðþµ<¸ù:p4~šºÓ4N mݺ»B ¥h­ÖrS¡¯IH‚¹ÂxB& kä„õ쌄µ„9-ÿ‰÷,k\‚~ºù: ^Pç(ÕÖ`ŒÁ•鉬kÄä¦Õ•L–„€Hk¬Õ2Ò`´CTXÐöfÞ³ôfrþäQY¿÷û<¼ù«àÄx©þ÷8«c-Jk žïˆª4-MCˆGH´1(c¬ÙO8@µ„moæÝÚ³†‡¶|!c¿î.‹b-(cqG ¥éh Òªûp„!¶`ŒÅ˜ ”ˆH€=èM¬\ºšœ?iÔÃ~³g oþ*ÖQ8~}`Úc¤> m-®¨«+!d®)HÓ÷ã2)¬Åƒ6fBMb­r‰CU´ìæ†=´ùï±NŒë›c®9lÿà²?‹5©¦ ¹ Ò‚0X´©Obí ªZí‡ ÚÞÀÊe«É7h÷÷yhó X'Æñ4ÇãVë}jê»­¬e¤‡ˆ‡„TÉ¡r¶ì>ìÕõ…[Õ²>zHׂ4ã(‰ g´½‰•ËonК: !=Ãñ‹u.ý«Û°"j*âpçU(°ÊôOŽÄaÑkU:tñL “SKÉ»³Ð‘‹½ñ[óÖªЪe«É7à$üf÷Þ|VDHOsd2xœªý›XŒE]mÖ»³`‹Zë—S•uˆ –N¹˜7Ï¿šÖÔL"]åûÖñËí·¡cƒðT}$4{ŠÃÇ[æµ^ÄÊeß$LjÐW1"BxƒR°q|Ô'!6k-BÊîæ]pK§Öc,ŽèV5ëÞY;œ3í¼cñWðl=xëæyã¼ÿFÖkçß6}“„7iž’­ŸCÇ0¯å"V-¿…|ЀíZÃ#[nĈáêzCÇyh-øRRM*6hiz›ŸÌ ±×jK¬ žcÓÕÚ³ ø‹³¾pÐÀrþÌËA~ºñz´á$My‘ºèD0·õBV-_M!=’°~÷Ý<¼å¬ˆÁINXd_"p… Q•ØH+ÕÓ<$c·[c‰´Æ•õYw³‚d´aZvɈ‹içϸ °ütãWÐ pã†$J­s[.hÐÞ|#VÄX'æDÍÎÄì„%6 kLÑú`óêNˆÍ:ÒDÊq1Ý@Éì8R9Æå€àÁ_F+Fí@a=Œ’Ìk½€•ÍHÐæ1„XÉœRXð<#Qb@Óïk’1fg™r¤L.ç¹HÑü} )ÙÓ÷G:+/1){Æ( .kypÓߣµÀÈpx@Z2·åÂ~@£/y×mÐMh¢¨îÌ8uǺ¼fëêˆO=ìªê%Û0ö@¬4B€+ê g›Úm(4åh??yá‹ôEF—¨™—sñÂ/âFšGâ2ýUZ:û憭ß}7nù:†ˆ¬> vajò¾K5ÖeÂþndû5L¹sUXÄØ q¢0ÆâIyd—g£ÕX…• ;‹ëY÷Üg(†£§Ü9oæe¼­”0Á‘‰´´>FIæ´\ÀʳTq»ÖðèæQ6Äb¬iêúem ú"Ej,<5&Hýáôǵ2TMÚ›]2Ä vô¬çþ ÿ½A‰ºŒ·-ü;<‘EÚ4’ŒË¼Ö û.AOíº›G·ÜT$BN–-‡”çÐ%$¡é¶ÊUqÎûEŸ¯Ë@¶çjbPÆŒqÕm[±¶}¥Yб‚ÀÍxÌôü2R^ Æ.]v…Ô´}eª(jp’-Uc™Ûš&Ò†ýŪ¦×ü×£ŸY’î\­µ¿PJMÖ“õ{ã(Ò6ÆŠ„=Orÿ³Óú“Yïç}¯¹ƒ–=½ç~Ö/AŠÚqÅ5R=GÒ‘ñ8T‰ˆk:±ˆGFŸøŽF^‰ÇUmJQÝ.ísIÊF³£÷IØðyú¢ƒ£Î¶<'Ý {yxÓ $¦Š²ÕúR'YkiK{H)è©Æ˜ÄnhÍ˧ŽRµ>žDf[-J¸kŽÎµÑ&ı£ç îös IÔHå·{ÖòȦHt•ÄTú×iìIW±ÌÌ*ÇDaÆþk#y[G…tçUaÑbïÑJQ …@n…ê3ÆFìì}’žû<}áÁ1zz÷=<ºñkĺBbÊ'¥Š;ì0ä|‡¶¬ÃÞbHTÕe eGih·£òî°bzûj ®”øŽ—Á¥L„¶;{Ÿàþçþ¦i‰úíî{xdó$¦JbÊý«'¥a¬eN[†¾ÐP¬Æ`xìæ+zŸ7H·\Öó‚Ñö'Jk*±&¸ãYQ&BÙˆ=Oòãç¾Ð°D=½ç^Ýt#±.ëòI½¼o-¤=É̶Û»ªÄ5¥­wÕØÌ³á}ÃÒˆÿWUX|<§!pªÖ!ÚÖØÑó놼¾ßG7}D—HT餵A/Û"ÃJaLW9B'ößUgþö}ù…žøQ¸ó¢•Á2é²Ü‘iORÇob¬®'¥°¿oó;V¸Ù!lн<ºùFbÕ/A'ù.&c!¸,Ÿ•ã»Ëô•"µ×Þú±ƒ/4¾öÔÔŠ¯sS\ÓÅR¨ð¤$íÉ—·ßŽCÕ:B™;{~ÍýÏ|ŽmÝO¢L @¢C~³ãûu§Êĺôò‚ÝI\……×Ìʳ¯ÓS 1‰}¤\œ÷PsK>M–O¯m¹%w¯Íø¹”Ë¡R2ÎöÀâʮ̸y¦–Ó–žCWeûJÏè*±ê›ûµ±ÌîHqöÌ¿x±›R).k¥ÿâ–÷õ=ÑL;M'%L„ºIVy§€ù)_ Ūaå0Zš{º¶ì«’ƒQ<‰×}óý=0•± ~7®Ä€ß‹!êPí‰Q|åÙó Þu®ËÅŽ+eÊäÒõÕ’J¨¨E¥ëGo^‡Ÿò)Éœ©S[ŠeÅ–ý!¥P¡Û­bó­½OUï¸ï6Õ ¤†é|;°YþcŠð¦2‰&~#úGÌPu(PCµ{“>üåì» íî§\O,sIàÔÕ tµØP­)"õr>Ÿc%aGV=¬%åIÚr.³&§È¥$=eÅÎΈ¾Pa”’ªyp÷ÆÚ×ÖÝ< øCHÐp)ïl£Ò%š Ã@Üþp’Ûÿg¨¡`ÙAG‹_/&]¸2ó—-“+¼@žãºOJ2©úú”±–0¶Ô"E’X”ye«b ’2ðs¤|A>ã2¹Å§%ë`å`1á`1®ï{W¦ªjægû6ªïßwCí êï¯ò†¸Ÿá¤ç𻿠 úÿVƒ@+$g¯ÿÓm HU“æÑúÖ+Ó>y¾ÿ>?%Îv]H!¤ “rð= ýÉ’¢Ø+ÒuwXiÛŸö•'˜rFðëíâ»õ< ½•„î²¢j”±¨ÈtÖJæç[[»÷‘ï©gÀ£¨68 åpMÀÒÇ’ÅPÝ«@9„ cˆ>M¤'2oø€»øŒsý·æ&¹or}1Ç÷ë¯Bõ‰çJR¾ÀwëÏšÖó.ˆ#öK÷g³\G …ÀsA‰#-RH¤¨/ÈUCC52T"]w£™JT1ÏÚ¥Úô«ðÉ?>bvö_Ÿ7Š­a”êL€” ¨j€4Ùc©îÜA«ÀÁjPãlˆA× [˜IÛŸ¾Ý[6c¡wn®Ý}M’³€6Ç©ç“\)p¥@JH\„8²þx‰¥¾|P±mI´E[[_N 1Êî +vK÷^õô¶?Ä|ú_õV 0è†3þÕÙ`µ6Xµ©a+¤Á œAªo0¤Á¶j$`ÃÁ³ý7#oÑäŒyg» &Íqf Îì -fJO´)Z¤´ï 1”w¡”Ek«­¦l4}*¶]QEï.u™­{¶&›7<®··Û^N%âŽc$0mBÕ ~/cÃÞX\p1¨ó‡«r„ÏÁÀF“´Ã7vøwÞ”%¢uÞb1)“w2~Fd…ƒÌdÇzqHYE¶–D"‰+ºÖ¹W·o°]µƒ”t*¼¼[ªI±Cês¤fš!Tå¸OfÅ’5œkî !EƒÿC¸ñboQ r<ßðP/ÛÜæps;D›ƒ€d‡5”«m†8çq 4±•£|gð÷Œ2i#Ü‹m`3¸ã†íC}oFù®ý»#|î`9Ü¿ÃD:hÐH fæo¨Á‘^(fFÍx€9ÖV1ÂÿÅ(ßVG¢ÁvhP’Fƒ6°ÓÅ`lgbEÁ<‡° HS³¿±ãÐö„4Q®ã„@­ü…å©°gSâIEND®B`‚calamares-3.2.20/src/modules/users/page_usersetup.ui000066400000000000000000000421231362604102500225210ustar00rootroot00000000000000 Page_UserSetup 0 0 862 683 Form Qt::Vertical QSizePolicy::Fixed 20 6 What is your name? 200 0 Your Full Name 0 0 24 24 24 24 true 1 0 true Qt::Vertical QSizePolicy::Fixed 20 6 What name do you want to use to log in? false 0 0 200 0 login 0 0 24 24 24 24 true 1 0 200 0 Qt::AlignVCenter true Qt::Vertical QSizePolicy::Fixed 20 6 What is the name of this computer? false 0 0 200 0 <small>This name will be used if you make the computer visible to others on a network.</small> Computer Name 0 0 24 24 24 24 true 1 0 200 0 Qt::AlignVCenter true Qt::Vertical QSizePolicy::Fixed 20 6 Choose a password to keep your account safe. false 0 0 200 0 <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> QLineEdit::Password Password 0 0 200 0 <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> QLineEdit::Password Repeat Password 0 0 24 24 24 24 true 1 0 100 0 Qt::AlignVCenter true Qt::Vertical QSizePolicy::Fixed 20 6 When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Log in automatically without asking for the password. Use the same password for the administrator account. Qt::Vertical QSizePolicy::Fixed 20 6 Choose a password for the administrator account. false 0 0 200 0 <small>Enter the same password twice, so that it can be checked for typing errors.</small> QLineEdit::Password Password 0 0 200 0 <small>Enter the same password twice, so that it can be checked for typing errors.</small> QLineEdit::Password Repeat Password 0 0 24 24 24 24 true 1 0 100 0 Qt::AlignVCenter true Qt::Vertical 20 1 calamares-3.2.20/src/modules/users/users.conf000066400000000000000000000125451362604102500211440ustar00rootroot00000000000000# Configuration for the one-user-system user module. # # Besides these settings, the user module also places the following # keys into the globalconfig area, based on user input in the view step. # # - hostname # - username # - password (obscured) # - autologinUser (if enabled, set to username) # # These globalconfig keys are set when the jobs for this module # are created. --- # Used as default groups for the created user. # Adjust to your Distribution defaults. defaultGroups: - users - lp - video - network - storage - wheel - audio # Some Distributions require a 'autologin' group for the user. # Autologin causes a user to become automatically logged in to # the desktop environment on boot. # Disable when your Distribution does not require such a group. autologinGroup: autologin # You can control the initial state for the 'autologin checkbox' here. # Possible values are: # - true to check or # - false to uncheck # These set the **initial** state of the checkbox. doAutologin: true # When *sudoersGroup* is set to a non-empty string, Calamares creates a # sudoers file for the user. This file is located at: # `/etc/sudoers.d/10-installer` # Remember to add the (value of) *sudoersGroup* to *defaultGroups*. # # If your Distribution already sets up a group of sudoers in its packaging, # remove this setting (delete or comment out the line below). Otherwise, # the setting will be duplicated in the `/etc/sudoers.d/10-installer` file, # potentially confusing users. sudoersGroup: wheel # Setting this to false, causes the root account to be disabled. # When disabled, hides the "Use the same password for administrator" # checkbox. Also hides the "Choose a password" and associated text-inputs. setRootPassword: true # You can control the initial state for the 'reuse password for root' # checkbox here. Possible values are: # - true to check or # - false to uncheck # # When checked, the user password is used for the root account too. # # NOTE: *doReusePassword* requires *setRootPassword* to be enabled. doReusePassword: true # These are optional password-requirements that a distro can enforce # on the user. The values given in this sample file set only very weak # validation settings. # # - nonempty rejects empty passwords # - there are no length validations # - libpwquality (if it is enabled at all) has no length of class # restrictions, although it will still reject palindromes and # dictionary words with these settings. # # Checks may be listed multiple times; each is checked separately, # and no effort is done to ensure that the checks are consistent # (e.g. specifying a maximum length less than the minimum length # will annoy users). # # The libpwquality check relies on the (optional) libpwquality library. # Its value is a list of configuration statements that could also # be found in pwquality.conf, and these are handed off to the # libpwquality parser for evaluation. The check is ignored if # libpwquality is not available at build time (generates a warning in # the log). The Calamares password check rejects passwords with a # score of < 40 with the given libpwquality settings. # # (additional checks may be implemented in CheckPWQuality.cpp and # wired into UsersPage.cpp) # # - To disable specific password validations: # comment out the relevant 'passwordRequirements' keys below. # - To disable all password validations: # set both 'allowWeakPasswords' and 'allowWeakPasswordsDefault' to true. # (That will show the box *Allow weak passwords* in the user- # interface, and check it by default). passwordRequirements: nonempty: true minLength: -1 # Password at least this many characters maxLength: -1 # Password at most this many characters libpwquality: - minlen=0 - minclass=0 # You can control the visibility of the 'strong passwords' checkbox here. # Possible values are: # - true to show or # - false to hide (default) # the checkbox. This checkbox allows the user to choose to disable # password-strength-checks. By default the box is **hidden**, so # that you have to pick a password that satisfies the checks. allowWeakPasswords: false # You can control the initial state for the 'strong passwords' checkbox here. # Possible values are: # - true to uncheck or # - false to check (default) # the checkbox by default. Since the box is labeled to enforce strong # passwords, in order to **allow** weak ones by default, the box needs # to be unchecked. allowWeakPasswordsDefault: false # Shell to be used for the regular user of the target system. # There are three possible kinds of settings: # - unset (i.e. commented out, the default), act as if set to /bin/bash # - empty (explicit), don't pass shell information to useradd at all # and rely on a correct configuration file in /etc/default/useradd # - set, non-empty, use that path as shell. No validation is done # that the shell actually exists or is executable. # userShell: /bin/bash # Hostname setting # # The user can enter a hostname; this is configured into the system # in some way; pick one of: # - *None*, to not set the hostname at all # - *EtcFile*, to write to `/etc/hostname` directly # - *Hostnamed*, to use systemd hostnamed(1) over DBus # The default is *EtcFile*. setHostname: EtcFile # Should /etc/hosts be written with a hostname for this machine # (also adds localhost and some ipv6 standard entries). writeHostsFile: true calamares-3.2.20/src/modules/users/users.qrc000066400000000000000000000002071362604102500207740ustar00rootroot00000000000000 images/invalid.png images/valid.png calamares-3.2.20/src/modules/webview/000077500000000000000000000000001362604102500174345ustar00rootroot00000000000000calamares-3.2.20/src/modules/webview/CMakeLists.txt000066400000000000000000000036261362604102500222030ustar00rootroot00000000000000set( CALA_WEBVIEW_INCLUDE_DIRECTORIES ${PROJECT_BINARY_DIR}/src/libcalamaresui ) set( CALA_WEBVIEW_LINK_LIBRARIES calamaresui ) option( WEBVIEW_FORCE_WEBKIT "Always build webview with WebKit instead of WebEngine regardless of Qt version." OFF) set( _reason "" ) message( STATUS "Found Qt version ${Qt5Core_VERSION}") if ( Qt5Core_VERSION VERSION_LESS 5.6 OR WEBVIEW_FORCE_WEBKIT ) message( STATUS " .. using webkit") find_package( Qt5 ${QT_VERSION} CONFIG COMPONENTS WebKit WebKitWidgets ) if ( Qt5WebKit_FOUND AND Qt5WebKitWidgets_FOUND ) list( APPEND CALA_WEBVIEW_INCLUDE_DIRECTORIES ${QT_QTWEBKIT_INCLUDE_DIR} ) list( APPEND CALA_WEBVIEW_LINK_LIBRARIES Qt5::WebKit Qt5::WebKitWidgets ) set( WEBVIEW_WITH_WEBKIT 1 ) else() set( _reason "No suitable WebKit" ) endif() else() message( STATUS " .. using webengine") find_package( Qt5 ${QT_VERSION} CONFIG COMPONENTS WebEngine WebEngineWidgets ) if ( Qt5WebEngine_FOUND AND Qt5WebEngineWidgets_FOUND ) list( APPEND CALA_WEBVIEW_INCLUDE_DIRECTORIES ${QT_QTWEBENGINE_INCLUDE_DIR} ) list( APPEND CALA_WEBVIEW_LINK_LIBRARIES Qt5::WebEngine Qt5::WebEngineWidgets ) set( WEBVIEW_WITH_WEBENGINE 1 ) else() set( _reason "No suitable WebEngine" ) endif() endif() if ( NOT _reason ) include_directories( ${CALA_WEBVIEW_INCLUDE_DIRECTORIES} ) configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/WebViewConfig.h.in ${CMAKE_CURRENT_BINARY_DIR}/WebViewConfig.h ) calamares_add_plugin( webview TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES WebViewStep.cpp LINK_PRIVATE_LIBRARIES ${CALA_WEBVIEW_LINK_LIBRARIES} SHARED_LIB ) else() calamares_skip_module( "webview (${_reason})" ) endif() calamares-3.2.20/src/modules/webview/WebViewConfig.h.in000066400000000000000000000002541362604102500227110ustar00rootroot00000000000000#ifndef CALAMARESWEBVIEWCONFIG_H #define CALAMARESWEBVIEWCONFIG_H #cmakedefine WEBVIEW_WITH_WEBENGINE #cmakedefine WEBVIEW_WITH_WEBKIT #endif // CALAMARESWEBVIEWCONFIG_H calamares-3.2.20/src/modules/webview/WebViewStep.cpp000066400000000000000000000056151362604102500223530ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2015, Rohan Garg * Copyright 2016, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "WebViewStep.h" #include #ifdef WEBVIEW_WITH_WEBKIT #include #else #include #include #endif CALAMARES_PLUGIN_FACTORY_DEFINITION( WebViewStepFactory, registerPlugin(); ) WebViewStep::WebViewStep( QObject* parent ) : Calamares::ViewStep( parent ) { emit nextStatusChanged( true ); #ifdef WEBVIEW_WITH_WEBENGINE QtWebEngine::initialize(); #endif m_view = new C_QWEBVIEW(); #ifdef WEBVIEW_WITH_WEBKIT m_view->settings()->setFontFamily( QWebSettings::StandardFont, m_view->settings()-> fontFamily( QWebSettings::SansSerifFont ) ); m_view->setRenderHints( QPainter::Antialiasing | QPainter::TextAntialiasing | QPainter::HighQualityAntialiasing | QPainter::SmoothPixmapTransform | QPainter::NonCosmeticDefaultPen ); #endif } WebViewStep::~WebViewStep() { if ( m_view && m_view->parent() == nullptr ) m_view->deleteLater(); } QString WebViewStep::prettyName() const { return m_prettyName; } QWidget* WebViewStep::widget() { return m_view; } bool WebViewStep::isNextEnabled() const { return true; } bool WebViewStep::isBackEnabled() const { return true; } bool WebViewStep::isAtBeginning() const { return true; } bool WebViewStep::isAtEnd() const { return true; } void WebViewStep::onActivate() { m_view->load(QUrl(m_url)); m_view->show(); } QList< Calamares::job_ptr > WebViewStep::jobs() const { return QList< Calamares::job_ptr >(); } void WebViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { if ( configurationMap.contains("url") && configurationMap.value("url").type() == QVariant::String ) m_url = configurationMap.value("url").toString(); if ( configurationMap.contains("prettyName") && configurationMap.value("prettyName").type() == QVariant::String ) m_prettyName = configurationMap.value("prettyName").toString(); } calamares-3.2.20/src/modules/webview/WebViewStep.h000066400000000000000000000036421362604102500220160ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2015, Rohan Garg * Copyright 2016, Teo Mrnjavac * Copyright 2017, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef WEBVIEWPLUGIN_H #define WEBVIEWPLUGIN_H #include "WebViewConfig.h" #include #include #include #include #ifdef WEBVIEW_WITH_WEBKIT #define C_QWEBVIEW QWebView #else #define C_QWEBVIEW QWebEngineView #endif class C_QWEBVIEW; class PLUGINDLLEXPORT WebViewStep : public Calamares::ViewStep { Q_OBJECT public: explicit WebViewStep( QObject* parent = nullptr ); virtual ~WebViewStep() override; QString prettyName() const override; QWidget* widget() override; void onActivate() override; bool isNextEnabled() const override; bool isBackEnabled() const override; bool isAtBeginning() const override; bool isAtEnd() const override; QList< Calamares::job_ptr > jobs() const override; void setConfigurationMap( const QVariantMap& configurationMap ) override; private: C_QWEBVIEW *m_view; QString m_url; QString m_prettyName; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( WebViewStepFactory ) #endif // WEBVIEWPLUGIN_H calamares-3.2.20/src/modules/webview/owncloud.conf000066400000000000000000000000761362604102500221400ustar00rootroot00000000000000--- prettyName: "OwnCloud" url: "https://owncloud.org" calamares-3.2.20/src/modules/webview/webview.conf000066400000000000000000000000751362604102500217550ustar00rootroot00000000000000--- prettyName: "Webview" url: "https://calamares.io" calamares-3.2.20/src/modules/welcome/000077500000000000000000000000001362604102500174175ustar00rootroot00000000000000calamares-3.2.20/src/modules/welcome/CMakeLists.txt000066400000000000000000000017711362604102500221650ustar00rootroot00000000000000include_directories( ${PROJECT_BINARY_DIR}/src/libcalamaresui ) find_package( Qt5 ${QT_VERSION} CONFIG REQUIRED DBus Network ) find_package( LIBPARTED ) if ( LIBPARTED_FOUND ) set( PARTMAN_SRC checker/partman_devices.c ) set( CHECKER_LINK_LIBRARIES ${LIBPARTED_LIBRARY} ) else() set( PARTMAN_SRC ) set( CHECKER_LINK_LIBRARIES ) add_definitions( -DWITHOUT_LIBPARTED ) endif() include_directories( ${PROJECT_BINARY_DIR}/src/libcalamaresui ) set( CHECKER_SOURCES checker/CheckerContainer.cpp checker/GeneralRequirements.cpp checker/ResultWidget.cpp checker/ResultsListWidget.cpp ${PARTMAN_SRC} ) calamares_add_plugin( welcome TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES ${CHECKER_SOURCES} WelcomeViewStep.cpp WelcomePage.cpp UI WelcomePage.ui RESOURCES welcome.qrc LINK_PRIVATE_LIBRARIES calamaresui ${CHECKER_LINK_LIBRARIES} Qt5::DBus Qt5::Network SHARED_LIB ) calamares-3.2.20/src/modules/welcome/WelcomePage.cpp000066400000000000000000000246051362604102500223220ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2015, Anke Boersma * Copyright 2017-2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "WelcomePage.h" #include "checker/CheckerContainer.h" #include "ui_WelcomePage.h" #include "Branding.h" #include "CalamaresVersion.h" #include "Settings.h" #include "ViewManager.h" #include "locale/LabelModel.h" #include "modulesystem/ModuleManager.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" #include "utils/NamedEnum.h" #include "utils/Retranslator.h" #include #include #include #include #include #include #include WelcomePage::WelcomePage( QWidget* parent ) : QWidget( parent ) , ui( new Ui::WelcomePage ) , m_checkingWidget( new CheckerContainer( this ) ) , m_languages( nullptr ) { connect( Calamares::ModuleManager::instance(), &Calamares::ModuleManager::requirementsResult, m_checkingWidget, &CheckerContainer::requirementsChecked ); connect( Calamares::ModuleManager::instance(), &Calamares::ModuleManager::requirementsComplete, m_checkingWidget, &CheckerContainer::requirementsComplete ); connect( Calamares::ModuleManager::instance(), &Calamares::ModuleManager::requirementsProgress, m_checkingWidget, &CheckerContainer::requirementsProgress ); ui->setupUi( this ); ui->verticalLayout->insertSpacing( 1, CalamaresUtils::defaultFontHeight() * 2 ); initLanguages(); ui->mainText->setAlignment( Qt::AlignCenter ); ui->mainText->setWordWrap( true ); ui->mainText->setOpenExternalLinks( true ); cDebug() << "Welcome string" << Calamares::Branding::instance()->welcomeStyleCalamares() << *Calamares::Branding::VersionedName; CALAMARES_RETRANSLATE_SLOT( &WelcomePage::retranslate ) ui->aboutButton->setIcon( CalamaresUtils::defaultPixmap( CalamaresUtils::Information, CalamaresUtils::Original, 2 * QSize( CalamaresUtils::defaultFontHeight(), CalamaresUtils::defaultFontHeight() ) ) ); connect( ui->aboutButton, &QPushButton::clicked, this, &WelcomePage::showAboutBox ); int welcome_text_idx = ui->verticalLayout->indexOf( ui->mainText ); ui->verticalLayout->insertWidget( welcome_text_idx + 1, m_checkingWidget ); } void WelcomePage::initLanguages() { // Fill the list of translations ui->languageWidget->clear(); ui->languageWidget->setInsertPolicy( QComboBox::InsertAtBottom ); m_languages = CalamaresUtils::Locale::availableTranslations(); ui->languageWidget->setModel( m_languages ); ui->languageWidget->setItemDelegate( new LocaleTwoColumnDelegate( ui->languageWidget ) ); // Find the best initial translation QLocale defaultLocale = QLocale( QLocale::system().name() ); cDebug() << "Matching locale" << defaultLocale; int matchedLocaleIndex = m_languages->find( [&]( const QLocale& x ) { return x.language() == defaultLocale.language() && x.country() == defaultLocale.country(); } ); if ( matchedLocaleIndex < 0 ) { cDebug() << Logger::SubEntry << "Matching approximate locale" << defaultLocale.language(); matchedLocaleIndex = m_languages->find( [&]( const QLocale& x ) { return x.language() == defaultLocale.language(); } ); } if ( matchedLocaleIndex < 0 ) { QLocale en_us( QLocale::English, QLocale::UnitedStates ); cDebug() << Logger::SubEntry << "Matching English (US)"; matchedLocaleIndex = m_languages->find( en_us ); // Now, if it matched, because we didn't match the system locale, switch to the one found if ( matchedLocaleIndex >= 0 ) { QLocale::setDefault( m_languages->locale( matchedLocaleIndex ).locale() ); } } if ( matchedLocaleIndex >= 0 ) { QString name = m_languages->locale( matchedLocaleIndex ).name(); cDebug() << Logger::SubEntry << "Matched with index" << matchedLocaleIndex << name; CalamaresUtils::installTranslator( name, Calamares::Branding::instance()->translationsDirectory(), qApp ); ui->languageWidget->setCurrentIndex( matchedLocaleIndex ); } else { cWarning() << "No available translation matched" << defaultLocale; } connect( ui->languageWidget, static_cast< void ( QComboBox::* )( int ) >( &QComboBox::currentIndexChanged ), this, [&]( int newIndex ) { const auto& selectedLocale = m_languages->locale( newIndex ).locale(); cDebug() << "Selected locale" << selectedLocale; QLocale::setDefault( selectedLocale ); CalamaresUtils::installTranslator( selectedLocale, Calamares::Branding::instance()->translationsDirectory(), qApp ); } ); } void WelcomePage::setupButton( Button role, const QString& url ) { QPushButton* button = nullptr; CalamaresUtils::ImageType icon = CalamaresUtils::Information; switch ( role ) { case Button::Donate: button = ui->donateButton; icon = CalamaresUtils::Donate; break; case Button::KnownIssues: button = ui->knownIssuesButton; icon = CalamaresUtils::Bugs; break; case Button::ReleaseNotes: button = ui->releaseNotesButton; icon = CalamaresUtils::Release; break; case Button::Support: button = ui->supportButton; icon = CalamaresUtils::Help; break; } if ( !button ) { qWarning() << "Unknown button role" << smash( role ); return; } if ( url.isEmpty() ) { button->hide(); return; } QUrl u( url ); if ( u.isValid() ) { auto size = 2 * QSize( CalamaresUtils::defaultFontHeight(), CalamaresUtils::defaultFontHeight() ); button->setIcon( CalamaresUtils::defaultPixmap( icon, CalamaresUtils::Original, size ) ); connect( button, &QPushButton::clicked, [u]() { QDesktopServices::openUrl( u ); } ); } else { qWarning() << "Welcome button" << smash( role ) << "URL" << url << "is invalid."; button->hide(); } } void WelcomePage::focusInEvent( QFocusEvent* e ) { if ( ui->languageWidget ) { ui->languageWidget->setFocus(); } e->accept(); } bool WelcomePage::verdict() const { return m_checkingWidget->verdict(); } void WelcomePage::externallySelectedLanguage( int row ) { if ( ( row >= 0 ) && ( row < ui->languageWidget->count() ) ) { ui->languageWidget->setCurrentIndex( row ); } } void WelcomePage::setLanguageIcon( QPixmap i ) { ui->languageIcon->setPixmap( i ); } void WelcomePage::retranslate() { QString message; if ( Calamares::Settings::instance()->isSetupMode() ) { message = Calamares::Branding::instance()->welcomeStyleCalamares() ? tr( "

Welcome to the Calamares setup program for %1.

" ) : tr( "

Welcome to %1 setup.

" ); } else { message = Calamares::Branding::instance()->welcomeStyleCalamares() ? tr( "

Welcome to the Calamares installer for %1.

" ) : tr( "

Welcome to the %1 installer.

" ); } ui->mainText->setText( message.arg( *Calamares::Branding::VersionedName ) ); ui->retranslateUi( this ); ui->supportButton->setText( tr( "%1 support" ).arg( *Calamares::Branding::ShortProductName ) ); } void WelcomePage::showAboutBox() { QString title = Calamares::Settings::instance()->isSetupMode() ? tr( "About %1 setup" ) : tr( "About %1 installer" ); QMessageBox mb( QMessageBox::Information, title.arg( CALAMARES_APPLICATION_NAME ), tr( "

%1


" "%2
" "for %3


" "Copyright 2014-2017 Teo Mrnjavac <teo@kde.org>
" "Copyright 2017-2019 Adriaan de Groot <groot@kde.org>
" "Thanks to the Calamares team " "and the Calamares " "translators team.

" "Calamares " "development is sponsored by
" "Blue Systems - " "Liberating Software." ) .arg( CALAMARES_APPLICATION_NAME ) .arg( CALAMARES_VERSION ) .arg( *Calamares::Branding::VersionedName ), QMessageBox::Ok, this ); mb.setIconPixmap( CalamaresUtils::defaultPixmap( CalamaresUtils::Squid, CalamaresUtils::Original, QSize( CalamaresUtils::defaultFontHeight() * 6, CalamaresUtils::defaultFontHeight() * 6 ) ) ); QGridLayout* layout = reinterpret_cast< QGridLayout* >( mb.layout() ); if ( layout ) { layout->setColumnMinimumWidth( 2, CalamaresUtils::defaultFontHeight() * 24 ); } mb.exec(); } void LocaleTwoColumnDelegate::paint( QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index ) const { QStyledItemDelegate::paint( painter, option, index ); option.widget->style()->drawItemText( painter, option.rect, Qt::AlignRight | Qt::AlignVCenter, option.palette, false, index.data( CalamaresUtils::Locale::LabelModel::EnglishLabelRole ).toString() ); } calamares-3.2.20/src/modules/welcome/WelcomePage.h000066400000000000000000000046221362604102500217640ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac * Copyright 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef WELCOMEPAGE_H #define WELCOMEPAGE_H #include "locale/LabelModel.h" #include #include namespace Ui { class WelcomePage; } class CheckerContainer; class WelcomePage : public QWidget { Q_OBJECT public: explicit WelcomePage( QWidget* parent = nullptr ); enum class Button { Support, Donate, KnownIssues, ReleaseNotes }; /// @brief Configure the button @p n, to open @p url void setupButton( Button b, const QString& url ); /// @brief Set international language-selector icon void setLanguageIcon( QPixmap ); /// @brief Results of requirements checking bool verdict() const; /// @brief Change the language from an external source. void externallySelectedLanguage( int row ); public slots: void retranslate(); void showAboutBox(); protected: void focusInEvent( QFocusEvent* e ) override; //choose the child widget to focus private: /// @brief Fill the list of languages with the available translations void initLanguages(); Ui::WelcomePage* ui; CheckerContainer* m_checkingWidget; CalamaresUtils::Locale::LabelModel* m_languages; }; /** @brief Delegate to display language information in two columns. * * Displays the native language name and the English language name. */ class LocaleTwoColumnDelegate : public QStyledItemDelegate { public: using QStyledItemDelegate::QStyledItemDelegate; void paint( QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index ) const override; }; #endif // WELCOMEPAGE_H calamares-3.2.20/src/modules/welcome/WelcomePage.ui000066400000000000000000000147771362604102500221660ustar00rootroot00000000000000 WelcomePage 0 0 593 400 Form Qt::Vertical QSizePolicy::Fixed 20 40 3 0 <Calamares welcome text> Qt::Horizontal QSizePolicy::Maximum 40 20 Select application and system language :/welcome/language-icon-48px.png Select application and system language 2 0 Qt::Horizontal QSizePolicy::Maximum 40 20 Qt::Horizontal 40 20 &About true Open donations website &Donate true Open help and support website &Support true Open issues and bug-tracking website &Known issues true Open release notes website &Release notes true Qt::Horizontal 40 20 Qt::Vertical QSizePolicy::Fixed 20 20 calamares-3.2.20/src/modules/welcome/WelcomeViewStep.cpp000066400000000000000000000160561362604102500232150ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "WelcomeViewStep.h" #include "WelcomePage.h" #include "checker/GeneralRequirements.h" #include "geoip/Handler.h" #include "locale/Lookup.h" #include "utils/Logger.h" #include "utils/Variant.h" #include "Branding.h" #include "modulesystem/ModuleManager.h" #include #include CALAMARES_PLUGIN_FACTORY_DEFINITION( WelcomeViewStepFactory, registerPlugin< WelcomeViewStep >(); ) WelcomeViewStep::WelcomeViewStep( QObject* parent ) : Calamares::ViewStep( parent ) , m_requirementsChecker( new GeneralRequirements( this ) ) { connect( Calamares::ModuleManager::instance(), &Calamares::ModuleManager::requirementsComplete, this, &WelcomeViewStep::nextStatusChanged ); m_widget = new WelcomePage(); } WelcomeViewStep::~WelcomeViewStep() { if ( m_widget && m_widget->parent() == nullptr ) { m_widget->deleteLater(); } } QString WelcomeViewStep::prettyName() const { return tr( "Welcome" ); } QWidget* WelcomeViewStep::widget() { return m_widget; } bool WelcomeViewStep::isNextEnabled() const { return m_widget->verdict(); } bool WelcomeViewStep::isBackEnabled() const { return false; } bool WelcomeViewStep::isAtBeginning() const { return true; } bool WelcomeViewStep::isAtEnd() const { return true; } Calamares::JobList WelcomeViewStep::jobs() const { return Calamares::JobList(); } /** @brief Look up a URL for a button * * Looks up @p key in @p map; if it is a *boolean* value, then * assume an old-style configuration, and fetch the string from * the branding settings @p e. If it is a string, not a boolean, * use it as-is. If not found, or a weird type, returns empty. * * This allows switching the showKnownIssuesUrl and similar settings * in welcome.conf from a boolean (deferring to branding) to an * actual string for immediate use. Empty strings, as well as * "false" as a setting, will hide the buttons as before. */ static QString jobOrBrandingSetting( Calamares::Branding::StringEntry e, const QVariantMap& map, const QString& key ) { if ( !map.contains( key ) ) { return QString(); } auto v = map.value( key ); if ( v.type() == QVariant::Bool ) { return v.toBool() ? ( *e ) : QString(); } if ( v.type() == QVariant::String ) { return v.toString(); } return QString(); } void WelcomeViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { using Calamares::Branding; m_widget->setupButton( WelcomePage::Button::Support, jobOrBrandingSetting( Branding::SupportUrl, configurationMap, "showSupportUrl" ) ); m_widget->setupButton( WelcomePage::Button::KnownIssues, jobOrBrandingSetting( Branding::KnownIssuesUrl, configurationMap, "showKnownIssuesUrl" ) ); m_widget->setupButton( WelcomePage::Button::ReleaseNotes, jobOrBrandingSetting( Branding::ReleaseNotesUrl, configurationMap, "showReleaseNotesUrl" ) ); m_widget->setupButton( WelcomePage::Button::Donate, CalamaresUtils::getString( configurationMap, "showDonateUrl" ) ); if ( configurationMap.contains( "requirements" ) && configurationMap.value( "requirements" ).type() == QVariant::Map ) { m_requirementsChecker->setConfigurationMap( configurationMap.value( "requirements" ).toMap() ); } else cWarning() << "no valid requirements map found in welcome " "module configuration."; bool ok = false; QVariantMap geoip = CalamaresUtils::getSubMap( configurationMap, "geoip", ok ); if ( ok ) { using FWString = QFutureWatcher< QString >; auto* handler = new CalamaresUtils::GeoIP::Handler( CalamaresUtils::getString( geoip, "style" ), CalamaresUtils::getString( geoip, "url" ), CalamaresUtils::getString( geoip, "selector" ) ); if ( handler->type() != CalamaresUtils::GeoIP::Handler::Type::None ) { auto* future = new FWString(); connect( future, &FWString::finished, [view = this, f = future, h = handler]() { QString countryResult = f->future().result(); cDebug() << "GeoIP result for welcome=" << countryResult; view->setCountry( countryResult, h ); f->deleteLater(); delete h; } ); future->setFuture( handler->queryRaw() ); } else { // Would not produce useful country code anyway. delete handler; } } QString language = CalamaresUtils::getString( configurationMap, "languageIcon" ); if ( !language.isEmpty() ) { auto icon = Calamares::Branding::instance()->image( language, QSize( 48, 48 ) ); if ( !icon.isNull() ) { m_widget->setLanguageIcon( icon ); } } } Calamares::RequirementsList WelcomeViewStep::checkRequirements() { return m_requirementsChecker->checkRequirements(); } static inline void logGeoIPHandler( CalamaresUtils::GeoIP::Handler* handler ) { if ( handler ) { cDebug() << Logger::SubEntry << "Obtained from" << handler->url() << " (" << static_cast< int >( handler->type() ) << handler->selector() << ')'; } } void WelcomeViewStep::setCountry( const QString& countryCode, CalamaresUtils::GeoIP::Handler* handler ) { if ( countryCode.length() != 2 ) { cDebug() << "Unusable country code" << countryCode; logGeoIPHandler( handler ); return; } auto c_l = CalamaresUtils::Locale::countryData( countryCode ); if ( c_l.first == QLocale::Country::AnyCountry ) { cDebug() << "Unusable country code" << countryCode; logGeoIPHandler( handler ); return; } else { int r = CalamaresUtils::Locale::availableTranslations()->find( countryCode ); if ( r < 0 ) { cDebug() << "Unusable country code" << countryCode << "(no suitable translation)"; } if ( ( r >= 0 ) && m_widget ) { m_widget->externallySelectedLanguage( r ); } } } calamares-3.2.20/src/modules/welcome/WelcomeViewStep.h000066400000000000000000000044041362604102500226540ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef WELCOMEPAGEPLUGIN_H #define WELCOMEPAGEPLUGIN_H #include #include #include #include #include #include class WelcomePage; class GeneralRequirements; namespace CalamaresUtils { namespace GeoIP { class Handler; } } // namespace CalamaresUtils class PLUGINDLLEXPORT WelcomeViewStep : public Calamares::ViewStep { Q_OBJECT public: explicit WelcomeViewStep( QObject* parent = nullptr ); virtual ~WelcomeViewStep() override; QString prettyName() const override; QWidget* widget() override; bool isNextEnabled() const override; bool isBackEnabled() const override; bool isAtBeginning() const override; bool isAtEnd() const override; Calamares::JobList jobs() const override; void setConfigurationMap( const QVariantMap& configurationMap ) override; /** @brief Sets the country that Calamares is running in. * * This (ideally) sets up language and locale settings that are right for * the given 2-letter country code. Uses the handler's information (if * given) for error reporting. */ void setCountry( const QString&, CalamaresUtils::GeoIP::Handler* handler ); Calamares::RequirementsList checkRequirements() override; private: WelcomePage* m_widget; GeneralRequirements* m_requirementsChecker; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( WelcomeViewStepFactory ) #endif // WELCOMEPAGEPLUGIN_H calamares-3.2.20/src/modules/welcome/checker/000077500000000000000000000000001362604102500210235ustar00rootroot00000000000000calamares-3.2.20/src/modules/welcome/checker/CheckerContainer.cpp000066400000000000000000000046611362604102500247450ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2017, Teo Mrnjavac * Copyright 2017, 2019-2020, Adriaan de Groot * Copyright 2017, Gabriel Craciunescu * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ /* Based on code extracted from RequirementsChecker.cpp */ #include "CheckerContainer.h" #include "ResultsListWidget.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" #include "utils/Retranslator.h" #include "widgets/WaitingWidget.h" #include CheckerContainer::CheckerContainer( QWidget* parent ) : QWidget( parent ) , m_waitingWidget( new WaitingWidget( QString(), this ) ) , m_checkerWidget( nullptr ) , m_verdict( false ) { QBoxLayout* mainLayout = new QHBoxLayout; setLayout( mainLayout ); CalamaresUtils::unmarginLayout( mainLayout ); mainLayout->addWidget( m_waitingWidget ); CALAMARES_RETRANSLATE( if ( m_waitingWidget ) m_waitingWidget->setText( tr( "Gathering system information..." ) ); ) } CheckerContainer::~CheckerContainer() { delete m_waitingWidget; delete m_checkerWidget; } void CheckerContainer::requirementsComplete( bool ok ) { layout()->removeWidget( m_waitingWidget ); m_waitingWidget->deleteLater(); m_waitingWidget = nullptr; // Don't delete in destructor m_checkerWidget = new ResultsListWidget( this, m_requirements ); layout()->addWidget( m_checkerWidget ); m_verdict = ok; } void CheckerContainer::requirementsChecked( const Calamares::RequirementsList& l ) { m_requirements.append( l ); } void CheckerContainer::requirementsProgress( const QString& message ) { if ( m_waitingWidget ) { m_waitingWidget->setText( message ); } } bool CheckerContainer::verdict() const { return m_verdict; } calamares-3.2.20/src/modules/welcome/checker/CheckerContainer.h000066400000000000000000000037151362604102500244110ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2017, Teo Mrnjavac * Copyright 2017, Adriaan de Groot * Copyright 2017, Gabriel Craciunescu * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ /* Based on code extracted from RequirementsChecker.cpp */ #ifndef CHECKERCONTAINER_H #define CHECKERCONTAINER_H #include #include "modulesystem/Requirement.h" class ResultsListWidget; class WaitingWidget; /** * A widget that collects requirements results; until the results are * all in, displays a spinner / waiting widget. Then it switches to * a (list) diplay of the results, plus some explanation of the * overall state of the entire list of results. */ class CheckerContainer : public QWidget { Q_OBJECT public: explicit CheckerContainer( QWidget* parent = nullptr ); virtual ~CheckerContainer(); bool verdict() const; public slots: void requirementsChecked( const Calamares::RequirementsList& ); /** @brief All the requirements are complete, switch to list view */ void requirementsComplete( bool ); void requirementsProgress( const QString& message ); protected: WaitingWidget *m_waitingWidget; ResultsListWidget *m_checkerWidget; Calamares::RequirementsList m_requirements; bool m_verdict; } ; #endif calamares-3.2.20/src/modules/welcome/checker/GeneralRequirements.cpp000066400000000000000000000333741362604102500255220ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2017, Teo Mrnjavac * Copyright 2017-2018, 2020, Adriaan de Groot * Copyright 2017, Gabriel Craciunescu * Copyright 2019, Collabora Ltd * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "GeneralRequirements.h" #include "CheckerContainer.h" #include "partman_devices.h" #include "Settings.h" #include "modulesystem/Requirement.h" #include "network/Manager.h" #include "utils/CalamaresUtilsGui.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include "utils/Retranslator.h" #include "utils/Units.h" #include "utils/Variant.h" #include "widgets/WaitingWidget.h" #include "GlobalStorage.h" #include "JobQueue.h" #include #include #include #include #include #include #include #include //geteuid GeneralRequirements::GeneralRequirements( QObject* parent ) : QObject( parent ) , m_requiredStorageGiB( -1 ) , m_requiredRamGiB( -1 ) { } static QSize biggestSingleScreen() { QSize s; for ( const auto* screen : QGuiApplication::screens() ) { QSize thisScreen = screen->availableSize(); if ( !s.isValid() || ( s.width() * s.height() < thisScreen.width() * thisScreen.height() ) ) { s = thisScreen; } } return s; } Calamares::RequirementsList GeneralRequirements::checkRequirements() { QSize availableSize = biggestSingleScreen(); bool enoughStorage = false; bool enoughRam = false; bool hasPower = false; bool hasInternet = false; bool isRoot = false; bool enoughScreen = availableSize.isValid() && ( availableSize.width() >= CalamaresUtils::windowMinimumWidth ) && ( availableSize.height() >= CalamaresUtils::windowMinimumHeight ); qint64 requiredStorageB = CalamaresUtils::GiBtoBytes( m_requiredStorageGiB ); cDebug() << "Need at least storage bytes:" << requiredStorageB; if ( m_entriesToCheck.contains( "storage" ) ) { enoughStorage = checkEnoughStorage( requiredStorageB ); } qint64 requiredRamB = CalamaresUtils::GiBtoBytes( m_requiredRamGiB ); cDebug() << "Need at least ram bytes:" << requiredRamB; if ( m_entriesToCheck.contains( "ram" ) ) { enoughRam = checkEnoughRam( requiredRamB ); } if ( m_entriesToCheck.contains( "power" ) ) { hasPower = checkHasPower(); } if ( m_entriesToCheck.contains( "internet" ) ) { hasInternet = checkHasInternet(); } if ( m_entriesToCheck.contains( "root" ) ) { isRoot = checkIsRoot(); } using TR = Logger::DebugRow< const char*, bool >; cDebug() << "GeneralRequirements output:" << TR( "enoughStorage", enoughStorage ) << TR( "enoughRam", enoughRam ) << TR( "hasPower", hasPower ) << TR( "hasInternet", hasInternet ) << TR( "isRoot", isRoot ); Calamares::RequirementsList checkEntries; foreach ( const QString& entry, m_entriesToCheck ) { if ( entry == "storage" ) { checkEntries.append( { entry, [req = m_requiredStorageGiB] { return tr( "has at least %1 GiB available drive space" ).arg( req ); }, [req = m_requiredStorageGiB] { return tr( "There is not enough drive space. At least %1 GiB is required." ).arg( req ); }, enoughStorage, m_entriesToRequire.contains( entry ) } ); } else if ( entry == "ram" ) { checkEntries.append( { entry, [req = m_requiredRamGiB] { return tr( "has at least %1 GiB working memory" ).arg( req ); }, [req = m_requiredRamGiB] { return tr( "The system does not have enough working memory. At least %1 GiB is required." ) .arg( req ); }, enoughRam, m_entriesToRequire.contains( entry ) } ); } else if ( entry == "power" ) { checkEntries.append( { entry, [] { return tr( "is plugged in to a power source" ); }, [] { return tr( "The system is not plugged in to a power source." ); }, hasPower, m_entriesToRequire.contains( entry ) } ); } else if ( entry == "internet" ) { checkEntries.append( { entry, [] { return tr( "is connected to the Internet" ); }, [] { return tr( "The system is not connected to the Internet." ); }, hasInternet, m_entriesToRequire.contains( entry ) } ); } else if ( entry == "root" ) { checkEntries.append( { entry, [] { return tr( "is running the installer as an administrator (root)" ); }, [] { return Calamares::Settings::instance()->isSetupMode() ? tr( "The setup program is not running with administrator rights." ) : tr( "The installer is not running with administrator rights." ); }, isRoot, m_entriesToRequire.contains( entry ) } ); } else if ( entry == "screen" ) { checkEntries.append( { entry, [] { return tr( "has a screen large enough to show the whole installer" ); }, [] { return Calamares::Settings::instance()->isSetupMode() ? tr( "The screen is too small to display the setup program." ) : tr( "The screen is too small to display the installer." ); }, enoughScreen, false } ); } } return checkEntries; } void GeneralRequirements::setConfigurationMap( const QVariantMap& configurationMap ) { bool incompleteConfiguration = false; if ( configurationMap.contains( "check" ) && configurationMap.value( "check" ).type() == QVariant::List ) { m_entriesToCheck.clear(); m_entriesToCheck.append( configurationMap.value( "check" ).toStringList() ); } else { cWarning() << "GeneralRequirements entry 'check' is incomplete."; incompleteConfiguration = true; } if ( configurationMap.contains( "required" ) && configurationMap.value( "required" ).type() == QVariant::List ) { m_entriesToRequire.clear(); m_entriesToRequire.append( configurationMap.value( "required" ).toStringList() ); } else { cWarning() << "GeneralRequirements entry 'required' is incomplete."; incompleteConfiguration = true; } #ifdef WITHOUT_LIBPARTED if ( m_entriesToCheck.contains( "storage" ) || m_entriesToRequire.contains( "storage" ) ) { // Warn, but also drop the required bit because otherwise installation // will be impossible (because the check always returns false). cWarning() << "GeneralRequirements checks 'storage' but libparted is disabled."; m_entriesToCheck.removeAll( "storage" ); m_entriesToRequire.removeAll( "storage" ); } #endif // Help out with consistency, but don't fix for ( const auto& r : m_entriesToRequire ) if ( !m_entriesToCheck.contains( r ) ) { cWarning() << "GeneralRequirements requires" << r << "but does not check it."; } if ( configurationMap.contains( "requiredStorage" ) && ( configurationMap.value( "requiredStorage" ).type() == QVariant::Double || configurationMap.value( "requiredStorage" ).type() == QVariant::LongLong ) ) { bool ok = false; m_requiredStorageGiB = configurationMap.value( "requiredStorage" ).toDouble( &ok ); if ( !ok ) { cWarning() << "GeneralRequirements entry 'requiredStorage' is invalid."; m_requiredStorageGiB = 3.; } Calamares::JobQueue::instance()->globalStorage()->insert( "requiredStorageGiB", m_requiredStorageGiB ); } else { cWarning() << "GeneralRequirements entry 'requiredStorage' is missing."; m_requiredStorageGiB = 3.; incompleteConfiguration = true; } if ( configurationMap.contains( "requiredRam" ) && ( configurationMap.value( "requiredRam" ).type() == QVariant::Double || configurationMap.value( "requiredRam" ).type() == QVariant::LongLong ) ) { bool ok = false; m_requiredRamGiB = configurationMap.value( "requiredRam" ).toDouble( &ok ); if ( !ok ) { cWarning() << "GeneralRequirements entry 'requiredRam' is invalid."; m_requiredRamGiB = 1.; incompleteConfiguration = true; } } else { cWarning() << "GeneralRequirements entry 'requiredRam' is missing."; m_requiredRamGiB = 1.; incompleteConfiguration = true; } QUrl checkInternetUrl; QString checkInternetSetting = CalamaresUtils::getString( configurationMap, "internetCheckUrl" ); if ( !checkInternetSetting.isEmpty() ) { checkInternetUrl = QUrl( checkInternetSetting.trimmed() ); if ( !checkInternetUrl.isValid() ) { cWarning() << "GeneralRequirements entry 'internetCheckUrl' is invalid in welcome.conf" << checkInternetSetting << "reverting to default (http://example.com)."; checkInternetUrl = QUrl( "http://example.com" ); incompleteConfiguration = true; } } else { cWarning() << "GeneralRequirements entry 'internetCheckUrl' is undefined in welcome.conf," "reverting to default (http://example.com)."; checkInternetUrl = "http://example.com"; incompleteConfiguration = true; } if ( checkInternetUrl.isValid() ) { CalamaresUtils::Network::Manager::instance().setCheckHasInternetUrl( checkInternetUrl ); } if ( incompleteConfiguration ) { cWarning() << "GeneralRequirements configuration map:" << Logger::DebugMap( configurationMap ); } } bool GeneralRequirements::checkEnoughStorage( qint64 requiredSpace ) { #ifdef WITHOUT_LIBPARTED Q_UNUSED( requiredSpace ) cWarning() << "GeneralRequirements is configured without libparted."; return false; #else return check_big_enough( requiredSpace ); #endif } bool GeneralRequirements::checkEnoughRam( qint64 requiredRam ) { // Ignore the guesstimate-factor; we get an under-estimate // which is probably the usable RAM for programs. quint64 availableRam = CalamaresUtils::System::instance()->getTotalMemoryB().first; return availableRam >= requiredRam * 0.95; // because MemTotal is variable } bool GeneralRequirements::checkBatteryExists() { const QFileInfo basePath( "/sys/class/power_supply" ); if ( !( basePath.exists() && basePath.isDir() ) ) { return false; } QDir baseDir( basePath.absoluteFilePath() ); const auto entries = baseDir.entryList( QDir::AllDirs | QDir::Readable | QDir::NoDotAndDotDot ); for ( const auto& item : entries ) { QFileInfo typePath( baseDir.absoluteFilePath( QString( "%1/type" ).arg( item ) ) ); QFile typeFile( typePath.absoluteFilePath() ); if ( typeFile.open( QIODevice::ReadOnly | QIODevice::Text ) ) { if ( typeFile.readAll().startsWith( "Battery" ) ) { return true; } } } return false; } bool GeneralRequirements::checkHasPower() { const QString UPOWER_SVC_NAME( "org.freedesktop.UPower" ); const QString UPOWER_INTF_NAME( "org.freedesktop.UPower" ); const QString UPOWER_PATH( "/org/freedesktop/UPower" ); if ( !checkBatteryExists() ) { return true; } cDebug() << "A battery exists, checking for mains power."; QDBusInterface upowerIntf( UPOWER_SVC_NAME, UPOWER_PATH, UPOWER_INTF_NAME, QDBusConnection::systemBus() ); bool onBattery = upowerIntf.property( "OnBattery" ).toBool(); if ( !upowerIntf.isValid() ) { // We can't talk to upower but we're obviously up and running // so I guess we got that going for us, which is nice... return true; } // If a battery exists but we're not using it, means we got mains // power. return !onBattery; } bool GeneralRequirements::checkHasInternet() { auto& nam = CalamaresUtils::Network::Manager::instance(); bool hasInternet = nam.checkHasInternet(); Calamares::JobQueue::instance()->globalStorage()->insert( "hasInternet", hasInternet ); return hasInternet; } bool GeneralRequirements::checkIsRoot() { return !geteuid(); } calamares-3.2.20/src/modules/welcome/checker/GeneralRequirements.h000066400000000000000000000031401362604102500251530ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2017, Teo Mrnjavac * Copyright 2017, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef GENERALREQUIREMENTS_H #define GENERALREQUIREMENTS_H #include #include #include "modulesystem/Requirement.h" class GeneralRequirements : public QObject { Q_OBJECT public: explicit GeneralRequirements( QObject* parent = nullptr ); void setConfigurationMap( const QVariantMap& configurationMap ); Calamares::RequirementsList checkRequirements(); private: QStringList m_entriesToCheck; QStringList m_entriesToRequire; bool checkEnoughStorage( qint64 requiredSpace ); bool checkEnoughRam( qint64 requiredRam ); bool checkBatteryExists(); bool checkHasPower(); bool checkHasInternet(); bool checkIsRoot(); qreal m_requiredStorageGiB; qreal m_requiredRamGiB; }; #endif // REQUIREMENTSCHECKER_H calamares-3.2.20/src/modules/welcome/checker/ResultWidget.cpp000066400000000000000000000041541362604102500241550ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2017, 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "ResultWidget.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" #include static inline void setCondition( QLabel* label, CalamaresUtils::ImageType t ) { label->setPixmap( CalamaresUtils::defaultPixmap( t, CalamaresUtils::Original, QSize( label->height(), label->height() ) ) ); } ResultWidget::ResultWidget( bool satisfied, bool required, QWidget* parent ) : QWidget( parent ) { QBoxLayout* mainLayout = new QHBoxLayout; setLayout( mainLayout ); m_iconLabel = new QLabel( this ); mainLayout->addWidget( m_iconLabel ); m_iconLabel->setFixedSize( CalamaresUtils::defaultIconSize() ); m_textLabel = new QLabel( this ); mainLayout->addWidget( m_textLabel ); m_textLabel->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ); if ( satisfied ) setCondition( m_iconLabel, CalamaresUtils::StatusOk ); else if ( required ) setCondition( m_iconLabel, CalamaresUtils::StatusError ); else setCondition( m_iconLabel, CalamaresUtils::StatusWarning ); } void ResultWidget::setText( const QString& text ) { m_textLabel->setText( text ); } calamares-3.2.20/src/modules/welcome/checker/ResultWidget.h000066400000000000000000000031721362604102500236210ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2017, 2019, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef CHECKER_RESULTWIDGET_H #define CHECKER_RESULTWIDGET_H #include /** * @brief Displays the results of a single check. * * Widget to insert into a ResultListWidget to display an iconic status * (warning or failure when the check is not satisfied) along with * descriptive test. */ class ResultWidget : public QWidget { Q_OBJECT public: /** * @brief Create widget with results of a check. * * Use setText() to set up the text of the widget. */ explicit ResultWidget( bool satisfied, bool required, QWidget* parent = nullptr ); /// @brief Set the displayed description of the check. void setText( const QString& text ); private: QLabel* m_textLabel; QLabel* m_iconLabel; }; #endif // CHECKER_RESULTWIDGET_H calamares-3.2.20/src/modules/welcome/checker/ResultsListWidget.cpp000066400000000000000000000245661362604102500252050ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2017, 2019-2020, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "ResultsListWidget.h" #include "ResultWidget.h" #include "Branding.h" #include "Settings.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" #include "utils/Retranslator.h" #include "widgets/FixedAspectRatioLabel.h" #include #include #include #include #include /** @brief Add widgets to @p layout for the list @p checkEntries * * The @p resultWidgets is filled with pointers to the widgets; * for each entry in @p checkEntries that satisfies @p predicate, * a widget is created, otherwise a nullptr is added instead. * * Adds all the widgets to the given @p layout. * * Afterwards, @p resultWidgets has a length equal to @p checkEntries. */ static void createResultWidgets( QLayout* layout, QList< ResultWidget* >& resultWidgets, const Calamares::RequirementsList& checkEntries, std::function< bool( const Calamares::RequirementEntry& ) > predicate ) { resultWidgets.clear(); resultWidgets.reserve( checkEntries.count() ); for ( const auto& entry : checkEntries ) { if ( !predicate( entry ) ) { resultWidgets.append( nullptr ); continue; } ResultWidget* ciw = new ResultWidget( entry.satisfied, entry.mandatory ); layout->addWidget( ciw ); ciw->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ); ciw->setAutoFillBackground( true ); QPalette pal( ciw->palette() ); QColor bgColor = pal.window().color(); int bgHue = ( entry.satisfied ) ? bgColor.hue() : ( entry.mandatory ) ? 0 : 60; bgColor.setHsv( bgHue, 64, bgColor.value() ); pal.setColor( QPalette::Window, bgColor ); ciw->setPalette( pal ); resultWidgets.append( ciw ); } } /** @brief A "details" dialog for the results-list * * This displays the same RequirementsList as ResultsListWidget, * but the *details* part rather than the show description. * * This is an internal-to-the-widget class. */ class ResultsListDialog : public QDialog { public: /** @brief Create a dialog for the given @p checkEntries list of requirements. * * The list must continue to exist for the lifetime of the dialog, * or UB happens. */ ResultsListDialog( QWidget* parent, const Calamares::RequirementsList& checkEntries ); virtual ~ResultsListDialog(); private: QLabel* m_title; QList< ResultWidget* > m_resultWidgets; ///< One widget for each entry with details available const Calamares::RequirementsList& m_entries; void retranslate(); }; ResultsListDialog::ResultsListDialog( QWidget* parent, const Calamares::RequirementsList& checkEntries ) : QDialog( parent ) , m_entries( checkEntries ) { auto* mainLayout = new QVBoxLayout; auto* entriesLayout = new QVBoxLayout; m_title = new QLabel( this ); createResultWidgets( entriesLayout, m_resultWidgets, checkEntries, []( const Calamares::RequirementEntry& e ) { return e.hasDetails(); } ); QDialogButtonBox* buttonBox = new QDialogButtonBox( QDialogButtonBox::Close, Qt::Horizontal, this ); mainLayout->addWidget( m_title ); mainLayout->addLayout( entriesLayout ); mainLayout->addWidget( buttonBox ); setLayout( mainLayout ); connect( buttonBox, &QDialogButtonBox::clicked, this, &QDialog::close ); CALAMARES_RETRANSLATE_SLOT( &ResultsListDialog::retranslate ) retranslate(); // Do it now to fill in the texts } ResultsListDialog::~ResultsListDialog() {} void ResultsListDialog::retranslate() { m_title->setText( tr( "For best results, please ensure that this computer:" ) ); setWindowTitle( tr( "System requirements" ) ); int i = 0; for ( const auto& entry : m_entries ) { if ( m_resultWidgets[ i ] ) { m_resultWidgets[ i ]->setText( entry.enumerationText() ); } i++; } } ResultsListWidget::ResultsListWidget( QWidget* parent, const Calamares::RequirementsList& checkEntries ) : QWidget( parent ) , m_entries( checkEntries ) { setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ); QBoxLayout* mainLayout = new QVBoxLayout; QBoxLayout* entriesLayout = new QVBoxLayout; setLayout( mainLayout ); int paddingSize = qBound( 32, CalamaresUtils::defaultFontHeight() * 4, 128 ); QHBoxLayout* spacerLayout = new QHBoxLayout; mainLayout->addLayout( spacerLayout ); spacerLayout->addSpacing( paddingSize ); spacerLayout->addLayout( entriesLayout ); spacerLayout->addSpacing( paddingSize ); CalamaresUtils::unmarginLayout( spacerLayout ); m_explanation = new QLabel; m_explanation->setWordWrap( true ); m_explanation->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ); m_explanation->setOpenExternalLinks( false ); connect( m_explanation, &QLabel::linkActivated, this, &ResultsListWidget::linkClicked ); entriesLayout->addWidget( m_explanation ); // Check that all are satisfied (gives warnings if not) and // all *mandatory* entries are satisfied (gives errors if not). auto isUnSatisfied = []( const Calamares::RequirementEntry& e ) { return !e.satisfied; }; const bool requirementsSatisfied = std::none_of( checkEntries.begin(), checkEntries.end(), isUnSatisfied ); createResultWidgets( entriesLayout, m_resultWidgets, checkEntries, isUnSatisfied ); if ( !requirementsSatisfied ) { entriesLayout->insertSpacing( 1, CalamaresUtils::defaultFontHeight() / 2 ); mainLayout->addStretch(); } else { if ( !Calamares::Branding::instance()->imagePath( Calamares::Branding::ProductWelcome ).isEmpty() ) { QPixmap theImage = QPixmap( Calamares::Branding::instance()->imagePath( Calamares::Branding::ProductWelcome ) ); if ( !theImage.isNull() ) { QLabel* imageLabel; if ( Calamares::Branding::instance()->welcomeExpandingLogo() ) { FixedAspectRatioLabel* p = new FixedAspectRatioLabel; p->setPixmap( theImage ); imageLabel = p; } else { imageLabel = new QLabel; imageLabel->setPixmap( theImage ); } imageLabel->setContentsMargins( 4, CalamaresUtils::defaultFontHeight() * 3 / 4, 4, 4 ); mainLayout->addWidget( imageLabel ); imageLabel->setAlignment( Qt::AlignCenter ); imageLabel->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ); } } m_explanation->setAlignment( Qt::AlignCenter ); } CALAMARES_RETRANSLATE_SLOT( &ResultsListWidget::retranslate ) retranslate(); } void ResultsListWidget::linkClicked( const QString& link ) { if ( link == "#details" ) { auto* dialog = new ResultsListDialog( this, m_entries ); dialog->exec(); dialog->deleteLater(); } } void ResultsListWidget::retranslate() { int i = 0; for ( const auto& entry : m_entries ) { if ( m_resultWidgets[ i ] ) { m_resultWidgets[ i ]->setText( entry.negatedText() ); } i++; } // Check that all are satisfied (gives warnings if not) and // all *mandatory* entries are satisfied (gives errors if not). auto isUnSatisfied = []( const Calamares::RequirementEntry& e ) { return !e.satisfied; }; auto isMandatoryAndUnSatisfied = []( const Calamares::RequirementEntry& e ) { return e.mandatory && !e.satisfied; }; const bool requirementsSatisfied = std::none_of( m_entries.begin(), m_entries.end(), isUnSatisfied ); const bool mandatorySatisfied = std::none_of( m_entries.begin(), m_entries.end(), isMandatoryAndUnSatisfied ); if ( !requirementsSatisfied ) { QString message; const bool setup = Calamares::Settings::instance()->isSetupMode(); if ( !mandatorySatisfied ) { message = setup ? tr( "This computer does not satisfy the minimum " "requirements for setting up %1.
" "Setup cannot continue. " "Details..." ) : tr( "This computer does not satisfy the minimum " "requirements for installing %1.
" "Installation cannot continue. " "Details..." ); } else { message = setup ? tr( "This computer does not satisfy some of the " "recommended requirements for setting up %1.
" "Setup can continue, but some features " "might be disabled." ) : tr( "This computer does not satisfy some of the " "recommended requirements for installing %1.
" "Installation can continue, but some features " "might be disabled." ); } m_explanation->setText( message.arg( *Calamares::Branding::ShortVersionedName ) ); } else { m_explanation->setText( tr( "This program will ask you some questions and " "set up %2 on your computer." ) .arg( *Calamares::Branding::ProductName ) ); } } calamares-3.2.20/src/modules/welcome/checker/ResultsListWidget.h000066400000000000000000000031011362604102500246300ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2019-2020, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef CHECKER_RESULTSLISTWIDGET_H #define CHECKER_RESULTSLISTWIDGET_H #include "ResultWidget.h" #include "modulesystem/Requirement.h" #include class QLabel; class ResultsListWidget : public QWidget { Q_OBJECT public: explicit ResultsListWidget( QWidget* parent, const Calamares::RequirementsList& checkEntries ); private: /// @brief A link in the explanatory text has been clicked void linkClicked( const QString& link ); void retranslate(); QLabel* m_explanation = nullptr; ///< Explanatory text above the list, with link const Calamares::RequirementsList& m_entries; QList< ResultWidget* > m_resultWidgets; ///< One widget for each unsatisfied entry }; #endif // CHECKER_RESULTSLISTWIDGET_H calamares-3.2.20/src/modules/welcome/checker/partman_devices.c000066400000000000000000000070011362604102500243310ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * * Based on parted_devices.c, from partman-base. * * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "partman_devices.h" #include #include #include #include #include #include #ifdef __linux__ /* from */ #define CDROM_GET_CAPABILITY 0x5331 /* get capabilities */ #endif /* __linux__ */ #ifdef __FreeBSD_kernel__ #include #include #endif #include #if defined(__linux__) static int is_cdrom(const char *path) { int fd = -1; int ret = -1; fd = open(path, O_RDONLY | O_NONBLOCK); if (fd >= 0) { ret = ioctl(fd, CDROM_GET_CAPABILITY, NULL); close(fd); } if (ret >= 0) return 1; else return 0; } #elif defined(__FreeBSD_kernel__) /* !__linux__ */ static int is_cdrom(const char *path) { int fd; fd = open(path, O_RDONLY | O_NONBLOCK); ioctl(fd, CDIOCCAPABILITY, NULL); close(fd); if (errno != EBADF && errno != ENOTTY) return 1; else return 0; } #else /* !__linux__ && !__FreeBSD_kernel__ */ #define is_cdrom(path) 0 #endif #if defined(__linux__) static int is_floppy(const char *path) { return (strstr(path, "/dev/floppy") != NULL || strstr(path, "/dev/fd") != NULL); } #elif defined(__FreeBSD_kernel__) /* !__linux__ */ static int is_floppy(const char *path) { return (strstr(path, "/dev/fd") != NULL); } #else /* !__linux__ && !__FreeBSD_kernel__ */ #define is_floppy(path) 0 #endif static long long process_device(PedDevice *dev) { if (dev->read_only) return -1; if (is_cdrom(dev->path) || is_floppy(dev->path)) return -1; /* Exclude compcache (http://code.google.com/p/compcache/) */ if (strstr(dev->path, "/dev/ramzswap") != NULL || strstr(dev->path, "/dev/zram") != NULL) return -1; return dev->length * dev->sector_size; } int check_big_enough(long long required_space) { PedDevice *dev = NULL; ped_exception_fetch_all(); ped_device_probe_all(); bool big_enough = false; for (dev = NULL; NULL != (dev = ped_device_get_next(dev));) { long long dev_size = process_device(dev); if (dev_size >= required_space) { big_enough = true; break; } } // We would free the devices to release allocated memory, // but other modules might be using partman use well, // and they can hold pointers to libparted structures in // other threads. // // So prefer to leak memory, instead. // // ped_device_free_all(); return big_enough; } /* Local variables: indent-tabs-mode: nil c-file-style: "linux" c-font-lock-extra-types: ("Ped\\sw+") End: */ calamares-3.2.20/src/modules/welcome/checker/partman_devices.h000066400000000000000000000017531362604102500243460ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014, Teo Mrnjavac * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef PARTMAN_DEVICES_H #define PARTMAN_DEVICES_H #ifdef __cplusplus extern "C" { #endif int check_big_enough(long long required_space); #ifdef __cplusplus } // extern "C" #endif #endif // PARTMAN_DEVICES_H calamares-3.2.20/src/modules/welcome/language-icon-128px.png000066400000000000000000000110321362604102500235130ustar00rootroot00000000000000‰PNG  IHDR€€Ã>aË pHYs  ÒÝ~ütEXtCreation Time01/29/13?pÅtEXtSoftwareAdobe Fireworks CS5qµã6iTXtXML:com.adobe.xmpUTF-8XML:com.adobe.xmphíÛËŽ›0à}žÂr·ÛäV, ªºIUu"Íhvœ JÀÈx“Wë¢ÔW¨sm&ªº¨ÚÝï(Q0çœÏ>xK4éê4Û(K–j]T1ýñí;%EÓ‡áœÏë©z.>팺ß}^d»Mæt’ô¢Nve]*›’®ÜVìbšæz©¤û¿Ÿf”Bì&¦÷7Èãü ™j£ÈÐç^ÆGœŒ„/úƒñxüž\pÆ&OŒe?œ“Ó IÏýF&_ɯ³»ç®búlm-kÛÖoû¾6k&Â0Ü— ÏExÍkeÓΫšwÇ"ç:3Õd¦¨m¡+²¿N—úÅÆ”öÈÕ8í«¬/PÕø‡=ú™.Y—ÖLøœ]*ï‹»h95*µÚ,´Þ&ÇßFµÚl2½á²Ügða@Š*×m±Û¼ß•T3÷M\£ú^.‚@ö…ò§«ücÐMú\çÅêõ*=ôøháúÌG28§_[Ånzõ·=̳K ë³=<©ÀóYëYÊÞÏyöïÙ¿ï~Þ÷³A¡P( …B¡P( …B¡P( …B¡P(“Ñtq~ÌnVµÆšã]~L£k‰ÐD¯?¢ g–1¼…–ñ2 ¸ÛXs<ÊDà/´pºŸŸŸøûû7þýˆqæC£ƒ8¬†h—»üø]>M&“ÄÄÄÈo¼!çΓ!C†(Øfà „e  ŒÖ'i‘§èèhÙ°aƒœ>}Zô(ØuÀnà_€ž†XÚ6À?ÇÐJ±&Û£¢¢$==]N:%­¡à\¨þ üè}“›ŒÖj/¢…ÓÇ'¯¼òŠ”––¶êt% W —€Íx¯'ÑèôB´*ªÉ–Q£FÉË/¿,'Nœ‹Åâã•Ú/}ðTO"XŽÖiæôÈÈHY½zµ;vÌi§+h¸SúÐÞžÄ` p€N:t¨¬ZµJŽ9Ò.§+hxJÁ‚ã=‰[€…À út $+W®”¢¢"·9] @ÃÓÐ[=‰``ðŸÀu}üÈ’%KäàÁƒb6›Ýît_@€5€@àá¡­õþ; ´1BXX³fÍ"))‰iÓ¦áïïoŒ¥^¦«@O`zã<ðÏ=÷÷ß?Fö,¡Ë 44”#FPRRÀgŸ}ÆåË—IHH !!±cÇb2u¥ù)ãðZ 44TæÏŸ/»ví’k×®INNN«q###eÕªURXXèñúßÚFâQ´tºž¶ ááá²xñbÙ·oŸÔÕÕ)¸·  -§»"}èÓ§$''K~~¾ÔÖÖ*¸· Ñérýúu‡nº+Ї=zHbb¢|ðÁråÊ%qY®8ÝЇ   ‰—Í›7Ëùó畜À)´×鞀>øùùILLŒlذA~øá%;Ø@Ÿ>}dÁ‚nqº7Ð2Œ?^Ö®]+_ýu«ÃÈ]U}€]xÑéF@î¸ãyöÙg¥¨¨¨Y÷²+ ˜ÐbìÝN7Zú!‹/–ýû÷ËàÁƒ;µB€dàà-œž’’"»wïöŠÓ}I­„?Ý<ãïó8ð7|Èé@T9À\´‡§C2Ý:9_qº€>\C›Â^ˆöæP‡!´Á_rºž"}hžö€¯<7ؽ{w~øaO%ßÕðúz"a?O$ªè8(¸‰èèh‚‚‚Œ6Ãi”ÜÀðáÃ),,äâÅ‹ää䜜L¿~ýŒ6Ë!:„ªªªÈËËcÉ’%ÄÄÄðÖ[omR3ž~úiüüüèÝ»7³gÏfÛ¶mœ?ž¼¼<£M3„X@œnŸ>}ZŠ‹‹åܹsòå—_ÊÆ%..N›µŠGí3½€àà`¹pá‚ÍëX,‰ˆˆp×µV{ÂY>µ&000)S¦`6›ÛŒ7aÂ/YdŸÄÄDÂÂl¿v`2™˜1cÙÙÙ^¶Êq|ª 0`ÉÉÉmÆ™0a¯¿þº—,²Ï¢E‹Ú<ï%K|‡X\¬DDjkk%))ɪ —ôôô6—z?~\¾ùæ¯UcÆŒ±û¶Ð¥K—ÄÏÏÏg«OK; ¢ÕÅÅŲiÓ&Ù¶m›=zTlƽvíšdeeÉ=÷Ü#€lÚ´ÉnúîÀ›o¾éP~&Mš¤àn$;;[?Ÿ.€ìÚµËîoÝ!€=zÈ/¿üâ­kÖ¬ñYøTÀÊÊÊÈÌÌdìØ±¤¤¤PVVÖt.22Òkuîܹs ql®«µbqs P^^.7n”‰'¶ù”¼ûçŽàÈ‘#6Ó>~ü¸Õ±úúz ñÉÀÄâ\¸pA¶lÙ"qqqV¨ÐÐPyüñÇeòäÉMÇn¿ýv‡_Þh¯&NœØjãoúôéR^^nu|Ö¬YJma±X¤´´T6lØ Ó¦MÓïŸ' õRSSeÿþýRWW'ׯ_—Ûn»­éüÖ­[¾V{ÐÚµNž<)&“I²³³­Î½ýöÛJz~ûí7)))‘÷Þ{O–.]*#FŒh–က™Ü©W·Ú#€ÐÐP©©©±™îòåˤ¤$«s?þø£€žÜÜ\›íÕ«—äææJUUU«¿­««“áÇ7ýÆÑºßXºt©Í4kjj$44T¹å–[¤¾¾¾Ùy‹Å"#GŽTh¤ªªJî¼óN«ŒÆÆÆÚu`vvvSü‘#G:ýâf{ÐÚ@Ó;ï¼Ó,^aa¡UœeË–)詪ª’ŒŒ Y¶l™<ÿüó’ŸŸoõä´¤åÓ¿sçNǼ®ÃUL›6Ífz‹E¢¢¢šÅ}饗¬â(´—¬¬¬¦›òàƒº´q“«ؾ}»ÍôŠŠŠ¬âNš4É*^MM+¸Êõë×eèСH`` œ8qÂ¥t\@XXX«óÉÉÉVñýüüäâÅ‹Vqãââ|Jj$0++‹Ÿ~ú €´´4Fíµk?ùä“[¿té}ô‘Õq‹ÅÂÞ½{­Žw…QÁX>¾é)jkM€£TWW»´Wð¢E‹¤°°Ðê v¡î@²²²¬lËÌÌTГžž.€„„„ÈÉ“'þ½£8Ó ¼õÖ[%%%Eòóó¥²²²©tr6Ì™3ÇÊŽS§N)4òÅ_H@@€øûû·{¨×®N;Sô· }ûöµÙh¹®Ðyg+**HJJ¢¡¡ŒŒ Ÿ1³÷Òj[TVVrôèQ«ãFçÕp\½z•„„ÊËËIMM%55Õh“<†­éá3f`ÉM €Åb!%%…ââb{ì1222:õçZöíÛgu,66ÖЭe Àš5kرcS¦LaÇŽøÔvn§¨¨ˆ_ýµÙ±ž={cE ++‹W_}•{ï½—‚‚ºwïn”)^£¾¾ž¨¨(ÒÒÒøüóÏ©¯¯Œo¸›XìôrssÅßß_fϞݮ•=®â+EöéÓGæÍ›'/¾ø¢a½¯—¹"BDDßÿ=C† éÔu¾=®\¹ÂöíÛ µÁë0™LDGG{û²ŠV0¼èmD„òòr£Íð:w³û"BII 999|üñÇÍ6•èêtZØqz=Ú§â?îâèDkp†N%;No;€<àÒãz h_ïå=«;±¸8è ;Š=óÌ3VF¡9ý¿Å@íï<¼ \¤Ý<7‡Î=è f³¹-§›Ñžô%ÀÀvæÅ¸x8ƒ÷®à„Ó¿–Ê— ˜üøÝgq¼ºžÌf³IZZZ³ý€¸éôB`0È€|Ž^Žâ1t 8àô" lX­ ¬D«zPpNvœnŠg€Û Ë•ãôþø;->ÙÎй`6›¥°°PV®\iÏéC ËIû þø¨¡« @ïtÝ'S;›Ó[ã€ßÛ€JºŠì8]_§w„âÝ]ÓM@9Q½zõjËé‡ÐM]Éé­aîÖßÑYÐ"4Ã.Ø.[Gâ.àeàKšw/;ŒîDsx°ø0ÀP‹:.ÃC+1Ÿ÷Ä<µgÚ8ú¥ïkL2Ñ&˜*oü«ÿ%Ú U{î‡?Zõ©ðQþFëõwÐ1¾$©p™¡@-¶ðwãÌ긄à¡/f{ÕØÀ|#ê¨|\Cëõ4ØGˆò±vþU ·vuX ¸yËÑzÖ{µO/´n[57G4õÝ·®ùa7`¸y3Ï¢úÂ’­´"ÿ7í;ÄÕ›c”…àOÀ¯Ü¼©UÀÿh€=cІpŸøFaþ¼'ü†Õ@ççÍKôÖçh>ôÀ¿£‰ÁSãÃÐJžÿ¥yñ^†¶ ÉÖŠâÀ‡²§K$»Ñ–wë\hÅo* ôp!} ÌE[ xœæN7£-'ŸCÛ«ªІu}šŽþbÞ@`60ˆZ¾hoN£=©gÑ“—¸9¢fB«bÂn¤5Íù-…c޹hËÊ;Í›%]zz£­àжxs<®7-@)ÚTõÿ{ón°ÑçèLh‰ ­î‰ödB{Êmu%A[ö} mJ¶mTO¡P( …B¡P( …B¡P( …B¡è¸ü?ßÅXBˆü†ØIEND®B`‚calamares-3.2.20/src/modules/welcome/language-icon-48px.png000066400000000000000000000044131362604102500234410ustar00rootroot00000000000000‰PNG  IHDR00Wù‡ pHYs  ÒÝ~ütEXtCreation Time01/29/13?pÅtEXtSoftwareAdobe Fireworks CS5qµã6iTXtXML:com.adobe.xmpUTF-8XML:com.adobe.xmphíÛËŽ›0à}žÂr·ÛäV, ªºIUu"Íhvœ JÀÈx“Wë¢ÔW¨sm&ªº¨ÚÝï(Q0çœÏ>xK4éê4Û(K–j]T1ýñí;%EÓ‡áœÏë©z.>팺ß}^d»Mæt’ô¢Nve]*›’®ÜVìbšæz©¤û¿Ÿf”Bì&¦÷7Èãü ™j£ÈÐç^ÆGœŒ„/úƒñxüž\pÆ&OŒe?œ“Ó IÏýF&_ɯ³»ç®búlm-kÛÖoû¾6k&Â0Ü— ÏExÍkeÓΫšwÇ"ç:3Õd¦¨m¡+²¿N—úÅÆ”öÈÕ8í«¬/PÕø‡=ú™.Y—ÖLøœ]*ï‹»h95*µÚ,´Þ&ÇßFµÚl2½á²Ügða@Š*×m±Û¼ß•T3÷M\£ú^.‚@ö…ò§«ücÐMú\çÅêõ*=ôøháúÌG28§_[Ånzõ·=̳K ë³=<©‰€eË–‰Ýn—®®.‰D"""òîÝ;±X,ôSEÖ­['Ç—GI4ýÆœD§Ó‰Éd»Ý.·nÝ’ááá„•NÀÔf0¤¦¦F>,7€,^¼—Ëʼn'xùò%»víÂf³ …2²w8F¾9±XŒ/^ÐÖÖÆÞ½{ihhàÉ“'TWW³råJÓŽa4Ù³gŠ¢pêÔ)Þ¼yÃÆY¸paÎ"RñAtttÈŠ+dÓ¦MÒ××'‘HD"‘ˆlÞ¼YNŸ>ýAµJ–¢ªªƒA1›Írûöm‰ÇãRWW—Sd% ‹ßï—p8üþ7·Û-‹%aHv”èíí‘¶¶6QEš››EUU9vìØì'±N§Ãl6SZªûÇÆÆ8yò$.—‹âââ´ö6l ¶¶€–/_ŽÇã`ûöíIËuJŸ²¶˜Â… X°`>ŸçÏŸ311‘²¿ÝnÇ`0pôèQ?~̹sçgÍš5TTTÌÄi™véïï—õë×K §OŸÊ–-[dçÎïcúãš7ožŒŒŒˆªªòðáCù`ûúïðg´¯9_åiÞY©½ 0í‹£‚öM-ügæšcŽÿ{þ •^J¹ïIEND®B`‚calamares-3.2.20/src/modules/welcome/welcome.conf000066400000000000000000000066651362604102500217360ustar00rootroot00000000000000# Configuration for the welcome module. The welcome page # displays some information from the branding file. # Which parts it displays can be configured through # the show* variables. # # In addition to displaying the welcome page, this module # can check requirements for installation. --- # Display settings for various buttons on the welcome page. # The URLs themselves come from branding.desc is the setting # here is "true". If the setting is false, the button is hidden. # The setting can also be a full URL which will then be used # instead of the one from the branding file, or empty or not-set # which will hide the button. showSupportUrl: true showKnownIssuesUrl: true showReleaseNotesUrl: true # If this Url is set to something non-empty, a "donate" # button is added to the welcome page alongside the # others (see settings, above). Clicking the button opens # the corresponding link. (This button has no corresponding # branding.desc string) # # showDonateUrl: https://kde.org/community/donations/ # Requirements checking. These are general, generic, things # that are checked. They may not match with the actual requirements # imposed by other modules in the system. requirements: # Amount of available disk, in GiB. Floating-point is allowed here. # Note that this does not account for *usable* disk, so it is possible # to pass this requirement, yet have no space to install to. requiredStorage: 5.5 # Amount of available RAM, in GiB. Floating-point is allowed here. requiredRam: 1.0 # To check for internet connectivity, Calamares does a HTTP GET # on this URL; on success (e.g. HTTP code 200) internet is OK. internetCheckUrl: http://google.com # List conditions to check. Each listed condition will be # probed in some way, and yields true or false according to # the host system satisfying the condition. # # This sample file lists all the conditions that are known. check: - storage - ram - power - internet - root - screen # List conditions that **must** be satisfied (from the list # of conditions, above) for installation to proceed. # If any of these conditions are not met, the user cannot # continue past the welcome page. required: # - storage - ram # - root # GeoIP checking # # This can be used to pre-select a language based on the country # the user is currently in. It *assumes* that there's internet # connectivity, though. Configuration is like in the locale module, # but remember to use a URL that returns full data **and** to # use a selector that will pick the country, not the timezone. # # To disable GeoIP checking, either comment-out the entire geoip section, # or set the *style* key to an unsupported format (e.g. `none`). # Also, note the analogous feature in src/modules/locale/locale.conf. # geoip: style: "none" url: "https://geoip.kde.org/v1/ubiquity" # extended XML format selector: "CountryCode" # blank uses default, which is wrong # User interface # # The "select language" icon is an international standard, but it # might not theme very well with your desktop environment. # Fill in an icon name (following FreeDesktop standards) to # use that named icon instead of the usual one. # # Leave blank or unset to use the international standard. # # Known icons in this space are "set-language" and "config-language". # # languageIcon: set-language calamares-3.2.20/src/modules/welcome/welcome.qrc000066400000000000000000000002141362604102500215560ustar00rootroot00000000000000 language-icon-128px.png language-icon-48px.png calamares-3.2.20/src/modules/welcomeq/000077500000000000000000000000001362604102500176005ustar00rootroot00000000000000calamares-3.2.20/src/modules/welcomeq/CMakeLists.txt000066400000000000000000000022221362604102500223360ustar00rootroot00000000000000# This is a re-write of the welcome module using QML view steps # instead of widgets. set( _welcome ${CMAKE_CURRENT_SOURCE_DIR}/../welcome ) include_directories( ${PROJECT_BINARY_DIR}/src/libcalamaresui ${_welcome} ) # DUPLICATED WITH WELCOME MODULE find_package( Qt5 ${QT_VERSION} CONFIG REQUIRED DBus Network ) find_package( LIBPARTED ) if ( LIBPARTED_FOUND ) set( PARTMAN_SRC ${_welcome}/checker/partman_devices.c ) set( CHECKER_LINK_LIBRARIES ${LIBPARTED_LIBRARY} ) else() set( PARTMAN_SRC ) set( CHECKER_LINK_LIBRARIES ) add_definitions( -DWITHOUT_LIBPARTED ) endif() set( CHECKER_SOURCES ${_welcome}/checker/CheckerContainer.cpp ${_welcome}/checker/GeneralRequirements.cpp ${_welcome}/checker/ResultWidget.cpp ${_welcome}/checker/ResultsListWidget.cpp ${PARTMAN_SRC} ) calamares_add_plugin( welcomeq TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES ${CHECKER_SOURCES} WelcomeQmlViewStep.cpp Config.cpp RESOURCES welcomeq.qrc LINK_PRIVATE_LIBRARIES calamaresui ${CHECKER_LINK_LIBRARIES} Qt5::DBus Qt5::Network SHARED_LIB ) calamares-3.2.20/src/modules/welcomeq/Config.cpp000066400000000000000000000015371362604102500215170ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019-2020, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "Config.h" Config::Config() {} Config::~Config() {} calamares-3.2.20/src/modules/welcomeq/Config.h000066400000000000000000000033501362604102500211570ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019-2020, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef WELCOMEQ_CONFIG_H #define WELCOMEQ_CONFIG_H #include #include class Config : public QObject { Q_OBJECT Q_PROPERTY( QUrl helpUrl READ helpUrl CONSTANT FINAL ) Q_PROPERTY( QUrl issuesUrl READ issuesUrl CONSTANT FINAL ) Q_PROPERTY( QUrl notesUrl READ notesUrl CONSTANT FINAL ) Q_PROPERTY( QUrl donateUrl READ donateUrl CONSTANT FINAL ) public: Config(); virtual ~Config(); void setHelpUrl( const QUrl& url ) { m_helpUrl = url; } void setIssuesUrl( const QUrl& url ) { m_issuesUrl = url; } void setNotesUrl( const QUrl& url ) { m_notesUrl = url; } void setDonateUrl( const QUrl& url ) { m_donateUrl = url; } public slots: QUrl helpUrl() const { return m_helpUrl; } QUrl issuesUrl() const { return m_issuesUrl; } QUrl notesUrl() const { return m_notesUrl; } QUrl donateUrl() const { return m_donateUrl; } private: QUrl m_helpUrl, m_issuesUrl, m_notesUrl, m_donateUrl; }; #endif calamares-3.2.20/src/modules/welcomeq/WelcomeQmlViewStep.cpp000066400000000000000000000152261362604102500240460ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac * Copyright 2018,2020 Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #include "WelcomeQmlViewStep.h" #include "checker/GeneralRequirements.h" #include "geoip/Handler.h" #include "locale/LabelModel.h" #include "locale/Lookup.h" #include "utils/Logger.h" #include "utils/Variant.h" #include "Branding.h" #include "modulesystem/ModuleManager.h" #include #include #include CALAMARES_PLUGIN_FACTORY_DEFINITION( WelcomeQmlViewStepFactory, registerPlugin< WelcomeQmlViewStep >(); ) WelcomeQmlViewStep::WelcomeQmlViewStep( QObject* parent ) : Calamares::QmlViewStep( QStringLiteral( "welcomeq" ), parent ) , m_requirementsChecker( new GeneralRequirements( this ) ) { connect( Calamares::ModuleManager::instance(), &Calamares::ModuleManager::requirementsComplete, this, &WelcomeQmlViewStep::nextStatusChanged ); } WelcomeQmlViewStep::~WelcomeQmlViewStep() {} QString WelcomeQmlViewStep::prettyName() const { return tr( "Welcome" ); } /** @brief Look up a URL for a button * * Looks up @p key in @p map; if it is a *boolean* value, then * assume an old-style configuration, and fetch the string from * the branding settings @p e. If it is a string, not a boolean, * use it as-is. If not found, or a weird type, returns empty. * * This allows switching the showKnownIssuesUrl and similar settings * in welcome.conf from a boolean (deferring to branding) to an * actual string for immediate use. Empty strings, as well as * "false" as a setting, will hide the buttons as before. */ static QString jobOrBrandingSetting( Calamares::Branding::StringEntry e, const QVariantMap& map, const QString& key ) { if ( !map.contains( key ) ) { return QString(); } auto v = map.value( key ); if ( v.type() == QVariant::Bool ) { return v.toBool() ? ( *e ) : QString(); } if ( v.type() == QVariant::String ) { return v.toString(); } return QString(); } void WelcomeQmlViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { using Calamares::Branding; m_config.setHelpUrl( jobOrBrandingSetting( Branding::SupportUrl, configurationMap, "showSupportUrl" ) ); m_config.setIssuesUrl( jobOrBrandingSetting( Branding::KnownIssuesUrl, configurationMap, "showKnownIssuesUrl" ) ); m_config.setNotesUrl( jobOrBrandingSetting( Branding::ReleaseNotesUrl, configurationMap, "showReleaseNotesUrl" ) ); m_config.setDonateUrl( CalamaresUtils::getString( configurationMap, "showDonateUrl" ) ); // TODO: figure out how the requirements (held by ModuleManager) should be accessible // to QML as a odel. if ( configurationMap.contains( "requirements" ) && configurationMap.value( "requirements" ).type() == QVariant::Map ) { m_requirementsChecker->setConfigurationMap( configurationMap.value( "requirements" ).toMap() ); } else cWarning() << "no valid requirements map found in welcome " "module configuration."; bool ok = false; QVariantMap geoip = CalamaresUtils::getSubMap( configurationMap, "geoip", ok ); if ( ok ) { using FWString = QFutureWatcher< QString >; auto* handler = new CalamaresUtils::GeoIP::Handler( CalamaresUtils::getString( geoip, "style" ), CalamaresUtils::getString( geoip, "url" ), CalamaresUtils::getString( geoip, "selector" ) ); if ( handler->type() != CalamaresUtils::GeoIP::Handler::Type::None ) { auto* future = new FWString(); connect( future, &FWString::finished, [view = this, f = future, h = handler]() { QString countryResult = f->future().result(); cDebug() << "GeoIP result for welcome=" << countryResult; view->setCountry( countryResult, h ); f->deleteLater(); delete h; } ); future->setFuture( handler->queryRaw() ); } else { // Would not produce useful country code anyway. delete handler; } } QString language = CalamaresUtils::getString( configurationMap, "languageIcon" ); if ( !language.isEmpty() ) { auto icon = Calamares::Branding::instance()->image( language, QSize( 48, 48 ) ); if ( !icon.isNull() ) { // TODO: figure out where to set this: Config? } } QmlViewStep::setConfigurationMap( configurationMap ); // call parent implementation last } Calamares::RequirementsList WelcomeQmlViewStep::checkRequirements() { return m_requirementsChecker->checkRequirements(); } static inline void logGeoIPHandler( CalamaresUtils::GeoIP::Handler* handler ) { if ( handler ) { cDebug() << Logger::SubEntry << "Obtained from" << handler->url() << " (" << static_cast< int >( handler->type() ) << handler->selector() << ')'; } } void WelcomeQmlViewStep::setCountry( const QString& countryCode, CalamaresUtils::GeoIP::Handler* handler ) { if ( countryCode.length() != 2 ) { cDebug() << "Unusable country code" << countryCode; logGeoIPHandler( handler ); return; } auto c_l = CalamaresUtils::Locale::countryData( countryCode ); if ( c_l.first == QLocale::Country::AnyCountry ) { cDebug() << "Unusable country code" << countryCode; logGeoIPHandler( handler ); return; } else { int r = CalamaresUtils::Locale::availableTranslations()->find( countryCode ); if ( r < 0 ) { cDebug() << "Unusable country code" << countryCode << "(no suitable translation)"; } if ( ( r >= 0 ) ) { // TODO: update Config to point to selected language } } } QObject* WelcomeQmlViewStep::getConfig() { return &m_config; } calamares-3.2.20/src/modules/welcomeq/WelcomeQmlViewStep.h000066400000000000000000000042521362604102500235100ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2019-2020 Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ #ifndef WELCOME_QMLVIEWSTEP_H #define WELCOME_QMLVIEWSTEP_H #include "Config.h" #include "DllMacro.h" #include "modulesystem/Requirement.h" #include "utils/PluginFactory.h" #include "viewpages/QmlViewStep.h" #include #include namespace CalamaresUtils { namespace GeoIP { class Handler; } } // namespace CalamaresUtils class GeneralRequirements; class PLUGINDLLEXPORT WelcomeQmlViewStep : public Calamares::QmlViewStep { Q_OBJECT public: explicit WelcomeQmlViewStep( QObject* parent = nullptr ); virtual ~WelcomeQmlViewStep() override; QString prettyName() const override; void setConfigurationMap( const QVariantMap& configurationMap ) override; /** @brief Sets the country that Calamares is running in. * * This (ideally) sets up language and locale settings that are right for * the given 2-letter country code. Uses the handler's information (if * given) for error reporting. */ void setCountry( const QString&, CalamaresUtils::GeoIP::Handler* handler ); Calamares::RequirementsList checkRequirements() override; protected: QObject* getConfig() override; private: // TODO: a generic QML viewstep should return a config object from a method Config m_config; GeneralRequirements* m_requirementsChecker; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( WelcomeQmlViewStepFactory ) #endif // WELCOME_QMLVIEWSTEP_H calamares-3.2.20/src/modules/welcomeq/welcomeq.conf000066400000000000000000000020041362604102500222570ustar00rootroot00000000000000# Configuration for the welcome module. The welcome page # displays some information from the branding file. # Which parts it displays can be configured through # the show* variables. # # In addition to displaying the welcome page, this module # can check requirements for installation. --- # Display settings for various buttons on the welcome page. # The URLs themselves come from branding.desc is the setting # here is "true". If the setting is false, the button is hidden. # The setting can also be a full URL which will then be used # instead of the one from the branding file, or empty or not-set # which will hide the button. showSupportUrl: true showKnownIssuesUrl: true showReleaseNotesUrl: true # If this Url is set to something non-empty, a "donate" # button is added to the welcome page alongside the # others (see settings, above). Clicking the button opens # the corresponding link. (This button has no corresponding # branding.desc string) # # showDonateUrl: https://kde.org/community/donations/ calamares-3.2.20/src/modules/welcomeq/welcomeq.qml000066400000000000000000000113601362604102500221300ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2020, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ import calamares.ui 1.0 import QtQuick 2.10 import QtQuick.Controls 2.10 import QtQuick.Layouts 1.3 import org.kde.kirigami 2.7 as Kirigami import QtGraphicalEffects 1.0 import QtQuick.Window 2.3 Page { id: welcome header: Item { width: parent.width height: 150 Text { id: welcomeTopText anchors.horizontalCenter: parent.horizontalCenter anchors.top: parent.top // In QML, QString::arg() only takes one argument text: qsTr("

%1 %2

").arg(Branding.string(Branding.ProductName)).arg(Branding.string(Branding.Version)) } Image { id: welcomeImage anchors.centerIn: parent // imagePath() returns a full pathname, so make it refer to the filesystem // .. otherwise the path is interpreted relative to the "call site", which // .. might be the QRC file. source: "file:/" + Branding.imagePath(Branding.ProductWelcome) height: Math.min(100, parent.height) width: height sourceSize.width: width sourceSize.height: height } RowLayout { id: buttonBar width: parent.width height: 64 anchors.bottom: parent.bottom spacing: Kirigami.Units.largeSpacing* 2 /* Traditionally Calamares has had an "About" button that talks about * Calamares itself, which just isn't a very useful thing in someone * else's installation ISO. */ Button { Layout.fillWidth: true text: qsTr("About") icon.name: "documentinfo" Kirigami.Theme.backgroundColor: Qt.rgba(Kirigami.Theme.backgroundColor.r, Kirigami.Theme.backgroundColor.g, Kirigami.Theme.backgroundColor.b, 0.4) Kirigami.Theme.textColor: "#fff" visible: false onClicked: { } // TODO: show an about-Calamares window } Button { Layout.fillWidth: true text: qsTr("Support") icon.name: "documentinfo" Kirigami.Theme.backgroundColor: Qt.rgba(Kirigami.Theme.backgroundColor.r, Kirigami.Theme.backgroundColor.g, Kirigami.Theme.backgroundColor.b, 0.4) Kirigami.Theme.textColor: "#fff" visible: config.helpUrl.isValid onClicked: Qt.openUrlExternally(config.helpUrl) } Button { Layout.fillWidth: true text: qsTr("Known issues") icon.name: "documentinfo" Kirigami.Theme.backgroundColor: Qt.rgba(Kirigami.Theme.backgroundColor.r, Kirigami.Theme.backgroundColor.g, Kirigami.Theme.backgroundColor.b, 0.4) Kirigami.Theme.textColor: "#fff" visible: config.issuesUrl.isValid onClicked: Qt.openUrlExternally(config.issuesUrl) } Button { Layout.fillWidth: true text: qsTr("Release notes") icon.name: "documentinfo" Kirigami.Theme.backgroundColor: Qt.rgba(Kirigami.Theme.backgroundColor.r, Kirigami.Theme.backgroundColor.g, Kirigami.Theme.backgroundColor.b, 0.4) Kirigami.Theme.textColor: "#fff" visible: config.notesUrl.isValid onClicked: Qt.openUrlExternally(config.notesUrl) } Button { Layout.fillWidth: true text: qsTr("Donate") icon.name: "documentinfo" Kirigami.Theme.backgroundColor: Qt.rgba(Kirigami.Theme.backgroundColor.r, Kirigami.Theme.backgroundColor.g, Kirigami.Theme.backgroundColor.b, 0.4) Kirigami.Theme.textColor: "#fff" visible: config.donateUrl.isValid onClicked: Qt.openUrlExternally(config.donateUrl) } } } } calamares-3.2.20/src/modules/welcomeq/welcomeq.qrc000066400000000000000000000001631362604102500221230ustar00rootroot00000000000000 welcomeq.qml calamares-3.2.20/src/qml/000077500000000000000000000000001362604102500151055ustar00rootroot00000000000000calamares-3.2.20/src/qml/CMakeLists.txt000066400000000000000000000000361362604102500176440ustar00rootroot00000000000000add_subdirectory( calamares ) calamares-3.2.20/src/qml/calamares/000077500000000000000000000000001362604102500170355ustar00rootroot00000000000000calamares-3.2.20/src/qml/calamares/CMakeLists.txt000066400000000000000000000025621362604102500216020ustar00rootroot00000000000000file( GLOB SUBDIRECTORIES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*" ) # Iterate over all the subdirectories which have a qmldir file, copy them over to the build dir, # and install them into share/calamares/qml/calamares foreach( SUBDIRECTORY ${SUBDIRECTORIES} ) if( IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIRECTORY}" AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIRECTORY}/qmldir" ) set( QML_DIR share/calamares/qml ) set( QML_MODULE_DESTINATION ${QML_DIR}/calamares/${SUBDIRECTORY} ) # We glob all the files inside the subdirectory, and we make sure they are # synced with the bindir structure and installed. file( GLOB QML_MODULE_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIRECTORY} "${SUBDIRECTORY}/*" ) foreach( QML_MODULE_FILE ${QML_MODULE_FILES} ) if( NOT IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIRECTORY}/${QML_MODULE_FILE} ) configure_file( ${SUBDIRECTORY}/${QML_MODULE_FILE} ${SUBDIRECTORY}/${QML_MODULE_FILE} COPYONLY ) install( FILES ${CMAKE_CURRENT_BINARY_DIR}/${SUBDIRECTORY}/${QML_MODULE_FILE} DESTINATION ${QML_MODULE_DESTINATION} ) endif() endforeach() message( "-- ${BoldYellow}Configured QML module: ${BoldRed}calamares.${SUBDIRECTORY}${ColorReset}" ) endif() endforeach() message( "" ) calamares-3.2.20/src/qml/calamares/slideshow/000077500000000000000000000000001362604102500210365ustar00rootroot00000000000000calamares-3.2.20/src/qml/calamares/slideshow/BackButton.qml000066400000000000000000000016241362604102500236100ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ NavButton { id: backButton anchors.left: parent.left visible: parent.currentSlide > 0 isForward: false } calamares-3.2.20/src/qml/calamares/slideshow/ForwardButton.qml000066400000000000000000000016341362604102500243550ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ NavButton { id: forwardButton anchors.right: parent.right visible: parent.currentSlide + 1 < parent.slides.length; } calamares-3.2.20/src/qml/calamares/slideshow/NavButton.qml000066400000000000000000000037531362604102500235010ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ /* This is a navigation (arrow) button that fades in on hover, and * which calls forward / backward navigation on the presentation it * is in. It should be a child item of the presentation (not of a * single slide). Use the ForwardButton or BackButton for a pre- * configured instance that interacts with the presentation. */ import QtQuick 2.5; Image { id: fade property bool isForward : true width: 100 height: 100 anchors.verticalCenter: parent.verticalCenter opacity: 0.3 OpacityAnimator { id: fadeIn target: fade from: fade.opacity to: 1.0 duration: 500 running: false } OpacityAnimator { id: fadeOut target: fade from: fade.opacity to: 0.3 duration: 250 running: false } MouseArea { anchors.fill: parent hoverEnabled: true onEntered: { fadeOut.running = false; fadeIn.running = true } onExited: { fadeIn.running = false ; fadeOut.running = true } onClicked: { if (isForward) fade.parent.goToNextSlide() else fade.parent.goToPreviousSlide() } } } calamares-3.2.20/src/qml/calamares/slideshow/Presentation.qml000066400000000000000000000211301362604102500242210ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2017, Adriaan de Groot * - added looping, keys-instead-of-shortcut * Copyright 2018, Adriaan de Groot * - make looping a property, drop the 'c' fade-key * - drop navigation through entering a slide number * (this and the 'c' key make sense in a *presentation* * slideshow, not in a passive slideshow like Calamares) * - remove quit key * Copyright 2019, Adriaan de Groot * - Support "V2" loading * - Disable shortcuts until the content is visible in Calamares * * SPDX-License-Identifier: LGPL-2.1 * License-Filename: LICENSES/LGPLv2.1-Presentation */ /**************************************************************************** ** ** Copyright (C) 2016 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the QML Presentation System. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and Digia. For licensing terms and ** conditions see http://qt.digia.com/licensing. For further information ** use the contact form at http://qt.digia.com/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Digia gives you certain additional ** rights. These rights are described in the Digia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3.0 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU General Public License version 3.0 requirements will be ** met: http://www.gnu.org/copyleft/gpl.html. ** ** ** $QT_END_LICENSE$ ** ****************************************************************************/ import QtQuick 2.5 import QtQuick.Window 2.0 Item { id: root property variant slides: [] property int currentSlide: 0 property bool loopSlides: true property bool showNotes: false; property bool allowDelay: true; property alias mouseNavigation: mouseArea.enabled property bool arrowNavigation: true property bool keyShortcutsEnabled: true property color titleColor: textColor; property color textColor: "black" property string fontFamily: "Helvetica" property string codeFontFamily: "Courier New" // This is set by the C++ part of Calamares when the slideshow // becomes visible. You can connect it to a timer, or whatever // else needs to start only when the slideshow becomes visible. // // It is used in this example also to keep the keyboard shortcuts // enabled only while the slideshow is active. property bool activatedInCalamares: false // Private API property int _lastShownSlide: 0 Component.onCompleted: { var slideCount = 0; var slides = []; for (var i=0; i 0) root.slides[root.currentSlide].visible = true; } function switchSlides(from, to, forward) { from.visible = false to.visible = true return true } onCurrentSlideChanged: { switchSlides(root.slides[_lastShownSlide], root.slides[currentSlide], currentSlide > _lastShownSlide) _lastShownSlide = currentSlide // Always keep focus on the slideshow root.focus = true } function goToNextSlide() { if (root.slides[currentSlide].delayPoints) { if (root.slides[currentSlide]._advance()) return; } if (currentSlide + 1 < root.slides.length) ++currentSlide; else if (loopSlides) currentSlide = 0; // Loop at the end } function goToPreviousSlide() { if (currentSlide - 1 >= 0) --currentSlide; else if (loopSlides) currentSlide = root.slides.length - 1 } focus: true // Keep focus // Navigation through key events, too Keys.onSpacePressed: goToNextSlide() Keys.onRightPressed: goToNextSlide() Keys.onLeftPressed: goToPreviousSlide() // navigate with arrow keys Shortcut { sequence: StandardKey.MoveToNextLine; enabled: root.activatedInCalamares && root .arrowNavigation; onActivated: goToNextSlide() } Shortcut { sequence: StandardKey.MoveToPreviousLine; enabled: root.activatedInCalamares && root.arrowNavigation; onActivated: goToPreviousSlide() } Shortcut { sequence: StandardKey.MoveToNextChar; enabled: root.activatedInCalamares && root.arrowNavigation; onActivated: goToNextSlide() } Shortcut { sequence: StandardKey.MoveToPreviousChar; enabled: root.activatedInCalamares && root.arrowNavigation; onActivated: goToPreviousSlide() } // presentation-specific single-key shortcuts (which interfere with normal typing) Shortcut { sequence: " "; enabled: root.activatedInCalamares && root.keyShortcutsEnabled; onActivated: goToNextSlide() } // standard shortcuts Shortcut { sequence: StandardKey.MoveToNextPage; enabled: root.activatedInCalamares; onActivated: goToNextSlide() } Shortcut { sequence: StandardKey.MoveToPreviousPage; enabled: root.activatedInCalamares; onActivated: goToPreviousSlide() } MouseArea { id: mouseArea anchors.fill: parent acceptedButtons: Qt.LeftButton | Qt.RightButton onClicked: { if (mouse.button == Qt.RightButton) goToPreviousSlide() else goToNextSlide() } onPressAndHold: goToPreviousSlide(); //A back mechanism for touch only devices } Window { id: notesWindow; width: 400 height: 300 title: "QML Presentation: Notes" visible: root.showNotes Flickable { anchors.fill: parent contentWidth: parent.width contentHeight: textContainer.height Item { id: textContainer width: parent.width height: notesText.height + 2 * notesText.padding Text { id: notesText property real padding: 16; x: padding y: padding width: parent.width - 2 * padding font.pixelSize: 16 wrapMode: Text.WordWrap property string notes: root.slides[root.currentSlide].notes; onNotesChanged: { var result = ""; var lines = notes.split("\n"); var beginNewLine = false for (var i=0; i 0) result += " "; result += line; } } if (result.length == 0) { font.italic = true; text = "no notes.." } else { font.italic = false; text = result; } } } } } } } calamares-3.2.20/src/qml/calamares/slideshow/Slide.qml000066400000000000000000000153021362604102500226120ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-License-Identifier: LGPL-2.1 * License-Filename: LICENSES/LGPLv2.1-Presentation */ /**************************************************************************** ** ** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the QML Presentation System. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and Digia. For licensing terms and ** conditions see http://qt.digia.com/licensing. For further information ** use the contact form at http://qt.digia.com/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Digia gives you certain additional ** rights. These rights are described in the Digia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3.0 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU General Public License version 3.0 requirements will be ** met: http://www.gnu.org/copyleft/gpl.html. ** ** ** $QT_END_LICENSE$ ** ****************************************************************************/ import QtQuick 2.5 Item { /* Slides can only be instantiated as a direct child of a Presentation {} as they rely on several properties there. */ id: slide property bool isSlide: true; property bool delayPoints: false; property int _pointCounter: 0; function _advance() { if (!parent.allowDelay) return false; _pointCounter = _pointCounter + 1; if (_pointCounter < content.length) return true; _pointCounter = 0; return false; } property string title; property variant content: [] property string centeredText property string writeInText; property string notes; property real fontSize: parent.height * 0.05 property real fontScale: 1 property real baseFontSize: fontSize * fontScale property real titleFontSize: fontSize * 1.2 * fontScale property real bulletSpacing: 1 property real contentWidth: width // Define the slide to be the "content area" x: parent.width * 0.05 y: parent.height * 0.2 width: parent.width * 0.9 height: parent.height * 0.7 property real masterWidth: parent.width property real masterHeight: parent.height property color titleColor: parent.titleColor; property color textColor: parent.textColor; property string fontFamily: parent.fontFamily; property int textFormat: Text.PlainText visible: false Text { id: titleText font.pixelSize: titleFontSize text: title; anchors.horizontalCenter: parent.horizontalCenter anchors.bottom: parent.top anchors.bottomMargin: parent.fontSize * 1.5 font.bold: true; font.family: slide.fontFamily color: slide.titleColor horizontalAlignment: Text.Center z: 1 } Text { id: centeredId width: parent.width anchors.centerIn: parent anchors.verticalCenterOffset: - parent.y / 3 text: centeredText horizontalAlignment: Text.Center font.pixelSize: baseFontSize font.family: slide.fontFamily color: slide.textColor wrapMode: Text.Wrap } Text { id: writeInTextId property int length; font.family: slide.fontFamily font.pixelSize: baseFontSize color: slide.textColor anchors.fill: parent; wrapMode: Text.Wrap text: slide.writeInText.substring(0, length); NumberAnimation on length { from: 0; to: slide.writeInText.length; duration: slide.writeInText.length * 30; running: slide.visible && parent.visible && slide.writeInText.length > 0 } visible: slide.writeInText != undefined; } Column { id: contentId anchors.fill: parent Repeater { model: content.length Row { id: row function decideIndentLevel(s) { return s.charAt(0) == " " ? 1 + decideIndentLevel(s.substring(1)) : 0 } property int indentLevel: decideIndentLevel(content[index]) property int nextIndentLevel: index < content.length - 1 ? decideIndentLevel(content[index+1]) : 0 property real indentFactor: (10 - row.indentLevel * 2) / 10; height: text.height + (nextIndentLevel == 0 ? 1 : 0.3) * slide.baseFontSize * slide.bulletSpacing x: slide.baseFontSize * indentLevel visible: (!slide.parent.allowDelay || !delayPoints) || index <= _pointCounter Rectangle { id: dot anchors.baseline: text.baseline anchors.baselineOffset: -text.font.pixelSize / 2 width: text.font.pixelSize / 3 height: text.font.pixelSize / 3 color: slide.textColor radius: width / 2 opacity: text.text.length == 0 ? 0 : 1 } Item { id: space width: dot.width * 1.5 height: 1 } Text { id: text width: slide.contentWidth - parent.x - dot.width - space.width font.pixelSize: baseFontSize * row.indentFactor text: content[index] textFormat: slide.textFormat wrapMode: Text.WordWrap color: slide.textColor horizontalAlignment: Text.AlignLeft font.family: slide.fontFamily } } } } } calamares-3.2.20/src/qml/calamares/slideshow/SlideCounter.qml000066400000000000000000000024141362604102500241520ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2018, Adriaan de Groot * * Calamares 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. * * Calamares 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 Calamares. If not, see . */ /* This control just shows a (non-translated) count of the slides * in the slideshow in the format "n / total". */ import QtQuick 2.5; Rectangle { id: slideCounter anchors.right: parent.right anchors.bottom: parent.bottom width: 100 height: 50 Text { id: slideCounterText anchors.centerIn: parent //: slide counter, %1 of %2 (numeric) text: qsTr("%L1 / %L2").arg(parent.parent.currentSlide + 1).arg(parent.parent.slides.length) } } calamares-3.2.20/src/qml/calamares/slideshow/qmldir000066400000000000000000000003241362604102500222500ustar00rootroot00000000000000module calamares.slideshow Presentation 1.0 Presentation.qml Slide 1.0 Slide.qml NavButton 1.0 NavButton.qml ForwardButton 1.0 ForwardButton.qml BackButton 1.0 BackButton.qml SlideCounter 1.0 SlideCounter.qml