Finished fleshing out Zint barcode backend.

This commit is contained in:
Jim Evins
2017-06-03 12:52:04 -04:00
parent 3e2b40c000
commit 179103ef05
4 changed files with 2466 additions and 2 deletions
+264
View File
@@ -177,9 +177,273 @@ namespace glabels
registerBackend( "zint", "Zint" );
glbarcode::Factory::registerType( "zint::ausp", Zint::AusP::create );
glbarcode::Factory::registerType( "zint::ausrp", Zint::AusRP::create );
glbarcode::Factory::registerType( "zint::ausrt", Zint::AusRT::create );
glbarcode::Factory::registerType( "zint::ausrd", Zint::AusRD::create );
glbarcode::Factory::registerType( "zint::aztec", Zint::Aztec::create );
glbarcode::Factory::registerType( "zint::azrun", Zint::Azrun::create );
glbarcode::Factory::registerType( "zint::cbr", Zint::Cbr::create );
glbarcode::Factory::registerType( "zint::code1", Zint::Code1::create );
glbarcode::Factory::registerType( "zint::code11", Zint::Code11::create );
glbarcode::Factory::registerType( "zint::c16k", Zint::C16k::create );
glbarcode::Factory::registerType( "zint::c25m", Zint::C25m::create );
glbarcode::Factory::registerType( "zint::c25i", Zint::C25i::create );
glbarcode::Factory::registerType( "zint::c25dl", Zint::C25dl::create );
glbarcode::Factory::registerType( "zint::code32", Zint::Code32::create );
glbarcode::Factory::registerType( "zint::code39", Zint::Code39::create );
glbarcode::Factory::registerType( "zint::code39e", Zint::Code39e::create );
glbarcode::Factory::registerType( "zint::code49", Zint::Code49::create );
glbarcode::Factory::registerType( "zint::code93", Zint::Code93::create );
glbarcode::Factory::registerType( "zint::code128", Zint::Code128::create );
glbarcode::Factory::registerType( "zint::code128b", Zint::Code128b::create );
glbarcode::Factory::registerType( "zint::daft", Zint::Daft::create );
glbarcode::Factory::registerType( "zint::dmtx", Zint::Dmtx::create );
glbarcode::Factory::registerType( "zint::dpl", Zint::Dpl::create );
glbarcode::Factory::registerType( "zint::dpi", Zint::Dpi::create );
glbarcode::Factory::registerType( "zint::kix", Zint::Kix::create );
glbarcode::Factory::registerType( "zint::ean", Zint::Ean::create );
glbarcode::Factory::registerType( "zint::gmtx", Zint::Gmtx::create );
glbarcode::Factory::registerType( "zint::gs1128", Zint::Gs1128::create );
glbarcode::Factory::registerType( "zint::rss14", Zint::Rss14::create );
glbarcode::Factory::registerType( "zint::rssltd", Zint::Rssltd::create );
glbarcode::Factory::registerType( "zint::rssexp", Zint::Rssexp::create );
glbarcode::Factory::registerType( "zint::rsss", Zint::Rsss::create );
glbarcode::Factory::registerType( "zint::rssso", Zint::Rssso::create );
glbarcode::Factory::registerType( "zint::rssse", Zint::Rssse::create );
glbarcode::Factory::registerType( "zint::hibc128", Zint::Hibc128::create );
glbarcode::Factory::registerType( "zint::hibc39", Zint::Hibc39::create );
glbarcode::Factory::registerType( "zint::hibcdm", Zint::Hibcdm::create );
glbarcode::Factory::registerType( "zint::hibcqr", Zint::Hibcqr::create );
glbarcode::Factory::registerType( "zint::hibcpdf", Zint::Hibcpdf::create );
glbarcode::Factory::registerType( "zint::hibcmpdf", Zint::Hibcmpdf::create );
glbarcode::Factory::registerType( "zint::hibcaz", Zint::Hibcaz::create );
glbarcode::Factory::registerType( "zint::i25", Zint::I25::create );
glbarcode::Factory::registerType( "zint::isbn", Zint::Isbn::create );
glbarcode::Factory::registerType( "zint::itf14", Zint::Itf14::create );
glbarcode::Factory::registerType( "zint::japan", Zint::Japan::create );
glbarcode::Factory::registerType( "zint::korea", Zint::Korea::create );
glbarcode::Factory::registerType( "zint::logm", Zint::Logm::create );
glbarcode::Factory::registerType( "zint::maxi", Zint::Maxi::create );
glbarcode::Factory::registerType( "zint::mpdf", Zint::Mpdf::create );
glbarcode::Factory::registerType( "zint::mqr", Zint::Mqr::create );
glbarcode::Factory::registerType( "zint::msi", Zint::Msi::create );
glbarcode::Factory::registerType( "zint::nve", Zint::Nve::create );
glbarcode::Factory::registerType( "zint::pdf", Zint::Pdf::create );
glbarcode::Factory::registerType( "zint::pdft", Zint::Pdft::create );
glbarcode::Factory::registerType( "zint::plan", Zint::Plan::create );
glbarcode::Factory::registerType( "zint::postnet", Zint::Postnet::create );
glbarcode::Factory::registerType( "zint::pharma", Zint::Pharma::create );
glbarcode::Factory::registerType( "zint::pharma2", Zint::Pharma2::create );
glbarcode::Factory::registerType( "zint::pzn", Zint::Pzn::create );
glbarcode::Factory::registerType( "zint::qr", Zint::Qr::create );
glbarcode::Factory::registerType( "zint::rm4", Zint::Rm4::create );
glbarcode::Factory::registerType( "zint::tele", Zint::Tele::create );
glbarcode::Factory::registerType( "zint::telex", Zint::Telex::create );
glbarcode::Factory::registerType( "zint::upc-a", Zint::UpcA::create );
glbarcode::Factory::registerType( "zint::upc-e", Zint::UpcE::create );
glbarcode::Factory::registerType( "zint::usps", Zint::Usps::create );
glbarcode::Factory::registerType( "zint::pls", Zint::Pls::create );
registerStyle( "ausp", "zint", tr("Austraila Post Standard"),
false, false, true, false, "12345678901234567890123", true, 23 );
registerStyle( "ausrp", "zint", tr("Australia Post Reply Paid"),
false, false, true, false, "12345678", true, 8 );
registerStyle( "ausrt", "zint", tr("Australia Post Route Code"),
false, false, true, false, "12345678", true, 8 );
registerStyle( "ausrd", "zint", tr("Australia Post Redirect"),
false, false, true, false, "12345678", true, 8 );
registerStyle( "aztec", "zint", tr("Aztec Code"),
false, false, true, false, "1234567890", true, 10 );
registerStyle( "azrun", "zint", tr("Aztec Rune"),
false, false, true, false, "255", true, 3 );
registerStyle( "cbr", "zint", tr("Codabar"),
true, true, true, false, "ABCDABCDAB", true, 10 );
registerStyle( "code1", "zint", tr("Code One"),
false, false, true, false, "0000000000", true, 10 );
registerStyle( "code11", "zint", tr("Code 11"),
true, true, true, false, "0000000000", true, 10 );
registerStyle( "c16k", "zint", tr("Code 16K"),
false, false, true, false, "0000000000", true, 10 );
registerStyle( "c25m", "zint", tr("Code 2 of 5 Matrix"),
true, true, true, false, "0000000000", true, 10 );
registerStyle( "c25i", "zint", tr("Code 2 of 5 IATA"),
true, true, true, false, "0000000000", true, 10 );
registerStyle( "c25dl", "zint", tr("Code 2 of 5 Data Logic"),
true, true, true, false, "0000000000", true, 10 );
registerStyle( "code32", "zint", tr("Code 32 (Italian Pharmacode)"),
true, true, true, false, "12345678", true, 8 );
registerStyle( "code39", "zint", tr("Code 39"),
true, true, false, false, "0000000000", true, 10 );
registerStyle( "code39e", "zint", tr("Code 39 Extended"),
true, true, true, false, "0000000000", true, 10 );
registerStyle( "code49", "zint", tr("Code 49"),
false, false, true, false, "0000000000", true, 10 );
registerStyle( "code93", "zint", tr("Code 93"),
true, true, true, false, "0000000000", true, 10 );
registerStyle( "code128", "zint", tr("Code 128"),
true, true, true, false, "0000000000", true, 10 );
registerStyle( "code128b", "zint", tr("Code 128 (Mode C supression)"),
true, true, true, false, "0000000000", true, 10 );
registerStyle( "daft", "zint", tr("DAFT Code"),
false, false, false, false, "DAFTDAFTDAFTDAFT", true, 16 );
registerStyle( "dmtx", "zint", tr("Data Matrix"),
false, false, true, false, "0000000000", true, 10 );
registerStyle( "dpl", "zint", tr("Deutsche Post Leitcode"),
true, true, true, false, "1234567890123", true, 13 );
registerStyle( "dpi", "zint", tr("Deutsche Post Identcode"),
true, true, true, false, "12345678901", true, 11 );
registerStyle( "kix", "zint", tr("Dutch Post KIX Code"),
false, false, true, false, "0000000000", true, 10 );
registerStyle( "ean", "zint", tr("EAN"),
true, true, true, false, "1234567890123", false, 13 );
registerStyle( "gmtx", "zint", tr("Grid Matrix"),
false, false, true, false, "0000000000", true, 10 );
registerStyle( "gs1-128", "zint", tr("GS1-128"),
true, true, true, false, "[01]12345678901234", false, 18 );
registerStyle( "rss14", "zint", tr("GS1 DataBar-14"),
true, true, true, false, "1234567890123", true, 13 );
registerStyle( "rssltd", "zint", "GS1 DataBar-14 Limited",
true, true, true, false, "1234567890123", true, 13 );
registerStyle( "rssexp", "zint", "GS1 DataBar Extended",
true, true, true, false, "[01]12345678901234", false, 18 );
registerStyle( "rsss", "zint", tr("GS1 DataBar-14 Stacked"),
false, false, true, false, "0000000000", true, 10 );
registerStyle( "rssso", "zint", tr("GS1 DataBar-14 Stacked Omni."),
false, false, true, false, "0000000000", true, 10 );
registerStyle( "rssse", "zint", tr("GS1 DataBar Extended Stacked"),
false, false, true, false, "[01]12345678901234", false, 18 );
registerStyle( "hibc128", "zint", tr("HIBC Code 128"),
true, true, true, false, "0000000000", true, 10 );
registerStyle( "hibc39", "zint", tr("HIBC Code 39"),
true, true, true, false, "0000000000", true, 10 );
registerStyle( "hibcdm", "zint", tr("HIBC Data Matrix"),
false, false, true, false, "0000000000", true, 10 );
registerStyle( "hibcqr", "zint", tr("HIBC QR Code"),
false, false, true, false, "0000000000", true, 10 );
registerStyle( "hibcpdf", "zint", tr("HIBC PDF417"),
false, false, true, false, "0000000000", true, 10 );
registerStyle( "hibcmpdf", "zint", tr("HIBC Micro PDF417"),
false, false, true, false, "0000000000", true, 10 );
registerStyle( "hibcaz", "zint", tr("HIBC Aztec Code"),
true, true, true, false, "0000000000", true, 10 );
registerStyle( "i25", "zint", tr("Interleaved 2 of 5"),
true, true, true, false, "0000000000", true, 10 );
registerStyle( "isbn", "zint", tr("ISBN"),
true, true, true, false, "123456789", false, 9 );
registerStyle( "itf14", "zint", tr("ITF-14"),
true, true, true, false, "0000000000", true, 10 );
registerStyle( "japan", "zint", tr("Japanese Postal"),
false, false, true, false, "0000000000", true, 10 );
registerStyle( "korea", "zint", tr("Korean Postal"),
true, true, true, false, "123456", false, 6 );
registerStyle( "logm", "zint", tr("LOGMARS"),
true, true, true, false, "0000000000", true, 10 );
registerStyle( "maxi", "zint", tr("Maxicode"),
false, false, false, false, "0000000000", true, 10 );
registerStyle( "mpdf", "zint", tr("Micro PDF417"),
false, false, true, false, "0000000000", true, 10 );
registerStyle( "mqr", "zint", tr("Micro QR Code"),
false, false, true, false, "0000000000", true, 10 );
registerStyle( "msi", "zint", tr("MSI Plessey"),
true, true, true, false, "0000000000", true, 10 );
registerStyle( "nve", "zint", tr("NVE-18"),
true, true, true, false, "12345678901234567", false, 17 );
registerStyle( "pdf", "zint", tr("PDF417"),
false, false, true, false, "0000000000", true, 10 );
registerStyle( "pdft", "zint", tr("PDF417 Truncated"),
false, false, true, false, "0000000000", true, 10 );
registerStyle( "plan", "zint", tr("PLANET"),
false, false, true, false, "0000000000", true, 10 );
registerStyle( "postnet", "zint", tr("PostNet"),
true, true, true, false, "0000000000", true, 10 );
registerStyle( "pharma", "zint", tr("Pharmacode"),
false, false, true, false, "123456", false, 6 );
registerStyle( "pharma2", "zint", tr("Pharmacode 2-track"),
false, false, true, false, "12345678", false, 8 );
registerStyle( "pzn", "zint", tr("Pharmazentral Nummer (PZN)"),
true, true, true, false, "123456", false, 6 );
registerStyle( "qr", "zint", tr("QR Code"),
true, true, true, false, "0000000000", true, 10 );
registerStyle( "rm4", "zint", tr("Royal Mail 4-State"),
false, false, true, false, "0000000000", true, 10 );
registerStyle( "tele", "zint", tr("Telepen"),
true, true, true, false, "0000000000", true, 10 );
registerStyle( "telex", "zint", tr("Telepen Numeric"),
true, true, true, false, "0000000000", true, 10 );
registerStyle( "upc-a", "zint", tr("UPC-A"),
true, true, true, false, "12345678901", false, 11 );
registerStyle( "upc-e", "zint", tr("UPC-E"),
true, true, true, false, "1234567", false, 7 );
registerStyle( "usps", "zint", tr("USPS One Code"),
false, false, true, false, "12345678901234567890", true, 20 );
registerStyle( "pls", "zint", tr("UK Plessey"),
true, true, true, false, "0000000000", true, 10 );
#endif // HAVE_ZINT
}
File diff suppressed because it is too large Load Diff
+858
View File
@@ -65,6 +65,864 @@ namespace glabels
};
/**
* AusRP Barcode
*/
class AusRP : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* AusRT Barcode
*/
class AusRT : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* AusRD Barcode
*/
class AusRD : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Aztec Barcode
*/
class Aztec : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Azrun Barcode
*/
class Azrun : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Cbr Barcode
*/
class Cbr : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Code1 Barcode
*/
class Code1 : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Code11 Barcode
*/
class Code11 : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* C16k Barcode
*/
class C16k : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* C25m Barcode
*/
class C25m : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* C25i Barcode
*/
class C25i : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* C25dl Barcode
*/
class C25dl : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Code32 Barcode
*/
class Code32 : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Code39 Barcode
*/
class Code39 : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Code39e Barcode
*/
class Code39e : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Code49 Barcode
*/
class Code49 : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Code93 Barcode
*/
class Code93 : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Code128 Barcode
*/
class Code128 : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Code128b Barcode
*/
class Code128b : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Daft Barcode
*/
class Daft : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Dmtx Barcode
*/
class Dmtx : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Dpl Barcode
*/
class Dpl : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Dpi Barcode
*/
class Dpi : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Kix Barcode
*/
class Kix : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Ean Barcode
*/
class Ean : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Hibc128 Barcode
*/
class Hibc128 : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Hibc39 Barcode
*/
class Hibc39 : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Hibcdm Barcode
*/
class Hibcdm : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Hibcqr Barcode
*/
class Hibcqr : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Hibcpdf Barcode
*/
class Hibcpdf : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Hibcmpdf Barcode
*/
class Hibcmpdf : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Hibcaz Barcode
*/
class Hibcaz : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* I25 Barcode
*/
class I25 : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Isbn Barcode
*/
class Isbn : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Itf14 Barcode
*/
class Itf14 : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Gmtx Barcode
*/
class Gmtx : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Gs1128 Barcode
*/
class Gs1128 : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Logm Barcode
*/
class Logm : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Rss14 Barcode
*/
class Rss14 : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Rssltd Barcode
*/
class Rssltd : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Rssexp Barcode
*/
class Rssexp : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Rsss Barcode
*/
class Rsss : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Rssso Barcode
*/
class Rssso : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Rssse Barcode
*/
class Rssse : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Pharma Barcode
*/
class Pharma : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Pharma2 Barcode
*/
class Pharma2 : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Pzn Barcode
*/
class Pzn : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Tele Barcode
*/
class Tele : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Telex Barcode
*/
class Telex : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Japan Barcode
*/
class Japan : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Korea Barcode
*/
class Korea : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Maxi Barcode
*/
class Maxi : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Mpdf Barcode
*/
class Mpdf : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Msi Barcode
*/
class Msi : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Mqr Barcode
*/
class Mqr : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Nve Barcode
*/
class Nve : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Plan Barcode
*/
class Plan : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Postnet Barcode
*/
class Postnet : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Pdf Barcode
*/
class Pdf : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Pdft Barcode
*/
class Pdft : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Qr Barcode
*/
class Qr : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Rm4 Barcode
*/
class Rm4 : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* UpcA Barcode
*/
class UpcA : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* UpcE Barcode
*/
class UpcE : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Usps Barcode
*/
class Usps : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
/**
* Pls Barcode
*/
class Pls : public Base
{
public:
static Barcode* create();
protected:
std::string encode( const std::string& cookedData ) override;
};
}
}